1
0
Fork 0

color-device: Make it possible to outlive the active monitors

Previously the color device was destroyed when it was attached to a
monitor that was going away. However, the MetaMonitor objects are
ref-counted and can stay around for longer, even if the underlying
resources went away. We need color devices for as long as the
MetaMonitors are alive.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3904>
This commit is contained in:
Sebastian Wick 2024-07-18 16:24:34 +02:00
parent a10b56e946
commit 431c4d12b9
4 changed files with 5 additions and 11 deletions

View file

@ -213,7 +213,6 @@ meta_backend_dispose (GObject *object)
g_clear_pointer (&priv->cursor_tracker, meta_cursor_tracker_destroy);
g_clear_object (&priv->current_device);
g_clear_object (&priv->color_manager);
g_clear_object (&priv->monitor_manager);
g_clear_object (&priv->orientation_manager);
#ifdef HAVE_REMOTE_DESKTOP
@ -257,6 +256,9 @@ meta_backend_dispose (GObject *object)
g_clear_pointer (&priv->stage, clutter_actor_destroy);
g_clear_pointer (&priv->idle_manager, meta_idle_manager_free);
g_clear_object (&priv->renderer);
/* the renderer keeps references to color devices which keep references
* to the color manager. */
g_clear_object (&priv->color_manager);
#ifdef HAVE_EGL
g_clear_object (&priv->egl);
#endif

View file

@ -621,13 +621,6 @@ meta_color_device_new (MetaColorManager *color_manager,
return color_device;
}
void
meta_color_device_destroy (MetaColorDevice *color_device)
{
g_object_run_dispose (G_OBJECT (color_device));
g_object_unref (color_device);
}
void
meta_color_device_update_monitor (MetaColorDevice *color_device,
MetaMonitor *monitor)

View file

@ -31,8 +31,6 @@ G_DECLARE_FINAL_TYPE (MetaColorDevice, meta_color_device,
MetaColorDevice * meta_color_device_new (MetaColorManager *color_manager,
MetaMonitor *monitor);
void meta_color_device_destroy (MetaColorDevice *color_device);
void meta_color_device_update_monitor (MetaColorDevice *color_device,
MetaMonitor *monitor);

View file

@ -165,7 +165,8 @@ update_devices (MetaColorManager *color_manager)
devices = g_hash_table_new_full (g_str_hash,
g_str_equal,
g_free,
(GDestroyNotify) meta_color_device_destroy);
(GDestroyNotify) g_object_unref);
for (l = meta_monitor_manager_get_monitors (monitor_manager); l; l = l->next)
{
MetaMonitor *monitor = META_MONITOR (l->data);