[gnome-flashback] backends: add GfMonitorManager vfuncs
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-flashback] backends: add GfMonitorManager vfuncs
- Date: Mon, 11 Sep 2017 17:06:47 +0000 (UTC)
commit 74591feec8e0f104d3bc966fc3c73846023da124
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Mon Sep 11 18:54:29 2017 +0300
backends: add GfMonitorManager vfuncs
backends/gf-monitor-manager-dummy.c | 81 ++++++++++++++++
backends/gf-monitor-manager-enums-private.h | 23 +++++
backends/gf-monitor-manager-kms.c | 117 ++++++++++++++++++++++
backends/gf-monitor-manager-private.h | 75 ++++++++++++++-
backends/gf-monitor-manager-types-private.h | 2 +
backends/gf-monitor-manager-xrandr.c | 139 +++++++++++++++++++++++++++
6 files changed, 433 insertions(+), 4 deletions(-)
---
diff --git a/backends/gf-monitor-manager-dummy.c b/backends/gf-monitor-manager-dummy.c
index df20252..8908d44 100644
--- a/backends/gf-monitor-manager-dummy.c
+++ b/backends/gf-monitor-manager-dummy.c
@@ -36,8 +36,89 @@ struct _GfMonitorManagerDummy
G_DEFINE_TYPE (GfMonitorManagerDummy, gf_monitor_manager_dummy, GF_TYPE_MONITOR_MANAGER)
static void
+gf_monitor_manager_dummy_read_current (GfMonitorManager *manager)
+{
+}
+
+static void
+gf_monitor_manager_dummy_ensure_initial_config (GfMonitorManager *manager)
+{
+}
+
+static gboolean
+gf_monitor_manager_dummy_apply_monitors_config (GfMonitorManager *manager,
+ GfMonitorsConfig *config,
+ GfMonitorsConfigMethod method,
+ GError **error)
+{
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Not implemented");
+ return FALSE;
+}
+
+static gboolean
+gf_monitor_manager_dummy_is_transform_handled (GfMonitorManager *manager,
+ GfCrtc *crtc,
+ GfMonitorTransform transform)
+{
+ return FALSE;
+}
+
+static gfloat
+gf_monitor_manager_dummy_calculate_monitor_mode_scale (GfMonitorManager *manager,
+ GfMonitor *monitor,
+ GfMonitorMode *monitor_mode)
+{
+ return 1.0;
+}
+
+static gfloat *
+gf_monitor_manager_dummy_calculate_supported_scales (GfMonitorManager *manager,
+ GfLogicalMonitorLayoutMode layout_mode,
+ GfMonitor *monitor,
+ GfMonitorMode *monitor_mode,
+ gint *n_supported_scales)
+{
+ *n_supported_scales = 0;
+ return NULL;
+}
+
+static GfMonitorManagerCapability
+gf_monitor_manager_dummy_get_capabilities (GfMonitorManager *manager)
+{
+
+ return GF_MONITOR_MANAGER_CAPABILITY_NONE;
+}
+
+static gboolean
+gf_monitor_manager_dummy_get_max_screen_size (GfMonitorManager *manager,
+ gint *max_width,
+ gint *max_height)
+{
+ return FALSE;
+}
+
+static GfLogicalMonitorLayoutMode
+gf_monitor_manager_dummy_get_default_layout_mode (GfMonitorManager *manager)
+{
+ return GF_LOGICAL_MONITOR_LAYOUT_MODE_PHYSICAL;
+}
+
+static void
gf_monitor_manager_dummy_class_init (GfMonitorManagerDummyClass *dummy_class)
{
+ GfMonitorManagerClass *manager_class;
+
+ manager_class = GF_MONITOR_MANAGER_CLASS (dummy_class);
+
+ manager_class->read_current = gf_monitor_manager_dummy_read_current;
+ manager_class->ensure_initial_config = gf_monitor_manager_dummy_ensure_initial_config;
+ manager_class->apply_monitors_config = gf_monitor_manager_dummy_apply_monitors_config;
+ manager_class->is_transform_handled = gf_monitor_manager_dummy_is_transform_handled;
+ manager_class->calculate_monitor_mode_scale = gf_monitor_manager_dummy_calculate_monitor_mode_scale;
+ manager_class->calculate_supported_scales = gf_monitor_manager_dummy_calculate_supported_scales;
+ manager_class->get_capabilities = gf_monitor_manager_dummy_get_capabilities;
+ manager_class->get_max_screen_size = gf_monitor_manager_dummy_get_max_screen_size;
+ manager_class->get_default_layout_mode = gf_monitor_manager_dummy_get_default_layout_mode;
}
static void
diff --git a/backends/gf-monitor-manager-enums-private.h b/backends/gf-monitor-manager-enums-private.h
index c88492e..2aba1bf 100644
--- a/backends/gf-monitor-manager-enums-private.h
+++ b/backends/gf-monitor-manager-enums-private.h
@@ -31,6 +31,29 @@ G_BEGIN_DECLS
typedef enum
{
+ GF_MONITOR_MANAGER_CAPABILITY_NONE = 0,
+ GF_MONITOR_MANAGER_CAPABILITY_MIRRORING = (1 << 0),
+ GF_MONITOR_MANAGER_CAPABILITY_LAYOUT_MODE = (1 << 1),
+ GF_MONITOR_MANAGER_CAPABILITY_GLOBAL_SCALE_REQUIRED = (1 << 2)
+} GfMonitorManagerCapability;
+
+/* Equivalent to the 'method' enum in org.gnome.Mutter.DisplayConfig */
+typedef enum
+{
+ GF_MONITORS_CONFIG_METHOD_VERIFY = 0,
+ GF_MONITORS_CONFIG_METHOD_TEMPORARY = 1,
+ GF_MONITORS_CONFIG_METHOD_PERSISTENT = 2
+} GfMonitorsConfigMethod;
+
+/* Equivalent to the 'layout-mode' enum in org.gnome.Mutter.DisplayConfig */
+typedef enum
+{
+ GF_LOGICAL_MONITOR_LAYOUT_MODE_LOGICAL = 1,
+ GF_LOGICAL_MONITOR_LAYOUT_MODE_PHYSICAL = 2
+} GfLogicalMonitorLayoutMode;
+
+typedef enum
+{
GF_MONITOR_TRANSFORM_NORMAL,
GF_MONITOR_TRANSFORM_90,
GF_MONITOR_TRANSFORM_180,
diff --git a/backends/gf-monitor-manager-kms.c b/backends/gf-monitor-manager-kms.c
index 024d3ab..5c9117b 100644
--- a/backends/gf-monitor-manager-kms.c
+++ b/backends/gf-monitor-manager-kms.c
@@ -34,8 +34,125 @@ struct _GfMonitorManagerKms
G_DEFINE_TYPE (GfMonitorManagerKms, gf_monitor_manager_kms, GF_TYPE_MONITOR_MANAGER)
static void
+gf_monitor_manager_kms_read_current (GfMonitorManager *manager)
+{
+}
+
+static GBytes *
+gf_monitor_manager_kms_read_edid (GfMonitorManager *manager,
+ GfOutput *output)
+{
+ return NULL;
+}
+
+static void
+gf_monitor_manager_kms_ensure_initial_config (GfMonitorManager *manager)
+{
+}
+
+static gboolean
+gf_monitor_manager_kms_apply_monitors_config (GfMonitorManager *manager,
+ GfMonitorsConfig *config,
+ GfMonitorsConfigMethod method,
+ GError **error)
+{
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Not implemented");
+ return FALSE;
+}
+
+static void
+gf_monitor_manager_kms_set_power_save_mode (GfMonitorManager *manager,
+ GfPowerSave mode)
+{
+}
+
+static void
+gf_monitor_manager_kms_get_crtc_gamma (GfMonitorManager *manager,
+ GfCrtc *crtc,
+ gsize *size,
+ gushort **red,
+ gushort **green,
+ gushort **blue)
+{
+}
+
+static void
+gf_monitor_manager_kms_set_crtc_gamma (GfMonitorManager *manager,
+ GfCrtc *crtc,
+ gsize size,
+ gushort *red,
+ gushort *green,
+ gushort *blue)
+{
+}
+
+static gboolean
+gf_monitor_manager_kms_is_transform_handled (GfMonitorManager *manager,
+ GfCrtc *crtc,
+ GfMonitorTransform transform)
+{
+ return FALSE;
+}
+
+static gfloat
+gf_monitor_manager_kms_calculate_monitor_mode_scale (GfMonitorManager *manager,
+ GfMonitor *monitor,
+ GfMonitorMode *monitor_mode)
+{
+ return 1.0;
+}
+
+static gfloat *
+gf_monitor_manager_kms_calculate_supported_scales (GfMonitorManager *manager,
+ GfLogicalMonitorLayoutMode layout_mode,
+ GfMonitor *monitor,
+ GfMonitorMode *monitor_mode,
+ gint *n_supported_scales)
+{
+ *n_supported_scales = 0;
+ return NULL;
+}
+
+static GfMonitorManagerCapability
+gf_monitor_manager_kms_get_capabilities (GfMonitorManager *manager)
+{
+ return GF_MONITOR_MANAGER_CAPABILITY_NONE;
+}
+
+static gboolean
+gf_monitor_manager_kms_get_max_screen_size (GfMonitorManager *manager,
+ gint *max_width,
+ gint *max_height)
+{
+ return FALSE;
+}
+
+static GfLogicalMonitorLayoutMode
+gf_monitor_manager_kms_get_default_layout_mode (GfMonitorManager *manager)
+{
+ return GF_LOGICAL_MONITOR_LAYOUT_MODE_PHYSICAL;
+}
+
+static void
gf_monitor_manager_kms_class_init (GfMonitorManagerKmsClass *kms_class)
{
+ GfMonitorManagerClass *manager_class;
+
+ manager_class = GF_MONITOR_MANAGER_CLASS (kms_class);
+
+ manager_class->read_current = gf_monitor_manager_kms_read_current;
+ manager_class->read_edid = gf_monitor_manager_kms_read_edid;
+ manager_class->ensure_initial_config = gf_monitor_manager_kms_ensure_initial_config;
+ manager_class->apply_monitors_config = gf_monitor_manager_kms_apply_monitors_config;
+ manager_class->set_power_save_mode = gf_monitor_manager_kms_set_power_save_mode;
+ manager_class->get_crtc_gamma = gf_monitor_manager_kms_get_crtc_gamma;
+ manager_class->set_crtc_gamma = gf_monitor_manager_kms_set_crtc_gamma;
+ manager_class->is_transform_handled = gf_monitor_manager_kms_is_transform_handled;
+ manager_class->calculate_monitor_mode_scale = gf_monitor_manager_kms_calculate_monitor_mode_scale;
+ manager_class->calculate_supported_scales = gf_monitor_manager_kms_calculate_supported_scales;
+ manager_class->get_capabilities = gf_monitor_manager_kms_get_capabilities;
+ manager_class->get_max_screen_size = gf_monitor_manager_kms_get_max_screen_size;
+ manager_class->get_default_layout_mode = gf_monitor_manager_kms_get_default_layout_mode;
}
static void
diff --git a/backends/gf-monitor-manager-private.h b/backends/gf-monitor-manager-private.h
index 2ca47ad..a871488 100644
--- a/backends/gf-monitor-manager-private.h
+++ b/backends/gf-monitor-manager-private.h
@@ -27,12 +27,13 @@
#include "gf-backend-private.h"
#include "gf-dbus-display-config.h"
+#include "gf-display-config-shared.h"
+#include "gf-monitor-manager-enums-private.h"
+#include "gf-monitor-manager-types-private.h"
#include "gf-monitor-manager.h"
G_BEGIN_DECLS
-typedef struct _GfMonitorManagerClass GfMonitorManagerClass;
-
#define GF_TYPE_MONITOR_MANAGER (gf_monitor_manager_get_type ())
#define GF_MONITOR_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GF_TYPE_MONITOR_MANAGER,
GfMonitorManager))
#define GF_MONITOR_MANAGER_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), GF_TYPE_MONITOR_MANAGER,
GfMonitorManagerClass))
@@ -47,10 +48,76 @@ struct _GfMonitorManager
GfDBusDisplayConfigSkeleton parent;
};
-struct _GfMonitorManagerClass
+typedef struct
{
GfDBusDisplayConfigSkeletonClass parent_class;
-};
+
+ void (* read_current) (GfMonitorManager *manager);
+
+ gchar * (* get_edid_file) (GfMonitorManager *manager,
+ GfOutput *output);
+
+ GBytes * (* read_edid) (GfMonitorManager *manager,
+ GfOutput *output);
+
+ gboolean (* is_lid_closed) (GfMonitorManager *manager);
+
+ void (* ensure_initial_config) (GfMonitorManager *manager);
+
+ gboolean (* apply_monitors_config) (GfMonitorManager *manager,
+ GfMonitorsConfig *config,
+ GfMonitorsConfigMethod method,
+ GError **error);
+
+ void (* set_power_save_mode) (GfMonitorManager *manager,
+ GfPowerSave mode);
+
+ void (* change_backlight) (GfMonitorManager *manager,
+ GfOutput *output,
+ gint value);
+
+ void (* get_crtc_gamma) (GfMonitorManager *manager,
+ GfCrtc *crtc,
+ gsize *size,
+ gushort **red,
+ gushort **green,
+ gushort **blue);
+
+ void (* set_crtc_gamma) (GfMonitorManager *manager,
+ GfCrtc *crtc,
+ gsize size,
+ gushort *red,
+ gushort *green,
+ gushort *blue);
+
+ void (* tiled_monitor_added) (GfMonitorManager *manager,
+ GfMonitor *monitor);
+
+ void (* tiled_monitor_removed) (GfMonitorManager *manager,
+ GfMonitor *monitor);
+
+ gboolean (* is_transform_handled) (GfMonitorManager *manager,
+ GfCrtc *crtc,
+ GfMonitorTransform transform);
+
+ gfloat (* calculate_monitor_mode_scale) (GfMonitorManager *manager,
+ GfMonitor *monitor,
+ GfMonitorMode *monitor_mode);
+
+ gfloat * (* calculate_supported_scales) (GfMonitorManager *manager,
+ GfLogicalMonitorLayoutMode layout_mode,
+ GfMonitor *monitor,
+ GfMonitorMode *monitor_mode,
+ gint
*n_supported_scales);
+
+ GfMonitorManagerCapability (* get_capabilities) (GfMonitorManager *manager);
+
+ gboolean (* get_max_screen_size) (GfMonitorManager *manager,
+ gint *max_width,
+ gint *max_height);
+
+ GfLogicalMonitorLayoutMode (* get_default_layout_mode) (GfMonitorManager *manager);
+} GfMonitorManagerClass;
GType gf_monitor_manager_get_type (void);
diff --git a/backends/gf-monitor-manager-types-private.h b/backends/gf-monitor-manager-types-private.h
index 4f3bfbd..858c058 100644
--- a/backends/gf-monitor-manager-types-private.h
+++ b/backends/gf-monitor-manager-types-private.h
@@ -29,6 +29,8 @@
G_BEGIN_DECLS
+typedef struct _GfMonitorsConfig GfMonitorsConfig;
+
typedef struct _GfMonitor GfMonitor;
typedef struct _GfMonitorSpec GfMonitorSpec;
typedef struct _GfLogicalMonitor GfLogicalMonitor;
diff --git a/backends/gf-monitor-manager-xrandr.c b/backends/gf-monitor-manager-xrandr.c
index ca464a5..ebd4bac 100644
--- a/backends/gf-monitor-manager-xrandr.c
+++ b/backends/gf-monitor-manager-xrandr.c
@@ -36,8 +36,147 @@ struct _GfMonitorManagerXrandr
G_DEFINE_TYPE (GfMonitorManagerXrandr, gf_monitor_manager_xrandr, GF_TYPE_MONITOR_MANAGER)
static void
+gf_monitor_manager_xrandr_read_current (GfMonitorManager *manager)
+{
+}
+
+static GBytes *
+gf_monitor_manager_xrandr_read_edid (GfMonitorManager *manager,
+ GfOutput *output)
+{
+ return NULL;
+}
+
+static void
+gf_monitor_manager_xrandr_ensure_initial_config (GfMonitorManager *manager)
+{
+}
+
+static gboolean
+gf_monitor_manager_xrandr_apply_monitors_config (GfMonitorManager *manager,
+ GfMonitorsConfig *config,
+ GfMonitorsConfigMethod method,
+ GError **error)
+{
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Not implemented");
+ return FALSE;
+}
+
+static void
+gf_monitor_manager_xrandr_set_power_save_mode (GfMonitorManager *manager,
+ GfPowerSave mode)
+{
+}
+
+static void
+gf_monitor_manager_xrandr_change_backlight (GfMonitorManager *manager,
+ GfOutput *output,
+ gint value)
+{
+}
+
+static void
+gf_monitor_manager_xrandr_get_crtc_gamma (GfMonitorManager *manager,
+ GfCrtc *crtc,
+ gsize *size,
+ gushort **red,
+ gushort **green,
+ gushort **blue)
+{
+}
+
+static void
+gf_monitor_manager_xrandr_set_crtc_gamma (GfMonitorManager *manager,
+ GfCrtc *crtc,
+ gsize size,
+ gushort *red,
+ gushort *green,
+ gushort *blue)
+{
+}
+
+static void
+gf_monitor_manager_xrandr_tiled_monitor_added (GfMonitorManager *manager,
+ GfMonitor *monitor)
+{
+}
+
+static void
+gf_monitor_manager_xrandr_tiled_monitor_removed (GfMonitorManager *manager,
+ GfMonitor *monitor)
+{
+}
+
+static gboolean
+gf_monitor_manager_xrandr_is_transform_handled (GfMonitorManager *manager,
+ GfCrtc *crtc,
+ GfMonitorTransform transform)
+{
+ return FALSE;
+}
+
+static gfloat
+gf_monitor_manager_xrandr_calculate_monitor_mode_scale (GfMonitorManager *manager,
+ GfMonitor *monitor,
+ GfMonitorMode *monitor_mode)
+{
+ return 1.0;
+}
+
+static gfloat *
+gf_monitor_manager_xrandr_calculate_supported_scales (GfMonitorManager *manager,
+ GfLogicalMonitorLayoutMode layout_mode,
+ GfMonitor *monitor,
+ GfMonitorMode *monitor_mode,
+ gint *n_supported_scales)
+{
+ *n_supported_scales = 0;
+ return NULL;
+}
+
+static GfMonitorManagerCapability
+gf_monitor_manager_xrandr_get_capabilities (GfMonitorManager *manager)
+{
+ return GF_MONITOR_MANAGER_CAPABILITY_NONE;
+}
+
+static gboolean
+gf_monitor_manager_xrandr_get_max_screen_size (GfMonitorManager *manager,
+ gint *max_width,
+ gint *max_height)
+{
+ return FALSE;
+}
+
+static GfLogicalMonitorLayoutMode
+gf_monitor_manager_xrandr_get_default_layout_mode (GfMonitorManager *manager)
+{
+ return GF_LOGICAL_MONITOR_LAYOUT_MODE_PHYSICAL;
+}
+
+static void
gf_monitor_manager_xrandr_class_init (GfMonitorManagerXrandrClass *xrandr_class)
{
+ GfMonitorManagerClass *manager_class;
+
+ manager_class = GF_MONITOR_MANAGER_CLASS (xrandr_class);
+
+ manager_class->read_current = gf_monitor_manager_xrandr_read_current;
+ manager_class->read_edid = gf_monitor_manager_xrandr_read_edid;
+ manager_class->ensure_initial_config = gf_monitor_manager_xrandr_ensure_initial_config;
+ manager_class->apply_monitors_config = gf_monitor_manager_xrandr_apply_monitors_config;
+ manager_class->set_power_save_mode = gf_monitor_manager_xrandr_set_power_save_mode;
+ manager_class->change_backlight = gf_monitor_manager_xrandr_change_backlight;
+ manager_class->get_crtc_gamma = gf_monitor_manager_xrandr_get_crtc_gamma;
+ manager_class->set_crtc_gamma = gf_monitor_manager_xrandr_set_crtc_gamma;
+ manager_class->tiled_monitor_added = gf_monitor_manager_xrandr_tiled_monitor_added;
+ manager_class->tiled_monitor_removed = gf_monitor_manager_xrandr_tiled_monitor_removed;
+ manager_class->is_transform_handled = gf_monitor_manager_xrandr_is_transform_handled;
+ manager_class->calculate_monitor_mode_scale = gf_monitor_manager_xrandr_calculate_monitor_mode_scale;
+ manager_class->calculate_supported_scales = gf_monitor_manager_xrandr_calculate_supported_scales;
+ manager_class->get_capabilities = gf_monitor_manager_xrandr_get_capabilities;
+ manager_class->get_max_screen_size = gf_monitor_manager_xrandr_get_max_screen_size;
+ manager_class->get_default_layout_mode = gf_monitor_manager_xrandr_get_default_layout_mode;
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]