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:
parent
d3efd73429
commit
e0d839aea2
@ -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;
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
|
@ -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 */
|
||||||
|
@ -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;
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user