Update the position after showing the window since the window manager

2008-02-17  Richard Hult  <richard@imendio.com>

	* gdk/quartz/GdkQuartzWindow.c: (showAndMakeKey): Update the
	position after showing the window since the window manager might
	not place it where we requested in the first places.

svn path=/trunk/; revision=19605
This commit is contained in:
Richard Hult 2008-02-17 10:11:11 +00:00 committed by Richard Hult
parent 8a37bb9364
commit 66fc6a5fb2
2 changed files with 29 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2008-02-17 Richard Hult <richard@imendio.com>
* gdk/quartz/GdkQuartzWindow.c: (showAndMakeKey): Update the
position after showing the window since the window manager might
not place it where we requested in the first places.
2008-02-17 Richard Hult <richard@imendio.com>
* gdk/quartz/gdkwindow-quartz.c: (show_window_internal),

View File

@ -270,14 +270,19 @@
GdkWindow *window = [[self contentView] gdkWindow];
GdkWindowObject *private = (GdkWindowObject *)window;
GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
gboolean was_hidden;
int requested_x = 0, requested_y = 0;
inShowOrHide = YES;
was_hidden = FALSE;
if (!GDK_WINDOW_IS_MAPPED (window))
{
NSRect content_rect;
NSRect frame_rect;
was_hidden = TRUE;
/* We move the window in place if it's not mapped. See comment in
* hide().
*/
@ -287,6 +292,9 @@
impl->width, impl->height);
frame_rect = [impl->toplevel frameRectForContentRect:content_rect];
[impl->toplevel setFrame:frame_rect display:NO];
requested_x = frame_rect.origin.x;
requested_y = frame_rect.origin.y;
}
if (makeKey)
@ -295,6 +303,20 @@
[impl->toplevel orderFront:nil];
inShowOrHide = NO;
/* When the window manager didn't allow our request, update the position
* to what it really ended up as.
*/
if (was_hidden)
{
NSRect frame_rect;
frame_rect = [impl->toplevel frame];
if (requested_x != frame_rect.origin.x || requested_y != frame_rect.origin.y)
{
[self windowDidMove:nil];
}
}
}
- (void)hide
@ -422,6 +444,7 @@
}
static GdkDragContext *current_context = NULL;
static GdkDragAction