backends/cursor: Propagate cursor theme and size pref changes
This means the cursor will immediately respond to preference changes and make the right cursor visible. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4359>
This commit is contained in:
parent
facc5e9563
commit
f787480fda
@ -547,6 +547,16 @@ ensure_xcursor_color_state (MetaCursorTracker *cursor_tracker)
|
||||
return color_state;
|
||||
}
|
||||
|
||||
static void
|
||||
on_prefs_changed (MetaCursorSprite *cursor,
|
||||
gpointer user_data)
|
||||
{
|
||||
MetaCursorSpriteXcursor *sprite_xcursor =
|
||||
META_CURSOR_SPRITE_XCURSOR (user_data);
|
||||
|
||||
sprite_xcursor->theme_dirty = TRUE;
|
||||
}
|
||||
|
||||
MetaCursorSpriteXcursor *
|
||||
meta_cursor_sprite_xcursor_new (MetaCursor cursor,
|
||||
MetaCursorTracker *cursor_tracker)
|
||||
@ -562,6 +572,11 @@ meta_cursor_sprite_xcursor_new (MetaCursor cursor,
|
||||
NULL);
|
||||
sprite_xcursor->cursor = cursor;
|
||||
|
||||
g_signal_connect_object (cursor_tracker, "cursor-prefs-changed",
|
||||
G_CALLBACK (on_prefs_changed),
|
||||
sprite_xcursor,
|
||||
G_CONNECT_DEFAULT);
|
||||
|
||||
return sprite_xcursor;
|
||||
}
|
||||
|
||||
|
@ -86,6 +86,7 @@ enum
|
||||
CURSOR_CHANGED,
|
||||
POSITION_INVALIDATED,
|
||||
VISIBILITY_CHANGED,
|
||||
CURSOR_PREFS_CHANGED,
|
||||
LAST_SIGNAL
|
||||
};
|
||||
|
||||
@ -193,6 +194,17 @@ meta_cursor_tracker_real_get_sprite (MetaCursorTracker *tracker)
|
||||
return priv->displayed_cursor;
|
||||
}
|
||||
|
||||
static void
|
||||
on_prefs_changed (MetaPreference pref,
|
||||
gpointer user_data)
|
||||
{
|
||||
MetaCursorTracker *tracker = META_CURSOR_TRACKER (user_data);
|
||||
|
||||
if (pref == META_PREF_CURSOR_SIZE ||
|
||||
pref == META_PREF_CURSOR_THEME)
|
||||
g_signal_emit (tracker, signals[CURSOR_PREFS_CHANGED], 0);
|
||||
}
|
||||
|
||||
void
|
||||
meta_cursor_tracker_destroy (MetaCursorTracker *tracker)
|
||||
{
|
||||
@ -209,6 +221,8 @@ meta_cursor_tracker_init (MetaCursorTracker *tracker)
|
||||
priv->is_showing = FALSE;
|
||||
priv->x = -1.0;
|
||||
priv->y = -1.0;
|
||||
|
||||
meta_prefs_add_listener (on_prefs_changed, tracker);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -268,6 +282,16 @@ meta_cursor_tracker_dispose (GObject *object)
|
||||
G_OBJECT_CLASS (meta_cursor_tracker_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_cursor_tracker_finalize (GObject *object)
|
||||
{
|
||||
MetaCursorTracker *tracker = META_CURSOR_TRACKER (object);
|
||||
|
||||
meta_prefs_remove_listener (on_prefs_changed, tracker);
|
||||
|
||||
G_OBJECT_CLASS (meta_cursor_tracker_parent_class)->finalize (object);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_cursor_tracker_class_init (MetaCursorTrackerClass *klass)
|
||||
{
|
||||
@ -276,6 +300,7 @@ meta_cursor_tracker_class_init (MetaCursorTrackerClass *klass)
|
||||
object_class->get_property = meta_cursor_tracker_get_property;
|
||||
object_class->set_property = meta_cursor_tracker_set_property;
|
||||
object_class->dispose = meta_cursor_tracker_dispose;
|
||||
object_class->finalize = meta_cursor_tracker_finalize;
|
||||
|
||||
klass->set_force_track_position =
|
||||
meta_cursor_tracker_real_set_force_track_position;
|
||||
@ -309,6 +334,12 @@ meta_cursor_tracker_class_init (MetaCursorTrackerClass *klass)
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0, NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
signals[CURSOR_PREFS_CHANGED] = g_signal_new ("cursor-prefs-changed",
|
||||
G_TYPE_FROM_CLASS (klass),
|
||||
G_SIGNAL_RUN_LAST,
|
||||
0, NULL, NULL, NULL,
|
||||
G_TYPE_NONE, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
|
Loading…
x
Reference in New Issue
Block a user