[gtk/matthiasc/surface-state-rework: 10/80] wayland: Apply new surface state at the beginning of a frame




commit 264c64f0cae3f6c5c7d3f456287cd82e25dec2bc
Author: Jonas Ã…dahl <jadahl gmail com>
Date:   Mon Nov 23 17:26:06 2020 +0100

    wayland: Apply new surface state at the beginning of a frame
    
    Concentrate state application to the start of a frame; this is to avoid
    having GTK going back and forth between different state if so would
    happen between two frames.

 gdk/wayland/gdksurface-wayland.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)
---
diff --git a/gdk/wayland/gdksurface-wayland.c b/gdk/wayland/gdksurface-wayland.c
index 39e815a219..bcbc647a28 100644
--- a/gdk/wayland/gdksurface-wayland.c
+++ b/gdk/wayland/gdksurface-wayland.c
@@ -587,6 +587,8 @@ on_frame_clock_before_paint (GdkFrameClock *clock,
        */
       timings->predicted_presentation_time = timings->frame_time + refresh_interval / 2 + refresh_interval;
     }
+
+  gdk_surface_apply_state_change (surface);
 }
 
 void
@@ -1401,7 +1403,7 @@ gdk_wayland_surface_configure_toplevel (GdkSurface *surface)
                        (new_state & GDK_TOPLEVEL_STATE_FOCUSED) ? " focused" : "",
                        (new_state & GDK_TOPLEVEL_STATE_TILED) ? " tiled" : ""));
 
-  gdk_surface_set_state (surface, new_state);
+  gdk_surface_queue_state_change (surface, ~0 & ~new_state, new_state);
 
   switch (display_wayland->shell_variant)
     {
@@ -1482,10 +1484,7 @@ maybe_notify_mapped (GdkSurface *surface)
     return;
 
   if (!GDK_SURFACE_IS_MAPPED (surface))
-    {
-      gdk_synthesize_surface_state (surface, GDK_TOPLEVEL_STATE_WITHDRAWN, 0);
-      gdk_surface_invalidate_rect (surface, NULL);
-    }
+    gdk_surface_queue_state_change (surface, GDK_TOPLEVEL_STATE_WITHDRAWN, 0);
 }
 
 static void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]