[mutter/wip/carlosg/centralized-panel-auto-orientation: 8/8] backends: Hook ClutterSeat::touch-mode to PanelOrientationManaged




commit bbcd65ce389ded38e25c060d5cf27b226489d85f
Author: Carlos Garnacho <carlosg gnome org>
Date:   Thu Jun 11 18:18:37 2020 +0200

    backends: Hook ClutterSeat::touch-mode to PanelOrientationManaged
    
    We only want the panel autorotation to happen if the laptop has an
    accelerometer, and is in tablet mode. Regular laptop mode should
    lock the orientation, and let it be configured manually.
    
    https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1311

 src/backends/meta-backend.c                 |  2 ++
 src/backends/meta-monitor-manager-private.h |  2 ++
 src/backends/meta-monitor-manager.c         | 22 +++++++++++++++++++++-
 3 files changed, 25 insertions(+), 1 deletion(-)
---
diff --git a/src/backends/meta-backend.c b/src/backends/meta-backend.c
index 26198166f9..2ecbfe7417 100644
--- a/src/backends/meta-backend.c
+++ b/src/backends/meta-backend.c
@@ -560,6 +560,8 @@ meta_backend_real_post_init (MetaBackend *backend)
       reset_pointer_position (backend);
       priv->is_pointer_position_initialized = TRUE;
     }
+
+  meta_monitor_manager_post_init (priv->monitor_manager);
 }
 
 static gboolean
diff --git a/src/backends/meta-monitor-manager-private.h b/src/backends/meta-monitor-manager-private.h
index 7df72f7162..ac3bc94d68 100644
--- a/src/backends/meta-monitor-manager-private.h
+++ b/src/backends/meta-monitor-manager-private.h
@@ -407,4 +407,6 @@ meta_find_output_assignment (MetaOutputAssignment **outputs,
   return NULL;
 }
 
+void meta_monitor_manager_post_init (MetaMonitorManager *manager);
+
 #endif /* META_MONITOR_MANAGER_PRIVATE_H */
diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c
index 35d8e60874..1beb658bdf 100644
--- a/src/backends/meta-monitor-manager.c
+++ b/src/backends/meta-monitor-manager.c
@@ -756,12 +756,18 @@ static void
 update_panel_orientation_managed (MetaMonitorManager *manager)
 {
   MetaOrientationManager *orientation_manager;
+  ClutterBackend *clutter_backend;
+  ClutterSeat *seat;
   gboolean panel_orientation_managed;
 
+  clutter_backend = meta_backend_get_clutter_backend (manager->backend);
+  seat = clutter_backend_get_default_seat (clutter_backend);
+
   orientation_manager = meta_backend_get_orientation_manager (manager->backend);
 
   panel_orientation_managed =
-    meta_orientation_manager_has_accelerometer (orientation_manager);
+    (clutter_seat_get_touch_mode (seat) &&
+     meta_orientation_manager_has_accelerometer (orientation_manager));
 
   if (manager->panel_orientation_managed == panel_orientation_managed)
     return;
@@ -3227,3 +3233,17 @@ meta_monitor_manager_get_panel_orientation_managed (MetaMonitorManager *manager)
 
   return manager->panel_orientation_managed;
 }
+
+void
+meta_monitor_manager_post_init (MetaMonitorManager *manager)
+{
+  ClutterBackend *clutter_backend;
+  ClutterSeat *seat;
+
+  clutter_backend = meta_backend_get_clutter_backend (manager->backend);
+  seat = clutter_backend_get_default_seat (clutter_backend);
+
+  g_signal_connect_object (seat, "notify::touch-mode",
+                           G_CALLBACK (update_panel_orientation_managed), manager,
+                           G_CONNECT_SWAPPED);
+}


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