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
This commit is contained in:
Carlos Garnacho 2020-06-11 18:18:37 +02:00
parent a9cd81cb93
commit 566e24d8a1
3 changed files with 25 additions and 1 deletions

View File

@ -573,6 +573,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

View File

@ -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 */

View File

@ -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);
}