[gtk+/gtk-2-24-win32] win32: Fix placement at initial position
- From: Alexander Larsson <alexl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/gtk-2-24-win32] win32: Fix placement at initial position
- Date: Wed, 2 Nov 2011 11:23:51 +0000 (UTC)
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]