Skip to content

Commit 5377197

Browse files
committed
fix errors in startwin behaviour with multiple displays
1 parent cb1939a commit 5377197

File tree

6 files changed

+25
-23
lines changed

6 files changed

+25
-23
lines changed

kenbuild/src/StartupWinController.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ - (void)populateVideoModes:(BOOL)firstTime
104104
ydim = settings->ydim3d;
105105
bitspp = settings->bpp3d;
106106
fullsc = settings->fullscreen & 255;
107-
display = min(displaycnt, max(0, (settings->fullscreen >> 8)));
107+
display = min(displaycnt-1, max(0, (settings->fullscreen >> 8)));
108108

109109
NSMenu *menu = [displayPUButton menu];
110110
[menu removeAllItems];

kenbuild/src/startgtk_game.c

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ static struct {
3838
static gboolean startwinloop = FALSE;
3939
static struct startwin_settings *settings;
4040
static gboolean quiteventonclose = FALSE;
41+
static gboolean ignoresignals = FALSE;
4142
static int retval = -1;
4243

4344
// -- SUPPORT FUNCTIONS -------------------------------------------------------
@@ -74,22 +75,20 @@ static void populate_video_modes(gboolean firsttime)
7475
ydim = settings->ydim3d;
7576
bitspp = settings->bpp3d;
7677
fullsc = settings->fullscreen & 255;
77-
display = min(displaycnt, max(0, (settings->fullscreen >> 8)));
78+
display = min(displaycnt-1, max(0, (settings->fullscreen >> 8)));
7879

7980
gtk_list_store_clear(controls.displaylist);
8081
for (i = 0; i < displaycnt; i++) {
8182
snprintf(modestr, sizeof(modestr), "Display %d \xe2\x80\x93 %s", i, getdisplayname(i));
8283
gtk_list_store_insert_with_values(controls.displaylist, &iter, -1, 0, modestr, 1, i, -1);
8384
}
85+
if (displaycnt < 2) gtk_widget_set_visible(controls.displaycombo, FALSE);
8486
} else {
8587
// Read back the current resolution information selected in the combobox.
8688
fullsc = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(controls.fullscreencheck));
87-
if (fullsc) {
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);
90-
}
89+
if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(controls.displaycombo), &iter)) {
90+
gtk_tree_model_get(GTK_TREE_MODEL(controls.displaylist), &iter, 1 /*index*/, &display, -1);
9191
}
92-
if (displaycnt < 2) gtk_widget_set_visible(controls.displaycombo, FALSE);
9392
if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(controls.vmode3dcombo), &iter)) {
9493
gtk_tree_model_get(GTK_TREE_MODEL(controls.vmode3dlist), &iter, 1 /*index*/, &mode3d, -1);
9594
}
@@ -110,6 +109,7 @@ static void populate_video_modes(gboolean firsttime)
110109
display = validmode[mode3d].display;
111110

112111
// Repopulate the list.
112+
ignoresignals = TRUE;
113113
gtk_list_store_clear(controls.vmode3dlist);
114114
for (i = 0; i < validmodecnt; i++) {
115115
if (validmode[i].fs != fullsc) continue;
@@ -126,7 +126,7 @@ static void populate_video_modes(gboolean firsttime)
126126
}
127127

128128
for (gboolean valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(controls.displaylist), &iter);
129-
valid; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(controls.displaylist), &iter)) {
129+
(fullsc || firsttime) && valid; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(controls.displaylist), &iter)) {
130130
gint index;
131131
gtk_tree_model_get(GTK_TREE_MODEL(controls.displaylist), &iter, 1, &index, -1);
132132
if (index == validmode[mode3d].display) {
@@ -136,6 +136,7 @@ static void populate_video_modes(gboolean firsttime)
136136
}
137137
gtk_widget_set_sensitive(controls.displaycombo, validmode[mode3d].fs);
138138
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(controls.fullscreencheck), validmode[mode3d].fs);
139+
ignoresignals = FALSE;
139140
}
140141

141142
static void set_settings(struct startwin_settings *thesettings)
@@ -200,14 +201,14 @@ static void on_fullscreencheck_toggled(GtkToggleButton *togglebutton, gpointer u
200201
{
201202
(void)togglebutton; (void)user_data;
202203

203-
populate_video_modes(FALSE);
204+
if (!ignoresignals) populate_video_modes(FALSE);
204205
}
205206

206207
static void on_displaycombo_changed(GtkComboBox *combobox, gpointer user_data)
207208
{
208209
(void)combobox; (void)user_data;
209210

210-
populate_video_modes(FALSE);
211+
if (!ignoresignals) populate_video_modes(FALSE);
211212
}
212213

213214
static void on_multiplayerradio_toggled(GtkRadioButton *radiobutton, gpointer user_data)

kenbuild/src/startwin_game.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ static void populate_video_modes(BOOL firstTime)
4646
ydim = settings->ydim3d;
4747
bitspp = settings->bpp3d;
4848
fullsc = settings->fullscreen & 255;
49-
display = min(displaycnt, max(0, (settings->fullscreen >> 8)));
49+
display = min(displaycnt-1, max(0, (settings->fullscreen >> 8)));
5050

5151
ComboBox_ResetContent(hwnddisp);
5252
for (i = 0; i < displaycnt; i++) {

src/EditorStartupWinController.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ - (void)populateVideoModes:(BOOL)firstTime
9797
ydim = settings->ydim3d;
9898
bitspp = settings->bpp3d;
9999
fullsc = settings->fullscreen & 255;
100-
display = min(displaycnt, max(0, (settings->fullscreen >> 8)));
100+
display = min(displaycnt-1, max(0, (settings->fullscreen >> 8)));
101101

102102
xdim2d = settings->xdim2d;
103103
ydim2d = settings->ydim2d;

src/startgtk_editor.c

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ static struct {
3333
static gboolean startwinloop = FALSE;
3434
static struct startwin_settings *settings;
3535
static gboolean quiteventonclose = FALSE;
36+
static gboolean ignoresignals = FALSE;
3637
static int retval = -1;
3738

3839
// -- SUPPORT FUNCTIONS -------------------------------------------------------
@@ -57,7 +58,7 @@ static void foreach_gtk_widget_set_sensitive(GtkWidget *widget, gpointer data)
5758

5859
static 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

161162
static 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

208209
static 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

215216
static void on_cancelbutton_clicked(GtkButton *button, gpointer user_data)

src/startwin_editor.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ static void populate_video_modes(BOOL firstTime)
4949
ydim = settings->ydim3d;
5050
bitspp = settings->bpp3d;
5151
fullsc = settings->fullscreen & 255;
52-
display = min(displaycnt, max(0, (settings->fullscreen >> 8)));
52+
display = min(displaycnt-1, max(0, (settings->fullscreen >> 8)));
5353

5454
xdim2d = settings->xdim2d;
5555
ydim2d = settings->ydim2d;

0 commit comments

Comments
 (0)