From bcbb44fdeaccac5f17f1d7f4b3b54d69e69277cb Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 11 Dec 2019 11:34:34 +0100 Subject: [PATCH] monitor-config-manager: honor accelerometer value changes when there is more than 1 monitor Modify create_for_builtin_display_rotation to lookup the MetaLogicalMonitorConfig for the panel in the logical_monitor_configs list instead of only working when there is only 1 monitor. The goal of this change is to honor accelerometer value changes when there is more than 1 monitor. Note, since create_for_builtin_display_rotation is also used for handling the "rotate-monitor" hotkey and this commit modifies the common path of create_for_builtin_display_rotation this means that we will now also honor "rotate-monitor" hotkey keypresses when there is more than 1 monitor and update the builtin display rotation instead of ignoring "rotate-monitor" hotkey keypresses when there is more than 1 monitor. If this is deemed undesirable this is easy to fix, but I believe that doing things this way is more consistent. https://gitlab.gnome.org/GNOME/mutter/merge_requests/959 --- src/backends/meta-monitor-config-manager.c | 51 +++++++++++++++++----- 1 file changed, 40 insertions(+), 11 deletions(-) diff --git a/src/backends/meta-monitor-config-manager.c b/src/backends/meta-monitor-config-manager.c index e2a5ecd3d..c99d31e54 100644 --- a/src/backends/meta-monitor-config-manager.c +++ b/src/backends/meta-monitor-config-manager.c @@ -899,6 +899,38 @@ clone_logical_monitor_config_list (GList *logical_monitor_configs_in) return logical_monitor_configs_out; } +static MetaLogicalMonitorConfig * +find_logical_config_for_builtin_display_rotation (MetaMonitorConfigManager *config_manager, + GList *logical_monitor_configs) +{ + MetaLogicalMonitorConfig *logical_monitor_config; + MetaMonitorConfig *monitor_config; + MetaMonitor *panel; + GList *l; + + panel = meta_monitor_manager_get_laptop_panel (config_manager->monitor_manager); + if (panel && meta_monitor_is_active (panel)) + { + for (l = logical_monitor_configs; l; l = l->next) + { + logical_monitor_config = l->data; + /* + * We only want to return the config for the panel if it is + * configured on its own, so we skip configs which contain clones. + */ + if (g_list_length (logical_monitor_config->monitor_configs) != 1) + continue; + + monitor_config = logical_monitor_config->monitor_configs->data; + if (meta_monitor_spec_equals (meta_monitor_get_spec (panel), + monitor_config->monitor_spec)) + return logical_monitor_config; + } + } + + return NULL; +} + static MetaMonitorsConfig * create_for_builtin_display_rotation (MetaMonitorConfigManager *config_manager, gboolean rotate, @@ -907,20 +939,19 @@ create_for_builtin_display_rotation (MetaMonitorConfigManager *config_manager, MetaMonitorManager *monitor_manager = config_manager->monitor_manager; MetaLogicalMonitorConfig *logical_monitor_config; MetaLogicalMonitorConfig *current_logical_monitor_config; - GList *logical_monitor_configs; + GList *logical_monitor_configs, *current_configs; MetaLogicalMonitorLayoutMode layout_mode; - if (!meta_monitor_manager_get_is_builtin_display_on (config_manager->monitor_manager)) - return NULL; - if (!config_manager->current_config) return NULL; - if (g_list_length (config_manager->current_config->logical_monitor_configs) != 1) + current_configs = config_manager->current_config->logical_monitor_configs; + current_logical_monitor_config = + find_logical_config_for_builtin_display_rotation (config_manager, + current_configs); + if (!current_logical_monitor_config) return NULL; - current_logical_monitor_config = config_manager->current_config->logical_monitor_configs->data; - if (rotate) transform = (current_logical_monitor_config->transform + 1) % META_MONITOR_TRANSFORM_FLIPPED; else @@ -941,12 +972,10 @@ create_for_builtin_display_rotation (MetaMonitorConfigManager *config_manager, if (current_logical_monitor_config->transform == transform) return NULL; - if (g_list_length (current_logical_monitor_config->monitor_configs) != 1) - return NULL; - logical_monitor_configs = clone_logical_monitor_config_list (config_manager->current_config->logical_monitor_configs); - logical_monitor_config = logical_monitor_configs->data; + logical_monitor_config = + find_logical_config_for_builtin_display_rotation (config_manager, logical_monitor_configs); logical_monitor_config->transform = transform; if (meta_monitor_transform_is_rotated (current_logical_monitor_config->transform) !=