[gtk+] win32: Fix placement at initial position
- From: Alexander Larsson <alexl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] win32: Fix placement at initial position
- Date: Thu, 10 Nov 2011 16:49:54 +0000 (UTC)
commit c563765574fea4e3afe2101f8c005f8b57dc2f66
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 | 37 +++++++++++++++++++++++++++++++------
1 files changed, 31 insertions(+), 6 deletions(-)
---
diff --git a/gdk/win32/gdkwindow-win32.c b/gdk/win32/gdkwindow-win32.c
index 6e39c98..f2154ab 100644
--- a/gdk/win32/gdkwindow-win32.c
+++ b/gdk/win32/gdkwindow-win32.c
@@ -445,7 +445,7 @@ _gdk_win32_display_create_window_impl (GdkDisplay *display,
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;
@@ -562,8 +562,21 @@ _gdk_win32_display_create_window_impl (GdkDisplay *display,
AdjustWindowRectEx (&rect, dwStyle, FALSE, dwExStyle);
- /* non child windows are placed by the OS/window manager */
- x = y = CW_USEDEFAULT;
+ real_x = window->x - offset_x;
+ real_y = window->y - offset_y;
+
+ if (window->window_type == GDK_WINDOW_TOPLEVEL)
+ {
+ /* 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;
@@ -629,9 +642,21 @@ _gdk_win32_display_create_window_impl (GdkDisplay *display,
# endif
}
- GetWindowRect (GDK_WINDOW_HWND (window), &rect);
- impl->initial_x = rect.left;
- impl->initial_y = rect.top;
+
+ if (window->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]