From 1999becb42cc639d470405e8be33bf66ab93ef81 Mon Sep 17 00:00:00 2001 From: Richard Wilson Date: Wed, 6 Sep 2006 14:44:42 +0000 Subject: Finish event based GUI system transition and begin code cleanup. svn path=/trunk/netsurf/; revision=2922 --- !NetSurf/Resources/de/Templates,fec | Bin 18840 -> 18840 bytes !NetSurf/Resources/en/Templates,fec | Bin 18781 -> 18781 bytes !NetSurf/Resources/fr/Templates,fec | Bin 19194 -> 19194 bytes !NetSurf/Resources/nl/Templates,fec | Bin 18867 -> 18867 bytes riscos/401login.c | 19 +++- riscos/configure.c | 2 +- riscos/dialog.c | 1 - riscos/download.c | 65 +++++++---- riscos/gui.c | 221 +++++++----------------------------- riscos/gui.h | 27 ----- riscos/query.c | 186 ++++++++++++++---------------- riscos/query.h | 3 - riscos/sslcert.c | 19 +++- riscos/theme.c | 95 ++++++++-------- riscos/theme.h | 1 - riscos/window.c | 135 +++++++++++++++------- utils/utils.h | 1 - 17 files changed, 335 insertions(+), 440 deletions(-) diff --git a/!NetSurf/Resources/de/Templates,fec b/!NetSurf/Resources/de/Templates,fec index 9e9adcce7..0834df26e 100755 Binary files a/!NetSurf/Resources/de/Templates,fec and b/!NetSurf/Resources/de/Templates,fec differ diff --git a/!NetSurf/Resources/en/Templates,fec b/!NetSurf/Resources/en/Templates,fec index a821819cd..c2c83bda8 100644 Binary files a/!NetSurf/Resources/en/Templates,fec and b/!NetSurf/Resources/en/Templates,fec differ diff --git a/!NetSurf/Resources/fr/Templates,fec b/!NetSurf/Resources/fr/Templates,fec index 49ca62f20..013b4dba4 100644 Binary files a/!NetSurf/Resources/fr/Templates,fec and b/!NetSurf/Resources/fr/Templates,fec differ diff --git a/!NetSurf/Resources/nl/Templates,fec b/!NetSurf/Resources/nl/Templates,fec index 6b58eb0e1..d882835ad 100644 Binary files a/!NetSurf/Resources/nl/Templates,fec and b/!NetSurf/Resources/nl/Templates,fec differ diff --git a/riscos/401login.c b/riscos/401login.c index 080a99b2f..9eec1c0ba 100644 --- a/riscos/401login.c +++ b/riscos/401login.c @@ -26,6 +26,13 @@ #ifdef WITH_AUTH +#define ICON_401LOGIN_LOGIN 0 +#define ICON_401LOGIN_CANCEL 1 +#define ICON_401LOGIN_HOST 2 +#define ICON_401LOGIN_REALM 3 +#define ICON_401LOGIN_USERNAME 4 +#define ICON_401LOGIN_PASSWORD 5 + static void ro_gui_401login_close(wimp_w w); static bool ro_gui_401login_apply(wimp_w w); static void ro_gui_401login_open(struct browser_window *bw, const char *host, @@ -157,12 +164,14 @@ void ro_gui_401login_close(wimp_w w) free(session->url); free(session); - ro_gui_wimp_event_finalise(w); - + ro_gui_dialog_close(w); error = xwimp_delete_window(w); - if (error) - LOG(("xwimp_delete_window: 0x%x: %s", - error->errnum, error->errmess)); + if (error) { + LOG(("xwimp_delete_window: 0x%x:%s", + error->errnum, error->errmess)); + warn_user("WimpError", error->errmess); + } + ro_gui_wimp_event_finalise(w); } diff --git a/riscos/configure.c b/riscos/configure.c index 1c72087ff..643576974 100644 --- a/riscos/configure.c +++ b/riscos/configure.c @@ -138,7 +138,6 @@ bool ro_gui_configure_click(wimp_pointer *pointer) ro_gui_wimp_event_register_close_window( tool->w, ro_gui_configure_close); - } else { ro_gui_dialog_open_top(tool->w, NULL, 0, 0); } @@ -157,6 +156,7 @@ void ro_gui_configure_close(wimp_w w) tool->open = false; if (tool->finalise) tool->finalise(w); + ro_gui_dialog_close(w); break; } } diff --git a/riscos/dialog.c b/riscos/dialog.c index fdd71ba77..2f83c1496 100644 --- a/riscos/dialog.c +++ b/riscos/dialog.c @@ -398,7 +398,6 @@ void ro_gui_dialog_close(wimp_w close) error->errnum, error->errmess)); warn_user("WimpError", error->errmess); } - ro_gui_wimp_event_close_window(close); } diff --git a/riscos/download.c b/riscos/download.c index fb4ddc045..d8266c633 100644 --- a/riscos/download.c +++ b/riscos/download.c @@ -38,12 +38,19 @@ #include "netsurf/riscos/save.h" #include "netsurf/riscos/query.h" #include "netsurf/riscos/wimp.h" +#include "netsurf/riscos/wimp_event.h" #include "netsurf/utils/log.h" #include "netsurf/utils/messages.h" #include "netsurf/utils/url.h" #include "netsurf/utils/utf8.h" #include "netsurf/utils/utils.h" +#define ICON_DOWNLOAD_ICON 0 +#define ICON_DOWNLOAD_URL 1 +#define ICON_DOWNLOAD_PATH 2 +#define ICON_DOWNLOAD_DESTINATION 3 +#define ICON_DOWNLOAD_PROGRESS 5 +#define ICON_DOWNLOAD_STATUS 6 typedef enum { @@ -122,22 +129,25 @@ static bool ro_gui_download_save(struct gui_download_window *dw, const char *file_name, bool force_overwrite); static void ro_gui_download_send_dataload(struct gui_download_window *dw); static void ro_gui_download_window_destroy_wrapper(void *p); +static bool ro_gui_download_window_destroy(struct gui_download_window *dw, bool quit); static void ro_gui_download_close_confirmed(query_id, enum query_response res, void *p); static void ro_gui_download_close_cancelled(query_id, enum query_response res, void *p); static void ro_gui_download_overwrite_confirmed(query_id, enum query_response res, void *p); static void ro_gui_download_overwrite_cancelled(query_id, enum query_response res, void *p); +static bool ro_gui_download_click(wimp_pointer *pointer); +static bool ro_gui_download_keypress(wimp_key *key); +static void ro_gui_download_close(wimp_w w); + static const query_callback close_funcs = { ro_gui_download_close_confirmed, - ro_gui_download_close_cancelled, ro_gui_download_close_cancelled }; static const query_callback overwrite_funcs = { ro_gui_download_overwrite_confirmed, - ro_gui_download_overwrite_cancelled, ro_gui_download_overwrite_cancelled }; @@ -328,6 +338,11 @@ struct gui_download_window *gui_download_window_create(const char *url, ro_gui_dialog_open(dw->window); + ro_gui_wimp_event_set_user_data(dw->window, dw); + ro_gui_wimp_event_register_mouse_click(dw->window, ro_gui_download_click); + ro_gui_wimp_event_register_keypress(dw->window, ro_gui_download_keypress); + ro_gui_wimp_event_register_close_window(dw->window, ro_gui_download_close); + /* issue the warning now, so that it appears in front of the download * window! */ if (space_warning) @@ -686,23 +701,6 @@ void gui_download_window_done(struct gui_download_window *dw) } -/** - * Convert a RISC OS window handle to a gui_download_window. - * - * \param w RISC OS window handle - * \return pointer to a structure if found, 0 otherwise - */ - -struct gui_download_window * ro_gui_download_window_lookup(wimp_w w) -{ - struct gui_download_window *dw; - for (dw = download_window_list; dw; dw = dw->next) - if (dw->window == w) - return dw; - return 0; -} - - /** * Handle Mouse_Click events in a download window. * @@ -710,13 +708,14 @@ struct gui_download_window * ro_gui_download_window_lookup(wimp_w w) * \param pointer block returned by Wimp_Poll */ -void ro_gui_download_window_click(struct gui_download_window *dw, - wimp_pointer *pointer) +bool ro_gui_download_click(wimp_pointer *pointer) { + struct gui_download_window *dw; char command[256] = "Filer_OpenDir "; char *dot; os_error *error; + dw = (struct gui_download_window *)ro_gui_wimp_event_get_user_data(pointer->w); if (pointer->i == ICON_DOWNLOAD_ICON && !dw->error && !dw->saved) { const char *sprite = ro_gui_get_icon_string(pointer->w, pointer->i); @@ -738,6 +737,7 @@ void ro_gui_download_window_click(struct gui_download_window *dw, } } } + return true; } @@ -749,8 +749,11 @@ void ro_gui_download_window_click(struct gui_download_window *dw, * \return true iff key press handled */ -bool ro_gui_download_window_keypress(struct gui_download_window *dw, wimp_key *key) +bool ro_gui_download_keypress(wimp_key *key) { + struct gui_download_window *dw; + + dw = (struct gui_download_window *)ro_gui_wimp_event_get_user_data(key->w); switch (key->c) { case wimp_KEY_ESCAPE: @@ -1261,12 +1264,24 @@ void ro_gui_download_send_dataload(struct gui_download_window *dw) } +/** + * Handle closing of download window + */ +void ro_gui_download_close(wimp_w w) +{ + struct gui_download_window *dw; + + dw = (struct gui_download_window *)ro_gui_wimp_event_get_user_data(w); + ro_gui_download_window_destroy(dw, false); +} + + /** * Close a download window and free any related resources. * * \param dw download window * \param quit destroying because we're quitting the whole app - * \return true iff window destroyed, not waiting for user confirmation + * \return true if window destroyed, not waiting for user confirmation */ bool ro_gui_download_window_destroy(struct gui_download_window *dw, bool quit) @@ -1320,12 +1335,14 @@ bool ro_gui_download_window_destroy(struct gui_download_window *dw, bool quit) dw->next->prev = dw->prev; /* delete window */ + ro_gui_dialog_close(dw->window); error = xwimp_delete_window(dw->window); if (error) { LOG(("xwimp_delete_window: 0x%x: %s", error->errnum, error->errmess)); warn_user("WimpError", error->errmess); } + ro_gui_wimp_event_finalise(dw->window); /* close download file */ if (dw->file) { @@ -1447,7 +1464,7 @@ void ro_gui_download_overwrite_confirmed(query_id id, enum query_response res, v * Respond to PreQuit message, displaying a prompt message if we need * the user to confirm the shutdown. * - * \return true iff we can shutdown straightaway + * \return true if we can shutdown straightaway */ bool ro_gui_download_prequit(void) diff --git a/riscos/gui.c b/riscos/gui.c index 6dfe2657a..019b290fa 100644 --- a/riscos/gui.c +++ b/riscos/gui.c @@ -142,14 +142,8 @@ const char * NETSURF_DIR; char *default_stylesheet_url; char *adblock_stylesheet_url; -#ifndef ncos static const char *task_name = "NetSurf"; #define CHOICES_PREFIX ".WWW.NetSurf." -#else -static const char *task_name = "NCNetSurf"; -#define CHOICES_PREFIX ".Choices.NetSurf." -#endif - /** The pointer is over a window which is tracking mouse movement. */ static bool gui_track = false; @@ -238,17 +232,16 @@ static struct } screen_info; static void ro_gui_create_dirs(void); +static void ro_gui_create_dir(char *path); static void ro_gui_choose_language(void); static void ro_gui_icon_bar_create(void); static void ro_gui_signal(int sig); static void ro_gui_cleanup(void); static void ro_gui_handle_event(wimp_event_no event, wimp_block *block); static void ro_gui_null_reason_code(void); -static void ro_gui_redraw_window_request(wimp_draw *redraw); static void ro_gui_close_window_request(wimp_close *close); static void ro_gui_pointer_leaving_window(wimp_leaving *leaving); static void ro_gui_pointer_entering_window(wimp_entering *entering); -static void ro_gui_mouse_click(wimp_pointer *pointer); static bool ro_gui_icon_bar_click(wimp_pointer *pointer); static void ro_gui_check_resolvers(void); static void ro_gui_drag_end(wimp_dragged *drag); @@ -475,8 +468,8 @@ void gui_init(int argc, char** argv) */ void ro_gui_create_dirs(void) { - char *path; char buf[256]; + char *path; /* Choices */ path = getenv("NetSurf$ChoicesSave"); @@ -484,58 +477,46 @@ void ro_gui_create_dirs(void) die("Failed to find NetSurf Choices save path"); snprintf(buf, sizeof(buf), "%s", path); - path = buf; - - /* Given a path x.y.z, this will try to create x, x.y */ - while ((path = strchr(path, '.'))) { - *path = '\0'; - xosfile_create_dir(buf, 0); - *path++ = '.'; - } + ro_gui_create_dir(buf); /* URL */ snprintf(buf, sizeof(buf), "%s", option_url_save); - path = buf; - - while ((path = strchr(path, '.'))) { - *path = '\0'; - xosfile_create_dir(buf, 0); - *path++ = '.'; - } + ro_gui_create_dir(buf); /* Hotlist */ snprintf(buf, sizeof(buf), "%s", option_hotlist_save); - path = buf; - - while ((path = strchr(path, '.'))) { - *path = '\0'; - xosfile_create_dir(buf, 0); - *path++ = '.'; - } + ro_gui_create_dir(buf); /* Recent */ snprintf(buf, sizeof(buf), "%s", option_recent_save); - path = buf; - - while ((path = strchr(path, '.'))) { - *path = '\0'; - xosfile_create_dir(buf, 0); - *path++ = '.'; - } + ro_gui_create_dir(buf); /* Theme */ snprintf(buf, sizeof(buf), "%s", option_theme_save); - path = buf; - - while ((path = strchr(path, '.'))) { - *path = '\0'; - xosfile_create_dir(buf, 0); - *path++ = '.'; - } + ro_gui_create_dir(buf); /* and the final directory part (as theme_save is a directory) */ xosfile_create_dir(buf, 0); } + +/** + * Create directory structure for a path + * + * Given a path of x.y.z directories x and x.y will be created + * + * \param path the directory path to create + */ +void ro_gui_create_dir(char *path) +{ + char *cur = path; + while ((cur = strchr(cur, '.'))) { + *cur = '\0'; + xosfile_create_dir(path, 0); + *cur++ = '.'; + } +} + + /** * Choose the language to use. */ @@ -618,7 +599,6 @@ const char *ro_gui_default_language(void) { void ro_gui_icon_bar_create(void) { -#ifndef ncos os_error *error; wimp_icon_create icon = { @@ -635,7 +615,6 @@ void ro_gui_icon_bar_create(void) } ro_gui_wimp_event_register_mouse_click(wimp_ICON_BAR, ro_gui_icon_bar_click); -#endif } @@ -904,7 +883,7 @@ void ro_gui_handle_event(wimp_event_no event, wimp_block *block) break; case wimp_REDRAW_WINDOW_REQUEST: - ro_gui_redraw_window_request(&block->redraw); + ro_gui_wimp_event_redraw_window(&block->redraw); break; case wimp_OPEN_WINDOW_REQUEST: @@ -924,7 +903,7 @@ void ro_gui_handle_event(wimp_event_no event, wimp_block *block) break; case wimp_MOUSE_CLICK: - ro_gui_mouse_click(&block->pointer); + ro_gui_wimp_event_mouse_click(&block->pointer); break; case wimp_USER_DRAG_BOX: @@ -1025,50 +1004,23 @@ void ro_gui_null_reason_code(void) } -/** - * Handle Redraw_Window_Request events. - */ - -void ro_gui_redraw_window_request(wimp_draw *redraw) -{ - struct gui_window *g; - - if (ro_gui_wimp_event_redraw_window(redraw)) - return; - - g = ro_gui_window_lookup(redraw->w); - if (g) - ro_gui_window_redraw(g, redraw); -} - - /** * Handle Open_Window_Request events. */ void ro_gui_open_window_request(wimp_open *open) { - struct gui_window *g; os_error *error; if (ro_gui_wimp_event_open_window(open)) return; - g = ro_gui_window_lookup(open->w); - if (g) { - ro_gui_window_open(g, open); - } else { - error = xwimp_open_window(open); - if (error) { - LOG(("xwimp_open_window: 0x%x: %s", - error->errnum, error->errmess)); - warn_user("WimpError", error->errmess); - return; - } - - g = ro_gui_status_lookup(open->w); - if (g && g->toolbar) - ro_gui_theme_resize_toolbar_status(g->toolbar); + error = xwimp_open_window(open); + if (error) { + LOG(("xwimp_open_window: 0x%x: %s", + error->errnum, error->errmess)); + warn_user("WimpError", error->errmess); + return; } } @@ -1079,70 +1031,9 @@ void ro_gui_open_window_request(wimp_open *open) void ro_gui_close_window_request(wimp_close *close) { - struct gui_window *g; - struct gui_download_window *dw; - wimp_pointer pointer; - os_error *error; - char *temp_name, *r; - char *filename; - struct content *content = NULL; - - if ((g = ro_gui_window_lookup(close->w)) != NULL) { - error = xwimp_get_pointer_info(&pointer); - if (error) { - LOG(("xwimp_get_pointer_info: 0x%x: %s", - error->errnum, error->errmess)); - warn_user("WimpError", error->errmess); - return; - } - if (g->bw) - content = g->bw->current_content; - if (pointer.buttons & wimp_CLICK_ADJUST) { - filename = url_to_path(content->url); - if (filename) { - temp_name = malloc(strlen(filename) + 32); - if (temp_name) { - sprintf(temp_name, "Filer_OpenDir %s", filename); - r = temp_name + strlen(temp_name); - while (r > temp_name) { - if (*r == '.') { - *r = '\0'; - break; - } - *r--; - } - error = xos_cli(temp_name); - if (error) { - LOG(("xos_cli: 0x%x: %s", - error->errnum, error->errmess)); - warn_user("MiscError", error->errmess); - return; - } - free(temp_name); - } - free(filename); - } else { - /* this is pointless if we are about to close the window */ - if (ro_gui_shift_pressed()) - ro_gui_menu_handle_action(close->w, BROWSER_NAVIGATE_UP, true); - } - } - if (ro_gui_shift_pressed()) - return; - ro_gui_url_complete_close(NULL, 0); - - /* search must be closed before the main window so that - the content still exists */ - ro_gui_dialog_close_persistent(close->w); - browser_window_destroy(g->bw); + if (ro_gui_wimp_event_close_window(close->w)) return; - - } else if ((dw = ro_gui_download_window_lookup(close->w)) != NULL) { - ro_gui_download_window_destroy(dw, false); - } else { - ro_gui_dialog_close(close->w); - } - ro_gui_dialog_close_persistent(close->w); + ro_gui_dialog_close(close->w); } @@ -1152,14 +1043,8 @@ void ro_gui_close_window_request(wimp_close *close) void ro_gui_pointer_leaving_window(wimp_leaving *leaving) { - if (gui_track_wimp_w == history_window) { - os_error *error = xwimp_close_window(dialog_tooltip); - if (error) { - LOG(("xwimp_close_window: 0x%x: %s", - error->errnum, error->errmess)); - warn_user("WimpError", error->errmess); - } - } + if (gui_track_wimp_w == history_window) + ro_gui_dialog_close(dialog_tooltip); switch (gui_current_drag_type) { case GUI_DRAG_SELECTION: @@ -1201,24 +1086,6 @@ void ro_gui_pointer_entering_window(wimp_entering *entering) } -/** - * Handle Mouse_Click events. - */ - -void ro_gui_mouse_click(wimp_pointer *pointer) -{ - struct gui_download_window *dw; - struct gui_query_window *qw; - - if (ro_gui_wimp_event_mouse_click(pointer)) - return; - else if ((dw = ro_gui_download_window_lookup(pointer->w)) != NULL) - ro_gui_download_window_click(dw, pointer); - else if ((qw = ro_gui_query_window_lookup(pointer->w)) != NULL) - ro_gui_query_window_click(qw, pointer); -} - - /** * Handle Mouse_Click events on the iconbar icon. */ @@ -1309,19 +1176,9 @@ void ro_gui_drag_end(wimp_dragged *drag) void ro_gui_keypress(wimp_key *key) { - struct gui_download_window *dw; - struct gui_query_window *qw; - bool handled = false; os_error *error; - if (ro_gui_wimp_event_keypress(key)) - handled = true; - else if ((qw = ro_gui_query_window_lookup(key->w)) != NULL) - handled = ro_gui_query_window_keypress(qw, key); - else if ((dw = ro_gui_download_window_lookup(key->w)) != NULL) - handled = ro_gui_download_window_keypress(dw, key); - - if (!handled) { + if (!ro_gui_wimp_event_keypress(key)) { error = xwimp_process_key(key->c); if (error) { LOG(("xwimp_process_key: 0x%x: %s", diff --git a/riscos/gui.h b/riscos/gui.h index de4866f3b..b40335f16 100644 --- a/riscos/gui.h +++ b/riscos/gui.h @@ -119,15 +119,9 @@ const char *ro_gui_default_language(void); /* in download.c */ void ro_gui_download_init(void); -struct gui_download_window * ro_gui_download_window_lookup(wimp_w w); -void ro_gui_download_window_click(struct gui_download_window *dw, - wimp_pointer *pointer); void ro_gui_download_drag_end(wimp_dragged *drag); void ro_gui_download_datasave_ack(wimp_message *message); -bool ro_gui_download_window_destroy(struct gui_download_window *dw, bool quit); bool ro_gui_download_prequit(void); -bool ro_gui_download_window_keypress(struct gui_download_window *dw, - wimp_key *key); /* in 401login.c */ #ifdef WITH_AUTH @@ -144,8 +138,6 @@ void ro_gui_cert_open(struct tree *tree, struct node *node); void ro_gui_window_quit(void); void ro_gui_window_update_theme(void); void ro_gui_window_update_dimensions(struct gui_window *g, int yscroll); -void ro_gui_window_open(struct gui_window *g, wimp_open *open); -void ro_gui_window_redraw(struct gui_window *g, wimp_draw *redraw); void ro_gui_window_mouse_at(struct gui_window *g, wimp_pointer *pointer); bool ro_gui_toolbar_click(wimp_pointer *pointer); bool ro_gui_status_click(wimp_pointer *pointer); @@ -232,20 +224,6 @@ bool ro_gui_theme_install_apply(wimp_w w); #define ICON_STATUS_RESIZE 0 #define ICON_STATUS_TEXT 1 -#define ICON_DOWNLOAD_ICON 0 -#define ICON_DOWNLOAD_URL 1 -#define ICON_DOWNLOAD_PATH 2 -#define ICON_DOWNLOAD_DESTINATION 3 -#define ICON_DOWNLOAD_PROGRESS 5 -#define ICON_DOWNLOAD_STATUS 6 - -#define ICON_401LOGIN_LOGIN 0 -#define ICON_401LOGIN_CANCEL 1 -#define ICON_401LOGIN_HOST 2 -#define ICON_401LOGIN_REALM 3 -#define ICON_401LOGIN_USERNAME 4 -#define ICON_401LOGIN_PASSWORD 5 - #define ICON_ZOOM_VALUE 1 #define ICON_ZOOM_DEC 2 #define ICON_ZOOM_INC 3 @@ -276,11 +254,6 @@ bool ro_gui_theme_install_apply(wimp_w w); #define ICON_WARNING_CONTINUE 1 #define ICON_WARNING_HELP 2 -#define ICON_QUERY_MESSAGE 0 -#define ICON_QUERY_YES 1 -#define ICON_QUERY_NO 2 -#define ICON_QUERY_HELP 3 - #define ICON_SEARCH_TEXT 0 #define ICON_SEARCH_CASE_SENSITIVE 1 #define ICON_SEARCH_FIND_NEXT 2 diff --git a/riscos/query.c b/riscos/query.c index 846a24a01..9320c4c0c 100644 --- a/riscos/query.c +++ b/riscos/query.c @@ -11,10 +11,15 @@ #include "netsurf/riscos/dialog.h" #include "netsurf/riscos/query.h" #include "netsurf/riscos/wimp.h" +#include "netsurf/riscos/wimp_event.h" #include "netsurf/utils/log.h" #include "netsurf/utils/messages.h" #include "netsurf/utils/utils.h" +#define ICON_QUERY_MESSAGE 0 +#define ICON_QUERY_YES 1 +#define ICON_QUERY_NO 2 +#define ICON_QUERY_HELP 3 /** Data for a query window */ struct gui_query_window @@ -45,9 +50,12 @@ static struct wimp_window *query_template; static int query_yes_width = 0; static int query_no_width = 0; -static void ro_gui_query_window_destroy(struct gui_query_window *qw); static struct gui_query_window *ro_gui_query_window_lookup_id(query_id id); +static bool ro_gui_query_click(wimp_pointer *pointer); +static void ro_gui_query_close(wimp_w w); +static bool ro_gui_query_apply(wimp_w w); + void ro_gui_query_init(void) { @@ -55,22 +63,6 @@ void ro_gui_query_init(void) } -/** - * Lookup a query window using its RISC OS window handle - * - * \param w RISC OS window handle - * \return pointer to query window or NULL - */ - -struct gui_query_window *ro_gui_query_window_lookup(wimp_w w) -{ - struct gui_query_window *qw = gui_query_window_list; - while (qw && qw->window != w) - qw = qw->next; - return qw; -} - - /** * Lookup a query window using its ID number * @@ -128,10 +120,10 @@ query_id query_user(const char *query, const char *detail, if (!yes) yes = messages_get("Yes"); if (!no) no = messages_get("No"); - /* set the text of the 'No' button and size accordingly */ - icn = &query_template->icons[ICON_QUERY_NO]; - len = strnlen(no, icn->data.indirected_text.size - 1); - memcpy(icn->data.indirected_text.text, no, len); + /* set the text of the 'Yes' button and size accordingly */ + icn = &query_template->icons[ICON_QUERY_YES]; + len = strnlen(yes, icn->data.indirected_text.size - 1); + memcpy(icn->data.indirected_text.text, yes, len); icn->data.indirected_text.text[len] = '\0'; error = xwimptextop_string_width(icn->data.indirected_text.text, len, &width); @@ -140,20 +132,20 @@ query_id query_user(const char *query, const char *detail, error->errnum, error->errmess)); width = len * 16; } - if (!query_no_width) query_no_width = icn->extent.x1 - icn->extent.x0; - if (width < query_no_width) - width = query_no_width; + if (!query_yes_width) query_yes_width = icn->extent.x1 - icn->extent.x0; + if (width < query_yes_width) + width = query_yes_width; else width += 44; icn->extent.x0 = x = icn->extent.x1 - width; - /* set the text of the 'Yes' button and size accordingly */ - icn = &query_template->icons[ICON_QUERY_YES]; - len = strnlen(yes, icn->data.indirected_text.size - 1); - memcpy(icn->data.indirected_text.text, yes, len); + /* set the text of the 'No' button and size accordingly */ + icn = &query_template->icons[ICON_QUERY_NO]; + len = strnlen(no, icn->data.indirected_text.size - 1); + memcpy(icn->data.indirected_text.text, no, len); icn->data.indirected_text.text[len] = '\0'; - if (!query_yes_width) query_yes_width = icn->extent.x1 - icn->extent.x0; + if (!query_no_width) query_no_width = icn->extent.x1 - icn->extent.x0; icn->extent.x1 = x - 16; error = xwimptextop_string_width(icn->data.indirected_text.text, len, &width); if (error) { @@ -161,8 +153,8 @@ query_id query_user(const char *query, const char *detail, error->errnum, error->errmess)); width = len * 16; } - if (width < query_yes_width) - width = query_yes_width; + if (width < query_no_width) + width = query_no_width; else width += 28; icn->extent.x0 = icn->extent.x1 - width; @@ -185,6 +177,12 @@ query_id query_user(const char *query, const char *detail, ro_gui_dialog_open(qw->window); + ro_gui_wimp_event_set_user_data(qw->window, qw); + ro_gui_wimp_event_register_mouse_click(qw->window, ro_gui_query_click); + ro_gui_wimp_event_register_cancel(qw->window, ICON_QUERY_NO); + ro_gui_wimp_event_register_ok(qw->window, ICON_QUERY_YES, ro_gui_query_apply); + ro_gui_wimp_event_register_close_window(qw->window, ro_gui_query_close); + error = xwimp_set_caret_position(qw->window, (wimp_i)-1, 0, 0, 1 << 25, -1); if (error) { LOG(("xwimp_get_caret_position: 0x%x : %s", @@ -204,34 +202,6 @@ query_id query_user(const char *query, const char *detail, } -/** - * Close and destroy a query window, releasing all resources - * - * \param qw query window - */ - -void ro_gui_query_window_destroy(struct gui_query_window *qw) -{ - os_error *error = xwimp_delete_window(qw->window); - if (error) { - LOG(("xwimp_delete_window: 0x%x:%s", - error->errnum, error->errmess)); - warn_user("WimpError", error->errmess); - } - - /* remove from linked-list of query windows and release memory */ - if (qw->prev) - qw->prev->next = qw->next; - else - gui_query_window_list = qw->next; - - if (qw->next) - qw->next->prev = qw->prev; - - free(qw); -} - - /** * Close a query window without waiting for a response from the user. * (should normally only be called if the user has responded in some other @@ -243,7 +213,10 @@ void ro_gui_query_window_destroy(struct gui_query_window *qw) void query_close(query_id id) { struct gui_query_window *qw = ro_gui_query_window_lookup_id(id); - if (qw) ro_gui_query_window_destroy(qw); + if (!qw) + return; + ro_gui_query_close(qw->window); + } @@ -266,59 +239,68 @@ void ro_gui_query_window_bring_to_front(query_id id) /** - * Handle mouse clicks in a query window. - * - * \param qw query window - * \param key key press info from the Wimp + * Handle closing of query dialog */ - -void ro_gui_query_window_click(struct gui_query_window *qw, wimp_pointer *pointer) +void ro_gui_query_close(wimp_w w) { - const query_callback *cb = qw->cb; - switch (pointer->i) { - case ICON_QUERY_YES: - cb->confirm(qw->id, QUERY_YES, qw->pw); - ro_gui_query_window_destroy(qw); - break; + struct gui_query_window *qw; + os_error *error; - case ICON_QUERY_NO: - cb->cancel(qw->id, QUERY_NO, qw->pw); - ro_gui_query_window_destroy(qw); - break; + qw = (struct gui_query_window *)ro_gui_wimp_event_get_user_data(w); - case ICON_QUERY_HELP: - /* \todo */ - break; + ro_gui_dialog_close(w); + error = xwimp_delete_window(qw->window); + if (error) { + LOG(("xwimp_delete_window: 0x%x:%s", + error->errnum, error->errmess)); + warn_user("WimpError", error->errmess); } + ro_gui_wimp_event_finalise(w); + + /* remove from linked-list of query windows and release memory */ + if (qw->prev) + qw->prev->next = qw->next; + else + gui_query_window_list = qw->next; + + if (qw->next) + qw->next->prev = qw->prev; + free(qw); } /** - * Handle keypresses in a query window. - * - * \param qw query window - * \param pointer mouse pointer state from Wimp. - * \return true iff the key press is the key press has been handled + * Handle acceptance of query dialog */ +bool ro_gui_query_apply(wimp_w w) +{ + struct gui_query_window *qw; + const query_callback *cb; + + qw = (struct gui_query_window *)ro_gui_wimp_event_get_user_data(w); + cb = qw->cb; + cb->confirm(qw->id, QUERY_YES, qw->pw); + return true; +} -bool ro_gui_query_window_keypress(struct gui_query_window *qw, wimp_key *key) + +/** + * Handle clicks in query dialog + */ +bool ro_gui_query_click(wimp_pointer *pointer) { - const query_callback *cb = qw->cb; - switch (key->c) { - - case wimp_KEY_ESCAPE: - cb->escape(qw->id, QUERY_ESCAPE, qw->pw); - ro_gui_query_window_destroy(qw); - return true; - - case wimp_KEY_RETURN: - if (qw->default_confirm) - cb->confirm(qw->id, QUERY_YES, qw->pw); - else - cb->cancel(qw->id, QUERY_NO, qw->pw); - ro_gui_query_window_destroy(qw); - return true; - } + struct gui_query_window *qw; + const query_callback *cb; + + qw = (struct gui_query_window *)ro_gui_wimp_event_get_user_data(pointer->w); + cb = qw->cb; - return true; + switch (pointer->i) { + case ICON_QUERY_NO: + cb->cancel(qw->id, QUERY_NO, qw->pw); + break; + default: + return false; + } + return false; } diff --git a/riscos/query.h b/riscos/query.h index 9ccebc7e2..6a4030588 100644 --- a/riscos/query.h +++ b/riscos/query.h @@ -14,9 +14,6 @@ struct gui_query_window; void ro_gui_query_init(void); -struct gui_query_window *ro_gui_query_window_lookup(wimp_w w); void ro_gui_query_window_bring_to_front(query_id id); -void ro_gui_query_window_click(struct gui_query_window *qw, wimp_pointer *pointer); -bool ro_gui_query_window_keypress(struct gui_query_window *qw, wimp_key *key); #endif diff --git a/riscos/sslcert.c b/riscos/sslcert.c index 43acec8b7..449f45b7d 100644 --- a/riscos/sslcert.c +++ b/riscos/sslcert.c @@ -373,6 +373,7 @@ void ro_gui_cert_open(struct tree *tree, struct node *node) void ro_gui_cert_close(wimp_w w) { struct session_data *data; + os_error *error; unsigned long i; data = (struct session_data *)ro_gui_wimp_event_get_user_data(w); @@ -390,12 +391,24 @@ void ro_gui_cert_close(wimp_w w) if (data->tree) { tree_delete_node(data->tree, data->tree->root, false); - xwimp_delete_window((wimp_w)data->tree->handle); + ro_gui_dialog_close((wimp_w)data->tree->handle); + error = xwimp_delete_window((wimp_w)data->tree->handle); + if (error) { + LOG(("xwimp_delete_window: 0x%x:%s", + error->errnum, error->errmess)); + warn_user("WimpError", error->errmess); + } + ro_gui_wimp_event_finalise((wimp_w)data->tree->handle); free(data->tree); } - xwimp_delete_window(w); - ro_gui_wimp_event_finalise(w); + ro_gui_dialog_close(w); + error = xwimp_delete_window(w); + if (error) { + LOG(("xwimp_delete_window: 0x%x:%s", + error->errnum, error->errmess)); + warn_user("WimpError", error->errmess); + } } diff --git a/riscos/theme.c b/riscos/theme.c index f78337319..53aee65e9 100644 --- a/riscos/theme.c +++ b/riscos/theme.c @@ -78,6 +78,7 @@ static void ro_gui_theme_add_toolbar_icons(struct toolbar *toolbar, const char* icons[], const char* ident); static void ro_gui_theme_set_help_prefix(struct toolbar *toolbar); +static void ro_gui_theme_status_open(wimp_open *open); /* A basic window for the toolbar and status */ @@ -1119,8 +1120,11 @@ bool ro_gui_theme_update_toolbar(struct theme_descriptor *descriptor, warn_user("WimpError", error->errmess); return false; } + ro_gui_wimp_event_set_user_data(toolbar->status_handle, toolbar); ro_gui_wimp_event_register_mouse_click(toolbar->status_handle, ro_gui_status_click); + ro_gui_wimp_event_register_open_window(toolbar->status_handle, + ro_gui_theme_status_open); ro_gui_wimp_event_set_help_prefix(toolbar->status_handle, "HelpStatus"); /* Create the status resize icon @@ -1297,55 +1301,6 @@ bool ro_gui_theme_attach_toolbar(struct toolbar *toolbar, wimp_w parent) { } -/** - * Updates the toolbars status bar settings to reflect the current size - * - * \param toolbar the toolbar to update - */ -void ro_gui_theme_resize_toolbar_status(struct toolbar *toolbar) { - os_error *error; - wimp_outline outline; - wimp_window_state state; - wimp_w parent = NULL; - int parent_size, status_size; - if ((!toolbar) || (!toolbar->parent_handle)) return; - - /* Get the width to scale to - */ - parent = toolbar->parent_handle; - outline.w = toolbar->parent_handle; - error = xwimp_get_window_outline(&outline); - if (error) { - LOG(("xwimp_get_window_outline: 0x%x: %s", - error->errnum, error->errmess)); - warn_user("WimpError", error->errmess); - return; - } - parent_size = outline.outline.x1 - outline.outline.x0 - - ro_get_vscroll_width(parent) - 2; - - /* Get the current size - */ - state.w = toolbar->status_handle; - error = xwimp_get_window_state(&state); - if (error) { - LOG(("xwimp_get_window_state: 0x%x: %s", - error->errnum, error->errmess)); - warn_user("WimpError", error->errmess); - return; - } - status_size = state.visible.x1 - state.visible.x0; - if (status_size <= 12) - status_size = 0; - - /* Store the new size - */ - toolbar->status_width = (10000 * status_size) / parent_size; - if (toolbar->status_width > 10000) toolbar->status_width = 10000; - ro_gui_theme_process_toolbar(toolbar, -1); -} - - /** * Updates the toolbar to reflect changes to the icon flags and any reformatting * required due to the change in parent window size. @@ -1375,7 +1330,7 @@ bool ro_gui_theme_process_toolbar(struct toolbar *toolbar, int width) { int xeig, yeig; os_coord pixel = {1, 1}; int top, bottom, right; - bool parent_hscroll; + bool parent_hscroll = false; /* calculate 1px in OS units */ ro_convert_pixels_to_os_units(&pixel, (os_mode)-1); @@ -2431,3 +2386,43 @@ void ro_gui_theme_set_help_prefix(struct toolbar *toolbar) { break; } } + +void ro_gui_theme_status_open(wimp_open *open) { + struct toolbar *toolbar = (struct toolbar *)ro_gui_wimp_event_get_user_data(open->w); + os_error *error; + wimp_outline outline; + wimp_w parent = NULL; + int parent_size, status_size; + + /* update the window size */ + error = xwimp_open_window(open); + if (error) { + LOG(("xwimp_open_window: 0x%x: %s", + error->errnum, error->errmess)); + warn_user("WimpError", error->errmess); + } + + /* get the width to scale to */ + parent = toolbar->parent_handle; + outline.w = toolbar->parent_handle; + error = xwimp_get_window_outline(&outline); + if (error) { + LOG(("xwimp_get_window_outline: 0x%x: %s", + error->errnum, error->errmess)); + warn_user("WimpError", error->errmess); + return; + } + parent_size = outline.outline.x1 - outline.outline.x0 - + ro_get_vscroll_width(parent) - 2; + + /* get the current size */ + status_size = open->visible.x1 - open->visible.x0; + if (status_size <= 12) + status_size = 0; + + /* Store the new size + */ + toolbar->status_width = (10000 * status_size) / parent_size; + if (toolbar->status_width > 10000) toolbar->status_width = 10000; + ro_gui_theme_process_toolbar(toolbar, -1); +} diff --git a/riscos/theme.h b/riscos/theme.h index 7b7d209b7..687430c5d 100644 --- a/riscos/theme.h +++ b/riscos/theme.h @@ -154,7 +154,6 @@ void ro_gui_theme_close(struct theme_descriptor *descriptor, bool list); struct toolbar *ro_gui_theme_create_toolbar(struct theme_descriptor *descriptor, toolbar_type type); bool ro_gui_theme_update_toolbar(struct theme_descriptor *descriptor, struct toolbar *toolbar); bool ro_gui_theme_attach_toolbar(struct toolbar *toolbar, wimp_w parent); -void ro_gui_theme_resize_toolbar_status(struct toolbar *toolbar); bool ro_gui_theme_process_toolbar(struct toolbar *toolbar, int width); void ro_gui_theme_destroy_toolbar(struct toolbar *toolbar); diff --git a/riscos/window.c b/riscos/window.c index 1b7a3b316..ccc29ad55 100644 --- a/riscos/window.c +++ b/riscos/window.c @@ -79,6 +79,9 @@ static float scale_snap_to[] = {0.10, 0.125, 0.25, 0.333, 0.5, 0.75, 1.5, 2.0, 3.0, 4.0, 6.0, 8.0, 12.0, 16.0}; #define SCALE_SNAP_TO_SIZE (sizeof scale_snap_to) / (sizeof(float)) +static void ro_gui_window_open(wimp_open *open); +static void ro_gui_window_close(wimp_w w); +static void ro_gui_window_redraw(wimp_draw *redraw); static bool ro_gui_window_click(wimp_pointer *mouse); static bool ro_gui_window_keypress(wimp_key *key); static void ro_gui_window_launch_url(struct gui_window *g, const char *url); @@ -137,10 +140,9 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw, g->throbtime = 0; g->iconise_icon = -1; - /* Set the window position - */ + /* Set the window position */ if (bw->parent) { - /* fill the parent window until it's reformatted */ + /* Open as a small window until we are reformatted */ state.w = clone->window->window; error = xwimp_get_window_state(&state); if (error) { @@ -169,8 +171,7 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw, } else { ro_gui_screen_size(&screen_width, &screen_height); - /* Check if we have a preferred position - */ + /* Check if we have a preferred position */ if ((option_window_screen_width != 0) && (option_window_screen_height != 0)) { win_width = (option_window_width * screen_width) / @@ -193,7 +194,7 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw, } else { /* Base how we define the window height/width - on the compile time options set */ + on the compile time options set */ win_width = screen_width * 3 / 4; if (1600 < win_width) win_width = 1600; @@ -207,13 +208,10 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw, window.visible.y1 = window.visible.y0 + win_height; } - /* Set the general window characteristics - */ + /* General flags for a non-movable, non-resizable, no-title bar window */ window.xscroll = 0; window.yscroll = 0; window.next = wimp_TOP; - - /* General flags for a non-movable, non-resizable, no-title bar window */ window.flags = wimp_WINDOW_MOVEABLE | wimp_WINDOW_NEW_FORMAT | wimp_WINDOW_VSCROLL | @@ -293,6 +291,7 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw, return 0; } + /* Link into window list */ g->prev = 0; g->next = window_list; if (window_list) @@ -300,8 +299,7 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw, window_list = g; window_count++; - /* Add in a toolbar - */ + /* Add in a toolbar */ if (bw->browser_window_type == BROWSER_WINDOW_NORMAL) { g->toolbar = ro_gui_theme_create_toolbar(NULL, THEME_BROWSER_TOOLBAR); ro_gui_theme_attach_toolbar(g->toolbar, g->window); @@ -309,14 +307,23 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw, g->toolbar = NULL; } - /* Set the window options - */ + /* Set the window options */ bw->window = g; ro_gui_window_clone_options(bw, clone); ro_gui_prepare_navigate(g); - /* Open the window - */ + /* Register event handlers */ + ro_gui_wimp_event_set_user_data(g->window, g); + ro_gui_wimp_event_register_open_window(g->window, ro_gui_window_open); + ro_gui_wimp_event_register_close_window(g->window, ro_gui_window_close); + ro_gui_wimp_event_register_redraw_window(g->window, ro_gui_window_redraw); + ro_gui_wimp_event_register_keypress(g->window, ro_gui_window_keypress); + if (g->toolbar) + ro_gui_wimp_event_register_keypress(g->toolbar->toolbar_handle, + ro_gui_window_keypress); + ro_gui_wimp_event_register_mouse_click(g->window, ro_gui_window_click); + + /* Open the window at the top of the stack */ state.w = g->window; error = xwimp_get_window_state(&state); if (error) { @@ -325,9 +332,6 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw, warn_user("WimpError", error->errmess); return g; } - - /* Open the window at the top/back of the stack - */ state.next = wimp_TOP; if (bw->parent) { top = browser_window_owner(bw); @@ -337,18 +341,9 @@ struct gui_window *gui_create_browser_window(struct browser_window *bw, wimp_CHILD_LINKS_PARENT_WORK_AREA << wimp_CHILD_YORIGIN_SHIFT); } - ro_gui_window_open(g, (wimp_open*)&state); - - /* Register event handlers */ - ro_gui_wimp_event_register_keypress(g->window, - ro_gui_window_keypress); - if (g->toolbar) - ro_gui_wimp_event_register_keypress(g->toolbar->toolbar_handle, - ro_gui_window_keypress); - ro_gui_wimp_event_register_mouse_click(g->window, - ro_gui_window_click); + ro_gui_window_open((wimp_open*)&state); - /* Claim the caret position for top-level windows */ + /* Claim the caret for top-level windows */ if (bw->browser_window_type == BROWSER_WINDOW_NORMAL) { if (g->toolbar && g->toolbar->display_url) { error = xwimp_set_caret_position( @@ -550,10 +545,11 @@ void gui_window_redraw_window(struct gui_window *g) * Handle a Redraw_Window_Request for a browser window. */ -void ro_gui_window_redraw(struct gui_window *g, wimp_draw *redraw) +void ro_gui_window_redraw(wimp_draw *redraw) { osbool more; bool knockout = true; + struct gui_window *g = (struct gui_window *)ro_gui_wimp_event_get_user_data(redraw->w); float scale = g->option.scale; struct content *c = g->bw->current_content; int clip_x0, clip_y0, clip_x1, clip_y1, clear_x1, clear_y1; @@ -889,7 +885,7 @@ void gui_window_set_scroll(struct gui_window *g, int sx, int sy) state.yscroll = -sy * 2 * g->option.scale; if (g->toolbar) state.yscroll += ro_gui_theme_toolbar_full_height(g->toolbar); - ro_gui_window_open(g, (wimp_open *) &state); + ro_gui_window_open((wimp_open *) &state); } @@ -960,7 +956,6 @@ void gui_window_scroll_visible(struct gui_window *g, int x0, int y0, int x1, int cx0 -= padding_available; } padding_available = (height - y1 + y0) / 2; - LOG(("Padding available: %i", padding_available)); if (padding_available > 0) { if (padding_available > SCROLL_VISIBLE_PADDING) padding_available = SCROLL_VISIBLE_PADDING; @@ -974,7 +969,7 @@ void gui_window_scroll_visible(struct gui_window *g, int x0, int y0, int x1, int state.xscroll = cx0; state.yscroll = -cy0 + toolbar_height; - ro_gui_window_open(g, (wimp_open *)&state); + ro_gui_window_open((wimp_open *)&state); } @@ -1065,7 +1060,7 @@ void gui_window_position_frame(struct gui_window *g, int x0, int y0, int x1, int state.visible.y0 = py1 - y1; state.visible.x1 = px0 + x1; state.visible.y1 = py1 - y0 * 2; - ro_gui_window_open(g, (wimp_open *)&state); + ro_gui_window_open((wimp_open *)&state); } @@ -1187,7 +1182,7 @@ void ro_gui_window_update_dimensions(struct gui_window *g, int yscroll) { /* only allow a further reformat if we've gained/lost scrollbars */ flags = state.flags & (wimp_WINDOW_HSCROLL | wimp_WINDOW_VSCROLL); update = g->reformat_pending; - ro_gui_window_open(g, (wimp_open *)&state); + ro_gui_window_open((wimp_open *)&state); state.w = g->window; error = xwimp_get_window_state(&state); @@ -1347,12 +1342,14 @@ void ro_gui_window_update_theme(void) { } } + /** * Open a window using the given wimp_open, handling toolbars and resizing. */ -void ro_gui_window_open(struct gui_window *g, wimp_open *open) +void ro_gui_window_open(wimp_open *open) { + struct gui_window *g = (struct gui_window *)ro_gui_wimp_event_get_user_data(open->w); int width = open->visible.x1 - open->visible.x0; int height = open->visible.y1 - open->visible.y0; int toolbar_height = 0; @@ -1525,6 +1522,66 @@ void ro_gui_window_open(struct gui_window *g, wimp_open *open) } +/** + * Handle wimp closing event + */ +void ro_gui_window_close(wimp_w w) { + struct gui_window *g = (struct gui_window *)ro_gui_wimp_event_get_user_data(w); + wimp_pointer pointer; + os_error *error; + char *temp_name, *r; + char *filename; + struct content *content = NULL; + + error = xwimp_get_pointer_info(&pointer); + if (error) { + LOG(("xwimp_get_pointer_info: 0x%x: %s", + error->errnum, error->errmess)); + warn_user("WimpError", error->errmess); + return; + } + if (g->bw) + content = g->bw->current_content; + if (pointer.buttons & wimp_CLICK_ADJUST) { + filename = url_to_path(content->url); + if (filename) { + temp_name = malloc(strlen(filename) + 32); + if (temp_name) { + sprintf(temp_name, "Filer_OpenDir %s", filename); + r = temp_name + strlen(temp_name); + while (r > temp_name) { + if (*r == '.') { + *r = '\0'; + break; + } + *r--; + } + error = xos_cli(temp_name); + if (error) { + LOG(("xos_cli: 0x%x: %s", + error->errnum, error->errmess)); + warn_user("MiscError", error->errmess); + return; + } + free(temp_name); + } + free(filename); + } else { + /* this is pointless if we are about to close the window */ + if (ro_gui_shift_pressed()) + ro_gui_menu_handle_action(w, BROWSER_NAVIGATE_UP, true); + } + } + if (ro_gui_shift_pressed()) + return; + ro_gui_url_complete_close(NULL, 0); + ro_gui_dialog_close_persistent(w); + browser_window_destroy(g->bw); + return; + +} + + /** * Animate the "throbbers" of all browser windows. */ @@ -1857,9 +1914,7 @@ bool ro_gui_window_click(wimp_pointer *pointer) os_error *error; int x, y; - g = ro_gui_window_lookup(pointer->w); - if (!g) - return false; + g = (struct gui_window *)ro_gui_wimp_event_get_user_data(pointer->w); /* try to close url-completion */ ro_gui_url_complete_close(g, pointer->i); diff --git a/utils/utils.h b/utils/utils.h index 559cc6db0..ba541cced 100644 --- a/utils/utils.h +++ b/utils/utils.h @@ -43,7 +43,6 @@ typedef struct { void (*confirm)(query_id id, enum query_response res, void *pw); void (*cancel)(query_id, enum query_response res, void *pw); - void (*escape)(query_id, enum query_response res, void *pw); } query_callback; -- cgit v1.2.3