[mutter] monitor-manager: Hook MetaOrientationManager to change the config



commit 6ae42f384501d08026582c7e13c7d922d6a28e31
Author: Rui Matos <tiagomatos gmail com>
Date:   Fri Apr 28 17:53:07 2017 +0200

    monitor-manager: Hook MetaOrientationManager to change the config
    
    On orientation changes we'll apply the appropriate monitor transform
    to the current configuration if possible.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=781906

 src/backends/meta-monitor-manager.c |   57 +++++++++++++++++++++++++++++++++++
 1 files changed, 57 insertions(+), 0 deletions(-)
---
diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
index 6ef0b0f..ed07884 100644
--- a/src/backends/meta-monitor-manager.c
+++ b/src/backends/meta-monitor-manager.c
@@ -40,6 +40,7 @@
 #include "backends/meta-logical-monitor.h"
 #include "backends/meta-monitor.h"
 #include "backends/meta-monitor-config-manager.h"
+#include "backends/meta-orientation-manager.h"
 #include "backends/x11/meta-monitor-manager-xrandr.h"
 #include "meta-backend-private.h"
 
@@ -632,6 +633,57 @@ done:
 }
 
 static void
+orientation_changed (MetaOrientationManager *orientation_manager,
+                     MetaMonitorManager     *manager)
+{
+  MetaMonitorTransform transform;
+
+  switch (meta_orientation_manager_get_orientation (orientation_manager))
+    {
+    case META_ORIENTATION_NORMAL:
+      transform = META_MONITOR_TRANSFORM_NORMAL;
+      break;
+    case META_ORIENTATION_BOTTOM_UP:
+      transform = META_MONITOR_TRANSFORM_180;
+      break;
+    case META_ORIENTATION_LEFT_UP:
+      transform = META_MONITOR_TRANSFORM_90;
+      break;
+    case META_ORIENTATION_RIGHT_UP:
+      transform = META_MONITOR_TRANSFORM_270;
+      break;
+
+    case META_ORIENTATION_UNDEFINED:
+      return;
+    }
+
+  if (!meta_is_monitor_config_manager_enabled ())
+    {
+      meta_monitor_config_orientation_changed (manager->legacy_config, transform);
+    }
+  else
+    {
+      GError *error = NULL;
+      MetaMonitorsConfig *config =
+        meta_monitor_config_manager_create_for_orientation (manager->config_manager,
+                                                            transform);
+      if (!config)
+        return;
+
+      if (!meta_monitor_manager_apply_monitors_config (manager,
+                                                       config,
+                                                       META_MONITORS_CONFIG_METHOD_TEMPORARY,
+                                                       &error))
+        {
+          g_warning ("Failed to use orientation monitor configuration: %s",
+                     error->message);
+          g_error_free (error);
+        }
+      g_object_unref (config);
+    }
+}
+
+static void
 experimental_features_changed (MetaSettings           *settings,
                                MetaExperimentalFeature old_experimental_features,
                                MetaMonitorManager     *manager)
@@ -699,6 +751,11 @@ meta_monitor_manager_constructed (GObject *object)
     skeleton,
     meta_is_monitor_config_manager_enabled ());
 
+  g_signal_connect_object (meta_backend_get_orientation_manager (backend),
+                           "orientation-changed",
+                           G_CALLBACK (orientation_changed),
+                           manager, 0);
+
   manager->in_init = TRUE;
 
   /*


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]