From eba0fd70ebf937ad10f7bb1221268a9552d494fa Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Sun, 10 Dec 2017 22:57:06 +0000 Subject: clean up toolbar configuration to be slightly less buggy --- frontends/gtk/toolbar.c | 124 ++++++++++++++++++++++++++---------------------- 1 file changed, 66 insertions(+), 58 deletions(-) (limited to 'frontends/gtk/toolbar.c') diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c index 0ca26c92d..e93bd49f9 100644 --- a/frontends/gtk/toolbar.c +++ b/frontends/gtk/toolbar.c @@ -26,6 +26,7 @@ #include "utils/log.h" #include "utils/messages.h" #include "utils/nsoption.h" +#include "utils/file.h" #include "gtk/gui.h" #include "gtk/warn.h" @@ -44,7 +45,7 @@ static bool edit_mode = false; struct nsgtk_toolbar_custom_store { GtkWidget *window; - GtkWidget *store_buttons[PLACEHOLDER_BUTTON]; + GtkWidget *store_buttons[PLACEHOLDER_BUTTON]; GtkWidget *widgetvbox; GtkWidget *currentbar; char numberh; /* current horizontal location while adding */ @@ -107,13 +108,13 @@ static char *remove_underscores(const char *s, bool replacespace) ret = malloc(len + 1); if (ret == NULL) { return NULL; - } + } for (i = 0, ii = 0; i < len; i++) { if (s[i] != '_') { ret[ii++] = s[i]; - } else if (replacespace) { + } else if (replacespace) { ret[ii++] = ' '; - } + } } ret[ii] = '\0'; return ret; @@ -208,18 +209,18 @@ nsgtk_theme_searchimage_default(nsgtk_search_buttons tbbutton, switch (tbbutton) { case (SEARCH_BACK_BUTTON): - image = GTK_IMAGE(nsgtk_image_new_from_stock(NSGTK_STOCK_GO_BACK, - iconsize)); + image = GTK_IMAGE(nsgtk_image_new_from_stock( + NSGTK_STOCK_GO_BACK, iconsize)); break; case (SEARCH_FORWARD_BUTTON): - image = GTK_IMAGE(nsgtk_image_new_from_stock(NSGTK_STOCK_GO_FORWARD, - iconsize)); + image = GTK_IMAGE(nsgtk_image_new_from_stock( + NSGTK_STOCK_GO_FORWARD, iconsize)); break; case (SEARCH_CLOSE_BUTTON): - image = GTK_IMAGE(nsgtk_image_new_from_stock(NSGTK_STOCK_CLOSE, - iconsize)); + image = GTK_IMAGE(nsgtk_image_new_from_stock( + NSGTK_STOCK_CLOSE, iconsize)); break; default: @@ -227,7 +228,8 @@ nsgtk_theme_searchimage_default(nsgtk_search_buttons tbbutton, } if (usedef && (image == NULL)) { - image = GTK_IMAGE(nsgtk_image_new_from_stock("gtk-missing-image", iconsize)); + image = GTK_IMAGE(nsgtk_image_new_from_stock( + "gtk-missing-image", iconsize)); } return image; @@ -255,7 +257,6 @@ static struct nsgtk_theme *nsgtk_theme_load(GtkIconSize iconsize, bool usedef) theme->image[btnloop] = nsgtk_theme_image_default(btnloop, iconsize, usedef); - } for (btnloop = SEARCH_BACK_BUTTON; @@ -823,8 +824,9 @@ static void nsgtk_toolbar_close(struct nsgtk_scaffolding *g) */ static gboolean nsgtk_toolbar_cancel_clicked(GtkWidget *widget, gpointer data) { - edit_mode = false; struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data; + + edit_mode = false; /* reset g->buttons->location */ for (int i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) { nsgtk_scaffolding_button(g, i)->location = @@ -950,6 +952,7 @@ void nsgtk_toolbar_customization_load(struct nsgtk_scaffolding *g) */ static nserror nsgtk_toolbar_customization_save(struct nsgtk_scaffolding *g) { + char *choices = NULL; char *order; int order_len = PLACEHOLDER_BUTTON * 12; /* length of order buffer */ int tbidx; @@ -981,6 +984,13 @@ static nserror nsgtk_toolbar_customization_save(struct nsgtk_scaffolding *g) nsoption_set_charp(toolbar_order, order); + /* ensure choices are saved */ + netsurf_mkpath(&choices, NULL, 2, nsgtk_config_home, "Choices"); + if (choices != NULL) { + nsoption_write(choices, NULL, NULL); + free(choices); + } + return NSERROR_OK; } @@ -990,8 +1000,9 @@ static nserror nsgtk_toolbar_customization_save(struct nsgtk_scaffolding *g) */ static gboolean nsgtk_toolbar_persist(GtkWidget *widget, gpointer data) { - edit_mode = false; struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data; + + edit_mode = false; /* save state to file, update toolbars for all windows */ nsgtk_toolbar_customization_save(g); nsgtk_toolbar_cast(g); @@ -1098,7 +1109,6 @@ nsgtk_toolbar_store_action(GtkWidget *widget, GdkDragContext *gdc, */ static void nsgtk_toolbar_window_open(struct nsgtk_scaffolding *g) { - int x = 0, y = 0; struct nsgtk_theme *theme; nserror res; @@ -1112,7 +1122,7 @@ static void nsgtk_toolbar_window_open(struct nsgtk_scaffolding *g) res = nsgtk_builder_new_from_resname("toolbar", &window->builder); if (res != NSERROR_OK) { NSLOG(netsurf, INFO, "Toolbar UI builder init failed"); - nsgtk_warning(messages_get("NoMemory"), 0); + nsgtk_warning("Toolbar UI builder init failed", 0); nsgtk_toolbar_cancel_clicked(NULL, g); free(theme); return; @@ -1120,8 +1130,8 @@ static void nsgtk_toolbar_window_open(struct nsgtk_scaffolding *g) gtk_builder_connect_signals(window->builder, NULL); - window->window = GTK_WIDGET(gtk_builder_get_object(window->builder, - "toolbarwindow")); + window->window = GTK_WIDGET(gtk_builder_get_object( + window->builder, "dialogToolbar")); if (window->window == NULL) { nsgtk_warning(messages_get("NoMemory"), 0); nsgtk_toolbar_cancel_clicked(NULL, g); @@ -1129,8 +1139,11 @@ static void nsgtk_toolbar_window_open(struct nsgtk_scaffolding *g) return; } - window->widgetvbox = GTK_WIDGET(gtk_builder_get_object(window->builder, - "widgetvbox")); + gtk_window_set_transient_for(GTK_WINDOW(window->window), + nsgtk_scaffolding_window(g)); + + window->widgetvbox = GTK_WIDGET(gtk_builder_get_object( + window->builder, "widgetvbox")); if (window->widgetvbox == NULL) { nsgtk_warning(messages_get("NoMemory"), 0); nsgtk_toolbar_cancel_clicked(NULL, g); @@ -1138,9 +1151,12 @@ static void nsgtk_toolbar_window_open(struct nsgtk_scaffolding *g) return; } - window->numberh = NSGTK_STORE_WIDTH; /* preset to width [in buttons] of */ + /* preset to width [in buttons] of */ + window->numberh = NSGTK_STORE_WIDTH; + /* store to cause creation of a new toolbar */ window->currentbutton = -1; + /* load toolbuttons */ /* add toolbuttons to window */ /* set event handlers */ @@ -1160,33 +1176,20 @@ static void nsgtk_toolbar_window_open(struct nsgtk_scaffolding *g) } free(theme); - gtk_window_set_transient_for(GTK_WINDOW(window->window), - nsgtk_scaffolding_window(g)); - gtk_window_set_title(GTK_WINDOW(window->window), messages_get( - "gtkToolBarTitle")); + gtk_window_set_accept_focus(GTK_WINDOW(window->window), FALSE); + gtk_drag_dest_set(GTK_WIDGET(window->window), GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP, &entry, 1, GDK_ACTION_COPY); - gtk_widget_show_all(window->window); - gtk_window_set_position(GTK_WINDOW(window->window), - GTK_WIN_POS_CENTER_ON_PARENT); - gtk_window_get_position(nsgtk_scaffolding_window(g), &x, &y); - gtk_window_move(GTK_WINDOW(window->window), x, y + 100); - - g_signal_connect(GTK_WIDGET(gtk_builder_get_object(window->builder, - "cancelbutton")), - "clicked", - G_CALLBACK(nsgtk_toolbar_cancel_clicked), - g); - g_signal_connect(GTK_WIDGET(gtk_builder_get_object(window->builder, - "okbutton")), + g_signal_connect(GTK_WIDGET(gtk_builder_get_object( + window->builder, "close")), "clicked", G_CALLBACK(nsgtk_toolbar_persist), g); - g_signal_connect(GTK_WIDGET(gtk_builder_get_object(window->builder, - "resetbutton")), + g_signal_connect(GTK_WIDGET(gtk_builder_get_object( + window->builder, "reset")), "clicked", G_CALLBACK(nsgtk_toolbar_reset), g); @@ -1199,6 +1202,8 @@ static void nsgtk_toolbar_window_open(struct nsgtk_scaffolding *g) g_signal_connect(window->window, "drag-motion", G_CALLBACK(nsgtk_toolbar_store_action), g); + + gtk_widget_show_all(window->window); } /** @@ -1342,33 +1347,37 @@ nsgtk_toolbar_set_handler(struct nsgtk_scaffolding *g, nsgtk_toolbar_button i) case URL_BAR_ITEM: nsgtk_scaffolding_update_url_bar_ref(g); g_signal_connect(GTK_WIDGET(nsgtk_scaffolding_urlbar(g)), - "activate", G_CALLBACK( - nsgtk_window_url_activate_event), g); + "activate", G_CALLBACK( + nsgtk_window_url_activate_event), g); g_signal_connect(GTK_WIDGET(nsgtk_scaffolding_urlbar(g)), - "changed", G_CALLBACK( - nsgtk_window_url_changed), g); + "changed", G_CALLBACK( + nsgtk_window_url_changed), g); break; + case THROBBER_ITEM: nsgtk_scaffolding_update_throbber_ref(g); break; + case WEBSEARCH_ITEM: nsgtk_scaffolding_update_websearch_ref(g); g_signal_connect(GTK_WIDGET(nsgtk_scaffolding_websearch(g)), - "activate", G_CALLBACK( - nsgtk_websearch_activate), g); + "activate", G_CALLBACK( + nsgtk_websearch_activate), g); g_signal_connect(GTK_WIDGET(nsgtk_scaffolding_websearch(g)), - "button-press-event", G_CALLBACK( - nsgtk_websearch_clear), g); + "button-press-event", G_CALLBACK( + nsgtk_websearch_clear), g); break; + default: if ((nsgtk_scaffolding_button(g, i)->bhandler != NULL) && - (nsgtk_scaffolding_button(g, i)->button - != NULL)) - g_signal_connect(nsgtk_scaffolding_button(g, i)-> - button, "clicked", - G_CALLBACK(nsgtk_scaffolding_button(g, - i)->bhandler), g); - break; + (nsgtk_scaffolding_button(g, i)->button != NULL)) { + g_signal_connect( + nsgtk_scaffolding_button(g, i)->button, + "clicked", + G_CALLBACK(nsgtk_scaffolding_button( + g, i)->bhandler), g); + } + break; } } @@ -1460,7 +1469,8 @@ DATAHANDLER(prevtab, PREVTAB, window) DATAHANDLER(guide, GUIDE, window) DATAHANDLER(info, INFO, window) #undef DATAHANDLER -#define DATAHANDLER(p, q, r)\ + +#define DATAHANDLER(p, q, r) \ gboolean nsgtk_toolbar_##p##_button_data(GtkWidget *widget, GdkDragContext\ *cont, GtkSelectionData *selection, guint info, guint time,\ gpointer data)\ @@ -1481,5 +1491,3 @@ gboolean nsgtk_toolbar_##p##_toolbar_button_data(GtkWidget *widget,\ DATAHANDLER(throbber, THROBBER, window) DATAHANDLER(websearch, WEBSEARCH, window) #undef DATAHANDLER - - -- cgit v1.2.3