From 5d4eec3b71e3512a2c66aba1ff9c66721c4fd40e Mon Sep 17 00:00:00 2001 From: deepend Date: Tue, 17 Feb 2026 20:05:13 -0700 Subject: [PATCH] updated, fixed or replaced menu icons. --- data/icons/menu/dark/about.svg | 5 ++ data/icons/menu/dark/chanlist.svg | 5 ++ data/icons/menu/dark/clear.svg | 6 +++ data/icons/menu/dark/close.svg | 4 ++ data/icons/menu/dark/connect.svg | 5 ++ data/icons/menu/dark/detach.svg | 4 ++ data/icons/menu/dark/disconnect.svg | 5 ++ data/icons/menu/dark/find.svg | 5 ++ data/icons/menu/dark/help.svg | 5 ++ data/icons/menu/dark/join.svg | 5 ++ data/icons/menu/dark/load-plugin.svg | 6 +++ data/icons/menu/dark/new.svg | 5 ++ data/icons/menu/dark/preferences.svg | 4 ++ data/icons/menu/dark/quit.svg | 4 ++ data/icons/menu/dark/save.svg | 5 ++ data/icons/menu/dark/search.svg | 4 ++ data/icons/menu/light/about.svg | 5 ++ data/icons/menu/light/chanlist.svg | 5 ++ data/icons/menu/light/clear.svg | 6 +++ data/icons/menu/light/close.svg | 4 ++ data/icons/menu/light/connect.svg | 5 ++ data/icons/menu/light/detach.svg | 4 ++ data/icons/menu/light/disconnect.svg | 5 ++ data/icons/menu/light/find.svg | 5 ++ data/icons/menu/light/help.svg | 5 ++ data/icons/menu/light/join.svg | 5 ++ data/icons/menu/light/load-plugin.svg | 6 +++ data/icons/menu/light/new.svg | 5 ++ data/icons/menu/light/preferences.svg | 4 ++ data/icons/menu/light/quit.svg | 4 ++ data/icons/menu/light/save.svg | 5 ++ data/icons/menu/light/search.svg | 4 ++ data/zoitechat.gresource.xml | 34 ++++++++++++ src/fe-gtk/menu.c | 78 +++++++++++++++++++-------- 34 files changed, 244 insertions(+), 22 deletions(-) create mode 100644 data/icons/menu/dark/about.svg create mode 100644 data/icons/menu/dark/chanlist.svg create mode 100644 data/icons/menu/dark/clear.svg create mode 100644 data/icons/menu/dark/close.svg create mode 100644 data/icons/menu/dark/connect.svg create mode 100644 data/icons/menu/dark/detach.svg create mode 100644 data/icons/menu/dark/disconnect.svg create mode 100644 data/icons/menu/dark/find.svg create mode 100644 data/icons/menu/dark/help.svg create mode 100644 data/icons/menu/dark/join.svg create mode 100644 data/icons/menu/dark/load-plugin.svg create mode 100644 data/icons/menu/dark/new.svg create mode 100644 data/icons/menu/dark/preferences.svg create mode 100644 data/icons/menu/dark/quit.svg create mode 100644 data/icons/menu/dark/save.svg create mode 100644 data/icons/menu/dark/search.svg create mode 100644 data/icons/menu/light/about.svg create mode 100644 data/icons/menu/light/chanlist.svg create mode 100644 data/icons/menu/light/clear.svg create mode 100644 data/icons/menu/light/close.svg create mode 100644 data/icons/menu/light/connect.svg create mode 100644 data/icons/menu/light/detach.svg create mode 100644 data/icons/menu/light/disconnect.svg create mode 100644 data/icons/menu/light/find.svg create mode 100644 data/icons/menu/light/help.svg create mode 100644 data/icons/menu/light/join.svg create mode 100644 data/icons/menu/light/load-plugin.svg create mode 100644 data/icons/menu/light/new.svg create mode 100644 data/icons/menu/light/preferences.svg create mode 100644 data/icons/menu/light/quit.svg create mode 100644 data/icons/menu/light/save.svg create mode 100644 data/icons/menu/light/search.svg diff --git a/data/icons/menu/dark/about.svg b/data/icons/menu/dark/about.svg new file mode 100644 index 00000000..29ed7982 --- /dev/null +++ b/data/icons/menu/dark/about.svg @@ -0,0 +1,5 @@ + diff --git a/data/icons/menu/dark/chanlist.svg b/data/icons/menu/dark/chanlist.svg new file mode 100644 index 00000000..d1875770 --- /dev/null +++ b/data/icons/menu/dark/chanlist.svg @@ -0,0 +1,5 @@ + diff --git a/data/icons/menu/dark/clear.svg b/data/icons/menu/dark/clear.svg new file mode 100644 index 00000000..92241371 --- /dev/null +++ b/data/icons/menu/dark/clear.svg @@ -0,0 +1,6 @@ + diff --git a/data/icons/menu/dark/close.svg b/data/icons/menu/dark/close.svg new file mode 100644 index 00000000..b900bde1 --- /dev/null +++ b/data/icons/menu/dark/close.svg @@ -0,0 +1,4 @@ + diff --git a/data/icons/menu/dark/connect.svg b/data/icons/menu/dark/connect.svg new file mode 100644 index 00000000..23e9f7e1 --- /dev/null +++ b/data/icons/menu/dark/connect.svg @@ -0,0 +1,5 @@ + diff --git a/data/icons/menu/dark/detach.svg b/data/icons/menu/dark/detach.svg new file mode 100644 index 00000000..5d27f27b --- /dev/null +++ b/data/icons/menu/dark/detach.svg @@ -0,0 +1,4 @@ + diff --git a/data/icons/menu/dark/disconnect.svg b/data/icons/menu/dark/disconnect.svg new file mode 100644 index 00000000..ac33ae30 --- /dev/null +++ b/data/icons/menu/dark/disconnect.svg @@ -0,0 +1,5 @@ + diff --git a/data/icons/menu/dark/find.svg b/data/icons/menu/dark/find.svg new file mode 100644 index 00000000..da071ab0 --- /dev/null +++ b/data/icons/menu/dark/find.svg @@ -0,0 +1,5 @@ + diff --git a/data/icons/menu/dark/help.svg b/data/icons/menu/dark/help.svg new file mode 100644 index 00000000..372b8148 --- /dev/null +++ b/data/icons/menu/dark/help.svg @@ -0,0 +1,5 @@ + diff --git a/data/icons/menu/dark/join.svg b/data/icons/menu/dark/join.svg new file mode 100644 index 00000000..b7c79c33 --- /dev/null +++ b/data/icons/menu/dark/join.svg @@ -0,0 +1,5 @@ + diff --git a/data/icons/menu/dark/load-plugin.svg b/data/icons/menu/dark/load-plugin.svg new file mode 100644 index 00000000..16a7ea74 --- /dev/null +++ b/data/icons/menu/dark/load-plugin.svg @@ -0,0 +1,6 @@ + diff --git a/data/icons/menu/dark/new.svg b/data/icons/menu/dark/new.svg new file mode 100644 index 00000000..6b5a7da2 --- /dev/null +++ b/data/icons/menu/dark/new.svg @@ -0,0 +1,5 @@ + diff --git a/data/icons/menu/dark/preferences.svg b/data/icons/menu/dark/preferences.svg new file mode 100644 index 00000000..e9c6ad2b --- /dev/null +++ b/data/icons/menu/dark/preferences.svg @@ -0,0 +1,4 @@ + diff --git a/data/icons/menu/dark/quit.svg b/data/icons/menu/dark/quit.svg new file mode 100644 index 00000000..8fed449f --- /dev/null +++ b/data/icons/menu/dark/quit.svg @@ -0,0 +1,4 @@ + diff --git a/data/icons/menu/dark/save.svg b/data/icons/menu/dark/save.svg new file mode 100644 index 00000000..8525797c --- /dev/null +++ b/data/icons/menu/dark/save.svg @@ -0,0 +1,5 @@ + diff --git a/data/icons/menu/dark/search.svg b/data/icons/menu/dark/search.svg new file mode 100644 index 00000000..a90679aa --- /dev/null +++ b/data/icons/menu/dark/search.svg @@ -0,0 +1,4 @@ + diff --git a/data/icons/menu/light/about.svg b/data/icons/menu/light/about.svg new file mode 100644 index 00000000..0b174910 --- /dev/null +++ b/data/icons/menu/light/about.svg @@ -0,0 +1,5 @@ + diff --git a/data/icons/menu/light/chanlist.svg b/data/icons/menu/light/chanlist.svg new file mode 100644 index 00000000..d76e703e --- /dev/null +++ b/data/icons/menu/light/chanlist.svg @@ -0,0 +1,5 @@ + diff --git a/data/icons/menu/light/clear.svg b/data/icons/menu/light/clear.svg new file mode 100644 index 00000000..bd8ab3c8 --- /dev/null +++ b/data/icons/menu/light/clear.svg @@ -0,0 +1,6 @@ + diff --git a/data/icons/menu/light/close.svg b/data/icons/menu/light/close.svg new file mode 100644 index 00000000..b3802887 --- /dev/null +++ b/data/icons/menu/light/close.svg @@ -0,0 +1,4 @@ + diff --git a/data/icons/menu/light/connect.svg b/data/icons/menu/light/connect.svg new file mode 100644 index 00000000..0ae90ca0 --- /dev/null +++ b/data/icons/menu/light/connect.svg @@ -0,0 +1,5 @@ + diff --git a/data/icons/menu/light/detach.svg b/data/icons/menu/light/detach.svg new file mode 100644 index 00000000..1f24c1d5 --- /dev/null +++ b/data/icons/menu/light/detach.svg @@ -0,0 +1,4 @@ + diff --git a/data/icons/menu/light/disconnect.svg b/data/icons/menu/light/disconnect.svg new file mode 100644 index 00000000..07337c2f --- /dev/null +++ b/data/icons/menu/light/disconnect.svg @@ -0,0 +1,5 @@ + diff --git a/data/icons/menu/light/find.svg b/data/icons/menu/light/find.svg new file mode 100644 index 00000000..534d74f2 --- /dev/null +++ b/data/icons/menu/light/find.svg @@ -0,0 +1,5 @@ + diff --git a/data/icons/menu/light/help.svg b/data/icons/menu/light/help.svg new file mode 100644 index 00000000..b629f781 --- /dev/null +++ b/data/icons/menu/light/help.svg @@ -0,0 +1,5 @@ + diff --git a/data/icons/menu/light/join.svg b/data/icons/menu/light/join.svg new file mode 100644 index 00000000..7e8bce9f --- /dev/null +++ b/data/icons/menu/light/join.svg @@ -0,0 +1,5 @@ + diff --git a/data/icons/menu/light/load-plugin.svg b/data/icons/menu/light/load-plugin.svg new file mode 100644 index 00000000..e74500b2 --- /dev/null +++ b/data/icons/menu/light/load-plugin.svg @@ -0,0 +1,6 @@ + diff --git a/data/icons/menu/light/new.svg b/data/icons/menu/light/new.svg new file mode 100644 index 00000000..a63e69fb --- /dev/null +++ b/data/icons/menu/light/new.svg @@ -0,0 +1,5 @@ + diff --git a/data/icons/menu/light/preferences.svg b/data/icons/menu/light/preferences.svg new file mode 100644 index 00000000..a69c4449 --- /dev/null +++ b/data/icons/menu/light/preferences.svg @@ -0,0 +1,4 @@ + diff --git a/data/icons/menu/light/quit.svg b/data/icons/menu/light/quit.svg new file mode 100644 index 00000000..c4141749 --- /dev/null +++ b/data/icons/menu/light/quit.svg @@ -0,0 +1,4 @@ + diff --git a/data/icons/menu/light/save.svg b/data/icons/menu/light/save.svg new file mode 100644 index 00000000..ac089f3a --- /dev/null +++ b/data/icons/menu/light/save.svg @@ -0,0 +1,5 @@ + diff --git a/data/icons/menu/light/search.svg b/data/icons/menu/light/search.svg new file mode 100644 index 00000000..f2aa57d7 --- /dev/null +++ b/data/icons/menu/light/search.svg @@ -0,0 +1,4 @@ + diff --git a/data/zoitechat.gresource.xml b/data/zoitechat.gresource.xml index 889ef0f3..d4d87c3f 100644 --- a/data/zoitechat.gresource.xml +++ b/data/zoitechat.gresource.xml @@ -20,5 +20,39 @@ icons/tree_dialog.png icons/tree_server.png icons/tree_util.png + + icons/menu/light/new.svg + icons/menu/light/load-plugin.svg + icons/menu/light/detach.svg + icons/menu/light/close.svg + icons/menu/light/quit.svg + icons/menu/light/disconnect.svg + icons/menu/light/connect.svg + icons/menu/light/join.svg + icons/menu/light/chanlist.svg + icons/menu/light/preferences.svg + icons/menu/light/clear.svg + icons/menu/light/save.svg + icons/menu/light/search.svg + icons/menu/light/find.svg + icons/menu/light/help.svg + icons/menu/light/about.svg + + icons/menu/dark/new.svg + icons/menu/dark/load-plugin.svg + icons/menu/dark/detach.svg + icons/menu/dark/close.svg + icons/menu/dark/quit.svg + icons/menu/dark/disconnect.svg + icons/menu/dark/connect.svg + icons/menu/dark/join.svg + icons/menu/dark/chanlist.svg + icons/menu/dark/preferences.svg + icons/menu/dark/clear.svg + icons/menu/dark/save.svg + icons/menu/dark/search.svg + icons/menu/dark/find.svg + icons/menu/dark/help.svg + icons/menu/dark/about.svg diff --git a/src/fe-gtk/menu.c b/src/fe-gtk/menu.c index 4f649445..de249755 100644 --- a/src/fe-gtk/menu.c +++ b/src/fe-gtk/menu.c @@ -1951,22 +1951,22 @@ menu_about (GtkWidget *wid, gpointer sess) } #if HAVE_GTK3 -#define ICON_NEW "document-new" -#define ICON_LOAD_PLUGIN "document-open" -#define ICON_DETACH "edit-redo" -#define ICON_CLOSE "window-close" -#define ICON_QUIT "application-exit" -#define ICON_DISCONNECT "network-disconnect" -#define ICON_CONNECT "network-connect" -#define ICON_JOIN "go-jump" -#define ICON_CHANLIST "view-list" -#define ICON_PREFERENCES "preferences-system" -#define ICON_CLEAR "edit-clear" -#define ICON_SAVE "document-save" -#define ICON_SEARCH "edit-find" -#define ICON_FIND "edit-find" -#define ICON_HELP "help-contents" -#define ICON_ABOUT "help-about" +#define ICON_NEW "zc-menu-new" +#define ICON_LOAD_PLUGIN "zc-menu-load-plugin" +#define ICON_DETACH "zc-menu-detach" +#define ICON_CLOSE "zc-menu-close" +#define ICON_QUIT "zc-menu-quit" +#define ICON_DISCONNECT "zc-menu-disconnect" +#define ICON_CONNECT "zc-menu-connect" +#define ICON_JOIN "zc-menu-join" +#define ICON_CHANLIST "zc-menu-chanlist" +#define ICON_PREFERENCES "zc-menu-preferences" +#define ICON_CLEAR "zc-menu-clear" +#define ICON_SAVE "zc-menu-save" +#define ICON_SEARCH "zc-menu-search" +#define ICON_FIND "zc-menu-find" +#define ICON_HELP "zc-menu-help" +#define ICON_ABOUT "zc-menu-about" #endif #if !HAVE_GTK3 #define ICON_NEW GTK_STOCK_NEW @@ -2036,7 +2036,7 @@ static struct mymenu mymenu[] = { {N_("_Disconnect"), menu_disconnect, ICON_DISCONNECT, M_MENUSTOCK, MENU_ID_DISCONNECT, 0, 1}, {N_("_Reconnect"), menu_reconnect, ICON_CONNECT, M_MENUSTOCK, MENU_ID_RECONNECT, 0, 1}, {N_("_Join a Channel" ELLIPSIS), menu_join, ICON_JOIN, M_MENUSTOCK, MENU_ID_JOIN, 0, 1}, - {N_("Channel _List"), menu_chanlist, ICON_CHANLIST, M_MENUITEM, 0, 0, 1}, + {N_("Channel _List"), menu_chanlist, ICON_CHANLIST, M_MENUSTOCK, 0, 0, 1}, {0, 0, 0, M_SEP, 0, 0, 0}, #define AWAY_OFFSET (41) {N_("Marked _Away"), menu_away, 0, M_MENUTOG, MENU_ID_AWAY, 0, 1, GDK_KEY_a}, @@ -2115,6 +2115,13 @@ create_icon_menu (char *labeltext, void *stock_name, int is_stock) GtkWidget *label_widget; GtkWidget *image = NULL; const char *icon_name; + const char *custom_icon = NULL; + GtkSettings *settings; + gboolean prefer_dark = FALSE; + char *theme_name = NULL; + char *theme_name_lower = NULL; + const char *theme_variant = "light"; + char *resource_path; #endif #if !HAVE_GTK3 GtkWidget *img; @@ -2123,11 +2130,38 @@ create_icon_menu (char *labeltext, void *stock_name, int is_stock) if (is_stock) { #if HAVE_GTK3 - icon_name = gtkutil_icon_name_from_stock (stock_name); - if (!icon_name) - icon_name = stock_name; - if (icon_name) - image = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_MENU); + icon_name = stock_name; + if (g_str_has_prefix (icon_name, "zc-menu-")) + { + custom_icon = icon_name + strlen ("zc-menu-"); + settings = gtk_settings_get_default (); + if (settings) + { + g_object_get (G_OBJECT (settings), "gtk-application-prefer-dark-theme", &prefer_dark, NULL); + g_object_get (G_OBJECT (settings), "gtk-theme-name", &theme_name, NULL); + } + + if (theme_name) + theme_name_lower = g_ascii_strdown (theme_name, -1); + if (prefer_dark || (theme_name_lower && g_strrstr (theme_name_lower, "dark"))) + theme_variant = "dark"; + + resource_path = g_strdup_printf ("/icons/menu/%s/%s.svg", theme_variant, custom_icon); + if (g_resources_get_info (resource_path, G_RESOURCE_LOOKUP_FLAGS_NONE, NULL, NULL, NULL)) + image = gtk_image_new_from_resource (resource_path); + g_free (resource_path); + g_free (theme_name_lower); + g_free (theme_name); + } + + if (!image) + { + icon_name = gtkutil_icon_name_from_stock (stock_name); + if (!icon_name) + icon_name = stock_name; + if (icon_name) + image = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_MENU); + } #endif #if !HAVE_GTK3 img = gtk_image_new_from_stock (stock_name, GTK_ICON_SIZE_MENU);