--- np2/x11/gtk2/dialog_sound.c 2007/01/23 15:48:20 1.5 +++ np2/x11/gtk2/dialog_sound.c 2009/09/28 13:47:12 1.7 @@ -1,4 +1,4 @@ -/* $Id: dialog_sound.c,v 1.5 2007/01/23 15:48:20 monaka Exp $ */ +/* $Id: dialog_sound.c,v 1.7 2009/09/28 13:47:12 monaka Exp $ */ /* * Copyright (c) 2002-2004 NONAKA Kimihiro @@ -279,6 +279,18 @@ static UINT8 joypad_axis[JOY_NAXIS]; static UINT8 joypad_button[JOY_NBUTTON]; +/* + * Driver + */ + +static const char *driver_name[SNDDRV_DRVMAX] = { + "None", + "SDL", +}; + +static int driver_snddrv; + + static void ok_button_clicked(GtkButton *b, gpointer d) { @@ -560,6 +572,18 @@ ok_button_clicked(GtkButton *b, gpointer } } + /* Driver */ + renewal = FALSE; + if (np2oscfg.snddrv != driver_snddrv) { + np2oscfg.snddrv = driver_snddrv; + renewal = TRUE; + } + + if (renewal) { + sysmng_update(SYS_UPDATEOSCFG); + soundrenewal = 1; + } + gtk_widget_destroy((GtkWidget *)d); } @@ -647,6 +671,15 @@ spb_default_button_clicked(GtkButton *b, } } +static void +driver_radiobutton_clicked(GtkButton *b, gpointer d) +{ + + UNUSED(b); + + driver_snddrv = (int)d; +} + static GtkWidget * create_mixer_note(void) { @@ -693,7 +726,7 @@ create_mixer_note(void) gtk_widget_show(mixer_default_button); gtk_box_pack_end(GTK_BOX(hbox), mixer_default_button, FALSE, FALSE, 5); g_signal_connect_swapped(GTK_OBJECT(mixer_default_button), "clicked", - GTK_SIGNAL_FUNC(mixer_default_button_clicked), NULL); + G_CALLBACK(mixer_default_button_clicked), NULL); return root_widget; } @@ -741,7 +774,7 @@ create_pc9801_14_note(void) gtk_widget_show(snd14_default_button); gtk_box_pack_end(GTK_BOX(hbox), snd14_default_button, FALSE, FALSE, 5); g_signal_connect_swapped(GTK_OBJECT(snd14_default_button), "clicked", - GTK_SIGNAL_FUNC(snd14_default_button_clicked), NULL); + G_CALLBACK(snd14_default_button_clicked), NULL); return root_widget; } @@ -835,7 +868,7 @@ create_pc9801_26_note(void) gtk_widget_show(snd26_default_button); gtk_box_pack_end(GTK_BOX(hbox), snd26_default_button, FALSE, FALSE, 5); g_signal_connect_swapped(GTK_OBJECT(snd26_default_button), "clicked", - GTK_SIGNAL_FUNC(snd26_default_button_clicked), NULL); + G_CALLBACK(snd26_default_button_clicked), NULL); return root_widget; } @@ -937,7 +970,7 @@ create_pc9801_86_note(void) gtk_widget_show(snd86_default_button); gtk_box_pack_end(GTK_BOX(hbox), snd86_default_button, FALSE, FALSE, 5); g_signal_connect_swapped(GTK_OBJECT(snd86_default_button), "clicked", - GTK_SIGNAL_FUNC(snd86_default_button_clicked), NULL); + G_CALLBACK(snd86_default_button_clicked), NULL); return root_widget; } @@ -1065,7 +1098,7 @@ create_spb_note(void) gtk_widget_show(spb_default_button); gtk_box_pack_end(GTK_BOX(hbox), spb_default_button, FALSE, FALSE, 5); g_signal_connect_swapped(GTK_OBJECT(spb_default_button), "clicked", - GTK_SIGNAL_FUNC(spb_default_button_clicked), NULL); + G_CALLBACK(spb_default_button_clicked), NULL); return root_widget; } @@ -1220,7 +1253,7 @@ create_joypad_note(void) gtk_widget_show(devlist_entry); gtk_editable_set_editable(GTK_EDITABLE(devlist_entry), FALSE); g_signal_connect(GTK_OBJECT(devlist_entry), "changed", - GTK_SIGNAL_FUNC(joypad_device_changed), (gpointer)joypad_devlist_combo); + G_CALLBACK(joypad_device_changed), (gpointer)joypad_devlist_combo); /* Axis */ for (i = 0; i < JOY_NAXIS; ++i) { @@ -1241,7 +1274,7 @@ create_joypad_note(void) gtk_editable_set_editable(GTK_EDITABLE(axis_entry[i]), FALSE); gtk_entry_set_text(GTK_ENTRY(axis_entry[i]), joypad_noconnect_str); g_signal_connect(GTK_OBJECT(axis_entry[i]), "changed", - GTK_SIGNAL_FUNC(joypad_axis_entry_changed), + G_CALLBACK(joypad_axis_entry_changed), (gpointer)(&joypad_axis[i])); } @@ -1264,7 +1297,7 @@ create_joypad_note(void) gtk_editable_set_editable(GTK_EDITABLE(button_entry[i]), FALSE); gtk_entry_set_text(GTK_ENTRY(button_entry[i]), joypad_noconnect_str); g_signal_connect(GTK_OBJECT(button_entry[i]), "changed", - GTK_SIGNAL_FUNC(joypad_button_entry_changed), + G_CALLBACK(joypad_button_entry_changed), (gpointer)(&joypad_button[i])); } @@ -1297,6 +1330,66 @@ create_joypad_note(void) return root_widget; } +static GtkWidget * +create_driver_note(void) +{ + GtkWidget *root_widget; + GtkWidget *driver_frame; + GtkWidget *driver_vbox; + GtkWidget *driver_radiobutton[SNDDRV_DRVMAX]; + GtkWidget *snddrv_hbox; + int i; + + root_widget = gtk_vbox_new(FALSE, 0); + gtk_container_set_border_width(GTK_CONTAINER(root_widget), 5); + gtk_widget_show(root_widget); + + driver_frame = gtk_frame_new("Sound driver"); + gtk_widget_show(driver_frame); + gtk_box_pack_start(GTK_BOX(root_widget), driver_frame, TRUE, TRUE, 0); + + driver_vbox = gtk_vbox_new(FALSE, 0); + gtk_container_set_border_width(GTK_CONTAINER(driver_vbox), 5); + gtk_widget_show(driver_vbox); + gtk_container_add(GTK_CONTAINER(driver_frame), driver_vbox); + + for (i = 0; i < SNDDRV_DRVMAX; i++) { + driver_radiobutton[i] = gtk_radio_button_new_with_label_from_widget(i > 0 ? GTK_RADIO_BUTTON(driver_radiobutton[i-1]) : NULL, driver_name[i]); + gtk_widget_show(driver_radiobutton[i]); + gtk_box_pack_start(GTK_BOX(driver_vbox), driver_radiobutton[i], TRUE, FALSE, 0); + g_signal_connect(GTK_OBJECT(driver_radiobutton[i]), "clicked", + G_CALLBACK(driver_radiobutton_clicked), GINT_TO_POINTER(i)); + } +#if !defined(USE_SDLAUDIO) && !defined(USE_SDLMIXER) + gtk_widget_set_sensitive(driver_radiobutton[SNDDRV_SDL], FALSE); +#endif + + switch (np2oscfg.snddrv) { + case SNDDRV_NODRV: +#if defined(USE_SDLAUDIO) || defined(USE_SDLMIXER) + case SNDDRV_SDL: +#endif + g_signal_emit_by_name(GTK_OBJECT(driver_radiobutton[np2oscfg.snddrv]), "clicked"); + break; + +#if !defined(USE_SDLAUDIO) && !defined(USE_SDLMIXER) + case SNDDRV_SDL: +#endif + case SNDDRV_DRVMAX: + default: + np2oscfg.snddrv = SNDDRV_NODRV; + sysmng_update(SYS_UPDATEOSCFG); + break; + } + + snddrv_hbox = gtk_hbox_new(FALSE, 0); + gtk_container_set_border_width(GTK_CONTAINER(snddrv_hbox), 5); + gtk_widget_show(snddrv_hbox); + gtk_box_pack_start(GTK_BOX(root_widget), snddrv_hbox, FALSE, FALSE, 0); + + return root_widget; +} + void create_sound_dialog(void) { @@ -1309,6 +1402,7 @@ create_sound_dialog(void) GtkWidget *pc9801_86_note; GtkWidget *spb_note; GtkWidget *joypad_note; + GtkWidget *driver_note; GtkWidget *confirm_widget; GtkWidget *ok_button; GtkWidget *cancel_button; @@ -1322,7 +1416,7 @@ create_sound_dialog(void) gtk_window_set_resizable(GTK_WINDOW(sound_dialog), FALSE); g_signal_connect(GTK_OBJECT(sound_dialog), "destroy", - GTK_SIGNAL_FUNC(dialog_destroy), NULL); + G_CALLBACK(dialog_destroy), NULL); main_vbox = gtk_vbox_new(FALSE, 0); gtk_widget_show(main_vbox); @@ -1356,6 +1450,10 @@ create_sound_dialog(void) joypad_note = create_joypad_note(); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), joypad_note, gtk_label_new("JoyPad")); + /* "Driver" note */ + driver_note = create_driver_note(); + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), driver_note, gtk_label_new("Driver")); + /* * OK, Cancel button */ @@ -1368,7 +1466,7 @@ create_sound_dialog(void) gtk_box_pack_end(GTK_BOX(confirm_widget), cancel_button, FALSE, FALSE, 0); GTK_WIDGET_SET_FLAGS(cancel_button, GTK_CAN_DEFAULT); g_signal_connect_swapped(GTK_OBJECT(cancel_button), "clicked", - GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(sound_dialog)); + G_CALLBACK(gtk_widget_destroy), GTK_OBJECT(sound_dialog)); ok_button = gtk_button_new_from_stock(GTK_STOCK_OK); gtk_widget_show(ok_button); @@ -1376,7 +1474,7 @@ create_sound_dialog(void) GTK_WIDGET_SET_FLAGS(ok_button, GTK_CAN_DEFAULT); GTK_WIDGET_SET_FLAGS(ok_button, GTK_HAS_DEFAULT); g_signal_connect(GTK_OBJECT(ok_button), "clicked", - GTK_SIGNAL_FUNC(ok_button_clicked), (gpointer)sound_dialog); + G_CALLBACK(ok_button_clicked), (gpointer)sound_dialog); gtk_widget_grab_default(ok_button); gtk_widget_show_all(sound_dialog);