[gtk/wip/chergert/quartz4u] macos: track monitor changes and update surface positions
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/chergert/quartz4u] macos: track monitor changes and update surface positions
- Date: Thu, 21 May 2020 18:03:50 +0000 (UTC)
commit 6a00b6f904aaa8705d2ef0c900a6e2d327984059
Author: Christian Hergert <chergert redhat com>
Date: Thu May 21 11:02:25 2020 -0700
macos: track monitor changes and update surface positions
This fixes moving windows between monitors when they change
as well as ensuring we have the right x,y coordinate for monitor
discovery and edge snapping.
gdk/macos/gdkmacosdisplay.c | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
---
diff --git a/gdk/macos/gdkmacosdisplay.c b/gdk/macos/gdkmacosdisplay.c
index 73802dc1ce..65c2fa1967 100644
--- a/gdk/macos/gdkmacosdisplay.c
+++ b/gdk/macos/gdkmacosdisplay.c
@@ -191,6 +191,22 @@ gdk_macos_display_monitors_changed_cb (CFNotificationCenterRef center,
g_assert (GDK_IS_MACOS_DISPLAY (self));
_gdk_macos_display_reload_monitors (self);
+
+ /* Now we need to update all our surface positions since they
+ * probably just changed origins. We ignore the popup surfaces
+ * since we can rely on the toplevel surfaces to handle that.
+ */
+ for (const GList *iter = _gdk_macos_display_get_surfaces (self);
+ iter != NULL;
+ iter = iter->next)
+ {
+ GdkMacosSurface *surface = iter->data;
+
+ g_assert (GDK_IS_MACOS_SURFACE (surface));
+
+ if (GDK_IS_TOPLEVEL (surface))
+ _gdk_macos_surface_update_position (surface);
+ }
}
static void
@@ -670,7 +686,7 @@ _gdk_macos_display_open (const gchar *display_name)
gdk_macos_display_load_display_link (self);
_gdk_macos_display_reload_monitors (self);
- CFNotificationCenterAddObserver (CFNotificationCenterGetDistributedCenter (),
+ CFNotificationCenterAddObserver (CFNotificationCenterGetLocalCenter (),
self,
gdk_macos_display_monitors_changed_cb,
CFSTR ("NSApplicationDidChangeScreenParametersNotification"),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]