view Plugins/Output/crossfade/interface.c @ 259:88b38e2414a1 trunk

[svn] First attempt at porting the crossfade plugin; patches from bug #363 applied, GThreadified, includes fixed. Will most probably not compile as of yet.
author chainsaw
date Sun, 04 Dec 2005 15:58:55 -0800
parents
children
line wrap: on
line source

/*
 * DO NOT EDIT THIS FILE - it is generated by Glade.
 */

#ifdef HAVE_CONFIG_H
#  include <config.h>
#endif

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>

#include <gdk/gdkkeysyms.h>
#include <gtk/gtk.h>

#include "callbacks.h"
#include "interface.h"
#include "support.h"

GtkWidget*
create_config_win (void)
{
  GtkWidget *config_win;
  GtkWidget *config_vbox;
  GtkWidget *config_notebook;
  GtkWidget *config_output_page;
  GtkWidget *output_options_hbox;
  GtkWidget *output_method_frame;
  GtkWidget *output_method_vbox;
  GSList *output_method_group_group = NULL;
  GtkWidget *output_oss_radio;
  GtkWidget *output_plugin_radio;
  GtkWidget *output_none_radio;
  GtkWidget *output_resampling_frame;
  GtkWidget *output_resampling_table;
  GtkWidget *resampling_rate_optionmenu;
  GtkWidget *resampling_rate_optionmenu_menu;
  GtkWidget *resampling_quality_optionmenu;
  GtkWidget *resampling_quality_optionmenu_menu;
  GtkWidget *resampling_rate_hbox;
  GtkWidget *resampling_rate_label;
  GtkWidget *resampling_quality_hbox;
  GtkWidget *resampling_quality_label;
  GtkWidget *output_notebook;
  GtkWidget *output_oss_page;
  GtkWidget *output_oss_notebook;
  GtkWidget *oss_device_page;
  GtkWidget *oss_adevice_frame;
  GtkWidget *oss_adevice_vbox;
  GtkWidget *oss_adevice_hbox;
  GtkWidget *oss_adevice_optionmenu;
  GtkWidget *oss_adevice_optionmenu_menu;
  GtkWidget *glade_menuitem;
  GtkWidget *oss_adevice_alt_hbox;
  GtkWidget *oss_adevice_alt_check;
  GtkWidget *oss_adevice_alt_entry;
  GtkWidget *oss_mdevice_frame;
  GtkWidget *oss_mdevice_vbox;
  GtkWidget *oss_mdevice_hbox;
  GtkWidget *oss_mdevice_optionmenu;
  GtkWidget *oss_mdevice_optionmenu_menu;
  GtkWidget *oss_mdevice_alt_hbox;
  GtkWidget *oss_mdevice_alt_check;
  GtkWidget *oss_mdevice_alt_entry;
  GtkWidget *oss_device_label;
  GtkWidget *oss_buffer_page;
  GtkWidget *oss_buffer_frame;
  GtkWidget *oss_buffer_vbox;
  GtkWidget *ossbuf_buffer_hbox;
  GtkWidget *ossbuf_buffer_label;
  GtkObject *ossbuf_buffer_spin_adj;
  GtkWidget *ossbuf_buffer_spin;
  GtkWidget *ossbuf_preload_hbox;
  GtkWidget *ossbuf_preload_label;
  GtkObject *ossbuf_preload_spin_adj;
  GtkWidget *ossbuf_preload_spin;
  GtkWidget *oss_hwbuf_frame;
  GtkWidget *oss_hwbuf_vbox;
  GtkWidget *osshwb_maxbuf_check;
  GtkWidget *osshwb_fragments_hbox;
  GtkWidget *osshwb_fragments_label;
  GtkObject *osshwb_fragments_spin_adj;
  GtkWidget *osshwb_fragments_spin;
  GtkWidget *osshwb_fragsize_hbox;
  GtkWidget *osshwb_fragsize_label;
  GtkObject *osshwb_fragsize_spin_adj;
  GtkWidget *osshwb_fragsize_spin;
  GtkWidget *oss_buffer_label;
  GtkWidget *oss_mixer_page;
  GtkWidget *oss_mixer_frame;
  GtkWidget *oss_mixer_vbox;
  GtkWidget *ossmixer_pcm_check;
  GtkWidget *oss_mixer_label;
  GtkWidget *output_plugin_page;
  GtkWidget *op_plugin_frame;
  GtkWidget *op_plugin_vbox;
  GtkWidget *op_plugin_optionmenu;
  GtkWidget *op_plugin_optionmenu_menu;
  GtkWidget *op_plugin_buttonbox;
  GtkWidget *op_configure_button;
  GtkWidget *op_about_button;
  GtkWidget *op_options_frame;
  GtkWidget *op_options_vbox;
  GtkWidget *op_throttle_check;
  GtkWidget *op_maxblock_hbox;
  GtkWidget *op_maxblock_check;
  GtkObject *op_maxblock_spin_adj;
  GtkWidget *op_maxblock_spin;
  GtkWidget *op_forcereopen_check;
  GtkWidget *empty_notebook_page;
  GtkWidget *output_help_label;
  GtkWidget *config_devices_label;
  GtkWidget *config_effects_page;
  GtkWidget *ep_plugin_frame;
  GtkWidget *ep_plugin_vbox;
  GtkWidget *ep_plugin_optionmenu;
  GtkWidget *ep_plugin_optionmenu_menu;
  GtkWidget *ep_plugin_buttonbox;
  GtkWidget *ep_configure_button;
  GtkWidget *ep_about_button;
  GtkWidget *ep_enable_check;
  GtkWidget *effects_volnorm_frame;
  GtkWidget *effects_volnorm_table;
  GtkWidget *volnorm_quantaudio_check;
  GtkObject *volnorm_target_spin_adj;
  GtkWidget *volnorm_target_spin;
  GtkWidget *volnorm_target_hbox;
  GtkWidget *volnorm_target_label;
  GtkWidget *volnorm_enable_check;
  GtkWidget *volnorm_rva2_check;
  GtkWidget *effects_help_label;
  GtkWidget *config_effects_label;
  GtkWidget *config_crossfader_page;
  GtkWidget *xf_bufsize_hbox;
  GtkWidget *xf_bufsize_label;
  GtkObject *xf_buffer_spin_adj;
  GtkWidget *xf_buffer_spin;
  GtkWidget *xf_autobuf_check;
  GtkWidget *xf_config_hbox;
  GtkWidget *xf_config_label;
  GtkWidget *xf_config_optionmenu;
  GtkWidget *xf_config_optionmenu_menu;
  GtkWidget *xf_type_hbox;
  GtkWidget *xf_type_label;
  GtkWidget *xf_type_optionmenu;
  GtkWidget *xf_type_optionmenu_menu;
  GtkWidget *xf_type_notebook;
  GtkWidget *xft_reopen_label;
  GtkWidget *xft_flush_page;
  GtkWidget *xftf_pause_frame;
  GtkWidget *xftf_pause_table;
  GtkWidget *xftfp_length_label;
  GtkObject *xftfp_length_spin_adj;
  GtkWidget *xftfp_length_spin;
  GtkWidget *xftfp_enable_check;
  GtkWidget *xftf_fadein_frame;
  GtkWidget *xftf_fadein_table;
  GtkWidget *xftffi_length_hbox;
  GtkWidget *xftffi_length_label;
  GtkWidget *xftffi_volume_hbox;
  GtkWidget *xftffi_volume_label;
  GtkObject *xftffi_length_spin_adj;
  GtkWidget *xftffi_length_spin;
  GtkWidget *xftffi_enable_check;
  GtkObject *xftffi_volume_spin_adj;
  GtkWidget *xftffi_volume_spin;
  GtkWidget *xft_flush_label;
  GtkWidget *xft_none_label;
  GtkWidget *xft_pause_page;
  GtkWidget *xf_pause_frame;
  GtkWidget *xf_pause_table;
  GtkWidget *pause_length_hbox;
  GtkWidget *pause_length_label;
  GtkObject *pause_length_spin_adj;
  GtkWidget *pause_length_spin;
  GtkWidget *xft_pause_label;
  GtkWidget *xft_simplexf_page;
  GtkWidget *xf_simple_frame;
  GtkWidget *xf_simple_table;
  GtkWidget *simple_length_hbox;
  GtkWidget *simple_length_label;
  GtkObject *simple_length_spin_adj;
  GtkWidget *simple_length_spin;
  GtkWidget *xft_simplexf_label;
  GtkWidget *xft_advancedxf_page;
  GtkWidget *xf_fadeout_frame;
  GtkWidget *xf_fadeout_table;
  GtkWidget *fadeout_length_hbox;
  GtkWidget *fadeout_length_label;
  GtkObject *fadeout_length_spin_adj;
  GtkWidget *fadeout_length_spin;
  GtkWidget *fadeout_volume_hbox;
  GtkWidget *fadeout_volume_label;
  GtkObject *fadeout_volume_spin_adj;
  GtkWidget *fadeout_volume_spin;
  GtkWidget *fadeout_options_hbox;
  GtkWidget *fadeout_enable_check;
  GtkWidget *xf_offset_frame;
  GtkWidget *xf_offset_table;
  GtkWidget *xfofs_custom_hbox;
  GSList *offset_group_group = NULL;
  GtkWidget *xfofs_custom_radiobutton;
  GtkObject *xfofs_custom_spin_adj;
  GtkWidget *xfofs_custom_spin;
  GtkWidget *xfofs_none_radiobutton;
  GtkWidget *xfofs_lockout_radiobutton;
  GtkWidget *xfofs_lockin_radiobutton;
  GtkWidget *xf_fadein_frame;
  GtkWidget *xf_fadein_table;
  GtkWidget *fadein_length_hbox;
  GtkWidget *fadein_length_label;
  GtkWidget *fadein_volume_hbox;
  GtkWidget *fadein_volume_label;
  GtkObject *fadein_length_spin_adj;
  GtkWidget *fadein_length_spin;
  GtkWidget *fadein_enable_check;
  GtkWidget *fadein_lock_check;
  GtkObject *fadein_volume_spin_adj;
  GtkWidget *fadein_volume_spin;
  GtkWidget *xft_advancedxf_label;
  GtkWidget *xft_fadein_page;
  GtkWidget *xftfi_fadein_frame;
  GtkWidget *xftfi_fadein_table;
  GtkWidget *xftfi_length_hbox;
  GtkWidget *xftfi_length_label;
  GtkWidget *xftfi_volume_hbox;
  GtkWidget *xftfi_volume_label;
  GtkObject *xftfi_length_spin_adj;
  GtkWidget *xftfi_length_spin;
  GtkObject *xftfi_volume_spin_adj;
  GtkWidget *xftfi_volume_spin;
  GtkWidget *xft_fadein_label;
  GtkWidget *xft_fadeout_page;
  GtkWidget *xftfo_fadeout_frame;
  GtkWidget *xftfo_fadeout_table;
  GtkWidget *xftfo_length_hbox;
  GtkWidget *xftfo_length_label;
  GtkObject *xftfo_length_spin_adj;
  GtkWidget *xftfo_length_spin;
  GtkWidget *xftfo_volume_hbox;
  GtkWidget *xftfo_volume_label;
  GtkObject *xftfo_volume_spin_adj;
  GtkWidget *xftfo_volume_spin;
  GtkWidget *xftfo_silence_frame;
  GtkWidget *xftfo_silence_table;
  GtkWidget *xftfo_silence_hbox;
  GtkWidget *xftfo_silence_label;
  GtkObject *xftfo_silence_spin_adj;
  GtkWidget *xftfo_silence_spin;
  GtkWidget *xft_fadeout_label;
  GtkWidget *xft_pause_none_label;
  GtkWidget *xft_pause_adv_page;
  GtkWidget *xft_fadeoutin_frame;
  GtkWidget *xft_fadeoutin_table;
  GtkObject *xftfoi_fadeout_spin_adj;
  GtkWidget *xftfoi_fadeout_spin;
  GtkObject *xftfoi_silence_spin_adj;
  GtkWidget *xftfoi_silence_spin;
  GtkObject *xftfoi_fadein_spin_adj;
  GtkWidget *xftfoi_fadein_spin;
  GtkWidget *xftfoi_fadein_hbox;
  GtkWidget *xftfoi_fadein_label;
  GtkWidget *xftfoi_silence_hbox;
  GtkWidget *xftfoi_silence_label;
  GtkWidget *xftfoi_fadeout_hbox;
  GtkWidget *xftfoi_fadeout_label;
  GtkWidget *xft_pause_adv_label;
  GtkWidget *config_crossfade_label;
  GtkWidget *config_gapkiller_page;
  GtkWidget *gap_leading_frame;
  GtkWidget *gap_leading_table;
  GtkObject *lgap_length_spin_adj;
  GtkWidget *lgap_length_spin;
  GtkObject *lgap_level_spin_adj;
  GtkWidget *lgap_level_spin;
  GtkWidget *lgap_length_hbox;
  GtkWidget *lgap_length_label;
  GtkWidget *lgap_level_hbox;
  GtkWidget *lgap_level_label;
  GtkWidget *lgap_enable_check;
  GtkWidget *gap_trailing_frame;
  GtkWidget *gap_trailing_table;
  GtkWidget *tgap_length_hbox;
  GtkWidget *tgap_length_label;
  GtkWidget *tgap_level_hbox;
  GtkWidget *tgap_level_label;
  GtkObject *tgap_length_spin_adj;
  GtkWidget *tgap_length_spin;
  GtkObject *tgap_level_spin_adj;
  GtkWidget *tgap_level_spin;
  GtkWidget *tgap_lock_check;
  GtkWidget *tgap_enable_check;
  GtkWidget *gap_advanced_frame;
  GtkWidget *gap_advanced_vbox;
  GtkWidget *gadv_crossing_check;
  GtkWidget *config_gapkiller_label;
  GtkWidget *config_misc_page;
  GtkWidget *misc_debug_frame;
  GtkWidget *misc_debug_vbox;
  GtkWidget *debug_stderr_check;
  GtkWidget *debug_monitor_check;
  GtkWidget *misc_mixopt_frame;
  GtkWidget *misc_mixopt_vbox;
  GtkWidget *mixopt_enable_check;
  GtkWidget *mixopt_reverse_check;
  GtkWidget *mixopt_software_check;
  GtkWidget *misc_other_frame;
  GtkWidget *misc_other_vbox;
  GtkWidget *moth_songchange_hbox;
  GtkWidget *moth_songchange_label;
  GtkObject *moth_songchange_spin_adj;
  GtkWidget *moth_songchange_spin;
  GtkWidget *moth_preload_hbox;
  GtkWidget *moth_preload_label;
  GtkObject *moth_preload_spin_adj;
  GtkWidget *moth_preload_spin;
  GtkWidget *moth_noxf_hbox;
  GtkWidget *moth_noxf_label;
  GtkWidget *noxf_album_check;
  GtkWidget *noxf_samefile_check;
  GtkWidget *moth_httpworkaround_check;
  GtkWidget *moth_opmaxused_hbox;
  GtkWidget *moth_opmaxused_check;
  GtkObject *moth_opmaxused_spin_adj;
  GtkWidget *moth_opmaxused_spin;
  GtkWidget *moth_quantaudio_check;
  GtkWidget *moth_outputkeepopened_check;
  GtkWidget *config_misc_label;
  GtkWidget *config_presets_page;
  GtkWidget *presets_name_hbox;
  GtkWidget *presets_name_entry;
  GtkWidget *presets_delete_button;
  GtkWidget *presets_new_button;
  GtkWidget *presets_list_scrolledwindow;
  GtkWidget *presets_list_list;
  GtkWidget *label6;
  GtkWidget *label7;
  GtkWidget *label8;
  GtkWidget *presets_list_bbox;
  GtkWidget *presets_load_button;
  GtkWidget *presets_save_button;
  GtkWidget *config_presets_label;
  GtkWidget *config_bbox;
  GtkWidget *config_ok;
  GtkWidget *config_cancel;
  GtkWidget *config_apply;
  GtkTooltips *tooltips;

  tooltips = gtk_tooltips_new ();

  config_win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_object_set_data (GTK_OBJECT (config_win), "config_win", config_win);
  gtk_window_set_title (GTK_WINDOW (config_win), "Crossfade Configuration");

  config_vbox = gtk_vbox_new (FALSE, 10);
  gtk_widget_ref (config_vbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "config_vbox", config_vbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (config_vbox);
  gtk_container_add (GTK_CONTAINER (config_win), config_vbox);
  gtk_container_set_border_width (GTK_CONTAINER (config_vbox), 10);

  config_notebook = gtk_notebook_new ();
  gtk_widget_ref (config_notebook);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "config_notebook", config_notebook,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (config_notebook);
  gtk_box_pack_start (GTK_BOX (config_vbox), config_notebook, TRUE, TRUE, 0);

  config_output_page = gtk_vbox_new (FALSE, 5);
  gtk_widget_ref (config_output_page);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "config_output_page", config_output_page,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (config_output_page);
  gtk_container_add (GTK_CONTAINER (config_notebook), config_output_page);
  gtk_container_set_border_width (GTK_CONTAINER (config_output_page), 5);

  output_options_hbox = gtk_hbox_new (FALSE, 6);
  gtk_widget_ref (output_options_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "output_options_hbox", output_options_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (output_options_hbox);
  gtk_box_pack_start (GTK_BOX (config_output_page), output_options_hbox, FALSE, TRUE, 0);

  output_method_frame = gtk_frame_new ("Output method");
  gtk_widget_ref (output_method_frame);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "output_method_frame", output_method_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (output_method_frame);
  gtk_box_pack_start (GTK_BOX (output_options_hbox), output_method_frame, TRUE, TRUE, 0);

  output_method_vbox = gtk_vbox_new (FALSE, 2);
  gtk_widget_ref (output_method_vbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "output_method_vbox", output_method_vbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (output_method_vbox);
  gtk_container_add (GTK_CONTAINER (output_method_frame), output_method_vbox);
  gtk_container_set_border_width (GTK_CONTAINER (output_method_vbox), 5);

  output_oss_radio = gtk_radio_button_new_with_label (output_method_group_group, "Builtin OSS driver");
  output_method_group_group = gtk_radio_button_group (GTK_RADIO_BUTTON (output_oss_radio));
  gtk_widget_ref (output_oss_radio);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "output_oss_radio", output_oss_radio,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (output_oss_radio);
  gtk_box_pack_start (GTK_BOX (output_method_vbox), output_oss_radio, FALSE, FALSE, 0);
  gtk_tooltips_set_tip (tooltips, output_oss_radio, "Use XMMS-crossfade's builtin OSS driver for output.", NULL);

  output_plugin_radio = gtk_radio_button_new_with_label (output_method_group_group, "Output plugin");
  output_method_group_group = gtk_radio_button_group (GTK_RADIO_BUTTON (output_plugin_radio));
  gtk_widget_ref (output_plugin_radio);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "output_plugin_radio", output_plugin_radio,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (output_plugin_radio);
  gtk_box_pack_start (GTK_BOX (output_method_vbox), output_plugin_radio, FALSE, FALSE, 0);
  gtk_tooltips_set_tip (tooltips, output_plugin_radio, "Use an existing plugin for output.", NULL);

  output_none_radio = gtk_radio_button_new_with_label (output_method_group_group, "None [not implemented]");
  output_method_group_group = gtk_radio_button_group (GTK_RADIO_BUTTON (output_none_radio));
  gtk_widget_ref (output_none_radio);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "output_none_radio", output_none_radio,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_box_pack_start (GTK_BOX (output_method_vbox), output_none_radio, FALSE, FALSE, 0);
  gtk_widget_set_sensitive (output_none_radio, FALSE);

  output_resampling_frame = gtk_frame_new ("Resampling");
  gtk_widget_ref (output_resampling_frame);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "output_resampling_frame", output_resampling_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (output_resampling_frame);
  gtk_box_pack_start (GTK_BOX (output_options_hbox), output_resampling_frame, FALSE, TRUE, 0);

  output_resampling_table = gtk_table_new (2, 2, FALSE);
  gtk_widget_ref (output_resampling_table);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "output_resampling_table", output_resampling_table,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (output_resampling_table);
  gtk_container_add (GTK_CONTAINER (output_resampling_frame), output_resampling_table);
  gtk_container_set_border_width (GTK_CONTAINER (output_resampling_table), 5);
  gtk_table_set_row_spacings (GTK_TABLE (output_resampling_table), 2);
  gtk_table_set_col_spacings (GTK_TABLE (output_resampling_table), 2);

  resampling_rate_optionmenu = gtk_option_menu_new ();
  gtk_widget_ref (resampling_rate_optionmenu);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "resampling_rate_optionmenu", resampling_rate_optionmenu,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (resampling_rate_optionmenu);
  gtk_table_attach (GTK_TABLE (output_resampling_table), resampling_rate_optionmenu, 1, 2, 0, 1,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, resampling_rate_optionmenu, "Set the sample rate for playback. Internally, XMMS-crossfade will resample all audio to this sample rate before playback.\nDefault: 44100 Hz", NULL);
  resampling_rate_optionmenu_menu = gtk_menu_new ();
  gtk_option_menu_set_menu (GTK_OPTION_MENU (resampling_rate_optionmenu), resampling_rate_optionmenu_menu);

  resampling_quality_optionmenu = gtk_option_menu_new ();
  gtk_widget_ref (resampling_quality_optionmenu);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "resampling_quality_optionmenu", resampling_quality_optionmenu,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (resampling_quality_optionmenu);
  gtk_table_attach (GTK_TABLE (output_resampling_table), resampling_quality_optionmenu, 1, 2, 1, 2,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, resampling_quality_optionmenu, "Set the resampling quality. Note that higher quality also means higher CPU usage.", NULL);
  resampling_quality_optionmenu_menu = gtk_menu_new ();
  gtk_option_menu_set_menu (GTK_OPTION_MENU (resampling_quality_optionmenu), resampling_quality_optionmenu_menu);

  resampling_rate_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (resampling_rate_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "resampling_rate_hbox", resampling_rate_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (resampling_rate_hbox);
  gtk_table_attach (GTK_TABLE (output_resampling_table), resampling_rate_hbox, 0, 1, 0, 1,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_FILL), 0, 0);

  resampling_rate_label = gtk_label_new ("Rate:");
  gtk_widget_ref (resampling_rate_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "resampling_rate_label", resampling_rate_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (resampling_rate_label);
  gtk_box_pack_end (GTK_BOX (resampling_rate_hbox), resampling_rate_label, FALSE, FALSE, 0);

  resampling_quality_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (resampling_quality_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "resampling_quality_hbox", resampling_quality_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (resampling_quality_hbox);
  gtk_table_attach (GTK_TABLE (output_resampling_table), resampling_quality_hbox, 0, 1, 1, 2,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_FILL), 0, 0);

  resampling_quality_label = gtk_label_new ("Quality:");
  gtk_widget_ref (resampling_quality_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "resampling_quality_label", resampling_quality_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (resampling_quality_label);
  gtk_box_pack_end (GTK_BOX (resampling_quality_hbox), resampling_quality_label, FALSE, FALSE, 0);

  output_notebook = gtk_notebook_new ();
  gtk_widget_ref (output_notebook);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "output_notebook", output_notebook,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (output_notebook);
  gtk_box_pack_start (GTK_BOX (config_output_page), output_notebook, FALSE, TRUE, 0);
  GTK_WIDGET_UNSET_FLAGS (output_notebook, GTK_CAN_FOCUS);
  gtk_notebook_set_show_tabs (GTK_NOTEBOOK (output_notebook), FALSE);
  gtk_notebook_set_show_border (GTK_NOTEBOOK (output_notebook), FALSE);

  output_oss_page = gtk_vbox_new (FALSE, 5);
  gtk_widget_ref (output_oss_page);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "output_oss_page", output_oss_page,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (output_oss_page);
  gtk_container_add (GTK_CONTAINER (output_notebook), output_oss_page);

  output_oss_notebook = gtk_notebook_new ();
  gtk_widget_ref (output_oss_notebook);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "output_oss_notebook", output_oss_notebook,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (output_oss_notebook);
  gtk_box_pack_start (GTK_BOX (output_oss_page), output_oss_notebook, FALSE, FALSE, 0);

  oss_device_page = gtk_vbox_new (FALSE, 5);
  gtk_widget_ref (oss_device_page);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "oss_device_page", oss_device_page,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (oss_device_page);
  gtk_container_add (GTK_CONTAINER (output_oss_notebook), oss_device_page);
  gtk_container_set_border_width (GTK_CONTAINER (oss_device_page), 5);

  oss_adevice_frame = gtk_frame_new ("Audio device");
  gtk_widget_ref (oss_adevice_frame);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "oss_adevice_frame", oss_adevice_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (oss_adevice_frame);
  gtk_box_pack_start (GTK_BOX (oss_device_page), oss_adevice_frame, FALSE, FALSE, 0);

  oss_adevice_vbox = gtk_vbox_new (FALSE, 2);
  gtk_widget_ref (oss_adevice_vbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "oss_adevice_vbox", oss_adevice_vbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (oss_adevice_vbox);
  gtk_container_add (GTK_CONTAINER (oss_adevice_frame), oss_adevice_vbox);
  gtk_container_set_border_width (GTK_CONTAINER (oss_adevice_vbox), 5);

  oss_adevice_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (oss_adevice_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "oss_adevice_hbox", oss_adevice_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (oss_adevice_hbox);
  gtk_box_pack_start (GTK_BOX (oss_adevice_vbox), oss_adevice_hbox, TRUE, TRUE, 0);

  oss_adevice_optionmenu = gtk_option_menu_new ();
  gtk_widget_ref (oss_adevice_optionmenu);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "oss_adevice_optionmenu", oss_adevice_optionmenu,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (oss_adevice_optionmenu);
  gtk_box_pack_start (GTK_BOX (oss_adevice_hbox), oss_adevice_optionmenu, TRUE, TRUE, 0);
  oss_adevice_optionmenu_menu = gtk_menu_new ();
  glade_menuitem = gtk_menu_item_new_with_label ("dummy");
  gtk_widget_show (glade_menuitem);
  gtk_menu_append (GTK_MENU (oss_adevice_optionmenu_menu), glade_menuitem);
  gtk_option_menu_set_menu (GTK_OPTION_MENU (oss_adevice_optionmenu), oss_adevice_optionmenu_menu);

  oss_adevice_alt_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (oss_adevice_alt_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "oss_adevice_alt_hbox", oss_adevice_alt_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (oss_adevice_alt_hbox);
  gtk_box_pack_start (GTK_BOX (oss_adevice_vbox), oss_adevice_alt_hbox, TRUE, TRUE, 0);

  oss_adevice_alt_check = gtk_check_button_new_with_label ("Use alternate device:");
  gtk_widget_ref (oss_adevice_alt_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "oss_adevice_alt_check", oss_adevice_alt_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (oss_adevice_alt_check);
  gtk_box_pack_start (GTK_BOX (oss_adevice_alt_hbox), oss_adevice_alt_check, FALSE, FALSE, 0);

  oss_adevice_alt_entry = gtk_entry_new ();
  gtk_widget_ref (oss_adevice_alt_entry);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "oss_adevice_alt_entry", oss_adevice_alt_entry,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (oss_adevice_alt_entry);
  gtk_box_pack_start (GTK_BOX (oss_adevice_alt_hbox), oss_adevice_alt_entry, TRUE, TRUE, 0);

  oss_mdevice_frame = gtk_frame_new ("Mixer device");
  gtk_widget_ref (oss_mdevice_frame);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "oss_mdevice_frame", oss_mdevice_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (oss_mdevice_frame);
  gtk_box_pack_start (GTK_BOX (oss_device_page), oss_mdevice_frame, FALSE, FALSE, 0);

  oss_mdevice_vbox = gtk_vbox_new (FALSE, 2);
  gtk_widget_ref (oss_mdevice_vbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "oss_mdevice_vbox", oss_mdevice_vbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (oss_mdevice_vbox);
  gtk_container_add (GTK_CONTAINER (oss_mdevice_frame), oss_mdevice_vbox);
  gtk_container_set_border_width (GTK_CONTAINER (oss_mdevice_vbox), 5);

  oss_mdevice_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (oss_mdevice_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "oss_mdevice_hbox", oss_mdevice_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (oss_mdevice_hbox);
  gtk_box_pack_start (GTK_BOX (oss_mdevice_vbox), oss_mdevice_hbox, TRUE, TRUE, 0);

  oss_mdevice_optionmenu = gtk_option_menu_new ();
  gtk_widget_ref (oss_mdevice_optionmenu);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "oss_mdevice_optionmenu", oss_mdevice_optionmenu,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (oss_mdevice_optionmenu);
  gtk_box_pack_start (GTK_BOX (oss_mdevice_hbox), oss_mdevice_optionmenu, TRUE, TRUE, 0);
  oss_mdevice_optionmenu_menu = gtk_menu_new ();
  glade_menuitem = gtk_menu_item_new_with_label ("dummy");
  gtk_widget_show (glade_menuitem);
  gtk_menu_append (GTK_MENU (oss_mdevice_optionmenu_menu), glade_menuitem);
  gtk_option_menu_set_menu (GTK_OPTION_MENU (oss_mdevice_optionmenu), oss_mdevice_optionmenu_menu);

  oss_mdevice_alt_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (oss_mdevice_alt_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "oss_mdevice_alt_hbox", oss_mdevice_alt_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (oss_mdevice_alt_hbox);
  gtk_box_pack_start (GTK_BOX (oss_mdevice_vbox), oss_mdevice_alt_hbox, FALSE, FALSE, 0);

  oss_mdevice_alt_check = gtk_check_button_new_with_label ("Use alternate device:");
  gtk_widget_ref (oss_mdevice_alt_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "oss_mdevice_alt_check", oss_mdevice_alt_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (oss_mdevice_alt_check);
  gtk_box_pack_start (GTK_BOX (oss_mdevice_alt_hbox), oss_mdevice_alt_check, FALSE, FALSE, 0);

  oss_mdevice_alt_entry = gtk_entry_new ();
  gtk_widget_ref (oss_mdevice_alt_entry);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "oss_mdevice_alt_entry", oss_mdevice_alt_entry,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (oss_mdevice_alt_entry);
  gtk_box_pack_start (GTK_BOX (oss_mdevice_alt_hbox), oss_mdevice_alt_entry, TRUE, TRUE, 0);

  oss_device_label = gtk_label_new ("Device");
  gtk_widget_ref (oss_device_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "oss_device_label", oss_device_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (oss_device_label);
  gtk_notebook_set_tab_label (GTK_NOTEBOOK (output_oss_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (output_oss_notebook), 0), oss_device_label);

  oss_buffer_page = gtk_vbox_new (FALSE, 5);
  gtk_widget_ref (oss_buffer_page);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "oss_buffer_page", oss_buffer_page,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (oss_buffer_page);
  gtk_container_add (GTK_CONTAINER (output_oss_notebook), oss_buffer_page);
  gtk_container_set_border_width (GTK_CONTAINER (oss_buffer_page), 5);

  oss_buffer_frame = gtk_frame_new ("Software buffer");
  gtk_widget_ref (oss_buffer_frame);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "oss_buffer_frame", oss_buffer_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (oss_buffer_frame);
  gtk_box_pack_start (GTK_BOX (oss_buffer_page), oss_buffer_frame, FALSE, FALSE, 0);

  oss_buffer_vbox = gtk_vbox_new (FALSE, 2);
  gtk_widget_ref (oss_buffer_vbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "oss_buffer_vbox", oss_buffer_vbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (oss_buffer_vbox);
  gtk_container_add (GTK_CONTAINER (oss_buffer_frame), oss_buffer_vbox);
  gtk_container_set_border_width (GTK_CONTAINER (oss_buffer_vbox), 5);

  ossbuf_buffer_hbox = gtk_hbox_new (FALSE, 5);
  gtk_widget_ref (ossbuf_buffer_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "ossbuf_buffer_hbox", ossbuf_buffer_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (ossbuf_buffer_hbox);
  gtk_box_pack_start (GTK_BOX (oss_buffer_vbox), ossbuf_buffer_hbox, FALSE, FALSE, 0);

  ossbuf_buffer_label = gtk_label_new ("Buffer size (ms):");
  gtk_widget_ref (ossbuf_buffer_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "ossbuf_buffer_label", ossbuf_buffer_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (ossbuf_buffer_label);
  gtk_box_pack_start (GTK_BOX (ossbuf_buffer_hbox), ossbuf_buffer_label, FALSE, FALSE, 0);
  gtk_label_set_justify (GTK_LABEL (ossbuf_buffer_label), GTK_JUSTIFY_LEFT);

  ossbuf_buffer_spin_adj = gtk_adjustment_new (0, 0, 60000, 10, 100, 10);
  ossbuf_buffer_spin = gtk_spin_button_new (GTK_ADJUSTMENT (ossbuf_buffer_spin_adj), 0, 0);
  gtk_widget_ref (ossbuf_buffer_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "ossbuf_buffer_spin", ossbuf_buffer_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (ossbuf_buffer_spin);
  gtk_box_pack_start (GTK_BOX (ossbuf_buffer_hbox), ossbuf_buffer_spin, TRUE, TRUE, 0);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (ossbuf_buffer_spin), TRUE);

  ossbuf_preload_hbox = gtk_hbox_new (FALSE, 5);
  gtk_widget_ref (ossbuf_preload_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "ossbuf_preload_hbox", ossbuf_preload_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (ossbuf_preload_hbox);
  gtk_box_pack_start (GTK_BOX (oss_buffer_vbox), ossbuf_preload_hbox, TRUE, TRUE, 0);

  ossbuf_preload_label = gtk_label_new ("Preload size (ms):");
  gtk_widget_ref (ossbuf_preload_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "ossbuf_preload_label", ossbuf_preload_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (ossbuf_preload_label);
  gtk_box_pack_start (GTK_BOX (ossbuf_preload_hbox), ossbuf_preload_label, FALSE, FALSE, 0);
  gtk_label_set_justify (GTK_LABEL (ossbuf_preload_label), GTK_JUSTIFY_LEFT);

  ossbuf_preload_spin_adj = gtk_adjustment_new (1500, 0, 60000, 10, 100, 10);
  ossbuf_preload_spin = gtk_spin_button_new (GTK_ADJUSTMENT (ossbuf_preload_spin_adj), 0, 0);
  gtk_widget_ref (ossbuf_preload_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "ossbuf_preload_spin", ossbuf_preload_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (ossbuf_preload_spin);
  gtk_box_pack_start (GTK_BOX (ossbuf_preload_hbox), ossbuf_preload_spin, TRUE, TRUE, 0);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (ossbuf_preload_spin), TRUE);

  oss_hwbuf_frame = gtk_frame_new ("Hardware device buffer");
  gtk_widget_ref (oss_hwbuf_frame);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "oss_hwbuf_frame", oss_hwbuf_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (oss_hwbuf_frame);
  gtk_box_pack_start (GTK_BOX (oss_buffer_page), oss_hwbuf_frame, TRUE, TRUE, 0);

  oss_hwbuf_vbox = gtk_vbox_new (FALSE, 2);
  gtk_widget_ref (oss_hwbuf_vbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "oss_hwbuf_vbox", oss_hwbuf_vbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (oss_hwbuf_vbox);
  gtk_container_add (GTK_CONTAINER (oss_hwbuf_frame), oss_hwbuf_vbox);
  gtk_container_set_border_width (GTK_CONTAINER (oss_hwbuf_vbox), 5);

  osshwb_maxbuf_check = gtk_check_button_new_with_label ("Maximum device buffer size");
  gtk_widget_ref (osshwb_maxbuf_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "osshwb_maxbuf_check", osshwb_maxbuf_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (osshwb_maxbuf_check);
  gtk_box_pack_start (GTK_BOX (oss_hwbuf_vbox), osshwb_maxbuf_check, FALSE, FALSE, 0);

  osshwb_fragments_hbox = gtk_hbox_new (FALSE, 5);
  gtk_widget_ref (osshwb_fragments_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "osshwb_fragments_hbox", osshwb_fragments_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (osshwb_fragments_hbox);
  gtk_box_pack_start (GTK_BOX (oss_hwbuf_vbox), osshwb_fragments_hbox, FALSE, FALSE, 0);

  osshwb_fragments_label = gtk_label_new ("Number of Fragments:");
  gtk_widget_ref (osshwb_fragments_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "osshwb_fragments_label", osshwb_fragments_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (osshwb_fragments_label);
  gtk_box_pack_start (GTK_BOX (osshwb_fragments_hbox), osshwb_fragments_label, FALSE, FALSE, 0);
  gtk_label_set_justify (GTK_LABEL (osshwb_fragments_label), GTK_JUSTIFY_LEFT);

  osshwb_fragments_spin_adj = gtk_adjustment_new (50, 2, 65535, 1, 10, 10);
  osshwb_fragments_spin = gtk_spin_button_new (GTK_ADJUSTMENT (osshwb_fragments_spin_adj), 0, 0);
  gtk_widget_ref (osshwb_fragments_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "osshwb_fragments_spin", osshwb_fragments_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (osshwb_fragments_spin);
  gtk_box_pack_start (GTK_BOX (osshwb_fragments_hbox), osshwb_fragments_spin, TRUE, TRUE, 0);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (osshwb_fragments_spin), TRUE);

  osshwb_fragsize_hbox = gtk_hbox_new (FALSE, 5);
  gtk_widget_ref (osshwb_fragsize_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "osshwb_fragsize_hbox", osshwb_fragsize_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (osshwb_fragsize_hbox);
  gtk_box_pack_start (GTK_BOX (oss_hwbuf_vbox), osshwb_fragsize_hbox, TRUE, TRUE, 0);

  osshwb_fragsize_label = gtk_label_new ("Fragment size (2^x bytes):");
  gtk_widget_ref (osshwb_fragsize_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "osshwb_fragsize_label", osshwb_fragsize_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (osshwb_fragsize_label);
  gtk_box_pack_start (GTK_BOX (osshwb_fragsize_hbox), osshwb_fragsize_label, FALSE, FALSE, 0);
  gtk_label_set_justify (GTK_LABEL (osshwb_fragsize_label), GTK_JUSTIFY_LEFT);

  osshwb_fragsize_spin_adj = gtk_adjustment_new (11, 4, 16, 1, 10, 10);
  osshwb_fragsize_spin = gtk_spin_button_new (GTK_ADJUSTMENT (osshwb_fragsize_spin_adj), 0, 0);
  gtk_widget_ref (osshwb_fragsize_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "osshwb_fragsize_spin", osshwb_fragsize_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (osshwb_fragsize_spin);
  gtk_box_pack_start (GTK_BOX (osshwb_fragsize_hbox), osshwb_fragsize_spin, TRUE, TRUE, 0);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (osshwb_fragsize_spin), TRUE);

  oss_buffer_label = gtk_label_new ("Buffer");
  gtk_widget_ref (oss_buffer_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "oss_buffer_label", oss_buffer_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (oss_buffer_label);
  gtk_notebook_set_tab_label (GTK_NOTEBOOK (output_oss_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (output_oss_notebook), 1), oss_buffer_label);

  oss_mixer_page = gtk_vbox_new (FALSE, 5);
  gtk_widget_ref (oss_mixer_page);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "oss_mixer_page", oss_mixer_page,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (oss_mixer_page);
  gtk_container_add (GTK_CONTAINER (output_oss_notebook), oss_mixer_page);
  gtk_container_set_border_width (GTK_CONTAINER (oss_mixer_page), 5);

  oss_mixer_frame = gtk_frame_new ("Mixer options");
  gtk_widget_ref (oss_mixer_frame);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "oss_mixer_frame", oss_mixer_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (oss_mixer_frame);
  gtk_box_pack_start (GTK_BOX (oss_mixer_page), oss_mixer_frame, FALSE, FALSE, 0);

  oss_mixer_vbox = gtk_vbox_new (FALSE, 2);
  gtk_widget_ref (oss_mixer_vbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "oss_mixer_vbox", oss_mixer_vbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (oss_mixer_vbox);
  gtk_container_add (GTK_CONTAINER (oss_mixer_frame), oss_mixer_vbox);
  gtk_container_set_border_width (GTK_CONTAINER (oss_mixer_vbox), 5);

  ossmixer_pcm_check = gtk_check_button_new_with_label ("Volume controls Master not PCM");
  gtk_widget_ref (ossmixer_pcm_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "ossmixer_pcm_check", ossmixer_pcm_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (ossmixer_pcm_check);
  gtk_box_pack_start (GTK_BOX (oss_mixer_vbox), ossmixer_pcm_check, FALSE, FALSE, 0);

  oss_mixer_label = gtk_label_new ("Mixer");
  gtk_widget_ref (oss_mixer_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "oss_mixer_label", oss_mixer_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (oss_mixer_label);
  gtk_notebook_set_tab_label (GTK_NOTEBOOK (output_oss_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (output_oss_notebook), 2), oss_mixer_label);

  output_plugin_page = gtk_vbox_new (FALSE, 5);
  gtk_widget_ref (output_plugin_page);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "output_plugin_page", output_plugin_page,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (output_plugin_page);
  gtk_container_add (GTK_CONTAINER (output_notebook), output_plugin_page);

  op_plugin_frame = gtk_frame_new ("Output plugin");
  gtk_widget_ref (op_plugin_frame);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "op_plugin_frame", op_plugin_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (op_plugin_frame);
  gtk_box_pack_start (GTK_BOX (output_plugin_page), op_plugin_frame, FALSE, TRUE, 0);

  op_plugin_vbox = gtk_vbox_new (FALSE, 2);
  gtk_widget_ref (op_plugin_vbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "op_plugin_vbox", op_plugin_vbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (op_plugin_vbox);
  gtk_container_add (GTK_CONTAINER (op_plugin_frame), op_plugin_vbox);
  gtk_container_set_border_width (GTK_CONTAINER (op_plugin_vbox), 5);

  op_plugin_optionmenu = gtk_option_menu_new ();
  gtk_widget_ref (op_plugin_optionmenu);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "op_plugin_optionmenu", op_plugin_optionmenu,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (op_plugin_optionmenu);
  gtk_box_pack_start (GTK_BOX (op_plugin_vbox), op_plugin_optionmenu, FALSE, FALSE, 0);
  op_plugin_optionmenu_menu = gtk_menu_new ();
  glade_menuitem = gtk_menu_item_new_with_label ("dummy");
  gtk_widget_show (glade_menuitem);
  gtk_menu_append (GTK_MENU (op_plugin_optionmenu_menu), glade_menuitem);
  gtk_option_menu_set_menu (GTK_OPTION_MENU (op_plugin_optionmenu), op_plugin_optionmenu_menu);

  op_plugin_buttonbox = gtk_hbutton_box_new ();
  gtk_widget_ref (op_plugin_buttonbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "op_plugin_buttonbox", op_plugin_buttonbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (op_plugin_buttonbox);
  gtk_box_pack_start (GTK_BOX (op_plugin_vbox), op_plugin_buttonbox, FALSE, TRUE, 0);
  gtk_button_box_set_layout (GTK_BUTTON_BOX (op_plugin_buttonbox), GTK_BUTTONBOX_START);
  gtk_button_box_set_spacing (GTK_BUTTON_BOX (op_plugin_buttonbox), 5);

  op_configure_button = gtk_button_new_with_label ("Configure");
  gtk_widget_ref (op_configure_button);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "op_configure_button", op_configure_button,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (op_configure_button);
  gtk_container_add (GTK_CONTAINER (op_plugin_buttonbox), op_configure_button);
  GTK_WIDGET_SET_FLAGS (op_configure_button, GTK_CAN_DEFAULT);

  op_about_button = gtk_button_new_with_label ("About");
  gtk_widget_ref (op_about_button);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "op_about_button", op_about_button,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (op_about_button);
  gtk_container_add (GTK_CONTAINER (op_plugin_buttonbox), op_about_button);
  GTK_WIDGET_SET_FLAGS (op_about_button, GTK_CAN_DEFAULT);

  op_options_frame = gtk_frame_new ("Plugin compatibility options");
  gtk_widget_ref (op_options_frame);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "op_options_frame", op_options_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (op_options_frame);
  gtk_box_pack_start (GTK_BOX (output_plugin_page), op_options_frame, FALSE, TRUE, 0);

  op_options_vbox = gtk_vbox_new (FALSE, 2);
  gtk_widget_ref (op_options_vbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "op_options_vbox", op_options_vbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (op_options_vbox);
  gtk_container_add (GTK_CONTAINER (op_options_frame), op_options_vbox);
  gtk_container_set_border_width (GTK_CONTAINER (op_options_vbox), 5);

  op_throttle_check = gtk_check_button_new_with_label ("Throttle Output");
  gtk_widget_ref (op_throttle_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "op_throttle_check", op_throttle_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (op_throttle_check);
  gtk_box_pack_start (GTK_BOX (op_options_vbox), op_throttle_check, FALSE, FALSE, 0);

  op_maxblock_hbox = gtk_hbox_new (FALSE, 5);
  gtk_widget_ref (op_maxblock_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "op_maxblock_hbox", op_maxblock_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (op_maxblock_hbox);
  gtk_box_pack_start (GTK_BOX (op_options_vbox), op_maxblock_hbox, TRUE, TRUE, 0);

  op_maxblock_check = gtk_check_button_new_with_label ("Max block size (bytes):");
  gtk_widget_ref (op_maxblock_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "op_maxblock_check", op_maxblock_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (op_maxblock_check);
  gtk_box_pack_start (GTK_BOX (op_maxblock_hbox), op_maxblock_check, FALSE, FALSE, 0);

  op_maxblock_spin_adj = gtk_adjustment_new (1024, 4, 1.04858e+06, 4, 16, 10);
  op_maxblock_spin = gtk_spin_button_new (GTK_ADJUSTMENT (op_maxblock_spin_adj), 10, 0);
  gtk_widget_ref (op_maxblock_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "op_maxblock_spin", op_maxblock_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (op_maxblock_spin);
  gtk_box_pack_start (GTK_BOX (op_maxblock_hbox), op_maxblock_spin, TRUE, TRUE, 0);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (op_maxblock_spin), TRUE);
  gtk_spin_button_set_snap_to_ticks (GTK_SPIN_BUTTON (op_maxblock_spin), TRUE);

  op_forcereopen_check = gtk_check_button_new_with_label ("Force close/reopen on songchange");
  gtk_widget_ref (op_forcereopen_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "op_forcereopen_check", op_forcereopen_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (op_forcereopen_check);
  gtk_box_pack_start (GTK_BOX (op_options_vbox), op_forcereopen_check, FALSE, FALSE, 0);

  empty_notebook_page = gtk_vbox_new (FALSE, 0);
  gtk_widget_show (empty_notebook_page);
  gtk_container_add (GTK_CONTAINER (output_notebook), empty_notebook_page);

  output_help_label = gtk_label_new ("When modifying the Output Options or the Mixing buffer size, you need to stop/restart playback for the settings to take effect.");
  gtk_widget_ref (output_help_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "output_help_label", output_help_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (output_help_label);
  gtk_box_pack_end (GTK_BOX (config_output_page), output_help_label, TRUE, TRUE, 0);
  gtk_label_set_justify (GTK_LABEL (output_help_label), GTK_JUSTIFY_LEFT);
  gtk_label_set_line_wrap (GTK_LABEL (output_help_label), TRUE);

  config_devices_label = gtk_label_new ("Output");
  gtk_widget_ref (config_devices_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "config_devices_label", config_devices_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (config_devices_label);
  gtk_notebook_set_tab_label (GTK_NOTEBOOK (config_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (config_notebook), 0), config_devices_label);

  config_effects_page = gtk_vbox_new (FALSE, 5);
  gtk_widget_ref (config_effects_page);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "config_effects_page", config_effects_page,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (config_effects_page);
  gtk_container_add (GTK_CONTAINER (config_notebook), config_effects_page);
  gtk_container_set_border_width (GTK_CONTAINER (config_effects_page), 5);

  ep_plugin_frame = gtk_frame_new ("Pre-mixing effect plugin");
  gtk_widget_ref (ep_plugin_frame);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "ep_plugin_frame", ep_plugin_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (ep_plugin_frame);
  gtk_box_pack_start (GTK_BOX (config_effects_page), ep_plugin_frame, FALSE, TRUE, 0);

  ep_plugin_vbox = gtk_vbox_new (FALSE, 2);
  gtk_widget_ref (ep_plugin_vbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "ep_plugin_vbox", ep_plugin_vbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (ep_plugin_vbox);
  gtk_container_add (GTK_CONTAINER (ep_plugin_frame), ep_plugin_vbox);
  gtk_container_set_border_width (GTK_CONTAINER (ep_plugin_vbox), 5);

  ep_plugin_optionmenu = gtk_option_menu_new ();
  gtk_widget_ref (ep_plugin_optionmenu);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "ep_plugin_optionmenu", ep_plugin_optionmenu,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (ep_plugin_optionmenu);
  gtk_box_pack_start (GTK_BOX (ep_plugin_vbox), ep_plugin_optionmenu, FALSE, FALSE, 0);
  gtk_tooltips_set_tip (tooltips, ep_plugin_optionmenu, "Select an effect plugin. Take care not to use the same plugin as selected in XMMS' configuration dialog.", NULL);
  ep_plugin_optionmenu_menu = gtk_menu_new ();
  glade_menuitem = gtk_menu_item_new_with_label ("dummy");
  gtk_widget_show (glade_menuitem);
  gtk_menu_append (GTK_MENU (ep_plugin_optionmenu_menu), glade_menuitem);
  gtk_option_menu_set_menu (GTK_OPTION_MENU (ep_plugin_optionmenu), ep_plugin_optionmenu_menu);

  ep_plugin_buttonbox = gtk_hbutton_box_new ();
  gtk_widget_ref (ep_plugin_buttonbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "ep_plugin_buttonbox", ep_plugin_buttonbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (ep_plugin_buttonbox);
  gtk_box_pack_start (GTK_BOX (ep_plugin_vbox), ep_plugin_buttonbox, FALSE, TRUE, 0);
  gtk_button_box_set_layout (GTK_BUTTON_BOX (ep_plugin_buttonbox), GTK_BUTTONBOX_START);
  gtk_button_box_set_spacing (GTK_BUTTON_BOX (ep_plugin_buttonbox), 5);

  ep_configure_button = gtk_button_new_with_label ("Configure");
  gtk_widget_ref (ep_configure_button);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "ep_configure_button", ep_configure_button,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (ep_configure_button);
  gtk_container_add (GTK_CONTAINER (ep_plugin_buttonbox), ep_configure_button);
  GTK_WIDGET_SET_FLAGS (ep_configure_button, GTK_CAN_DEFAULT);
  gtk_tooltips_set_tip (tooltips, ep_configure_button, "Open the configuration dialog of the plugin selected above.", NULL);

  ep_about_button = gtk_button_new_with_label ("About");
  gtk_widget_ref (ep_about_button);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "ep_about_button", ep_about_button,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (ep_about_button);
  gtk_container_add (GTK_CONTAINER (ep_plugin_buttonbox), ep_about_button);
  GTK_WIDGET_SET_FLAGS (ep_about_button, GTK_CAN_DEFAULT);
  gtk_tooltips_set_tip (tooltips, ep_about_button, "Open the about dialog of the plugin selected above.", NULL);

  ep_enable_check = gtk_check_button_new_with_label ("Use plugin");
  gtk_widget_ref (ep_enable_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "ep_enable_check", ep_enable_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (ep_enable_check);
  gtk_container_add (GTK_CONTAINER (ep_plugin_buttonbox), ep_enable_check);
  gtk_tooltips_set_tip (tooltips, ep_enable_check, "Enable the selected plugin. Note that after pressing 'Apply' it may take a while until you can hear the effect, since it is applied before the audio data goes into the buffer.", NULL);

  effects_volnorm_frame = gtk_frame_new ("Volume normalizer");
  gtk_widget_ref (effects_volnorm_frame);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "effects_volnorm_frame", effects_volnorm_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_box_pack_start (GTK_BOX (config_effects_page), effects_volnorm_frame, FALSE, FALSE, 0);

  effects_volnorm_table = gtk_table_new (4, 2, FALSE);
  gtk_widget_ref (effects_volnorm_table);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "effects_volnorm_table", effects_volnorm_table,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (effects_volnorm_table);
  gtk_container_add (GTK_CONTAINER (effects_volnorm_frame), effects_volnorm_table);
  gtk_container_set_border_width (GTK_CONTAINER (effects_volnorm_table), 5);
  gtk_table_set_row_spacings (GTK_TABLE (effects_volnorm_table), 2);
  gtk_table_set_col_spacings (GTK_TABLE (effects_volnorm_table), 5);

  volnorm_quantaudio_check = gtk_check_button_new_with_label ("Read Quantaudio comment field");
  gtk_widget_ref (volnorm_quantaudio_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "volnorm_quantaudio_check", volnorm_quantaudio_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (volnorm_quantaudio_check);
  gtk_table_attach (GTK_TABLE (effects_volnorm_table), volnorm_quantaudio_check, 1, 2, 2, 3,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);

  volnorm_target_spin_adj = gtk_adjustment_new (8000, 0, 32768, 100, 1000, 10);
  volnorm_target_spin = gtk_spin_button_new (GTK_ADJUSTMENT (volnorm_target_spin_adj), 0, 0);
  gtk_widget_ref (volnorm_target_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "volnorm_target_spin", volnorm_target_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (volnorm_target_spin);
  gtk_table_attach (GTK_TABLE (effects_volnorm_table), volnorm_target_spin, 1, 2, 3, 4,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, volnorm_target_spin, "Set the maximum length for gaps at the end of a stream.\nDefault: 500", NULL);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (volnorm_target_spin), TRUE);

  volnorm_target_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (volnorm_target_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "volnorm_target_hbox", volnorm_target_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (volnorm_target_hbox);
  gtk_table_attach (GTK_TABLE (effects_volnorm_table), volnorm_target_hbox, 0, 1, 3, 4,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_FILL), 0, 0);

  volnorm_target_label = gtk_label_new ("Target RMS:");
  gtk_widget_ref (volnorm_target_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "volnorm_target_label", volnorm_target_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (volnorm_target_label);
  gtk_box_pack_start (GTK_BOX (volnorm_target_hbox), volnorm_target_label, FALSE, FALSE, 0);

  volnorm_enable_check = gtk_check_button_new_with_label ("Enable");
  gtk_widget_ref (volnorm_enable_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "volnorm_enable_check", volnorm_enable_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (volnorm_enable_check);
  gtk_table_attach (GTK_TABLE (effects_volnorm_table), volnorm_enable_check, 1, 2, 0, 1,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);

  volnorm_rva2_check = gtk_check_button_new_with_label ("Read ID3V2 RVA2 Tag");
  gtk_widget_ref (volnorm_rva2_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "volnorm_rva2_check", volnorm_rva2_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (volnorm_rva2_check);
  gtk_table_attach (GTK_TABLE (effects_volnorm_table), volnorm_rva2_check, 1, 2, 1, 2,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);

  effects_help_label = gtk_label_new ("You do not need to press 'Apply' after making changes to the effect plugin settings. It may take a while though until you can hear the change, since the plugin is applied before the mixing buffer.");
  gtk_widget_ref (effects_help_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "effects_help_label", effects_help_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (effects_help_label);
  gtk_box_pack_start (GTK_BOX (config_effects_page), effects_help_label, TRUE, TRUE, 0);
  gtk_label_set_justify (GTK_LABEL (effects_help_label), GTK_JUSTIFY_LEFT);
  gtk_label_set_line_wrap (GTK_LABEL (effects_help_label), TRUE);

  config_effects_label = gtk_label_new ("Effects");
  gtk_widget_ref (config_effects_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "config_effects_label", config_effects_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (config_effects_label);
  gtk_notebook_set_tab_label (GTK_NOTEBOOK (config_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (config_notebook), 1), config_effects_label);

  config_crossfader_page = gtk_vbox_new (FALSE, 2);
  gtk_widget_ref (config_crossfader_page);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "config_crossfader_page", config_crossfader_page,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (config_crossfader_page);
  gtk_container_add (GTK_CONTAINER (config_notebook), config_crossfader_page);
  gtk_container_set_border_width (GTK_CONTAINER (config_crossfader_page), 5);

  xf_bufsize_hbox = gtk_hbox_new (FALSE, 5);
  gtk_widget_ref (xf_bufsize_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xf_bufsize_hbox", xf_bufsize_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xf_bufsize_hbox);
  gtk_box_pack_start (GTK_BOX (config_crossfader_page), xf_bufsize_hbox, FALSE, FALSE, 0);

  xf_bufsize_label = gtk_label_new ("Mixing buffer size (ms):");
  gtk_widget_ref (xf_bufsize_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xf_bufsize_label", xf_bufsize_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xf_bufsize_label);
  gtk_box_pack_start (GTK_BOX (xf_bufsize_hbox), xf_bufsize_label, FALSE, FALSE, 0);

  xf_buffer_spin_adj = gtk_adjustment_new (8500, 0, 60000, 100, 1000, 10);
  xf_buffer_spin = gtk_spin_button_new (GTK_ADJUSTMENT (xf_buffer_spin_adj), 0, 0);
  gtk_widget_ref (xf_buffer_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xf_buffer_spin", xf_buffer_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xf_buffer_spin);
  gtk_box_pack_start (GTK_BOX (xf_bufsize_hbox), xf_buffer_spin, TRUE, TRUE, 0);
  gtk_tooltips_set_tip (tooltips, xf_buffer_spin, "Specify the size of the mixing buffer. Mixing buffer space is required for pauses, fade-outs, offsetting (i.e. interleaving the end and beginning of two songs) and killing trailing gaps. Fade-ins and killing leading gaps are done on-the-fly and do not depend on mixing buffer space.\nDefault: n/a - calculated automatically", NULL);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (xf_buffer_spin), TRUE);

  xf_autobuf_check = gtk_check_button_new_with_label ("auto");
  gtk_widget_ref (xf_autobuf_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xf_autobuf_check", xf_autobuf_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xf_autobuf_check);
  gtk_box_pack_start (GTK_BOX (xf_bufsize_hbox), xf_autobuf_check, FALSE, FALSE, 0);
  gtk_tooltips_set_tip (tooltips, xf_autobuf_check, "Automatically calculate an optimal buffer size.\nDefault: On", NULL);

  xf_config_hbox = gtk_hbox_new (FALSE, 5);
  gtk_widget_ref (xf_config_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xf_config_hbox", xf_config_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xf_config_hbox);
  gtk_box_pack_start (GTK_BOX (config_crossfader_page), xf_config_hbox, FALSE, FALSE, 0);

  xf_config_label = gtk_label_new ("Set parameters for:");
  gtk_widget_ref (xf_config_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xf_config_label", xf_config_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xf_config_label);
  gtk_box_pack_start (GTK_BOX (xf_config_hbox), xf_config_label, FALSE, FALSE, 0);

  xf_config_optionmenu = gtk_option_menu_new ();
  gtk_widget_ref (xf_config_optionmenu);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xf_config_optionmenu", xf_config_optionmenu,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xf_config_optionmenu);
  gtk_box_pack_start (GTK_BOX (xf_config_hbox), xf_config_optionmenu, TRUE, TRUE, 0);
  gtk_tooltips_set_tip (tooltips, xf_config_optionmenu, "Select the type of songchange you want to configure:\n* Start of playback: When starting playback by pressing PLAY\n* Automatic songchange: When reaching the end of a song and the playlist advances to the next song\n* Manual songchange: When manually selecting another song, for example by pressing NEXT/PREV\n* Manual stop: When pressing the STOP button\n* End of playlist: After the last song in the playlist has been played\n* Seeking: When seeking within the current song", NULL);
  xf_config_optionmenu_menu = gtk_menu_new ();
  glade_menuitem = gtk_menu_item_new_with_label ("dummy");
  gtk_widget_show (glade_menuitem);
  gtk_menu_append (GTK_MENU (xf_config_optionmenu_menu), glade_menuitem);
  gtk_option_menu_set_menu (GTK_OPTION_MENU (xf_config_optionmenu), xf_config_optionmenu_menu);

  xf_type_hbox = gtk_hbox_new (FALSE, 5);
  gtk_widget_ref (xf_type_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xf_type_hbox", xf_type_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xf_type_hbox);
  gtk_box_pack_start (GTK_BOX (config_crossfader_page), xf_type_hbox, FALSE, FALSE, 0);

  xf_type_label = gtk_label_new ("Crossfade/Transition type:");
  gtk_widget_ref (xf_type_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xf_type_label", xf_type_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xf_type_label);
  gtk_box_pack_start (GTK_BOX (xf_type_hbox), xf_type_label, FALSE, FALSE, 0);

  xf_type_optionmenu = gtk_option_menu_new ();
  gtk_widget_ref (xf_type_optionmenu);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xf_type_optionmenu", xf_type_optionmenu,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xf_type_optionmenu);
  gtk_box_pack_start (GTK_BOX (xf_type_hbox), xf_type_optionmenu, TRUE, TRUE, 0);
  gtk_tooltips_set_tip (tooltips, xf_type_optionmenu, "Select the transition to be used for the songchange type selected above:\n* Fade-in: Fade-in at 'Start of playback'\n* Reopen output device: Force a close/open on the output plugin. This will most certainly re-introduce gaps and clicks, but might be usefull with some plugins.\n* Flush output device: Keeps the output plugin opened, but flushes its buffers. This will give you almost instant reaction when pressing NEXT/PREV.\n* None (gapless/off): Gapless mode. Keeps the device opened, but does not do any fading.\n* Simple crossfade: Does a simple crossfade between the previous and the next song.\n* Advanced crossfade: Allows you to configure the crossfade in more detail.\n* Fade-out: Fade-out at 'Manual stop' or 'End of playlist'.", NULL);
  xf_type_optionmenu_menu = gtk_menu_new ();
  glade_menuitem = gtk_menu_item_new_with_label ("dummy");
  gtk_widget_show (glade_menuitem);
  gtk_menu_append (GTK_MENU (xf_type_optionmenu_menu), glade_menuitem);
  gtk_option_menu_set_menu (GTK_OPTION_MENU (xf_type_optionmenu), xf_type_optionmenu_menu);

  xf_type_notebook = gtk_notebook_new ();
  gtk_widget_ref (xf_type_notebook);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xf_type_notebook", xf_type_notebook,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xf_type_notebook);
  gtk_box_pack_start (GTK_BOX (config_crossfader_page), xf_type_notebook, FALSE, FALSE, 0);
  GTK_WIDGET_UNSET_FLAGS (xf_type_notebook, GTK_CAN_FOCUS);
  gtk_notebook_set_show_tabs (GTK_NOTEBOOK (xf_type_notebook), FALSE);
  gtk_notebook_set_show_border (GTK_NOTEBOOK (xf_type_notebook), FALSE);

  empty_notebook_page = gtk_vbox_new (FALSE, 0);
  gtk_widget_show (empty_notebook_page);
  gtk_container_add (GTK_CONTAINER (xf_type_notebook), empty_notebook_page);

  xft_reopen_label = gtk_label_new ("Reopen");
  gtk_widget_ref (xft_reopen_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xft_reopen_label", xft_reopen_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xft_reopen_label);
  gtk_notebook_set_tab_label (GTK_NOTEBOOK (xf_type_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (xf_type_notebook), 0), xft_reopen_label);

  xft_flush_page = gtk_vbox_new (FALSE, 5);
  gtk_widget_ref (xft_flush_page);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xft_flush_page", xft_flush_page,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xft_flush_page);
  gtk_container_add (GTK_CONTAINER (xf_type_notebook), xft_flush_page);

  xftf_pause_frame = gtk_frame_new ("Pause");
  gtk_widget_ref (xftf_pause_frame);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftf_pause_frame", xftf_pause_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftf_pause_frame);
  gtk_box_pack_start (GTK_BOX (xft_flush_page), xftf_pause_frame, FALSE, FALSE, 0);

  xftf_pause_table = gtk_table_new (2, 2, FALSE);
  gtk_widget_ref (xftf_pause_table);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftf_pause_table", xftf_pause_table,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftf_pause_table);
  gtk_container_add (GTK_CONTAINER (xftf_pause_frame), xftf_pause_table);
  gtk_container_set_border_width (GTK_CONTAINER (xftf_pause_table), 5);
  gtk_table_set_row_spacings (GTK_TABLE (xftf_pause_table), 2);
  gtk_table_set_col_spacings (GTK_TABLE (xftf_pause_table), 5);

  xftfp_length_label = gtk_label_new ("Length (ms):");
  gtk_widget_ref (xftfp_length_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfp_length_label", xftfp_length_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfp_length_label);
  gtk_table_attach (GTK_TABLE (xftf_pause_table), xftfp_length_label, 0, 1, 1, 2,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_label_set_justify (GTK_LABEL (xftfp_length_label), GTK_JUSTIFY_LEFT);

  xftfp_length_spin_adj = gtk_adjustment_new (1000, 0, 60000, 100, 1000, 10);
  xftfp_length_spin = gtk_spin_button_new (GTK_ADJUSTMENT (xftfp_length_spin_adj), 0, 0);
  gtk_widget_ref (xftfp_length_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfp_length_spin", xftfp_length_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfp_length_spin);
  gtk_table_attach (GTK_TABLE (xftf_pause_table), xftfp_length_spin, 1, 2, 1, 2,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, xftfp_length_spin, "Specify the length of the silence to be inserted between the tracks.\nDefault: 2000", NULL);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (xftfp_length_spin), TRUE);

  xftfp_enable_check = gtk_check_button_new_with_label ("Enable");
  gtk_widget_ref (xftfp_enable_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfp_enable_check", xftfp_enable_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfp_enable_check);
  gtk_table_attach (GTK_TABLE (xftf_pause_table), xftfp_enable_check, 1, 2, 0, 1,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);

  xftf_fadein_frame = gtk_frame_new ("Fade in");
  gtk_widget_ref (xftf_fadein_frame);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftf_fadein_frame", xftf_fadein_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftf_fadein_frame);
  gtk_box_pack_start (GTK_BOX (xft_flush_page), xftf_fadein_frame, FALSE, FALSE, 0);

  xftf_fadein_table = gtk_table_new (3, 2, FALSE);
  gtk_widget_ref (xftf_fadein_table);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftf_fadein_table", xftf_fadein_table,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftf_fadein_table);
  gtk_container_add (GTK_CONTAINER (xftf_fadein_frame), xftf_fadein_table);
  gtk_container_set_border_width (GTK_CONTAINER (xftf_fadein_table), 5);
  gtk_table_set_row_spacings (GTK_TABLE (xftf_fadein_table), 2);
  gtk_table_set_col_spacings (GTK_TABLE (xftf_fadein_table), 5);

  xftffi_length_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (xftffi_length_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftffi_length_hbox", xftffi_length_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftffi_length_hbox);
  gtk_table_attach (GTK_TABLE (xftf_fadein_table), xftffi_length_hbox, 0, 1, 1, 2,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);

  xftffi_length_label = gtk_label_new ("Length (ms):");
  gtk_widget_ref (xftffi_length_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftffi_length_label", xftffi_length_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftffi_length_label);
  gtk_box_pack_start (GTK_BOX (xftffi_length_hbox), xftffi_length_label, FALSE, FALSE, 0);
  gtk_label_set_justify (GTK_LABEL (xftffi_length_label), GTK_JUSTIFY_LEFT);

  xftffi_volume_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (xftffi_volume_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftffi_volume_hbox", xftffi_volume_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftffi_volume_hbox);
  gtk_table_attach (GTK_TABLE (xftf_fadein_table), xftffi_volume_hbox, 0, 1, 2, 3,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);

  xftffi_volume_label = gtk_label_new ("Start volume (%):");
  gtk_widget_ref (xftffi_volume_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftffi_volume_label", xftffi_volume_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftffi_volume_label);
  gtk_box_pack_start (GTK_BOX (xftffi_volume_hbox), xftffi_volume_label, FALSE, FALSE, 0);
  gtk_label_set_justify (GTK_LABEL (xftffi_volume_label), GTK_JUSTIFY_LEFT);

  xftffi_length_spin_adj = gtk_adjustment_new (1000, 0, 60000, 100, 1000, 10);
  xftffi_length_spin = gtk_spin_button_new (GTK_ADJUSTMENT (xftffi_length_spin_adj), 0, 0);
  gtk_widget_ref (xftffi_length_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftffi_length_spin", xftffi_length_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftffi_length_spin);
  gtk_table_attach (GTK_TABLE (xftf_fadein_table), xftffi_length_spin, 1, 2, 1, 2,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, xftffi_length_spin, "Set the duration for the fadein of the next song.", NULL);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (xftffi_length_spin), TRUE);

  xftffi_enable_check = gtk_check_button_new_with_label ("Enable");
  gtk_widget_ref (xftffi_enable_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftffi_enable_check", xftffi_enable_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftffi_enable_check);
  gtk_table_attach (GTK_TABLE (xftf_fadein_table), xftffi_enable_check, 1, 2, 0, 1,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);

  xftffi_volume_spin_adj = gtk_adjustment_new (0, 0, 100, 1, 10, 10);
  xftffi_volume_spin = gtk_spin_button_new (GTK_ADJUSTMENT (xftffi_volume_spin_adj), 0, 0);
  gtk_widget_ref (xftffi_volume_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftffi_volume_spin", xftffi_volume_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftffi_volume_spin);
  gtk_table_attach (GTK_TABLE (xftf_fadein_table), xftffi_volume_spin, 1, 2, 2, 3,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, xftffi_volume_spin, "Set the start volume. XMMS-crossfade will fade from this volume to 100% during the time specified above.\nDefault: 0", NULL);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (xftffi_volume_spin), TRUE);

  xft_flush_label = gtk_label_new ("Flush");
  gtk_widget_ref (xft_flush_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xft_flush_label", xft_flush_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xft_flush_label);
  gtk_notebook_set_tab_label (GTK_NOTEBOOK (xf_type_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (xf_type_notebook), 1), xft_flush_label);

  empty_notebook_page = gtk_vbox_new (FALSE, 0);
  gtk_widget_show (empty_notebook_page);
  gtk_container_add (GTK_CONTAINER (xf_type_notebook), empty_notebook_page);

  xft_none_label = gtk_label_new ("None");
  gtk_widget_ref (xft_none_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xft_none_label", xft_none_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xft_none_label);
  gtk_notebook_set_tab_label (GTK_NOTEBOOK (xf_type_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (xf_type_notebook), 2), xft_none_label);

  xft_pause_page = gtk_vbox_new (FALSE, 5);
  gtk_widget_ref (xft_pause_page);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xft_pause_page", xft_pause_page,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xft_pause_page);
  gtk_container_add (GTK_CONTAINER (xf_type_notebook), xft_pause_page);

  xf_pause_frame = gtk_frame_new ("Pause");
  gtk_widget_ref (xf_pause_frame);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xf_pause_frame", xf_pause_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xf_pause_frame);
  gtk_box_pack_start (GTK_BOX (xft_pause_page), xf_pause_frame, FALSE, FALSE, 0);

  xf_pause_table = gtk_table_new (1, 2, FALSE);
  gtk_widget_ref (xf_pause_table);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xf_pause_table", xf_pause_table,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xf_pause_table);
  gtk_container_add (GTK_CONTAINER (xf_pause_frame), xf_pause_table);
  gtk_container_set_border_width (GTK_CONTAINER (xf_pause_table), 5);
  gtk_table_set_row_spacings (GTK_TABLE (xf_pause_table), 2);
  gtk_table_set_col_spacings (GTK_TABLE (xf_pause_table), 5);

  pause_length_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (pause_length_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "pause_length_hbox", pause_length_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (pause_length_hbox);
  gtk_table_attach (GTK_TABLE (xf_pause_table), pause_length_hbox, 0, 1, 0, 1,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);

  pause_length_label = gtk_label_new ("Length (ms):");
  gtk_widget_ref (pause_length_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "pause_length_label", pause_length_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (pause_length_label);
  gtk_box_pack_start (GTK_BOX (pause_length_hbox), pause_length_label, FALSE, FALSE, 0);
  gtk_label_set_justify (GTK_LABEL (pause_length_label), GTK_JUSTIFY_LEFT);

  pause_length_spin_adj = gtk_adjustment_new (1000, 0, 60000, 100, 1000, 10);
  pause_length_spin = gtk_spin_button_new (GTK_ADJUSTMENT (pause_length_spin_adj), 0, 0);
  gtk_widget_ref (pause_length_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "pause_length_spin", pause_length_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (pause_length_spin);
  gtk_table_attach (GTK_TABLE (xf_pause_table), pause_length_spin, 1, 2, 0, 1,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, pause_length_spin, "Specify the length of the silence to be inserted between the tracks.\nDefault: 2000", NULL);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (pause_length_spin), TRUE);

  xft_pause_label = gtk_label_new ("Pause");
  gtk_widget_ref (xft_pause_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xft_pause_label", xft_pause_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xft_pause_label);
  gtk_notebook_set_tab_label (GTK_NOTEBOOK (xf_type_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (xf_type_notebook), 3), xft_pause_label);

  xft_simplexf_page = gtk_vbox_new (FALSE, 5);
  gtk_widget_ref (xft_simplexf_page);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xft_simplexf_page", xft_simplexf_page,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xft_simplexf_page);
  gtk_container_add (GTK_CONTAINER (xf_type_notebook), xft_simplexf_page);

  xf_simple_frame = gtk_frame_new ("Crossfade");
  gtk_widget_ref (xf_simple_frame);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xf_simple_frame", xf_simple_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xf_simple_frame);
  gtk_box_pack_start (GTK_BOX (xft_simplexf_page), xf_simple_frame, FALSE, FALSE, 0);

  xf_simple_table = gtk_table_new (1, 2, FALSE);
  gtk_widget_ref (xf_simple_table);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xf_simple_table", xf_simple_table,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xf_simple_table);
  gtk_container_add (GTK_CONTAINER (xf_simple_frame), xf_simple_table);
  gtk_container_set_border_width (GTK_CONTAINER (xf_simple_table), 5);
  gtk_table_set_row_spacings (GTK_TABLE (xf_simple_table), 2);
  gtk_table_set_col_spacings (GTK_TABLE (xf_simple_table), 5);

  simple_length_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (simple_length_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "simple_length_hbox", simple_length_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (simple_length_hbox);
  gtk_table_attach (GTK_TABLE (xf_simple_table), simple_length_hbox, 0, 1, 0, 1,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);

  simple_length_label = gtk_label_new ("Length (ms):");
  gtk_widget_ref (simple_length_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "simple_length_label", simple_length_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (simple_length_label);
  gtk_box_pack_start (GTK_BOX (simple_length_hbox), simple_length_label, FALSE, FALSE, 0);
  gtk_label_set_justify (GTK_LABEL (simple_length_label), GTK_JUSTIFY_LEFT);

  simple_length_spin_adj = gtk_adjustment_new (1500, 0, 60000, 100, 1000, 10);
  simple_length_spin = gtk_spin_button_new (GTK_ADJUSTMENT (simple_length_spin_adj), 0, 0);
  gtk_widget_ref (simple_length_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "simple_length_spin", simple_length_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (simple_length_spin);
  gtk_table_attach (GTK_TABLE (xf_simple_table), simple_length_spin, 1, 2, 0, 1,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, simple_length_spin, "Specify the length of the crosssfade.\nDefault: depends on songchange type", NULL);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (simple_length_spin), TRUE);

  xft_simplexf_label = gtk_label_new ("Simple XF");
  gtk_widget_ref (xft_simplexf_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xft_simplexf_label", xft_simplexf_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xft_simplexf_label);
  gtk_notebook_set_tab_label (GTK_NOTEBOOK (xf_type_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (xf_type_notebook), 4), xft_simplexf_label);

  xft_advancedxf_page = gtk_vbox_new (FALSE, 5);
  gtk_widget_ref (xft_advancedxf_page);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xft_advancedxf_page", xft_advancedxf_page,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xft_advancedxf_page);
  gtk_container_add (GTK_CONTAINER (xf_type_notebook), xft_advancedxf_page);

  xf_fadeout_frame = gtk_frame_new ("Fade out");
  gtk_widget_ref (xf_fadeout_frame);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xf_fadeout_frame", xf_fadeout_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xf_fadeout_frame);
  gtk_box_pack_start (GTK_BOX (xft_advancedxf_page), xf_fadeout_frame, FALSE, FALSE, 0);

  xf_fadeout_table = gtk_table_new (3, 2, FALSE);
  gtk_widget_ref (xf_fadeout_table);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xf_fadeout_table", xf_fadeout_table,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xf_fadeout_table);
  gtk_container_add (GTK_CONTAINER (xf_fadeout_frame), xf_fadeout_table);
  gtk_container_set_border_width (GTK_CONTAINER (xf_fadeout_table), 5);
  gtk_table_set_row_spacings (GTK_TABLE (xf_fadeout_table), 2);
  gtk_table_set_col_spacings (GTK_TABLE (xf_fadeout_table), 5);

  fadeout_length_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (fadeout_length_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "fadeout_length_hbox", fadeout_length_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fadeout_length_hbox);
  gtk_table_attach (GTK_TABLE (xf_fadeout_table), fadeout_length_hbox, 0, 1, 1, 2,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);

  fadeout_length_label = gtk_label_new ("Length (ms):");
  gtk_widget_ref (fadeout_length_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "fadeout_length_label", fadeout_length_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fadeout_length_label);
  gtk_box_pack_start (GTK_BOX (fadeout_length_hbox), fadeout_length_label, FALSE, FALSE, 0);
  gtk_label_set_justify (GTK_LABEL (fadeout_length_label), GTK_JUSTIFY_LEFT);

  fadeout_length_spin_adj = gtk_adjustment_new (1000, 0, 60000, 100, 1000, 10);
  fadeout_length_spin = gtk_spin_button_new (GTK_ADJUSTMENT (fadeout_length_spin_adj), 0, 0);
  gtk_widget_ref (fadeout_length_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "fadeout_length_spin", fadeout_length_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fadeout_length_spin);
  gtk_table_attach (GTK_TABLE (xf_fadeout_table), fadeout_length_spin, 1, 2, 1, 2,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, fadeout_length_spin, "Set the duration for the fadeout of the previous song.", NULL);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (fadeout_length_spin), TRUE);

  fadeout_volume_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (fadeout_volume_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "fadeout_volume_hbox", fadeout_volume_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fadeout_volume_hbox);
  gtk_table_attach (GTK_TABLE (xf_fadeout_table), fadeout_volume_hbox, 0, 1, 2, 3,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);

  fadeout_volume_label = gtk_label_new ("End volume (%):");
  gtk_widget_ref (fadeout_volume_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "fadeout_volume_label", fadeout_volume_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fadeout_volume_label);
  gtk_box_pack_start (GTK_BOX (fadeout_volume_hbox), fadeout_volume_label, FALSE, FALSE, 0);
  gtk_label_set_justify (GTK_LABEL (fadeout_volume_label), GTK_JUSTIFY_LEFT);

  fadeout_volume_spin_adj = gtk_adjustment_new (0, 0, 100, 1, 10, 10);
  fadeout_volume_spin = gtk_spin_button_new (GTK_ADJUSTMENT (fadeout_volume_spin_adj), 0, 0);
  gtk_widget_ref (fadeout_volume_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "fadeout_volume_spin", fadeout_volume_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fadeout_volume_spin);
  gtk_table_attach (GTK_TABLE (xf_fadeout_table), fadeout_volume_spin, 1, 2, 2, 3,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, fadeout_volume_spin, "Set the end volume. XMMS-crossfade will fade from 100% to this volume during the time specified above.\nDefault: 0", NULL);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (fadeout_volume_spin), TRUE);

  fadeout_options_hbox = gtk_hbox_new (FALSE, 5);
  gtk_widget_ref (fadeout_options_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "fadeout_options_hbox", fadeout_options_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fadeout_options_hbox);
  gtk_table_attach (GTK_TABLE (xf_fadeout_table), fadeout_options_hbox, 1, 2, 0, 1,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);

  fadeout_enable_check = gtk_check_button_new_with_label ("Enable");
  gtk_widget_ref (fadeout_enable_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "fadeout_enable_check", fadeout_enable_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fadeout_enable_check);
  gtk_box_pack_start (GTK_BOX (fadeout_options_hbox), fadeout_enable_check, FALSE, FALSE, 0);

  xf_offset_frame = gtk_frame_new ("Offset");
  gtk_widget_ref (xf_offset_frame);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xf_offset_frame", xf_offset_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xf_offset_frame);
  gtk_box_pack_start (GTK_BOX (xft_advancedxf_page), xf_offset_frame, FALSE, FALSE, 0);

  xf_offset_table = gtk_table_new (4, 1, FALSE);
  gtk_widget_ref (xf_offset_table);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xf_offset_table", xf_offset_table,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xf_offset_table);
  gtk_container_add (GTK_CONTAINER (xf_offset_frame), xf_offset_table);
  gtk_container_set_border_width (GTK_CONTAINER (xf_offset_table), 5);
  gtk_table_set_row_spacings (GTK_TABLE (xf_offset_table), 2);
  gtk_table_set_col_spacings (GTK_TABLE (xf_offset_table), 5);

  xfofs_custom_hbox = gtk_hbox_new (FALSE, 5);
  gtk_widget_ref (xfofs_custom_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xfofs_custom_hbox", xfofs_custom_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xfofs_custom_hbox);
  gtk_table_attach (GTK_TABLE (xf_offset_table), xfofs_custom_hbox, 0, 1, 3, 4,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);

  xfofs_custom_radiobutton = gtk_radio_button_new_with_label (offset_group_group, "Custom (ms):");
  offset_group_group = gtk_radio_button_group (GTK_RADIO_BUTTON (xfofs_custom_radiobutton));
  gtk_widget_ref (xfofs_custom_radiobutton);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xfofs_custom_radiobutton", xfofs_custom_radiobutton,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xfofs_custom_radiobutton);
  gtk_box_pack_start (GTK_BOX (xfofs_custom_hbox), xfofs_custom_radiobutton, FALSE, FALSE, 0);
  gtk_tooltips_set_tip (tooltips, xfofs_custom_radiobutton, "Set a custom offset.", NULL);

  xfofs_custom_spin_adj = gtk_adjustment_new (-2000, -60000, 60000, 100, 1000, 10);
  xfofs_custom_spin = gtk_spin_button_new (GTK_ADJUSTMENT (xfofs_custom_spin_adj), 0, 0);
  gtk_widget_ref (xfofs_custom_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xfofs_custom_spin", xfofs_custom_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xfofs_custom_spin);
  gtk_box_pack_start (GTK_BOX (xfofs_custom_hbox), xfofs_custom_spin, TRUE, TRUE, 0);
  gtk_tooltips_set_tip (tooltips, xfofs_custom_spin, "Set how much the end of the previous and the beginning of the next song should overlap.\n* Negative values indicate that the next song should start before the previous has reached the end.\n* A value of 0 means that the songs are concatenated seamlessly.\n* Positive values will yield insert silence inbetween..", NULL);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (xfofs_custom_spin), TRUE);

  xfofs_none_radiobutton = gtk_radio_button_new_with_label (offset_group_group, "None (0 ms)");
  offset_group_group = gtk_radio_button_group (GTK_RADIO_BUTTON (xfofs_none_radiobutton));
  gtk_widget_ref (xfofs_none_radiobutton);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xfofs_none_radiobutton", xfofs_none_radiobutton,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xfofs_none_radiobutton);
  gtk_table_attach (GTK_TABLE (xf_offset_table), xfofs_none_radiobutton, 0, 1, 0, 1,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, xfofs_none_radiobutton, "Don't overlap the two songs. The next song will start immediatelly after the previous has ended.", NULL);

  xfofs_lockout_radiobutton = gtk_radio_button_new_with_label (offset_group_group, "Lock to fadeout length");
  offset_group_group = gtk_radio_button_group (GTK_RADIO_BUTTON (xfofs_lockout_radiobutton));
  gtk_widget_ref (xfofs_lockout_radiobutton);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xfofs_lockout_radiobutton", xfofs_lockout_radiobutton,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xfofs_lockout_radiobutton);
  gtk_table_attach (GTK_TABLE (xf_offset_table), xfofs_lockout_radiobutton, 0, 1, 1, 2,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, xfofs_lockout_radiobutton, "Overlap by the fadeout duration specified above.", NULL);

  xfofs_lockin_radiobutton = gtk_radio_button_new_with_label (offset_group_group, "Lock to fadein length");
  offset_group_group = gtk_radio_button_group (GTK_RADIO_BUTTON (xfofs_lockin_radiobutton));
  gtk_widget_ref (xfofs_lockin_radiobutton);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xfofs_lockin_radiobutton", xfofs_lockin_radiobutton,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xfofs_lockin_radiobutton);
  gtk_table_attach (GTK_TABLE (xf_offset_table), xfofs_lockin_radiobutton, 0, 1, 2, 3,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, xfofs_lockin_radiobutton, "Overlap by the fadein duration specified below..", NULL);

  xf_fadein_frame = gtk_frame_new ("Fade in");
  gtk_widget_ref (xf_fadein_frame);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xf_fadein_frame", xf_fadein_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xf_fadein_frame);
  gtk_box_pack_start (GTK_BOX (xft_advancedxf_page), xf_fadein_frame, FALSE, FALSE, 0);

  xf_fadein_table = gtk_table_new (3, 2, FALSE);
  gtk_widget_ref (xf_fadein_table);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xf_fadein_table", xf_fadein_table,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xf_fadein_table);
  gtk_container_add (GTK_CONTAINER (xf_fadein_frame), xf_fadein_table);
  gtk_container_set_border_width (GTK_CONTAINER (xf_fadein_table), 5);
  gtk_table_set_row_spacings (GTK_TABLE (xf_fadein_table), 2);
  gtk_table_set_col_spacings (GTK_TABLE (xf_fadein_table), 5);

  fadein_length_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (fadein_length_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "fadein_length_hbox", fadein_length_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fadein_length_hbox);
  gtk_table_attach (GTK_TABLE (xf_fadein_table), fadein_length_hbox, 0, 1, 1, 2,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);

  fadein_length_label = gtk_label_new ("Length (ms):");
  gtk_widget_ref (fadein_length_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "fadein_length_label", fadein_length_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fadein_length_label);
  gtk_box_pack_start (GTK_BOX (fadein_length_hbox), fadein_length_label, FALSE, FALSE, 0);
  gtk_label_set_justify (GTK_LABEL (fadein_length_label), GTK_JUSTIFY_LEFT);

  fadein_volume_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (fadein_volume_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "fadein_volume_hbox", fadein_volume_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fadein_volume_hbox);
  gtk_table_attach (GTK_TABLE (xf_fadein_table), fadein_volume_hbox, 0, 1, 2, 3,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);

  fadein_volume_label = gtk_label_new ("Start volume (%):");
  gtk_widget_ref (fadein_volume_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "fadein_volume_label", fadein_volume_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fadein_volume_label);
  gtk_box_pack_start (GTK_BOX (fadein_volume_hbox), fadein_volume_label, FALSE, FALSE, 0);
  gtk_label_set_justify (GTK_LABEL (fadein_volume_label), GTK_JUSTIFY_LEFT);

  fadein_length_spin_adj = gtk_adjustment_new (1000, 0, 60000, 100, 1000, 10);
  fadein_length_spin = gtk_spin_button_new (GTK_ADJUSTMENT (fadein_length_spin_adj), 0, 0);
  gtk_widget_ref (fadein_length_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "fadein_length_spin", fadein_length_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fadein_length_spin);
  gtk_table_attach (GTK_TABLE (xf_fadein_table), fadein_length_spin, 1, 2, 1, 2,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, fadein_length_spin, "Set the duration for the fadein of the next song.", NULL);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (fadein_length_spin), TRUE);

  fadein_enable_check = gtk_check_button_new_with_label (" Enable");
  gtk_widget_ref (fadein_enable_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "fadein_enable_check", fadein_enable_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fadein_enable_check);
  gtk_table_attach (GTK_TABLE (xf_fadein_table), fadein_enable_check, 1, 2, 0, 1,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);

  fadein_lock_check = gtk_check_button_new_with_label ("Lock to Fade-out");
  gtk_widget_ref (fadein_lock_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "fadein_lock_check", fadein_lock_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fadein_lock_check);
  gtk_table_attach (GTK_TABLE (xf_fadein_table), fadein_lock_check, 0, 1, 0, 1,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, fadein_lock_check, "Use the same settings as fade-out.", NULL);

  fadein_volume_spin_adj = gtk_adjustment_new (0, 0, 100, 1, 10, 10);
  fadein_volume_spin = gtk_spin_button_new (GTK_ADJUSTMENT (fadein_volume_spin_adj), 0, 0);
  gtk_widget_ref (fadein_volume_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "fadein_volume_spin", fadein_volume_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (fadein_volume_spin);
  gtk_table_attach (GTK_TABLE (xf_fadein_table), fadein_volume_spin, 1, 2, 2, 3,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, fadein_volume_spin, "Set the start volume. XMMS-crossfade will fade from this volume to 100% during the time specified above.\nDefault: 0", NULL);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (fadein_volume_spin), TRUE);

  xft_advancedxf_label = gtk_label_new ("Advanced XF");
  gtk_widget_ref (xft_advancedxf_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xft_advancedxf_label", xft_advancedxf_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xft_advancedxf_label);
  gtk_notebook_set_tab_label (GTK_NOTEBOOK (xf_type_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (xf_type_notebook), 5), xft_advancedxf_label);

  xft_fadein_page = gtk_vbox_new (FALSE, 0);
  gtk_widget_ref (xft_fadein_page);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xft_fadein_page", xft_fadein_page,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xft_fadein_page);
  gtk_container_add (GTK_CONTAINER (xf_type_notebook), xft_fadein_page);

  xftfi_fadein_frame = gtk_frame_new ("Fade in");
  gtk_widget_ref (xftfi_fadein_frame);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfi_fadein_frame", xftfi_fadein_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfi_fadein_frame);
  gtk_box_pack_start (GTK_BOX (xft_fadein_page), xftfi_fadein_frame, FALSE, FALSE, 0);

  xftfi_fadein_table = gtk_table_new (2, 2, FALSE);
  gtk_widget_ref (xftfi_fadein_table);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfi_fadein_table", xftfi_fadein_table,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfi_fadein_table);
  gtk_container_add (GTK_CONTAINER (xftfi_fadein_frame), xftfi_fadein_table);
  gtk_container_set_border_width (GTK_CONTAINER (xftfi_fadein_table), 5);
  gtk_table_set_row_spacings (GTK_TABLE (xftfi_fadein_table), 2);
  gtk_table_set_col_spacings (GTK_TABLE (xftfi_fadein_table), 5);

  xftfi_length_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (xftfi_length_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfi_length_hbox", xftfi_length_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfi_length_hbox);
  gtk_table_attach (GTK_TABLE (xftfi_fadein_table), xftfi_length_hbox, 0, 1, 0, 1,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);

  xftfi_length_label = gtk_label_new ("Length (ms):");
  gtk_widget_ref (xftfi_length_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfi_length_label", xftfi_length_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfi_length_label);
  gtk_box_pack_start (GTK_BOX (xftfi_length_hbox), xftfi_length_label, FALSE, FALSE, 0);
  gtk_label_set_justify (GTK_LABEL (xftfi_length_label), GTK_JUSTIFY_LEFT);

  xftfi_volume_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (xftfi_volume_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfi_volume_hbox", xftfi_volume_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfi_volume_hbox);
  gtk_table_attach (GTK_TABLE (xftfi_fadein_table), xftfi_volume_hbox, 0, 1, 1, 2,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);

  xftfi_volume_label = gtk_label_new ("Start volume (%):");
  gtk_widget_ref (xftfi_volume_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfi_volume_label", xftfi_volume_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfi_volume_label);
  gtk_box_pack_start (GTK_BOX (xftfi_volume_hbox), xftfi_volume_label, FALSE, FALSE, 0);
  gtk_label_set_justify (GTK_LABEL (xftfi_volume_label), GTK_JUSTIFY_LEFT);

  xftfi_length_spin_adj = gtk_adjustment_new (1000, 0, 60000, 10, 100, 10);
  xftfi_length_spin = gtk_spin_button_new (GTK_ADJUSTMENT (xftfi_length_spin_adj), 0, 0);
  gtk_widget_ref (xftfi_length_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfi_length_spin", xftfi_length_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfi_length_spin);
  gtk_table_attach (GTK_TABLE (xftfi_fadein_table), xftfi_length_spin, 1, 2, 0, 1,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, xftfi_length_spin, "Set the duration for the fadein when starting playback.", NULL);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (xftfi_length_spin), TRUE);

  xftfi_volume_spin_adj = gtk_adjustment_new (0, 0, 100, 1, 10, 10);
  xftfi_volume_spin = gtk_spin_button_new (GTK_ADJUSTMENT (xftfi_volume_spin_adj), 0, 0);
  gtk_widget_ref (xftfi_volume_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfi_volume_spin", xftfi_volume_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfi_volume_spin);
  gtk_table_attach (GTK_TABLE (xftfi_fadein_table), xftfi_volume_spin, 1, 2, 1, 2,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, xftfi_volume_spin, "Set the start volume. XMMS-crossfade will fade from this volume to 100% during the time specified above.\nDefault: 0", NULL);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (xftfi_volume_spin), TRUE);

  xft_fadein_label = gtk_label_new ("Fade in");
  gtk_widget_ref (xft_fadein_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xft_fadein_label", xft_fadein_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xft_fadein_label);
  gtk_notebook_set_tab_label (GTK_NOTEBOOK (xf_type_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (xf_type_notebook), 6), xft_fadein_label);

  xft_fadeout_page = gtk_vbox_new (FALSE, 5);
  gtk_widget_ref (xft_fadeout_page);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xft_fadeout_page", xft_fadeout_page,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xft_fadeout_page);
  gtk_container_add (GTK_CONTAINER (xf_type_notebook), xft_fadeout_page);

  xftfo_fadeout_frame = gtk_frame_new ("Fade out");
  gtk_widget_ref (xftfo_fadeout_frame);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfo_fadeout_frame", xftfo_fadeout_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfo_fadeout_frame);
  gtk_box_pack_start (GTK_BOX (xft_fadeout_page), xftfo_fadeout_frame, FALSE, FALSE, 0);

  xftfo_fadeout_table = gtk_table_new (2, 2, FALSE);
  gtk_widget_ref (xftfo_fadeout_table);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfo_fadeout_table", xftfo_fadeout_table,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfo_fadeout_table);
  gtk_container_add (GTK_CONTAINER (xftfo_fadeout_frame), xftfo_fadeout_table);
  gtk_container_set_border_width (GTK_CONTAINER (xftfo_fadeout_table), 5);
  gtk_table_set_row_spacings (GTK_TABLE (xftfo_fadeout_table), 2);
  gtk_table_set_col_spacings (GTK_TABLE (xftfo_fadeout_table), 5);

  xftfo_length_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (xftfo_length_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfo_length_hbox", xftfo_length_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfo_length_hbox);
  gtk_table_attach (GTK_TABLE (xftfo_fadeout_table), xftfo_length_hbox, 0, 1, 0, 1,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);

  xftfo_length_label = gtk_label_new ("Length (ms):");
  gtk_widget_ref (xftfo_length_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfo_length_label", xftfo_length_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfo_length_label);
  gtk_box_pack_start (GTK_BOX (xftfo_length_hbox), xftfo_length_label, FALSE, FALSE, 0);
  gtk_label_set_justify (GTK_LABEL (xftfo_length_label), GTK_JUSTIFY_LEFT);

  xftfo_length_spin_adj = gtk_adjustment_new (500, 0, 60000, 10, 100, 10);
  xftfo_length_spin = gtk_spin_button_new (GTK_ADJUSTMENT (xftfo_length_spin_adj), 0, 0);
  gtk_widget_ref (xftfo_length_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfo_length_spin", xftfo_length_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfo_length_spin);
  gtk_table_attach (GTK_TABLE (xftfo_fadeout_table), xftfo_length_spin, 1, 2, 0, 1,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, xftfo_length_spin, "Set the duration for the fadeout of the last song.", NULL);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (xftfo_length_spin), TRUE);

  xftfo_volume_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (xftfo_volume_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfo_volume_hbox", xftfo_volume_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfo_volume_hbox);
  gtk_table_attach (GTK_TABLE (xftfo_fadeout_table), xftfo_volume_hbox, 0, 1, 1, 2,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);

  xftfo_volume_label = gtk_label_new ("End volume (%):");
  gtk_widget_ref (xftfo_volume_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfo_volume_label", xftfo_volume_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfo_volume_label);
  gtk_box_pack_start (GTK_BOX (xftfo_volume_hbox), xftfo_volume_label, FALSE, FALSE, 0);
  gtk_label_set_justify (GTK_LABEL (xftfo_volume_label), GTK_JUSTIFY_LEFT);

  xftfo_volume_spin_adj = gtk_adjustment_new (0, 0, 100, 1, 10, 10);
  xftfo_volume_spin = gtk_spin_button_new (GTK_ADJUSTMENT (xftfo_volume_spin_adj), 0, 0);
  gtk_widget_ref (xftfo_volume_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfo_volume_spin", xftfo_volume_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfo_volume_spin);
  gtk_table_attach (GTK_TABLE (xftfo_fadeout_table), xftfo_volume_spin, 1, 2, 1, 2,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, xftfo_volume_spin, "Set the end volume. XMMS-crossfade will fade from 100% to this volume during the time specified above.\nDefault: 0", NULL);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (xftfo_volume_spin), TRUE);

  xftfo_silence_frame = gtk_frame_new ("Additional silence");
  gtk_widget_ref (xftfo_silence_frame);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfo_silence_frame", xftfo_silence_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfo_silence_frame);
  gtk_box_pack_start (GTK_BOX (xft_fadeout_page), xftfo_silence_frame, FALSE, FALSE, 0);

  xftfo_silence_table = gtk_table_new (1, 2, FALSE);
  gtk_widget_ref (xftfo_silence_table);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfo_silence_table", xftfo_silence_table,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfo_silence_table);
  gtk_container_add (GTK_CONTAINER (xftfo_silence_frame), xftfo_silence_table);
  gtk_container_set_border_width (GTK_CONTAINER (xftfo_silence_table), 5);
  gtk_table_set_row_spacings (GTK_TABLE (xftfo_silence_table), 2);
  gtk_table_set_col_spacings (GTK_TABLE (xftfo_silence_table), 5);

  xftfo_silence_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (xftfo_silence_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfo_silence_hbox", xftfo_silence_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfo_silence_hbox);
  gtk_table_attach (GTK_TABLE (xftfo_silence_table), xftfo_silence_hbox, 0, 1, 0, 1,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);

  xftfo_silence_label = gtk_label_new ("Length (ms):");
  gtk_widget_ref (xftfo_silence_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfo_silence_label", xftfo_silence_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfo_silence_label);
  gtk_box_pack_start (GTK_BOX (xftfo_silence_hbox), xftfo_silence_label, FALSE, FALSE, 0);
  gtk_label_set_justify (GTK_LABEL (xftfo_silence_label), GTK_JUSTIFY_LEFT);

  xftfo_silence_spin_adj = gtk_adjustment_new (100, 0, 60000, 10, 100, 10);
  xftfo_silence_spin = gtk_spin_button_new (GTK_ADJUSTMENT (xftfo_silence_spin_adj), 0, 0);
  gtk_widget_ref (xftfo_silence_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfo_silence_spin", xftfo_silence_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfo_silence_spin);
  gtk_table_attach (GTK_TABLE (xftfo_silence_table), xftfo_silence_spin, 1, 2, 0, 1,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, xftfo_silence_spin, "Set how much additional silence should be played after the end of the last song. This way, you can avoid the clicks some soundcards produce when being shut down during playback.\nDefault: 500", NULL);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (xftfo_silence_spin), TRUE);

  xft_fadeout_label = gtk_label_new ("Fade out");
  gtk_widget_ref (xft_fadeout_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xft_fadeout_label", xft_fadeout_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xft_fadeout_label);
  gtk_notebook_set_tab_label (GTK_NOTEBOOK (xf_type_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (xf_type_notebook), 7), xft_fadeout_label);

  empty_notebook_page = gtk_vbox_new (FALSE, 0);
  gtk_widget_show (empty_notebook_page);
  gtk_container_add (GTK_CONTAINER (xf_type_notebook), empty_notebook_page);

  xft_pause_none_label = gtk_label_new ("None");
  gtk_widget_ref (xft_pause_none_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xft_pause_none_label", xft_pause_none_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xft_pause_none_label);
  gtk_notebook_set_tab_label (GTK_NOTEBOOK (xf_type_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (xf_type_notebook), 8), xft_pause_none_label);

  xft_pause_adv_page = gtk_vbox_new (FALSE, 5);
  gtk_widget_ref (xft_pause_adv_page);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xft_pause_adv_page", xft_pause_adv_page,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xft_pause_adv_page);
  gtk_container_add (GTK_CONTAINER (xf_type_notebook), xft_pause_adv_page);

  xft_fadeoutin_frame = gtk_frame_new ("Fade out / Fade in");
  gtk_widget_ref (xft_fadeoutin_frame);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xft_fadeoutin_frame", xft_fadeoutin_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xft_fadeoutin_frame);
  gtk_box_pack_start (GTK_BOX (xft_pause_adv_page), xft_fadeoutin_frame, FALSE, FALSE, 0);

  xft_fadeoutin_table = gtk_table_new (3, 2, FALSE);
  gtk_widget_ref (xft_fadeoutin_table);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xft_fadeoutin_table", xft_fadeoutin_table,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xft_fadeoutin_table);
  gtk_container_add (GTK_CONTAINER (xft_fadeoutin_frame), xft_fadeoutin_table);
  gtk_container_set_border_width (GTK_CONTAINER (xft_fadeoutin_table), 5);
  gtk_table_set_row_spacings (GTK_TABLE (xft_fadeoutin_table), 2);
  gtk_table_set_col_spacings (GTK_TABLE (xft_fadeoutin_table), 5);

  xftfoi_fadeout_spin_adj = gtk_adjustment_new (100, 0, 60000, 10, 100, 10);
  xftfoi_fadeout_spin = gtk_spin_button_new (GTK_ADJUSTMENT (xftfoi_fadeout_spin_adj), 0, 0);
  gtk_widget_ref (xftfoi_fadeout_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfoi_fadeout_spin", xftfoi_fadeout_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfoi_fadeout_spin);
  gtk_table_attach (GTK_TABLE (xft_fadeoutin_table), xftfoi_fadeout_spin, 1, 2, 0, 1,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, xftfoi_fadeout_spin, "Set the duration for the fadeout when pausing.\nDefault: 100\n", NULL);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (xftfoi_fadeout_spin), TRUE);

  xftfoi_silence_spin_adj = gtk_adjustment_new (100, 0, 60000, 10, 100, 10);
  xftfoi_silence_spin = gtk_spin_button_new (GTK_ADJUSTMENT (xftfoi_silence_spin_adj), 0, 0);
  gtk_widget_ref (xftfoi_silence_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfoi_silence_spin", xftfoi_silence_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfoi_silence_spin);
  gtk_table_attach (GTK_TABLE (xft_fadeoutin_table), xftfoi_silence_spin, 1, 2, 1, 2,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, xftfoi_silence_spin, "Set how much additional silence should be played after pausing. This way, you can avoid the clicks some soundcards produce when entering pause.\nDefault: 100", NULL);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (xftfoi_silence_spin), TRUE);

  xftfoi_fadein_spin_adj = gtk_adjustment_new (100, 0, 60000, 10, 100, 10);
  xftfoi_fadein_spin = gtk_spin_button_new (GTK_ADJUSTMENT (xftfoi_fadein_spin_adj), 0, 0);
  gtk_widget_ref (xftfoi_fadein_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfoi_fadein_spin", xftfoi_fadein_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfoi_fadein_spin);
  gtk_table_attach (GTK_TABLE (xft_fadeoutin_table), xftfoi_fadein_spin, 1, 2, 2, 3,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, xftfoi_fadein_spin, "Set the duration for the fadein when unpausing.\nDefault: 100", NULL);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (xftfoi_fadein_spin), TRUE);

  xftfoi_fadein_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (xftfoi_fadein_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfoi_fadein_hbox", xftfoi_fadein_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfoi_fadein_hbox);
  gtk_table_attach (GTK_TABLE (xft_fadeoutin_table), xftfoi_fadein_hbox, 0, 1, 0, 1,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);

  xftfoi_fadein_label = gtk_label_new ("Fade out (ms):");
  gtk_widget_ref (xftfoi_fadein_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfoi_fadein_label", xftfoi_fadein_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfoi_fadein_label);
  gtk_box_pack_start (GTK_BOX (xftfoi_fadein_hbox), xftfoi_fadein_label, FALSE, FALSE, 0);
  gtk_label_set_justify (GTK_LABEL (xftfoi_fadein_label), GTK_JUSTIFY_LEFT);

  xftfoi_silence_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (xftfoi_silence_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfoi_silence_hbox", xftfoi_silence_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfoi_silence_hbox);
  gtk_table_attach (GTK_TABLE (xft_fadeoutin_table), xftfoi_silence_hbox, 0, 1, 1, 2,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);

  xftfoi_silence_label = gtk_label_new ("Silence (ms):");
  gtk_widget_ref (xftfoi_silence_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfoi_silence_label", xftfoi_silence_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfoi_silence_label);
  gtk_box_pack_start (GTK_BOX (xftfoi_silence_hbox), xftfoi_silence_label, FALSE, FALSE, 0);
  gtk_label_set_justify (GTK_LABEL (xftfoi_silence_label), GTK_JUSTIFY_LEFT);

  xftfoi_fadeout_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (xftfoi_fadeout_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfoi_fadeout_hbox", xftfoi_fadeout_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfoi_fadeout_hbox);
  gtk_table_attach (GTK_TABLE (xft_fadeoutin_table), xftfoi_fadeout_hbox, 0, 1, 2, 3,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);

  xftfoi_fadeout_label = gtk_label_new ("Fade in (ms):");
  gtk_widget_ref (xftfoi_fadeout_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xftfoi_fadeout_label", xftfoi_fadeout_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xftfoi_fadeout_label);
  gtk_box_pack_start (GTK_BOX (xftfoi_fadeout_hbox), xftfoi_fadeout_label, FALSE, FALSE, 0);
  gtk_label_set_justify (GTK_LABEL (xftfoi_fadeout_label), GTK_JUSTIFY_LEFT);

  xft_pause_adv_label = gtk_label_new ("Fade out / Fade in");
  gtk_widget_ref (xft_pause_adv_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "xft_pause_adv_label", xft_pause_adv_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (xft_pause_adv_label);
  gtk_notebook_set_tab_label (GTK_NOTEBOOK (xf_type_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (xf_type_notebook), 9), xft_pause_adv_label);

  config_crossfade_label = gtk_label_new ("Crossfader");
  gtk_widget_ref (config_crossfade_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "config_crossfade_label", config_crossfade_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (config_crossfade_label);
  gtk_notebook_set_tab_label (GTK_NOTEBOOK (config_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (config_notebook), 2), config_crossfade_label);

  config_gapkiller_page = gtk_vbox_new (FALSE, 5);
  gtk_widget_ref (config_gapkiller_page);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "config_gapkiller_page", config_gapkiller_page,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (config_gapkiller_page);
  gtk_container_add (GTK_CONTAINER (config_notebook), config_gapkiller_page);
  gtk_container_set_border_width (GTK_CONTAINER (config_gapkiller_page), 5);

  gap_leading_frame = gtk_frame_new ("Leading gap killer");
  gtk_widget_ref (gap_leading_frame);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "gap_leading_frame", gap_leading_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (gap_leading_frame);
  gtk_box_pack_start (GTK_BOX (config_gapkiller_page), gap_leading_frame, FALSE, TRUE, 0);

  gap_leading_table = gtk_table_new (3, 2, FALSE);
  gtk_widget_ref (gap_leading_table);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "gap_leading_table", gap_leading_table,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (gap_leading_table);
  gtk_container_add (GTK_CONTAINER (gap_leading_frame), gap_leading_table);
  gtk_container_set_border_width (GTK_CONTAINER (gap_leading_table), 5);
  gtk_table_set_row_spacings (GTK_TABLE (gap_leading_table), 2);
  gtk_table_set_col_spacings (GTK_TABLE (gap_leading_table), 5);

  lgap_length_spin_adj = gtk_adjustment_new (500, 0, 60000, 10, 100, 10);
  lgap_length_spin = gtk_spin_button_new (GTK_ADJUSTMENT (lgap_length_spin_adj), 0, 0);
  gtk_widget_ref (lgap_length_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "lgap_length_spin", lgap_length_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (lgap_length_spin);
  gtk_table_attach (GTK_TABLE (gap_leading_table), lgap_length_spin, 1, 2, 1, 2,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, lgap_length_spin, "Set the maximum length for gaps at the beginning of a stream.\nDefault: 500", NULL);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (lgap_length_spin), TRUE);

  lgap_level_spin_adj = gtk_adjustment_new (512, 0, 32767, 16, 256, 10);
  lgap_level_spin = gtk_spin_button_new (GTK_ADJUSTMENT (lgap_level_spin_adj), 0, 0);
  gtk_widget_ref (lgap_level_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "lgap_level_spin", lgap_level_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (lgap_level_spin);
  gtk_table_attach (GTK_TABLE (gap_leading_table), lgap_level_spin, 1, 2, 2, 3,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, lgap_level_spin, "Set the maximum volume for gaps at the beginning of a stream. All samples below this value are considered as silent.\nDefault: 512", NULL);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (lgap_level_spin), TRUE);

  lgap_length_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (lgap_length_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "lgap_length_hbox", lgap_length_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (lgap_length_hbox);
  gtk_table_attach (GTK_TABLE (gap_leading_table), lgap_length_hbox, 0, 1, 1, 2,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_FILL), 0, 0);

  lgap_length_label = gtk_label_new ("Max. length (ms):");
  gtk_widget_ref (lgap_length_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "lgap_length_label", lgap_length_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (lgap_length_label);
  gtk_box_pack_start (GTK_BOX (lgap_length_hbox), lgap_length_label, FALSE, FALSE, 0);

  lgap_level_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (lgap_level_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "lgap_level_hbox", lgap_level_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (lgap_level_hbox);
  gtk_table_attach (GTK_TABLE (gap_leading_table), lgap_level_hbox, 0, 1, 2, 3,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_FILL), 0, 0);

  lgap_level_label = gtk_label_new ("Max. level (16bit sample):");
  gtk_widget_ref (lgap_level_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "lgap_level_label", lgap_level_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (lgap_level_label);
  gtk_box_pack_start (GTK_BOX (lgap_level_hbox), lgap_level_label, FALSE, FALSE, 0);

  lgap_enable_check = gtk_check_button_new_with_label ("Enable");
  gtk_widget_ref (lgap_enable_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "lgap_enable_check", lgap_enable_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (lgap_enable_check);
  gtk_table_attach (GTK_TABLE (gap_leading_table), lgap_enable_check, 1, 2, 0, 1,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);

  gap_trailing_frame = gtk_frame_new ("Trailing gap killer");
  gtk_widget_ref (gap_trailing_frame);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "gap_trailing_frame", gap_trailing_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (gap_trailing_frame);
  gtk_box_pack_start (GTK_BOX (config_gapkiller_page), gap_trailing_frame, FALSE, TRUE, 0);

  gap_trailing_table = gtk_table_new (3, 2, FALSE);
  gtk_widget_ref (gap_trailing_table);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "gap_trailing_table", gap_trailing_table,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (gap_trailing_table);
  gtk_container_add (GTK_CONTAINER (gap_trailing_frame), gap_trailing_table);
  gtk_container_set_border_width (GTK_CONTAINER (gap_trailing_table), 5);
  gtk_table_set_row_spacings (GTK_TABLE (gap_trailing_table), 2);
  gtk_table_set_col_spacings (GTK_TABLE (gap_trailing_table), 5);

  tgap_length_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (tgap_length_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "tgap_length_hbox", tgap_length_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (tgap_length_hbox);
  gtk_table_attach (GTK_TABLE (gap_trailing_table), tgap_length_hbox, 0, 1, 1, 2,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);

  tgap_length_label = gtk_label_new ("Max. length (ms):");
  gtk_widget_ref (tgap_length_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "tgap_length_label", tgap_length_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (tgap_length_label);
  gtk_box_pack_start (GTK_BOX (tgap_length_hbox), tgap_length_label, FALSE, FALSE, 0);

  tgap_level_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (tgap_level_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "tgap_level_hbox", tgap_level_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (tgap_level_hbox);
  gtk_table_attach (GTK_TABLE (gap_trailing_table), tgap_level_hbox, 0, 1, 2, 3,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);

  tgap_level_label = gtk_label_new ("Max. level (16bit sample):");
  gtk_widget_ref (tgap_level_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "tgap_level_label", tgap_level_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (tgap_level_label);
  gtk_box_pack_start (GTK_BOX (tgap_level_hbox), tgap_level_label, FALSE, FALSE, 0);

  tgap_length_spin_adj = gtk_adjustment_new (500, 0, 60000, 10, 100, 10);
  tgap_length_spin = gtk_spin_button_new (GTK_ADJUSTMENT (tgap_length_spin_adj), 0, 0);
  gtk_widget_ref (tgap_length_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "tgap_length_spin", tgap_length_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (tgap_length_spin);
  gtk_table_attach (GTK_TABLE (gap_trailing_table), tgap_length_spin, 1, 2, 1, 2,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, tgap_length_spin, "Set the maximum length for gaps at the end of a stream.\nDefault: 500", NULL);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (tgap_length_spin), TRUE);

  tgap_level_spin_adj = gtk_adjustment_new (512, 0, 32767, 1, 16, 10);
  tgap_level_spin = gtk_spin_button_new (GTK_ADJUSTMENT (tgap_level_spin_adj), 0, 0);
  gtk_widget_ref (tgap_level_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "tgap_level_spin", tgap_level_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (tgap_level_spin);
  gtk_table_attach (GTK_TABLE (gap_trailing_table), tgap_level_spin, 1, 2, 2, 3,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, tgap_level_spin, "Set the maximum volume for gaps at the end of a stream. All samples below this value are considered as silent.\nDefault: 512", NULL);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (tgap_level_spin), TRUE);

  tgap_lock_check = gtk_check_button_new_with_label ("Lock to Leading");
  gtk_widget_ref (tgap_lock_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "tgap_lock_check", tgap_lock_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (tgap_lock_check);
  gtk_table_attach (GTK_TABLE (gap_trailing_table), tgap_lock_check, 0, 1, 0, 1,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);
  gtk_tooltips_set_tip (tooltips, tgap_lock_check, "Use the same settings as above.", NULL);

  tgap_enable_check = gtk_check_button_new_with_label ("Enable");
  gtk_widget_ref (tgap_enable_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "tgap_enable_check", tgap_enable_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (tgap_enable_check);
  gtk_table_attach (GTK_TABLE (gap_trailing_table), tgap_enable_check, 1, 2, 0, 1,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);

  gap_advanced_frame = gtk_frame_new ("Advanced");
  gtk_widget_ref (gap_advanced_frame);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "gap_advanced_frame", gap_advanced_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (gap_advanced_frame);
  gtk_box_pack_start (GTK_BOX (config_gapkiller_page), gap_advanced_frame, FALSE, FALSE, 0);

  gap_advanced_vbox = gtk_vbox_new (FALSE, 0);
  gtk_widget_ref (gap_advanced_vbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "gap_advanced_vbox", gap_advanced_vbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (gap_advanced_vbox);
  gtk_container_add (GTK_CONTAINER (gap_advanced_frame), gap_advanced_vbox);
  gtk_container_set_border_width (GTK_CONTAINER (gap_advanced_vbox), 5);

  gadv_crossing_check = gtk_check_button_new_with_label ("Skip to next zero crossing");
  gtk_widget_ref (gadv_crossing_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "gadv_crossing_check", gadv_crossing_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (gadv_crossing_check);
  gtk_box_pack_start (GTK_BOX (gap_advanced_vbox), gadv_crossing_check, FALSE, FALSE, 0);
  gtk_tooltips_set_tip (tooltips, gadv_crossing_check, "If enabled, XMMS-crossfade will take additional care to avoid clicks with pre-faded (gapless) tracks. XMMS-crossfade will cut off the end of the previous song (the beginning of the next song) only at a zero-crossing of the sample values.\nDefault: On", NULL);

  config_gapkiller_label = gtk_label_new ("Gap Killer");
  gtk_widget_ref (config_gapkiller_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "config_gapkiller_label", config_gapkiller_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (config_gapkiller_label);
  gtk_notebook_set_tab_label (GTK_NOTEBOOK (config_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (config_notebook), 3), config_gapkiller_label);

  config_misc_page = gtk_vbox_new (FALSE, 5);
  gtk_widget_ref (config_misc_page);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "config_misc_page", config_misc_page,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (config_misc_page);
  gtk_container_add (GTK_CONTAINER (config_notebook), config_misc_page);
  gtk_container_set_border_width (GTK_CONTAINER (config_misc_page), 5);

  misc_debug_frame = gtk_frame_new ("Debug options");
  gtk_widget_ref (misc_debug_frame);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "misc_debug_frame", misc_debug_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (misc_debug_frame);
  gtk_box_pack_start (GTK_BOX (config_misc_page), misc_debug_frame, FALSE, FALSE, 0);

  misc_debug_vbox = gtk_vbox_new (FALSE, 2);
  gtk_widget_ref (misc_debug_vbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "misc_debug_vbox", misc_debug_vbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (misc_debug_vbox);
  gtk_container_add (GTK_CONTAINER (misc_debug_frame), misc_debug_vbox);
  gtk_container_set_border_width (GTK_CONTAINER (misc_debug_vbox), 5);

  debug_stderr_check = gtk_check_button_new_with_label ("Write debug output to <stderr>");
  gtk_widget_ref (debug_stderr_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "debug_stderr_check", debug_stderr_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (debug_stderr_check);
  gtk_box_pack_start (GTK_BOX (misc_debug_vbox), debug_stderr_check, FALSE, FALSE, 0);
  gtk_tooltips_set_tip (tooltips, debug_stderr_check, "Monitors what is going on in XMMS-crossfade. If you think you found a bug in XMMS-crossfade, please enable this option and send me the output.\nNote that you should disable debug output if you start XMMS from within Netscape. Netscape will spam you with dialogs containing the debug output captured from <stderr>.\nDefault: Off", NULL);

  debug_monitor_check = gtk_check_button_new_with_label ("Show Buffer Monitor");
  gtk_widget_ref (debug_monitor_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "debug_monitor_check", debug_monitor_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (debug_monitor_check);
  gtk_box_pack_start (GTK_BOX (misc_debug_vbox), debug_monitor_check, FALSE, FALSE, 0);
  gtk_tooltips_set_tip (tooltips, debug_monitor_check, "Enables the Buffer Monitor. This is a small window which shows how much data is in the buffers. The top display belongs to the mixing buffer, the bottom shows how much data is being buffered by the output plugin.\nDefault: Off", NULL);

  misc_mixopt_frame = gtk_frame_new ("Volume control options");
  gtk_widget_ref (misc_mixopt_frame);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "misc_mixopt_frame", misc_mixopt_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (misc_mixopt_frame);
  gtk_box_pack_start (GTK_BOX (config_misc_page), misc_mixopt_frame, FALSE, FALSE, 0);

  misc_mixopt_vbox = gtk_vbox_new (FALSE, 2);
  gtk_widget_ref (misc_mixopt_vbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "misc_mixopt_vbox", misc_mixopt_vbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (misc_mixopt_vbox);
  gtk_container_add (GTK_CONTAINER (misc_mixopt_frame), misc_mixopt_vbox);
  gtk_container_set_border_width (GTK_CONTAINER (misc_mixopt_vbox), 5);

  mixopt_enable_check = gtk_check_button_new_with_label ("Enable volume control");
  gtk_widget_ref (mixopt_enable_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "mixopt_enable_check", mixopt_enable_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (mixopt_enable_check);
  gtk_box_pack_start (GTK_BOX (misc_mixopt_vbox), mixopt_enable_check, FALSE, FALSE, 0);
  gtk_tooltips_set_tip (tooltips, mixopt_enable_check, "Enables/disables XMMS volume and balance controls.\nDefault: On", NULL);

  mixopt_reverse_check = gtk_check_button_new_with_label ("Reverse balance");
  gtk_widget_ref (mixopt_reverse_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "mixopt_reverse_check", mixopt_reverse_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (mixopt_reverse_check);
  gtk_box_pack_start (GTK_BOX (misc_mixopt_vbox), mixopt_reverse_check, FALSE, FALSE, 0);
  gtk_tooltips_set_tip (tooltips, mixopt_reverse_check, "Reverses left and right with the balance control.\nDefault: Off", NULL);

  mixopt_software_check = gtk_check_button_new_with_label ("Software Mixer (delayed operation)");
  gtk_widget_ref (mixopt_software_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "mixopt_software_check", mixopt_software_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (mixopt_software_check);
  gtk_box_pack_start (GTK_BOX (misc_mixopt_vbox), mixopt_software_check, FALSE, FALSE, 0);
  gtk_tooltips_set_tip (tooltips, mixopt_software_check, "Enable software mixer. Usefull for output plugins without mixer support.\nDefault: Off", NULL);

  misc_other_frame = gtk_frame_new ("Advanced options");
  gtk_widget_ref (misc_other_frame);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "misc_other_frame", misc_other_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (misc_other_frame);
  gtk_box_pack_start (GTK_BOX (config_misc_page), misc_other_frame, FALSE, TRUE, 0);

  misc_other_vbox = gtk_vbox_new (FALSE, 2);
  gtk_widget_ref (misc_other_vbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "misc_other_vbox", misc_other_vbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (misc_other_vbox);
  gtk_container_add (GTK_CONTAINER (misc_other_frame), misc_other_vbox);
  gtk_container_set_border_width (GTK_CONTAINER (misc_other_vbox), 5);

  moth_songchange_hbox = gtk_hbox_new (FALSE, 5);
  gtk_widget_ref (moth_songchange_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "moth_songchange_hbox", moth_songchange_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (moth_songchange_hbox);
  gtk_box_pack_start (GTK_BOX (misc_other_vbox), moth_songchange_hbox, TRUE, TRUE, 0);

  moth_songchange_label = gtk_label_new ("Songchange timeout (ms):");
  gtk_widget_ref (moth_songchange_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "moth_songchange_label", moth_songchange_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (moth_songchange_label);
  gtk_box_pack_start (GTK_BOX (moth_songchange_hbox), moth_songchange_label, FALSE, FALSE, 0);
  gtk_widget_set_sensitive (moth_songchange_label, FALSE);

  moth_songchange_spin_adj = gtk_adjustment_new (500, 10, 10000, 10, 100, 10);
  moth_songchange_spin = gtk_spin_button_new (GTK_ADJUSTMENT (moth_songchange_spin_adj), 0, 0);
  gtk_widget_ref (moth_songchange_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "moth_songchange_spin", moth_songchange_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (moth_songchange_spin);
  gtk_box_pack_start (GTK_BOX (moth_songchange_hbox), moth_songchange_spin, TRUE, TRUE, 0);
  gtk_widget_set_sensitive (moth_songchange_spin, FALSE);
  gtk_tooltips_set_tip (tooltips, moth_songchange_spin, "The songchange timeout is the maximum time XMMS-crossfade waits for the next song. If this timeout is exceeded, the output plugin/device is closed.\nDefault: 500", NULL);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (moth_songchange_spin), TRUE);

  moth_preload_hbox = gtk_hbox_new (FALSE, 5);
  gtk_widget_ref (moth_preload_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "moth_preload_hbox", moth_preload_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (moth_preload_hbox);
  gtk_box_pack_start (GTK_BOX (misc_other_vbox), moth_preload_hbox, TRUE, TRUE, 0);

  moth_preload_label = gtk_label_new ("Mixing buffer preload (ms):");
  gtk_widget_ref (moth_preload_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "moth_preload_label", moth_preload_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (moth_preload_label);
  gtk_box_pack_start (GTK_BOX (moth_preload_hbox), moth_preload_label, FALSE, FALSE, 0);

  moth_preload_spin_adj = gtk_adjustment_new (0, 0, 60000, 10, 100, 10);
  moth_preload_spin = gtk_spin_button_new (GTK_ADJUSTMENT (moth_preload_spin_adj), 0, 0);
  gtk_widget_ref (moth_preload_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "moth_preload_spin", moth_preload_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (moth_preload_spin);
  gtk_box_pack_start (GTK_BOX (moth_preload_hbox), moth_preload_spin, TRUE, TRUE, 0);
  gtk_tooltips_set_tip (tooltips, moth_preload_spin, "Tells XMMS-crossfade how much data it should buffer before it starts writing to the output plugin/device. Usually, this value can be set to 0, because the output plugin does preloading on its own.\nDefault: 0", NULL);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (moth_preload_spin), TRUE);

  moth_noxf_hbox = gtk_hbox_new (FALSE, 5);
  gtk_widget_ref (moth_noxf_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "moth_noxf_hbox", moth_noxf_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (moth_noxf_hbox);
  gtk_box_pack_start (GTK_BOX (misc_other_vbox), moth_noxf_hbox, FALSE, FALSE, 0);

  moth_noxf_label = gtk_label_new ("Don't  crossfade");
  gtk_widget_ref (moth_noxf_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "moth_noxf_label", moth_noxf_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (moth_noxf_label);
  gtk_box_pack_start (GTK_BOX (moth_noxf_hbox), moth_noxf_label, FALSE, FALSE, 0);

  noxf_album_check = gtk_check_button_new_with_label ("successive tracks");
  gtk_widget_ref (noxf_album_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "noxf_album_check", noxf_album_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (noxf_album_check);
  gtk_box_pack_start (GTK_BOX (moth_noxf_hbox), noxf_album_check, FALSE, FALSE, 0);
  gtk_tooltips_set_tip (tooltips, noxf_album_check, "This option enables the automatic detection of pre-faded or gapless tracks, like the tracks on some compilations or on most live albums. If such tracks are detected, crossfading will be disabled and only the gapkiller (if enabled) will be used for the songchange.\nDefault: On", NULL);

  noxf_samefile_check = gtk_check_button_new_with_label ("same file");
  gtk_widget_ref (noxf_samefile_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "noxf_samefile_check", noxf_samefile_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (noxf_samefile_check);
  gtk_box_pack_start (GTK_BOX (moth_noxf_hbox), noxf_samefile_check, FALSE, FALSE, 0);
  gtk_tooltips_set_tip (tooltips, noxf_samefile_check, "This option disables crossfading between the same file. This can happen if you have only one file in the playlist and 'repeat' turned on.\nDefault: Off", NULL);

  moth_httpworkaround_check = gtk_check_button_new_with_label ("Enable HTTP buffer underrun workaround");
  gtk_widget_ref (moth_httpworkaround_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "moth_httpworkaround_check", moth_httpworkaround_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (moth_httpworkaround_check);
  gtk_box_pack_start (GTK_BOX (misc_other_vbox), moth_httpworkaround_check, FALSE, FALSE, 0);
  gtk_tooltips_set_tip (tooltips, moth_httpworkaround_check, "Enable this when you have problems playing internet HTTP audio streams. Unfortunatelly, it also breaks crossfading.\nDefault: Off", NULL);

  moth_opmaxused_hbox = gtk_hbox_new (FALSE, 5);
  gtk_widget_ref (moth_opmaxused_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "moth_opmaxused_hbox", moth_opmaxused_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (moth_opmaxused_hbox);
  gtk_box_pack_start (GTK_BOX (misc_other_vbox), moth_opmaxused_hbox, TRUE, TRUE, 0);

  moth_opmaxused_check = gtk_check_button_new_with_label ("Limit OP buffer usage (ms):");
  gtk_widget_ref (moth_opmaxused_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "moth_opmaxused_check", moth_opmaxused_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (moth_opmaxused_check);
  gtk_box_pack_start (GTK_BOX (moth_opmaxused_hbox), moth_opmaxused_check, FALSE, FALSE, 0);
  gtk_tooltips_set_tip (tooltips, moth_opmaxused_check, "With this option enabled, XMMS-crossfade will limit the amount of data being buffered by the output plugin. This way, you can decrease the latency between pressing STOP/NEXT/PREV and the new song actually being played. \nDefault: Off", NULL);

  moth_opmaxused_spin_adj = gtk_adjustment_new (500, 10, 10000, 10, 100, 10);
  moth_opmaxused_spin = gtk_spin_button_new (GTK_ADJUSTMENT (moth_opmaxused_spin_adj), 0, 0);
  gtk_widget_ref (moth_opmaxused_spin);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "moth_opmaxused_spin", moth_opmaxused_spin,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (moth_opmaxused_spin);
  gtk_box_pack_start (GTK_BOX (moth_opmaxused_hbox), moth_opmaxused_spin, TRUE, TRUE, 0);
  gtk_tooltips_set_tip (tooltips, moth_opmaxused_spin, "Beware that setting this value too low also increases the chance of buffer underruns.\nDefault: 250", NULL);
  gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (moth_opmaxused_spin), TRUE);

  moth_quantaudio_check = gtk_check_button_new_with_label ("Use Quantaudio timing comments");
  gtk_widget_ref (moth_quantaudio_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "moth_quantaudio_check", moth_quantaudio_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_box_pack_start (GTK_BOX (misc_other_vbox), moth_quantaudio_check, FALSE, FALSE, 0);
  gtk_tooltips_set_tip (tooltips, moth_quantaudio_check, "Enable this when you have problems playing internet HTTP audio streams. Unfortunatelly, it also breaks crossfading.\nDefault: Off", NULL);

  moth_outputkeepopened_check = gtk_check_button_new_with_label ("Keep output opened");
  gtk_widget_ref (moth_outputkeepopened_check);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "moth_outputkeepopened_check", moth_outputkeepopened_check,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (moth_outputkeepopened_check);
  gtk_box_pack_start (GTK_BOX (misc_other_vbox), moth_outputkeepopened_check, FALSE, FALSE, 0);
  gtk_tooltips_set_tip (tooltips, moth_outputkeepopened_check, "Keep the output device opened all the time, even if XMMS is stopped. This way, you can avoid clicks caused by the soundcard when the device is opened or closed\nDefault: Off", NULL);

  config_misc_label = gtk_label_new ("Advanced");
  gtk_widget_ref (config_misc_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "config_misc_label", config_misc_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (config_misc_label);
  gtk_notebook_set_tab_label (GTK_NOTEBOOK (config_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (config_notebook), 4), config_misc_label);

  config_presets_page = gtk_vbox_new (FALSE, 5);
  gtk_widget_ref (config_presets_page);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "config_presets_page", config_presets_page,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_container_add (GTK_CONTAINER (config_notebook), config_presets_page);
  gtk_container_set_border_width (GTK_CONTAINER (config_presets_page), 5);

  presets_name_hbox = gtk_hbox_new (FALSE, 5);
  gtk_widget_ref (presets_name_hbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "presets_name_hbox", presets_name_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (presets_name_hbox);
  gtk_box_pack_start (GTK_BOX (config_presets_page), presets_name_hbox, FALSE, FALSE, 0);

  presets_name_entry = gtk_entry_new ();
  gtk_widget_ref (presets_name_entry);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "presets_name_entry", presets_name_entry,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (presets_name_entry);
  gtk_box_pack_start (GTK_BOX (presets_name_hbox), presets_name_entry, TRUE, TRUE, 0);

  presets_delete_button = gtk_button_new_with_label ("Delete");
  gtk_widget_ref (presets_delete_button);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "presets_delete_button", presets_delete_button,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (presets_delete_button);
  gtk_box_pack_start (GTK_BOX (presets_name_hbox), presets_delete_button, FALSE, FALSE, 0);

  presets_new_button = gtk_button_new_with_label ("New");
  gtk_widget_ref (presets_new_button);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "presets_new_button", presets_new_button,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (presets_new_button);
  gtk_box_pack_start (GTK_BOX (presets_name_hbox), presets_new_button, FALSE, FALSE, 0);

  presets_list_scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
  gtk_widget_ref (presets_list_scrolledwindow);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "presets_list_scrolledwindow", presets_list_scrolledwindow,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (presets_list_scrolledwindow);
  gtk_box_pack_start (GTK_BOX (config_presets_page), presets_list_scrolledwindow, TRUE, TRUE, 0);
  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (presets_list_scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);

  presets_list_list = gtk_clist_new (3);
  gtk_widget_ref (presets_list_list);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "presets_list_list", presets_list_list,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (presets_list_list);
  gtk_container_add (GTK_CONTAINER (presets_list_scrolledwindow), presets_list_list);
  gtk_clist_set_column_width (GTK_CLIST (presets_list_list), 0, 101);
  gtk_clist_set_column_width (GTK_CLIST (presets_list_list), 1, 92);
  gtk_clist_set_column_width (GTK_CLIST (presets_list_list), 2, 80);
  gtk_clist_column_titles_show (GTK_CLIST (presets_list_list));

  label6 = gtk_label_new ("Name");
  gtk_widget_ref (label6);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "label6", label6,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (label6);
  gtk_clist_set_column_widget (GTK_CLIST (presets_list_list), 0, label6);

  label7 = gtk_label_new ("Output/Effects");
  gtk_widget_ref (label7);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "label7", label7,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (label7);
  gtk_clist_set_column_widget (GTK_CLIST (presets_list_list), 1, label7);

  label8 = gtk_label_new ("XF");
  gtk_widget_ref (label8);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "label8", label8,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (label8);
  gtk_clist_set_column_widget (GTK_CLIST (presets_list_list), 2, label8);

  presets_list_bbox = gtk_hbutton_box_new ();
  gtk_widget_ref (presets_list_bbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "presets_list_bbox", presets_list_bbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (presets_list_bbox);
  gtk_box_pack_start (GTK_BOX (config_presets_page), presets_list_bbox, FALSE, FALSE, 0);
  gtk_button_box_set_layout (GTK_BUTTON_BOX (presets_list_bbox), GTK_BUTTONBOX_END);
  gtk_button_box_set_spacing (GTK_BUTTON_BOX (presets_list_bbox), 5);

  presets_load_button = gtk_button_new_with_label ("Load");
  gtk_widget_ref (presets_load_button);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "presets_load_button", presets_load_button,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (presets_load_button);
  gtk_container_add (GTK_CONTAINER (presets_list_bbox), presets_load_button);
  GTK_WIDGET_SET_FLAGS (presets_load_button, GTK_CAN_DEFAULT);

  presets_save_button = gtk_button_new_with_label ("Save");
  gtk_widget_ref (presets_save_button);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "presets_save_button", presets_save_button,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (presets_save_button);
  gtk_container_add (GTK_CONTAINER (presets_list_bbox), presets_save_button);
  GTK_WIDGET_SET_FLAGS (presets_save_button, GTK_CAN_DEFAULT);

  config_presets_label = gtk_label_new ("Presets");
  gtk_widget_ref (config_presets_label);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "config_presets_label", config_presets_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (config_presets_label);
  gtk_notebook_set_tab_label (GTK_NOTEBOOK (config_notebook), gtk_notebook_get_nth_page (GTK_NOTEBOOK (config_notebook), 5), config_presets_label);

  config_bbox = gtk_hbutton_box_new ();
  gtk_widget_ref (config_bbox);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "config_bbox", config_bbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (config_bbox);
  gtk_box_pack_start (GTK_BOX (config_vbox), config_bbox, FALSE, TRUE, 0);
  gtk_button_box_set_layout (GTK_BUTTON_BOX (config_bbox), GTK_BUTTONBOX_END);
  gtk_button_box_set_spacing (GTK_BUTTON_BOX (config_bbox), 5);
  gtk_button_box_set_child_ipadding (GTK_BUTTON_BOX (config_bbox), 0, 0);

  config_ok = gtk_button_new_with_label ("OK");
  gtk_widget_ref (config_ok);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "config_ok", config_ok,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (config_ok);
  gtk_container_add (GTK_CONTAINER (config_bbox), config_ok);
  GTK_WIDGET_SET_FLAGS (config_ok, GTK_CAN_DEFAULT);

  config_cancel = gtk_button_new_with_label ("Cancel");
  gtk_widget_ref (config_cancel);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "config_cancel", config_cancel,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (config_cancel);
  gtk_container_add (GTK_CONTAINER (config_bbox), config_cancel);
  GTK_WIDGET_SET_FLAGS (config_cancel, GTK_CAN_DEFAULT);

  config_apply = gtk_button_new_with_label ("Apply");
  gtk_widget_ref (config_apply);
  gtk_object_set_data_full (GTK_OBJECT (config_win), "config_apply", config_apply,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (config_apply);
  gtk_container_add (GTK_CONTAINER (config_bbox), config_apply);
  GTK_WIDGET_SET_FLAGS (config_apply, GTK_CAN_DEFAULT);

  gtk_signal_connect (GTK_OBJECT (output_oss_radio), "toggled",
                      GTK_SIGNAL_FUNC (on_output_oss_radio_toggled),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (output_plugin_radio), "toggled",
                      GTK_SIGNAL_FUNC (on_output_plugin_radio_toggled),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (output_none_radio), "toggled",
                      GTK_SIGNAL_FUNC (on_output_none_radio_toggled),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (oss_adevice_alt_check), "toggled",
                      GTK_SIGNAL_FUNC (on_config_adevice_alt_check_toggled),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (oss_mdevice_alt_check), "toggled",
                      GTK_SIGNAL_FUNC (on_config_mdevice_alt_check_toggled),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (osshwb_maxbuf_check), "toggled",
                      GTK_SIGNAL_FUNC (on_osshwb_maxbuf_check_toggled),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (op_configure_button), "clicked",
                      GTK_SIGNAL_FUNC (on_output_plugin_configure_button_clicked),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (op_about_button), "clicked",
                      GTK_SIGNAL_FUNC (on_output_plugin_about_button_clicked),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (op_throttle_check), "toggled",
                      GTK_SIGNAL_FUNC (on_op_throttle_check_toggled),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (op_maxblock_check), "toggled",
                      GTK_SIGNAL_FUNC (on_op_maxblock_check_toggled),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (op_maxblock_spin), "changed",
                      GTK_SIGNAL_FUNC (on_op_maxblock_spin_changed),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (op_forcereopen_check), "toggled",
                      GTK_SIGNAL_FUNC (on_op_forcereopen_check_toggled),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (ep_configure_button), "clicked",
                      GTK_SIGNAL_FUNC (on_ep_configure_button_clicked),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (ep_about_button), "clicked",
                      GTK_SIGNAL_FUNC (on_ep_about_button_clicked),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (ep_enable_check), "toggled",
                      GTK_SIGNAL_FUNC (on_ep_enable_check_toggled),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (volnorm_enable_check), "toggled",
                      GTK_SIGNAL_FUNC (on_volnorm_enable_check_toggled),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (xf_buffer_spin), "changed",
                      GTK_SIGNAL_FUNC (on_xf_buffer_spin_changed),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (xf_autobuf_check), "toggled",
                      GTK_SIGNAL_FUNC (on_xf_autobuf_check_toggled),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (xftfp_length_spin), "changed",
                      GTK_SIGNAL_FUNC (on_xftfp_length_spin_changed),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (xftfp_enable_check), "toggled",
                      GTK_SIGNAL_FUNC (on_xftfp_enable_check_toggled),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (xftffi_length_spin), "changed",
                      GTK_SIGNAL_FUNC (on_xftffi_length_spin_changed),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (xftffi_enable_check), "toggled",
                      GTK_SIGNAL_FUNC (on_xftffi_enable_check_toggled),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (xftffi_volume_spin), "changed",
                      GTK_SIGNAL_FUNC (on_xftffi_volume_spin_changed),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (pause_length_spin), "changed",
                      GTK_SIGNAL_FUNC (on_pause_length_spin_changed),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (simple_length_spin), "changed",
                      GTK_SIGNAL_FUNC (on_simple_length_spin_changed),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (fadeout_length_spin), "changed",
                      GTK_SIGNAL_FUNC (on_fadeout_length_spin_changed),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (fadeout_volume_spin), "changed",
                      GTK_SIGNAL_FUNC (on_fadeout_volume_spin_changed),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (fadeout_enable_check), "toggled",
                      GTK_SIGNAL_FUNC (on_fadeout_enable_check_toggled),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (xfofs_custom_radiobutton), "toggled",
                      GTK_SIGNAL_FUNC (on_xfofs_custom_radiobutton_toggled),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (xfofs_custom_radiobutton), "clicked",
                      GTK_SIGNAL_FUNC (on_xfofs_custom_radiobutton_clicked),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (xfofs_custom_spin), "changed",
                      GTK_SIGNAL_FUNC (on_xfofs_custom_spin_changed),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (xfofs_none_radiobutton), "clicked",
                      GTK_SIGNAL_FUNC (on_xfofs_none_radiobutton_clicked),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (xfofs_none_radiobutton), "toggled",
                      GTK_SIGNAL_FUNC (on_xfofs_none_radiobutton_toggled),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (xfofs_lockout_radiobutton), "toggled",
                      GTK_SIGNAL_FUNC (on_xfofs_lockout_radiobutton_toggled),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (xfofs_lockout_radiobutton), "clicked",
                      GTK_SIGNAL_FUNC (on_xfofs_lockout_radiobutton_clicked),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (xfofs_lockin_radiobutton), "toggled",
                      GTK_SIGNAL_FUNC (on_xfofs_lockin_radiobutton_toggled),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (xfofs_lockin_radiobutton), "clicked",
                      GTK_SIGNAL_FUNC (on_xfofs_lockin_radiobutton_clicked),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (fadein_length_spin), "changed",
                      GTK_SIGNAL_FUNC (on_fadein_length_spin_changed),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (fadein_enable_check), "toggled",
                      GTK_SIGNAL_FUNC (on_fadein_enable_check_toggled),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (fadein_lock_check), "toggled",
                      GTK_SIGNAL_FUNC (on_fadein_lock_check_toggled),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (fadein_volume_spin), "changed",
                      GTK_SIGNAL_FUNC (on_fadein_volume_spin_changed),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (xftfi_length_spin), "changed",
                      GTK_SIGNAL_FUNC (on_fadein_length_spin_changed),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (xftfi_volume_spin), "changed",
                      GTK_SIGNAL_FUNC (on_fadein_volume_spin_changed),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (xftfo_length_spin), "changed",
                      GTK_SIGNAL_FUNC (on_fadeout_length_spin_changed),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (xftfo_volume_spin), "changed",
                      GTK_SIGNAL_FUNC (on_fadeout_volume_spin_changed),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (xftfo_silence_spin), "changed",
                      GTK_SIGNAL_FUNC (on_xfofs_custom_spin_changed),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (xftfoi_fadeout_spin), "changed",
                      GTK_SIGNAL_FUNC (on_fadeout_length_spin_changed),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (xftfoi_silence_spin), "changed",
                      GTK_SIGNAL_FUNC (on_xfofs_custom_spin_changed),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (xftfoi_fadein_spin), "changed",
                      GTK_SIGNAL_FUNC (on_fadein_length_spin_changed),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (lgap_length_spin), "changed",
                      GTK_SIGNAL_FUNC (on_lgap_length_spin_changed),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (lgap_level_spin), "changed",
                      GTK_SIGNAL_FUNC (on_lgap_level_spin_changed),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (lgap_enable_check), "toggled",
                      GTK_SIGNAL_FUNC (on_lgap_enable_check_toggled),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (tgap_length_spin), "changed",
                      GTK_SIGNAL_FUNC (on_tgap_length_spin_changed),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (tgap_level_spin), "changed",
                      GTK_SIGNAL_FUNC (on_tgap_level_spin_changed),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (tgap_lock_check), "toggled",
                      GTK_SIGNAL_FUNC (on_tgap_lock_check_toggled),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (tgap_enable_check), "toggled",
                      GTK_SIGNAL_FUNC (on_tgap_enable_check_toggled),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (mixopt_enable_check), "toggled",
                      GTK_SIGNAL_FUNC (on_config_mixopt_enable_check_toggled),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (moth_songchange_spin), "changed",
                      GTK_SIGNAL_FUNC (on_moth_songchange_spin_changed),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (moth_opmaxused_check), "toggled",
                      GTK_SIGNAL_FUNC (on_moth_opmaxused_check_toggled),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (presets_list_list), "click_column",
                      GTK_SIGNAL_FUNC (on_presets_list_click_column),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (config_ok), "clicked",
                      GTK_SIGNAL_FUNC (on_config_ok_clicked),
                      NULL);
  gtk_signal_connect_object (GTK_OBJECT (config_cancel), "clicked",
                             GTK_SIGNAL_FUNC (gtk_widget_destroy),
                             GTK_OBJECT (config_win));
  gtk_signal_connect (GTK_OBJECT (config_apply), "clicked",
                      GTK_SIGNAL_FUNC (on_config_apply_clicked),
                      NULL);

  gtk_object_set_data (GTK_OBJECT (config_win), "tooltips", tooltips);

  return config_win;
}

GtkWidget*
create_monitor_win (void)
{
  GtkWidget *monitor_win;
  GtkWidget *monitor_table;
  GtkWidget *monitor_output_hbox;
  GtkWidget *monitor_output_progress;
  GtkWidget *monitor_output_label2;
  GtkWidget *monitor_displaylabel_hbox;
  GtkWidget *monitor_display_label;
  GtkWidget *monitor_position_hbox;
  GtkWidget *monpos_position_label;
  GtkWidget *monpos_label1;
  GtkWidget *monpos_total_label;
  GtkWidget *monpos_label2;
  GtkWidget *monpos_left_label;
  GtkWidget *monpos_label3;
  GtkWidget *monpos_written_time_label;
  GtkWidget *monpos_output_time_separator_label;
  GtkWidget *monpos_output_time_label;
  GtkWidget *monitor_outputlabel_hbox;
  GtkWidget *monitor_output_label;
  GtkWidget *monitor_positionlabel_hbox;
  GtkWidget *monitor_position_label;
  GtkWidget *monitor_display_frame;
  GtkWidget *monitor_display_drawingarea;

  monitor_win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_object_set_data (GTK_OBJECT (monitor_win), "monitor_win", monitor_win);
  gtk_window_set_title (GTK_WINDOW (monitor_win), "Crossfade Buffer Monitor");
  gtk_window_set_default_size (GTK_WINDOW (monitor_win), 320, -1);
  gtk_window_set_wmclass (GTK_WINDOW (monitor_win), "XMMS-crossfade", "xmms");

  monitor_table = gtk_table_new (3, 2, FALSE);
  gtk_widget_ref (monitor_table);
  gtk_object_set_data_full (GTK_OBJECT (monitor_win), "monitor_table", monitor_table,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (monitor_table);
  gtk_container_add (GTK_CONTAINER (monitor_win), monitor_table);
  gtk_container_set_border_width (GTK_CONTAINER (monitor_table), 5);
  gtk_table_set_row_spacings (GTK_TABLE (monitor_table), 3);
  gtk_table_set_col_spacings (GTK_TABLE (monitor_table), 5);

  monitor_output_hbox = gtk_hbox_new (FALSE, 3);
  gtk_widget_ref (monitor_output_hbox);
  gtk_object_set_data_full (GTK_OBJECT (monitor_win), "monitor_output_hbox", monitor_output_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (monitor_output_hbox);
  gtk_table_attach (GTK_TABLE (monitor_table), monitor_output_hbox, 1, 2, 1, 2,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_FILL), 0, 0);

  monitor_output_progress = gtk_progress_bar_new ();
  gtk_widget_ref (monitor_output_progress);
  gtk_object_set_data_full (GTK_OBJECT (monitor_win), "monitor_output_progress", monitor_output_progress,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (monitor_output_progress);
  gtk_box_pack_start (GTK_BOX (monitor_output_hbox), monitor_output_progress, TRUE, TRUE, 0);
  gtk_progress_configure (GTK_PROGRESS (monitor_output_progress), 0, 0, 0);
  gtk_progress_set_show_text (GTK_PROGRESS (monitor_output_progress), TRUE);
  gtk_progress_set_format_string (GTK_PROGRESS (monitor_output_progress), "%v");

  monitor_output_label2 = gtk_label_new ("ms");
  gtk_widget_ref (monitor_output_label2);
  gtk_object_set_data_full (GTK_OBJECT (monitor_win), "monitor_output_label2", monitor_output_label2,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (monitor_output_label2);
  gtk_box_pack_start (GTK_BOX (monitor_output_hbox), monitor_output_label2, FALSE, FALSE, 0);

  monitor_displaylabel_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (monitor_displaylabel_hbox);
  gtk_object_set_data_full (GTK_OBJECT (monitor_win), "monitor_displaylabel_hbox", monitor_displaylabel_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (monitor_displaylabel_hbox);
  gtk_table_attach (GTK_TABLE (monitor_table), monitor_displaylabel_hbox, 0, 1, 0, 1,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_FILL), 0, 0);

  monitor_display_label = gtk_label_new ("Mixing Buffer:");
  gtk_widget_ref (monitor_display_label);
  gtk_object_set_data_full (GTK_OBJECT (monitor_win), "monitor_display_label", monitor_display_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (monitor_display_label);
  gtk_box_pack_end (GTK_BOX (monitor_displaylabel_hbox), monitor_display_label, FALSE, FALSE, 0);

  monitor_position_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (monitor_position_hbox);
  gtk_object_set_data_full (GTK_OBJECT (monitor_win), "monitor_position_hbox", monitor_position_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (monitor_position_hbox);
  gtk_table_attach (GTK_TABLE (monitor_table), monitor_position_hbox, 1, 2, 2, 3,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_FILL), 0, 0);

  monpos_position_label = gtk_label_new ("-:--.-");
  gtk_widget_ref (monpos_position_label);
  gtk_object_set_data_full (GTK_OBJECT (monitor_win), "monpos_position_label", monpos_position_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (monpos_position_label);
  gtk_box_pack_start (GTK_BOX (monitor_position_hbox), monpos_position_label, FALSE, FALSE, 0);

  monpos_label1 = gtk_label_new (" / ");
  gtk_widget_ref (monpos_label1);
  gtk_object_set_data_full (GTK_OBJECT (monitor_win), "monpos_label1", monpos_label1,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (monpos_label1);
  gtk_box_pack_start (GTK_BOX (monitor_position_hbox), monpos_label1, FALSE, FALSE, 0);

  monpos_total_label = gtk_label_new ("-:--");
  gtk_widget_ref (monpos_total_label);
  gtk_object_set_data_full (GTK_OBJECT (monitor_win), "monpos_total_label", monpos_total_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (monpos_total_label);
  gtk_box_pack_start (GTK_BOX (monitor_position_hbox), monpos_total_label, FALSE, FALSE, 0);

  monpos_label2 = gtk_label_new (" total, ");
  gtk_widget_ref (monpos_label2);
  gtk_object_set_data_full (GTK_OBJECT (monitor_win), "monpos_label2", monpos_label2,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (monpos_label2);
  gtk_box_pack_start (GTK_BOX (monitor_position_hbox), monpos_label2, FALSE, FALSE, 0);

  monpos_left_label = gtk_label_new ("-:--");
  gtk_widget_ref (monpos_left_label);
  gtk_object_set_data_full (GTK_OBJECT (monitor_win), "monpos_left_label", monpos_left_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (monpos_left_label);
  gtk_box_pack_start (GTK_BOX (monitor_position_hbox), monpos_left_label, FALSE, FALSE, 0);

  monpos_label3 = gtk_label_new (" left");
  gtk_widget_ref (monpos_label3);
  gtk_object_set_data_full (GTK_OBJECT (monitor_win), "monpos_label3", monpos_label3,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (monpos_label3);
  gtk_box_pack_start (GTK_BOX (monitor_position_hbox), monpos_label3, FALSE, FALSE, 0);

  monpos_written_time_label = gtk_label_new ("-:--:--.-");
  gtk_widget_ref (monpos_written_time_label);
  gtk_object_set_data_full (GTK_OBJECT (monitor_win), "monpos_written_time_label", monpos_written_time_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (monpos_written_time_label);
  gtk_box_pack_end (GTK_BOX (monitor_position_hbox), monpos_written_time_label, FALSE, FALSE, 0);

  monpos_output_time_separator_label = gtk_label_new (" / ");
  gtk_widget_ref (monpos_output_time_separator_label);
  gtk_object_set_data_full (GTK_OBJECT (monitor_win), "monpos_output_time_separator_label", monpos_output_time_separator_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (monpos_output_time_separator_label);
  gtk_box_pack_end (GTK_BOX (monitor_position_hbox), monpos_output_time_separator_label, FALSE, FALSE, 0);

  monpos_output_time_label = gtk_label_new ("-:--.---");
  gtk_widget_ref (monpos_output_time_label);
  gtk_object_set_data_full (GTK_OBJECT (monitor_win), "monpos_output_time_label", monpos_output_time_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (monpos_output_time_label);
  gtk_box_pack_end (GTK_BOX (monitor_position_hbox), monpos_output_time_label, FALSE, FALSE, 0);

  monitor_outputlabel_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (monitor_outputlabel_hbox);
  gtk_object_set_data_full (GTK_OBJECT (monitor_win), "monitor_outputlabel_hbox", monitor_outputlabel_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (monitor_outputlabel_hbox);
  gtk_table_attach (GTK_TABLE (monitor_table), monitor_outputlabel_hbox, 0, 1, 1, 2,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (GTK_FILL), 0, 0);

  monitor_output_label = gtk_label_new ("Output Buffer:");
  gtk_widget_ref (monitor_output_label);
  gtk_object_set_data_full (GTK_OBJECT (monitor_win), "monitor_output_label", monitor_output_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (monitor_output_label);
  gtk_box_pack_end (GTK_BOX (monitor_outputlabel_hbox), monitor_output_label, FALSE, FALSE, 0);

  monitor_positionlabel_hbox = gtk_hbox_new (FALSE, 0);
  gtk_widget_ref (monitor_positionlabel_hbox);
  gtk_object_set_data_full (GTK_OBJECT (monitor_win), "monitor_positionlabel_hbox", monitor_positionlabel_hbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (monitor_positionlabel_hbox);
  gtk_table_attach (GTK_TABLE (monitor_table), monitor_positionlabel_hbox, 0, 1, 2, 3,
                    (GtkAttachOptions) (GTK_FILL),
                    (GtkAttachOptions) (0), 0, 0);

  monitor_position_label = gtk_label_new ("Position:");
  gtk_widget_ref (monitor_position_label);
  gtk_object_set_data_full (GTK_OBJECT (monitor_win), "monitor_position_label", monitor_position_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (monitor_position_label);
  gtk_box_pack_end (GTK_BOX (monitor_positionlabel_hbox), monitor_position_label, FALSE, FALSE, 0);

  monitor_display_frame = gtk_frame_new (NULL);
  gtk_widget_ref (monitor_display_frame);
  gtk_object_set_data_full (GTK_OBJECT (monitor_win), "monitor_display_frame", monitor_display_frame,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (monitor_display_frame);
  gtk_table_attach (GTK_TABLE (monitor_table), monitor_display_frame, 1, 2, 0, 1,
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
  gtk_frame_set_shadow_type (GTK_FRAME (monitor_display_frame), GTK_SHADOW_ETCHED_OUT);

  monitor_display_drawingarea = gtk_drawing_area_new ();
  gtk_widget_ref (monitor_display_drawingarea);
  gtk_object_set_data_full (GTK_OBJECT (monitor_win), "monitor_display_drawingarea", monitor_display_drawingarea,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (monitor_display_drawingarea);
  gtk_container_add (GTK_CONTAINER (monitor_display_frame), monitor_display_drawingarea);
  gtk_widget_set_usize (monitor_display_drawingarea, -2, 20);

  gtk_signal_connect (GTK_OBJECT (monitor_win), "delete_event",
                      GTK_SIGNAL_FUNC (on_monitor_win_delete_event),
                      NULL);
  gtk_signal_connect (GTK_OBJECT (monitor_display_drawingarea), "expose_event",
                      GTK_SIGNAL_FUNC (on_monitor_display_drawingarea_expose_event),
                      NULL);

  return monitor_win;
}

GtkWidget*
create_about_win (void)
{
  GtkWidget *about_win;
  GtkWidget *about_vbox;
  GtkWidget *about_label;
  GtkWidget *about_actionarea;
  GtkWidget *about_ok;

  about_win = gtk_dialog_new ();
  gtk_object_set_data (GTK_OBJECT (about_win), "about_win", about_win);
  gtk_window_set_title (GTK_WINDOW (about_win), "About XMMS Crossfade Plugin");
  gtk_window_set_policy (GTK_WINDOW (about_win), FALSE, FALSE, FALSE);

  about_vbox = GTK_DIALOG (about_win)->vbox;
  gtk_object_set_data (GTK_OBJECT (about_win), "about_vbox", about_vbox);
  gtk_widget_show (about_vbox);
  gtk_container_set_border_width (GTK_CONTAINER (about_vbox), 5);

  about_label = gtk_label_new ("dummy");
  gtk_widget_ref (about_label);
  gtk_object_set_data_full (GTK_OBJECT (about_win), "about_label", about_label,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (about_label);
  gtk_box_pack_start (GTK_BOX (about_vbox), about_label, FALSE, FALSE, 0);

  about_actionarea = GTK_DIALOG (about_win)->action_area;
  gtk_object_set_data (GTK_OBJECT (about_win), "about_actionarea", about_actionarea);
  gtk_widget_show (about_actionarea);
  gtk_container_set_border_width (GTK_CONTAINER (about_actionarea), 10);

  about_ok = gtk_button_new_with_label ("OK");
  gtk_widget_ref (about_ok);
  gtk_object_set_data_full (GTK_OBJECT (about_win), "about_ok", about_ok,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (about_ok);
  gtk_box_pack_start (GTK_BOX (about_actionarea), about_ok, FALSE, TRUE, 0);

  gtk_signal_connect_object (GTK_OBJECT (about_ok), "clicked",
                             GTK_SIGNAL_FUNC (gtk_widget_destroy),
                             GTK_OBJECT (about_win));

  return about_win;
}

GtkWidget*
create_help_win (void)
{
  GtkWidget *help_win;
  GtkWidget *help_vbox;
  GtkWidget *help_scrolledwindow;
  GtkWidget *help_text;
  GtkWidget *help_buttonbox;
  GtkWidget *help_close_button;

  help_win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_object_set_data (GTK_OBJECT (help_win), "help_win", help_win);
  gtk_window_set_title (GTK_WINDOW (help_win), "Help");

  help_vbox = gtk_vbox_new (FALSE, 0);
  gtk_widget_ref (help_vbox);
  gtk_object_set_data_full (GTK_OBJECT (help_win), "help_vbox", help_vbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (help_vbox);
  gtk_container_add (GTK_CONTAINER (help_win), help_vbox);
  gtk_container_set_border_width (GTK_CONTAINER (help_vbox), 5);

  help_scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
  gtk_widget_ref (help_scrolledwindow);
  gtk_object_set_data_full (GTK_OBJECT (help_win), "help_scrolledwindow", help_scrolledwindow,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (help_scrolledwindow);
  gtk_box_pack_start (GTK_BOX (help_vbox), help_scrolledwindow, TRUE, TRUE, 0);
  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (help_scrolledwindow), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);

  help_text = gtk_text_new (NULL, NULL);
  gtk_widget_ref (help_text);
  gtk_object_set_data_full (GTK_OBJECT (help_win), "help_text", help_text,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (help_text);
  gtk_container_add (GTK_CONTAINER (help_scrolledwindow), help_text);
  gtk_text_insert (GTK_TEXT (help_text), NULL, NULL, NULL,
                   "<dummy>\n", -1);

  help_buttonbox = gtk_hbutton_box_new ();
  gtk_widget_ref (help_buttonbox);
  gtk_object_set_data_full (GTK_OBJECT (help_win), "help_buttonbox", help_buttonbox,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (help_buttonbox);
  gtk_box_pack_start (GTK_BOX (help_vbox), help_buttonbox, FALSE, FALSE, 0);
  gtk_button_box_set_layout (GTK_BUTTON_BOX (help_buttonbox), GTK_BUTTONBOX_END);

  help_close_button = gtk_button_new_with_label ("Close");
  gtk_widget_ref (help_close_button);
  gtk_object_set_data_full (GTK_OBJECT (help_win), "help_close_button", help_close_button,
                            (GtkDestroyNotify) gtk_widget_unref);
  gtk_widget_show (help_close_button);
  gtk_container_add (GTK_CONTAINER (help_buttonbox), help_close_button);
  GTK_WIDGET_SET_FLAGS (help_close_button, GTK_CAN_DEFAULT);

  gtk_signal_connect (GTK_OBJECT (help_close_button), "clicked",
                      GTK_SIGNAL_FUNC (on_help_close_button_clicked),
                      NULL);

  return help_win;
}