summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backends/meta-logical-monitor.c3
-rw-r--r--src/backends/meta-monitor-manager-dummy.c42
-rw-r--r--src/backends/meta-monitor-manager-private.h18
-rw-r--r--src/backends/meta-monitor-manager.c16
-rw-r--r--src/backends/meta-monitor.c4
-rw-r--r--src/backends/meta-output.c63
-rw-r--r--src/backends/meta-output.h24
-rw-r--r--src/backends/native/meta-monitor-manager-kms.c37
-rw-r--r--src/backends/native/meta-output-kms.c32
-rw-r--r--src/backends/x11/meta-monitor-manager-xrandr.c28
-rw-r--r--src/backends/x11/meta-output-xrandr.c44
-rw-r--r--src/tests/meta-monitor-manager-test.c41
-rw-r--r--src/tests/monitor-test-utils.c18
13 files changed, 215 insertions, 155 deletions
diff --git a/src/backends/meta-logical-monitor.c b/src/backends/meta-logical-monitor.c
index 77d0f15a8..52f4833fc 100644
--- a/src/backends/meta-logical-monitor.c
+++ b/src/backends/meta-logical-monitor.c
@@ -178,7 +178,8 @@ meta_logical_monitor_add_monitor (MetaLogicalMonitor *logical_monitor,
{
MetaOutput *output = l_output->data;
- is_presentation = is_presentation && output->is_presentation;
+ is_presentation = (is_presentation &&
+ meta_output_is_presentation (output));
}
}
diff --git a/src/backends/meta-monitor-manager-dummy.c b/src/backends/meta-monitor-manager-dummy.c
index ff96df749..8b803cecc 100644
--- a/src/backends/meta-monitor-manager-dummy.c
+++ b/src/backends/meta-monitor-manager-dummy.c
@@ -228,7 +228,6 @@ append_monitor (MetaMonitorManager *manager,
output->subpixel_order = COGL_SUBPIXEL_ORDER_UNKNOWN;
output->preferred_mode = g_list_last (*modes)->data;
output->n_possible_clones = 0;
- output->backlight = -1;
output->connector_type = META_CONNECTOR_TYPE_LVDS;
output->driver_private = output_dummy;
output->driver_notify =
@@ -336,7 +335,6 @@ append_tiled_monitor (MetaMonitorManager *manager,
output->subpixel_order = COGL_SUBPIXEL_ORDER_UNKNOWN;
output->preferred_mode = preferred_mode;
output->n_possible_clones = 0;
- output->backlight = -1;
output->connector_type = META_CONNECTOR_TYPE_LVDS;
output->tile_info = (MetaTileInfo) {
.group_id = tile_group_id,
@@ -508,7 +506,6 @@ apply_crtc_assignments (MetaMonitorManager *manager,
{
g_autoptr (GList) to_configure_outputs = NULL;
g_autoptr (GList) to_configure_crtcs = NULL;
- GList *l;
unsigned i;
to_configure_outputs = g_list_copy (meta_gpu_get_outputs (get_gpu (manager)));
@@ -527,7 +524,6 @@ apply_crtc_assignments (MetaMonitorManager *manager,
}
else
{
- MetaOutput *output;
unsigned int j;
meta_crtc_set_config (crtc,
@@ -537,40 +533,26 @@ apply_crtc_assignments (MetaMonitorManager *manager,
for (j = 0; j < crtc_info->outputs->len; j++)
{
+ MetaOutput *output;
+ MetaOutputInfo *output_info;
+
output = ((MetaOutput**)crtc_info->outputs->pdata)[j];
to_configure_outputs = g_list_remove (to_configure_outputs,
output);
- meta_output_assign_crtc (output, crtc);
+
+ output_info = meta_find_output_info (outputs, n_outputs, output);
+ meta_output_assign_crtc (output, crtc, output_info);
}
}
}
- for (i = 0; i < n_outputs; i++)
- {
- MetaOutputInfo *output_info = outputs[i];
- MetaOutput *output = output_info->output;
-
- output->is_primary = output_info->is_primary;
- output->is_presentation = output_info->is_presentation;
- }
-
- /* Disable CRTCs not mentioned in the list */
- for (l = to_configure_crtcs; l; l = l->next)
- {
- MetaCrtc *crtc = l->data;
-
- meta_crtc_unset_config (crtc);
- }
-
- /* Disable outputs not mentioned in the list */
- for (l = to_configure_outputs; l; l = l->next)
- {
- MetaOutput *output = l->data;
-
- meta_output_unassign_crtc (output);
- output->is_primary = FALSE;
- }
+ g_list_foreach (to_configure_crtcs,
+ (GFunc) meta_crtc_unset_config,
+ NULL);
+ g_list_foreach (to_configure_outputs,
+ (GFunc) meta_output_unassign_crtc,
+ NULL);
}
static void
diff --git a/src/backends/meta-monitor-manager-private.h b/src/backends/meta-monitor-manager-private.h
index a0a28b6c2..5dc752a34 100644
--- a/src/backends/meta-monitor-manager-private.h
+++ b/src/backends/meta-monitor-manager-private.h
@@ -387,4 +387,22 @@ gboolean meta_monitor_has_aspect_as_size (MetaMonitor *monitor);
char * meta_monitor_manager_get_vendor_name (MetaMonitorManager *manager,
const char *vendor);
+static inline MetaOutputInfo *
+meta_find_output_info (MetaOutputInfo **outputs,
+ unsigned int n_outputs,
+ MetaOutput *output)
+{
+ unsigned int i;
+
+ for (i = 0; i < n_outputs; i++)
+ {
+ MetaOutputInfo *output_info = outputs[i];
+
+ if (output == output_info->output)
+ return output_info;
+ }
+
+ return NULL;
+}
+
#endif /* META_MONITOR_MANAGER_PRIVATE_H */
diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
index 060e3ed68..224239040 100644
--- a/src/backends/meta-monitor-manager.c
+++ b/src/backends/meta-monitor-manager.c
@@ -1107,18 +1107,18 @@ meta_monitor_manager_handle_get_resources (MetaDBusDisplayConfig *skeleton,
g_variant_builder_add (&properties, "{sv}", "display-name",
g_variant_new_string (output->name));
g_variant_builder_add (&properties, "{sv}", "backlight",
- g_variant_new_int32 (output->backlight));
+ g_variant_new_int32 (meta_output_get_backlight (output)));
g_variant_builder_add (&properties, "{sv}", "min-backlight-step",
g_variant_new_int32 ((output->backlight_max - output->backlight_min) ?
100 / (output->backlight_max - output->backlight_min) : -1));
g_variant_builder_add (&properties, "{sv}", "primary",
- g_variant_new_boolean (output->is_primary));
+ g_variant_new_boolean (meta_output_is_primary (output)));
g_variant_builder_add (&properties, "{sv}", "presentation",
- g_variant_new_boolean (output->is_presentation));
+ g_variant_new_boolean (meta_output_is_presentation (output)));
g_variant_builder_add (&properties, "{sv}", "connector-type",
g_variant_new_string (get_connector_type_name (output->connector_type)));
g_variant_builder_add (&properties, "{sv}", "underscanning",
- g_variant_new_boolean (output->is_underscanning));
+ g_variant_new_boolean (meta_output_is_underscanning (output)));
g_variant_builder_add (&properties, "{sv}", "supports-underscanning",
g_variant_new_boolean (output->supports_underscanning));
@@ -2103,6 +2103,7 @@ meta_monitor_manager_handle_change_backlight (MetaDBusDisplayConfig *skeleton,
{
GList *combined_outputs;
MetaOutput *output;
+ int new_backlight;
if (serial != manager->serial)
{
@@ -2133,7 +2134,7 @@ meta_monitor_manager_handle_change_backlight (MetaDBusDisplayConfig *skeleton,
return TRUE;
}
- if (output->backlight == -1 ||
+ if (meta_output_get_backlight (output) == -1 ||
(output->backlight_min == 0 && output->backlight_max == 0))
{
g_dbus_method_invocation_return_error (invocation, G_DBUS_ERROR,
@@ -2144,7 +2145,10 @@ meta_monitor_manager_handle_change_backlight (MetaDBusDisplayConfig *skeleton,
META_MONITOR_MANAGER_GET_CLASS (manager)->change_backlight (manager, output, value);
- meta_dbus_display_config_complete_change_backlight (skeleton, invocation, output->backlight);
+ new_backlight = meta_output_get_backlight (output);
+ meta_dbus_display_config_complete_change_backlight (skeleton,
+ invocation,
+ new_backlight);
return TRUE;
}
diff --git a/src/backends/meta-monitor.c b/src/backends/meta-monitor.c
index 92184eea7..c6817d470 100644
--- a/src/backends/meta-monitor.c
+++ b/src/backends/meta-monitor.c
@@ -316,7 +316,7 @@ meta_monitor_is_primary (MetaMonitor *monitor)
output = meta_monitor_get_main_output (monitor);
- return output->is_primary;
+ return meta_output_is_primary (output);
}
gboolean
@@ -336,7 +336,7 @@ meta_monitor_is_underscanning (MetaMonitor *monitor)
output = meta_monitor_get_main_output (monitor);
- return output->is_underscanning;
+ return meta_output_is_underscanning (output);
}
gboolean
diff --git a/src/backends/meta-output.c b/src/backends/meta-output.c
index 6a2ceb71f..8bd396c43 100644
--- a/src/backends/meta-output.c
+++ b/src/backends/meta-output.c
@@ -41,6 +41,13 @@ typedef struct _MetaOutputPrivate
/* The CRTC driving this output, NULL if the output is not enabled */
MetaCrtc *crtc;
+
+ gboolean is_primary;
+ gboolean is_presentation;
+
+ gboolean is_underscanning;
+
+ int backlight;
} MetaOutputPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (MetaOutput, meta_output, G_TYPE_OBJECT)
@@ -67,15 +74,61 @@ meta_output_get_name (MetaOutput *output)
return output->name;
}
+gboolean
+meta_output_is_primary (MetaOutput *output)
+{
+ MetaOutputPrivate *priv = meta_output_get_instance_private (output);
+
+ return priv->is_primary;
+}
+
+gboolean
+meta_output_is_presentation (MetaOutput *output)
+{
+ MetaOutputPrivate *priv = meta_output_get_instance_private (output);
+
+ return priv->is_presentation;
+}
+
+gboolean
+meta_output_is_underscanning (MetaOutput *output)
+{
+ MetaOutputPrivate *priv = meta_output_get_instance_private (output);
+
+ return priv->is_underscanning;
+}
+
+void
+meta_output_set_backlight (MetaOutput *output,
+ int backlight)
+{
+ MetaOutputPrivate *priv = meta_output_get_instance_private (output);
+
+ priv->backlight = backlight;
+}
+
+int
+meta_output_get_backlight (MetaOutput *output)
+{
+ MetaOutputPrivate *priv = meta_output_get_instance_private (output);
+
+ return priv->backlight;
+}
+
void
-meta_output_assign_crtc (MetaOutput *output,
- MetaCrtc *crtc)
+meta_output_assign_crtc (MetaOutput *output,
+ MetaCrtc *crtc,
+ const MetaOutputInfo *output_info)
{
MetaOutputPrivate *priv = meta_output_get_instance_private (output);
g_assert (crtc);
g_set_object (&priv->crtc, crtc);
+
+ priv->is_primary = output_info->is_primary;
+ priv->is_presentation = output_info->is_presentation;
+ priv->is_underscanning = output_info->is_underscanning;
}
void
@@ -84,6 +137,9 @@ meta_output_unassign_crtc (MetaOutput *output)
MetaOutputPrivate *priv = meta_output_get_instance_private (output);
g_clear_object (&priv->crtc);
+
+ priv->is_primary = FALSE;
+ priv->is_presentation = FALSE;
}
MetaCrtc *
@@ -194,6 +250,9 @@ meta_output_finalize (GObject *object)
static void
meta_output_init (MetaOutput *output)
{
+ MetaOutputPrivate *priv = meta_output_get_instance_private (output);
+
+ priv->backlight = -1;
}
static void
diff --git a/src/backends/meta-output.h b/src/backends/meta-output.h
index 18850baf9..86d338c06 100644
--- a/src/backends/meta-output.h
+++ b/src/backends/meta-output.h
@@ -85,14 +85,9 @@ struct _MetaOutput
MetaOutput **possible_clones;
unsigned int n_possible_clones;
- int backlight;
int backlight_min;
int backlight_max;
- gboolean is_primary;
- gboolean is_presentation;
-
- gboolean is_underscanning;
gboolean supports_underscanning;
gpointer driver_private;
@@ -121,8 +116,23 @@ MetaGpu * meta_output_get_gpu (MetaOutput *output);
const char * meta_output_get_name (MetaOutput *output);
META_EXPORT_TEST
-void meta_output_assign_crtc (MetaOutput *output,
- MetaCrtc *crtc);
+gboolean meta_output_is_primary (MetaOutput *output);
+
+META_EXPORT_TEST
+gboolean meta_output_is_presentation (MetaOutput *output);
+
+META_EXPORT_TEST
+gboolean meta_output_is_underscanning (MetaOutput *output);
+
+void meta_output_set_backlight (MetaOutput *output,
+ int backlight);
+
+int meta_output_get_backlight (MetaOutput *output);
+
+META_EXPORT_TEST
+void meta_output_assign_crtc (MetaOutput *output,
+ MetaCrtc *crtc,
+ const MetaOutputInfo *output_info);
META_EXPORT_TEST
void meta_output_unassign_crtc (MetaOutput *output);
diff --git a/src/backends/native/meta-monitor-manager-kms.c b/src/backends/native/meta-monitor-manager-kms.c
index 4d1ca7e21..469c5b6e8 100644
--- a/src/backends/native/meta-monitor-manager-kms.c
+++ b/src/backends/native/meta-monitor-manager-kms.c
@@ -219,40 +219,23 @@ apply_crtc_assignments (MetaMonitorManager *manager,
for (j = 0; j < crtc_info->outputs->len; j++)
{
MetaOutput *output = g_ptr_array_index (crtc_info->outputs, j);
+ MetaOutputInfo *output_info;
to_configure_outputs = g_list_remove (to_configure_outputs,
output);
- meta_output_assign_crtc (output, crtc);
+
+ output_info = meta_find_output_info (outputs, n_outputs, output);
+ meta_output_assign_crtc (output, crtc, output_info);
}
}
}
- /* Disable CRTCs yet to be configured. */
- for (l = to_configure_crtcs; l; l = l->next)
- {
- MetaCrtc *crtc = l->data;
-
- meta_crtc_unset_config (crtc);
- }
-
- for (i = 0; i < n_outputs; i++)
- {
- MetaOutputInfo *output_info = outputs[i];
- MetaOutput *output = output_info->output;
-
- output->is_primary = output_info->is_primary;
- output->is_presentation = output_info->is_presentation;
- output->is_underscanning = output_info->is_underscanning;
- }
-
- /* Disable outputs yet to be configured. */
- for (l = to_configure_outputs; l; l = l->next)
- {
- MetaOutput *output = l->data;
-
- meta_output_unassign_crtc (output);
- output->is_primary = FALSE;
- }
+ g_list_foreach (to_configure_crtcs,
+ (GFunc) meta_crtc_unset_config,
+ NULL);
+ g_list_foreach (to_configure_outputs,
+ (GFunc) meta_output_unassign_crtc,
+ NULL);
}
static void
diff --git a/src/backends/native/meta-output-kms.c b/src/backends/native/meta-output-kms.c
index 3b690ec3e..170e63c79 100644
--- a/src/backends/native/meta-output-kms.c
+++ b/src/backends/native/meta-output-kms.c
@@ -61,7 +61,7 @@ meta_output_kms_set_underscan (MetaOutput *output,
if (!output->supports_underscanning)
return;
- if (output->is_underscanning)
+ if (meta_output_is_underscanning (output))
{
MetaCrtc *crtc;
MetaCrtcConfig *crtc_config;
@@ -363,7 +363,23 @@ meta_create_kms_output (MetaGpuKms *gpu_kms,
if (meta_crtc_get_id (crtc) == connector_state->current_crtc_id)
{
- meta_output_assign_crtc (output, crtc);
+ MetaOutputInfo output_info;
+
+ if (old_output)
+ {
+ output_info = (MetaOutputInfo) {
+ .is_primary = meta_output_is_primary (old_output),
+ .is_presentation = meta_output_is_presentation (old_output),
+ };
+ }
+ else
+ {
+ output_info = (MetaOutputInfo) {
+ .is_primary = FALSE,
+ .is_presentation = FALSE,
+ };
+ }
+ meta_output_assign_crtc (output, crtc, &output_info);
break;
}
}
@@ -373,17 +389,6 @@ meta_create_kms_output (MetaGpuKms *gpu_kms,
meta_output_unassign_crtc (output);
}
- if (old_output)
- {
- output->is_primary = old_output->is_primary;
- output->is_presentation = old_output->is_presentation;
- }
- else
- {
- output->is_primary = FALSE;
- output->is_presentation = FALSE;
- }
-
output->suggested_x = connector_state->suggested_x;
output->suggested_y = connector_state->suggested_y;
output->hotplug_mode_update = connector_state->hotplug_mode_update;
@@ -407,7 +412,6 @@ meta_create_kms_output (MetaGpuKms *gpu_kms,
*/
output->backlight_min = 0;
output->backlight_max = 0;
- output->backlight = -1;
return output;
}
diff --git a/src/backends/x11/meta-monitor-manager-xrandr.c b/src/backends/x11/meta-monitor-manager-xrandr.c
index d06f7daff..eab5f55ec 100644
--- a/src/backends/x11/meta-monitor-manager-xrandr.c
+++ b/src/backends/x11/meta-monitor-manager-xrandr.c
@@ -278,13 +278,15 @@ is_output_assignment_changed (MetaOutput *output,
if (output_info->output != output)
continue;
- if (output->is_primary != output_info->is_primary)
+ if (meta_output_is_primary (output) != output_info->is_primary)
return TRUE;
- if (output->is_presentation != output_info->is_presentation)
+ if (meta_output_is_presentation (output) !=
+ output_info->is_presentation)
return TRUE;
- if (output->is_underscanning != output_info->is_underscanning)
+ if (meta_output_is_underscanning (output) !=
+ output_info->is_underscanning)
return TRUE;
output_is_found = TRUE;
@@ -484,12 +486,15 @@ apply_crtc_assignments (MetaMonitorManager *manager,
for (j = 0; j < n_output_ids; j++)
{
MetaOutput *output;
+ MetaOutputInfo *output_info;
output = ((MetaOutput**)crtc_info->outputs->pdata)[j];
to_configure_outputs = g_list_remove (to_configure_outputs,
output);
- meta_output_assign_crtc (output, crtc);
+
+ output_info = meta_find_output_info (outputs, n_outputs, output);
+ meta_output_assign_crtc (output, crtc, output_info);
output_ids[j] = meta_output_get_id (output);
}
@@ -528,21 +533,12 @@ apply_crtc_assignments (MetaMonitorManager *manager,
MetaOutputInfo *output_info = outputs[i];
MetaOutput *output = output_info->output;
- output->is_primary = output_info->is_primary;
- output->is_presentation = output_info->is_presentation;
- output->is_underscanning = output_info->is_underscanning;
-
meta_output_xrandr_apply_mode (output);
}
- /* Disable outputs not mentioned in the list */
- for (l = to_configure_outputs; l; l = l->next)
- {
- MetaOutput *output = l->data;
-
- meta_output_unassign_crtc (output);
- output->is_primary = FALSE;
- }
+ g_list_foreach (to_configure_outputs,
+ (GFunc) meta_output_unassign_crtc,
+ NULL);
XUngrabServer (manager_xrandr->xdisplay);
XFlush (manager_xrandr->xdisplay);
diff --git a/src/backends/x11/meta-output-xrandr.c b/src/backends/x11/meta-output-xrandr.c
index 264b3affd..e134a8ab7 100644
--- a/src/backends/x11/meta-output-xrandr.c
+++ b/src/backends/x11/meta-output-xrandr.c
@@ -132,16 +132,19 @@ meta_output_xrandr_apply_mode (MetaOutput *output)
{
Display *xdisplay = xdisplay_from_output (output);
- if (output->is_primary)
+ if (meta_output_is_primary (output))
{
XRRSetOutputPrimary (xdisplay, DefaultRootWindow (xdisplay),
(XID) meta_output_get_id (output));
}
- output_set_presentation_xrandr (output, output->is_presentation);
+ output_set_presentation_xrandr (output, meta_output_is_presentation (output));
if (output->supports_underscanning)
- output_set_underscanning_xrandr (output, output->is_underscanning);
+ {
+ output_set_underscanning_xrandr (output,
+ meta_output_is_underscanning (output));
+ }
}
static int
@@ -172,7 +175,7 @@ meta_output_xrandr_change_backlight (MetaOutput *output,
1, &hw_value);
/* We're not selecting for property notifies, so update the value immediately */
- output->backlight = normalize_backlight (output, hw_value);
+ meta_output_set_backlight (output, normalize_backlight (output, hw_value));
}
static gboolean
@@ -730,8 +733,9 @@ output_get_modes (MetaOutput *output,
}
static void
-output_get_crtcs (MetaOutput *output,
- XRROutputInfo *xrandr_output)
+output_get_crtcs (MetaOutput *output,
+ XRROutputInfo *xrandr_output,
+ MetaCrtc **assigned_crtc)
{
MetaGpu *gpu = meta_output_get_gpu (output);
unsigned int i;
@@ -764,10 +768,12 @@ output_get_crtcs (MetaOutput *output,
if ((XID) meta_crtc_get_id (crtc) == xrandr_output->crtc)
{
- meta_output_assign_crtc (output, crtc);
- break;
+ *assigned_crtc = crtc;
+ return;
}
}
+
+ *assigned_crtc = NULL;
}
MetaOutput *
@@ -778,6 +784,7 @@ meta_create_xrandr_output (MetaGpuXrandr *gpu_xrandr,
{
MetaOutput *output;
GBytes *edid;
+ MetaCrtc *assigned_crtc;
unsigned int i;
output = g_object_new (META_TYPE_OUTPUT,
@@ -812,7 +819,19 @@ meta_create_xrandr_output (MetaGpuXrandr *gpu_xrandr,
output_get_tile_info (output);
output_get_modes (output, xrandr_output);
- output_get_crtcs (output, xrandr_output);
+ output_get_crtcs (output, xrandr_output, &assigned_crtc);
+
+ if (assigned_crtc)
+ {
+ MetaOutputInfo output_info;
+
+ output_info = (MetaOutputInfo) {
+ .is_primary = (XID) meta_output_get_id (output) == primary_output,
+ .is_presentation = output_get_presentation_xrandr (output),
+ .is_underscanning = output_get_underscanning_xrandr (output),
+ };
+ meta_output_assign_crtc (output, assigned_crtc, &output_info);
+ }
output->n_possible_clones = xrandr_output->nclone;
output->possible_clones = g_new0 (MetaOutput *,
@@ -827,17 +846,12 @@ meta_create_xrandr_output (MetaGpuXrandr *gpu_xrandr,
output->possible_clones[i] = GINT_TO_POINTER (xrandr_output->clones[i]);
}
- output->is_primary = (XID) meta_output_get_id (output) == primary_output;
- output->is_presentation = output_get_presentation_xrandr (output);
- output->is_underscanning = output_get_underscanning_xrandr (output);
output->supports_underscanning =
output_get_supports_underscanning_xrandr (output);
output_get_backlight_limits_xrandr (output);
if (!(output->backlight_min == 0 && output->backlight_max == 0))
- output->backlight = output_get_backlight_xrandr (output);
- else
- output->backlight = -1;
+ meta_output_set_backlight (output, output_get_backlight_xrandr (output));
if (output->n_modes == 0 || output->n_possible_crtcs == 0)
{
diff --git a/src/tests/meta-monitor-manager-test.c b/src/tests/meta-monitor-manager-test.c
index d76ada57a..b4eada676 100644
--- a/src/tests/meta-monitor-manager-test.c
+++ b/src/tests/meta-monitor-manager-test.c
@@ -125,7 +125,6 @@ apply_crtc_assignments (MetaMonitorManager *manager,
MetaGpu *gpu = meta_backend_test_get_gpu (backend_test);
g_autoptr (GList) to_configure_outputs = NULL;
g_autoptr (GList) to_configure_crtcs = NULL;
- GList *l;
unsigned int i;
to_configure_outputs = g_list_copy (meta_gpu_get_outputs (gpu));
@@ -144,7 +143,6 @@ apply_crtc_assignments (MetaMonitorManager *manager,
}
else
{
- MetaOutput *output;
unsigned int j;
meta_crtc_set_config (crtc,
@@ -154,41 +152,26 @@ apply_crtc_assignments (MetaMonitorManager *manager,
for (j = 0; j < crtc_info->outputs->len; j++)
{
+ MetaOutput *output;
+ MetaOutputInfo *output_info;
+
output = ((MetaOutput**)crtc_info->outputs->pdata)[j];
to_configure_outputs = g_list_remove (to_configure_outputs,
output);
- meta_output_assign_crtc (output, crtc);
+
+ output_info = meta_find_output_info (outputs, n_outputs, output);
+ meta_output_assign_crtc (output, crtc, output_info);
}
}
}
- for (i = 0; i < n_outputs; i++)
- {
- MetaOutputInfo *output_info = outputs[i];
- MetaOutput *output = output_info->output;
-
- output->is_primary = output_info->is_primary;
- output->is_presentation = output_info->is_presentation;
- output->is_underscanning = output_info->is_underscanning;
- }
-
- /* Disable CRTCs not mentioned in the list */
- for (l = to_configure_crtcs; l; l = l->next)
- {
- MetaCrtc *crtc = l->data;
-
- meta_crtc_unset_config (crtc);
- }
-
- /* Disable outputs not mentioned in the list */
- for (l = to_configure_outputs; l; l = l->next)
- {
- MetaOutput *output = l->data;
-
- meta_output_unassign_crtc (output);
- output->is_primary = FALSE;
- }
+ g_list_foreach (to_configure_crtcs,
+ (GFunc) meta_crtc_unset_config,
+ NULL);
+ g_list_foreach (to_configure_outputs,
+ (GFunc) meta_output_unassign_crtc,
+ NULL);
}
static void
diff --git a/src/tests/monitor-test-utils.c b/src/tests/monitor-test-utils.c
index 725c33623..921b8a2ef 100644
--- a/src/tests/monitor-test-utils.c
+++ b/src/tests/monitor-test-utils.c
@@ -285,7 +285,7 @@ check_logical_monitor (MetaMonitorManager *monitor_manager,
MetaOutput *output = l_output->data;
MetaCrtc *crtc;
- if (output->is_primary)
+ if (meta_output_is_primary (output))
{
g_assert_null (primary_output);
primary_output = output;
@@ -296,7 +296,7 @@ check_logical_monitor (MetaMonitorManager *monitor_manager,
meta_monitor_get_logical_monitor (monitor) == logical_monitor);
g_assert_cmpint (logical_monitor->is_presentation,
==,
- output->is_presentation);
+ meta_output_is_presentation (output));
}
}
@@ -370,7 +370,7 @@ check_monitor_configuration (MonitorTestCaseExpect *expect)
g_assert (output == output_from_winsys_id (backend, winsys_id));
g_assert_cmpint (expect->monitors[i].is_underscanning,
==,
- output->is_underscanning);
+ meta_output_is_underscanning (output));
}
meta_monitor_get_physical_dimensions (monitor, &width_mm, &height_mm);
@@ -655,7 +655,15 @@ create_monitor_test_setup (MonitorTestCaseSetup *setup,
NULL);
if (crtc)
- meta_output_assign_crtc (output, crtc);
+ {
+ MetaOutputInfo output_info;
+
+ output_info = (MetaOutputInfo) {
+ .is_underscanning = setup->outputs[i].is_underscanning,
+ };
+ meta_output_assign_crtc (output, crtc, &output_info);
+ }
+
output->name = (is_laptop_panel ? g_strdup_printf ("eDP-%d",
++n_laptop_panels)
: g_strdup_printf ("DP-%d",
@@ -676,11 +684,9 @@ create_monitor_test_setup (MonitorTestCaseSetup *setup,
output->possible_crtcs = possible_crtcs;
output->n_possible_clones = 0;
output->possible_clones = NULL;
- output->backlight = -1;
output->connector_type = (is_laptop_panel ? META_CONNECTOR_TYPE_eDP
: META_CONNECTOR_TYPE_DisplayPort);
output->tile_info = setup->outputs[i].tile_info;
- output->is_underscanning = setup->outputs[i].is_underscanning;
output->panel_orientation_transform =
setup->outputs[i].panel_orientation_transform;
output->driver_private = output_test;