mirror of
https://github.com/brl/mutter.git
synced 2024-11-30 12:00:44 -05:00
monitor-manager: only reuse initial-config if monitor topology matches startup
Right now we try to apply the current monitor config when a new monitor is attached. The current config obviously doesn't include the new monitor, so the new monitor isn't lit up. The only reason we apply the current config at all is to handle the startup case: We want to reuse the config set in Xorg when first logging in. This commit changes the code to look at the *initial config* instead of the current config, and only if the new monitor topology matches the start up topology.
This commit is contained in:
parent
c15c8facfe
commit
0a50755fd6
@ -40,6 +40,7 @@ struct _MetaMonitorConfigManager
|
||||
MetaMonitorConfigStore *config_store;
|
||||
|
||||
MetaMonitorsConfig *current_config;
|
||||
MetaMonitorsConfig *initial_config;
|
||||
GQueue config_history;
|
||||
};
|
||||
|
||||
@ -579,9 +580,10 @@ create_logical_monitor_config_from_output (MetaMonitorManager *monitor
|
||||
}
|
||||
|
||||
MetaMonitorsConfig *
|
||||
meta_monitor_config_manager_create_current (MetaMonitorConfigManager *config_manager)
|
||||
meta_monitor_config_manager_create_initial (MetaMonitorConfigManager *config_manager)
|
||||
{
|
||||
MetaMonitorManager *monitor_manager = config_manager->monitor_manager;
|
||||
MetaMonitorsConfig *initial_config;
|
||||
GList *logical_monitor_configs;
|
||||
MetaMonitor *primary_monitor;
|
||||
MetaLogicalMonitorLayoutMode layout_mode;
|
||||
@ -589,6 +591,9 @@ meta_monitor_config_manager_create_current (MetaMonitorConfigManager *config_man
|
||||
GList *monitors;
|
||||
GList *l;
|
||||
|
||||
if (config_manager->initial_config != NULL)
|
||||
return g_object_ref (config_manager->initial_config);
|
||||
|
||||
if (meta_monitor_config_store_get_config_count (config_manager->config_store) > 0)
|
||||
return NULL;
|
||||
|
||||
@ -630,10 +635,14 @@ meta_monitor_config_manager_create_current (MetaMonitorConfigManager *config_man
|
||||
logical_monitor_config);
|
||||
}
|
||||
|
||||
return meta_monitors_config_new (monitor_manager,
|
||||
logical_monitor_configs,
|
||||
layout_mode,
|
||||
META_MONITORS_CONFIG_FLAG_NONE);
|
||||
initial_config = meta_monitors_config_new (monitor_manager,
|
||||
logical_monitor_configs,
|
||||
layout_mode,
|
||||
META_MONITORS_CONFIG_FLAG_NONE);
|
||||
|
||||
config_manager->initial_config = g_object_ref (initial_config);
|
||||
|
||||
return initial_config;
|
||||
}
|
||||
|
||||
MetaMonitorsConfig *
|
||||
@ -1162,6 +1171,7 @@ meta_monitor_config_manager_dispose (GObject *object)
|
||||
META_MONITOR_CONFIG_MANAGER (object);
|
||||
|
||||
g_clear_object (&config_manager->current_config);
|
||||
g_clear_object (&config_manager->initial_config);
|
||||
meta_monitor_config_manager_clear_history (config_manager);
|
||||
|
||||
G_OBJECT_CLASS (meta_monitor_config_manager_parent_class)->dispose (object);
|
||||
|
@ -87,7 +87,7 @@ gboolean meta_monitor_config_manager_assign (MetaMonitorManager *manager,
|
||||
|
||||
MetaMonitorsConfig * meta_monitor_config_manager_get_stored (MetaMonitorConfigManager *config_manager);
|
||||
|
||||
MetaMonitorsConfig * meta_monitor_config_manager_create_current (MetaMonitorConfigManager *config_manager);
|
||||
MetaMonitorsConfig * meta_monitor_config_manager_create_initial (MetaMonitorConfigManager *config_manager);
|
||||
MetaMonitorsConfig * meta_monitor_config_manager_create_linear (MetaMonitorConfigManager *config_manager);
|
||||
|
||||
MetaMonitorsConfig * meta_monitor_config_manager_create_fallback (MetaMonitorConfigManager *config_manager);
|
||||
|
@ -496,9 +496,11 @@ should_use_stored_config (MetaMonitorManager *manager)
|
||||
MetaMonitorsConfig *
|
||||
meta_monitor_manager_ensure_configured (MetaMonitorManager *manager)
|
||||
{
|
||||
g_autoptr (MetaMonitorsConfig) initial_config = NULL;
|
||||
MetaMonitorsConfig *config = NULL;
|
||||
GError *error = NULL;
|
||||
gboolean use_stored_config;
|
||||
MetaMonitorsConfigKey *current_state_key;
|
||||
MetaMonitorsConfigMethod method;
|
||||
MetaMonitorsConfigMethod fallback_method =
|
||||
META_MONITORS_CONFIG_METHOD_TEMPORARY;
|
||||
@ -509,6 +511,18 @@ meta_monitor_manager_ensure_configured (MetaMonitorManager *manager)
|
||||
else
|
||||
method = META_MONITORS_CONFIG_METHOD_TEMPORARY;
|
||||
|
||||
initial_config = meta_monitor_config_manager_create_initial (manager->config_manager);
|
||||
|
||||
if (initial_config)
|
||||
{
|
||||
current_state_key = meta_create_monitors_config_key_for_current_state (manager);
|
||||
|
||||
/* don't ever reuse initial configuration, if the monitor topology changed
|
||||
*/
|
||||
if (current_state_key && !meta_monitors_config_key_equal (current_state_key, initial_config->key))
|
||||
g_clear_object (&initial_config);
|
||||
}
|
||||
|
||||
if (use_stored_config)
|
||||
{
|
||||
config = meta_monitor_config_manager_get_stored (manager->config_manager);
|
||||
@ -576,7 +590,7 @@ meta_monitor_manager_ensure_configured (MetaMonitorManager *manager)
|
||||
g_clear_object (&config);
|
||||
}
|
||||
|
||||
config = meta_monitor_config_manager_create_current (manager->config_manager);
|
||||
config = g_steal_pointer (&initial_config);
|
||||
if (config)
|
||||
{
|
||||
if (!meta_monitor_manager_apply_monitors_config (manager,
|
||||
|
Loading…
Reference in New Issue
Block a user