gtk+ r20737 - in trunk: . gdk gdk/win32



Author: bratsche
Date: Wed Jul  2 20:22:30 2008
New Revision: 20737
URL: http://svn.gnome.org/viewvc/gtk+?rev=20737&view=rev

Log:
2008-07-02  Cody Russell  <bratsche gnome org>

        Bug 541305 â [Win32] Scrolling was broken after GdkWindow refactoring

        * gdk/win32/gdkwindow-win32.c:	Reverted	some logic so that scrolling
	works again.

        * gdk/win32/gdkgeometry-win32.c: Removed some more unnecessary	checks.
        * gdk/win32/gdkkeys-win32.c: Removed unused variable to fix compile-time
        warnings.



Modified:
   trunk/ChangeLog
   trunk/gdk/gdkwindow.c
   trunk/gdk/win32/gdkgeometry-win32.c
   trunk/gdk/win32/gdkkeys-win32.c
   trunk/gdk/win32/gdkwindow-win32.c

Modified: trunk/gdk/gdkwindow.c
==============================================================================
--- trunk/gdk/gdkwindow.c	(original)
+++ trunk/gdk/gdkwindow.c	Wed Jul  2 20:22:30 2008
@@ -1305,7 +1305,7 @@
 			gint      *y_offset)
 {
   GdkWindowObject *private = (GdkWindowObject *)window;
-  
+
   if (private->paint_stack)
     {
       GdkWindowPaint *paint = private->paint_stack->data;
@@ -2233,7 +2233,7 @@
 
   g_return_if_fail (window != NULL);
   g_return_if_fail (GDK_IS_WINDOW (window));
-  
+
   if (private->paint_stack)
     gdk_window_clear_backing_rect (window, x, y, width, height);
 

Modified: trunk/gdk/win32/gdkgeometry-win32.c
==============================================================================
--- trunk/gdk/win32/gdkgeometry-win32.c	(original)
+++ trunk/gdk/win32/gdkgeometry-win32.c	Wed Jul  2 20:22:30 2008
@@ -91,7 +91,7 @@
 {
   GdkWindowParentPos parent_pos;
   GdkWindowImplWin32 *impl;
-  
+
   g_return_if_fail (GDK_IS_WINDOW (window));
   
   impl = GDK_WINDOW_IMPL_WIN32 (GDK_WINDOW_OBJECT (window)->impl);
@@ -111,16 +111,13 @@
   GList *tmp_list;
   GdkWindowParentPos parent_pos;
   HRGN native_invalidate_region;
-  
+
   GDK_NOTE (EVENTS, g_print ("gdk_window_scroll: %p %d,%d\n",
 			     GDK_WINDOW_HWND (window), dx, dy));
 
   obj = GDK_WINDOW_OBJECT (window);
   impl = GDK_WINDOW_IMPL_WIN32 (obj->impl);  
 
-  if (dx == 0 && dy == 0)
-    return;
-  
   /* Move the current invalid region */
   if (obj->update_area)
     gdk_region_offset (obj->update_area, dx, dy);
@@ -182,9 +179,6 @@
   obj = GDK_WINDOW_OBJECT (window);
   impl = GDK_WINDOW_IMPL_WIN32 (obj->impl);  
 
-  if (dx == 0 && dy == 0)
-    return;
-  
   /* Move the current invalid region */
   if (obj->update_area)
     gdk_region_offset (obj->update_area, dx, dy);
@@ -270,7 +264,7 @@
 
   dx = x - obj->x;
   dy = y - obj->y;
-  
+
   is_move = dx != 0 || dy != 0;
   is_resize = impl->width != width || impl->height != height;
 

Modified: trunk/gdk/win32/gdkkeys-win32.c
==============================================================================
--- trunk/gdk/win32/gdkkeys-win32.c	(original)
+++ trunk/gdk/win32/gdkkeys-win32.c	Wed Jul  2 20:22:30 2008
@@ -366,7 +366,6 @@
 	  for (shift = 0; shift < 4; shift++)
 	    {
 	      guint *ksymp = keysym_tab + vk*4 + shift;
-	      guchar chars[2];
 	      
 	      set_shift_vks (key_state, shift);
 

Modified: trunk/gdk/win32/gdkwindow-win32.c
==============================================================================
--- trunk/gdk/win32/gdkwindow-win32.c	(original)
+++ trunk/gdk/win32/gdkwindow-win32.c	Wed Jul  2 20:22:30 2008
@@ -1196,30 +1196,131 @@
 }
 
 static void
-gdk_win32_window_move_resize (GdkWindow *window,
-			      gboolean   with_move,
-			      gint       x,
-			      gint       y,
-			      gint       width,
-			      gint       height)
+gdk_win32_window_move (GdkWindow *window,
+		       gint x, gint y)
+{
+  GdkWindowObject *private = (GdkWindowObject *)window;
+  GdkWindowImplWin32 *impl;
+
+  g_return_if_fail (GDK_IS_WINDOW (window));
+
+  if (GDK_WINDOW_DESTROYED (window))
+    return;
+
+  GDK_NOTE (MISC, g_print ("gdk_window_move: %p: %+d%+d\n",
+                           GDK_WINDOW_HWND (window), x, y));
+
+  impl = GDK_WINDOW_IMPL_WIN32 (private->impl);
+
+  if (private->state & GDK_WINDOW_STATE_FULLSCREEN)
+    return;
+
+  /* Don't check GDK_WINDOW_TYPE (private) == GDK_WINDOW_CHILD.
+   * Foreign windows (another app's windows) might be children of our
+   * windows! Especially in the case of gtkplug/socket.
+   */
+  if (GetAncestor (GDK_WINDOW_HWND (window), GA_PARENT) != GetDesktopWindow ())
+    {
+      _gdk_window_move_resize_child (window, x, y, impl->width, impl->height);
+    }
+  else
+    {
+      RECT outer_rect;
+
+      get_outer_rect (window, impl->width, impl->height, &outer_rect);
+
+      adjust_for_gravity_hints (impl, &outer_rect, &x, &y);
+
+      GDK_NOTE (MISC, g_print ("... SetWindowPos(%p,NULL,%d,%d,0,0,"
+                               "NOACTIVATE|NOSIZE|NOZORDER)\n",
+                               GDK_WINDOW_HWND (window),
+                               x - _gdk_offset_x, y - _gdk_offset_y));
+
+      API_CALL (SetWindowPos, (GDK_WINDOW_HWND (window), NULL,
+                               x - _gdk_offset_x, y - _gdk_offset_y, 0, 0,
+                               SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOZORDER));
+    }
+}
+
+static void
+gdk_win32_window_resize (GdkWindow *window,
+			 gint width, gint height)
 {
   GdkWindowObject *private = (GdkWindowObject*) window;
   GdkWindowImplWin32 *impl;
 
+  g_return_if_fail (GDK_IS_WINDOW (window));
+
+  if (GDK_WINDOW_DESTROYED (window))
+    return;
+
   if (width < 1)
     width = 1;
   if (height < 1)
     height = 1;
-  
+
+  GDK_NOTE (MISC, g_print ("gdk_window_resize: %p: %dx%d\n",
+                           GDK_WINDOW_HWND (window), width, height));
+
+  impl = GDK_WINDOW_IMPL_WIN32 (private->impl);
+
+  if (private->state & GDK_WINDOW_STATE_FULLSCREEN)
+    return;
+
+  if (GetAncestor (GDK_WINDOW_HWND (window), GA_PARENT) != GetDesktopWindow ())
+    {
+      _gdk_window_move_resize_child (window, private->x, private->y, width, height);
+    }
+  else
+    {
+      RECT outer_rect;
+
+      get_outer_rect (window, width, height, &outer_rect);
+
+      GDK_NOTE (MISC, g_print ("... SetWindowPos(%p,NULL,0,0,%ld,%ld,"
+                               "NOACTIVATE|NOMOVE|NOZORDER)\n",
+                               GDK_WINDOW_HWND (window),
+                               outer_rect.right - outer_rect.left,
+                               outer_rect.bottom - outer_rect.top));
+
+      API_CALL (SetWindowPos, (GDK_WINDOW_HWND (window), NULL,
+                               0, 0,
+                               outer_rect.right - outer_rect.left,
+                               outer_rect.bottom - outer_rect.top,
+                               SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER));
+      private->resize_count += 1;
+    }
+}
+
+static void
+gdk_win32_window_move_resize_internal (GdkWindow *window,
+				       gint       x,
+				       gint       y,
+				       gint       width,
+				       gint       height)
+{
+  GdkWindowObject *private = (GdkWindowObject*) window;
+  GdkWindowImplWin32 *impl;
+
+  g_return_if_fail (GDK_IS_WINDOW (window));
+
+  if (GDK_WINDOW_DESTROYED (window))
+    return;
+
+  if (width < 1)
+    width = 1;
+  if (height < 1)
+    height = 1;
+
   impl = GDK_WINDOW_IMPL_WIN32 (private->impl);
 
   if (private->state & GDK_WINDOW_STATE_FULLSCREEN)
     return;
 
   GDK_NOTE (MISC, g_print ("gdk_window_move_resize: %p: %dx%d %+d%+d\n",
-			   GDK_WINDOW_HWND (window),
-			   width, height, x, y));
-  
+                           GDK_WINDOW_HWND (window),
+                           width, height, x, y));
+
   if (GetAncestor (GDK_WINDOW_HWND (window), GA_PARENT) != GetDesktopWindow ())
     {
       _gdk_window_move_resize_child (window, x, y, width, height);
@@ -1233,23 +1334,42 @@
       adjust_for_gravity_hints (impl, &outer_rect, &x, &y);
 
       GDK_NOTE (MISC, g_print ("... SetWindowPos(%p,NULL,%d,%d,%ld,%ld,"
-			       "NOACTIVATE|NOZORDER)\n",
-			       GDK_WINDOW_HWND (window),
-			       x - _gdk_offset_x, y - _gdk_offset_y,
-			       outer_rect.right - outer_rect.left,
-			       outer_rect.bottom - outer_rect.top));
-
-      UINT uflags = SWP_NOACTIVATE | SWP_NOZORDER;
-      if (with_move == FALSE)
-	  uflags |= SWP_NOMOVE;
-      if (width == -1 || height == -1)
-	  uflags |= SWP_NOSIZE;
+                               "NOACTIVATE|NOZORDER)\n",
+                               GDK_WINDOW_HWND (window),
+                               x - _gdk_offset_x, y - _gdk_offset_y,
+                               outer_rect.right - outer_rect.left,
+                               outer_rect.bottom - outer_rect.top));
 
       API_CALL (SetWindowPos, (GDK_WINDOW_HWND (window), NULL,
-			       x - _gdk_offset_x, y - _gdk_offset_y,
-			       outer_rect.right - outer_rect.left,
-			       outer_rect.bottom - outer_rect.top,
-			       uflags));
+                               x - _gdk_offset_x, y - _gdk_offset_y,
+                               outer_rect.right - outer_rect.left,
+                               outer_rect.bottom - outer_rect.top,
+                               SWP_NOACTIVATE | SWP_NOZORDER));
+    }
+}
+
+static void
+gdk_win32_window_move_resize (GdkWindow *window,
+			      gboolean   with_move,
+			      gint       x,
+			      gint       y,
+			      gint       width,
+			      gint       height)
+{
+  if (with_move && (width < 0 && height < 0))
+    {
+      gdk_win32_window_move (window, x, y);
+    }
+  else
+    {
+      if (with_move)
+	{
+	  gdk_win32_window_move_resize_internal (window, x, y, width, height);
+	}
+      else
+	{
+	  gdk_win32_window_resize (window, width, height);
+	}
     }
 }
 
@@ -3439,9 +3559,14 @@
 #else
 
   if (modal)
-    _gdk_push_modal_window (window);
+    {
+      _gdk_push_modal_window (window);
+      gdk_window_raise (window);
+    }
   else
-    _gdk_remove_modal_window (window);
+    {
+      _gdk_remove_modal_window (window);
+    }
 
 #endif
 }



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