diff --git a/dialogs/display-settings/display-dialog.glade b/dialogs/display-settings/display-dialog.glade index 0c45e83..80d236c 100644 --- a/dialogs/display-settings/display-dialog.glade +++ b/dialogs/display-settings/display-dialog.glade @@ -10,7 +10,6 @@ 350 video-display dialog - False Configure screen settings and layout @@ -40,6 +39,9 @@ + + 0 + @@ -49,7 +51,10 @@ _Use this output + False + False True + True 0 @@ -58,7 +63,7 @@ True - 4 + 5 2 12 6 @@ -163,7 +168,77 @@ GTK_FILL + + + True + 4 + + + True + X: + + + + + True + Y: + + + 2 + 3 + + + + + True + True + 5 + + True + True + + + 1 + 2 + + + + + True + True + 5 + + True + True + + + 3 + 4 + + + + + 1 + 2 + 4 + 5 + + + + + True + 0 + Position: + + + 4 + 5 + + + + 1 + diff --git a/dialogs/display-settings/main.c b/dialogs/display-settings/main.c index 1706964..d5532f9 100644 --- a/dialogs/display-settings/main.c +++ b/dialogs/display-settings/main.c @@ -699,6 +699,98 @@ display_setting_output_status_populate (GtkBuilder *builder) static void +display_setting_xpos_changed (GtkSpinButton *spinbutton, + GtkBuilder *builder) +{ + gint value; + + value = gtk_spin_button_get_value_as_int (spinbutton); + + XFCE_RANDR_POS_X (xfce_randr) = value; + + display_setting_refresh_rates_populate (builder); + + /* Apply the changes */ + xfce_randr_save_output (xfce_randr, "Default", display_channel, + xfce_randr->active_output); + xfce_randr_apply (xfce_randr, "Default", display_channel); +} + + + +static void +display_setting_xpos_status_populate (GtkBuilder *builder) +{ + GObject *xpos; + gchar property[512]; + + if (!xfce_randr) + return; + + if (xfce_randr->noutput <= 1) + return; + + xpos = gtk_builder_get_object (builder, "randr-xpos"); + + /* Disconnect the "toggled" signal to avoid writing the config again */ + g_object_disconnect (xpos, "any_signal::value-changed", + display_setting_xpos_changed, + builder, NULL); + gtk_spin_button_set_value (GTK_SPIN_BUTTON (xpos), + XFCE_RANDR_POS_X (xfce_randr)); + /* Reconnect the signal */ + g_signal_connect (G_OBJECT (xpos), "value-changed", G_CALLBACK (display_setting_xpos_changed), + builder); +} + + + +static void +display_setting_ypos_changed (GtkSpinButton *spinbutton, + GtkBuilder *builder) +{ + gint value; + + value = gtk_spin_button_get_value_as_int (spinbutton); + + XFCE_RANDR_POS_Y (xfce_randr) = value; + + display_setting_refresh_rates_populate (builder); + + /* Apply the changes */ + xfce_randr_save_output (xfce_randr, "Default", display_channel, + xfce_randr->active_output); + xfce_randr_apply (xfce_randr, "Default", display_channel); +} + + + +static void +display_setting_ypos_status_populate (GtkBuilder *builder) +{ + GObject *ypos; + + if (!xfce_randr) + return; + + if (xfce_randr->noutput <= 1) + return; + + ypos = gtk_builder_get_object (builder, "randr-ypos"); + /* Disconnect the "value-changed" signal to avoid writing the config again */ + g_object_disconnect (ypos, "any_signal::value-changed", + display_setting_ypos_changed, + builder, NULL); + gtk_spin_button_set_value (GTK_SPIN_BUTTON (ypos), + XFCE_RANDR_POS_Y (xfce_randr)); + /* Reconnect the signal */ + g_signal_connect (G_OBJECT (ypos), "value-changed", G_CALLBACK (display_setting_ypos_changed), + builder); +} + + + +static void display_settings_treeview_selection_changed (GtkTreeSelection *selection, GtkBuilder *builder) { @@ -723,6 +815,8 @@ display_settings_treeview_selection_changed (GtkTreeSelection *selection, display_setting_refresh_rates_populate (builder); display_setting_rotations_populate (builder); display_setting_reflections_populate (builder); + display_setting_xpos_status_populate (builder); + display_setting_ypos_status_populate (builder); } } @@ -827,6 +921,15 @@ display_settings_combo_box_create (GtkComboBox *combobox) static void +display_settings_spin_button_create (GtkSpinButton *spinbutton) +{ + gtk_spin_button_set_increments(spinbutton, 1,0); + gtk_spin_button_set_range(spinbutton,0,4096); +} + + + +static void display_settings_dialog_response (GtkDialog *dialog, gint response_id, GtkBuilder *builder) @@ -843,7 +946,7 @@ display_settings_dialog_new (GtkBuilder *builder) GtkCellRenderer *renderer; GtkTreeSelection *selection; GObject *combobox; - GObject *label, *check; + GObject *label, *check, *spin; /* Get the treeview */ treeview = gtk_builder_get_object (builder, "randr-outputs"); @@ -874,6 +977,26 @@ display_settings_dialog_new (GtkBuilder *builder) else gtk_widget_hide (GTK_WIDGET (check)); + spin = gtk_builder_get_object (builder, "randr-xpos"); + display_settings_spin_button_create(GTK_SPIN_BUTTON (spin)); + if (xfce_randr->noutput > 1) + { + gtk_widget_show (GTK_WIDGET (spin)); + g_signal_connect (G_OBJECT (spin), "value-changed", G_CALLBACK (display_setting_xpos_changed), builder); + } + else + gtk_widget_hide (GTK_WIDGET (spin)); + + spin = gtk_builder_get_object (builder, "randr-ypos"); + display_settings_spin_button_create(GTK_SPIN_BUTTON (spin)); + if (xfce_randr->noutput > 1) + { + gtk_widget_show (GTK_WIDGET (spin)); + g_signal_connect (G_OBJECT (spin), "value-changed", G_CALLBACK (display_setting_ypos_changed), builder); + } + else + gtk_widget_hide (GTK_WIDGET (spin)); + label = gtk_builder_get_object (builder, "label-reflection"); gtk_widget_show (GTK_WIDGET (label));