cursor: Hold reference to cursor tracker

This is so that it can unregister from it on tear down. The tracker owns
references to cursors too, but this cycle is already broken as the
backend calls 'g_object_run_dispose()' when tearing the cursor tracker
down.

Fixes a crash on shutdown.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2181>
This commit is contained in:
Jonas Ådahl 2021-12-22 19:37:16 +01:00
parent 287908e05a
commit fc1de74442

View File

@ -279,6 +279,7 @@ meta_cursor_sprite_finalize (GObject *object)
g_clear_pointer (&priv->texture, cogl_object_unref); g_clear_pointer (&priv->texture, cogl_object_unref);
meta_cursor_tracker_unregister_cursor_sprite (priv->cursor_tracker, sprite); meta_cursor_tracker_unregister_cursor_sprite (priv->cursor_tracker, sprite);
g_clear_object (&priv->cursor_tracker);
G_OBJECT_CLASS (meta_cursor_sprite_parent_class)->finalize (object); G_OBJECT_CLASS (meta_cursor_sprite_parent_class)->finalize (object);
} }
@ -296,7 +297,7 @@ meta_cursor_tracker_set_property (GObject *object,
switch (prop_id) switch (prop_id)
{ {
case PROP_CURSOR_TRACKER: case PROP_CURSOR_TRACKER:
priv->cursor_tracker = g_value_get_object (value); g_set_object (&priv->cursor_tracker, g_value_get_object (value));
break; break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);