GTK2: Replaced option menus with combo boxes

The old GtkOptionMenu widget is deprecated.
This commit is contained in:
robxnano 2022-10-08 14:04:20 +01:00
parent bf784a2c30
commit af96a51acb
2 changed files with 184 additions and 196 deletions

View File

@ -197,27 +197,27 @@ static GtkWidget *make_table(GtkWidget *top, int x, int y)
return table; return table;
} }
static GtkWidget *table_make_option_menu(GtkWidget *table, int row, int label_id, const opt_desc *options, int active) static GtkWidget *table_make_option_menu(GtkWidget *table, int row, int label_id,
const combo_desc *options, GCallback func,
int active)
{ {
GtkWidget *label, *opt, *menu; GtkWidget *label, *combo;
label = gtk_label_new(GetString(label_id)); label = gtk_label_new(GetString(label_id));
gtk_widget_show(label); gtk_widget_show(label);
gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row + 1, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 4); gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row + 1, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 4);
opt = gtk_option_menu_new(); combo = gtk_combo_box_new_text();
gtk_widget_show(opt); gtk_widget_show(combo);
menu = gtk_menu_new();
while (options->label_id) { while (options->label_id) {
add_menu_item(menu, options->label_id, options->func); gtk_combo_box_append_text(GTK_COMBO_BOX(combo), GetString(options->label_id));
options++; options++;
} }
gtk_menu_set_active(GTK_MENU(menu), active); gtk_combo_box_set_active(GTK_COMBO_BOX(combo), active);
g_signal_connect(combo, "changed", func, NULL);
gtk_option_menu_set_menu(GTK_OPTION_MENU(opt), menu); gtk_table_attach(GTK_TABLE(table), combo, 1, 2, row, row + 1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)0, 4, 4);
gtk_table_attach(GTK_TABLE(table), opt, 1, 2, row, row + 1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)0, 4, 4); return combo;
return menu;
} }
static GtkWidget *table_make_combobox(GtkWidget *table, int row, int label_id, const char *pref, GList *list) static GtkWidget *table_make_combobox(GtkWidget *table, int row, int label_id, const char *pref, GList *list)
@ -280,9 +280,9 @@ static GtkWidget *table_make_file_entry(GtkWidget *table, int row, int label_id,
return entry; return entry;
} }
static GtkWidget *make_option_menu(GtkWidget *top, int label_id, const opt_desc *options, int active) static GtkWidget *make_option_menu(GtkWidget *top, int label_id, const combo_desc *options, GCallback func, int active)
{ {
GtkWidget *box, *label, *opt, *menu; GtkWidget *box, *label, *combo;
box = gtk_hbox_new(FALSE, 4); box = gtk_hbox_new(FALSE, 4);
gtk_widget_show(box); gtk_widget_show(box);
@ -292,19 +292,17 @@ static GtkWidget *make_option_menu(GtkWidget *top, int label_id, const opt_desc
gtk_widget_show(label); gtk_widget_show(label);
gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0);
opt = gtk_option_menu_new(); combo = gtk_combo_box_new_text();
gtk_widget_show(opt); gtk_widget_show(combo);
menu = gtk_menu_new();
while (options->label_id) { while (options->label_id) {
add_menu_item(menu, options->label_id, options->func); gtk_combo_box_append_text(GTK_COMBO_BOX(combo), GetString(options->label_id));
options++; options++;
} }
gtk_menu_set_active(GTK_MENU(menu), active); gtk_combo_box_set_active(GTK_COMBO_BOX(combo), active);
gtk_box_pack_start(GTK_BOX(box), combo, FALSE, FALSE, 0);
gtk_option_menu_set_menu(GTK_OPTION_MENU(opt), menu); g_signal_connect(combo, "changed", func, NULL);
gtk_box_pack_start(GTK_BOX(box), opt, FALSE, FALSE, 0); return combo;
return menu;
} }
static GtkWidget *make_file_entry(GtkWidget *top, int label_id, const char *prefs_item, bool only_dirs = false) static GtkWidget *make_file_entry(GtkWidget *top, int label_id, const char *prefs_item, bool only_dirs = false)
@ -632,8 +630,13 @@ static void cb_remove_volume(...)
} }
// "Boot From" selected // "Boot From" selected
static void mn_boot_any(...) {PrefsReplaceInt32("bootdriver", 0);} static void mn_bootdriver(GtkWidget *widget)
static void mn_boot_cdrom(...) {PrefsReplaceInt32("bootdriver", CDROMRefNum);} {
if (gtk_combo_box_get_active(GTK_COMBO_BOX(widget)))
PrefsReplaceInt32("bootdriver", CDROMRefNum);
else
PrefsReplaceInt32("bootdriver", 0);
}
// "No CD-ROM Driver" button toggled // "No CD-ROM Driver" button toggled
static void tb_nocdrom(GtkWidget *widget) static void tb_nocdrom(GtkWidget *widget)
@ -691,17 +694,17 @@ static void create_volumes_pane(GtkWidget *top)
w_extfs = make_file_entry(box, STR_EXTFS_CTRL, "extfs", true); w_extfs = make_file_entry(box, STR_EXTFS_CTRL, "extfs", true);
static const opt_desc options[] = { static const combo_desc options[] = {
{STR_BOOT_ANY_LAB, G_CALLBACK(mn_boot_any)}, STR_BOOT_ANY_LAB,
{STR_BOOT_CDROM_LAB, G_CALLBACK(mn_boot_cdrom)}, STR_BOOT_CDROM_LAB,
{0, NULL} 0
}; };
int bootdriver = PrefsFindInt32("bootdriver"), active = 0; int bootdriver = PrefsFindInt32("bootdriver"), active = 0;
switch (bootdriver) { switch (bootdriver) {
case 0: active = 0; break; case 0: active = 0; break;
case CDROMRefNum: active = 1; break; case CDROMRefNum: active = 1; break;
} }
make_option_menu(box, STR_BOOTDRIVER_CTRL, options, active); make_option_menu(box, STR_BOOTDRIVER_CTRL, options, G_CALLBACK(mn_bootdriver), active);
make_checkbox(box, STR_NOCDROM_CTRL, "nocdrom", G_CALLBACK(tb_nocdrom)); make_checkbox(box, STR_NOCDROM_CTRL, "nocdrom", G_CALLBACK(tb_nocdrom));
} }
@ -895,28 +898,31 @@ static void hide_show_graphics_widgets(void)
} }
} }
// "Window" video type selected // "Window"/"Fullscreen" video type selected
static void mn_window(...) static void mn_display(GtkWidget *widget)
{ {
display_type = DISPLAY_WINDOW; if (gtk_combo_box_get_active(GTK_COMBO_BOX(widget)))
hide_show_graphics_widgets(); display_type = DISPLAY_SCREEN;
} else
display_type = DISPLAY_WINDOW;
// "Fullscreen" video type selected
static void mn_fullscreen(...)
{
display_type = DISPLAY_SCREEN;
hide_show_graphics_widgets();
} }
// "5 Hz".."60Hz" selected // "5 Hz".."60Hz" selected
static void mn_5hz(...) {PrefsReplaceInt32("frameskip", 12);} static void mn_frameskip(GtkWidget *widget)
static void mn_7hz(...) {PrefsReplaceInt32("frameskip", 8);} {
static void mn_10hz(...) {PrefsReplaceInt32("frameskip", 6);} int frameskip = 1;
static void mn_15hz(...) {PrefsReplaceInt32("frameskip", 4);} switch(gtk_combo_box_get_active(GTK_COMBO_BOX(widget)))
static void mn_30hz(...) {PrefsReplaceInt32("frameskip", 2);} {
static void mn_60hz(...) {PrefsReplaceInt32("frameskip", 1);} case 0: frameskip = 12; break;
static void mn_dynamic(...) {PrefsReplaceInt32("frameskip", 0);} case 1: frameskip = 8; break;
case 2: frameskip = 6; break;
case 3: frameskip = 4; break;
case 4: frameskip = 2; break;
case 5: frameskip = 1; break;
case 6: frameskip = 0; break;
}
PrefsReplaceInt32("frameskip", frameskip);
}
// Set sensitivity of widgets // Set sensitivity of widgets
static void set_graphics_sensitive(void) static void set_graphics_sensitive(void)
@ -1000,7 +1006,7 @@ static void read_graphics_settings(void)
// Create "Graphics/Sound" pane // Create "Graphics/Sound" pane
static void create_graphics_pane(GtkWidget *top) static void create_graphics_pane(GtkWidget *top)
{ {
GtkWidget *box, *table, *label, *opt, *menu; GtkWidget *box, *table, *label, *combo;
char str[32]; char str[32];
parse_graphics_prefs(); parse_graphics_prefs();
@ -1012,36 +1018,34 @@ static void create_graphics_pane(GtkWidget *top)
gtk_widget_show(label); gtk_widget_show(label);
gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 4); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 4);
opt = gtk_option_menu_new(); combo = gtk_combo_box_new_text();
gtk_widget_show(opt); gtk_widget_show(combo);
menu = gtk_menu_new(); gtk_combo_box_append_text(GTK_COMBO_BOX(combo), GetString(STR_WINDOW_LAB));
add_menu_item(menu, STR_WINDOW_LAB, G_CALLBACK(mn_window)); gtk_combo_box_append_text(GTK_COMBO_BOX(combo), GetString(STR_FULLSCREEN_LAB));
add_menu_item(menu, STR_FULLSCREEN_LAB, G_CALLBACK(mn_fullscreen));
switch (display_type) { switch (display_type) {
case DISPLAY_WINDOW: case DISPLAY_WINDOW:
gtk_menu_set_active(GTK_MENU(menu), 0); gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0);
break; break;
case DISPLAY_SCREEN: case DISPLAY_SCREEN:
gtk_menu_set_active(GTK_MENU(menu), 1); gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 1);
break; break;
} }
gtk_option_menu_set_menu(GTK_OPTION_MENU(opt), menu); g_signal_connect(combo, "changed", G_CALLBACK(mn_display), NULL);
gtk_table_attach(GTK_TABLE(table), opt, 1, 2, 0, 1, (GtkAttachOptions)GTK_FILL, (GtkAttachOptions)0, 4, 4); gtk_table_attach(GTK_TABLE(table), combo, 1, 2, 0, 1, (GtkAttachOptions)GTK_FILL, (GtkAttachOptions)0, 4, 4);
l_frameskip = gtk_label_new(GetString(STR_FRAMESKIP_CTRL)); l_frameskip = gtk_label_new(GetString(STR_FRAMESKIP_CTRL));
gtk_widget_show(l_frameskip); gtk_widget_show(l_frameskip);
gtk_table_attach(GTK_TABLE(table), l_frameskip, 0, 1, 1, 2, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 4); gtk_table_attach(GTK_TABLE(table), l_frameskip, 0, 1, 1, 2, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 4);
w_frameskip = gtk_option_menu_new(); w_frameskip = gtk_combo_box_new_text();
gtk_widget_show(w_frameskip); gtk_widget_show(w_frameskip);
menu = gtk_menu_new(); gtk_combo_box_append_text(GTK_COMBO_BOX(w_frameskip), GetString(STR_REF_5HZ_LAB));
add_menu_item(menu, STR_REF_5HZ_LAB, G_CALLBACK(mn_5hz)); gtk_combo_box_append_text(GTK_COMBO_BOX(w_frameskip), GetString(STR_REF_7_5HZ_LAB));
add_menu_item(menu, STR_REF_7_5HZ_LAB, G_CALLBACK(mn_7hz)); gtk_combo_box_append_text(GTK_COMBO_BOX(w_frameskip), GetString(STR_REF_10HZ_LAB));
add_menu_item(menu, STR_REF_10HZ_LAB, G_CALLBACK(mn_10hz)); gtk_combo_box_append_text(GTK_COMBO_BOX(w_frameskip), GetString(STR_REF_15HZ_LAB));
add_menu_item(menu, STR_REF_15HZ_LAB, G_CALLBACK(mn_15hz)); gtk_combo_box_append_text(GTK_COMBO_BOX(w_frameskip), GetString(STR_REF_30HZ_LAB));
add_menu_item(menu, STR_REF_30HZ_LAB, G_CALLBACK(mn_30hz)); gtk_combo_box_append_text(GTK_COMBO_BOX(w_frameskip), GetString(STR_REF_60HZ_LAB));
add_menu_item(menu, STR_REF_60HZ_LAB, G_CALLBACK(mn_60hz)); gtk_combo_box_append_text(GTK_COMBO_BOX(w_frameskip), GetString(STR_REF_DYNAMIC_LAB));
add_menu_item(menu, STR_REF_DYNAMIC_LAB, G_CALLBACK(mn_dynamic));
int frameskip = PrefsFindInt32("frameskip"); int frameskip = PrefsFindInt32("frameskip");
int item = -1; int item = -1;
switch (frameskip) { switch (frameskip) {
@ -1054,8 +1058,8 @@ static void create_graphics_pane(GtkWidget *top)
case 0: item = 6; break; case 0: item = 6; break;
} }
if (item >= 0) if (item >= 0)
gtk_menu_set_active(GTK_MENU(menu), item); gtk_combo_box_set_active(GTK_COMBO_BOX(w_frameskip), item);
gtk_option_menu_set_menu(GTK_OPTION_MENU(w_frameskip), menu); g_signal_connect(combo, "changed", G_CALLBACK(mn_display), NULL);
gtk_table_attach(GTK_TABLE(table), w_frameskip, 1, 2, 1, 2, (GtkAttachOptions)GTK_FILL, (GtkAttachOptions)0, 4, 4); gtk_table_attach(GTK_TABLE(table), w_frameskip, 1, 2, 1, 2, (GtkAttachOptions)GTK_FILL, (GtkAttachOptions)0, 4, 4);
l_display_x = gtk_label_new(GetString(STR_DISPLAY_X_CTRL)); l_display_x = gtk_label_new(GetString(STR_DISPLAY_X_CTRL));
@ -1142,8 +1146,11 @@ static void tb_keycodes(GtkWidget *widget)
} }
// "Mouse Wheel Mode" selected // "Mouse Wheel Mode" selected
static void mn_wheel_page(...) {PrefsReplaceInt32("mousewheelmode", 0); set_input_sensitive();} static void mn_wheelmode(GtkWidget *widget)
static void mn_wheel_cursor(...) {PrefsReplaceInt32("mousewheelmode", 1); set_input_sensitive();} {
PrefsReplaceInt32("mousewheelmode", gtk_combo_box_get_active(GTK_COMBO_BOX(widget)));
set_input_sensitive();
}
// Read settings from widgets and set preferences // Read settings from widgets and set preferences
static void read_input_settings(void) static void read_input_settings(void)
@ -1190,17 +1197,17 @@ static void create_input_pane(GtkWidget *top)
make_separator(box); make_separator(box);
static const opt_desc options[] = { static const combo_desc options[] = {
{STR_MOUSEWHEELMODE_PAGE_LAB, G_CALLBACK(mn_wheel_page)}, STR_MOUSEWHEELMODE_PAGE_LAB,
{STR_MOUSEWHEELMODE_CURSOR_LAB, G_CALLBACK(mn_wheel_cursor)}, STR_MOUSEWHEELMODE_CURSOR_LAB,
{0, NULL} 0
}; };
int wheelmode = PrefsFindInt32("mousewheelmode"), active = 0; int wheelmode = PrefsFindInt32("mousewheelmode"), active = 0;
switch (wheelmode) { switch (wheelmode) {
case 0: active = 0; break; case 0: active = 0; break;
case 1: active = 1; break; case 1: active = 1; break;
} }
make_option_menu(box, STR_MOUSEWHEELMODE_CTRL, options, active); make_option_menu(box, STR_MOUSEWHEELMODE_CTRL, options, G_CALLBACK(mn_wheelmode), active);
hbox = gtk_hbox_new(FALSE, 4); hbox = gtk_hbox_new(FALSE, 4);
gtk_widget_show(hbox); gtk_widget_show(hbox);
@ -1444,15 +1451,28 @@ static void tb_ignoresegv(GtkWidget *widget)
} }
// Model ID selected // Model ID selected
static void mn_modelid_5(...) {PrefsReplaceInt32("modelid", 5);} static void mn_modelid(GtkWidget *widget)
static void mn_modelid_14(...) {PrefsReplaceInt32("modelid", 14);} {
if (gtk_combo_box_get_active(GTK_COMBO_BOX(widget)))
PrefsReplaceInt32("modelid", 14);
else
PrefsReplaceInt32("modelid", 5);
}
// CPU/FPU type // CPU/FPU type
static void mn_cpu_68020(...) {PrefsReplaceInt32("cpu", 2); PrefsReplaceBool("fpu", false);} static void mn_cpu(GtkWidget *widget){
static void mn_cpu_68020_fpu(...) {PrefsReplaceInt32("cpu", 2); PrefsReplaceBool("fpu", true);} int cpu = 4;
static void mn_cpu_68030(...) {PrefsReplaceInt32("cpu", 3); PrefsReplaceBool("fpu", false);} bool fpu = true;
static void mn_cpu_68030_fpu(...) {PrefsReplaceInt32("cpu", 3); PrefsReplaceBool("fpu", true);} switch (gtk_combo_box_get_active(GTK_COMBO_BOX(widget)))
static void mn_cpu_68040(...) {PrefsReplaceInt32("cpu", 4); PrefsReplaceBool("fpu", true);} {
case 0: fpu = false;
case 1: cpu = 2; break;
case 2: fpu = false;
case 3: cpu = 3; break;
}
PrefsReplaceInt32("cpu", cpu);
PrefsReplaceBool("fpu", fpu);
}
// Read settings from widgets and set preferences // Read settings from widgets and set preferences
static void read_memory_settings(void) static void read_memory_settings(void)
@ -1493,26 +1513,26 @@ static void create_memory_pane(GtkWidget *top)
sprintf(default_ramsize, "%d", PrefsFindInt32("ramsize") >> 20); sprintf(default_ramsize, "%d", PrefsFindInt32("ramsize") >> 20);
w_ramsize = table_make_combobox(table, 0, STR_RAMSIZE_CTRL, default_ramsize, options); w_ramsize = table_make_combobox(table, 0, STR_RAMSIZE_CTRL, default_ramsize, options);
static const opt_desc model_options[] = { static const combo_desc model_options[] = {
{STR_MODELID_5_LAB, G_CALLBACK(mn_modelid_5)}, STR_MODELID_5_LAB,
{STR_MODELID_14_LAB, G_CALLBACK(mn_modelid_14)}, STR_MODELID_14_LAB,
{0, NULL} 0
}; };
int modelid = PrefsFindInt32("modelid"), active = 0; int modelid = PrefsFindInt32("modelid"), active = 0;
switch (modelid) { switch (modelid) {
case 5: active = 0; break; case 5: active = 0; break;
case 14: active = 1; break; case 14: active = 1; break;
} }
table_make_option_menu(table, 2, STR_MODELID_CTRL, model_options, active); table_make_option_menu(table, 2, STR_MODELID_CTRL, model_options, G_CALLBACK(mn_modelid), active);
#if EMULATED_68K #if EMULATED_68K
static const opt_desc cpu_options[] = { static const combo_desc cpu_options[] = {
{STR_CPU_68020_LAB, G_CALLBACK(mn_cpu_68020)}, STR_CPU_68020_LAB,
{STR_CPU_68020_FPU_LAB, G_CALLBACK(mn_cpu_68020_fpu)}, STR_CPU_68020_FPU_LAB,
{STR_CPU_68030_LAB, G_CALLBACK(mn_cpu_68030)}, STR_CPU_68030_LAB,
{STR_CPU_68030_FPU_LAB, G_CALLBACK(mn_cpu_68030_fpu)}, STR_CPU_68030_FPU_LAB,
{STR_CPU_68040_LAB, G_CALLBACK(mn_cpu_68040)}, STR_CPU_68040_LAB,
{0, NULL} 0
}; };
int cpu = PrefsFindInt32("cpu"); int cpu = PrefsFindInt32("cpu");
bool fpu = PrefsFindBool("fpu"); bool fpu = PrefsFindBool("fpu");
@ -1522,7 +1542,7 @@ static void create_memory_pane(GtkWidget *top)
case 3: active = fpu ? 3 : 2; break; case 3: active = fpu ? 3 : 2; break;
case 4: active = 4; case 4: active = 4;
} }
table_make_option_menu(table, 3, STR_CPU_CTRL, cpu_options, active); table_make_option_menu(table, 3, STR_CPU_CTRL, cpu_options, G_CALLBACK(mn_cpu), active);
#endif #endif
w_rom_file = table_make_file_entry(table, 4, STR_ROM_FILE_CTRL, "rom"); w_rom_file = table_make_file_entry(table, 4, STR_ROM_FILE_CTRL, "rom");

View File

@ -197,29 +197,6 @@ static GtkWidget *make_table(GtkWidget *top, int x, int y)
return table; return table;
} }
static GtkWidget *table_make_option_menu(GtkWidget *table, int row, int label_id, const opt_desc *options, int active)
{
GtkWidget *label, *opt, *menu;
label = gtk_label_new(GetString(label_id));
gtk_widget_show(label);
gtk_table_attach(GTK_TABLE(table), label, 0, 1, row, row + 1, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 4);
opt = gtk_option_menu_new();
gtk_widget_show(opt);
menu = gtk_menu_new();
while (options->label_id) {
add_menu_item(menu, options->label_id, options->func);
options++;
}
gtk_menu_set_active(GTK_MENU(menu), active);
gtk_option_menu_set_menu(GTK_OPTION_MENU(opt), menu);
gtk_table_attach(GTK_TABLE(table), opt, 1, 2, row, row + 1, (GtkAttachOptions)(GTK_FILL | GTK_EXPAND), (GtkAttachOptions)0, 4, 4);
return menu;
}
static GtkWidget *table_make_combobox(GtkWidget *table, int row, int label_id, const char *pref, GList *list) static GtkWidget *table_make_combobox(GtkWidget *table, int row, int label_id, const char *pref, GList *list)
{ {
GtkWidget *label, *combo; GtkWidget *label, *combo;
@ -282,9 +259,9 @@ static GtkWidget *table_make_file_entry(GtkWidget *table, int row, int label_id,
return entry; return entry;
} }
static GtkWidget *make_option_menu(GtkWidget *top, int label_id, const opt_desc *options, int active) static GtkWidget *make_option_menu(GtkWidget *top, int label_id, const combo_desc *options, GCallback func, int active)
{ {
GtkWidget *box, *label, *opt, *menu; GtkWidget *box, *label, *combo;
box = gtk_hbox_new(FALSE, 4); box = gtk_hbox_new(FALSE, 4);
gtk_widget_show(box); gtk_widget_show(box);
@ -294,19 +271,16 @@ static GtkWidget *make_option_menu(GtkWidget *top, int label_id, const opt_desc
gtk_widget_show(label); gtk_widget_show(label);
gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0);
opt = gtk_option_menu_new(); combo = gtk_combo_box_new_text();
gtk_widget_show(opt); gtk_widget_show(combo);
menu = gtk_menu_new();
while (options->label_id) { while (options->label_id) {
add_menu_item(menu, options->label_id, options->func); gtk_combo_box_append_text(GTK_COMBO_BOX(combo), GetString(options->label_id));
options++; options++;
} }
gtk_menu_set_active(GTK_MENU(menu), active); gtk_combo_box_set_active(GTK_COMBO_BOX(combo), active);
gtk_box_pack_start(GTK_BOX(box), combo, FALSE, FALSE, 0);
gtk_option_menu_set_menu(GTK_OPTION_MENU(opt), menu); g_signal_connect(combo, "changed", func, NULL);
gtk_box_pack_start(GTK_BOX(box), opt, FALSE, FALSE, 0); return combo;
return menu;
} }
static GtkWidget *make_file_entry(GtkWidget *top, int label_id, const char *prefs_item, bool only_dirs = false) static GtkWidget *make_file_entry(GtkWidget *top, int label_id, const char *prefs_item, bool only_dirs = false)
@ -607,8 +581,13 @@ static void cb_remove_volume(...)
} }
// "Boot From" selected // "Boot From" selected
static void mn_boot_any(...) {PrefsReplaceInt32("bootdriver", 0);} static void mn_bootdriver(GtkWidget *widget)
static void mn_boot_cdrom(...) {PrefsReplaceInt32("bootdriver", CDROMRefNum);} {
if (gtk_combo_box_get_active(GTK_COMBO_BOX(widget)))
PrefsReplaceInt32("bootdriver", CDROMRefNum);
else
PrefsReplaceInt32("bootdriver", 0);
}
// "No CD-ROM Driver" button toggled // "No CD-ROM Driver" button toggled
static void tb_nocdrom(GtkWidget *widget) static void tb_nocdrom(GtkWidget *widget)
@ -666,17 +645,17 @@ static void create_volumes_pane(GtkWidget *top)
w_extfs = make_file_entry(box, STR_EXTFS_CTRL, "extfs", true); w_extfs = make_file_entry(box, STR_EXTFS_CTRL, "extfs", true);
static const opt_desc options[] = { static const combo_desc options[] = {
{STR_BOOT_ANY_LAB, G_CALLBACK(mn_boot_any)}, STR_BOOT_ANY_LAB,
{STR_BOOT_CDROM_LAB, G_CALLBACK(mn_boot_cdrom)}, STR_BOOT_CDROM_LAB,
{0, NULL} 0
}; };
int bootdriver = PrefsFindInt32("bootdriver"), active = 0; int bootdriver = PrefsFindInt32("bootdriver"), active = 0;
switch (bootdriver) { switch (bootdriver) {
case 0: active = 0; break; case 0: active = 0; break;
case CDROMRefNum: active = 1; break; case CDROMRefNum: active = 1; break;
} }
menu = make_option_menu(box, STR_BOOTDRIVER_CTRL, options, active); menu = make_option_menu(box, STR_BOOTDRIVER_CTRL, options, G_CALLBACK(mn_bootdriver), active);
make_checkbox(box, STR_NOCDROM_CTRL, "nocdrom", G_CALLBACK(tb_nocdrom)); make_checkbox(box, STR_NOCDROM_CTRL, "nocdrom", G_CALLBACK(tb_nocdrom));
} }
@ -767,40 +746,30 @@ static bool is_fbdev_dga_mode = false;
static GtkWidget *w_dspdevice_file, *w_mixerdevice_file; static GtkWidget *w_dspdevice_file, *w_mixerdevice_file;
// Hide/show graphics widgets // "Window"/"Fullscreen" video type selected
static void hide_show_graphics_widgets(void) static void mn_display(GtkWidget *widget)
{ {
switch (display_type) { if (gtk_combo_box_get_active(GTK_COMBO_BOX(widget)))
case DISPLAY_WINDOW: display_type = DISPLAY_SCREEN;
gtk_widget_show(w_frameskip); gtk_widget_show(l_frameskip); else
break; display_type = DISPLAY_WINDOW;
case DISPLAY_SCREEN:
gtk_widget_hide(w_frameskip); gtk_widget_hide(l_frameskip);
break;
}
}
// "Window" video type selected
static void mn_window(...)
{
display_type = DISPLAY_WINDOW;
hide_show_graphics_widgets();
}
// "Fullscreen" video type selected
static void mn_fullscreen(...)
{
display_type = DISPLAY_SCREEN;
hide_show_graphics_widgets();
} }
// "5 Hz".."60Hz" selected // "5 Hz".."60Hz" selected
static void mn_5hz(...) {PrefsReplaceInt32("frameskip", 12);} static void mn_frameskip(GtkWidget *widget)
static void mn_7hz(...) {PrefsReplaceInt32("frameskip", 8);} {
static void mn_10hz(...) {PrefsReplaceInt32("frameskip", 6);} int frameskip = 1;
static void mn_15hz(...) {PrefsReplaceInt32("frameskip", 4);} switch(gtk_combo_box_get_active(GTK_COMBO_BOX(widget)))
static void mn_30hz(...) {PrefsReplaceInt32("frameskip", 2);} {
static void mn_60hz(...) {PrefsReplaceInt32("frameskip", 1);} case 0: frameskip = 12; break;
case 1: frameskip = 8; break;
case 2: frameskip = 6; break;
case 3: frameskip = 4; break;
case 4: frameskip = 2; break;
case 5: frameskip = 1; break;
}
PrefsReplaceInt32("frameskip", frameskip);
}
// QuickDraw acceleration // QuickDraw acceleration
static void tb_gfxaccel(GtkWidget *widget) static void tb_gfxaccel(GtkWidget *widget)
@ -925,7 +894,7 @@ static void read_graphics_settings(void)
// Create "Graphics/Sound" pane // Create "Graphics/Sound" pane
static void create_graphics_pane(GtkWidget *top) static void create_graphics_pane(GtkWidget *top)
{ {
GtkWidget *box, *table, *label, *opt, *menu, *combo; GtkWidget *box, *table, *label, *combo;
char str[32]; char str[32];
parse_graphics_prefs(); parse_graphics_prefs();
@ -937,35 +906,33 @@ static void create_graphics_pane(GtkWidget *top)
gtk_widget_show(label); gtk_widget_show(label);
gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 4); gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 4);
opt = gtk_option_menu_new(); combo = gtk_combo_box_new_text();
gtk_widget_show(opt); gtk_widget_show(combo);
menu = gtk_menu_new(); gtk_combo_box_append_text(GTK_COMBO_BOX(combo), GetString(STR_WINDOW_CTRL));
add_menu_item(menu, STR_WINDOW_CTRL, G_CALLBACK(mn_window)); gtk_combo_box_append_text(GTK_COMBO_BOX(combo), GetString(STR_FULLSCREEN_CTRL));
add_menu_item(menu, STR_FULLSCREEN_CTRL, G_CALLBACK(mn_fullscreen));
switch (display_type) { switch (display_type) {
case DISPLAY_WINDOW: case DISPLAY_WINDOW:
gtk_menu_set_active(GTK_MENU(menu), 0); gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0);
break; break;
case DISPLAY_SCREEN: case DISPLAY_SCREEN:
gtk_menu_set_active(GTK_MENU(menu), 1); gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 1);
break; break;
} }
gtk_option_menu_set_menu(GTK_OPTION_MENU(opt), menu); g_signal_connect(combo, "changed", G_CALLBACK(mn_display), NULL);
gtk_table_attach(GTK_TABLE(table), opt, 1, 2, 0, 1, (GtkAttachOptions)GTK_FILL, (GtkAttachOptions)0, 4, 4); gtk_table_attach(GTK_TABLE(table), combo, 1, 2, 0, 1, (GtkAttachOptions)GTK_FILL, (GtkAttachOptions)0, 4, 4);
l_frameskip = gtk_label_new(GetString(STR_FRAMESKIP_CTRL)); l_frameskip = gtk_label_new(GetString(STR_FRAMESKIP_CTRL));
gtk_widget_show(l_frameskip); gtk_widget_show(l_frameskip);
gtk_table_attach(GTK_TABLE(table), l_frameskip, 0, 1, 1, 2, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 4); gtk_table_attach(GTK_TABLE(table), l_frameskip, 0, 1, 1, 2, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 4);
w_frameskip = gtk_option_menu_new(); w_frameskip = gtk_combo_box_new_text();
gtk_widget_show(w_frameskip); gtk_widget_show(w_frameskip);
menu = gtk_menu_new(); gtk_combo_box_append_text(GTK_COMBO_BOX(w_frameskip), GetString(STR_REF_5HZ_LAB));
add_menu_item(menu, STR_REF_5HZ_LAB, G_CALLBACK(mn_5hz)); gtk_combo_box_append_text(GTK_COMBO_BOX(w_frameskip), GetString(STR_REF_7_5HZ_LAB));
add_menu_item(menu, STR_REF_7_5HZ_LAB, G_CALLBACK(mn_7hz)); gtk_combo_box_append_text(GTK_COMBO_BOX(w_frameskip), GetString(STR_REF_10HZ_LAB));
add_menu_item(menu, STR_REF_10HZ_LAB, G_CALLBACK(mn_10hz)); gtk_combo_box_append_text(GTK_COMBO_BOX(w_frameskip), GetString(STR_REF_15HZ_LAB));
add_menu_item(menu, STR_REF_15HZ_LAB, G_CALLBACK(mn_15hz)); gtk_combo_box_append_text(GTK_COMBO_BOX(w_frameskip), GetString(STR_REF_30HZ_LAB));
add_menu_item(menu, STR_REF_30HZ_LAB, G_CALLBACK(mn_30hz)); gtk_combo_box_append_text(GTK_COMBO_BOX(w_frameskip), GetString(STR_REF_60HZ_LAB));
add_menu_item(menu, STR_REF_60HZ_LAB, G_CALLBACK(mn_60hz));
int frameskip = PrefsFindInt32("frameskip"); int frameskip = PrefsFindInt32("frameskip");
int item = -1; int item = -1;
switch (frameskip) { switch (frameskip) {
@ -978,8 +945,8 @@ static void create_graphics_pane(GtkWidget *top)
case 0: item = 5; break; case 0: item = 5; break;
} }
if (item >= 0) if (item >= 0)
gtk_menu_set_active(GTK_MENU(menu), item); gtk_combo_box_set_active(GTK_COMBO_BOX(w_frameskip), item);
gtk_option_menu_set_menu(GTK_OPTION_MENU(w_frameskip), menu); g_signal_connect(combo, "changed", G_CALLBACK(mn_frameskip), NULL);
gtk_table_attach(GTK_TABLE(table), w_frameskip, 1, 2, 1, 2, (GtkAttachOptions)GTK_FILL, (GtkAttachOptions)0, 4, 4); gtk_table_attach(GTK_TABLE(table), w_frameskip, 1, 2, 1, 2, (GtkAttachOptions)GTK_FILL, (GtkAttachOptions)0, 4, 4);
l_display_x = gtk_label_new(GetString(STR_DISPLAY_X_CTRL)); l_display_x = gtk_label_new(GetString(STR_DISPLAY_X_CTRL));
@ -1026,8 +993,6 @@ static void create_graphics_pane(GtkWidget *top)
w_mixerdevice_file = make_file_entry(box, STR_MIXERDEVICE_FILE_CTRL, "mixer"); w_mixerdevice_file = make_file_entry(box, STR_MIXERDEVICE_FILE_CTRL, "mixer");
set_graphics_sensitive(); set_graphics_sensitive();
hide_show_graphics_widgets();
} }
@ -1055,8 +1020,11 @@ static void tb_keycodes(GtkWidget *widget)
} }
// "Mouse Wheel Mode" selected // "Mouse Wheel Mode" selected
static void mn_wheel_page(...) {PrefsReplaceInt32("mousewheelmode", 0); set_input_sensitive();} static void mn_wheelmode(GtkWidget *widget)
static void mn_wheel_cursor(...) {PrefsReplaceInt32("mousewheelmode", 1); set_input_sensitive();} {
PrefsReplaceInt32("mousewheelmode", gtk_combo_box_get_active(GTK_COMBO_BOX(widget)));
set_input_sensitive();
}
// Read settings from widgets and set preferences // Read settings from widgets and set preferences
static void read_input_settings(void) static void read_input_settings(void)
@ -1103,17 +1071,17 @@ static void create_input_pane(GtkWidget *top)
make_separator(box); make_separator(box);
static const opt_desc options[] = { static const combo_desc options[] = {
{STR_MOUSEWHEELMODE_PAGE_LAB, G_CALLBACK(mn_wheel_page)}, STR_MOUSEWHEELMODE_PAGE_LAB,
{STR_MOUSEWHEELMODE_CURSOR_LAB, G_CALLBACK(mn_wheel_cursor)}, STR_MOUSEWHEELMODE_CURSOR_LAB,
{0, NULL} 0
}; };
int wheelmode = PrefsFindInt32("mousewheelmode"), active = 0; int wheelmode = PrefsFindInt32("mousewheelmode"), active = 0;
switch (wheelmode) { switch (wheelmode) {
case 0: active = 0; break; case 0: active = 0; break;
case 1: active = 1; break; case 1: active = 1; break;
} }
menu = make_option_menu(box, STR_MOUSEWHEELMODE_CTRL, options, active); menu = make_option_menu(box, STR_MOUSEWHEELMODE_CTRL, options, G_CALLBACK(mn_wheelmode), active);
hbox = gtk_hbox_new(FALSE, 4); hbox = gtk_hbox_new(FALSE, 4);
gtk_widget_show(hbox); gtk_widget_show(hbox);