[gnome-flashback] backends: add GfMonitorManager vfuncs



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]