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:
parent
0d185b21fd
commit
bcbb44fdea
@ -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) !=
|
||||||
|
Loading…
Reference in New Issue
Block a user