mirror of
https://github.com/ZoiteChat/zoitechat.git
synced 2026-04-02 10:40:18 +00:00
Handle Win32 WM_SYSCOMMAND minimize/restore workaround
This commit is contained in:
@@ -4431,7 +4431,7 @@ mg_create_topwindow (session *sess)
|
||||
|
||||
#ifdef G_OS_WIN32
|
||||
parent_win = gtk_widget_get_window (win);
|
||||
gdk_window_add_filter (parent_win, mg_win32_filter, NULL);
|
||||
gdk_window_add_filter (parent_win, mg_win32_filter, win);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -4464,6 +4464,8 @@ static GdkFilterReturn
|
||||
mg_win32_filter (GdkXEvent *xevent, GdkEvent *event, gpointer data)
|
||||
{
|
||||
MSG *msg = (MSG*)xevent;
|
||||
GtkWidget *win = GTK_IS_WIDGET (data) ? GTK_WIDGET (data) : NULL;
|
||||
static gboolean handling_syscommand = FALSE;
|
||||
|
||||
if (!msg)
|
||||
return GDK_FILTER_CONTINUE;
|
||||
@@ -4480,6 +4482,30 @@ mg_win32_filter (GdkXEvent *xevent, GdkEvent *event, gpointer data)
|
||||
return GDK_FILTER_CONTINUE;
|
||||
}
|
||||
|
||||
if (msg->message == WM_SYSCOMMAND && win && !handling_syscommand)
|
||||
{
|
||||
const UINT command = ((UINT) msg->wParam) & 0xFFF0u;
|
||||
|
||||
if (command == SC_MINIMIZE || command == SC_RESTORE)
|
||||
{
|
||||
handling_syscommand = TRUE;
|
||||
|
||||
if (command == SC_MINIMIZE)
|
||||
{
|
||||
ShowWindow (msg->hwnd, SW_MINIMIZE);
|
||||
}
|
||||
else
|
||||
{
|
||||
ShowWindow (msg->hwnd, SW_RESTORE);
|
||||
ShowWindow (msg->hwnd, SW_SHOW);
|
||||
SetForegroundWindow (msg->hwnd);
|
||||
}
|
||||
|
||||
handling_syscommand = FALSE;
|
||||
return GDK_FILTER_REMOVE;
|
||||
}
|
||||
}
|
||||
|
||||
if (msg->message == WM_COPYDATA)
|
||||
{
|
||||
COPYDATASTRUCT *copy_data = (COPYDATASTRUCT *)msg->lParam;
|
||||
@@ -4609,7 +4635,7 @@ mg_create_tabwindow (session *sess)
|
||||
|
||||
#ifdef G_OS_WIN32
|
||||
parent_win = gtk_widget_get_window (win);
|
||||
gdk_window_add_filter (parent_win, mg_win32_filter, NULL);
|
||||
gdk_window_add_filter (parent_win, mg_win32_filter, win);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user