📄 prefswin.c
字号:
/* XMMS - Cross-platform multimedia player * Copyright (C) 1998-2001 Peter Alm, Mikael Alm, Olle Hallnas, * Thomas Nilsson and 4Front Technologies * Copyright (C) 1999-2003 Haavard Kvaalen * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */#include "xmms.h"#include "libxmms/util.h"#include "libxmms/titlestring.h"static GtkWidget *prefswin, *prefswin_notebook, *prefswin_ok;static GtkWidget *prefswin_audio_ie_cbox;static GtkWidget *prefswin_audio_iconfig, *prefswin_audio_iabout;static GtkWidget *prefswin_gplugins_config, *prefswin_gplugins_about;static GtkWidget *prefswin_gplugins_use_cbox;static GtkWidget *prefswin_vplugins_use_cbox, *prefswin_vplugins_list;static GtkWidget *prefswin_vplugins_config, *prefswin_vplugins_about;static GtkWidget *prefswin_audio_oconfig, *prefswin_audio_oabout;static GtkWidget *prefswin_eplugins_list, *prefswin_eplugins_config;static GtkWidget *prefswin_eplugins_about, *prefswin_eplugins_use_cbox;static GtkWidget *prefswin_options_sd_entry, *prefswin_options_pbs_entry; static GtkWidget *prefswin_options_font_entry, *prefswin_options_font_browse;static GtkWidget *prefswin_options_fontset, *prefswin_mainwin_font_entry;static GtkWidget *prefswin_mainwin_xfont, *prefswin_options_mouse_spin;static gboolean updating_ilist = FALSE, updating_glist = FALSE, updating_vlist = FALSE, updating_elist = FALSE;static GtkWidget *prefswin_title_entry;static GtkTooltips *prefswin_tooltips;extern MenuRow *mainwin_menurow;extern PButton *playlistwin_shade, *playlistwin_close, *equalizerwin_close;extern PButton *mainwin_menubtn, *mainwin_minimize, *mainwin_shade, *mainwin_close;extern TextBox *mainwin_info;extern gboolean mainwin_focus, equalizerwin_focus, playlistwin_focus;static gboolean is_opening = FALSE;static gint selected_oplugin;static GList *option_list = NULL;void add_input_plugins(GtkCList *clist);void add_general_plugins(GtkCList *clist);void add_vis_plugins(GtkCList *clist);void add_effect_plugins(GtkCList *clist);void add_output_plugins(GtkOptionMenu *omenu);static void prefswin_options_write_data(void);gint prefswin_delete_event(GtkWidget * widget, GdkEvent * event, gpointer data){ gtk_widget_hide(prefswin); return (TRUE);}void prefswin_ilist_clicked(GtkCList *clist, gint row, gint column, GdkEventButton *event, gpointer data){ InputPlugin *ip; gint index; GList *iplist; if (clist->selection) { iplist = get_input_list(); index = GPOINTER_TO_INT(clist->selection->data); ip = g_list_nth(iplist, index)->data; gtk_widget_set_sensitive(prefswin_audio_ie_cbox, 1); updating_ilist = TRUE; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefswin_audio_ie_cbox), (g_list_find(disabled_iplugins, ip) ? FALSE : TRUE)); updating_ilist = FALSE; if (ip->configure != NULL) gtk_widget_set_sensitive(prefswin_audio_iconfig, 1); else gtk_widget_set_sensitive(prefswin_audio_iconfig, 0); if (ip->about != NULL) gtk_widget_set_sensitive(prefswin_audio_iabout, 1); else gtk_widget_set_sensitive(prefswin_audio_iabout, 0); if (event && event->type == GDK_2BUTTON_PRESS) gtk_signal_emit_by_name(GTK_OBJECT(prefswin_audio_iconfig), "clicked"); } else { gtk_widget_set_sensitive(prefswin_audio_iconfig, FALSE); gtk_widget_set_sensitive(prefswin_audio_iabout, FALSE); gtk_widget_set_sensitive(prefswin_audio_ie_cbox, FALSE); }}void prefswin_iconfigure(GtkButton * w, gpointer data){ GtkCList *clist = GTK_CLIST(data); if (clist->selection) input_configure(GPOINTER_TO_INT(clist->selection->data));}void prefswin_iabout(GtkButton * w, gpointer data){ GtkCList *clist = GTK_CLIST(data); if (clist->selection) input_about(GPOINTER_TO_INT(clist->selection->data));}void prefswin_oconfigure(GtkWidget * w, gpointer data){ output_configure(selected_oplugin);}void prefswin_oabout(GtkWidget * w, gpointer data){ output_about(selected_oplugin);}void prefswin_gconfigure(GtkButton * w, gpointer data){ GtkCList *clist = GTK_CLIST(data); gint sel = GPOINTER_TO_INT(clist->selection->data); general_configure(sel);}void prefswin_gabout(GtkButton * w, gpointer data){ GtkCList *clist = GTK_CLIST(data); gint sel = GPOINTER_TO_INT(clist->selection->data); general_about(sel);}void prefswin_glist_clicked(GtkCList * clist, gint row, gint column, GdkEventButton *event, gpointer data){ GeneralPlugin *gp; gint index; GList *gplist; if (clist->selection) { gplist = get_general_list(); index = GPOINTER_TO_INT(clist->selection->data); gp = g_list_nth(gplist, index)->data; gtk_widget_set_sensitive(prefswin_gplugins_use_cbox, 1); updating_glist = TRUE; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefswin_gplugins_use_cbox), general_enabled(index)); updating_glist = FALSE; if (gp && gp->configure) gtk_widget_set_sensitive(prefswin_gplugins_config, 1); else gtk_widget_set_sensitive(prefswin_gplugins_config, 0); if (gp && gp->about) gtk_widget_set_sensitive(prefswin_gplugins_about, 1); else gtk_widget_set_sensitive(prefswin_gplugins_about, 0); if (event && event->type == GDK_2BUTTON_PRESS) gtk_signal_emit_by_name(GTK_OBJECT(prefswin_gplugins_config), "clicked"); } else { gtk_widget_set_sensitive(prefswin_gplugins_config, FALSE); gtk_widget_set_sensitive(prefswin_gplugins_about, FALSE); gtk_widget_set_sensitive(prefswin_gplugins_use_cbox, FALSE); }}void prefswin_vconfigure(GtkButton * w, gpointer data){ GtkCList *clist = GTK_CLIST(data); gint sel = GPOINTER_TO_INT(clist->selection->data); vis_configure(sel);}void prefswin_vabout(GtkButton * w, gpointer data){ GtkCList *clist = GTK_CLIST(data); gint sel = GPOINTER_TO_INT(clist->selection->data); vis_about(sel);}void prefswin_vlist_clicked(GtkCList * clist, gint row, gint column, GdkEventButton *event, gpointer data){ VisPlugin *vp; gint index; GList *vplist; if (clist->selection) { vplist = get_vis_list(); index = GPOINTER_TO_INT(clist->selection->data); vp = g_list_nth(vplist, index)->data; gtk_widget_set_sensitive(prefswin_vplugins_use_cbox, 1); updating_vlist = TRUE; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefswin_vplugins_use_cbox), vis_enabled(index)); updating_vlist = FALSE; if (vp && vp->configure) gtk_widget_set_sensitive(prefswin_vplugins_config, 1); else gtk_widget_set_sensitive(prefswin_vplugins_config, 0); if (vp && vp->about) gtk_widget_set_sensitive(prefswin_vplugins_about, 1); else gtk_widget_set_sensitive(prefswin_vplugins_about, 0); if (event && event->type == GDK_2BUTTON_PRESS) gtk_signal_emit_by_name(GTK_OBJECT(prefswin_vplugins_config), "clicked"); } else { gtk_widget_set_sensitive(prefswin_vplugins_config, FALSE); gtk_widget_set_sensitive(prefswin_vplugins_about, FALSE); gtk_widget_set_sensitive(prefswin_vplugins_use_cbox, FALSE); }}void prefswin_econfigure(GtkButton * w, gpointer data){ GtkCList *clist = GTK_CLIST(data); gint sel = GPOINTER_TO_INT(clist->selection->data); effect_configure(sel);}void prefswin_eabout(GtkButton * w, gpointer data){ GtkCList *clist = GTK_CLIST(data); gint sel = GPOINTER_TO_INT(clist->selection->data); effect_about(sel);}void prefswin_elist_clicked(GtkCList * clist, gint row, gint column, GdkEventButton *event, gpointer data){ EffectPlugin *ep; gint index; GList *eplist; if (clist->selection) { eplist = get_effect_list(); index = GPOINTER_TO_INT(clist->selection->data); ep = g_list_nth(eplist, index)->data; gtk_widget_set_sensitive(prefswin_eplugins_use_cbox, 1); updating_elist = TRUE; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prefswin_eplugins_use_cbox), effect_enabled(index)); updating_elist = FALSE; if (ep && ep->configure) gtk_widget_set_sensitive(prefswin_eplugins_config, 1); else gtk_widget_set_sensitive(prefswin_eplugins_config, 0); if (ep && ep->about) gtk_widget_set_sensitive(prefswin_eplugins_about, 1); else gtk_widget_set_sensitive(prefswin_eplugins_about, 0); if (event && event->type == GDK_2BUTTON_PRESS) gtk_signal_emit_by_name(GTK_OBJECT(prefswin_eplugins_config), "clicked"); } else { gtk_widget_set_sensitive(prefswin_eplugins_config, FALSE); gtk_widget_set_sensitive(prefswin_eplugins_about, FALSE); gtk_widget_set_sensitive(prefswin_eplugins_use_cbox, FALSE); }}void prefswin_rt_callback(GtkToggleButton * w, gpointer data){ if (!gtk_toggle_button_get_active(w) || is_opening) return; xmms_show_message( _("Warning"), _("Realtime priority is a way for XMMS to get a higher\n" "priority for CPU time. This might give less \"skips\".\n\n" "This requires that XMMS is run with root privileges and\n" "may, although it's very unusual, lock up your computer.\n" "Running XMMS with root privileges might also have other\n" "security implications.\n\n" "Using this feature is not recommended.\n" "To activate this you need to restart XMMS."), _("Ok"), FALSE, NULL, NULL);}static void prefswin_toggle_wm_decorations(void){ gboolean hide_player = !cfg.player_visible; if (hide_player) mainwin_real_show(); gtk_widget_hide(mainwin); if (cfg.playlist_visible) gtk_widget_hide(playlistwin); if (cfg.equalizer_visible) gtk_widget_hide(equalizerwin); mainwin_recreate(); equalizerwin_recreate(); playlistwin_recreate(); gtk_widget_show(mainwin); if (hide_player) mainwin_real_hide(); if (cfg.playlist_visible) gtk_widget_show(playlistwin); if (cfg.equalizer_visible) gtk_widget_show(equalizerwin); hint_set_always(cfg.always_on_top); hint_set_sticky(cfg.sticky); hint_set_skip_winlist(equalizerwin); hint_set_skip_winlist(playlistwin); gtk_window_set_transient_for(GTK_WINDOW(prefswin), GTK_WINDOW(mainwin));}void prefswin_apply_changes(void){ gboolean show_wm_old = cfg.show_wm_decorations; g_free(cfg.playlist_font); g_free(cfg.mainwin_font); g_free(cfg.gentitle_format); prefswin_options_write_data();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -