[gtk+/gtk-2-24-win32] win32: Fix placement at initial position



commit f7438ce4e49484fe86d66806962ca19d3c5f1fd4
Author: Alexander Larsson <alexl redhat com>
Date:   Wed Nov 2 12:15:53 2011 +0100

    win32: Fix placement at initial position
    
    Positioning windows at 0,0 post creation failed, because it
    was mapped with CW_USEDFAULT, but private->x/y still said 0,
    so moving it to 0,0 did nothing. We now always position the
    window at the right place, even when not mapped, but we
    create it at CW_USEDEFAULT initially and store that position
    before moving it to the right place.
    
    This fixes the window sizing test in testgtk and the inital
    position for the gimp toolbar.

 gdk/win32/gdkwindow-win32.c |   38 ++++++++++++++++++++++++++++++++------
 1 files changed, 32 insertions(+), 6 deletions(-)
---
diff --git a/gdk/win32/gdkwindow-win32.c b/gdk/win32/gdkwindow-win32.c
index 473b671..b61a7b7 100644
--- a/gdk/win32/gdkwindow-win32.c
+++ b/gdk/win32/gdkwindow-win32.c
@@ -509,7 +509,7 @@ _gdk_window_impl_new (GdkWindow     *window,
   gboolean override_redirect;
   gint window_width, window_height;
   gint offset_x = 0, offset_y = 0;
-  gint x, y;
+  gint x, y, real_x = 0, real_y = 0;
   /* check consistency of redundant information */
   guint remaining_mask = attributes_mask;
 
@@ -649,8 +649,22 @@ _gdk_window_impl_new (GdkWindow     *window,
 
       AdjustWindowRectEx (&rect, dwStyle, FALSE, dwExStyle);
 
-      /* non child windows are placed by the OS/window manager */
-      x = y = CW_USEDEFAULT;
+      real_x = private->x - offset_x;
+      real_y = private->y - offset_y;
+
+      if (private->window_type == GDK_WINDOW_TOPLEVEL ||
+	  private->window_type == GDK_WINDOW_DIALOG)
+	{
+	  /* We initially place it at default so that we can get the
+	     default window positioning if we want */
+	  x = y = CW_USEDEFAULT;
+	}
+      else
+	{
+	  /* TEMP, FOREIGN: Put these where requested */
+	  x = real_x;
+	  y = real_y;
+	}
 
       window_width = rect.right - rect.left;
       window_height = rect.bottom - rect.top;
@@ -716,9 +730,21 @@ _gdk_window_impl_new (GdkWindow     *window,
 # endif
 
     }
-  GetWindowRect (GDK_WINDOW_HWND (window), &rect);
-  impl->initial_x = rect.left;
-  impl->initial_y = rect.top;
+
+  if (private->window_type != GDK_WINDOW_CHILD)
+    {
+      GetWindowRect (GDK_WINDOW_HWND (window), &rect);
+      impl->initial_x = rect.left;
+      impl->initial_y = rect.top;
+
+      /* Now we know the initial position, move to actually specified position */
+      if (real_x != x || real_y != y)
+	{
+	  API_CALL (SetWindowPos, (GDK_WINDOW_HWND (window), NULL,
+				   real_x, real_y, 0, 0,
+				   SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOZORDER));
+	}
+    }
 
   g_object_ref (window);
   gdk_win32_handle_table_insert (&GDK_WINDOW_HWND (window), window);



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