From 36cba90e2219cead7cbf075e5748f271d5466950 Mon Sep 17 00:00:00 2001 From: Eric Koegel Date: Fri, 23 Mar 2012 15:58:45 +0300 Subject: [PATCH] [display-settings] Select a new display when active one is unplugged to correctly update the settings. (Bug 7797) When the active display in the display-settings dialog is unplugged no new display is selected and the display values don't get updated. This patch selects the last display in the list when the active display is removed. --- dialogs/display-settings/main.c | 45 +++++++++++++++++++++++++++++++++++++++ 1 files changed, 45 insertions(+), 0 deletions(-) diff --git a/dialogs/display-settings/main.c b/dialogs/display-settings/main.c index 836daea..a7f0e22 100644 --- a/dialogs/display-settings/main.c +++ b/dialogs/display-settings/main.c @@ -119,6 +119,8 @@ display_settings_get_n_active_outputs (void) { guint n, count = 0; + TRACE("entering"); + g_assert (xfce_randr != NULL); for (n = 0; n < xfce_randr->noutput; ++n) @@ -154,6 +156,8 @@ display_settings_update_time_label (ConfirmationDialog *confirmation_dialog) { GObject *dialog; + TRACE("entering"); + dialog = gtk_builder_get_object (confirmation_dialog->builder, "dialog1"); confirmation_dialog->count--; @@ -193,6 +197,8 @@ display_setting_timed_confirmation (GtkBuilder *main_builder) gint response_id; gint source_id; + TRACE("entering"); + /* Lock the main UI */ main_dialog = gtk_builder_get_object (main_builder, "display-dialog"); gtk_widget_set_sensitive (GTK_WIDGET (main_dialog), FALSE); @@ -242,6 +248,8 @@ display_setting_reflections_changed (GtkComboBox *combobox, gint value; Rotation old_rotation; + TRACE("entering"); + if (!display_setting_combo_box_get_value (combobox, &value)) return; @@ -279,6 +287,8 @@ display_setting_reflections_populate (GtkBuilder *builder) guint n; GtkTreeIter iter; + TRACE("entering"); + if (!xfce_randr) return; @@ -338,6 +348,8 @@ display_setting_rotations_changed (GtkComboBox *combobox, Rotation old_rotation; gint value; + TRACE("entering"); + if (!display_setting_combo_box_get_value (combobox, &value)) return; @@ -373,6 +385,8 @@ display_setting_rotations_populate (GtkBuilder *builder) guint n; GtkTreeIter iter; + TRACE("entering"); + /* Get the combo box store and clear it */ combobox = gtk_builder_get_object (builder, "randr-rotation"); model = gtk_combo_box_get_model (GTK_COMBO_BOX (combobox)); @@ -429,6 +443,8 @@ display_setting_refresh_rates_changed (GtkComboBox *combobox, RRMode old_mode; gint value; + TRACE("entering"); + if (!display_setting_combo_box_get_value (combobox, &value)) return; @@ -464,6 +480,8 @@ display_setting_refresh_rates_populate (GtkBuilder *builder) GObject *res_combobox; XfceRRMode *modes, *current_mode; + TRACE("entering"); + /* Get the combo box store and clear it */ combobox = gtk_builder_get_object (builder, "randr-refresh-rate"); model = gtk_combo_box_get_model (GTK_COMBO_BOX (combobox)); @@ -531,6 +549,8 @@ display_setting_resolutions_changed (GtkComboBox *combobox, RRMode old_mode; gint value; + TRACE("entering"); + if (!display_setting_combo_box_get_value (combobox, &value)) return; @@ -568,6 +588,8 @@ display_setting_resolutions_populate (GtkBuilder *builder) GtkTreeIter iter; XfceRRMode *modes; + TRACE("entering"); + /* Get the combo box store and clear it */ combobox = gtk_builder_get_object (builder, "randr-resolution"); model = gtk_combo_box_get_model (GTK_COMBO_BOX (combobox)); @@ -621,6 +643,8 @@ static void display_setting_output_toggled (GtkToggleButton *togglebutton, GtkBuilder *builder) { + TRACE("entering"); + if (!xfce_randr) return; @@ -664,6 +688,8 @@ display_setting_output_status_populate (GtkBuilder *builder) GObject *check; gchar property[512]; + TRACE("entering"); + if (!xfce_randr) return; @@ -706,6 +732,8 @@ display_settings_treeview_selection_changed (GtkTreeSelection *selection, gboolean has_selection; gint active_id; + TRACE("entering"); + /* Get the selection */ has_selection = gtk_tree_selection_get_selected (selection, &model, &iter); if (G_LIKELY (has_selection)) @@ -737,6 +765,9 @@ display_settings_treeview_populate (GtkBuilder *builder) gchar *name; GdkPixbuf *display_icon, *lucent_display_icon; GtkTreeSelection *selection; + gboolean selected = FALSE; + + TRACE("entering"); /* Create a new list store */ store = gtk_list_store_new (N_OUTPUT_COLUMNS, @@ -791,9 +822,17 @@ display_settings_treeview_populate (GtkBuilder *builder) /* Select active output */ if (m == xfce_randr->active_output) + { gtk_tree_selection_select_iter (selection, &iter); + selected = TRUE; + } } + /* If nothing was selected the active output is no longer valid, + * select the last display in the list. */ + if (!selected) + gtk_tree_selection_select_iter (selection, &iter); + /* Release the store */ g_object_unref (G_OBJECT (store)); @@ -847,6 +886,8 @@ display_settings_dialog_new (GtkBuilder *builder) GObject *combobox; GObject *label, *check; + TRACE("entering"); + /* Get the treeview */ treeview = gtk_builder_get_object (builder, "randr-outputs"); gtk_tree_view_set_tooltip_column (GTK_TREE_VIEW (treeview), COLUMN_OUTPUT_NAME); @@ -913,6 +954,8 @@ screen_on_event (GdkXEvent *xevent, XEvent *e = xevent; gint event_num; + TRACE("entering"); + if (!e) return GDK_FILTER_CONTINUE; @@ -943,6 +986,8 @@ display_settings_minimal_dialog_response (GtkDialog *dialog, guint first, second; gint m, n, found; + TRACE("entering"); + if (response_id == 1) { /* TODO: handle correctly more than 2 outputs? */ -- 1.7.5.4