From c346055b42a170fced8bcfbeaed52e3b2b6553d2 Mon Sep 17 00:00:00 2001 From: deepend Date: Fri, 23 Jan 2026 10:32:17 -0700 Subject: [PATCH] Added a shared GTK3 stock-to-icon-name helper in gtkutil and exposed it for reuse. Updated gtkutil_button() to use icon-name images on GTK3 while preserving stock image usage on GTK2. Switched menu icon creation to the shared GTK3 mapping helper. --- src/fe-gtk/gtkutil.c | 72 +++++++++++++++++++++++++++++++++++++++++++- src/fe-gtk/gtkutil.h | 3 ++ src/fe-gtk/menu.c | 58 ++--------------------------------- 3 files changed, 76 insertions(+), 57 deletions(-) diff --git a/src/fe-gtk/gtkutil.c b/src/fe-gtk/gtkutil.c index 364ec24f..15aa317b 100644 --- a/src/fe-gtk/gtkutil.c +++ b/src/fe-gtk/gtkutil.c @@ -62,6 +62,60 @@ struct file_req int flags; /* FRF_* flags */ }; +#if HAVE_GTK3 +const char * +gtkutil_icon_name_from_stock (const char *stock_name) +{ + if (!stock_name) + return NULL; + + if (strcmp (stock_name, "gtk-new") == 0) + return "document-new"; + if (strcmp (stock_name, "gtk-open") == 0 || strcmp (stock_name, "gtk-revert-to-saved") == 0) + return "document-open"; + if (strcmp (stock_name, "gtk-save") == 0) + return "document-save"; + if (strcmp (stock_name, "gtk-save-as") == 0) + return "document-save-as"; + if (strcmp (stock_name, "gtk-cancel") == 0) + return "dialog-cancel"; + if (strcmp (stock_name, "gtk-ok") == 0) + return "dialog-ok"; + if (strcmp (stock_name, "gtk-copy") == 0) + return "edit-copy"; + if (strcmp (stock_name, "gtk-delete") == 0) + return "edit-delete"; + if (strcmp (stock_name, "gtk-clear") == 0) + return "edit-clear"; + if (strcmp (stock_name, "gtk-redo") == 0) + return "edit-redo"; + if (strcmp (stock_name, "gtk-find") == 0 || strcmp (stock_name, "gtk-justify-left") == 0) + return "edit-find"; + if (strcmp (stock_name, "gtk-refresh") == 0) + return "view-refresh"; + if (strcmp (stock_name, "gtk-index") == 0) + return "view-list"; + if (strcmp (stock_name, "gtk-jump-to") == 0) + return "go-jump"; + if (strcmp (stock_name, "gtk-preferences") == 0) + return "preferences-system"; + if (strcmp (stock_name, "gtk-help") == 0) + return "help-browser"; + if (strcmp (stock_name, "gtk-about") == 0) + return "help-about"; + if (strcmp (stock_name, "gtk-close") == 0) + return "window-close"; + if (strcmp (stock_name, "gtk-quit") == 0) + return "application-exit"; + if (strcmp (stock_name, "gtk-connect") == 0) + return "network-connect"; + if (strcmp (stock_name, "gtk-disconnect") == 0) + return "network-disconnect"; + + return stock_name; +} +#endif + static void gtkutil_file_req_destroy (GtkWidget * wid, struct file_req *freq) { @@ -517,13 +571,23 @@ gtkutil_button (GtkWidget *box, char *stock, char *tip, void *callback, void *userdata, char *labeltext) { GtkWidget *wid, *img, *bbox; +#if HAVE_GTK3 + const char *icon_name; +#endif wid = gtk_button_new (); if (labeltext) { gtk_button_set_label (GTK_BUTTON (wid), labeltext); - gtk_button_set_image (GTK_BUTTON (wid), gtk_image_new_from_stock (stock, GTK_ICON_SIZE_MENU)); +#if HAVE_GTK3 + icon_name = gtkutil_icon_name_from_stock (stock); + img = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_MENU); +#endif +#if !HAVE_GTK3 + img = gtk_image_new_from_stock (stock, GTK_ICON_SIZE_MENU); +#endif + gtk_button_set_image (GTK_BUTTON (wid), img); gtk_button_set_use_underline (GTK_BUTTON (wid), TRUE); if (box) gtk_container_add (GTK_CONTAINER (box), wid); @@ -534,7 +598,13 @@ gtkutil_button (GtkWidget *box, char *stock, char *tip, void *callback, gtk_container_add (GTK_CONTAINER (wid), bbox); gtk_widget_show (bbox); +#if HAVE_GTK3 + icon_name = gtkutil_icon_name_from_stock (stock); + img = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_MENU); +#endif +#if !HAVE_GTK3 img = gtk_image_new_from_stock (stock, GTK_ICON_SIZE_MENU); +#endif gtk_container_add (GTK_CONTAINER (bbox), img); gtk_widget_show (img); gtk_box_pack_start (GTK_BOX (box), wid, 0, 0, 0); diff --git a/src/fe-gtk/gtkutil.h b/src/fe-gtk/gtkutil.h index efcbd582..8454a945 100644 --- a/src/fe-gtk/gtkutil.h +++ b/src/fe-gtk/gtkutil.h @@ -30,6 +30,9 @@ void gtkutil_destroy (GtkWidget * igad, GtkWidget * dgad); void gtkutil_destroy_on_esc (GtkWidget *win); GtkWidget *gtkutil_button (GtkWidget *box, char *stock, char *tip, void *callback, void *userdata, char *labeltext); +#if HAVE_GTK3 +const char *gtkutil_icon_name_from_stock (const char *stock_name); +#endif void gtkutil_label_new (char *text, GtkWidget * box); GtkWidget *gtkutil_entry_new (int max, GtkWidget * box, void *callback, gpointer userdata); diff --git a/src/fe-gtk/menu.c b/src/fe-gtk/menu.c index 5dd568f3..62f2d467 100644 --- a/src/fe-gtk/menu.c +++ b/src/fe-gtk/menu.c @@ -261,60 +261,6 @@ menu_toggle_item (char *label, GtkWidget *menu, void *callback, void *userdata, return item; } -#if HAVE_GTK3 -static const char * -menu_icon_name_from_stock (const char *stock_name) -{ - if (!stock_name) - return NULL; - - if (strcmp (stock_name, "gtk-new") == 0) - return "document-new"; - if (strcmp (stock_name, "gtk-open") == 0 || strcmp (stock_name, "gtk-revert-to-saved") == 0) - return "document-open"; - if (strcmp (stock_name, "gtk-save") == 0) - return "document-save"; - if (strcmp (stock_name, "gtk-save-as") == 0) - return "document-save-as"; - if (strcmp (stock_name, "gtk-cancel") == 0) - return "dialog-cancel"; - if (strcmp (stock_name, "gtk-ok") == 0) - return "dialog-ok"; - if (strcmp (stock_name, "gtk-copy") == 0) - return "edit-copy"; - if (strcmp (stock_name, "gtk-delete") == 0) - return "edit-delete"; - if (strcmp (stock_name, "gtk-clear") == 0) - return "edit-clear"; - if (strcmp (stock_name, "gtk-redo") == 0) - return "edit-redo"; - if (strcmp (stock_name, "gtk-find") == 0 || strcmp (stock_name, "gtk-justify-left") == 0) - return "edit-find"; - if (strcmp (stock_name, "gtk-refresh") == 0) - return "view-refresh"; - if (strcmp (stock_name, "gtk-index") == 0) - return "view-list"; - if (strcmp (stock_name, "gtk-jump-to") == 0) - return "go-jump"; - if (strcmp (stock_name, "gtk-preferences") == 0) - return "preferences-system"; - if (strcmp (stock_name, "gtk-help") == 0) - return "help-browser"; - if (strcmp (stock_name, "gtk-about") == 0) - return "help-about"; - if (strcmp (stock_name, "gtk-close") == 0) - return "window-close"; - if (strcmp (stock_name, "gtk-quit") == 0) - return "application-exit"; - if (strcmp (stock_name, "gtk-connect") == 0) - return "network-connect"; - if (strcmp (stock_name, "gtk-disconnect") == 0) - return "network-disconnect"; - - return stock_name; -} -#endif - GtkWidget * menu_quick_item (char *cmd, char *label, GtkWidget * menu, int flags, gpointer userdata, char *icon) @@ -347,7 +293,7 @@ menu_quick_item (char *cmd, char *label, GtkWidget * menu, int flags, else { #if HAVE_GTK3 - icon_name = menu_icon_name_from_stock (icon); + icon_name = gtkutil_icon_name_from_stock (icon); img = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_MENU); #endif #if !HAVE_GTK3 @@ -2046,7 +1992,7 @@ create_icon_menu (char *labeltext, void *stock_name, int is_stock) if (is_stock) { #if HAVE_GTK3 - const char *icon_name = menu_icon_name_from_stock (stock_name); + const char *icon_name = gtkutil_icon_name_from_stock (stock_name); img = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_MENU); #endif