[mutter/gnome-3-22] MetaCursorRendererNative: Always force set hw cursor the first time



commit 8ccbd363159eab7c9394f49dd21d8cef9d4b0b41
Author: Jonas Ådahl <jadahl gmail com>
Date:   Tue Jan 10 16:01:46 2017 +0800

    MetaCursorRendererNative: Always force set hw cursor the first time
    
    The initial state of the hardware cursor is not known, so always force
    update it the first time we update the cursor. Do this by changing the
    'force' flag of update_hw_cursor() to an 'invalidated' hw cursor state.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=771056

 src/backends/native/meta-cursor-renderer-native.c |   24 +++++++++++++-------
 1 files changed, 15 insertions(+), 9 deletions(-)
---
diff --git a/src/backends/native/meta-cursor-renderer-native.c 
b/src/backends/native/meta-cursor-renderer-native.c
index 2105d61..f4ea8d2 100644
--- a/src/backends/native/meta-cursor-renderer-native.c
+++ b/src/backends/native/meta-cursor-renderer-native.c
@@ -63,6 +63,7 @@ static GQuark quark_cursor_sprite = 0;
 
 struct _MetaCursorRendererNativePrivate
 {
+  gboolean hw_state_invalidated;
   gboolean has_hw_cursor;
 
   MetaCursorSprite *last_cursor;
@@ -159,8 +160,7 @@ set_pending_cursor_sprite_gbm_bo (MetaCursorSprite *cursor_sprite,
 static void
 set_crtc_cursor (MetaCursorRendererNative *native,
                  MetaCRTC                 *crtc,
-                 MetaCursorSprite         *cursor_sprite,
-                 gboolean                  force)
+                 MetaCursorSprite         *cursor_sprite)
 {
   MetaCursorRendererNativePrivate *priv = meta_cursor_renderer_native_get_instance_private (native);
 
@@ -177,7 +177,7 @@ set_crtc_cursor (MetaCursorRendererNative *native,
       else
         bo = get_active_cursor_sprite_gbm_bo (cursor_sprite);
 
-      if (!force && bo == crtc->cursor_renderer_private)
+      if (!priv->hw_state_invalidated && bo == crtc->cursor_renderer_private)
         return;
 
       crtc->cursor_renderer_private = bo;
@@ -197,7 +197,7 @@ set_crtc_cursor (MetaCursorRendererNative *native,
     }
   else
     {
-      if (force || crtc->cursor_renderer_private != NULL)
+      if (priv->hw_state_invalidated || crtc->cursor_renderer_private != NULL)
         {
           drmModeSetCursor2 (priv->drm_fd, crtc->crtc_id, 0, 0, 0, 0, 0);
           crtc->cursor_renderer_private = NULL;
@@ -207,8 +207,7 @@ set_crtc_cursor (MetaCursorRendererNative *native,
 
 static void
 update_hw_cursor (MetaCursorRendererNative *native,
-                  MetaCursorSprite         *cursor_sprite,
-                  gboolean                  force)
+                  MetaCursorSprite         *cursor_sprite)
 {
   MetaCursorRendererNativePrivate *priv = meta_cursor_renderer_native_get_instance_private (native);
   MetaCursorRenderer *renderer = META_CURSOR_RENDERER (native);
@@ -241,7 +240,7 @@ update_hw_cursor (MetaCursorRendererNative *native,
       else
         crtc_cursor = NULL;
 
-      set_crtc_cursor (native, &crtcs[i], crtc_cursor, force);
+      set_crtc_cursor (native, &crtcs[i], crtc_cursor);
 
       if (crtc_cursor)
         {
@@ -252,6 +251,8 @@ update_hw_cursor (MetaCursorRendererNative *native,
         }
     }
 
+  priv->hw_state_invalidated = FALSE;
+
   if (painted)
     meta_cursor_renderer_emit_painted (renderer, cursor_sprite);
 }
@@ -394,7 +395,7 @@ meta_cursor_renderer_native_update_cursor (MetaCursorRenderer *renderer,
   meta_cursor_renderer_native_trigger_frame (native, cursor_sprite);
 
   priv->has_hw_cursor = should_have_hw_cursor (renderer, cursor_sprite);
-  update_hw_cursor (native, cursor_sprite, FALSE);
+  update_hw_cursor (native, cursor_sprite);
   return priv->has_hw_cursor;
 }
 
@@ -648,8 +649,11 @@ static void
 force_update_hw_cursor (MetaCursorRendererNative *native)
 {
   MetaCursorRenderer *renderer = META_CURSOR_RENDERER (native);
+  MetaCursorRendererNativePrivate *priv =
+    meta_cursor_renderer_native_get_instance_private (native);
 
-  update_hw_cursor (native, meta_cursor_renderer_get_cursor (renderer), TRUE);
+  priv->hw_state_invalidated = TRUE;
+  update_hw_cursor (native, meta_cursor_renderer_get_cursor (renderer));
 }
 
 static void
@@ -670,6 +674,8 @@ meta_cursor_renderer_native_init (MetaCursorRendererNative *native)
   g_signal_connect_object (monitors, "monitors-changed",
                            G_CALLBACK (on_monitors_changed), native, 0);
 
+  priv->hw_state_invalidated = TRUE;
+
 #if defined(CLUTTER_WINDOWING_EGL)
   if (clutter_check_windowing_backend (CLUTTER_WINDOWING_EGL))
     {


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