From a8e186f120617a2f29a0673947734b65fad7995f Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Tue, 10 Sep 2019 22:58:18 +0100 Subject: fix customisation toolbar reset and remove unused code --- frontends/gtk/toolbar.c | 780 ++++++++---------------------------------------- 1 file changed, 123 insertions(+), 657 deletions(-) (limited to 'frontends') diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c index 9c51b5bd6..399db6c3f 100644 --- a/frontends/gtk/toolbar.c +++ b/frontends/gtk/toolbar.c @@ -191,7 +191,6 @@ possible into the store */ #define NSGTK_WEBSEARCH_WIDTH 150 - enum image_sets { IMAGE_SET_MAIN_MENU = 0, IMAGE_SET_RCLICK_MENU, @@ -213,7 +212,6 @@ struct nsgtk_theme { }; /* forward declaration */ -void nsgtk_toolbar_connect_all(struct nsgtk_scaffolding *g); int nsgtk_toolbar_get_id_from_widget(GtkWidget *widget, struct nsgtk_scaffolding *g); static nserror toolbar_item_create(nsgtk_toolbar_button id, struct nsgtk_toolbar_item **item_out); @@ -325,6 +323,7 @@ nsgtk_theme_image_default(nsgtk_toolbar_button tbbutton, return image; } + /** * Get default image for search buttons / menu items from gtk stock items * @@ -333,7 +332,6 @@ nsgtk_theme_image_default(nsgtk_toolbar_button tbbutton, * \param usedef Use the default image if not found. * \return default search image. */ - static GtkImage * nsgtk_theme_searchimage_default(nsgtk_search_buttons tbbutton, GtkIconSize iconsize, @@ -510,26 +508,6 @@ void nsgtk_theme_implement(struct nsgtk_scaffolding *g) } - -/** - * get scaffolding button index of button at location - * - * \return toolbar item id from location when there is an item at that logical - * location; else -1 - */ -static nsgtk_toolbar_button -nsgtk_toolbar_get_id_at_location(struct nsgtk_scaffolding *g, int i) -{ - int q; - for (q = BACK_BUTTON; q < PLACEHOLDER_BUTTON; q++) { - if (nsgtk_scaffolding_button(g, q)->location == i) { - return q; - } - } - return -1; -} - - /** * returns a string without its underscores * @@ -708,32 +686,6 @@ make_toolbar_item(nsgtk_toolbar_button i, struct nsgtk_theme *theme) break; \ } - MAKE_STOCKBUTTON(HOME, NSGTK_STOCK_HOME) - MAKE_STOCKBUTTON(BACK, NSGTK_STOCK_GO_BACK) - MAKE_STOCKBUTTON(FORWARD, NSGTK_STOCK_GO_FORWARD) - MAKE_STOCKBUTTON(STOP, NSGTK_STOCK_STOP) - MAKE_STOCKBUTTON(RELOAD, NSGTK_STOCK_REFRESH) -#undef MAKE_STOCKBUTTON - - case HISTORY_BUTTON: - w = gtk_tool_button_new(GTK_WIDGET( - theme->image[HISTORY_BUTTON]), "H"); - /* set history widget minimum width */ - gtk_widget_set_size_request(GTK_WIDGET(w), 20, -1); - break; - - case URL_BAR_ITEM: - w = make_toolbar_item_url_bar(); - break; - - case THROBBER_ITEM: - w = make_toolbar_item_throbber(); - break; - - case WEBSEARCH_ITEM: - w = make_toolbar_item_websearch(); - break; - /* gtk_tool_button_new accepts NULL args */ #define MAKE_MENUBUTTON(p, q) \ case p##_BUTTON: { \ @@ -748,6 +700,12 @@ make_toolbar_item(nsgtk_toolbar_button i, struct nsgtk_theme *theme) break; \ } + MAKE_STOCKBUTTON(HOME, NSGTK_STOCK_HOME) + MAKE_STOCKBUTTON(BACK, NSGTK_STOCK_GO_BACK) + MAKE_STOCKBUTTON(FORWARD, NSGTK_STOCK_GO_FORWARD) + MAKE_STOCKBUTTON(STOP, NSGTK_STOCK_STOP) + MAKE_STOCKBUTTON(RELOAD, NSGTK_STOCK_REFRESH) + MAKE_MENUBUTTON(NEWWINDOW, gtkNewWindow) MAKE_MENUBUTTON(NEWTAB, gtkNewTab) MAKE_MENUBUTTON(OPENFILE, gtkOpenFile) @@ -791,8 +749,29 @@ make_toolbar_item(nsgtk_toolbar_button i, struct nsgtk_theme *theme) MAKE_MENUBUTTON(GUIDE, gtkGuide) MAKE_MENUBUTTON(INFO, gtkUserInformation) MAKE_MENUBUTTON(OPENMENU, gtkOpenMenu) + +#undef MAKE_STOCKBUTTON #undef MAKE_MENUBUTTON + case HISTORY_BUTTON: + w = gtk_tool_button_new(GTK_WIDGET( + theme->image[HISTORY_BUTTON]), "H"); + /* set history widget minimum width */ + gtk_widget_set_size_request(GTK_WIDGET(w), 20, -1); + break; + + case URL_BAR_ITEM: + w = make_toolbar_item_url_bar(); + break; + + case THROBBER_ITEM: + w = make_toolbar_item_throbber(); + break; + + case WEBSEARCH_ITEM: + w = make_toolbar_item_websearch(); + break; + default: break; @@ -810,535 +789,6 @@ static GtkTargetEntry target_entry = { 0 }; -#if 0 - -/** - * toolbar customisation window context - */ -struct nsgtk_toolbar_custom_store { - GtkWidget *window; - GtkWidget *store_buttons[PLACEHOLDER_BUTTON]; - GtkWidget *widgetvbox; - GtkWidget *currentbar; - char numberh; /* current horizontal location while adding */ - GtkBuilder *builder; /* button widgets to store */ - int buttonlocations[PLACEHOLDER_BUTTON]; - int currentbutton; - bool fromstore; -}; -static struct nsgtk_toolbar_custom_store store; -static struct nsgtk_toolbar_custom_store *window = &store; - -/* exported interface documented in gtk/scaffolding.h */ -static GtkToolbar *nsgtk_scaffolding_toolbar(struct nsgtk_scaffolding *g) -{ - return NULL;//g->tool_bar; -} - -/** - * callback function to iterate toolbar's widgets - */ -static void nsgtk_toolbar_clear_toolbar(GtkWidget *widget, gpointer data) -{ - struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data; - gtk_container_remove(GTK_CONTAINER(nsgtk_scaffolding_toolbar(g)), - widget); -} - -/** - * connect temporary handler for toolbar edit events - * - * \param g The scaffolding - * \param bi The button index - */ -static void nsgtk_toolbar_temp_connect(struct nsgtk_scaffolding *g, - nsgtk_toolbar_button bi) -{ - struct nsgtk_toolbar_item *bc; - - if (bi != URL_BAR_ITEM) { - bc = nsgtk_scaffolding_button(g, bi); - if ((bc->button != NULL) && (bc->dataminus != NULL)) { - g_signal_connect(bc->button, - "drag-data-get", - G_CALLBACK(bc->dataminus), - g); - } - } -} - -/* exported interface documented in gtk/scaffolding.h */ -static void nsgtk_scaffolding_reset_offset(struct nsgtk_scaffolding *g) -{ - //g->offset = 0; -} - - - -/** - * called when hovering an item above the toolbar - */ -static gboolean -nsgtk_toolbar_action(GtkWidget *widget, GdkDragContext *gdc, gint x, - gint y, guint time, gpointer data) -{ - struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data; - GtkToolItem *item = gtk_tool_button_new(NULL, NULL); - if (item != NULL) - gtk_toolbar_set_drop_highlight_item( - nsgtk_scaffolding_toolbar(g), - GTK_TOOL_ITEM(item), - gtk_toolbar_get_drop_index( - nsgtk_scaffolding_toolbar(g), x, y)); - return FALSE; -} - - -/** - * add item to toolbar. - * - * the function should be called, when multiple items are being added, - * in ascending order. - * - * \param g the scaffolding whose toolbar an item is added to. - * \param i the location in the toolbar. - * \param theme The theme in use. - */ -static void -nsgtk_toolbar_add_item_to_toolbar(struct nsgtk_scaffolding *g, int i, - struct nsgtk_theme *theme) -{ - int q; - for (q = BACK_BUTTON; q < PLACEHOLDER_BUTTON; q++) - if (nsgtk_scaffolding_button(g, q)->location == i) { - nsgtk_scaffolding_button(g, q)->button = GTK_TOOL_ITEM( - make_toolbar_item(q, theme)); - gtk_toolbar_insert(nsgtk_scaffolding_toolbar(g), - nsgtk_scaffolding_button(g, q)->button, - i); - break; - } -} - -/** - * cleanup code physical update of all toolbars; resensitize - * \param g the 'front' scaffolding that called customize - */ -static void nsgtk_toolbar_close(struct nsgtk_scaffolding *g) -{ - int i; - - struct nsgtk_scaffolding *list; - struct nsgtk_theme *theme; - - list = nsgtk_scaffolding_iterate(NULL); - while (list) { - theme = nsgtk_theme_load(GTK_ICON_SIZE_LARGE_TOOLBAR, false); - if (theme == NULL) { - nsgtk_warning(messages_get("NoMemory"), 0); - continue; - } - /* clear toolbar */ - gtk_container_foreach(GTK_CONTAINER(nsgtk_scaffolding_toolbar( - list)), nsgtk_toolbar_clear_toolbar, list); - /* then add items */ - for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) { - nsgtk_toolbar_add_item_to_toolbar(list, i, theme); - } - nsgtk_toolbar_connect_all(list); - gtk_widget_show_all(GTK_WIDGET(nsgtk_scaffolding_toolbar( - list))); - nsgtk_scaffolding_set_sensitivity(list); - nsgtk_widget_override_background_color( - GTK_WIDGET(nsgtk_window_get_layout(nsgtk_scaffolding_top_level(list))), - GTK_STATE_FLAG_NORMAL, - 0, 0xFFFF, 0xFFFF, 0xFFFF); - g_signal_handler_unblock(GTK_WIDGET( - nsgtk_window_get_layout( - nsgtk_scaffolding_top_level(list))), - nsgtk_window_get_signalhandler( - nsgtk_scaffolding_top_level(list), - NSGTK_WINDOW_SIGNAL_CLICK)); - g_signal_handler_unblock(GTK_WIDGET( - nsgtk_window_get_layout( - nsgtk_scaffolding_top_level(list))), - nsgtk_window_get_signalhandler( - nsgtk_scaffolding_top_level(list), - NSGTK_WINDOW_SIGNAL_REDRAW)); - browser_window_refresh_url_bar( - nsgtk_get_browser_window( - nsgtk_scaffolding_top_level(list))); - - if (list != g) - gtk_widget_set_sensitive(GTK_WIDGET( - nsgtk_scaffolding_window(list)), TRUE); - free(theme); - list = nsgtk_scaffolding_iterate(list); - } - gtk_widget_set_sensitive(GTK_WIDGET(nsgtk_scaffolding_notebook(g)), - TRUE); - gtk_widget_set_sensitive(GTK_WIDGET(nsgtk_scaffolding_menu_bar(g)), - TRUE); - /* update favicon etc */ - nsgtk_scaffolding_set_top_level(nsgtk_scaffolding_top_level(g)); - - search_web_select_provider(-1); -} - - -/** - * set toolbar logical -> physical; physically visible toolbar buttons are made - * to correspond to the logically stored schema in terms of location - * visibility etc - */ -static void nsgtk_toolbar_set_physical(struct nsgtk_scaffolding *g) -{ - int i; - struct nsgtk_theme *theme; - - theme = nsgtk_theme_load(GTK_ICON_SIZE_LARGE_TOOLBAR, false); - if (theme == NULL) { - nsgtk_warning(messages_get("NoMemory"), 0); - return; - } - /* simplest is to clear the toolbar then reload it from memory */ - gtk_container_foreach(GTK_CONTAINER(nsgtk_scaffolding_toolbar(g)), - nsgtk_toolbar_clear_toolbar, g); - for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) { - nsgtk_toolbar_add_item_to_toolbar(g, i, theme); - } - gtk_widget_show_all(GTK_WIDGET(nsgtk_scaffolding_toolbar(g))); - free(theme); -} - - -/** - * when cancel button is clicked - */ -static gboolean nsgtk_toolbar_cancel_clicked(GtkWidget *widget, gpointer data) -{ - 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 = - window->buttonlocations[i]; - } - nsgtk_toolbar_set_physical(g); - nsgtk_toolbar_connect_all(g); - nsgtk_toolbar_close(g); - nsgtk_scaffolding_set_sensitivity(g); - gtk_widget_destroy(window->window); - return TRUE; -} - -/** - * physically add widgets to store window - */ -static bool nsgtk_toolbar_add_store_widget(GtkWidget *widget) -{ - if (window->numberh >= NSGTK_STORE_WIDTH) { - window->currentbar = gtk_toolbar_new(); - if (window->currentbar == NULL) { - nsgtk_warning("NoMemory", 0); - return false; - } - gtk_toolbar_set_style(GTK_TOOLBAR(window->currentbar), - GTK_TOOLBAR_BOTH); - gtk_toolbar_set_icon_size(GTK_TOOLBAR(window->currentbar), - GTK_ICON_SIZE_LARGE_TOOLBAR); - gtk_box_pack_start(GTK_BOX(window->widgetvbox), - window->currentbar, FALSE, FALSE, 0); - window->numberh = 0; - } - gtk_widget_set_size_request(widget, NSGTK_BUTTON_WIDTH, - NSGTK_BUTTON_HEIGHT); - gtk_toolbar_insert(GTK_TOOLBAR(window->currentbar), GTK_TOOL_ITEM( - widget), window->numberh++); - gtk_tool_item_set_use_drag_window(GTK_TOOL_ITEM(widget), TRUE); - gtk_drag_source_set(widget, GDK_BUTTON1_MASK, &entry, 1, - GDK_ACTION_COPY); - gtk_widget_show_all(window->window); - return true; -} - - -/** - * cast toolbar settings to all scaffoldings referenced from the global linked - * list of gui_windows - */ -static void nsgtk_toolbar_cast(struct nsgtk_scaffolding *g) -{ - int i; - struct nsgtk_scaffolding *list; - - for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) { - window->buttonlocations[i] = - ((nsgtk_scaffolding_button(g, i)->location - >= -1) && - (nsgtk_scaffolding_button(g, i)->location - < PLACEHOLDER_BUTTON)) ? - nsgtk_scaffolding_button(g, i)->location : -1; - } - - list = nsgtk_scaffolding_iterate(NULL); - while (list) { - if (list != g) - for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) - nsgtk_scaffolding_button(list, i)->location = - window->buttonlocations[i]; - list = nsgtk_scaffolding_iterate(list); - } -} - - - - - - - -/** - * when 'reload defaults' button is clicked - */ -static gboolean nsgtk_toolbar_reset(GtkWidget *widget, gpointer data) -{ - struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data; - int i; - for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) - nsgtk_scaffolding_button(g, i)->location = - (i <= THROBBER_ITEM) ? i : -1; - nsgtk_toolbar_set_physical(g); - for (i = BACK_BUTTON; i <= THROBBER_ITEM; i++) { - if (i == URL_BAR_ITEM) - continue; - gtk_tool_item_set_use_drag_window(GTK_TOOL_ITEM( - nsgtk_scaffolding_button(g, i)->button), TRUE); - gtk_drag_source_set(GTK_WIDGET( - nsgtk_scaffolding_button(g, i)->button), - GDK_BUTTON1_MASK, &entry, 1, GDK_ACTION_COPY); - nsgtk_toolbar_temp_connect(g, i); - } - return TRUE; -} - -/** - * when titlebar / alt-F4 window close event happens - */ -static gboolean nsgtk_toolbar_delete(GtkWidget *widget, GdkEvent *event, - gpointer data) -{ - edit_mode = false; - struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data; - /* reset g->buttons->location */ - for (int i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) { - nsgtk_scaffolding_button(g, i)->location = - window->buttonlocations[i]; - } - nsgtk_toolbar_set_physical(g); - nsgtk_toolbar_connect_all(g); - nsgtk_toolbar_close(g); - nsgtk_scaffolding_set_sensitivity(g); - gtk_widget_destroy(window->window); - return TRUE; -} - - - -/** - * create store window - */ -static void nsgtk_toolbar_window_open(struct nsgtk_scaffolding *g) -{ - struct nsgtk_theme *theme; - nserror res; - - theme = nsgtk_theme_load(GTK_ICON_SIZE_LARGE_TOOLBAR, true); - if (theme == NULL) { - nsgtk_warning(messages_get("NoMemory"), 0); - nsgtk_toolbar_cancel_clicked(NULL, g); - return; - } - - res = nsgtk_builder_new_from_resname("toolbar", &window->builder); - if (res != NSERROR_OK) { - NSLOG(netsurf, INFO, "Toolbar UI builder init failed"); - nsgtk_warning("Toolbar UI builder init failed", 0); - nsgtk_toolbar_cancel_clicked(NULL, g); - free(theme); - return; - } - - gtk_builder_connect_signals(window->builder, NULL); - - 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); - free(theme); - return; - } - - 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); - free(theme); - return; - } - - /* 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 */ - for (int i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) { - if (i == URL_BAR_ITEM) - continue; - window->store_buttons[i] = - make_toolbar_item(i, theme); - if (window->store_buttons[i] == NULL) { - nsgtk_warning(messages_get("NoMemory"), 0); - continue; - } - nsgtk_toolbar_add_store_widget(window->store_buttons[i]); - g_signal_connect(window->store_buttons[i], "drag-data-get", - G_CALLBACK( - nsgtk_scaffolding_button(g, i)->dataplus), g); - } - free(theme); - - - 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); - - 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, "reset")), - "clicked", - G_CALLBACK(nsgtk_toolbar_reset), - g); - - g_signal_connect(window->window, "delete-event", - G_CALLBACK(nsgtk_toolbar_delete), g); - - g_signal_connect(window->window, "drag-drop", - G_CALLBACK(nsgtk_toolbar_store_return), g); - - g_signal_connect(window->window, "drag-motion", - G_CALLBACK(nsgtk_toolbar_store_action), g); - - gtk_widget_show_all(window->window); -} - -/** - * change behaviour of scaffoldings while editing toolbar - * - * All buttons as well as window clicks are desensitized; then buttons - * in the front window are changed to movable buttons - */ -void nsgtk_toolbar_customisation_init(struct nsgtk_scaffolding *g) -{ - int i; - struct nsgtk_scaffolding *list; - edit_mode = true; - - list = nsgtk_scaffolding_iterate(NULL); - while (list) { - g_signal_handler_block(GTK_WIDGET( - nsgtk_window_get_layout( - nsgtk_scaffolding_top_level(list))), - nsgtk_window_get_signalhandler( - nsgtk_scaffolding_top_level(list), - NSGTK_WINDOW_SIGNAL_CLICK)); - g_signal_handler_block(GTK_WIDGET( - nsgtk_window_get_layout( - nsgtk_scaffolding_top_level(list))), - nsgtk_window_get_signalhandler( - nsgtk_scaffolding_top_level(list), - NSGTK_WINDOW_SIGNAL_REDRAW)); - nsgtk_widget_override_background_color( - GTK_WIDGET(nsgtk_window_get_layout( - nsgtk_scaffolding_top_level(list))), - GTK_STATE_NORMAL, 0, 0xEEEE, 0xEEEE, 0xEEEE); - - if (list == g) { - list = nsgtk_scaffolding_iterate(list); - continue; - } - /* set sensitive for all gui_windows save g */ - gtk_widget_set_sensitive(GTK_WIDGET(nsgtk_scaffolding_window( - list)), FALSE); - list = nsgtk_scaffolding_iterate(list); - } - /* set sensitive for all of g save toolbar */ - gtk_widget_set_sensitive(GTK_WIDGET(nsgtk_scaffolding_menu_bar(g)), - FALSE); - gtk_widget_set_sensitive(GTK_WIDGET(nsgtk_scaffolding_notebook(g)), - FALSE); - - /* set editable aspect for toolbar */ - gtk_container_foreach(GTK_CONTAINER(nsgtk_scaffolding_toolbar(g)), - nsgtk_toolbar_clear_toolbar, g); - nsgtk_toolbar_set_physical(g); - /* memorize button locations, set editable */ - for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) { - window->buttonlocations[i] = nsgtk_scaffolding_button(g, i) - ->location; - if ((window->buttonlocations[i] == -1) || (i == URL_BAR_ITEM)) - continue; - gtk_tool_item_set_use_drag_window(GTK_TOOL_ITEM( - nsgtk_scaffolding_button(g, i)->button), TRUE); - gtk_drag_source_set(GTK_WIDGET(nsgtk_scaffolding_button( - g, i)->button), GDK_BUTTON1_MASK, &entry, 1, - GDK_ACTION_COPY); - nsgtk_toolbar_temp_connect(g, i); - } - - /* add move button listeners */ - g_signal_connect(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)), - "drag-drop", - G_CALLBACK(nsgtk_toolbar_data), - g); - g_signal_connect(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)), - "drag-data-received", - G_CALLBACK(nsgtk_toolbar_move_complete), - g); - g_signal_connect(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)), - "drag-motion", - G_CALLBACK(nsgtk_toolbar_action), - g); - g_signal_connect(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)), - "drag-leave", - G_CALLBACK(nsgtk_toolbar_clear), - g); - - /* set data types */ - gtk_drag_dest_set(GTK_WIDGET(nsgtk_scaffolding_toolbar(g)), - GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP, - &entry, 1, GDK_ACTION_COPY); - - /* open toolbar window */ - nsgtk_toolbar_window_open(g); -} -#endif - /** * save toolbar settings to file @@ -1390,26 +840,6 @@ nsgtk_toolbar_customisation_save(struct nsgtk_toolbar_customisation *tbc) } -/** - * customisation apply handler for clicked signal - * - * when 'save settings' button is clicked - */ -static gboolean -customisation_apply_clicked_cb(GtkWidget *widget, gpointer data) -{ - struct nsgtk_toolbar_customisation *tbc; - tbc = (struct nsgtk_toolbar_customisation *)data; - - /* save state to file, update toolbars for all windows */ - nsgtk_toolbar_customisation_save(tbc); - nsgtk_window_toolbar_update(); - gtk_widget_destroy(tbc->container); - - return TRUE; -} - - /** * find the toolbar item with a given location. * @@ -1505,6 +935,7 @@ customisation_container_drag_drop_cb(GtkWidget *widget, return FALSE; } + /** * customisation container handler for drag motion signal * @@ -1668,6 +1099,7 @@ customisation_toolbar_drag_leave_cb(GtkWidget *widget, gtk_toolbar_set_drop_highlight_item(GTK_TOOLBAR(widget), NULL, 0); } + /** * create a new browser window * @@ -1730,22 +1162,6 @@ int nsgtk_toolbar_get_id_from_widget(GtkWidget *widget, } - -/** - * connect 'normal' handlers to toolbar buttons - */ -void nsgtk_toolbar_connect_all(struct nsgtk_scaffolding *g) -{ - int q, i; - for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) { - q = nsgtk_toolbar_get_id_at_location(g, i); - if (q == -1) - continue; - - } -} - - /** * Apply the user toolbar button settings from configuration * @@ -1888,7 +1304,6 @@ static nserror populate_gtk_toolbar_widget(struct nsgtk_toolbar *tb) } - /** * find the toolbar item with a given gtk widget. * @@ -2177,6 +1592,91 @@ toolbar_customisation_create_toolbox(struct nsgtk_toolbar_customisation *tbc, return NSERROR_OK; } + +/** + * customisation apply handler for clicked signal + * + * when 'save settings' button is clicked + */ +static gboolean +customisation_apply_clicked_cb(GtkWidget *widget, gpointer data) +{ + struct nsgtk_toolbar_customisation *tbc; + tbc = (struct nsgtk_toolbar_customisation *)data; + + /* save state to file, update toolbars for all windows */ + nsgtk_toolbar_customisation_save(tbc); + nsgtk_window_toolbar_update(); + gtk_widget_destroy(tbc->container); + + return TRUE; +} + + +/** + * update toolbar in customisation to user settings + */ +static nserror +customisation_toolbar_update(struct nsgtk_toolbar_customisation *tbc) +{ + GtkEntry *entry; + nserror res; + + res = apply_user_button_customisation(&tbc->toolbar); + if (res != NSERROR_OK) { + return res; + } + + /* populate toolbar widget */ + res = populate_gtk_toolbar_widget(&tbc->toolbar); + if (res != NSERROR_OK) { + return res; + } + + /* ensure icon sizes and text labels on toolbar are set */ + res = nsgtk_toolbar_restyle(&tbc->toolbar); + if (res != NSERROR_OK) { + return res; + } + + /* attach handlers to toolbar widgets */ + res = toolbar_customisation_connect_signals(&tbc->toolbar); + if (res != NSERROR_OK) { + return res; + } + + if (tbc->toolbar.buttons[URL_BAR_ITEM]->location != INACTIVE_LOCATION) { + entry = GTK_ENTRY(gtk_bin_get_child(GTK_BIN(tbc->toolbar.buttons[URL_BAR_ITEM]->button))); + + gtk_widget_set_sensitive(GTK_WIDGET(entry), FALSE); + } + + if (tbc->toolbar.buttons[WEBSEARCH_ITEM]->location != INACTIVE_LOCATION) { + entry = GTK_ENTRY(gtk_bin_get_child(GTK_BIN(tbc->toolbar.buttons[WEBSEARCH_ITEM]->button))); + + gtk_widget_set_sensitive(GTK_WIDGET(entry), FALSE); + } + + return NSERROR_OK; +} + +/** + * customisation reset handler for clicked signal + * + * when 'reload defaults' button is clicked + */ +static gboolean +customisation_reset_clicked_cb(GtkWidget *widget, gpointer data) +{ + struct nsgtk_toolbar_customisation *tbc; + tbc = (struct nsgtk_toolbar_customisation *)data; + + customisation_toolbar_update(tbc); + + return TRUE; +} + + /* * Toolbar button clicked handlers */ @@ -2254,45 +1754,12 @@ static gboolean cutomize_button_clicked_cb(GtkWidget *widget, gpointer data) } } - res = apply_user_button_customisation(&tbc->toolbar); + res = customisation_toolbar_update(tbc); if (res != NSERROR_OK) { goto cutomize_button_clicked_cb_error; } - /* populate toolbar widget */ - res = populate_gtk_toolbar_widget(&tbc->toolbar); - if (res != NSERROR_OK) { - goto cutomize_button_clicked_cb_error; - } - - /* ensure icon sizes and text labels on toolbar are set */ - res = nsgtk_toolbar_restyle(&tbc->toolbar); - if (res != NSERROR_OK) { - goto cutomize_button_clicked_cb_error; - } - - /* attach handlers to toolbar widgets */ - res = toolbar_customisation_connect_signals(&tbc->toolbar); - if (res != NSERROR_OK) { - goto cutomize_button_clicked_cb_error; - } - - if (tbc->toolbar.buttons[URL_BAR_ITEM]->location != INACTIVE_LOCATION) { - GtkEntry *entry; - entry = GTK_ENTRY(gtk_bin_get_child(GTK_BIN(tbc->toolbar.buttons[URL_BAR_ITEM]->button))); - - gtk_widget_set_sensitive(GTK_WIDGET(entry), FALSE); - } - - if (tbc->toolbar.buttons[WEBSEARCH_ITEM]->location != INACTIVE_LOCATION) { - GtkEntry *entry; - entry = GTK_ENTRY(gtk_bin_get_child(GTK_BIN(tbc->toolbar.buttons[WEBSEARCH_ITEM]->button))); - - gtk_widget_set_sensitive(GTK_WIDGET(entry), FALSE); - } - /* use toolbox for widgets to drag to/from */ - gtk_widget_get_allocation(GTK_WIDGET(notebook), ¬ebook_alloc); res = toolbar_customisation_create_toolbox(tbc, notebook_alloc.width); @@ -2300,11 +1767,6 @@ static gboolean cutomize_button_clicked_cb(GtkWidget *widget, gpointer data) goto cutomize_button_clicked_cb_error; } - - /* save and update on apply button then discard */ - /* discard button causes destruction */ - /* close and cleanup on destroy signal */ - /* configure the container */ gtk_drag_dest_set(GTK_WIDGET(tbc->container), GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP, @@ -2312,22 +1774,26 @@ static gboolean cutomize_button_clicked_cb(GtkWidget *widget, gpointer data) 1, GDK_ACTION_COPY); + /* discard button calls destroy */ g_signal_connect_swapped(GTK_WIDGET(gtk_builder_get_object(builder, "discard")), "clicked", G_CALLBACK(gtk_widget_destroy), tbc->container); + /* save and update on apply button */ g_signal_connect(GTK_WIDGET(gtk_builder_get_object(builder, "apply")), "clicked", G_CALLBACK(customisation_apply_clicked_cb), tbc); -#if 0 g_signal_connect(GTK_WIDGET(gtk_builder_get_object(builder, "reset")), "clicked", - G_CALLBACK(nsgtk_toolbar_reset), - g); + G_CALLBACK(customisation_reset_clicked_cb), + tbc); + + /* close and cleanup on destroy signal */ +#if 0 g_signal_connect(tbc->container, "delete-event", -- cgit v1.2.3