[Xfce4-commits] <xfce4-settings:master> Added detection of relative display position.

Nick Schermer noreply at xfce.org
Sun Oct 28 10:44:19 CET 2012


Updating branch refs/heads/master
         to 402a724d0734f2c54ffef8574cb9f6e84708fe5e (commit)
       from 04d492c4cc626a50cfefcc04751d43ce856dec1d (commit)

commit 402a724d0734f2c54ffef8574cb9f6e84708fe5e
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Thu Sep 27 10:23:48 2012 -0400

    Added detection of relative display position.

 dialogs/display-settings/main.c |   81 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 81 insertions(+), 0 deletions(-)

diff --git a/dialogs/display-settings/main.c b/dialogs/display-settings/main.c
index 79a948a..af39b61 100644
--- a/dialogs/display-settings/main.c
+++ b/dialogs/display-settings/main.c
@@ -498,6 +498,86 @@ display_setting_active_displays_populate (GtkBuilder *builder)
 }
 
 static void
+display_setting_guess_positioning (GtkBuilder *builder)
+{
+    GObject *position_combo, *display_combo;
+    gint current_x, current_y, index;
+    guint n, current_display;
+    
+    current_display = xfce_randr->active_output;
+    current_x = XFCE_RANDR_POS_X (xfce_randr);
+    current_y = XFCE_RANDR_POS_Y (xfce_randr);
+    
+    position_combo = gtk_builder_get_object(builder, "randr-position");
+    display_combo = gtk_builder_get_object(builder, "randr-active-displays");
+    
+    g_object_disconnect (position_combo, "any_signal::changed",
+                         display_setting_positions_changed,
+                         builder, NULL);
+                         
+    g_object_disconnect (display_combo, "any_signal::changed",
+                         display_setting_active_displays_changed,
+                         builder, NULL);
+                         
+    index = 0;
+    
+    for (n = 0; n < display_settings_get_n_active_outputs (); n++)
+    {
+        if (n != current_display)
+        {
+            xfce_randr->active_output = n;
+            
+            /* Check for mirror */
+            if ( (XFCE_RANDR_POS_X (xfce_randr) == current_x) && 
+                 (XFCE_RANDR_POS_Y (xfce_randr) == current_y) ) {
+                gtk_combo_box_set_active( GTK_COMBO_BOX(position_combo), 0 );
+                gtk_combo_box_set_active( GTK_COMBO_BOX(display_combo), index );
+                break;       
+            }
+            
+            /* Check for Left Of */
+            if ( (XFCE_RANDR_POS_Y (xfce_randr) == current_y) &&
+                 (XFCE_RANDR_POS_X (xfce_randr) > current_x) ) {
+                gtk_combo_box_set_active( GTK_COMBO_BOX(position_combo), 1 );
+                gtk_combo_box_set_active( GTK_COMBO_BOX(display_combo), index );
+                break;
+            }
+            
+            /* Check for Right Of */
+            if ( (XFCE_RANDR_POS_Y (xfce_randr) == current_y) &&
+                 (XFCE_RANDR_POS_X (xfce_randr) < current_x) ) {
+                gtk_combo_box_set_active( GTK_COMBO_BOX(position_combo), 2 );
+                gtk_combo_box_set_active( GTK_COMBO_BOX(display_combo), index );
+                break;
+            }
+            
+            /* Check for Above */
+            if ( (XFCE_RANDR_POS_X (xfce_randr) == current_x) &&
+                 (XFCE_RANDR_POS_Y (xfce_randr) > current_y) ) {
+                gtk_combo_box_set_active( GTK_COMBO_BOX(position_combo), 3 );
+                gtk_combo_box_set_active( GTK_COMBO_BOX(display_combo), index );
+                break;
+            }
+            
+            /* Check for Below */
+            if ( (XFCE_RANDR_POS_X (xfce_randr) == current_x) &&
+                 (XFCE_RANDR_POS_Y (xfce_randr) < current_y) ) {
+                gtk_combo_box_set_active( GTK_COMBO_BOX(position_combo), 4 );
+                gtk_combo_box_set_active( GTK_COMBO_BOX(display_combo), index );
+                break;
+            }
+            
+            index++;
+        }
+    }
+    
+    xfce_randr->active_output = current_display;
+    
+    g_signal_connect (G_OBJECT (position_combo), "changed", G_CALLBACK (display_setting_positions_changed), builder);
+    g_signal_connect (G_OBJECT (display_combo), "changed", G_CALLBACK (display_setting_active_displays_changed), builder);
+}
+
+static void
 display_setting_reflections_changed (GtkComboBox *combobox,
                                      GtkBuilder  *builder)
 {
@@ -1061,6 +1141,7 @@ display_settings_treeview_selection_changed (GtkTreeSelection *selection,
         /* Update the combo boxes */
         display_setting_positions_populate (builder);
         display_setting_active_displays_populate (builder);
+        display_setting_guess_positioning (builder);
         display_setting_output_status_populate (builder);
         display_setting_mirror_displays_populate (builder);
         display_setting_resolutions_populate (builder);


More information about the Xfce4-commits mailing list