From 43ae37a93ee862d2a3770a1ba5be0e1dcbc18751 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Wed, 13 Apr 2022 16:32:35 +0200 Subject: [PATCH] backends/native: Update cursor also when scaled or transformed MetaCursorRendererNative only updates the cursor state when the underlying texture changes. The cursor scale and transform do not trigger updates. This results in wrong cursor orientations on rotated displays. Use both texture changes and scale and transformation changes to figure out when to update the cursor state. Part-of: --- src/backends/native/meta-cursor-renderer-native.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/backends/native/meta-cursor-renderer-native.c b/src/backends/native/meta-cursor-renderer-native.c index c96974324..0eada201c 100644 --- a/src/backends/native/meta-cursor-renderer-native.c +++ b/src/backends/native/meta-cursor-renderer-native.c @@ -159,6 +159,10 @@ ensure_cursor_priv (MetaCursorSprite *cursor_sprite); static MetaCursorNativePrivate * get_cursor_priv (MetaCursorSprite *cursor_sprite); +static gboolean +is_cursor_scale_and_transform_valid (MetaCursorRenderer *renderer, + MetaCursorSprite *cursor_sprite); + static MetaCursorRendererNativeGpuData * meta_cursor_renderer_native_gpu_data_from_gpu (MetaGpuKms *gpu_kms) { @@ -1069,10 +1073,12 @@ meta_cursor_renderer_native_update_cursor (MetaCursorRenderer *renderer, { gboolean realized; + ensure_cursor_priv (cursor_sprite); realized = meta_cursor_sprite_realize_texture (cursor_sprite); gpus = calculate_cursor_sprite_gpus (renderer, cursor_sprite); - if (realized) + if (realized || + !is_cursor_scale_and_transform_valid (renderer, cursor_sprite)) realize_cursor_sprite (renderer, cursor_sprite, gpus); }