[mutter] monitor: Allow monitor mode foreach crtc iterator failable
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] monitor: Allow monitor mode foreach crtc iterator failable
- Date: Wed, 25 Jan 2017 08:36:20 +0000 (UTC)
commit be13d0f8ee1f162c5333152bab089d1cb8a41013
Author: Jonas Ådahl <jadahl gmail com>
Date: Tue Dec 20 23:23:27 2016 +0800
monitor: Allow monitor mode foreach crtc iterator failable
Allow the function used to iterate over the CRTC modes of a monitor
mode to fail, causing the iteration to fail as well.
https://bugzilla.gnome.org/show_bug.cgi?id=777732
src/backends/meta-monitor.c | 10 +++++++---
src/backends/meta-monitor.h | 18 ++++++++++--------
src/tests/monitor-unit-tests.c | 10 +++++++---
3 files changed, 24 insertions(+), 14 deletions(-)
---
diff --git a/src/backends/meta-monitor.c b/src/backends/meta-monitor.c
index 33dc655..11c0faf 100644
--- a/src/backends/meta-monitor.c
+++ b/src/backends/meta-monitor.c
@@ -576,11 +576,12 @@ meta_monitor_mode_get_refresh_rate (MetaMonitorMode *monitor_mode)
return monitor_mode->spec.refresh_rate;
}
-void
+gboolean
meta_monitor_mode_foreach_crtc (MetaMonitor *monitor,
MetaMonitorMode *mode,
MetaMonitorModeFunc func,
- gpointer user_data)
+ gpointer user_data,
+ GError **error)
{
MetaMonitorPrivate *monitor_priv =
meta_monitor_get_instance_private (monitor);
@@ -591,6 +592,9 @@ meta_monitor_mode_foreach_crtc (MetaMonitor *monitor,
{
MetaMonitorCrtcMode *monitor_crtc_mode = &mode->crtc_modes[i];
- func (monitor, mode, monitor_crtc_mode, user_data);
+ if (!func (monitor, mode, monitor_crtc_mode, user_data, error))
+ return FALSE;
}
+
+ return TRUE;
}
diff --git a/src/backends/meta-monitor.h b/src/backends/meta-monitor.h
index bb48589..f39b3f4 100644
--- a/src/backends/meta-monitor.h
+++ b/src/backends/meta-monitor.h
@@ -51,10 +51,11 @@ typedef struct _MetaMonitorCrtcMode
MetaCrtcMode *crtc_mode;
} MetaMonitorCrtcMode;
-typedef void (* MetaMonitorModeFunc) (MetaMonitor *monitor,
- MetaMonitorMode *mode,
- MetaMonitorCrtcMode *monitor_crtc_mode,
- gpointer user_data);
+typedef gboolean (* MetaMonitorModeFunc) (MetaMonitor *monitor,
+ MetaMonitorMode *mode,
+ MetaMonitorCrtcMode *monitor_crtc_mode,
+ gpointer user_data,
+ GError **error);
#define META_TYPE_MONITOR (meta_monitor_get_type ())
G_DECLARE_DERIVABLE_TYPE (MetaMonitor, meta_monitor, META, MONITOR, GObject)
@@ -120,10 +121,11 @@ void meta_monitor_mode_get_resolution (MetaMonitorMode *monitor_mode,
float meta_monitor_mode_get_refresh_rate (MetaMonitorMode *monitor_mode);
-void meta_monitor_mode_foreach_crtc (MetaMonitor *monitor,
- MetaMonitorMode *mode,
- MetaMonitorModeFunc func,
- gpointer user_data);
+gboolean meta_monitor_mode_foreach_crtc (MetaMonitor *monitor,
+ MetaMonitorMode *mode,
+ MetaMonitorModeFunc func,
+ gpointer user_data,
+ GError **error);
MetaMonitorSpec * meta_monitor_spec_clone (MetaMonitorSpec *monitor_id);
diff --git a/src/tests/monitor-unit-tests.c b/src/tests/monitor-unit-tests.c
index 6b74295..1ce2094 100644
--- a/src/tests/monitor-unit-tests.c
+++ b/src/tests/monitor-unit-tests.c
@@ -288,11 +288,12 @@ typedef struct _CheckMonitorModeData
MetaTestCaseMonitorCrtcMode *expect_crtc_mode_iter;
} CheckMonitorModeData;
-static void
+static gboolean
check_monitor_mode (MetaMonitor *monitor,
MetaMonitorMode *mode,
MetaMonitorCrtcMode *monitor_crtc_mode,
- gpointer user_data)
+ gpointer user_data,
+ GError **error)
{
CheckMonitorModeData *data = user_data;
MetaMonitorManager *monitor_manager = data->monitor_manager;
@@ -307,6 +308,8 @@ check_monitor_mode (MetaMonitor *monitor,
g_assert (monitor_crtc_mode->crtc_mode == crtc_mode);
data->expect_crtc_mode_iter++;
+
+ return TRUE;
}
static void
@@ -383,7 +386,8 @@ check_monitor_configuration (MonitorTestCase *test_case)
};
meta_monitor_mode_foreach_crtc (monitor, mode,
check_monitor_mode,
- &data);
+ &data,
+ NULL);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]