diff --git a/src/fe-gtk/maingui.c b/src/fe-gtk/maingui.c index 1a58d01d..1dcfb871 100644 --- a/src/fe-gtk/maingui.c +++ b/src/fe-gtk/maingui.c @@ -58,6 +58,7 @@ #ifdef G_OS_WIN32 #include +#include #include static void @@ -80,6 +81,56 @@ mg_win32_allow_autohide_taskbar (GtkWindow *window, GdkEventWindowState *event) if (!hwnd) return; + if (event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED) + { + APPBARDATA appbar_data; + RECT work_area; + + ZeroMemory (&appbar_data, sizeof (APPBARDATA)); + appbar_data.cbSize = sizeof (APPBARDATA); + + if ((SHAppBarMessage (ABM_GETSTATE, &appbar_data) & ABS_AUTOHIDE) != 0 && + SHAppBarMessage (ABM_GETTASKBARPOS, &appbar_data) != 0) + { + HMONITOR monitor; + MONITORINFO monitor_info; + + monitor = MonitorFromWindow (hwnd, MONITOR_DEFAULTTONEAREST); + ZeroMemory (&monitor_info, sizeof (MONITORINFO)); + monitor_info.cbSize = sizeof (MONITORINFO); + + if (monitor && GetMonitorInfo (monitor, &monitor_info)) + { + work_area = monitor_info.rcMonitor; + + switch (appbar_data.uEdge) + { + case ABE_LEFT: + work_area.left += 1; + break; + case ABE_TOP: + work_area.top += 1; + break; + case ABE_RIGHT: + work_area.right -= 1; + break; + case ABE_BOTTOM: + default: + work_area.bottom -= 1; + break; + } + + SetWindowPos (hwnd, + NULL, + work_area.left, + work_area.top, + work_area.right - work_area.left, + work_area.bottom - work_area.top, + SWP_NOACTIVATE | SWP_NOOWNERZORDER | SWP_NOZORDER); + } + } + } + SetWindowPos (hwnd, HWND_NOTOPMOST, 0,