backend: Move GPU ownership from the monitor manager to the backend

Lets work towards making MetaMonitorManager about managing monitors, and
not about managing GPUs. This changes other units to keep a pointer to
the backend instead of a monitor manager, in case their ownership
changed, or their main usage of the monitor manager was to look up GPUs.

https://gitlab.gnome.org/GNOME/mutter/issues/548
https://gitlab.gnome.org/GNOME/mutter/merge_requests/525
This commit is contained in:
Jonas Ådahl
2019-01-11 15:35:42 +01:00
committed by Georges Basile Stavracas Neto
parent e7fd068a78
commit 5c500ad402
36 changed files with 587 additions and 559 deletions

View File

@ -511,9 +511,11 @@ meta_monitor_manager_apply_monitors_config (MetaMonitorManager *manager,
gboolean
meta_monitor_manager_has_hotplug_mode_update (MetaMonitorManager *manager)
{
GList *gpus;
GList *l;
for (l = manager->gpus; l; l = l->next)
gpus = meta_backend_get_gpus (manager->backend);
for (l = gpus; l; l = l->next)
{
MetaGpu *gpu = l->data;
@ -794,7 +796,6 @@ meta_monitor_manager_finalize (GObject *object)
{
MetaMonitorManager *manager = META_MONITOR_MANAGER (object);
g_list_free_full (manager->gpus, g_object_unref);
g_list_free_full (manager->logical_monitors, g_object_unref);
g_signal_handler_disconnect (manager->backend,
@ -1063,10 +1064,12 @@ static GList *
combine_gpu_lists (MetaMonitorManager *manager,
GList * (*list_getter) (MetaGpu *gpu))
{
GList *gpus;
GList *list = NULL;
GList *l;
for (l = manager->gpus; l; l = l->next)
gpus = meta_backend_get_gpus (manager->backend);
for (l = gpus; l; l = l->next)
{
MetaGpu *gpu = l->data;
@ -2676,26 +2679,6 @@ meta_monitor_manager_get_monitors (MetaMonitorManager *manager)
return manager->monitors;
}
/**
* meta_monitor_manager_add_gpu:
* @manager: A #MetaMonitorManager object
*
* Should only be called by subclasses. Adds a #MetaGpu to the internal list of
* GPU's.
*/
void
meta_monitor_manager_add_gpu (MetaMonitorManager *manager,
MetaGpu *gpu)
{
manager->gpus = g_list_append (manager->gpus, gpu);
}
GList *
meta_monitor_manager_get_gpus (MetaMonitorManager *manager)
{
return manager->gpus;
}
void
meta_monitor_manager_get_screen_size (MetaMonitorManager *manager,
int *width,
@ -2717,6 +2700,7 @@ meta_monitor_manager_get_power_save_mode (MetaMonitorManager *manager)
static void
rebuild_monitors (MetaMonitorManager *manager)
{
GList *gpus;
GList *l;
if (manager->monitors)
@ -2725,7 +2709,8 @@ rebuild_monitors (MetaMonitorManager *manager)
manager->monitors = NULL;
}
for (l = manager->gpus; l; l = l->next)
gpus = meta_backend_get_gpus (manager->backend);
for (l = gpus; l; l = l->next)
{
MetaGpu *gpu = l->data;
GList *k;
@ -2740,7 +2725,7 @@ rebuild_monitors (MetaMonitorManager *manager)
{
MetaMonitorTiled *monitor_tiled;
monitor_tiled = meta_monitor_tiled_new (gpu, output);
monitor_tiled = meta_monitor_tiled_new (gpu, manager, output);
manager->monitors = g_list_append (manager->monitors,
monitor_tiled);
}
@ -2797,7 +2782,7 @@ meta_monitor_manager_real_read_current_state (MetaMonitorManager *manager)
manager->serial++;
for (l = manager->gpus; l; l = l->next)
for (l = meta_backend_get_gpus (manager->backend); l; l = l->next)
{
MetaGpu *gpu = l->data;
GError *error = NULL;