summaryrefslogtreecommitdiff
path: root/gdk
diff options
context:
space:
mode:
authorCody Russell <bratsche@gnome.org>2008-08-28 02:42:23 +0000
committerCody Russell <bratsche@src.gnome.org>2008-08-28 02:42:23 +0000
commit1c146ec11fe2102213238c44ffc06f53c6c9ffd7 (patch)
tree1a4697925d6a33cc4d95bfd841ba698c7128f181 /gdk
parent3f53433008769dd4bbe738b45c8fb2638461af84 (diff)
downloadgtk+-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.c22
-rw-r--r--gdk/win32/gdkwindow-win32.c40
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