forked from AuroraMiddleware/gtk
macos: avoid size/origin changes when possible
If _gdk_macos_surface_move_resize() was called with various -1 parameters we really want to avoid changing anything even if we think we know what the value might be. Otherwise, we risk messing up in-flight operations that we have not yet been notified of yet. This improves the chances we place windows in an appropriate location as they don't et screwed up before window-manager placement.
This commit is contained in:
parent
17b40ca148
commit
c7a6d1e8bf
@ -937,13 +937,17 @@ _gdk_macos_surface_move_resize (GdkMacosSurface *self,
|
||||
GdkDisplay *display;
|
||||
NSRect content_rect;
|
||||
NSRect frame_rect;
|
||||
gboolean ignore_move;
|
||||
gboolean ignore_size;
|
||||
|
||||
g_return_if_fail (GDK_IS_MACOS_SURFACE (self));
|
||||
|
||||
if ((x == -1 || (x == self->root_x)) &&
|
||||
(y == -1 || (y == self->root_y)) &&
|
||||
(width == -1 || (width == surface->width)) &&
|
||||
(height == -1 || (height == surface->height)))
|
||||
ignore_move = (x == -1 || (x == self->root_x)) &&
|
||||
(y == -1 || (y == self->root_y));
|
||||
ignore_size = (width == -1 || (width == surface->width)) &&
|
||||
(height == -1 || (height == surface->height));
|
||||
|
||||
if (ignore_move && ignore_size)
|
||||
return;
|
||||
|
||||
display = gdk_surface_get_display (surface);
|
||||
@ -964,7 +968,14 @@ _gdk_macos_surface_move_resize (GdkMacosSurface *self,
|
||||
x, y + height,
|
||||
&x, &y);
|
||||
|
||||
content_rect = NSMakeRect (x, y, width, height);
|
||||
content_rect = [self->window contentRectForFrameRect:[self->window frame]];
|
||||
|
||||
if (!ignore_move)
|
||||
content_rect.origin = NSMakePoint (x, y);
|
||||
|
||||
if (!ignore_size)
|
||||
content_rect.size = NSMakeSize (width, height);
|
||||
|
||||
frame_rect = [self->window frameRectForContentRect:content_rect];
|
||||
[self->window setFrame:frame_rect display:YES];
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user