diff options
author | Olivier Fourdan <ofourdan@redhat.com> | 2021-01-22 16:30:57 +0100 |
---|---|---|
committer | Marge Bot <marge-bot@gnome.org> | 2021-01-30 10:13:03 +0000 |
commit | a2e2cfe43714df656e451ef525b97c24fa786fed (patch) | |
tree | a9a6d1447380140c177d6306f174e74fa97e26dc | |
parent | df5a5d279d1ec9757881304f6cb3ca546a3743a0 (diff) | |
download | mutter-a2e2cfe43714df656e451ef525b97c24fa786fed.tar.gz |
window/x11: Check before freezing commits
Now that we have a window actor API that can hint whether or not the
window actor would support freezing commits, use it to avoid freezing
Xwayland commit on actors that will not be thawed after paint.
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1615
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1678>
-rw-r--r-- | src/x11/window-x11.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/x11/window-x11.c b/src/x11/window-x11.c index 2b191c2a1..fcb0653df 100644 --- a/src/x11/window-x11.c +++ b/src/x11/window-x11.c @@ -35,6 +35,7 @@ #include "backends/meta-logical-monitor.h" #include "backends/x11/meta-backend-x11.h" +#include "compositor/meta-window-actor-private.h" #include "core/boxes-private.h" #include "core/frame.h" #include "core/meta-workspace-manager-private.h" @@ -1324,6 +1325,18 @@ meta_window_x11_current_workspace_changed (MetaWindow *window) meta_x11_error_trap_pop (x11_display); } +static gboolean +meta_window_x11_can_freeze_commits (MetaWindow *window) +{ + MetaWindowActor *window_actor; + + window_actor = meta_window_actor_from_window (window); + if (window_actor == NULL) + return FALSE; + + return meta_window_actor_can_freeze_commits (window_actor); +} + static void meta_window_x11_move_resize_internal (MetaWindow *window, MetaGravity gravity, @@ -1475,7 +1488,8 @@ meta_window_x11_move_resize_internal (MetaWindow *window, /* If resizing, freeze commits - This is for Xwayland, and a no-op on Xorg */ if (need_resize_client || need_resize_frame) { - if (!meta_window_x11_should_thaw_after_paint (window)) + if (meta_window_x11_can_freeze_commits (window) && + !meta_window_x11_should_thaw_after_paint (window)) { meta_window_x11_set_thaw_after_paint (window, TRUE); meta_window_x11_freeze_commits (window); |