comparison src/audacious/ui_preferences.c @ 4751:b87f8c707b7f

branch merge
author Andrew O. Shadoura <bugzilla@tut.by>
date Wed, 06 Aug 2008 22:33:27 +0300
parents 1a13d88b72f3
children 0ea6dd6bfb5a
comparison
equal deleted inserted replaced
4750:74134c731db6 4751:b87f8c707b7f
44 #include "general.h" 44 #include "general.h"
45 #include "output.h" 45 #include "output.h"
46 #include "visualization.h" 46 #include "visualization.h"
47 #include "playlist.h" 47 #include "playlist.h"
48 48
49 #include "ui_skinned_textbox.h"
50 #include "strings.h" 49 #include "strings.h"
51 #include "util.h" 50 #include "util.h"
52 #include "dnd.h" 51 #include "dnd.h"
53 #include "configdb.h" 52 #include "configdb.h"
54 #include "preferences.h" 53 #include "preferences.h"
55 54
56 #include "ui_main.h"
57 #include "ui_playlist.h"
58 #include "ui_skinselector.h"
59 #include "ui_preferences.h" 55 #include "ui_preferences.h"
60 #include "ui_equalizer.h"
61 #include "ui_skinned_playlist.h"
62 #include "ui_skinned_window.h"
63 56
64 #include "build_stamp.h" 57 #include "build_stamp.h"
65 58
66 #define TITLESTRING_UPDATE_TIMEOUT 3 59 #define TITLESTRING_UPDATE_TIMEOUT 3
67 60
103 gint y; 96 gint y;
104 } MenuPos; 97 } MenuPos;
105 98
106 static GtkWidget *prefswin = NULL; 99 static GtkWidget *prefswin = NULL;
107 static GtkWidget *filepopup_settings = NULL; 100 static GtkWidget *filepopup_settings = NULL;
108 static GtkWidget *colorize_settings = NULL;
109 static GtkWidget *category_treeview = NULL; 101 static GtkWidget *category_treeview = NULL;
110 static GtkWidget *category_notebook = NULL; 102 static GtkWidget *category_notebook = NULL;
111 GtkWidget *filepopupbutton = NULL; 103 GtkWidget *filepopupbutton = NULL;
112 104
113 /* colorize settings scales */ 105 /* colorize settings scales */
125 GtkWidget *filepopup_settings_showprogressbar; 117 GtkWidget *filepopup_settings_showprogressbar;
126 GtkWidget *filepopup_settings_delay; 118 GtkWidget *filepopup_settings_delay;
127 119
128 /* prefswin widgets */ 120 /* prefswin widgets */
129 GtkWidget *titlestring_entry; 121 GtkWidget *titlestring_entry;
130 GtkWidget *skin_view;
131 GtkWidget *skin_refresh_button;
132 GtkWidget *filepopup_for_tuple_settings_button; 122 GtkWidget *filepopup_for_tuple_settings_button;
133 GtkTooltips *tooltips; 123 GtkTooltips *tooltips;
134 static gint titlestring_timeout_counter = 0; 124 static gint titlestring_timeout_counter = 0;
135 125
136 static Category categories[] = { 126 static Category categories[] = {
137 {DATA_DIR "/images/appearance.png", N_("Appearance")},
138 {DATA_DIR "/images/audio.png", N_("Audio")}, 127 {DATA_DIR "/images/audio.png", N_("Audio")},
139 {DATA_DIR "/images/replay_gain.png", N_("Replay Gain")}, 128 {DATA_DIR "/images/replay_gain.png", N_("Replay Gain")},
140 {DATA_DIR "/images/connectivity.png", N_("Connectivity")}, 129 {DATA_DIR "/images/connectivity.png", N_("Connectivity")},
141 {DATA_DIR "/images/mouse.png", N_("Mouse")}, 130 {DATA_DIR "/images/mouse.png", N_("Mouse")},
142 {DATA_DIR "/images/playback.png", N_("Playback")}, 131 {DATA_DIR "/images/playback.png", N_("Playback")},
188 char *img_url; 177 char *img_url;
189 } CategoryQueueEntry; 178 } CategoryQueueEntry;
190 179
191 CategoryQueueEntry *category_queue = NULL; 180 CategoryQueueEntry *category_queue = NULL;
192 181
193 static void playlist_show_pl_separator_numbers_cb();
194 static void show_wm_decorations_cb();
195 static void bitmap_fonts_cb();
196 static void mainwin_font_set_cb();
197 static void playlist_font_set_cb();
198 GtkWidget *ui_preferences_chardet_table_populate(void); 182 GtkWidget *ui_preferences_chardet_table_populate(void);
199 static GtkWidget *ui_preferences_bit_depth(void); 183 static GtkWidget *ui_preferences_bit_depth(void);
200 static GtkWidget *ui_preferences_rg_params(void); 184 static GtkWidget *ui_preferences_rg_params(void);
201
202 static PreferencesWidget appearance_misc_widgets[] = {
203 {WIDGET_LABEL, N_("<b>_Fonts</b>"), NULL, NULL, NULL, FALSE},
204 {WIDGET_FONT_BTN, N_("_Player:"), &cfg.mainwin_font, G_CALLBACK(mainwin_font_set_cb), N_("Select main player window font:"), FALSE},
205 {WIDGET_FONT_BTN, N_("_Playlist:"), &cfg.playlist_font, G_CALLBACK(playlist_font_set_cb), N_("Select playlist font:"), FALSE},
206 {WIDGET_CHK_BTN, N_("Use Bitmap fonts if available"), &cfg.mainwin_use_bitmapfont, G_CALLBACK(bitmap_fonts_cb), N_("Use bitmap fonts if they are available. Bitmap fonts do not support Unicode strings."), FALSE},
207 {WIDGET_LABEL, N_("<b>_Miscellaneous</b>"), NULL, NULL, NULL, FALSE},
208 {WIDGET_CHK_BTN, N_("Show track numbers in playlist"), &cfg.show_numbers_in_pl,
209 G_CALLBACK(playlist_show_pl_separator_numbers_cb), NULL, FALSE},
210 {WIDGET_CHK_BTN, N_("Show separators in playlist"), &cfg.show_separator_in_pl,
211 G_CALLBACK(playlist_show_pl_separator_numbers_cb), NULL, FALSE},
212 {WIDGET_CHK_BTN, N_("Show window manager decoration"), &cfg.show_wm_decorations, G_CALLBACK(show_wm_decorations_cb),
213 N_("This enables the window manager to show decorations for windows."), FALSE},
214 {WIDGET_CHK_BTN, N_("Use XMMS-style file selector instead of the default selector"), &cfg.use_xmms_style_fileselector, NULL,
215 N_("This enables the XMMS/GTK1-style file selection dialogs. This selector is provided by Audacious itself and is faster than the default GTK2 selector (but sadly not as user-friendly)."), FALSE},
216 {WIDGET_CHK_BTN, N_("Use two-way text scroller"), &cfg.twoway_scroll, NULL,
217 N_("If selected, the file information text in the main window will scroll back and forth. If not selected, the text will only scroll in one direction."), FALSE},
218 {WIDGET_CHK_BTN, N_("Disable inline gtk theme"), &cfg.disable_inline_gtk, NULL, NULL, FALSE},
219 {WIDGET_CHK_BTN, N_("Allow loading incomplete skins"), &cfg.allow_broken_skins, NULL,
220 N_("If selected, audacious won't refuse loading broken skins. Use only if your favourite skin doesn't work"), FALSE},
221 };
222 185
223 static PreferencesWidget audio_page_widgets[] = { 186 static PreferencesWidget audio_page_widgets[] = {
224 {WIDGET_LABEL, N_("<b>Format Detection</b>"), NULL, NULL, NULL, FALSE}, 187 {WIDGET_LABEL, N_("<b>Format Detection</b>"), NULL, NULL, NULL, FALSE},
225 {WIDGET_CHK_BTN, N_("Detect file formats on demand, instead of immediately."), &cfg.playlist_detect, NULL, 188 {WIDGET_CHK_BTN, N_("Detect file formats on demand, instead of immediately."), &cfg.playlist_detect, NULL,
226 N_("When checked, Audacious will detect file formats on demand. This can result in a messier playlist, but delivers a major speed benefit."), FALSE}, 189 N_("When checked, Audacious will detect file formats on demand. This can result in a messier playlist, but delivers a major speed benefit."), FALSE},
283 {WIDGET_LABEL, N_("<b>Mouse wheel</b>"), NULL, NULL, NULL, FALSE}, 246 {WIDGET_LABEL, N_("<b>Mouse wheel</b>"), NULL, NULL, NULL, FALSE},
284 {WIDGET_SPIN_BTN, N_("Changes volume by"), &cfg.mouse_change, NULL, N_("percent"), FALSE}, 247 {WIDGET_SPIN_BTN, N_("Changes volume by"), &cfg.mouse_change, NULL, N_("percent"), FALSE},
285 {WIDGET_SPIN_BTN, N_("Scrolls playlist by"), &cfg.scroll_pl_by, NULL, N_("lines"), FALSE}, 248 {WIDGET_SPIN_BTN, N_("Scrolls playlist by"), &cfg.scroll_pl_by, NULL, N_("lines"), FALSE},
286 }; 249 };
287 250
288 static void create_colorize_settings(void);
289 static void prefswin_page_queue_destroy(CategoryQueueEntry *ent); 251 static void prefswin_page_queue_destroy(CategoryQueueEntry *ent);
290 252
291 static void 253 static void
292 change_category(GtkNotebook * notebook, 254 change_category(GtkNotebook * notebook,
293 GtkTreeSelection * selection) 255 GtkTreeSelection * selection)
682 AUDDBG("Returned font name: \"%s\"\n", *cfg); 644 AUDDBG("Returned font name: \"%s\"\n", *cfg);
683 void (*callback) (void) = g_object_get_data(G_OBJECT(button), "callback"); 645 void (*callback) (void) = g_object_get_data(G_OBJECT(button), "callback");
684 if (callback) callback(); 646 if (callback) callback();
685 } 647 }
686 648
687 static void
688 mainwin_font_set_cb()
689 {
690 ui_skinned_textbox_set_xfont(mainwin_info, !cfg.mainwin_use_bitmapfont, cfg.mainwin_font);
691 }
692
693 static void
694 playlist_font_set_cb()
695 {
696 AUDDBG("Attempt to set font \"%s\"\n", cfg.playlist_font);
697 ui_skinned_playlist_set_font(cfg.playlist_font);
698 playlistwin_set_sinfo_font(cfg.playlist_font); /* propagate font setting to playlistwin_sinfo */
699 playlistwin_update_list(playlist_get_active());
700 }
701
702 static void
703 playlist_show_pl_separator_numbers_cb()
704 {
705 playlistwin_update_list(playlist_get_active());
706 }
707
708 /* proxy */ 649 /* proxy */
709 static void 650 static void
710 on_proxy_button_realize(GtkToggleButton *button, gchar *cfg) 651 on_proxy_button_realize(GtkToggleButton *button, gchar *cfg)
711 { 652 {
712 g_return_if_fail(cfg != NULL); 653 g_return_if_fail(cfg != NULL);
953 894
954 static void 895 static void
955 on_spin_btn_changed(GtkSpinButton *button, gboolean *cfg) 896 on_spin_btn_changed(GtkSpinButton *button, gboolean *cfg)
956 { 897 {
957 *cfg = gtk_spin_button_get_value_as_int(button); 898 *cfg = gtk_spin_button_get_value_as_int(button);
958 }
959
960 static void
961 on_skin_refresh_button_clicked(GtkButton * button,
962 gpointer data)
963 {
964 const mode_t mode755 = S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
965
966 del_directory(aud_paths[BMP_PATH_SKIN_THUMB_DIR]);
967 make_directory(aud_paths[BMP_PATH_SKIN_THUMB_DIR], mode755);
968
969 skin_view_update(GTK_TREE_VIEW(skin_view), GTK_WIDGET(skin_refresh_button));
970 }
971
972 static gboolean
973 on_skin_view_realize(GtkTreeView * treeview,
974 gpointer data)
975 {
976 skin_view_realize(treeview);
977
978 return TRUE;
979 } 899 }
980 900
981 static void 901 static void
982 on_category_treeview_realize(GtkTreeView * treeview, 902 on_category_treeview_realize(GtkTreeView * treeview,
983 GtkNotebook * notebook) 903 GtkNotebook * notebook)
1039 prefswin_page_new(ent->container, ent->pg_name, ent->img_url); 959 prefswin_page_new(ent->container, ent->pg_name, ent->img_url);
1040 prefswin_page_queue_destroy(ent); 960 prefswin_page_queue_destroy(ent);
1041 } 961 }
1042 } 962 }
1043 963
1044 void
1045 on_skin_view_drag_data_received(GtkWidget * widget,
1046 GdkDragContext * context,
1047 gint x, gint y,
1048 GtkSelectionData * selection_data,
1049 guint info, guint time,
1050 gpointer user_data)
1051 {
1052 mcs_handle_t *db;
1053 gchar *path;
1054
1055 if (!selection_data->data) {
1056 g_warning("DND data string is NULL");
1057 return;
1058 }
1059
1060 path = (gchar *) selection_data->data;
1061
1062 /* FIXME: use a real URL validator/parser */
1063
1064 if (str_has_prefix_nocase(path, "file:///")) {
1065 path[strlen(path) - 2] = 0; /* Why the hell a CR&LF? */
1066 path += 7;
1067 }
1068 else if (str_has_prefix_nocase(path, "file:")) {
1069 path += 5;
1070 }
1071
1072 if (file_is_archive(path)) {
1073 if (!aud_active_skin_load(path))
1074 return;
1075 skin_install_skin(path);
1076 skin_view_update(GTK_TREE_VIEW(widget),
1077 GTK_WIDGET(skin_refresh_button));
1078
1079 /* Change skin name in the config file */
1080 db = cfg_db_open();
1081 cfg_db_set_string(db, NULL, "skin", path);
1082 cfg_db_close(db);
1083 }
1084 }
1085
1086 static void 964 static void
1087 on_chardet_detector_cbox_changed(GtkComboBox * combobox, gpointer data) 965 on_chardet_detector_cbox_changed(GtkComboBox * combobox, gpointer data)
1088 { 966 {
1089 mcs_handle_t *db; 967 mcs_handle_t *db;
1090 gint position = 0; 968 gint position = 0;
1209 gtk_widget_set_sensitive(GTK_WIDGET(data), 1087 gtk_widget_set_sensitive(GTK_WIDGET(data),
1210 gtk_toggle_button_get_active(button)); 1088 gtk_toggle_button_get_active(button));
1211 } 1089 }
1212 1090
1213 static void 1091 static void
1214 on_colorize_button_clicked(GtkButton *button, gpointer data)
1215 {
1216 if (colorize_settings)
1217 gtk_window_present(GTK_WINDOW(colorize_settings));
1218 else
1219 create_colorize_settings();
1220 }
1221
1222 static void
1223 reload_skin()
1224 {
1225 /* reload the skin to apply the change */
1226 skin_reload_forced();
1227 ui_skinned_window_draw_all(mainwin);
1228 ui_skinned_window_draw_all(equalizerwin);
1229 ui_skinned_window_draw_all(playlistwin);
1230 }
1231
1232 static void
1233 on_red_scale_value_changed(GtkHScale *scale, gpointer data)
1234 {
1235 cfg.colorize_r = gtk_range_get_value(GTK_RANGE(scale));
1236 reload_skin();
1237 }
1238
1239 static void
1240 on_green_scale_value_changed(GtkHScale *scale, gpointer data)
1241 {
1242 cfg.colorize_g = gtk_range_get_value(GTK_RANGE(scale));
1243 reload_skin();
1244 }
1245
1246 static void
1247 on_blue_scale_value_changed(GtkHScale *scale, gpointer data)
1248 {
1249 cfg.colorize_b = gtk_range_get_value(GTK_RANGE(scale));
1250 reload_skin();
1251 }
1252
1253 static void
1254 on_colorize_close_clicked(GtkButton *button, gpointer data)
1255 {
1256 gtk_widget_destroy(colorize_settings);
1257 colorize_settings = NULL;
1258 }
1259
1260 static void
1261 on_filepopup_for_tuple_settings_clicked(GtkButton *button, gpointer data) 1092 on_filepopup_for_tuple_settings_clicked(GtkButton *button, gpointer data)
1262 { 1093 {
1263 gtk_entry_set_text(GTK_ENTRY(filepopup_settings_cover_name_include), cfg.cover_name_include); 1094 gtk_entry_set_text(GTK_ENTRY(filepopup_settings_cover_name_include), cfg.cover_name_include);
1264 gtk_entry_set_text(GTK_ENTRY(filepopup_settings_cover_name_exclude), cfg.cover_name_exclude); 1095 gtk_entry_set_text(GTK_ENTRY(filepopup_settings_cover_name_exclude), cfg.cover_name_exclude);
1265 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filepopup_settings_recurse_for_cover), cfg.recurse_for_cover); 1096 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(filepopup_settings_recurse_for_cover), cfg.recurse_for_cover);
1310 on_toggle_button_realize(GtkToggleButton * button, gboolean *cfg) 1141 on_toggle_button_realize(GtkToggleButton * button, gboolean *cfg)
1311 { 1142 {
1312 gtk_toggle_button_set_active(button, *cfg); 1143 gtk_toggle_button_set_active(button, *cfg);
1313 GtkWidget *child = g_object_get_data(G_OBJECT(button), "child"); 1144 GtkWidget *child = g_object_get_data(G_OBJECT(button), "child");
1314 if (child) gtk_widget_set_sensitive(GTK_WIDGET(child), *cfg); 1145 if (child) gtk_widget_set_sensitive(GTK_WIDGET(child), *cfg);
1315 }
1316
1317 static void
1318 bitmap_fonts_cb()
1319 {
1320 ui_skinned_textbox_set_xfont(mainwin_info, !cfg.mainwin_use_bitmapfont, cfg.mainwin_font);
1321 playlistwin_set_sinfo_font(cfg.playlist_font);
1322
1323 if (cfg.playlist_shaded) {
1324 playlistwin_update_list(playlist_get_active());
1325 ui_skinned_window_draw_all(playlistwin);
1326 }
1327 }
1328
1329 static void
1330 show_wm_decorations_cb()
1331 {
1332 gtk_window_set_decorated(GTK_WINDOW(mainwin), cfg.show_wm_decorations);
1333 gtk_window_set_decorated(GTK_WINDOW(playlistwin), cfg.show_wm_decorations);
1334 gtk_window_set_decorated(GTK_WINDOW(equalizerwin), cfg.show_wm_decorations);
1335 }
1336
1337 void
1338 create_colorize_settings(void)
1339 {
1340 GtkWidget *vbox;
1341 GtkWidget *label;
1342 GtkWidget *table;
1343 GtkWidget *hbuttonbox;
1344 GtkWidget *colorize_close;
1345
1346 GtkWidget *green_label;
1347 GtkWidget *red_label;
1348 GtkWidget *blue_label;
1349
1350 colorize_settings = gtk_window_new(GTK_WINDOW_TOPLEVEL);
1351 gtk_container_set_border_width(GTK_CONTAINER(colorize_settings), 12);
1352 gtk_window_set_title(GTK_WINDOW(colorize_settings), _("Color Adjustment"));
1353 gtk_window_set_type_hint(GTK_WINDOW(colorize_settings), GDK_WINDOW_TYPE_HINT_DIALOG);
1354 gtk_window_set_transient_for(GTK_WINDOW(colorize_settings), GTK_WINDOW(prefswin));
1355
1356 vbox = gtk_vbox_new(FALSE, 12);
1357 gtk_container_add(GTK_CONTAINER(colorize_settings), vbox);
1358
1359 label = gtk_label_new(_("Audacious allows you to alter the color balance of the skinned UI. The sliders below will allow you to do this."));
1360 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
1361 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
1362 gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
1363
1364 table = gtk_table_new(3, 2, FALSE);
1365 gtk_box_pack_start(GTK_BOX(vbox), table, TRUE, TRUE, 0);
1366 gtk_table_set_row_spacings(GTK_TABLE(table), 6);
1367 gtk_table_set_col_spacings(GTK_TABLE(table), 12);
1368
1369 blue_label = gtk_label_new(_("Blue"));
1370 gtk_table_attach(GTK_TABLE(table), blue_label, 0, 1, 2, 3,
1371 (GtkAttachOptions) (0),
1372 (GtkAttachOptions) (0), 0, 0);
1373 gtk_label_set_justify(GTK_LABEL(blue_label), GTK_JUSTIFY_RIGHT);
1374 gtk_misc_set_alignment(GTK_MISC(blue_label), 1, 0.5);
1375
1376 green_label = gtk_label_new(_("Green"));
1377 gtk_table_attach(GTK_TABLE(table), green_label, 0, 1, 1, 2,
1378 (GtkAttachOptions) (0),
1379 (GtkAttachOptions) (0), 0, 0);
1380 gtk_label_set_justify(GTK_LABEL(green_label), GTK_JUSTIFY_RIGHT);
1381 gtk_misc_set_alignment(GTK_MISC(green_label), 1, 0.5);
1382
1383 red_label = gtk_label_new(_("Red"));
1384 gtk_table_attach(GTK_TABLE(table), red_label, 0, 1, 0, 1,
1385 (GtkAttachOptions) (0),
1386 (GtkAttachOptions) (0), 0, 0);
1387 gtk_label_set_justify(GTK_LABEL(red_label), GTK_JUSTIFY_RIGHT);
1388 gtk_misc_set_alignment(GTK_MISC(red_label), 1, 0.5);
1389
1390 red_scale = gtk_hscale_new(GTK_ADJUSTMENT(gtk_adjustment_new(0, 0, 255, 0, 0, 0)));
1391 gtk_table_attach(GTK_TABLE(table), red_scale, 1, 2, 0, 1,
1392 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1393 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
1394 gtk_scale_set_draw_value(GTK_SCALE(red_scale), FALSE);
1395 gtk_scale_set_digits(GTK_SCALE(red_scale), 3);
1396
1397 green_scale = gtk_hscale_new(GTK_ADJUSTMENT(gtk_adjustment_new(0, 0, 255, 0, 0, 0)));
1398 gtk_table_attach(GTK_TABLE(table), green_scale, 1, 2, 1, 2,
1399 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1400 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
1401 gtk_scale_set_draw_value(GTK_SCALE(green_scale), FALSE);
1402 gtk_scale_set_digits(GTK_SCALE(green_scale), 3);
1403
1404 blue_scale = gtk_hscale_new(GTK_ADJUSTMENT(gtk_adjustment_new(0, 0, 255, 0, 0, 0)));
1405 gtk_table_attach(GTK_TABLE(table), blue_scale, 1, 2, 2, 3,
1406 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1407 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0);
1408 gtk_scale_set_draw_value(GTK_SCALE(blue_scale), FALSE);
1409 gtk_scale_set_digits(GTK_SCALE(blue_scale), 3);
1410
1411 hbuttonbox = gtk_hbutton_box_new();
1412 gtk_box_pack_start(GTK_BOX(vbox), hbuttonbox, FALSE, FALSE, 0);
1413 gtk_button_box_set_layout(GTK_BUTTON_BOX(hbuttonbox), GTK_BUTTONBOX_END);
1414 gtk_box_set_spacing(GTK_BOX(hbuttonbox), 6);
1415
1416 colorize_close = gtk_button_new_from_stock("gtk-close");
1417 gtk_container_add(GTK_CONTAINER(hbuttonbox), colorize_close);
1418 GTK_WIDGET_SET_FLAGS(colorize_close, GTK_CAN_DEFAULT);
1419
1420 g_signal_connect((gpointer) red_scale, "value_changed",
1421 G_CALLBACK(on_red_scale_value_changed),
1422 NULL);
1423 g_signal_connect((gpointer) green_scale, "value_changed",
1424 G_CALLBACK(on_green_scale_value_changed),
1425 NULL);
1426 g_signal_connect((gpointer) blue_scale, "value_changed",
1427 G_CALLBACK(on_blue_scale_value_changed),
1428 NULL);
1429 g_signal_connect((gpointer) colorize_close, "clicked",
1430 G_CALLBACK(on_colorize_close_clicked),
1431 NULL);
1432
1433 gtk_range_set_value(GTK_RANGE(red_scale), cfg.colorize_r);
1434 gtk_range_set_value(GTK_RANGE(green_scale), cfg.colorize_g);
1435 gtk_range_set_value(GTK_RANGE(blue_scale), cfg.colorize_b);
1436
1437 gtk_widget_grab_default(colorize_close);
1438 gtk_widget_show_all(colorize_settings);
1439 } 1146 }
1440 1147
1441 void 1148 void
1442 create_filepopup_settings(void) 1149 create_filepopup_settings(void)
1443 { 1150 {
1933 GINT_TO_POINTER(i)); 1640 GINT_TO_POINTER(i));
1934 }; 1641 };
1935 gtk_widget_show_all(titlestring_tag_menu); 1642 gtk_widget_show_all(titlestring_tag_menu);
1936 1643
1937 return titlestring_tag_menu; 1644 return titlestring_tag_menu;
1938 }
1939
1940 static void
1941 create_appearence_category(void)
1942 {
1943 GtkWidget *appearance_page_vbox;
1944 GtkWidget *vbox37;
1945 GtkWidget *vbox38;
1946 GtkWidget *hbox12;
1947 GtkWidget *alignment94;
1948 GtkWidget *hbox13;
1949 GtkWidget *label103;
1950 GtkWidget *colorspace_button;
1951 GtkWidget *image11;
1952 GtkWidget *image12;
1953 GtkWidget *alignment95;
1954 GtkWidget *skin_view_scrolled_window;
1955
1956 appearance_page_vbox = gtk_vbox_new (FALSE, 0);
1957 gtk_container_add (GTK_CONTAINER (category_notebook), appearance_page_vbox);
1958
1959 vbox37 = gtk_vbox_new (FALSE, 0);
1960 gtk_box_pack_start (GTK_BOX (appearance_page_vbox), vbox37, TRUE, TRUE, 0);
1961
1962 vbox38 = gtk_vbox_new (FALSE, 0);
1963 gtk_box_pack_start (GTK_BOX (vbox37), vbox38, FALSE, TRUE, 0);
1964
1965 hbox12 = gtk_hbox_new (FALSE, 0);
1966 gtk_box_pack_start (GTK_BOX (vbox38), hbox12, TRUE, TRUE, 0);
1967
1968 alignment94 = gtk_alignment_new (0.5, 0.5, 1, 1);
1969 gtk_box_pack_start (GTK_BOX (hbox12), alignment94, TRUE, TRUE, 0);
1970 gtk_alignment_set_padding (GTK_ALIGNMENT (alignment94), 0, 4, 0, 0);
1971
1972 hbox13 = gtk_hbox_new (FALSE, 0);
1973 gtk_container_add (GTK_CONTAINER (alignment94), hbox13);
1974
1975 label103 = gtk_label_new_with_mnemonic (_("<b>_Skin</b>"));
1976 gtk_box_pack_start (GTK_BOX (hbox13), label103, TRUE, TRUE, 0);
1977 gtk_label_set_use_markup (GTK_LABEL (label103), TRUE);
1978 gtk_misc_set_alignment (GTK_MISC (label103), 0, 0);
1979
1980 colorspace_button = gtk_button_new ();
1981 gtk_box_pack_start (GTK_BOX (hbox13), colorspace_button, FALSE, FALSE, 0);
1982
1983 image11 = gtk_image_new_from_stock ("gtk-properties", GTK_ICON_SIZE_BUTTON);
1984 gtk_container_add (GTK_CONTAINER (colorspace_button), image11);
1985
1986 skin_refresh_button = gtk_button_new ();
1987 gtk_box_pack_start (GTK_BOX (hbox13), skin_refresh_button, FALSE, FALSE, 0);
1988 GTK_WIDGET_UNSET_FLAGS (skin_refresh_button, GTK_CAN_FOCUS);
1989 gtk_tooltips_set_tip (tooltips, skin_refresh_button, _("Refresh skin list"), NULL);
1990 gtk_button_set_relief (GTK_BUTTON (skin_refresh_button), GTK_RELIEF_HALF);
1991 gtk_button_set_focus_on_click (GTK_BUTTON (skin_refresh_button), FALSE);
1992
1993 image12 = gtk_image_new_from_stock ("gtk-refresh", GTK_ICON_SIZE_BUTTON);
1994 gtk_container_add (GTK_CONTAINER (skin_refresh_button), image12);
1995
1996 alignment95 = gtk_alignment_new (0.5, 0.5, 1, 1);
1997 gtk_box_pack_start (GTK_BOX (vbox38), alignment95, TRUE, TRUE, 0);
1998 gtk_widget_set_size_request (alignment95, -1, 172);
1999 gtk_alignment_set_padding (GTK_ALIGNMENT (alignment95), 0, 0, 12, 0);
2000
2001 skin_view_scrolled_window = gtk_scrolled_window_new (NULL, NULL);
2002 gtk_container_add (GTK_CONTAINER (alignment95), skin_view_scrolled_window);
2003 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (skin_view_scrolled_window), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
2004 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (skin_view_scrolled_window), GTK_SHADOW_IN);
2005
2006 skin_view = gtk_tree_view_new ();
2007 gtk_container_add (GTK_CONTAINER (skin_view_scrolled_window), skin_view);
2008 gtk_widget_set_size_request (skin_view, -1, 100);
2009
2010 create_widgets(GTK_BOX(vbox37), appearance_misc_widgets, G_N_ELEMENTS(appearance_misc_widgets));
2011
2012
2013
2014 gtk_label_set_mnemonic_widget (GTK_LABEL (label103), category_notebook);
2015
2016 g_signal_connect(G_OBJECT(colorspace_button), "clicked",
2017 G_CALLBACK(on_colorize_button_clicked),
2018 NULL);
2019
2020 g_signal_connect(skin_view, "drag-data-received",
2021 G_CALLBACK(on_skin_view_drag_data_received),
2022 NULL);
2023 aud_drag_dest_set(skin_view);
2024
2025 g_signal_connect(mainwin, "drag-data-received",
2026 G_CALLBACK(mainwin_drag_data_received),
2027 skin_view);
2028
2029 g_signal_connect(skin_refresh_button, "clicked",
2030 G_CALLBACK(on_skin_refresh_button_clicked),
2031 NULL);
2032 } 1645 }
2033 1646
2034 static void 1647 static void
2035 create_mouse_category(void) 1648 create_mouse_category(void)
2036 { 1649 {
3060 gtk_notebook_set_show_border (GTK_NOTEBOOK (category_notebook), FALSE); 2673 gtk_notebook_set_show_border (GTK_NOTEBOOK (category_notebook), FALSE);
3061 gtk_notebook_set_scrollable (GTK_NOTEBOOK (category_notebook), TRUE); 2674 gtk_notebook_set_scrollable (GTK_NOTEBOOK (category_notebook), TRUE);
3062 2675
3063 2676
3064 2677
3065
3066 create_appearence_category();
3067 create_audio_category(); 2678 create_audio_category();
3068 create_replay_gain_category(); 2679 create_replay_gain_category();
3069 create_connectivity_category(); 2680 create_connectivity_category();
3070 create_mouse_category(); 2681 create_mouse_category();
3071 create_playback_category(); 2682 create_playback_category();
3107 2718
3108 /* connect signals */ 2719 /* connect signals */
3109 g_signal_connect(G_OBJECT(prefswin), "delete_event", 2720 g_signal_connect(G_OBJECT(prefswin), "delete_event",
3110 G_CALLBACK(gtk_widget_hide_on_delete), 2721 G_CALLBACK(gtk_widget_hide_on_delete),
3111 NULL); 2722 NULL);
3112 g_signal_connect_swapped(G_OBJECT(skin_refresh_button), "clicked",
3113 G_CALLBACK(on_skin_refresh_button_clicked),
3114 prefswin);
3115 g_signal_connect_after(G_OBJECT(skin_view), "realize",
3116 G_CALLBACK(on_skin_view_realize),
3117 NULL);
3118 g_signal_connect_swapped(G_OBJECT(close), "clicked", 2723 g_signal_connect_swapped(G_OBJECT(close), "clicked",
3119 G_CALLBACK(gtk_widget_hide), 2724 G_CALLBACK(gtk_widget_hide),
3120 GTK_OBJECT (prefswin)); 2725 GTK_OBJECT (prefswin));
3121 2726
3122 /* create category view */ 2727 /* create category view */
3138 } 2743 }
3139 2744
3140 void 2745 void
3141 show_prefs_window(void) 2746 show_prefs_window(void)
3142 { 2747 {
3143 static gboolean skinlist_filled = FALSE;
3144
3145 gtk_window_present(GTK_WINDOW(prefswin)); /* show or raise prefs window */ 2748 gtk_window_present(GTK_WINDOW(prefswin)); /* show or raise prefs window */
3146
3147 if ( !skinlist_filled )
3148 {
3149 skin_view_update(GTK_TREE_VIEW(skin_view), GTK_WIDGET(skin_refresh_button));
3150 skinlist_filled = TRUE;
3151 }
3152 } 2749 }
3153 2750
3154 void 2751 void
3155 hide_prefs_window(void) 2752 hide_prefs_window(void)
3156 { 2753 {