From d18c8ed4521714c3fff3cca64685b8192ca0e075 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Mon, 13 Jan 2014 22:54:19 +0000 Subject: move teh final optional window operations into the table --- desktop/browser.c | 37 +++++++++++++++++--------------- desktop/gui.h | 58 +++++++++++++++++++++++++++------------------------ desktop/gui_factory.c | 34 ++++++++++++++++++++++++++++++ desktop/selection.c | 6 +++--- 4 files changed, 88 insertions(+), 47 deletions(-) (limited to 'desktop') diff --git a/desktop/browser.c b/desktop/browser.c index 59cb4d44a..30aeead0c 100644 --- a/desktop/browser.c +++ b/desktop/browser.c @@ -1484,20 +1484,23 @@ static nserror browser_window_callback(hlcache_handle *c, switch(event->data.dragsave.type) { case CONTENT_SAVE_ORIG: - gui_drag_save_object(GUI_SAVE_OBJECT_ORIG, save, - root->window); + guit->window->drag_save_object(root->window, save, + GUI_SAVE_OBJECT_ORIG); break; + case CONTENT_SAVE_NATIVE: - gui_drag_save_object(GUI_SAVE_OBJECT_NATIVE, save, - root->window); + guit->window->drag_save_object(root->window, save, + GUI_SAVE_OBJECT_NATIVE); break; + case CONTENT_SAVE_COMPLETE: - gui_drag_save_object(GUI_SAVE_COMPLETE, save, - root->window); + guit->window->drag_save_object(root->window, save, + GUI_SAVE_COMPLETE); break; + case CONTENT_SAVE_SOURCE: - gui_drag_save_object(GUI_SAVE_SOURCE, save, - root->window); + guit->window->drag_save_object(root->window, save, + GUI_SAVE_SOURCE); break; } } @@ -1563,7 +1566,7 @@ static nserror browser_window_callback(hlcache_handle *c, case CONTENT_MSG_GADGETCLICK: if (event->data.gadget_click.gadget->type == GADGET_FILE) { - gui_file_gadget_open(bw->window, c, + guit->window->file_gadget_open(bw->window, c, event->data.gadget_click.gadget); } @@ -2893,14 +2896,14 @@ void browser_window_mouse_click(struct browser_window *bw, break; default: if (mouse & BROWSER_MOUSE_MOD_2) { - if (mouse & BROWSER_MOUSE_DRAG_2) - gui_drag_save_object(GUI_SAVE_OBJECT_NATIVE, c, - bw->window); - else if (mouse & BROWSER_MOUSE_DRAG_1) - gui_drag_save_object(GUI_SAVE_OBJECT_ORIG, c, - bw->window); - } - else if (mouse & (BROWSER_MOUSE_DRAG_1 | + if (mouse & BROWSER_MOUSE_DRAG_2) { + guit->window->drag_save_object(bw->window, c, + GUI_SAVE_OBJECT_NATIVE); + } else if (mouse & BROWSER_MOUSE_DRAG_1) { + guit->window->drag_save_object(bw->window, c, + GUI_SAVE_OBJECT_ORIG); + } + } else if (mouse & (BROWSER_MOUSE_DRAG_1 | BROWSER_MOUSE_DRAG_2)) { browser_window_page_drag_start(bw, x, y); browser_window_set_pointer(bw, BROWSER_POINTER_MOVE); diff --git a/desktop/gui.h b/desktop/gui.h index 3f533d224..8d65893d0 100644 --- a/desktop/gui.h +++ b/desktop/gui.h @@ -157,8 +157,6 @@ struct gui_window_table { /** set favicon */ void (*set_icon)(struct gui_window *g, hlcache_handle *icon); - - /** * Set the status bar of a browser window. * @@ -190,8 +188,6 @@ struct gui_window_table { */ void (*remove_caret)(struct gui_window *g); - - /** start the navigation throbber. */ void (*start_throbber)(struct gui_window *g); @@ -233,6 +229,19 @@ struct gui_window_table { */ void (*new_content)(struct gui_window *g); + /** + * Called when file chooser gadget is activated + */ + void (*file_gadget_open)(struct gui_window *g, hlcache_handle *hl, struct form_control *gadget); + + /** object dragged to window*/ + void (*drag_save_object)(struct gui_window *g, hlcache_handle *c, gui_save_type type); + + /** drag selection save */ + void (*drag_save_selection)(struct gui_window *g, const char *selection); + + /** selection started */ + void (*start_selection)(struct gui_window *g); }; /** Graphical user interface function table @@ -280,17 +289,27 @@ void gui_download_window_error(struct gui_download_window *dw, const char *error_msg); void gui_download_window_done(struct gui_download_window *dw); -void gui_drag_save_object(gui_save_type type, hlcache_handle *c, - struct gui_window *g); -void gui_drag_save_selection(struct gui_window *g, const char *selection); -void gui_start_selection(struct gui_window *g); -void gui_clear_selection(struct gui_window *g); -void gui_file_gadget_open(struct gui_window *g, hlcache_handle *hl, - struct form_control *gadget); + +/** + * Callback to translate resource to full url. + * + * Transforms a resource: path into a full URL. The returned URL + * is used as the target for a redirect. The caller takes ownership of + * the returned nsurl including unrefing it when finished with it. + * + * \param path The path of the resource to locate. + * \return A string containing the full URL of the target object or + * NULL if no suitable resource can be found. + */ +nsurl* gui_get_resource_url(const char *path); + void gui_launch_url(const char *url); +void gui_create_form_select_menu(struct browser_window *bw, + struct form_control *control); + /** * Core asks front end for clipboard contents. * @@ -304,6 +323,7 @@ typedef struct nsnsclipboard_styles { plot_font_style_t style; /**< Style to give text run */ } nsclipboard_styles; + /** * Core tells front end to put given text in clipboard * @@ -317,27 +337,11 @@ void gui_set_clipboard(const char *buffer, size_t length, -void gui_create_form_select_menu(struct browser_window *bw, - struct form_control *control); - - struct ssl_cert_info; void gui_cert_verify(nsurl *url, const struct ssl_cert_info *certs, unsigned long num, nserror (*cb)(bool proceed, void *pw), void *cbpw); -/** - * Callback to translate resource to full url. - * - * Transforms a resource: path into a full URL. The returned URL - * is used as the target for a redirect. The caller takes ownership of - * the returned nsurl including unrefing it when finished with it. - * - * \param path The path of the resource to locate. - * \return A string containing the full URL of the target object or - * NULL if no suitable resource can be found. - */ -nsurl* gui_get_resource_url(const char *path); #endif diff --git a/desktop/gui_factory.c b/desktop/gui_factory.c index e03e7dae0..8ebf3515a 100644 --- a/desktop/gui_factory.c +++ b/desktop/gui_factory.c @@ -85,6 +85,28 @@ static void gui_default_window_remove_caret(struct gui_window *g) { } +static void gui_default_window_file_gadget_open(struct gui_window *g, + hlcache_handle *hl, + struct form_control *gadget) +{ +} + +static void gui_default_window_drag_save_object(struct gui_window *g, + hlcache_handle *c, + gui_save_type type) +{ +} + +static void gui_default_window_drag_save_selection(struct gui_window *g, + const char *selection) +{ +} + +static void gui_default_window_start_selection(struct gui_window *g) +{ +} + + /** verify window table is valid */ static nserror verify_window_register(struct gui_window_table *gwt) { @@ -163,6 +185,18 @@ static nserror verify_window_register(struct gui_window_table *gwt) if (gwt->scroll_start == NULL) { gwt->scroll_start = gui_default_window_scroll_start; } + if (gwt->file_gadget_open == NULL) { + gwt->file_gadget_open = gui_default_window_file_gadget_open; + } + if (gwt->drag_save_object == NULL) { + gwt->drag_save_object = gui_default_window_drag_save_object; + } + if (gwt->drag_save_selection == NULL) { + gwt->drag_save_selection = gui_default_window_drag_save_selection; + } + if (gwt->start_selection == NULL) { + gwt->start_selection = gui_default_window_start_selection; + } return NSERROR_OK; } diff --git a/desktop/selection.c b/desktop/selection.c index 13a1293e3..ca383c179 100644 --- a/desktop/selection.c +++ b/desktop/selection.c @@ -274,7 +274,7 @@ bool selection_click(struct selection *s, browser_mouse_state mouse, (modkeys && (mouse & BROWSER_MOUSE_DRAG_2)))) { /* drag-saving selection */ char *sel = selection_get_copy(s); - gui_drag_save_selection(top->window, sel); + guit->window->drag_save_selection(top->window, sel); free(sel); } else if (!modkeys) { @@ -293,7 +293,7 @@ bool selection_click(struct selection *s, browser_mouse_state mouse, s->drag_state = DRAG_END; - gui_start_selection(top->window); + guit->window->start_selection(top->window); } else if (mouse & BROWSER_MOUSE_DRAG_2) { @@ -312,7 +312,7 @@ bool selection_click(struct selection *s, browser_mouse_state mouse, s->drag_state = DRAG_START; } - gui_start_selection(top->window); + guit->window->start_selection(top->window); } else if (mouse & BROWSER_MOUSE_CLICK_2) { -- cgit v1.2.3