gtk+ r21219 - in branches/gtk-2-12: . gdk/win32



Author: bratsche
Date: Thu Aug 28 02:43:45 2008
New Revision: 21219
URL: http://svn.gnome.org/viewvc/gtk+?rev=21219&view=rev

Log:
2008-08-27  Cody Russell  <bratsche gnome org>

        Merged from trunk:

        * 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)



Modified:
   branches/gtk-2-12/ChangeLog
   branches/gtk-2-12/gdk/win32/gdkevents-win32.c
   branches/gtk-2-12/gdk/win32/gdkwindow-win32.c

Modified: branches/gtk-2-12/gdk/win32/gdkevents-win32.c
==============================================================================
--- branches/gtk-2-12/gdk/win32/gdkevents-win32.c	(original)
+++ branches/gtk-2-12/gdk/win32/gdkevents-win32.c	Thu Aug 28 02:43:45 2008
@@ -1308,7 +1308,14 @@
 	    {
 	      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
@@ -1322,7 +1329,7 @@
 }
 
 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);
@@ -1343,7 +1350,10 @@
 	}
 
       /* 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);
+	}
     }
 }
 
@@ -2948,7 +2958,7 @@
 	{
 	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;
 	}
 
@@ -2977,7 +2987,7 @@
 	  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) &&
@@ -2999,7 +3009,7 @@
 
 	      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)

Modified: branches/gtk-2-12/gdk/win32/gdkwindow-win32.c
==============================================================================
--- branches/gtk-2-12/gdk/win32/gdkwindow-win32.c	(original)
+++ branches/gtk-2-12/gdk/win32/gdkwindow-win32.c	Thu Aug 28 02:43:45 2008
@@ -1090,15 +1090,25 @@
     }
 
   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)
     {
@@ -1110,17 +1120,25 @@
 	       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);
+    }
 }
 
 void



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]