From 5841e373e5d0cb6ae8bb2f6bee776cae1fcf6384 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Thu, 29 Aug 2019 23:14:31 +0100 Subject: another five handlers and fix menu sensitivity on throbber state change --- frontends/gtk/gui.c | 6 +- frontends/gtk/scaffolding.c | 218 +++++++++--------------------------------- frontends/gtk/scaffolding.h | 5 + frontends/gtk/tabs.c | 2 +- frontends/gtk/toolbar.c | 168 +++++++++++++++++++++++++++++++- frontends/gtk/toolbar_items.h | 12 +-- frontends/gtk/window.c | 4 +- 7 files changed, 227 insertions(+), 188 deletions(-) diff --git a/frontends/gtk/gui.c b/frontends/gtk/gui.c index 2c23364b9..ba37413b3 100644 --- a/frontends/gtk/gui.c +++ b/frontends/gtk/gui.c @@ -249,7 +249,7 @@ static nserror set_defaults(struct nsoption_s *defaults) nsoption_set_int(button_type, 2); break; } - + return NSERROR_OK; } @@ -261,7 +261,7 @@ static nserror set_defaults(struct nsoption_s *defaults) * * \param argc The number of arguments on the command line * \param argv A string vector of command line arguments. - * \respath A string vector of the path elements of resources + * \respath A string vector of the path elements of resources */ static nserror nsgtk_init(int argc, char** argv, char **respath) { @@ -1204,7 +1204,7 @@ int main(int argc, char** argv) NSLOG(netsurf, INFO, "Unable to load translated messages"); /** \todo decide if message load faliure should be fatal */ } - + /* Locate the correct user cache directory path */ ret = get_cache_home(&cache_home); if (ret == NSERROR_NOT_FOUND) { diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c index 685b5d4a7..62b9c4f38 100644 --- a/frontends/gtk/scaffolding.c +++ b/frontends/gtk/scaffolding.c @@ -927,160 +927,46 @@ nsgtk_on_toolbar_activate_menu(GtkMenuItem *widget, gpointer data) return TRUE; } -MULTIHANDLER(downloads) -{ - nsgtk_download_show(g->window); - - return TRUE; -} - -MULTIHANDLER(savewindowsize) -{ - int x,y,w,h; - char *choices = NULL; - - gtk_window_get_position(g->window, &x, &y); - gtk_window_get_size(g->window, &w, &h); - - nsoption_set_int(window_width, w); - nsoption_set_int(window_height, h); - nsoption_set_int(window_x, x); - nsoption_set_int(window_y, y); - - netsurf_mkpath(&choices, NULL, 2, nsgtk_config_home, "Choices"); - if (choices != NULL) { - nsoption_write(choices, NULL, NULL); - free(choices); - } - - return TRUE; -} - -MULTIHANDLER(toggledebugging) -{ - struct browser_window *bw; - - bw = nsgtk_get_browser_window(g->top_level); - - browser_window_debug(bw, CONTENT_DEBUG_REDRAW); - - nsgtk_reflow_all_windows(); - - return TRUE; -} - -MULTIHANDLER(debugboxtree) -{ - gchar *fname; - gint handle; - FILE *f; - struct browser_window *bw; - - handle = g_file_open_tmp("nsgtkboxtreeXXXXXX", &fname, NULL); - if ((handle == -1) || (fname == NULL)) { - return TRUE; - } - close(handle); /* in case it was binary mode */ - - /* save data to temporary file */ - f = fopen(fname, "w"); - if (f == NULL) { - nsgtk_warning("Error saving box tree dump.", - "Unable to open file for writing."); - unlink(fname); - return TRUE; - } - - bw = nsgtk_get_browser_window(g->top_level); - - browser_window_debug_dump(bw, f, CONTENT_DEBUG_RENDER); - - fclose(f); - - nsgtk_viewfile("Box Tree Debug", "boxtree", fname); - - g_free(fname); - - return TRUE; -} - -MULTIHANDLER(debugdomtree) -{ - gchar *fname; - gint handle; - FILE *f; - struct browser_window *bw; - - handle = g_file_open_tmp("nsgtkdomtreeXXXXXX", &fname, NULL); - if ((handle == -1) || (fname == NULL)) { - return TRUE; - } - close(handle); /* in case it was binary mode */ - - /* save data to temporary file */ - f = fopen(fname, "w"); - if (f == NULL) { - nsgtk_warning("Error saving box tree dump.", - "Unable to open file for writing."); - unlink(fname); - return TRUE; - } - - bw = nsgtk_get_browser_window(g->top_level); - - browser_window_debug_dump(bw, f, CONTENT_DEBUG_DOM); - - fclose(f); - - nsgtk_viewfile("DOM Tree Debug", "domtree", fname); - - g_free(fname); - - return TRUE; -} - - -MULTIHANDLER(stop) -{ - struct browser_window *bw = - nsgtk_get_browser_window(g->top_level); - - browser_window_stop(bw); - - return TRUE; -} - -MULTIHANDLER(reload) -{ - struct browser_window *bw = - nsgtk_get_browser_window(g->top_level); - if (bw == NULL) - return TRUE; +/** + * menu signal handler for activation on downloads item + */ +MENUHANDLER(downloads, DOWNLOADS_BUTTON); - /* clear potential search effects */ - browser_window_search_clear(bw); +/** + * menu signal handler for activation on save window size item + */ +MENUHANDLER(savewindowsize, SAVEWINDOWSIZE_BUTTON); - browser_window_reload(bw, true); +/** + * menu signal handler for activation on toggle debug render item + */ +MENUHANDLER(toggledebugging, TOGGLEDEBUGGING_BUTTON); - return TRUE; -} +/** + * menu signal handler for activation on debug box tree item + */ +MENUHANDLER(debugboxtree, SAVEBOXTREE_BUTTON); -MULTIHANDLER(back) -{ - struct browser_window *bw = - nsgtk_get_browser_window(g->top_level); +/** + * menu signal handler for activation on debug dom tree item + */ +MENUHANDLER(debugdomtree, SAVEDOMTREE_BUTTON); - if ((bw == NULL) || (!browser_window_history_back_available(bw))) - return TRUE; +/** + * menu signal handler for activation on stop item + */ +MENUHANDLER(stop, STOP_BUTTON); - /* clear potential search effects */ - browser_window_search_clear(bw); +/** + * menu signal handler for activation on reload item + */ +MENUHANDLER(reload, RELOAD_BUTTON); - browser_window_history_back(bw, false); - scaffolding_update_context(g); +/** + * menu signal handler for activation on back item + */ +MENUHANDLER(back, BACK_BUTTON); - return TRUE; -} MULTIHANDLER(forward) { @@ -1675,39 +1561,21 @@ void nsgtk_window_set_title(struct gui_window *gw, const char *title) } - - -#if 0 -static nserror gui_window_start_throbber(struct gui_window* gw) -{ - struct nsgtk_scaffolding *g = nsgtk_get_scaffold(_g); - g->buttons[STOP_BUTTON]->sensitivity = true; - g->buttons[RELOAD_BUTTON]->sensitivity = false; - nsgtk_scaffolding_set_sensitivity(g); - - scaffolding_update_context(g); -} - -static nserror gui_window_stop_throbber(struct gui_window* gw) +/* exported interface documented in scaffolding.h */ +nserror nsgtk_scaffolding_throbber(struct gui_window* gw, bool active) { - nserror res; - GdkPixbuf *pixbuf; - struct nsgtk_scaffolding *g = nsgtk_get_scaffold(_g); - - if (g == NULL) { - return; + struct nsgtk_scaffolding *gs = nsgtk_get_scaffold(gw); + if (active) { + gs->menus[STOP_BUTTON].sensitivity = true; + gs->menus[RELOAD_BUTTON].sensitivity = false; + } else { + gs->menus[STOP_BUTTON].sensitivity = false; + gs->menus[RELOAD_BUTTON].sensitivity = true; } + scaffolding_update_context(gs); - - if (g->buttons[STOP_BUTTON] != NULL) - g->buttons[STOP_BUTTON]->sensitivity = false; - if (g->buttons[RELOAD_BUTTON] != NULL) - g->buttons[RELOAD_BUTTON]->sensitivity = true; - - nsgtk_scaffolding_set_sensitivity(g); - + return NSERROR_OK; } -#endif static void diff --git a/frontends/gtk/scaffolding.h b/frontends/gtk/scaffolding.h index 0f19a2418..666bc502f 100644 --- a/frontends/gtk/scaffolding.h +++ b/frontends/gtk/scaffolding.h @@ -63,6 +63,11 @@ struct nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *gw); */ nserror nsgtk_scaffolding_destroy_all(void); +/** + * Update scaffolding window when throbber state changes + */ +nserror nsgtk_scaffolding_throbber(struct gui_window* gw, bool active); + /** * Obtain the most recently used scaffolding element. * diff --git a/frontends/gtk/tabs.c b/frontends/gtk/tabs.c index 04bd69f23..3d21c6540 100644 --- a/frontends/gtk/tabs.c +++ b/frontends/gtk/tabs.c @@ -180,7 +180,7 @@ nsgtk_tab_switch_page_after(GtkNotebook *notebook, srcpage = gtk_notebook_get_nth_page(notebook, srcpagenum); gw = g_object_get_data(G_OBJECT(srcpage), "gui_window"); if ((gw != NULL) && (nsgtk_get_scaffold(gw) != NULL)) { - error = nsgtk_window_item_activate(gw, NEWTAB_BUTTON); + error = nsgtk_window_item_activate(gw, NEWTAB_BUTTON); if (error != NSERROR_OK) { NSLOG(netsurf, INFO, "Failed to open new tab."); diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c index 8fbdfa1ab..03e07b9bf 100644 --- a/frontends/gtk/toolbar.c +++ b/frontends/gtk/toolbar.c @@ -2820,7 +2820,7 @@ fullscreen_button_clicked_cb(GtkWidget *widget, gpointer data) /** - * handler for full screen tool bar item clicked signal + * handler for view source tool bar item clicked signal * * \param widget The widget the signal is being delivered to. * \param data The toolbar context passed when the signal was connected @@ -2847,6 +2847,172 @@ viewsource_button_clicked_cb(GtkWidget *widget, gpointer data) } +/** + * handler for show downloads tool bar item clicked signal + * + * \param widget The widget the signal is being delivered to. + * \param data The toolbar context passed when the signal was connected + * \return TRUE + */ +static gboolean +downloads_button_clicked_cb(GtkWidget *widget, gpointer data) +{ + GtkWindow *gtkwindow; /* gtk window widget is in */ + gtkwindow = GTK_WINDOW(gtk_widget_get_ancestor(widget,GTK_TYPE_WINDOW)); + nsgtk_download_show(gtkwindow); + return TRUE; +} + + +/** + * handler for show downloads tool bar item clicked signal + * + * \param widget The widget the signal is being delivered to. + * \param data The toolbar context passed when the signal was connected + * \return TRUE + */ +static gboolean +savewindowsize_button_clicked_cb(GtkWidget *widget, gpointer data) +{ + GtkWindow *gtkwindow; /* gtk window widget is in */ + int x,y,w,h; + char *choices = NULL; + + gtkwindow = GTK_WINDOW(gtk_widget_get_ancestor(widget,GTK_TYPE_WINDOW)); + + gtk_window_get_position(gtkwindow, &x, &y); + gtk_window_get_size(gtkwindow, &w, &h); + + nsoption_set_int(window_width, w); + nsoption_set_int(window_height, h); + nsoption_set_int(window_x, x); + nsoption_set_int(window_y, y); + + netsurf_mkpath(&choices, NULL, 2, nsgtk_config_home, "Choices"); + if (choices != NULL) { + nsoption_write(choices, NULL, NULL); + free(choices); + } + + return TRUE; +} + + +/** + * handler for show downloads tool bar item clicked signal + * + * \param widget The widget the signal is being delivered to. + * \param data The toolbar context passed when the signal was connected + * \return TRUE + */ +static gboolean +toggledebugging_button_clicked_cb(GtkWidget *widget, gpointer data) +{ + struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data; + struct browser_window *bw; + + bw = tb->get_bw(tb->get_bw_ctx); + + browser_window_debug(bw, CONTENT_DEBUG_REDRAW); + + nsgtk_reflow_all_windows(); + + return TRUE; + +} + + +/** + * handler for debug box tree tool bar item clicked signal + * + * \param widget The widget the signal is being delivered to. + * \param data The toolbar context passed when the signal was connected + * \return TRUE + */ +static gboolean +debugboxtree_button_clicked_cb(GtkWidget *widget, gpointer data) +{ + struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data; + struct browser_window *bw; + gchar *fname; + gint handle; + FILE *f; + + handle = g_file_open_tmp("nsgtkboxtreeXXXXXX", &fname, NULL); + if ((handle == -1) || (fname == NULL)) { + return TRUE; + } + close(handle); /* in case it was binary mode */ + + /* save data to temporary file */ + f = fopen(fname, "w"); + if (f == NULL) { + nsgtk_warning("Error saving box tree dump.", + "Unable to open file for writing."); + unlink(fname); + return TRUE; + } + + bw = tb->get_bw(tb->get_bw_ctx); + + browser_window_debug_dump(bw, f, CONTENT_DEBUG_RENDER); + + fclose(f); + + nsgtk_viewfile("Box Tree Debug", "boxtree", fname); + + g_free(fname); + + return TRUE; +} + + +/** + * handler for debug dom tree tool bar item clicked signal + * + * \param widget The widget the signal is being delivered to. + * \param data The toolbar context passed when the signal was connected + * \return TRUE + */ +static gboolean +debugdomtree_button_clicked_cb(GtkWidget *widget, gpointer data) +{ + struct nsgtk_toolbar *tb = (struct nsgtk_toolbar *)data; + struct browser_window *bw; + gchar *fname; + gint handle; + FILE *f; + + handle = g_file_open_tmp("nsgtkdomtreeXXXXXX", &fname, NULL); + if ((handle == -1) || (fname == NULL)) { + return TRUE; + } + close(handle); /* in case it was binary mode */ + + /* save data to temporary file */ + f = fopen(fname, "w"); + if (f == NULL) { + nsgtk_warning("Error saving box tree dump.", + "Unable to open file for writing."); + unlink(fname); + return TRUE; + } + + bw = tb->get_bw(tb->get_bw_ctx); + + browser_window_debug_dump(bw, f, CONTENT_DEBUG_DOM); + + fclose(f); + + nsgtk_viewfile("DOM Tree Debug", "domtree", fname); + + g_free(fname); + + return TRUE; + +} + + /** * create a toolbar item * diff --git a/frontends/gtk/toolbar_items.h b/frontends/gtk/toolbar_items.h index ecdd9787c..909b00d82 100644 --- a/frontends/gtk/toolbar_items.h +++ b/frontends/gtk/toolbar_items.h @@ -63,7 +63,7 @@ typedef enum { GLOBALHISTORY_BUTTON, ADDBOOKMARKS_BUTTON, SHOWBOOKMARKS_BUTTON, - SHOWCOOKIES_BUTTON, + SHOWCOOKIES_BUTTON, OPENLOCATION_BUTTON, NEXTTAB_BUTTON, PREVTAB_BUTTON, @@ -122,11 +122,11 @@ TOOLBAR_ITEM(ZOOMMINUS_BUTTON, zoomminus, true, zoomminus_button_clicked_cb) TOOLBAR_ITEM(ZOOMNORMAL_BUTTON, zoomnormal, true, zoomnormal_button_clicked_cb) TOOLBAR_ITEM(FULLSCREEN_BUTTON, fullscreen, true, fullscreen_button_clicked_cb) TOOLBAR_ITEM(VIEWSOURCE_BUTTON, viewsource, true, viewsource_button_clicked_cb) -TOOLBAR_ITEM(DOWNLOADS_BUTTON, downloads, true, NULL) -TOOLBAR_ITEM(SAVEWINDOWSIZE_BUTTON, savewindowsize, true, NULL) -TOOLBAR_ITEM(TOGGLEDEBUGGING_BUTTON, toggledebugging, true, NULL) -TOOLBAR_ITEM(SAVEBOXTREE_BUTTON, debugboxtree, true, NULL) -TOOLBAR_ITEM(SAVEDOMTREE_BUTTON, debugdomtree, true, NULL) +TOOLBAR_ITEM(DOWNLOADS_BUTTON, downloads, true, downloads_button_clicked_cb) +TOOLBAR_ITEM(SAVEWINDOWSIZE_BUTTON, savewindowsize, true, savewindowsize_button_clicked_cb) +TOOLBAR_ITEM(TOGGLEDEBUGGING_BUTTON, toggledebugging, true, toggledebugging_button_clicked_cb) +TOOLBAR_ITEM(SAVEBOXTREE_BUTTON, debugboxtree, true, debugboxtree_button_clicked_cb) +TOOLBAR_ITEM(SAVEDOMTREE_BUTTON, debugdomtree, true, debugdomtree_button_clicked_cb) TOOLBAR_ITEM(LOCALHISTORY_BUTTON, localhistory, true, localhistory_button_clicked_cb) TOOLBAR_ITEM(GLOBALHISTORY_BUTTON, globalhistory, true, NULL) TOOLBAR_ITEM(ADDBOOKMARKS_BUTTON, addbookmarks, true, NULL) diff --git a/frontends/gtk/window.c b/frontends/gtk/window.c index 015b5faaf..666e6ea60 100644 --- a/frontends/gtk/window.c +++ b/frontends/gtk/window.c @@ -1360,12 +1360,12 @@ gui_window_event(struct gui_window *gw, enum gui_window_event event) case GW_EVENT_START_THROBBER: nsgtk_toolbar_throbber(gw->toolbar, true); - /** \todo menu sensitivity for back/reload */ + nsgtk_scaffolding_throbber(gw, true); break; case GW_EVENT_STOP_THROBBER: nsgtk_toolbar_throbber(gw->toolbar, false); - /** \todo menu sensitivity for back/reload */ + nsgtk_scaffolding_throbber(gw, false); break; default: -- cgit v1.2.3