display: Fix gaps when numbering unusable displays

This commit is contained in:
Timotej Šulík 2023-01-12 02:17:08 +01:00 committed by Robert Ancell
parent b59b6beeb5
commit 4fe26944d8
3 changed files with 32 additions and 11 deletions

View file

@ -465,7 +465,6 @@ cc_display_config_constructed (GObject *object)
CcDisplayConfigPrivate *priv = cc_display_config_get_instance_private (self);
GList *monitors = cc_display_config_get_monitors (self);
GList *item;
gint ui_number = 1;
for (item = monitors; item != NULL; item = item->next)
{
@ -477,16 +476,7 @@ cc_display_config_constructed (GObject *object)
priv->ui_sorted_monitors = g_list_append (priv->ui_sorted_monitors, monitor);
}
for (item = priv->ui_sorted_monitors; item != NULL; item = item->next)
{
CcDisplayMonitor *monitor = item->data;
char *ui_name;
ui_name = make_output_ui_name (monitor);
cc_display_monitor_set_ui_info (monitor, ui_number, ui_name);
ui_number += 1;
}
cc_display_config_update_ui_numbers_names(self);
}
static void
@ -663,3 +653,30 @@ cc_display_config_get_panel_orientation_managed (CcDisplayConfig *self)
{
return CC_DISPLAY_CONFIG_GET_CLASS (self)->get_panel_orientation_managed (self);
}
void
cc_display_config_update_ui_numbers_names (CcDisplayConfig *self)
{
CcDisplayConfigPrivate *priv = cc_display_config_get_instance_private (self);
GList *item;
gint ui_number = 1;
for (item = priv->ui_sorted_monitors; item != NULL; item = item->next)
{
CcDisplayMonitor *monitor = item->data;
char *ui_name;
gint current_ui_number = 0;
ui_name = make_output_ui_name (monitor);
/* Prevents gaps in monitor numbering. Monitors
* with number 0 will not be visible in the UI.
*/
if (cc_display_monitor_is_usable (monitor))
{
current_ui_number = ui_number;
ui_number += 1;
}
cc_display_monitor_set_ui_info (monitor, current_ui_number, ui_name);
}
}

View file

@ -202,6 +202,7 @@ gboolean cc_display_config_is_scaled_mode_valid (CcDisplayConfig
double scale);
gboolean cc_display_config_get_panel_orientation_managed
(CcDisplayConfig *self);
void cc_display_config_update_ui_numbers_names (CcDisplayConfig *self);
const char* cc_display_monitor_get_display_name (CcDisplayMonitor *monitor);
gboolean cc_display_monitor_is_active (CcDisplayMonitor *monitor);

View file

@ -878,6 +878,9 @@ reset_current_config (CcDisplayPanel *panel)
if (cc_display_monitor_is_builtin (output) && panel->lid_is_closed)
cc_display_monitor_set_usable (output, FALSE);
}
/* Recalculate UI numbers after the monitor usability is determined to skip numbering gaps. */
cc_display_config_update_ui_numbers_names(panel->current_config);
}
cc_display_arrangement_set_config (panel->arrangement, panel->current_config);