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:
parent
a10b56e946
commit
431c4d12b9
4 changed files with 5 additions and 11 deletions
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue