From 4fe26944d889dcb054b44272fb4df9b91cc1f0c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timotej=20=C5=A0ul=C3=ADk?= Date: Thu, 12 Jan 2023 02:17:08 +0100 Subject: [PATCH] display: Fix gaps when numbering unusable displays --- panels/display/cc-display-config.c | 39 +++++++++++++++++++++--------- panels/display/cc-display-config.h | 1 + panels/display/cc-display-panel.c | 3 +++ 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/panels/display/cc-display-config.c b/panels/display/cc-display-config.c index b7532f99a..f2ccda522 100644 --- a/panels/display/cc-display-config.c +++ b/panels/display/cc-display-config.c @@ -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); + } +} diff --git a/panels/display/cc-display-config.h b/panels/display/cc-display-config.h index 1241adcd5..ea52c2d59 100644 --- a/panels/display/cc-display-config.h +++ b/panels/display/cc-display-config.h @@ -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); diff --git a/panels/display/cc-display-panel.c b/panels/display/cc-display-panel.c index cb460e361..a4d30a2fe 100644 --- a/panels/display/cc-display-panel.c +++ b/panels/display/cc-display-panel.c @@ -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);