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
This commit is contained in:
Hans de Goede 2019-12-11 11:34:34 +01:00 committed by Carlos Garnacho
parent 0d185b21fd
commit bcbb44fdea

View File

@ -899,6 +899,38 @@ clone_logical_monitor_config_list (GList *logical_monitor_configs_in)
return logical_monitor_configs_out; 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 * static MetaMonitorsConfig *
create_for_builtin_display_rotation (MetaMonitorConfigManager *config_manager, create_for_builtin_display_rotation (MetaMonitorConfigManager *config_manager,
gboolean rotate, gboolean rotate,
@ -907,20 +939,19 @@ create_for_builtin_display_rotation (MetaMonitorConfigManager *config_manager,
MetaMonitorManager *monitor_manager = config_manager->monitor_manager; MetaMonitorManager *monitor_manager = config_manager->monitor_manager;
MetaLogicalMonitorConfig *logical_monitor_config; MetaLogicalMonitorConfig *logical_monitor_config;
MetaLogicalMonitorConfig *current_logical_monitor_config; MetaLogicalMonitorConfig *current_logical_monitor_config;
GList *logical_monitor_configs; GList *logical_monitor_configs, *current_configs;
MetaLogicalMonitorLayoutMode layout_mode; MetaLogicalMonitorLayoutMode layout_mode;
if (!meta_monitor_manager_get_is_builtin_display_on (config_manager->monitor_manager))
return NULL;
if (!config_manager->current_config) if (!config_manager->current_config)
return NULL; 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; return NULL;
current_logical_monitor_config = config_manager->current_config->logical_monitor_configs->data;
if (rotate) if (rotate)
transform = (current_logical_monitor_config->transform + 1) % META_MONITOR_TRANSFORM_FLIPPED; transform = (current_logical_monitor_config->transform + 1) % META_MONITOR_TRANSFORM_FLIPPED;
else else
@ -941,12 +972,10 @@ create_for_builtin_display_rotation (MetaMonitorConfigManager *config_manager,
if (current_logical_monitor_config->transform == transform) if (current_logical_monitor_config->transform == transform)
return NULL; return NULL;
if (g_list_length (current_logical_monitor_config->monitor_configs) != 1)
return NULL;
logical_monitor_configs = logical_monitor_configs =
clone_logical_monitor_config_list (config_manager->current_config->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; logical_monitor_config->transform = transform;
if (meta_monitor_transform_is_rotated (current_logical_monitor_config->transform) != if (meta_monitor_transform_is_rotated (current_logical_monitor_config->transform) !=