1 Commits

Author SHA1 Message Date
364e52f7d9 Fix Win tray hidden-state toggle logic 2026-03-21 03:28:38 -06:00
2 changed files with 52 additions and 10 deletions

View File

@@ -4375,10 +4375,37 @@ mg_win32_filter (GdkXEvent *xevent, GdkEvent *event, gpointer data)
{
if (strcmp (command, "__WIN32_TASKBAR_TOGGLE__") == 0)
{
if (gtk_widget_get_visible (current_sess->gui->window))
fe_ctrl_gui (current_sess, FE_GUI_ICONIFY, 0);
GtkWidget *widget = current_sess->gui->window;
GdkWindow *gdk_window = NULL;
gboolean hidden = TRUE;
if (widget)
{
hidden = !gtk_widget_get_visible (widget);
gdk_window = gtk_widget_get_window (widget);
if (!hidden && gdk_window &&
(gdk_window_get_state (gdk_window) & GDK_WINDOW_STATE_ICONIFIED))
hidden = TRUE;
}
if (hidden)
{
if (widget)
{
gtk_widget_show (widget);
gtk_window_deiconify (GTK_WINDOW (widget));
gtk_window_present (GTK_WINDOW (widget));
}
else
fe_ctrl_gui (current_sess, FE_GUI_SHOW, 0);
}
else
fe_ctrl_gui (current_sess, FE_GUI_SHOW, 0);
{
if (widget)
gtk_window_iconify (GTK_WINDOW (widget));
else
fe_ctrl_gui (current_sess, FE_GUI_ICONIFY, 0);
}
}
else
{

View File

@@ -582,23 +582,33 @@ tray_backend_cleanup (void)
tray_backend_active = FALSE;
}
static gboolean
tray_window_is_hidden (GtkWidget *widget)
{
GdkWindow *gdk_win;
if (!widget || !gtk_widget_get_visible (widget))
return TRUE;
gdk_win = gtk_widget_get_window (widget);
if (gdk_win && (gdk_window_get_state (gdk_win) & GDK_WINDOW_STATE_ICONIFIED))
return TRUE;
return FALSE;
}
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)
{
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))
if (tray_window_is_hidden (widget))
return WS_HIDDEN;
}
@@ -853,6 +863,8 @@ tray_toggle_visibility (gboolean force_hide)
static int maximized;
static int fullscreen;
GtkWindow *win;
GtkWidget *widget;
gboolean hidden;
if (!tray_backend_active)
return FALSE;
@@ -868,7 +880,10 @@ tray_toggle_visibility (gboolean force_hide)
if (!win)
return FALSE;
if (force_hide || gtk_widget_get_visible (GTK_WIDGET (win)))
widget = GTK_WIDGET (win);
hidden = tray_window_is_hidden (widget);
if (force_hide || !hidden)
{
if (prefs.hex_gui_tray_away)
zoitechat_command (ph, "ALLSERV AWAY");