monitor-manager: Simplify reading the current configuration

Make a wrapper in MetaMonitorManager that handles freeing the existing
configuration for us.
This commit is contained in:
Jasper St. Pierre 2014-10-12 13:35:55 -07:00
parent 1dbda68839
commit 989bb6ebb1
3 changed files with 33 additions and 54 deletions

View File

@ -58,14 +58,6 @@ meta_monitor_manager_init (MetaMonitorManager *manager)
{ {
} }
static void
read_current_config (MetaMonitorManager *manager)
{
manager->serial++;
META_MONITOR_MANAGER_GET_CLASS (manager)->read_current (manager);
}
/* /*
* make_logical_config: * make_logical_config:
* *
@ -198,7 +190,7 @@ meta_monitor_manager_constructed (GObject *object)
manager->config = meta_monitor_config_new (); manager->config = meta_monitor_config_new ();
read_current_config (manager); meta_monitor_manager_read_current_config (manager);
if (!meta_monitor_config_apply_stored (manager->config, manager)) if (!meta_monitor_config_apply_stored (manager->config, manager))
meta_monitor_config_make_default (manager->config, manager); meta_monitor_config_make_default (manager->config, manager);
@ -211,24 +203,7 @@ meta_monitor_manager_constructed (GObject *object)
so this is not needed. so this is not needed.
*/ */
if (META_IS_MONITOR_MANAGER_XRANDR (manager)) if (META_IS_MONITOR_MANAGER_XRANDR (manager))
{ meta_monitor_manager_read_current_config (manager);
MetaOutput *old_outputs;
MetaCRTC *old_crtcs;
MetaMonitorMode *old_modes;
unsigned int n_old_outputs, n_old_modes;
old_outputs = manager->outputs;
n_old_outputs = manager->n_outputs;
old_modes = manager->modes;
n_old_modes = manager->n_modes;
old_crtcs = manager->crtcs;
read_current_config (manager);
meta_monitor_manager_free_output_array (old_outputs, n_old_outputs);
meta_monitor_manager_free_mode_array (old_modes, n_old_modes);
g_free (old_crtcs);
}
make_logical_config (manager); make_logical_config (manager);
initialize_dbus_interface (manager); initialize_dbus_interface (manager);
@ -236,7 +211,7 @@ meta_monitor_manager_constructed (GObject *object)
manager->in_init = FALSE; manager->in_init = FALSE;
} }
void static void
meta_monitor_manager_free_output_array (MetaOutput *old_outputs, meta_monitor_manager_free_output_array (MetaOutput *old_outputs,
int n_old_outputs) int n_old_outputs)
{ {
@ -259,7 +234,7 @@ meta_monitor_manager_free_output_array (MetaOutput *old_outputs,
g_free (old_outputs); g_free (old_outputs);
} }
void static void
meta_monitor_manager_free_mode_array (MetaMonitorMode *old_modes, meta_monitor_manager_free_mode_array (MetaMonitorMode *old_modes,
int n_old_modes) int n_old_modes)
{ {
@ -1162,6 +1137,31 @@ meta_monitor_manager_get_screen_limits (MetaMonitorManager *manager,
*height = manager->max_screen_height; *height = manager->max_screen_height;
} }
void
meta_monitor_manager_read_current_config (MetaMonitorManager *manager)
{
MetaOutput *old_outputs;
MetaCRTC *old_crtcs;
MetaMonitorMode *old_modes;
unsigned int n_old_outputs, n_old_modes;
/* Some implementations of read_current use the existing information
* we have available, so don't free the old configuration until after
* read_current finishes. */
old_outputs = manager->outputs;
n_old_outputs = manager->n_outputs;
old_modes = manager->modes;
n_old_modes = manager->n_modes;
old_crtcs = manager->crtcs;
manager->serial++;
META_MONITOR_MANAGER_GET_CLASS (manager)->read_current (manager);
meta_monitor_manager_free_output_array (old_outputs, n_old_outputs);
meta_monitor_manager_free_mode_array (old_modes, n_old_modes);
g_free (old_crtcs);
}
void void
meta_monitor_manager_rebuild_derived (MetaMonitorManager *manager) meta_monitor_manager_rebuild_derived (MetaMonitorManager *manager)
{ {
@ -1178,4 +1178,3 @@ meta_monitor_manager_rebuild_derived (MetaMonitorManager *manager)
g_free (old_monitor_infos); g_free (old_monitor_infos);
} }

View File

@ -339,11 +339,8 @@ void meta_monitor_manager_confirm_configuration (MetaMonitorManag
void meta_crtc_info_free (MetaCRTCInfo *info); void meta_crtc_info_free (MetaCRTCInfo *info);
void meta_output_info_free (MetaOutputInfo *info); void meta_output_info_free (MetaOutputInfo *info);
void meta_monitor_manager_free_output_array (MetaOutput *old_outputs,
int n_old_outputs);
void meta_monitor_manager_free_mode_array (MetaMonitorMode *old_modes,
int n_old_modes);
gboolean meta_monitor_manager_has_hotplug_mode_update (MetaMonitorManager *manager); gboolean meta_monitor_manager_has_hotplug_mode_update (MetaMonitorManager *manager);
void meta_monitor_manager_read_current_config (MetaMonitorManager *manager);
/* Returns true if transform causes width and height to be inverted /* Returns true if transform causes width and height to be inverted
This is true for the odd transforms in the enum */ This is true for the odd transforms in the enum */

View File

@ -1060,10 +1060,6 @@ meta_monitor_manager_xrandr_handle_xevent (MetaMonitorManagerXrandr *manager_xra
XEvent *event) XEvent *event)
{ {
MetaMonitorManager *manager = META_MONITOR_MANAGER (manager_xrandr); MetaMonitorManager *manager = META_MONITOR_MANAGER (manager_xrandr);
MetaOutput *old_outputs;
MetaCRTC *old_crtcs;
MetaMonitorMode *old_modes;
unsigned int n_old_outputs, n_old_modes;
gboolean new_config; gboolean new_config;
gboolean applied_config = FALSE; gboolean applied_config = FALSE;
@ -1072,19 +1068,11 @@ meta_monitor_manager_xrandr_handle_xevent (MetaMonitorManagerXrandr *manager_xra
XRRUpdateConfiguration (event); XRRUpdateConfiguration (event);
/* Save the old structures, so they stay valid during the update */ meta_monitor_manager_read_current_config (manager);
old_outputs = manager->outputs;
n_old_outputs = manager->n_outputs;
old_modes = manager->modes;
n_old_modes = manager->n_modes;
old_crtcs = manager->crtcs;
manager->serial++;
meta_monitor_manager_xrandr_read_current (manager);
/* If this config matches our existing one, don't bother doing anything. */ /* If this config matches our existing one, don't bother doing anything. */
if (meta_monitor_config_match_current (manager->config, manager)) if (meta_monitor_config_match_current (manager->config, manager))
goto out; return TRUE;
new_config = manager_xrandr->resources->timestamp >= manager_xrandr->resources->configTimestamp; new_config = manager_xrandr->resources->timestamp >= manager_xrandr->resources->configTimestamp;
@ -1094,7 +1082,7 @@ meta_monitor_manager_xrandr_handle_xevent (MetaMonitorManagerXrandr *manager_xra
if (new_config) if (new_config)
{ {
meta_monitor_manager_rebuild_derived (manager); meta_monitor_manager_rebuild_derived (manager);
goto out; return TRUE;
} }
/* If the monitor has hotplug_mode_update (which is used by VMs), don't bother /* If the monitor has hotplug_mode_update (which is used by VMs), don't bother
@ -1111,10 +1099,5 @@ meta_monitor_manager_xrandr_handle_xevent (MetaMonitorManagerXrandr *manager_xra
if (!applied_config) if (!applied_config)
meta_monitor_config_make_default (manager->config, manager); meta_monitor_config_make_default (manager->config, manager);
out:
meta_monitor_manager_free_output_array (old_outputs, n_old_outputs);
meta_monitor_manager_free_mode_array (old_modes, n_old_modes);
g_free (old_crtcs);
return TRUE; return TRUE;
} }