summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Ådahl <jadahl@gmail.com>2017-01-10 16:01:46 +0800
committerJonas Ådahl <jadahl@gmail.com>2017-02-07 10:50:29 +0800
commit8ccbd363159eab7c9394f49dd21d8cef9d4b0b41 (patch)
treea739fbf32790c200abfff7916331b2d914807c33
parent790b386c5ff637faf13c5a7a70025a85fe03b3e6 (diff)
downloadmutter-8ccbd363159eab7c9394f49dd21d8cef9d4b0b41.tar.gz
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
-rw-r--r--src/backends/native/meta-cursor-renderer-native.c24
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 2105d610f..f4ea8d2a9 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))
{