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;
|
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 *
|
MetaCursorSpriteXcursor *
|
||||||
meta_cursor_sprite_xcursor_new (MetaCursor cursor,
|
meta_cursor_sprite_xcursor_new (MetaCursor cursor,
|
||||||
MetaCursorTracker *cursor_tracker)
|
MetaCursorTracker *cursor_tracker)
|
||||||
@ -562,6 +572,11 @@ meta_cursor_sprite_xcursor_new (MetaCursor cursor,
|
|||||||
NULL);
|
NULL);
|
||||||
sprite_xcursor->cursor = cursor;
|
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;
|
return sprite_xcursor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,6 +86,7 @@ enum
|
|||||||
CURSOR_CHANGED,
|
CURSOR_CHANGED,
|
||||||
POSITION_INVALIDATED,
|
POSITION_INVALIDATED,
|
||||||
VISIBILITY_CHANGED,
|
VISIBILITY_CHANGED,
|
||||||
|
CURSOR_PREFS_CHANGED,
|
||||||
LAST_SIGNAL
|
LAST_SIGNAL
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -193,6 +194,17 @@ meta_cursor_tracker_real_get_sprite (MetaCursorTracker *tracker)
|
|||||||
return priv->displayed_cursor;
|
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
|
void
|
||||||
meta_cursor_tracker_destroy (MetaCursorTracker *tracker)
|
meta_cursor_tracker_destroy (MetaCursorTracker *tracker)
|
||||||
{
|
{
|
||||||
@ -209,6 +221,8 @@ meta_cursor_tracker_init (MetaCursorTracker *tracker)
|
|||||||
priv->is_showing = FALSE;
|
priv->is_showing = FALSE;
|
||||||
priv->x = -1.0;
|
priv->x = -1.0;
|
||||||
priv->y = -1.0;
|
priv->y = -1.0;
|
||||||
|
|
||||||
|
meta_prefs_add_listener (on_prefs_changed, tracker);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -268,6 +282,16 @@ meta_cursor_tracker_dispose (GObject *object)
|
|||||||
G_OBJECT_CLASS (meta_cursor_tracker_parent_class)->dispose (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
|
static void
|
||||||
meta_cursor_tracker_class_init (MetaCursorTrackerClass *klass)
|
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->get_property = meta_cursor_tracker_get_property;
|
||||||
object_class->set_property = meta_cursor_tracker_set_property;
|
object_class->set_property = meta_cursor_tracker_set_property;
|
||||||
object_class->dispose = meta_cursor_tracker_dispose;
|
object_class->dispose = meta_cursor_tracker_dispose;
|
||||||
|
object_class->finalize = meta_cursor_tracker_finalize;
|
||||||
|
|
||||||
klass->set_force_track_position =
|
klass->set_force_track_position =
|
||||||
meta_cursor_tracker_real_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,
|
G_SIGNAL_RUN_LAST,
|
||||||
0, NULL, NULL, NULL,
|
0, NULL, NULL, NULL,
|
||||||
G_TYPE_NONE, 0);
|
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
|
static void
|
||||||
|
Loading…
x
Reference in New Issue
Block a user