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>
This commit is contained in:
Olivier Fourdan 2021-01-22 16:30:57 +01:00 committed by Marge Bot
parent df5a5d279d
commit a2e2cfe437

View File

@ -35,6 +35,7 @@
#include "backends/meta-logical-monitor.h" #include "backends/meta-logical-monitor.h"
#include "backends/x11/meta-backend-x11.h" #include "backends/x11/meta-backend-x11.h"
#include "compositor/meta-window-actor-private.h"
#include "core/boxes-private.h" #include "core/boxes-private.h"
#include "core/frame.h" #include "core/frame.h"
#include "core/meta-workspace-manager-private.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); 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 static void
meta_window_x11_move_resize_internal (MetaWindow *window, meta_window_x11_move_resize_internal (MetaWindow *window,
MetaGravity gravity, 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 resizing, freeze commits - This is for Xwayland, and a no-op on Xorg */
if (need_resize_client || need_resize_frame) 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_set_thaw_after_paint (window, TRUE);
meta_window_x11_freeze_commits (window); meta_window_x11_freeze_commits (window);