NetSurf
Todo List
Global ami_bitmap_tile (const struct redraw_context *ctx, struct bitmap *bitmap, int x, int y, int width, int height, colour bg, bitmap_flags_t flags)
is this logic logical?
Global ami_corewindow::icon_drop )(struct ami_corewindow *ami_cw, struct nsurl *url, const char *title, int x, int y)
this may not be very flexible but serves our current purposes
Global ami_font_plot_glyph (struct OutlineFont *ofont, struct RastPort *rp, uint16 *restrict char1, uint16 *restrict char2, uint32 x, uint32 y, uint32 emwidth, bool aa)
use OT_GlyphCode_32 so we get an error for old font engines
Global ami_font_width_glyph (struct OutlineFont *ofont, const uint16 *restrict char1, const uint16 *restrict char2, uint32 emwidth)
use OT_GlyphCode_32 so we get an error for old font engines
Global ami_gui_commandline (int *restrict argc, char **argv, int *restrict nargc, char **nargv)
allow IDNs
Global ami_hotlist_icon_drop (struct ami_corewindow *ami_cw, struct nsurl *url, const char *title, int x, int y)
this may not be very flexible but serves our current purposes
Global ami_menu_arexx_scan (struct ami_menu_data **md)
Rewrite this to not use ExAll()
Global ami_openscreen (void)
specify screen depth
Global ami_schedule_compare (const void *prev, const void *next)
a heap probably isn't the best idea now
Global ami_update_pointer (struct Window *win, gui_pointer_shape shape)
check this shouldn't be drag_in_progress
Global ami_window_at_pointer (int type)
check if OS4 version of this function will build on OS3, even if it isn't called
Global atari_nsurl_to_path (struct nsurl *url, char **path_out)
Need to check returning the unaltered path in this case is correct
Global atari_poll (void)

implement generic treeview redraw function.

rename hl to atari_hotlist or create getter for it...

Global atari_treeview_init2_callback )(struct core_window *cw)
atari add drag_status callback
Global box_construct_generate (dom_node *n, html_content *content, struct box *box, const css_computed_style *style)

This is currently incomplete. It just does enough to support the clearfix hack. (http://www.positioniseverything.net/easyclearing.html )

Not wise to drop const from the computed style

Global box_construct_marker (struct box *box, const char *title, struct box_construct_ctx *ctx, struct box *parent)
marker content (list-style-type)
Global box_construct_text (struct box_construct_ctx *ctx)

Dropping const here is not clever

Dropping const isn't clever

Global browser_window__handle_userpass_response (nsurl *url, const char *realm, const char *username, const char *password, void *pw)
QUERY - Eventually this should fill out the form NOT nav to the original location
Global browser_window_can_search (struct browser_window *bw)
We shouldn't have to know about specific content types here. There should be a content_is_searchable() call.
Global browser_window_content_done (struct browser_window *bw)
update browser window scrollbars before CONTENT_MSG_DONE
Global browser_window_content_ready (struct browser_window *bw)
Urldb / Thumbnails / Local history brokenness
Global browser_window_get_name (struct browser_window *bw, const char **name)
This does not consider behaviour wrt frames
Global browser_window_mouse_drag_end (struct browser_window *bw, browser_mouse_state mouse, int x, int y)
Remove this function, once these things are associated with content, rather than bw.
Global browser_window_place_caret (struct browser_window *bw, int x, int y, int height, const struct rect *clip)
intersect with bw viewport
Global browser_window_set_drag_type (struct browser_window *bw, browser_drag_type type, const struct rect *rect)
tell front end
Global browser_window_update (struct browser_window *bw, bool scroll_to_top)

don't do this if the user has scrolled

don't do this if the user has scrolled

don't do this if the user has scrolled

Global build_candidate_list (struct llcache_object ***lst_out, int *lst_len_out)

sort list here

calculate useful cost metrics to improve sorting.

Global content__get_source_data (struct content *c, size_t *size)
check if the content check should be an assert
Global content_llcache_callback (llcache_handle *llcache, const llcache_event *event, void *pw)

Error page?

It's not clear what error this is

Global content_msg_data::viewport_width
Consider getting screen_width, screen_height too.
Global convert_xml_to_box (struct box_construct_ctx *ctx)
Remove box_normalise_block
File cookie_manager.c

the viewing of cookies is pretty basic and it would be good to apply more processing of the values and perhaps top level domain suffix highlighting to give a better user information as to how the cookies interact with the users sessions.

In addition to removing cookies it might be useful to allow users to edit them, especially to alter expiry times.

Global coords_from_range (struct box *box, unsigned start_idx, unsigned end_idx, struct rdw_info *rdwi, bool do_marker)
it should be possible to reduce the redrawn area using the offsets
File corewindow.c
should the interface really be called coredrawable?
Global default_menu
The memory claimed for this menu should probably be released at some point
File download.c
The windows download functionality is very buggy this needs redoing
Global download_callback (llcache_handle *handle, const llcache_event *event, void *pw)
Lose ugly cast
Global dukky_get_current_value_of_event_handler (duk_context *ctx, dom_string *name, dom_event_target *et)
This is entirely wrong, but it's hard to get right
Global entries_hashmap_value_destroy (void *value)
Do we need to do any disk cleanup here? if so, meep!
Global fb_cw_mouse_press_event (fbtk_widget_t *widget, fbtk_callback_info *cbi)
frambuffer corewindow mouse event handling needs improving
Global fetch_javascript_handler (struct fetch_javascript_context *ctx)
This is currently completely unimplemented and just returns 204
Global fetch_msg::redirect
Use nsurl
Global fetch_resource_initialise (lwc_string *scheme)
should this exit with an error condition?
Global fetch_set_cookie (struct fetch *fetch, const char *data)
Long-term, this needs to be replaced with a comparison against the origin fetch URI. In the case where a nested object requests a fetch, the origin URI is the nested object's parent URI, whereas the referer for the fetch will be the nested object's URI.
Global fetch_start (nsurl *url, nsurl *referer, fetch_callback callback, void *p, bool only_2xx, const char *post_urlenc, const struct fetch_multipart_data *post_multipart, bool verifiable, bool downgrade_tls, const char *headers[], struct fetch **fetch_out)
The fetchers setup should return nserror and that be passed back rather than assuming a bad url
Global finalise (void)
This will cause the backing store to leak any outstanding memory allocations. This will probably best be done by a global use count.
Global form__select_process_selection (html_content *html, struct form_control *control, int item)
Even though the form code is effectively part of the html content handler, poking around inside contents is not good
Global form_acceptable_charset (struct form *form)
an improvement would be to choose an encoding acceptable to the server which covers as much of the input values as possible. Additionally, we need to handle the case where none of the acceptable encodings cover all the textual input values. For now, we just extract the first element of the charset list
Global form_dom_to_data (struct form *form, struct form_control *submit_control, struct fetch_multipart_data **fetch_data_out)

Replace this call with something DOMish

The chosen charset needs to be made available such that it can be included in the submission request (e.g. in the fetch's Content-Type header)

Global form_encode_item (const char *item, uint32_t len, const char *charset, const char *fallback)
Return charset used?
File fs_backing_store.c

Consider improving eviction sorting to include objects size and remaining lifetime and other cost metrics.

Implement mmap retrieval where supported.

Implement static retrieval for metadata objects as their heap lifetime is typically very short, though this may be obsoleted by a small object storage strategy.

Global gadget_mouse_action (html_content *html, browser_mouse_state mouse, int x, int y, struct mouse_action_state *mas)
Find a way to not ignore errors
Global get_config_home (char **config_home_out)
the meaning of empty is never defined so I am assuming it is a zero length string but is it supposed to mean "whitespace" and if so what counts as whitespace? (are tabs etc. counted or should isspace() be used)
Global gui_download_window_create (download_context *ctx, struct gui_window *gui)
change this to take a reference to the nsurl and use that value directly rather than using a fixed buffer.
Global gui_save_current_type
much of the state information for a save should probably be moved into a structure now since we could have multiple saves outstanding.
Global gui_window_get_dimensions (struct gui_window *gw, int *width, int *height)
consider gtk_widget_get_allocated_width()
Global gui_window_update_extent (struct gui_window *gw)
store content size.
Global GW_EVENT_UPDATE_EXTENT
this is used to update scroll bars does it need renaming? some frontends (windows) do not even implement it.
Global hlcache_clean (void *force_clean_flag)
This is over-zealous: all unused contents will be immediately destroyed. Ideally, we want to purge all unused contents that are using stale source data, and enough fresh contents such that the cache fits in the configured cache size limit.
Global hlcache_handle_get_content (const hlcache_handle *handle)
This may not be correct. Ideally, the client should never need to directly access a content object. It may, therefore, be better to provide a bunch of veneers here that take a hlcache_handle and invoke the corresponding content_ API. If there's no content object associated with the hlcache_handle (e.g. because the source data is still being fetched, so it doesn't exist yet), then these veneers would behave as a NOP. The important thing being that the client need not care about this possibility and can just call the functions with impugnity.
Global hlcache_handle_retrieve (nsurl *url, uint32_t flags, nsurl *referer, llcache_post_data *post, hlcache_handle_callback cb, void *pw, hlcache_child_context *child, content_type accepted_types, hlcache_handle **result)

Is there any way to sensibly reduce the number of parameters here?

The above rules should be encoded in the handler_map.

Global HOOKF (void, ami_menu_item_edit_copy, APTR, window, struct IntuiMessage *)
It should be checked that the lifetime of the objects containing the values returned (and the constness cast away) is safe.
Global html__dom_user_data_handler (dom_node_operation operation, dom_string *key, void *_data, struct dom_node *src, struct dom_node *dst)
Get rid of this crap eventually
Global html__image_coords_dom_user_data_handler (dom_node_operation operation, dom_string *key, void *_data, struct dom_node *src, struct dom_node *dst)
Get rid of this crap eventually
Global html_box_convert_done (html_content *c, bool success)
should this call html_object_free_objects(c); like the other error paths
Global html_clone (const struct content *old, struct content **newc)
Clone HTML specifics
Global html_get_box_tree (struct hlcache_handle *h)
This API must die, as must all use of the box tree outside of HTML content handler
Global html_get_dimensions (html_content *htmlc)
Change nsoption font sizes to px.
Global html_keypress (struct content *c, uint32_t key)
At the moment, the front end interface for keypress only gives us a UCS4 key value. This doesn't doesn't have all the information we need to fill out the event properly. We don't get to know about modifier keys, and things like CTRL+C are passed in as NS_KEY_COPY_SELECTION, a magic value outside the valid Unicode range.
Global html_object_refresh (void *p)
handle memory exhaustion
File html_save.h
Investigate altering this API as it is only used for exporting the html content to disc.
File imagemap.c
should this should use the general hashmap instead of its own
Global imagemap_extract (struct html_content *c)

check this

check this

Global js_fire_event (jsthread *thread, const char *type, struct dom_document *doc, struct dom_node *target)
Make this more generic, this only handles load and only targetting the window, so that we actually stand a chance of getting 3.4 out.
Global layout__get_li_value (dom_node *li_node, dom_long *value_out)
dom_html_li_element_get_value() is rubbish and we can't tell a lack of value attribute or invalid value from a perfectly valid '-1'.
Global layout__get_ol_start (dom_node *ol_node, dom_long *start_out)
see layout__get_li_value().
Global layout_absolute (struct box *box, struct box *containing_block, int cx, int cy, html_content *content)

inline ancestors

Inline ancestors

Global layout_inline_container (struct box *inline_container, int width, struct box *cont, int cx, int cy, html_content *content)
fix wrapping so that a box with horizontal scrollbar will shrink back to 'width' if no word is wider than 'width' (Or just set curwidth = width and have the multiword lines wrap to the min width)
Global layout_line (struct box *first, int *width, int *y, int cx, int cy, struct box *cont, bool indent, bool has_text_children, html_content *content, struct box **next_box)

handle errors

handle errors

handle errors

handle errors

handle errors

proper vertical alignment handling

Global layout_minmax_block (struct box *block, const struct gui_layout_table *font_func, const html_content *content)
do we need to know the min/max width of the iframe's content?
Global layout_minmax_line (struct box *first, int *line_min, int *line_max, bool first_line, bool *line_has_height, const struct gui_layout_table *font_func, const html_content *content)
handle errors
Global layout_position_relative (const css_unit_ctx *unit_len_ctx, struct box *root, struct box *fp, int fx, int fy)
ensure containing box is large enough after moving boxes
Global layout_table (struct box *table, int available_width, html_content *content)
distribute spare height over the row groups / rows / cells
Global libdom_hubbub_error_to_nserror (dom_hubbub_error error)
better error handling and reporting
File llcache.c

instrument and (auto)tune

fix writeout conditions and ordering.

Global llcache_fetch_auth (llcache_object *object, const char *realm)

More appropriate error message

If there was no WWW-Authenticate header, use response body

Global llcache_fetch_callback (const fetch_msg *msg, void *p)
Consider using errorcode for something
Global llcache_fetch_cert_error (llcache_object *object)

More appropriate error message

More appropriate error message

Global llcache_fetch_parse_cache_control (llcache_object *object, char *value)
When we get a disk cache we should distinguish between these two.
Global llcache_fetch_process_header (llcache_object *object, const uint8_t *data, size_t len)
Properly parse the response line
Global llcache_fetch_redirect (llcache_object *object, const char *target, llcache_object **replacement)
300, 305, 307 with POST
Global llcache_fetch_ssl_error (llcache_object *object)
More appropriate error message
Global llcache_handle_get_header (const llcache_handle *handle, const char *key)

Make the key an enumeration, to avoid needless string comparisons

Forcing the client to parse the header value seems wrong. Better would be to return the actual value part and an array of key-value pairs for any additional parameters.

Deal with multiple headers of the same key (e.g. Set-Cookie)

Class llcache_object
Consider whether a list is a sane container.
Global llcache_object::source_data
We need a generic dynamic buffer object
Global llcache_process_metadata (llcache_object *object)
really not sure this is right, nothing is allocated here?
Global local_history_get_url (struct local_history_session *session, int x, int y, struct nsurl **url_out)
the returned url should be a referenced nsurl.
Global main (int argc, char **argv)
logging file descriptor update belongs in a nslog_init callback
Global MAX_RESPATH
why is this necessary for atari to get PATH_MAX and is there a better way
Global navigate_internal_real (struct browser_window *bw, struct browser_fetch_parameters *params)
does this always try and download even unverifiable content?
Global node_has_class (void *pw, void *node, lwc_string *name, bool *match)
: Ensure that libdom performs case-insensitive matching in quirks mode
Global node_has_id (void *pw, void *node, lwc_string *name, bool *match)
Assumes an HTML DOM
Global node_id (void *pw, void *node, lwc_string **id)
Assumes an HTML DOM
Global node_is_active (void *pw, void *node, bool *match)
Support active nodes
Global node_is_checked (void *pw, void *node, bool *match)
Support checked nodes
Global node_is_disabled (void *pw, void *node, bool *match)
Support disabled nodes
Global node_is_enabled (void *pw, void *node, bool *match)
Support enabled nodes
Global node_is_focus (void *pw, void *node, bool *match)
Support focussed nodes
Global node_is_hover (void *pw, void *node, bool *match)
Support hovering
Global node_is_lang (void *pw, void *node, lwc_string *lang, bool *match)
Support languages
Global node_is_target (void *pw, void *node, bool *match)
Support target
Global nscss_create (const content_handler *handler, lwc_string *imime_type, const http_parameter *params, llcache_handle *llcache, const char *fallback_charset, bool quirks, struct content **c)
libcss will take this as gospel, which is wrong
Global nscss_handle_import (void *pw, css_stylesheet *parent, lwc_string *url)

Constructing nsurl for referer here is silly, avoid

Why aren't we getting a relative url part, to join?

fallback charset

Global nscss_parse_colour (const char *data, css_color *result)
Implement HTML5's utterly insane legacy colour parsing
Global nsgtk_data_from_resname (const char *resname, const uint8_t **data_out, size_t *data_size_out)
consider adding compiled inline resources for things other than pixbufs.
Global nsgtk_init (int *pargc, char ***pargv, char **cache_home)
decide if message load faliure should be fatal
Global nsgtk_scaffolding_enable_edit_actions_sensitivity (struct nsgtk_scaffolding *g)
toolbar sensitivity
Global nsgtk_scaffolding_update_edit_actions_sensitivity (struct nsgtk_scaffolding *g)
this needs to update toolbar sensitivity
Global nsgtk_show_uri (GdkScreen *screen, const gchar *uri, guint32 timestamp, GError **error)
add uri opening for before gtk 2.14
Global nsgtk_window_button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer data)
determine if hiding the caret here is necessary
Global nsgtk_window_tabs_add (GtkNotebook *notebook, GtkWidget *page, guint page_num, struct nsgtk_scaffolding *g)

toolbar sensitivity

next/previous tab ought to only be visible if there is such a tab

Global nsgtk_window_tabs_remove (GtkNotebook *notebook, GtkWidget *page, guint page_num, struct nsgtk_scaffolding *gs)
toolbar sensitivity
Global nsico_is_opaque (struct content *c)
Pick best size for purpose. Currently assumes it's for a URL bar.
Global nsoption_init (nsoption_set_default_t *set_default, struct nsoption_s **popts, struct nsoption_s **pdefs)
it would be better if the frontends actually set values in the passed in table instead of assuming the global one.
Global nsoption_read (const char *path, struct nsoption_s *opts)
is this an API bug not being a parameter
Global nsvideo_clone (const struct content *old, struct content **newc)
Implement
Global nsvideo_create (const content_handler *handler, lwc_string *imime_type, const http_parameter *params, llcache_handle *llcache, const char *fallback_charset, bool quirks, struct content **c)
Create appsink & register with playbin
Global nsvideo_get_internal (const struct content *c, void *context)
Return pointer to bitmap containing current frame, if any?
Global nsvideo_redraw (struct content *c, struct content_redraw_data *data, const struct rect *clip, const struct redraw_context *ctx)
Implement
Global nsvideo_type (void)
Lies
Global nsws_drawable_paint (struct gui_window *gw, HWND hwnd)
work out why the heck scroll needs scaling
Global nsws_window_drawable_event_callback (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
win32 clear operation deletes the contents of the selection but ns clear selection only removes the highlight.
Global nsws_window_toolbar_command (struct gui_window *gw, int notification_code, int identifier, HWND ctrl_window)
This entire command handler appears superfluous.
Global openmenu_button_clicked_cb (GtkWidget *widget, gpointer data)
stop assuming the context is a gui window
Global page_info__set_text (struct page_info *pi)
Use messages for internationalisation.
Global plot_path (const struct redraw_context *ctx, const plot_style_t *pstyle, const float *p, unsigned int n, const float transform[6])
Implement atari path plot
File plotters.c
remove the use of the gdk structure for clipping
Global read_vdi_sysinfo (short vdih, struct s_vdi_sysinfo *info)
this long is being cast to a pointer
Global REDRAW_MAX
get rid of REDRAW_MAX – need to be able to know window size
Global riscos_basename (const char *path, char **str, size_t *size)
check this leafname translation is actually required
Global ro_corewindow_fini (struct ro_corewindow *ro_cw)
need to consider freeing of toolbar
Global ro_gui_get_icon_string (wimp_w w, wimp_i i)
this doesn't do local encoding -> UTF-8 to match what is done in ro_gui_set_icon_string.
Global ro_gui_save_content (struct hlcache_handle *h, char *path, bool force_overwrite)
do this earlier?
Global ro_gui_save_drag_end (wimp_dragged *drag, void *data)
we're supposed to set this if drag-n-drop used
Global ro_gui_search_bw_searchable (struct browser_window *bw)
Should have content_is_searchable() api
Global ro_gui_toolbar_dataload (struct gui_window *g, wimp_message *message)
This belongs in the toolbar module, and should be moved there once the module is able to usefully handle its own events.
Global ro_gui_url_complete_click (wimp_pointer *pointer)
The interaction of components here is hideous
Global ro_gui_url_suggest_get_menu_available (void)
Ideally this should be able to decide if there's a menu available without actually having to build it all.
Global ro_gui_window_content_export_types (struct hlcache_handle *h, bool *export_draw, bool *export_sprite)
This should probably be somewhere else but in window.c, and should probably even be done in content_().
Global ro_print_current_window

landscape format pages

be somewhat more intelligent and try not to crop pages half way up a line of text

make use of print stylesheets

Global ro_textarea_create (wimp_w parent, wimp_i icon, unsigned int flags, const char *font_family, unsigned int font_size, rufl_style font_style)
Better line height calculation
Global ro_textarea_insert_text (uintptr_t self, unsigned int index, const char *text)
calculate line to reflow from
Global ro_textarea_key_press (wimp_key *key)

Move caret down a line

handle command keys

Move caret up a line

line start

line end

line end

Global ro_textarea_reflow (struct text_area *ta, unsigned int line)

create horizontal scrollbar if needed

Selection handling

pay attention to line parameter

Global ro_textarea_replace_text (uintptr_t self, unsigned int start, unsigned int end, const char *text)
calculate line to reflow from
Global SCHEDULE_TIME
The schedule timeout should be profiled to see if there is a better value or even if it needs to be dynamic.
Global scrollbar_drag_start_internal (struct scrollbar *s, int x, int y, bool content_drag, bool pair)
some proper numbers please!
File search.c
this whole thing should be named find rather than search as that generally means web search and is confusing.
Global set_defaults (struct nsoption_s *defaults)
The wimp_COLOUR_... values here map the colour definitions to parts of the RISC OS desktop palette. In places this is fairly arbitrary, and could probably do with re-checking.
Global sibling_node (void *pw, void *node, void **sibling)
Sort out reference counting
Global SPECULATE_SMALL
QUERY - Remove this import later
Global squash_whitespace (const char *s)
determine if squash_whitespace utf-8 safe and that it needs to be
Global store_read_file (struct store_state *state, struct store_entry *bse, int elem_idx)
should this invalidate the entry?
Global store_write_file (struct store_state *state, struct store_entry *bse, int elem_idx)
Delete the file?
Global storestate
Investigate if there is a way to have a context rather than use a global.
Global table_border_is_more_eyecatching (const css_unit_ctx *unit_len_ctx, const struct border *a, box_type a_src, const struct border *b, box_type b_src)

Currently assumes b satisifies this

COL/COL_GROUP

COL/COL_GROUP

Global table_used_bottom_border_for_cell (const css_unit_ctx *unit_len_ctx, struct box *cell)
Can cells span row groups?
Global table_used_left_border_for_cell (const css_unit_ctx *unit_len_ctx, struct box *cell)

can cells span row groups?

Need column and column_group, too

Global table_used_right_border_for_cell (const css_unit_ctx *unit_len_ctx, struct box *cell)

can cells span row groups?

Need column and column_group, too

Global theme_current
provide a proper interface for these and make them static again!
Global toolbar_popup_context_menu_cb (GtkToolbar *toolbar, gint x, gint y, gint button, gpointer data)
stop assuming the context is a gui window
Global ua_default_for_property (void *pw, uint32_t property, css_hint *hint)

Not exactly useful :)

Fix this when we have voice-family done

Global urldb__host_is_ip_address (const char *host)
FIXME Some parts of urldb.c make confusions between hosts and "prefixes", we can sometimes be erroneously passed more than just a host. Sometimes we may be passed trailing slashes, or even whole path segments. A specific criminal in this class is urldb_iterate_partial, which takes a prefix to search for, but passes that prefix to functions that expect only hosts.
Global urldb_concat_cookie (struct cookie_internal_data *c, int version, int *used, int *alloc, char **buf)

should we XX-encode [;HT,SP] ?

Should we strip escaping backslashes?

Global urldb_iterate_entries_path (const struct path_data *parent, bool(*url_callback)(nsurl *url, const struct url_data *data), bool(*cookie_callback)(const struct cookie_data *data))
handle fragments?
Global urldb_parse_cookie (nsurl *url, const char **cookie)
is silently truncating overlong names/values wise?
Global urldb_set_cookie (const char *header, struct nsurl *url, struct nsurl *referrer)
In future, we should consult a TLD service instead of just looking for embedded dots.
Global urldb_write_paths (const struct path_data *parent, const char *host, FILE *fp, char **path, int *path_alloc, int *path_used, time_t expiry)
handle fragments?
Global user_agent_build_string (void)
this needs handling better
Global utf8_convert (const char *string, size_t slen, const char *from, const char *to, char **result_out, size_t *result_len_out)
handle the various cases properly There are 3 possible error cases: a) Insufficiently large output buffer b) Invalid input byte sequence c) Incomplete input sequence
File utils.h
Many of these functions and macros should have their own headers.
Global websearch_entry_activate_cb (GtkWidget *widget, gpointer data)
make this user selectable to switch between opening in new and navigating current window. Possibly improve core search_web interfaces
Global websearch_entry_button_press_cb (GtkWidget *widget, GdkEventFocus *f, gpointer data)
this does not work well, different behaviour wanted perhaps?
Global windows_nsurl_to_path (struct nsurl *url, char **path_out)
Need to check returning the unaltered path in this case is correct
Global windows_path_to_nsurl (const char *path, struct nsurl **url_out)
check if this should be url escaping the path.
Global WinMain (HINSTANCE hInstance, HINSTANCE hLastInstance, LPSTR lpcli, int ncmd)
decide if message load faliure should be fatal
Global xdg_get_exec_cmd (const char *path, const char *desktop)
The parsing of the desktop file is badly incomplete and needs improving. For example the handling of the = delimiter is wrong and selection from the "Desktop Entry" group is completely absent.