diff options
author | Matthias Clasen <mclasen@redhat.com> | 2017-10-31 21:48:58 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2017-10-31 21:48:58 -0400 |
commit | e424dcb049b2662245e75d4bfa9986d2f8454347 (patch) | |
tree | bbc3a12f30e890580901fc35872f444f9e91d448 /gdk/wayland/gdkwindow-wayland.c | |
parent | 67cea503832a5fa2ca4d8c891a2594027b33b77d (diff) | |
download | gtk+-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.c | 30 |
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 |