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);