[mutter] monitor: Add foreach output helper and fix foreach crtc helper
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] monitor: Add foreach output helper and fix foreach crtc helper
- Date: Wed, 30 Aug 2017 05:55:36 +0000 (UTC)
commit 522eec00cdb22acd81edac039cbe95ea2d55bf0a
Author: Jonas Ådahl <jadahl gmail com>
Date: Fri Aug 18 14:04:02 2017 +0800
monitor: Add foreach output helper and fix foreach crtc helper
The foreach CRTC monitor mode helper incorrectly iterated over outputs
without CRTC when non-tiled modes were set on tiled monitors. This was
not expected by callers, so fix the helper to only iterate over active
outputs (that has or should have a CRTC).
The test cases uses the incorrect behaviour of the foreach CRTC helper
to check that the disabled outputs mode are set to NULL, so add a
foreach output helper and change the tests to use that instead.
https://bugzilla.gnome.org/show_bug.cgi?id=730551
src/backends/meta-monitor.c | 26 ++++++++++++++++++++++++++
src/backends/meta-monitor.h | 6 ++++++
src/tests/monitor-unit-tests.c | 16 ++++++++--------
3 files changed, 40 insertions(+), 8 deletions(-)
---
diff --git a/src/backends/meta-monitor.c b/src/backends/meta-monitor.c
index 9a15c31..e3595fc 100644
--- a/src/backends/meta-monitor.c
+++ b/src/backends/meta-monitor.c
@@ -1598,6 +1598,32 @@ meta_monitor_mode_foreach_crtc (MetaMonitor *monitor,
{
MetaMonitorCrtcMode *monitor_crtc_mode = &mode->crtc_modes[i];
+ if (!monitor_crtc_mode->crtc_mode)
+ continue;
+
+ if (!func (monitor, mode, monitor_crtc_mode, user_data, error))
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean
+meta_monitor_mode_foreach_output (MetaMonitor *monitor,
+ MetaMonitorMode *mode,
+ MetaMonitorModeFunc func,
+ gpointer user_data,
+ GError **error)
+{
+ MetaMonitorPrivate *monitor_priv =
+ meta_monitor_get_instance_private (monitor);
+ GList *l;
+ int i;
+
+ for (l = monitor_priv->outputs, i = 0; l; l = l->next, i++)
+ {
+ MetaMonitorCrtcMode *monitor_crtc_mode = &mode->crtc_modes[i];
+
if (!func (monitor, mode, monitor_crtc_mode, user_data, error))
return FALSE;
}
diff --git a/src/backends/meta-monitor.h b/src/backends/meta-monitor.h
index 6ca93cd..f4260d6 100644
--- a/src/backends/meta-monitor.h
+++ b/src/backends/meta-monitor.h
@@ -197,6 +197,12 @@ gboolean meta_monitor_mode_foreach_crtc (MetaMonitor *monitor,
gpointer user_data,
GError **error);
+gboolean meta_monitor_mode_foreach_output (MetaMonitor *monitor,
+ MetaMonitorMode *mode,
+ MetaMonitorModeFunc func,
+ gpointer user_data,
+ GError **error);
+
MetaMonitorSpec * meta_monitor_spec_clone (MetaMonitorSpec *monitor_id);
gboolean meta_monitor_spec_equals (MetaMonitorSpec *monitor_id,
diff --git a/src/tests/monitor-unit-tests.c b/src/tests/monitor-unit-tests.c
index e2dcdc5..ddf017c 100644
--- a/src/tests/monitor-unit-tests.c
+++ b/src/tests/monitor-unit-tests.c
@@ -659,10 +659,10 @@ check_monitor_configuration (MonitorTestCase *test_case)
.expect_crtc_mode_iter =
test_case->expect.monitors[i].modes[j].crtc_modes
};
- meta_monitor_mode_foreach_crtc (monitor, mode,
- check_monitor_mode,
- &data,
- NULL);
+ meta_monitor_mode_foreach_output (monitor, mode,
+ check_monitor_mode,
+ &data,
+ NULL);
}
current_mode = meta_monitor_get_current_mode (monitor);
@@ -688,10 +688,10 @@ check_monitor_configuration (MonitorTestCase *test_case)
.expect_crtc_mode_iter =
test_case->expect.monitors[i].modes[expected_current_mode_index].crtc_modes
};
- meta_monitor_mode_foreach_crtc (monitor, expected_current_mode,
- check_current_monitor_mode,
- &data,
- NULL);
+ meta_monitor_mode_foreach_output (monitor, expected_current_mode,
+ check_current_monitor_mode,
+ &data,
+ NULL);
}
meta_monitor_derive_current_mode (monitor);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]