[mutter] window/x11: Freeze commits on resize
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] window/x11: Freeze commits on resize
- Date: Thu, 16 Jan 2020 08:50:55 +0000 (UTC)
commit 4ae9953607c82166e2bc7f342d2663d38314f6bd
Author: Olivier Fourdan <ofourdan redhat com>
Date: Mon Dec 2 14:01:30 2019 +0100
window/x11: Freeze commits on resize
Make sure we freeze commits before resizing the window as this will
clear the frame to black.
Set the "thaw on paint" flag so that the post paint for window actor X11
can then thaw the freeze initiated prior to the resize and keep the
freeze/thaw balanced.
https://gitlab.gnome.org/GNOME/mutter/merge_requests/942
src/compositor/meta-window-actor-x11.c | 10 ++++++++++
src/x11/window-x11.c | 10 ++++++++++
2 files changed, 20 insertions(+)
---
diff --git a/src/compositor/meta-window-actor-x11.c b/src/compositor/meta-window-actor-x11.c
index b7032e0ba..2c0bd9939 100644
--- a/src/compositor/meta-window-actor-x11.c
+++ b/src/compositor/meta-window-actor-x11.c
@@ -40,6 +40,7 @@
#include "meta/meta-x11-errors.h"
#include "meta/window.h"
#include "x11/meta-x11-display-private.h"
+#include "x11/window-x11.h"
enum
{
@@ -1213,6 +1214,7 @@ static void
meta_window_actor_x11_post_paint (MetaWindowActor *actor)
{
MetaWindowActorX11 *actor_x11 = META_WINDOW_ACTOR_X11 (actor);
+ MetaWindow *window;
actor_x11->repaint_scheduled = FALSE;
@@ -1238,6 +1240,14 @@ meta_window_actor_x11_post_paint (MetaWindowActor *actor)
actor_x11->needs_frame_drawn = FALSE;
}
+
+ /* This is for Xwayland, and a no-op on plain Xorg */
+ window = meta_window_actor_get_meta_window (actor);
+ if (meta_window_x11_should_thaw_after_paint (window))
+ {
+ meta_window_x11_thaw_commits (window);
+ meta_window_x11_set_thaw_after_paint (window, FALSE);
+ }
}
static gboolean
diff --git a/src/x11/window-x11.c b/src/x11/window-x11.c
index fdd86efa6..93cfa8e0d 100644
--- a/src/x11/window-x11.c
+++ b/src/x11/window-x11.c
@@ -1448,6 +1448,16 @@ meta_window_x11_move_resize_internal (MetaWindow *window,
(window->size_hints.flags & USPosition)))
need_configure_notify = TRUE;
+ /* 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))
+ {
+ meta_window_x11_set_thaw_after_paint (window, TRUE);
+ meta_window_x11_freeze_commits (window);
+ }
+ }
+
/* The rest of this function syncs our new size/pos with X as
* efficiently as possible
*/
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]