diff options
author | Cody Russell <bratsche@gnome.org> | 2008-08-28 02:42:23 +0000 |
---|---|---|
committer | Cody Russell <bratsche@src.gnome.org> | 2008-08-28 02:42:23 +0000 |
commit | 1c146ec11fe2102213238c44ffc06f53c6c9ffd7 (patch) | |
tree | 1a4697925d6a33cc4d95bfd841ba698c7128f181 /gdk | |
parent | 3f53433008769dd4bbe738b45c8fb2638461af84 (diff) | |
download | gtk+-1c146ec11fe2102213238c44ffc06f53c6c9ffd7.tar.gz |
Check if the window's state has GDK_WINDOW_STATE_MAXIMIZED set before
2008-08-27 Cody Russell <bratsche@gnome.org>
* gdk/win32/gdkevents-win32.c:
* gdk/win32/gdkwindow-win32.c (show_window_recurse): Check if
the window's state has GDK_WINDOW_STATE_MAXIMIZED set before
calling ShowWindow (), and show using SW_SHOWMAXIMIZED or
SW_RESTORE accordingly. This fixes an issue where maximized
windows that are iconified do not restore back to maximized
when you click the taskbar. (#528975)
svn path=/trunk/; revision=21218
Diffstat (limited to 'gdk')
-rw-r--r-- | gdk/win32/gdkevents-win32.c | 22 | ||||
-rw-r--r-- | gdk/win32/gdkwindow-win32.c | 40 |
2 files changed, 45 insertions, 17 deletions
diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c index 5fe71685a1..356d44c6f9 100644 --- a/gdk/win32/gdkevents-win32.c +++ b/gdk/win32/gdkevents-win32.c @@ -1304,7 +1304,14 @@ show_window_recurse (GdkWindow *window, gboolean hide_window) { if (GDK_WINDOW_OBJECT (window)->state & GDK_WINDOW_STATE_ICONIFIED) { - ShowWindow (GDK_WINDOW_HWND (window), SW_RESTORE); + if (GDK_WINDOW_OBJECT (window)->state & GDK_WINDOW_STATE_MAXIMIZED) + { + ShowWindow (GDK_WINDOW_HWND (window), SW_SHOWMAXIMIZED); + } + else + { + ShowWindow (GDK_WINDOW_HWND (window), SW_RESTORE); + } } } else @@ -1318,7 +1325,7 @@ show_window_recurse (GdkWindow *window, gboolean hide_window) } static void -show_window_internal (GdkWindow *window, gboolean hide_window) +do_show_window (GdkWindow *window, gboolean hide_window) { GdkWindow *tmp_window = NULL; GdkWindowImplWin32 *tmp_impl = GDK_WINDOW_IMPL_WIN32 (GDK_WINDOW_OBJECT (window)->impl); @@ -1339,7 +1346,10 @@ show_window_internal (GdkWindow *window, gboolean hide_window) } /* Recursively show/hide every window in the chain. */ - show_window_recurse (tmp_window, hide_window); + if (tmp_window != window) + { + show_window_recurse (tmp_window, hide_window); + } } } @@ -2922,7 +2932,7 @@ gdk_event_translate (MSG *msg, { case SC_MINIMIZE: case SC_RESTORE: - show_window_internal (window, msg->wParam == SC_MINIMIZE ? TRUE : FALSE); + do_show_window (window, msg->wParam == SC_MINIMIZE ? TRUE : FALSE); break; } @@ -2951,7 +2961,7 @@ gdk_event_translate (MSG *msg, gdk_synthesize_window_state (window, GDK_WINDOW_STATE_WITHDRAWN, GDK_WINDOW_STATE_ICONIFIED); - show_window_internal (window, TRUE); + do_show_window (window, TRUE); } else if ((msg->wParam == SIZE_RESTORED || msg->wParam == SIZE_MAXIMIZED) && @@ -2973,7 +2983,7 @@ gdk_event_translate (MSG *msg, if (GDK_WINDOW_TYPE (window) != GDK_WINDOW_TEMP && !GDK_WINDOW_IS_MAPPED (window)) { - show_window_internal (window, FALSE); + do_show_window (window, FALSE); } } else if (msg->wParam == SIZE_MAXIMIZED) diff --git a/gdk/win32/gdkwindow-win32.c b/gdk/win32/gdkwindow-win32.c index 41a8b42c8f..91c310dd60 100644 --- a/gdk/win32/gdkwindow-win32.c +++ b/gdk/win32/gdkwindow-win32.c @@ -1106,15 +1106,25 @@ show_window_internal (GdkWindow *window, } if (private->state & GDK_WINDOW_STATE_FULLSCREEN) - gdk_window_fullscreen (window); + { + gdk_window_fullscreen (window); + } else if (private->state & GDK_WINDOW_STATE_MAXIMIZED) - ShowWindow (GDK_WINDOW_HWND (window), SW_MAXIMIZE); + { + ShowWindow (GDK_WINDOW_HWND (window), SW_MAXIMIZE); + } else if (private->state & GDK_WINDOW_STATE_ICONIFIED) - ShowWindow (GDK_WINDOW_HWND (window), SW_RESTORE); + { + ShowWindow (GDK_WINDOW_HWND (window), SW_RESTORE); + } else if (GDK_WINDOW_TYPE (window) == GDK_WINDOW_TEMP || !focus_on_map) - ShowWindow (GDK_WINDOW_HWND (window), SW_SHOWNOACTIVATE); + { + ShowWindow (GDK_WINDOW_HWND (window), SW_SHOWNOACTIVATE); + } else - ShowWindow (GDK_WINDOW_HWND (window), SW_SHOWNORMAL); + { + ShowWindow (GDK_WINDOW_HWND (window), SW_SHOWNORMAL); + } if (raise) { @@ -1126,17 +1136,25 @@ show_window_internal (GdkWindow *window, GDK_WINDOW_TYPE (window) == GDK_WINDOW_DIALOG) { if (focus_on_map && private->accept_focus) - SetForegroundWindow (GDK_WINDOW_HWND (window)); + { + SetForegroundWindow (GDK_WINDOW_HWND (window)); + } else - SetWindowPos (GDK_WINDOW_HWND (window), HWND_TOP, - 0, 0, 0, 0, - SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE); + { + SetWindowPos (GDK_WINDOW_HWND (window), HWND_TOP, + 0, 0, 0, 0, + SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE); + } } else - BringWindowToTop (GDK_WINDOW_HWND (window)); + { + BringWindowToTop (GDK_WINDOW_HWND (window)); + } } else if (old_active_window != GDK_WINDOW_HWND (window)) - SetActiveWindow (old_active_window); + { + SetActiveWindow (old_active_window); + } } static void |