@@ -33,6 +33,7 @@ static struct {
3333static gboolean startwinloop = FALSE;
3434static struct startwin_settings * settings ;
3535static gboolean quiteventonclose = FALSE;
36+ static gboolean ignoresignals = FALSE;
3637static int retval = -1 ;
3738
3839// -- SUPPORT FUNCTIONS -------------------------------------------------------
@@ -57,7 +58,7 @@ static void foreach_gtk_widget_set_sensitive(GtkWidget *widget, gpointer data)
5758
5859static void populate_video_modes (gboolean firsttime )
5960{
60- int i , mode2d = -1 , mode3d = -1 , idx2d = -1 , idx3d = -1 ;
61+ int i , mode2d = -1 , mode3d = -1 ;
6162 int xdim = 0 , ydim = 0 , bitspp = 0 , display = 0 , fullsc = 0 ;
6263 int xdim2d = 0 , ydim2d = 0 ;
6364 char modestr [64 ];
@@ -70,7 +71,7 @@ static void populate_video_modes(gboolean firsttime)
7071 ydim = settings -> ydim3d ;
7172 bitspp = settings -> bpp3d ;
7273 fullsc = settings -> fullscreen & 255 ;
73- display = min (displaycnt , max (0 , (settings -> fullscreen >> 8 )));
74+ display = min (displaycnt - 1 , max (0 , (settings -> fullscreen >> 8 )));
7475
7576 xdim2d = settings -> xdim2d ;
7677 ydim2d = settings -> ydim2d ;
@@ -80,15 +81,13 @@ static void populate_video_modes(gboolean firsttime)
8081 snprintf (modestr , sizeof (modestr ), "Display %d \xe2\x80\x93 %s" , i , getdisplayname (i ));
8182 gtk_list_store_insert_with_values (controls .displaylist , & iter , -1 , 0 , modestr , 1 , i , -1 );
8283 }
84+ if (displaycnt < 2 ) gtk_widget_set_visible (controls .displaycombo , FALSE);
8385 } else {
8486 // Read back the current resolution information selected in the combobox.
8587 fullsc = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (controls .fullscreencheck ));
86- if (fullsc ) {
87- if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (controls .displaycombo ), & iter )) {
88- gtk_tree_model_get (GTK_TREE_MODEL (controls .displaylist ), & iter , 1 /*index*/ , & display , -1 );
89- }
88+ if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (controls .displaycombo ), & iter )) {
89+ gtk_tree_model_get (GTK_TREE_MODEL (controls .displaylist ), & iter , 1 /*index*/ , & display , -1 );
9090 }
91- if (displaycnt < 2 ) gtk_widget_set_visible (controls .displaycombo , FALSE);
9291 if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (controls .vmode3dcombo ), & iter )) {
9392 gtk_tree_model_get (GTK_TREE_MODEL (controls .vmode3dlist ), & iter , 1 /*index*/ , & mode3d , -1 );
9493 }
@@ -118,6 +117,7 @@ static void populate_video_modes(gboolean firsttime)
118117 display = validmode [mode3d ].display ;
119118
120119 // Repopulate the list.
120+ ignoresignals = TRUE;
121121 gtk_list_store_clear (controls .vmode3dlist );
122122 gtk_list_store_clear (controls .vmode2dlist );
123123 for (i = 0 ; i < validmodecnt ; i ++ ) {
@@ -146,7 +146,7 @@ static void populate_video_modes(gboolean firsttime)
146146 }
147147
148148 for (gboolean valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (controls .displaylist ), & iter );
149- valid ; valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (controls .displaylist ), & iter )) {
149+ ( fullsc || firsttime ) && valid ; valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (controls .displaylist ), & iter )) {
150150 gint index ;
151151 gtk_tree_model_get (GTK_TREE_MODEL (controls .displaylist ), & iter , 1 , & index , -1 );
152152 if (index == validmode [mode3d ].display ) {
@@ -156,6 +156,7 @@ static void populate_video_modes(gboolean firsttime)
156156 }
157157 gtk_widget_set_sensitive (controls .displaycombo , validmode [mode3d ].fs );
158158 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (controls .fullscreencheck ), validmode [mode3d ].fs );
159+ ignoresignals = FALSE;
159160}
160161
161162static void set_settings (struct startwin_settings * thesettings )
@@ -202,14 +203,14 @@ static void on_fullscreencheck_toggled(GtkToggleButton *togglebutton, gpointer u
202203{
203204 (void )togglebutton ; (void )user_data ;
204205
205- populate_video_modes (FALSE);
206+ if (! ignoresignals ) populate_video_modes (FALSE);
206207}
207208
208209static void on_displaycombo_changed (GtkComboBox * combobox , gpointer user_data )
209210{
210211 (void )combobox ; (void )user_data ;
211212
212- populate_video_modes (FALSE);
213+ if (! ignoresignals ) populate_video_modes (FALSE);
213214}
214215
215216static void on_cancelbutton_clicked (GtkButton * button , gpointer user_data )
0 commit comments