[gnome-flashback] logical-monitor: add helper for iterating over active CRTCs
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-flashback] logical-monitor: add helper for iterating over active CRTCs
- Date: Wed, 24 Jan 2018 16:19:27 +0000 (UTC)
commit d5f13b5eda70340a3501c913913d6d1b69658837
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Wed Jan 24 17:01:19 2018 +0200
logical-monitor: add helper for iterating over active CRTCs
Based on mutter commit:
https://gitlab.gnome.org/GNOME/mutter/commit/903537a2a0cb
backends/gf-logical-monitor-private.h | 10 +++++++
backends/gf-logical-monitor.c | 47 +++++++++++++++++++++++++++++++++
2 files changed, 57 insertions(+), 0 deletions(-)
---
diff --git a/backends/gf-logical-monitor-private.h b/backends/gf-logical-monitor-private.h
index e812247..02098a3 100644
--- a/backends/gf-logical-monitor-private.h
+++ b/backends/gf-logical-monitor-private.h
@@ -59,6 +59,11 @@ struct _GfLogicalMonitor
GList *monitors;
};
+typedef void (* GfLogicalMonitorCrtcFunc) (GfLogicalMonitor *logical_monitor,
+ GfCrtc *crtc,
+ gpointer user_data);
+
+
GfLogicalMonitor *gf_logical_monitor_new (GfMonitorManager *monitor_manager,
GfLogicalMonitorConfig *logical_monitor_config,
gint monitor_number);
@@ -88,6 +93,11 @@ gboolean gf_logical_monitor_has_neighbor (GfLogicalMonitor *mo
GfLogicalMonitor *neighbor,
GfDirection direction);
+void gf_logical_monitor_foreach_crtc (GfLogicalMonitor *logical_monitor,
+ GfLogicalMonitorCrtcFunc func,
+ gpointer user_data);
+
+
G_END_DECLS
#endif
diff --git a/backends/gf-logical-monitor.c b/backends/gf-logical-monitor.c
index b89dde0..c34d6d4 100644
--- a/backends/gf-logical-monitor.c
+++ b/backends/gf-logical-monitor.c
@@ -32,8 +32,31 @@ typedef struct
GfLogicalMonitor *logical_monitor;
} AddMonitorFromConfigData;
+typedef struct
+{
+ GfLogicalMonitor *logical_monitor;
+ GfLogicalMonitorCrtcFunc func;
+ gpointer user_data;
+} ForeachCrtcData;
+
G_DEFINE_TYPE (GfLogicalMonitor, gf_logical_monitor, G_TYPE_OBJECT)
+static gboolean
+foreach_crtc (GfMonitor *monitor,
+ GfMonitorMode *mode,
+ GfMonitorCrtcMode *monitor_crtc_mode,
+ gpointer user_data,
+ GError **error)
+{
+ ForeachCrtcData *data = user_data;
+
+ data->func (data->logical_monitor,
+ monitor_crtc_mode->output->crtc,
+ data->user_data);
+
+ return TRUE;
+}
+
static void
add_monitor_from_config (GfMonitorConfig *monitor_config,
AddMonitorFromConfigData *data)
@@ -268,3 +291,27 @@ gf_logical_monitor_has_neighbor (GfLogicalMonitor *monitor,
return FALSE;
}
+
+void
+gf_logical_monitor_foreach_crtc (GfLogicalMonitor *logical_monitor,
+ GfLogicalMonitorCrtcFunc func,
+ gpointer user_data)
+{
+ GList *l;
+
+ for (l = logical_monitor->monitors; l; l = l->next)
+ {
+ GfMonitor *monitor;
+ GfMonitorMode *mode;
+ ForeachCrtcData data;
+
+ monitor = l->data;
+ mode = gf_monitor_get_current_mode (monitor);
+
+ data.logical_monitor = logical_monitor;
+ data.func = func;
+ data.user_data = user_data;
+
+ gf_monitor_mode_foreach_crtc (monitor, mode, foreach_crtc, &data, NULL);
+ }
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]