[Xfce4-commits] <xfce4-settings:ochosi/primary> Fix setting primary output and correctly setting all others secondary

Simon Steinbeiss noreply at xfce.org
Mon Dec 17 17:22:01 CET 2012


Updating branch refs/heads/ochosi/primary
         to 36fe0952354c7a7da8bc037d4a92fb6bac6a9a03 (commit)
       from a42364389f5f6399376cbfa2a4cf750b731ba062 (commit)

commit 36fe0952354c7a7da8bc037d4a92fb6bac6a9a03
Author: Simon Steinbeiss <simon.steinbeiss at elfenbeinturm.at>
Date:   Mon Dec 17 17:21:11 2012 +0100

    Fix setting primary output and correctly setting all others secondary

 dialogs/display-settings/main.c |   53 +++++++++++++++++++++++++++++++++-----
 1 files changed, 46 insertions(+), 7 deletions(-)

diff --git a/dialogs/display-settings/main.c b/dialogs/display-settings/main.c
index 7ed4761..3c619fe 100644
--- a/dialogs/display-settings/main.c
+++ b/dialogs/display-settings/main.c
@@ -1218,27 +1218,64 @@ display_setting_primary_toggled (GtkToggleButton *togglebutton,
 
     if (gtk_toggle_button_get_active (togglebutton))
     {
-    /* Set currently active display as primary and all others as secondary */
+    /* Set currently active display as primary */
         xfce_randr->status[active_output]=XFCE_OUTPUT_STATUS_PRIMARY;
+        xfce_randr_save_output (xfce_randr, "Default", display_channel,
+                            active_output, FALSE);
+    /* and all others as secondary */
         for (m = 0; m < xfce_randr->noutput; ++m)
         {
             if (m != active_output)
             {
                 xfce_randr->status[m]=XFCE_OUTPUT_STATUS_SECONDARY;
+                xfce_randr_save_output (xfce_randr, "Default", display_channel,
+                            m, FALSE);
             }
         }
+        
     }
     else
+    {
         xfce_randr->status[active_output]=XFCE_OUTPUT_STATUS_SECONDARY;
+        xfce_randr_save_output (xfce_randr, "Default", display_channel,
+                            active_output, FALSE);
+    }
 
     /* Apply the changes */
-    xfce_randr_save_output (xfce_randr, "Default", display_channel,
-                            active_output, FALSE);
     xfce_randr_apply (xfce_randr, "Default", display_channel);
 }
 
 
 static void
+display_setting_primary_populate (GtkBuilder *builder)
+{
+    GObject *check;
+
+    if (!xfce_randr)
+        return;
+
+    check = gtk_builder_get_object (builder, "primary");
+
+    if (xfce_randr->noutput > 1)
+        gtk_widget_show (GTK_WIDGET (check));
+    else
+    {
+        gtk_widget_hide (GTK_WIDGET (check));
+        return;
+    }
+
+    /* Block the "changed" signal to avoid triggering the confirmation dialog */
+    g_signal_handlers_block_by_func (check, display_setting_primary_toggled,
+                                     builder);
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check),
+                                  xfce_randr->status[active_output] != XFCE_OUTPUT_STATUS_SECONDARY);
+    /* Unblock the signal */
+    g_signal_handlers_unblock_by_func (check, display_setting_primary_toggled,
+                                       builder);
+}
+
+
+static void
 display_setting_output_toggled (GtkToggleButton *togglebutton,
                                 GtkBuilder      *builder)
 {
@@ -1346,6 +1383,7 @@ display_settings_treeview_selection_changed (GtkTreeSelection *selection,
         display_setting_positions_populate (builder);
         display_setting_active_displays_populate (builder);
         display_setting_output_status_populate (builder);
+        display_setting_primary_populate (builder);
         display_setting_mirror_displays_populate (builder);
         display_setting_resolutions_populate (builder);
         display_setting_refresh_rates_populate (builder);
@@ -1479,7 +1517,7 @@ display_settings_dialog_new (GtkBuilder *builder)
     GtkCellRenderer  *renderer;
     GtkTreeSelection *selection;
     GObject          *combobox;
-    GObject          *label, *check, *mirror;
+    GObject          *label, *check, *mirror, *primary;
 
     /* Get the treeview */
     treeview = gtk_builder_get_object (builder, "randr-outputs");
@@ -1506,17 +1544,21 @@ display_settings_dialog_new (GtkBuilder *builder)
     /* Setup the combo boxes */
     check = gtk_builder_get_object (builder, "output-on");
     mirror = gtk_builder_get_object (builder, "mirror-displays");
+    primary = gtk_builder_get_object (builder, "primary");
     g_signal_connect (G_OBJECT (check), "toggled", G_CALLBACK (display_setting_output_toggled), builder);
     g_signal_connect (G_OBJECT (mirror), "toggled", G_CALLBACK (display_setting_mirror_displays_toggled), builder);
+    g_signal_connect (G_OBJECT (primary), "toggled", G_CALLBACK (display_setting_primary_toggled), builder);
     if (xfce_randr->noutput > 1)
     {
         gtk_widget_show (GTK_WIDGET (check));
         gtk_widget_show (GTK_WIDGET (mirror));
+        gtk_widget_show (GTK_WIDGET (primary));
     }
     else
     {
         gtk_widget_hide (GTK_WIDGET (check));
         gtk_widget_hide (GTK_WIDGET (mirror));
+        gtk_widget_hide (GTK_WIDGET (primary));
     }
 
     label = gtk_builder_get_object (builder, "label-reflection");
@@ -1547,9 +1589,6 @@ display_settings_dialog_new (GtkBuilder *builder)
     display_settings_combo_box_create (GTK_COMBO_BOX (combobox));
     g_signal_connect (G_OBJECT (combobox), "changed", G_CALLBACK (display_setting_rotations_changed), builder);
 
-    check = gtk_builder_get_object (builder, "primary");
-    g_signal_connect (G_OBJECT (check), "toggled", G_CALLBACK (display_setting_primary_toggled), builder);
-
     check = gtk_builder_get_object (builder, "minimal-autoshow");
     xfconf_g_property_bind (display_channel, "/Notify", G_TYPE_BOOLEAN, check,
                             "active");


More information about the Xfce4-commits mailing list