From 52af9601751325c759290dfa5533bde1d372e87f Mon Sep 17 00:00:00 2001 From: deepend-tildeclub Date: Thu, 12 Mar 2026 18:31:20 -0600 Subject: [PATCH] fix: refresh AppIndicator tray label on menu map/open --- src/fe-gtk/fe-gtk.c | 6 ++++++ src/fe-gtk/plugin-tray.c | 16 ++++++++++++++-- src/fe-gtk/plugingui.c | 12 +++--------- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/fe-gtk/fe-gtk.c b/src/fe-gtk/fe-gtk.c index 67f21209..0137926e 100644 --- a/src/fe-gtk/fe-gtk.c +++ b/src/fe-gtk/fe-gtk.c @@ -1144,6 +1144,12 @@ fe_gui_info (session *sess, int info_type) return 2; /* hidden (iconified or systray) */ } + { + GdkWindow *gdk_win = gtk_widget_get_window (GTK_WIDGET (sess->gui->window)); + if (gdk_win && (gdk_window_get_state (gdk_win) & GDK_WINDOW_STATE_ICONIFIED)) + return 2; + } + if (gtk_window_is_active (GTK_WINDOW (sess->gui->window))) { return 1; /* active/focused */ diff --git a/src/fe-gtk/plugin-tray.c b/src/fe-gtk/plugin-tray.c index 7023ecd3..e42aa201 100644 --- a/src/fe-gtk/plugin-tray.c +++ b/src/fe-gtk/plugin-tray.c @@ -424,6 +424,8 @@ tray_app_indicator_init (void) tray_menu = gtk_menu_new (); g_signal_connect (G_OBJECT (tray_menu), "show", G_CALLBACK (tray_menu_show_cb), NULL); + g_signal_connect (G_OBJECT (tray_menu), "map", + G_CALLBACK (tray_menu_show_cb), NULL); app_indicator_set_menu (tray_indicator, GTK_MENU (tray_menu)); app_indicator_set_status (tray_indicator, APP_INDICATOR_STATUS_ACTIVE); @@ -581,11 +583,21 @@ static WinStatus tray_get_window_status (void) { GtkWindow *win; + GtkWidget *widget; + GdkWindow *gdk_win; const char *st; win = GTK_WINDOW (zoitechat_get_info (ph, "gtkwin_ptr")); - if (win && !gtk_widget_get_visible (GTK_WIDGET (win))) - return WS_HIDDEN; + if (win) + { + widget = GTK_WIDGET (win); + if (!gtk_widget_get_visible (widget)) + return WS_HIDDEN; + + gdk_win = gtk_widget_get_window (widget); + if (gdk_win && (gdk_window_get_state (gdk_win) & GDK_WINDOW_STATE_ICONIFIED)) + return WS_HIDDEN; + } st = zoitechat_get_info (ph, "win_status"); diff --git a/src/fe-gtk/plugingui.c b/src/fe-gtk/plugingui.c index 7a217117..6cdb132c 100644 --- a/src/fe-gtk/plugingui.c +++ b/src/fe-gtk/plugingui.c @@ -198,8 +198,6 @@ plugingui_load_cb (session *sess, char *file) char *addons_dir; char *basename; char *addons_target; - char *canonical_addons; - char *canonical_file; gboolean file_in_addons; target_sess = is_session (sess) ? sess : current_sess; @@ -211,11 +209,9 @@ plugingui_load_cb (session *sess, char *file) load_target = g_strdup (file); addons_dir = g_build_filename (get_xdir (), "addons", NULL); - canonical_addons = g_canonicalize_filename (addons_dir, NULL); - canonical_file = g_canonicalize_filename (file, NULL); - file_in_addons = g_str_has_prefix (canonical_file, canonical_addons) - && (canonical_file[strlen (canonical_addons)] == G_DIR_SEPARATOR - || canonical_file[strlen (canonical_addons)] == '\0'); + file_in_addons = g_str_has_prefix (file, addons_dir) + && (file[strlen (addons_dir)] == G_DIR_SEPARATOR + || file[strlen (addons_dir)] == '\0'); if (!file_in_addons) { @@ -240,8 +236,6 @@ plugingui_load_cb (session *sess, char *file) } } - g_free (canonical_addons); - g_free (canonical_file); g_free (addons_dir); #ifdef WIN32