[mutter] monitor-manager: Add per backend capabilities
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] monitor-manager: Add per backend capabilities
- Date: Fri, 7 Apr 2017 14:33:29 +0000 (UTC)
commit d050fdb17fc385a001c40fbe91c7aad766dd6318
Author: Jonas Ådahl <jadahl gmail com>
Date: Tue Feb 7 16:01:40 2017 +0800
monitor-manager: Add per backend capabilities
Add a private API for querying backend capabilities. For now, only
mirroring capability is reported.
https://bugzilla.gnome.org/show_bug.cgi?id=777732
src/backends/meta-monitor-manager-dummy.c | 7 +++++++
src/backends/meta-monitor-manager-private.h | 8 ++++++++
src/backends/native/meta-monitor-manager-kms.c | 24 ++++++++++++++++++++++++
src/backends/x11/meta-monitor-manager-xrandr.c | 7 +++++++
src/tests/meta-monitor-manager-test.c | 7 +++++++
5 files changed, 53 insertions(+), 0 deletions(-)
---
diff --git a/src/backends/meta-monitor-manager-dummy.c b/src/backends/meta-monitor-manager-dummy.c
index 5f1ec1d..b0fbddc 100644
--- a/src/backends/meta-monitor-manager-dummy.c
+++ b/src/backends/meta-monitor-manager-dummy.c
@@ -599,6 +599,12 @@ meta_monitor_manager_dummy_get_supported_scales (MetaMonitorManager *manager,
*n_scales = G_N_ELEMENTS (supported_scales_dummy);
}
+static MetaMonitorManagerCapability
+meta_monitor_manager_dummy_get_capabilities (MetaMonitorManager *manager)
+{
+ return META_MONITOR_MANAGER_CAPABILITY_MIRRORING;
+}
+
static void
meta_monitor_manager_dummy_class_init (MetaMonitorManagerDummyClass *klass)
{
@@ -611,6 +617,7 @@ meta_monitor_manager_dummy_class_init (MetaMonitorManagerDummyClass *klass)
manager_class->is_transform_handled = meta_monitor_manager_dummy_is_transform_handled;
manager_class->calculate_monitor_mode_scale = meta_monitor_manager_dummy_calculate_monitor_mode_scale;
manager_class->get_supported_scales = meta_monitor_manager_dummy_get_supported_scales;
+ manager_class->get_capabilities = meta_monitor_manager_dummy_get_capabilities;
}
static void
diff --git a/src/backends/meta-monitor-manager-private.h b/src/backends/meta-monitor-manager-private.h
index 5548cda..d5a98c2 100644
--- a/src/backends/meta-monitor-manager-private.h
+++ b/src/backends/meta-monitor-manager-private.h
@@ -68,6 +68,12 @@ typedef struct _MetaCrtcInfo MetaCrtcInfo;
typedef struct _MetaOutputInfo MetaOutputInfo;
typedef struct _MetaTileInfo MetaTileInfo;
+typedef enum _MetaMonitorManagerCapability
+{
+ META_MONITOR_MANAGER_CAPABILITY_NONE = 0,
+ META_MONITOR_MANAGER_CAPABILITY_MIRRORING = (1 << 0)
+} MetaMonitorManagerCapability;
+
typedef enum
{
META_MONITOR_TRANSFORM_NORMAL,
@@ -357,6 +363,8 @@ struct _MetaMonitorManagerClass
void (*get_supported_scales) (MetaMonitorManager *,
float **,
int *);
+
+ MetaMonitorManagerCapability (*get_capabilities) (MetaMonitorManager *);
};
void meta_monitor_manager_rebuild (MetaMonitorManager *manager,
diff --git a/src/backends/native/meta-monitor-manager-kms.c b/src/backends/native/meta-monitor-manager-kms.c
index 12fa394..1866c38 100644
--- a/src/backends/native/meta-monitor-manager-kms.c
+++ b/src/backends/native/meta-monitor-manager-kms.c
@@ -1918,6 +1918,29 @@ meta_monitor_manager_kms_get_supported_scales (MetaMonitorManager *manager,
*n_scales = G_N_ELEMENTS (supported_scales_kms);
}
+static MetaMonitorManagerCapability
+meta_monitor_manager_kms_get_capabilities (MetaMonitorManager *manager)
+{
+ MetaBackend *backend = meta_get_backend ();
+ MetaRenderer *renderer = meta_backend_get_renderer (backend);
+ MetaRendererNative *renderer_native = META_RENDERER_NATIVE (renderer);
+ MetaMonitorManagerCapability capabilities =
+ META_MONITOR_MANAGER_CAPABILITY_NONE;
+
+ switch (meta_renderer_native_get_mode (renderer_native))
+ {
+ case META_RENDERER_NATIVE_MODE_GBM:
+ capabilities |= META_MONITOR_MANAGER_CAPABILITY_MIRRORING;
+ break;
+#ifdef HAVE_EGL_DEVICE
+ case META_RENDERER_NATIVE_MODE_EGL_DEVICE:
+ break;
+#endif
+ }
+
+ return capabilities;
+}
+
static void
meta_monitor_manager_kms_dispose (GObject *object)
{
@@ -1960,4 +1983,5 @@ meta_monitor_manager_kms_class_init (MetaMonitorManagerKmsClass *klass)
manager_class->is_transform_handled = meta_monitor_manager_kms_is_transform_handled;
manager_class->calculate_monitor_mode_scale = meta_monitor_manager_kms_calculate_monitor_mode_scale;
manager_class->get_supported_scales = meta_monitor_manager_kms_get_supported_scales;
+ manager_class->get_capabilities = meta_monitor_manager_kms_get_capabilities;
}
diff --git a/src/backends/x11/meta-monitor-manager-xrandr.c b/src/backends/x11/meta-monitor-manager-xrandr.c
index 8507143..06d38cf 100644
--- a/src/backends/x11/meta-monitor-manager-xrandr.c
+++ b/src/backends/x11/meta-monitor-manager-xrandr.c
@@ -1596,6 +1596,12 @@ meta_monitor_manager_xrandr_get_supported_scales (MetaMonitorManager *manager,
*n_scales = G_N_ELEMENTS (supported_scales_xrandr);
}
+static MetaMonitorManagerCapability
+meta_monitor_manager_xrandr_get_capabilities (MetaMonitorManager *manager)
+{
+ return META_MONITOR_MANAGER_CAPABILITY_MIRRORING;
+}
+
static void
meta_monitor_manager_xrandr_init (MetaMonitorManagerXrandr *manager_xrandr)
{
@@ -1674,6 +1680,7 @@ meta_monitor_manager_xrandr_class_init (MetaMonitorManagerXrandrClass *klass)
manager_class->is_transform_handled = meta_monitor_manager_xrandr_is_transform_handled;
manager_class->calculate_monitor_mode_scale = meta_monitor_manager_xrandr_calculate_monitor_mode_scale;
manager_class->get_supported_scales = meta_monitor_manager_xrandr_get_supported_scales;
+ manager_class->get_capabilities = meta_monitor_manager_xrandr_get_capabilities;
quark_meta_monitor_xrandr_data =
g_quark_from_static_string ("-meta-monitor-xrandr-data");
diff --git a/src/tests/meta-monitor-manager-test.c b/src/tests/meta-monitor-manager-test.c
index 0d4033d..14afcd9 100644
--- a/src/tests/meta-monitor-manager-test.c
+++ b/src/tests/meta-monitor-manager-test.c
@@ -374,6 +374,12 @@ meta_monitor_manager_test_get_supported_scales (MetaMonitorManager *manager,
*n_scales = G_N_ELEMENTS (supported_scales_test);
}
+static MetaMonitorManagerCapability
+meta_monitor_manager_test_get_capabilities (MetaMonitorManager *manager)
+{
+ return META_MONITOR_MANAGER_CAPABILITY_MIRRORING;
+}
+
static void
meta_monitor_manager_test_dispose (GObject *object)
{
@@ -408,4 +414,5 @@ meta_monitor_manager_test_class_init (MetaMonitorManagerTestClass *klass)
manager_class->is_transform_handled = meta_monitor_manager_test_is_transform_handled;
manager_class->calculate_monitor_mode_scale = meta_monitor_manager_test_calculate_monitor_mode_scale;
manager_class->get_supported_scales = meta_monitor_manager_test_get_supported_scales;
+ manager_class->get_capabilities = meta_monitor_manager_test_get_capabilities;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]