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.
This commit is contained in:
@ -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);
|
||||
|
||||
Reference in New Issue
Block a user