diff options
author | Jonas Ådahl <jadahl@gmail.com> | 2018-09-14 19:06:55 +0200 |
---|---|---|
committer | Florian Müllner <florian.muellner@gmail.com> | 2018-09-19 15:39:54 +0000 |
commit | 7d82cdeea307608c9f4e6442eb4ea64d7dee0c58 (patch) | |
tree | cb5e52301d9098198e3f258fe333e1d8f217fbc0 | |
parent | e2e72966128edf7bdb5376473d5c6755fd09fcaf (diff) | |
download | mutter-7d82cdeea307608c9f4e6442eb4ea64d7dee0c58.tar.gz |
window/wayland: Freeze updates until shown
Not until the window is shown do we know what monitor it's on, thus the
size, so freeze updates (shape etc) until the window is shown.
https://gitlab.gnome.org/GNOME/mutter/merge_requests/229
-rw-r--r-- | src/wayland/meta-window-wayland.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/wayland/meta-window-wayland.c b/src/wayland/meta-window-wayland.c index 46ee78095..c71cc9a0b 100644 --- a/src/wayland/meta-window-wayland.c +++ b/src/wayland/meta-window-wayland.c @@ -57,6 +57,8 @@ struct _MetaWindowWayland int last_sent_y; int last_sent_width; int last_sent_height; + + gboolean has_been_shown; }; struct _MetaWindowWaylandClass @@ -539,6 +541,19 @@ appears_focused_changed (GObject *object, } static void +on_window_shown (MetaWindow *window) +{ + MetaWindowWayland *wl_window = META_WINDOW_WAYLAND (window); + gboolean has_been_shown; + + has_been_shown = wl_window->has_been_shown; + wl_window->has_been_shown = TRUE; + + if (!has_been_shown) + meta_compositor_sync_updates_frozen (window->display->compositor, window); +} + +static void meta_window_wayland_init (MetaWindowWayland *wl_window) { MetaWindow *window = META_WINDOW (wl_window); @@ -547,6 +562,8 @@ meta_window_wayland_init (MetaWindowWayland *wl_window) g_signal_connect (window, "notify::appears-focused", G_CALLBACK (appears_focused_changed), NULL); + g_signal_connect (window, "shown", + G_CALLBACK (on_window_shown), NULL); } static void @@ -576,7 +593,9 @@ meta_window_wayland_is_stackable (MetaWindow *window) static gboolean meta_window_wayland_are_updates_frozen (MetaWindow *window) { - return FALSE; + MetaWindowWayland *wl_window = META_WINDOW_WAYLAND (window); + + return !wl_window->has_been_shown; } static void |