backends/output: Keep a pointer to the monitor manager

Instead of passing it around or fetching the singleton, keep a pointer
to the monitor manager that owns the output. This will eventually be
replaced with a per GPU/graphics card object.

https://bugzilla.gnome.org/show_bug.cgi?id=785381
This commit is contained in:
Jonas Ådahl 2017-07-04 11:56:18 +08:00
parent d3efd73429
commit e0d839aea2
6 changed files with 31 additions and 10 deletions

View File

@ -89,10 +89,11 @@ create_mode (CrtcModeSpec *spec,
} }
static void static void
append_monitor (GList **modes, append_monitor (MetaMonitorManager *manager,
GList **crtcs, GList **modes,
GList **outputs, GList **crtcs,
float scale) GList **outputs,
float scale)
{ {
CrtcModeSpec mode_specs[] = { CrtcModeSpec mode_specs[] = {
{ {
@ -140,6 +141,7 @@ append_monitor (GList **modes,
number = g_list_length (*outputs) + 1; number = g_list_length (*outputs) + 1;
output->monitor_manager = manager;
output->winsys_id = number; output->winsys_id = number;
output->name = g_strdup_printf ("LVDS%d", number); output->name = g_strdup_printf ("LVDS%d", number);
output->vendor = g_strdup ("MetaProducts Inc."); output->vendor = g_strdup ("MetaProducts Inc.");
@ -174,10 +176,11 @@ append_monitor (GList **modes,
} }
static void static void
append_tiled_monitor (GList **modes, append_tiled_monitor (MetaMonitorManager *manager,
GList **crtcs, GList **modes,
GList **outputs, GList **crtcs,
int scale) GList **outputs,
int scale)
{ {
CrtcModeSpec mode_specs[] = { CrtcModeSpec mode_specs[] = {
{ {
@ -242,6 +245,7 @@ append_tiled_monitor (GList **modes,
output = g_object_new (META_TYPE_OUTPUT, NULL); output = g_object_new (META_TYPE_OUTPUT, NULL);
output->monitor_manager = manager;
output->winsys_id = number; output->winsys_id = number;
output->name = g_strdup_printf ("LVDS%d", number); output->name = g_strdup_printf ("LVDS%d", number);
output->vendor = g_strdup ("MetaProducts Inc."); output->vendor = g_strdup ("MetaProducts Inc.");
@ -385,9 +389,10 @@ meta_monitor_manager_dummy_read_current (MetaMonitorManager *manager)
for (i = 0; i < num_monitors; i++) for (i = 0; i < num_monitors; i++)
{ {
if (tiled_monitors) if (tiled_monitors)
append_tiled_monitor (&modes, &crtcs, &outputs, monitor_scales[i]); append_tiled_monitor (manager,
&modes, &crtcs, &outputs, monitor_scales[i]);
else else
append_monitor (&modes, &crtcs, &outputs, monitor_scales[i]); append_monitor (manager, &modes, &crtcs, &outputs, monitor_scales[i]);
} }
manager->modes = modes; manager->modes = modes;

View File

@ -23,6 +23,12 @@
G_DEFINE_TYPE (MetaOutput, meta_output, G_TYPE_OBJECT) G_DEFINE_TYPE (MetaOutput, meta_output, G_TYPE_OBJECT)
MetaMonitorManager *
meta_output_get_monitor_manager (MetaOutput *output)
{
return output->monitor_manager;
}
static void static void
meta_output_finalize (GObject *object) meta_output_finalize (GObject *object)
{ {

View File

@ -62,6 +62,8 @@ struct _MetaOutput
{ {
GObject parent; GObject parent;
MetaMonitorManager *monitor_manager;
/* The CRTC driving this output, NULL if the output is not enabled */ /* The CRTC driving this output, NULL if the output is not enabled */
MetaCrtc *crtc; MetaCrtc *crtc;
@ -117,4 +119,6 @@ struct _MetaOutput
#define META_TYPE_OUTPUT (meta_output_get_type ()) #define META_TYPE_OUTPUT (meta_output_get_type ())
G_DECLARE_FINAL_TYPE (MetaOutput, meta_output, META, OUTPUT, GObject) G_DECLARE_FINAL_TYPE (MetaOutput, meta_output, META, OUTPUT, GObject)
MetaMonitorManager * meta_output_get_monitor_manager (MetaOutput *output);
#endif /* META_OUTPUT_H */ #endif /* META_OUTPUT_H */

View File

@ -730,6 +730,7 @@ create_output (MetaMonitorManager *manager,
output->driver_private = output_kms; output->driver_private = output_kms;
output->driver_notify = (GDestroyNotify)meta_output_destroy_notify; output->driver_notify = (GDestroyNotify)meta_output_destroy_notify;
output->monitor_manager = manager;
output->winsys_id = connector->connector_id; output->winsys_id = connector->connector_id;
output->name = make_output_name (connector); output->name = make_output_name (connector);
output->width_mm = connector->mmWidth; output->width_mm = connector->mmWidth;

View File

@ -872,6 +872,7 @@ meta_monitor_manager_xrandr_read_current (MetaMonitorManager *manager)
continue; continue;
output = g_object_new (META_TYPE_OUTPUT, NULL); output = g_object_new (META_TYPE_OUTPUT, NULL);
output->monitor_manager = manager;
if (xrandr_output->connection != RR_Disconnected) if (xrandr_output->connection != RR_Disconnected)
{ {

View File

@ -91,9 +91,13 @@ static void
meta_monitor_manager_test_read_current (MetaMonitorManager *manager) meta_monitor_manager_test_read_current (MetaMonitorManager *manager)
{ {
MetaMonitorManagerTest *manager_test = META_MONITOR_MANAGER_TEST (manager); MetaMonitorManagerTest *manager_test = META_MONITOR_MANAGER_TEST (manager);
GList *l;
g_assert (manager_test->test_setup); g_assert (manager_test->test_setup);
for (l = manager_test->test_setup->outputs; l; l = l->next)
META_OUTPUT (l->data)->monitor_manager = manager;
manager->modes = manager_test->test_setup->modes; manager->modes = manager_test->test_setup->modes;
manager->crtcs = manager_test->test_setup->crtcs; manager->crtcs = manager_test->test_setup->crtcs;