summaryrefslogtreecommitdiff
path: root/gdk/wayland/gdkwindow-wayland.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2017-10-31 21:48:58 -0400
committerMatthias Clasen <mclasen@redhat.com>2017-10-31 21:48:58 -0400
commite424dcb049b2662245e75d4bfa9986d2f8454347 (patch)
treebbc3a12f30e890580901fc35872f444f9e91d448 /gdk/wayland/gdkwindow-wayland.c
parent67cea503832a5fa2ca4d8c891a2594027b33b77d (diff)
downloadgtk+-e424dcb049b2662245e75d4bfa9986d2f8454347.tar.gz
wayland: Stop using ::monitors-changed
Instead of connecting to this signal for every single window, walk the window tree from the root window.
Diffstat (limited to 'gdk/wayland/gdkwindow-wayland.c')
-rw-r--r--gdk/wayland/gdkwindow-wayland.c30
1 files changed, 12 insertions, 18 deletions
diff --git a/gdk/wayland/gdkwindow-wayland.c b/gdk/wayland/gdkwindow-wayland.c
index bb070d330f..0dc12ab678 100644
--- a/gdk/wayland/gdkwindow-wayland.c
+++ b/gdk/wayland/gdkwindow-wayland.c
@@ -614,14 +614,14 @@ on_frame_clock_after_paint (GdkFrameClock *clock,
g_signal_emit (impl, signals[COMMITTED], 0);
}
-static void
+void
window_update_scale (GdkWindow *window)
{
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
- GdkWaylandDisplay *display_wayland =
- GDK_WAYLAND_DISPLAY (gdk_window_get_display (window));
+ GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (gdk_window_get_display (window));
guint32 scale;
GSList *l;
+ GList *children, *c;
if (display_wayland->compositor_version < WL_SURFACE_HAS_BUFFER_SCALE)
{
@@ -639,16 +639,16 @@ window_update_scale (GdkWindow *window)
/* Notify app that scale changed */
gdk_wayland_window_maybe_configure (window, window->width, window->height, scale);
-}
-static void
-on_monitors_changed (GdkScreen *screen,
- GdkWindow *window)
-{
- window_update_scale (window);
+ children = gdk_window_get_children (window);
+ for (c = children; c; c = c->next)
+ {
+ GdkWindow *child = c->data;
+ window_update_scale (child);
+ }
+ g_list_free (children);
}
-
static void gdk_wayland_window_create_surface (GdkWindow *window);
void
@@ -702,14 +702,8 @@ _gdk_wayland_display_create_window_impl (GdkDisplay *display,
gdk_wayland_window_create_surface (window);
frame_clock = gdk_window_get_frame_clock (window);
-
- g_signal_connect (frame_clock, "before-paint",
- G_CALLBACK (on_frame_clock_before_paint), window);
- g_signal_connect (frame_clock, "after-paint",
- G_CALLBACK (on_frame_clock_after_paint), window);
-
- g_signal_connect (gdk_display_get_default_screen (display), "monitors-changed",
- G_CALLBACK (on_monitors_changed), window);
+ g_signal_connect (frame_clock, "before-paint", G_CALLBACK (on_frame_clock_before_paint), window);
+ g_signal_connect (frame_clock, "after-paint", G_CALLBACK (on_frame_clock_after_paint), window);
}
static void