Updating branch refs/heads/xrandr-display-settings to 2d024516e3806a3f9955b96ea098e6872031dc86 (commit) from 92e59e7cf2122df7d5ee91e3d5167ea04fd91f0f (commit)
commit 2d024516e3806a3f9955b96ea098e6872031dc86 Author: Lionel Le Folgoc <mrpo...@gmail.com> Date: Sun Jun 20 18:17:20 2010 +0200 Fall back to similar modes if no clone mode is available In the minimal dialog, if no clone mode is available (same resolution and same rate), try to find a similar one (same res), to "emulate" cloned outputs. Also fix indentation to be consistent with the rest of the file. dialogs/display-settings/main.c | 153 ++++++++++++++++++++++----------------- 1 files changed, 88 insertions(+), 65 deletions(-) diff --git a/dialogs/display-settings/main.c b/dialogs/display-settings/main.c index 9473c76..65be68c 100644 --- a/dialogs/display-settings/main.c +++ b/dialogs/display-settings/main.c @@ -848,71 +848,94 @@ display_settings_minimal_dialog_response (GtkDialog *dialog, gint response_id, GtkBuilder *builder) { - if (response_id == 1) - { - /* OK */ - GObject *first_screen_radio; - GObject *second_screen_radio; - GObject *both_radio; - gboolean use_first_screen; - gboolean use_second_screen; - gboolean use_both; - gint first; - gint second; - gint n; - - first = second = -1; - - for (n = 0; n < xfce_randr->resources->noutput; n++) - { - if (xfce_randr->status[n] != XFCE_OUTPUT_STATUS_NONE) - { - if (first < 0) - first = n; - else if (second < 0) - second = n; - else - break; - } - } - - first_screen_radio = gtk_builder_get_object (builder, "radiobutton1"); - second_screen_radio = gtk_builder_get_object (builder, "radiobutton2"); - both_radio = gtk_builder_get_object (builder, "radiobutton3"); - - use_first_screen = - gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (first_screen_radio)); - use_second_screen = - gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (second_screen_radio)); - use_both = - gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (both_radio)); - - if (use_first_screen) - { - xfce_randr->mode[first] = xfce_randr->preferred_mode[first]; - xfce_randr->mode[second] = None; - } - else if (use_second_screen) - { - xfce_randr->mode[second] = xfce_randr->preferred_mode[second]; - xfce_randr->mode[first] = None; - } - else - { - if (xfce_randr->clone_modes[0] != None) - { - xfce_randr->mode[first] = xfce_randr->clone_modes[0]; - xfce_randr->mode[second] = xfce_randr->clone_modes[0]; - } - } - - xfce_randr_save (xfce_randr, "AutoConfigSecondary", display_channel); - gtk_main_quit (); - } - else - { - gtk_main_quit (); - } + GObject *first_screen_radio; + GObject *second_screen_radio; + GObject *both_radio; + XfceRRMode *mode1, *mode2; + gboolean use_first_screen; + gboolean use_second_screen; + gboolean use_both; + gint first, second; + gint m, n, found; + + if (response_id == 1) + { + /* OK */ + + first = second = -1; + + for (n = 0; n < xfce_randr->resources->noutput; n++) + { + if (xfce_randr->status[n] != XFCE_OUTPUT_STATUS_NONE) + { + if (first < 0) + first = n; + else if (second < 0) + second = n; + else + break; + } + } + + first_screen_radio = gtk_builder_get_object (builder, "radiobutton1"); + second_screen_radio = gtk_builder_get_object (builder, "radiobutton2"); + both_radio = gtk_builder_get_object (builder, "radiobutton3"); + + use_first_screen = + gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (first_screen_radio)); + use_second_screen = + gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (second_screen_radio)); + use_both = + gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (both_radio)); + + if (use_first_screen) + { + xfce_randr->mode[first] = xfce_randr->preferred_mode[first]; + xfce_randr->mode[second] = None; + } + else if (use_second_screen) + { + xfce_randr->mode[second] = xfce_randr->preferred_mode[second]; + xfce_randr->mode[first] = None; + } + else + { + if (xfce_randr->clone_modes[0] != None) + { + xfce_randr->mode[first] = xfce_randr->clone_modes[0]; + xfce_randr->mode[second] = xfce_randr->clone_modes[0]; + } + else + { + found = FALSE; + /* no clone mode available, try to find a "similar" mode */ + for (n = 0; n < xfce_randr->output_info[first]->nmode; ++n) + { + mode1 = &xfce_randr->modes[first][n]; + for (m = 0; m < xfce_randr->output_info[second]->nmode; ++m) + { + mode2 = &xfce_randr->modes[second][m]; + /* "similar" means same resolution */ + if (mode1->width == mode2->width + && mode1->height == mode2->height) + { + xfce_randr->mode[first] = mode1->id; + xfce_randr->mode[second] = mode2->id; + found = TRUE; + break; + } + } + + if (found) + break; + } + } + } + + xfce_randr_save (xfce_randr, "AutoConfigSecondary", display_channel); + } + + gtk_main_quit (); } #endif _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits