Mercurial > audlegacy-plugins
changeset 2690:a8328c40a5c1
more work on skins plugin settings
author | Tomasz Mon <desowin@gmail.com> |
---|---|
date | Fri, 06 Jun 2008 12:52:49 +0200 |
parents | 996281c0a457 |
children | 1d2596522075 |
files | src/skins/plugin.c src/skins/plugin.h src/skins/skins_cfg.c src/skins/skins_cfg.h src/skins/ui_main.c |
diffstat | 5 files changed, 403 insertions(+), 199 deletions(-) [+] |
line wrap: on
line diff
--- a/src/skins/plugin.c Fri Jun 06 13:41:12 2008 +0300 +++ b/src/skins/plugin.c Fri Jun 06 12:52:49 2008 +0200 @@ -22,19 +22,13 @@ #include "plugin.h" #include "skins_cfg.h" #include "ui_skin.h" -#include "ui_skinned_window.h" #include "ui_manager.h" #include "icons-stock.h" #include "ui_main_evlisteners.h" #include "ui_playlist_evlisteners.h" -#include "ui_skinned_textbox.h" -#include "ui_skinned_playlist.h" -#include "ui_skinselector.h" #include <audacious/i18n.h> #include <libintl.h> -#define PACKAGE "audacious-plugins" - gchar *skins_paths[SKINS_PATH_COUNT] = {}; GeneralPlugin skins_gp = @@ -50,10 +44,6 @@ SIMPLE_GENERAL_PLUGIN(skins, skins_gplist); gboolean plugin_is_active = FALSE; - -GtkWidget *skin_view; -GtkWidget *skin_refresh_button; - static void skins_free_paths(void) { int i; @@ -127,191 +117,6 @@ return; } -static void -playlist_show_pl_separator_numbers_cb() -{ - playlistwin_update_list(aud_playlist_get_active()); -} - -static void -mainwin_font_set_cb() -{ - ui_skinned_textbox_set_xfont(mainwin_info, !config.mainwin_use_bitmapfont, config.mainwin_font); -} - -static void -playlist_font_set_cb() -{ - AUDDBG("Attempt to set font \"%s\"\n", config.playlist_font); - ui_skinned_playlist_set_font(config.playlist_font); - playlistwin_set_sinfo_font(config.playlist_font); /* propagate font setting to playlistwin_sinfo */ - playlistwin_update_list(aud_playlist_get_active()); -} - -static void -bitmap_fonts_cb() -{ - ui_skinned_textbox_set_xfont(mainwin_info, !config.mainwin_use_bitmapfont, config.mainwin_font); - playlistwin_set_sinfo_font(config.playlist_font); - - if (config.playlist_shaded) { - playlistwin_update_list(aud_playlist_get_active()); - ui_skinned_window_draw_all(playlistwin); - } -} - -static void -show_wm_decorations_cb() -{ - gtk_window_set_decorated(GTK_WINDOW(mainwin), config.show_wm_decorations); - gtk_window_set_decorated(GTK_WINDOW(playlistwin), config.show_wm_decorations); - gtk_window_set_decorated(GTK_WINDOW(equalizerwin), config.show_wm_decorations); -} - -static PreferencesWidget appearance_misc_widgets[] = { - {WIDGET_LABEL, N_("<b>_Fonts</b>"), NULL, NULL, NULL, FALSE}, - {WIDGET_FONT_BTN, N_("_Player:"), &config.mainwin_font, G_CALLBACK(mainwin_font_set_cb), N_("Select main player window font:"), FALSE}, - {WIDGET_FONT_BTN, N_("_Playlist:"), &config.playlist_font, G_CALLBACK(playlist_font_set_cb), N_("Select playlist font:"), FALSE}, - {WIDGET_CHK_BTN, N_("Use Bitmap fonts if available"), &config.mainwin_use_bitmapfont, G_CALLBACK(bitmap_fonts_cb), N_("Use bitmap fonts if they are available. Bitmap fonts do not support Unicode strings."), FALSE}, - {WIDGET_LABEL, N_("<b>_Miscellaneous</b>"), NULL, NULL, NULL, FALSE}, - {WIDGET_CHK_BTN, N_("Show track numbers in playlist"), &config.show_numbers_in_pl, - G_CALLBACK(playlist_show_pl_separator_numbers_cb), NULL, FALSE}, - {WIDGET_CHK_BTN, N_("Show separators in playlist"), &config.show_separator_in_pl, - G_CALLBACK(playlist_show_pl_separator_numbers_cb), NULL, FALSE}, - {WIDGET_CHK_BTN, N_("Show window manager decoration"), &config.show_wm_decorations, G_CALLBACK(show_wm_decorations_cb), - N_("This enables the window manager to show decorations for windows."), FALSE}, - {WIDGET_CHK_BTN, N_("Use two-way text scroller"), &config.twoway_scroll, NULL, - 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}, - {WIDGET_CHK_BTN, N_("Disable inline gtk theme"), &config.disable_inline_gtk, NULL, NULL, FALSE}, - {WIDGET_CHK_BTN, N_("Allow loading incomplete skins"), &config.allow_broken_skins, NULL, - N_("If selected, audacious won't refuse loading broken skins. Use only if your favourite skin doesn't work"), FALSE}, -}; - -static gboolean -on_skin_view_realize(GtkTreeView * treeview, - gpointer data) -{ - skin_view_realize(treeview); - skin_view_update(GTK_TREE_VIEW(skin_view), GTK_WIDGET(skin_refresh_button)); - - return TRUE; -} - -void skins_configure(void) { - static GtkWidget *cfg_win = NULL; - GtkWidget *appearance_page_vbox; - GtkWidget *vbox37; - GtkWidget *vbox38; - GtkWidget *hbox12; - GtkWidget *alignment94; - GtkWidget *hbox13; - GtkWidget *label103; - GtkWidget *colorspace_button; - GtkWidget *image11; - GtkWidget *image12; - GtkWidget *alignment95; - GtkWidget *skin_view_scrolled_window; - - if (cfg_win != NULL) { - gtk_window_present(GTK_WINDOW(cfg_win)); - return; - } - - cfg_win = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_type_hint(GTK_WINDOW(cfg_win), GDK_WINDOW_TYPE_HINT_DIALOG); - gtk_window_set_title(GTK_WINDOW(cfg_win), _("Audacious Skinned GUI Configuration")); - gtk_container_set_border_width(GTK_CONTAINER(cfg_win), 10); - g_signal_connect(G_OBJECT(cfg_win), "destroy" , - G_CALLBACK(gtk_widget_destroyed), &cfg_win); - gtk_widget_set_size_request(cfg_win, 500, -1); - - appearance_page_vbox = gtk_vbox_new (FALSE, 0); - gtk_container_add(GTK_CONTAINER(cfg_win), appearance_page_vbox); - - vbox37 = gtk_vbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX (appearance_page_vbox), vbox37, TRUE, TRUE, 0); - - vbox38 = gtk_vbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX (vbox37), vbox38, FALSE, TRUE, 0); - - hbox12 = gtk_hbox_new (FALSE, 0); - gtk_box_pack_start (GTK_BOX (vbox38), hbox12, TRUE, TRUE, 0); - - alignment94 = gtk_alignment_new (0.5, 0.5, 1, 1); - gtk_box_pack_start (GTK_BOX (hbox12), alignment94, TRUE, TRUE, 0); - gtk_alignment_set_padding (GTK_ALIGNMENT (alignment94), 0, 4, 0, 0); - - hbox13 = gtk_hbox_new (FALSE, 0); - gtk_container_add (GTK_CONTAINER (alignment94), hbox13); - - label103 = gtk_label_new_with_mnemonic (_("<b>_Skin</b>")); - gtk_box_pack_start (GTK_BOX (hbox13), label103, TRUE, TRUE, 0); - gtk_label_set_use_markup (GTK_LABEL (label103), TRUE); - gtk_misc_set_alignment (GTK_MISC (label103), 0, 0); - - colorspace_button = gtk_button_new (); - gtk_box_pack_start (GTK_BOX (hbox13), colorspace_button, FALSE, FALSE, 0); - - image11 = gtk_image_new_from_stock ("gtk-properties", GTK_ICON_SIZE_BUTTON); - gtk_container_add (GTK_CONTAINER (colorspace_button), image11); - - skin_refresh_button = gtk_button_new (); - gtk_box_pack_start (GTK_BOX (hbox13), skin_refresh_button, FALSE, FALSE, 0); - GTK_WIDGET_UNSET_FLAGS (skin_refresh_button, GTK_CAN_FOCUS); - gtk_button_set_relief (GTK_BUTTON (skin_refresh_button), GTK_RELIEF_HALF); - gtk_button_set_focus_on_click (GTK_BUTTON (skin_refresh_button), FALSE); - - image12 = gtk_image_new_from_stock ("gtk-refresh", GTK_ICON_SIZE_BUTTON); - gtk_container_add (GTK_CONTAINER (skin_refresh_button), image12); - - alignment95 = gtk_alignment_new (0.5, 0.5, 1, 1); - gtk_box_pack_start (GTK_BOX (vbox38), alignment95, TRUE, TRUE, 0); - gtk_widget_set_size_request (alignment95, -1, 172); - gtk_alignment_set_padding (GTK_ALIGNMENT (alignment95), 0, 0, 12, 0); - - skin_view_scrolled_window = gtk_scrolled_window_new (NULL, NULL); - gtk_container_add (GTK_CONTAINER (alignment95), skin_view_scrolled_window); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (skin_view_scrolled_window), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); - gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (skin_view_scrolled_window), GTK_SHADOW_IN); - - skin_view = gtk_tree_view_new (); - gtk_container_add (GTK_CONTAINER (skin_view_scrolled_window), skin_view); - gtk_widget_set_size_request (skin_view, -1, 100); - - aud_create_widgets(GTK_BOX(vbox37), appearance_misc_widgets, G_N_ELEMENTS(appearance_misc_widgets)); - gtk_widget_show_all(appearance_page_vbox); - -#if 0 - g_signal_connect(G_OBJECT(colorspace_button), "clicked", - G_CALLBACK(on_colorize_button_clicked), - NULL); - - g_signal_connect(skin_view, "drag-data-received", - G_CALLBACK(on_skin_view_drag_data_received), - NULL); - aud_drag_dest_set(skin_view); - - g_signal_connect(mainwin, "drag-data-received", - G_CALLBACK(mainwin_drag_data_received), - skin_view); - - g_signal_connect(skin_refresh_button, "clicked", - G_CALLBACK(on_skin_refresh_button_clicked), - NULL); - - g_signal_connect_swapped(G_OBJECT(skin_refresh_button), "clicked", - G_CALLBACK(on_skin_refresh_button_clicked), - prefswin); -#endif - g_signal_connect_after(G_OBJECT(skin_view), "realize", - G_CALLBACK(on_skin_view_realize), - NULL); - - gtk_window_present(GTK_WINDOW(cfg_win)); - - return; -} - void skins_about(void) { static GtkWidget* about_window = NULL;
--- a/src/skins/plugin.h Fri Jun 06 13:41:12 2008 +0300 +++ b/src/skins/plugin.h Fri Jun 06 12:52:49 2008 +0200 @@ -29,6 +29,7 @@ #include "ui_playlist.h" #include "ui_skin.h" +#define PACKAGE "audacious-plugins" #define PACKAGE_NAME "audacious-plugins" enum { @@ -41,7 +42,6 @@ void skins_init(void); void skins_cleanup(void); -void skins_configure(void); void skins_about(void); #endif
--- a/src/skins/skins_cfg.c Fri Jun 06 13:41:12 2008 +0300 +++ b/src/skins/skins_cfg.c Fri Jun 06 12:52:49 2008 +0200 @@ -24,12 +24,31 @@ #include "ui_vis.h" #include "ui_main.h" #include "ui_playlist.h" +#include "ui_skinned_window.h" +#include "ui_skinned_textbox.h" +#include "ui_skinned_playlist.h" +#include "ui_skinselector.h" +#include "plugin.h" +#include "dnd.h" +#include "util.h" #include <glib.h> #include <stdlib.h> -#include <audacious/plugin.h> +#include <audacious/i18n.h> +#include <libintl.h> skins_cfg_t config; + +static GtkWidget *cfg_win = NULL; +GtkWidget *skin_view; +GtkWidget *skin_refresh_button; +static GtkWidget *colorize_settings = NULL; +/* colorize settings scales */ +GtkWidget *green_scale; +GtkWidget *red_scale; +GtkWidget *blue_scale; + + skins_cfg_t skins_default_config = { .scaled = FALSE, .autoscroll = TRUE, @@ -263,3 +282,381 @@ aud_cfg_db_close(cfgfile); } + + +static void +playlist_show_pl_separator_numbers_cb() +{ + playlistwin_update_list(aud_playlist_get_active()); +} + +static void +mainwin_font_set_cb() +{ + ui_skinned_textbox_set_xfont(mainwin_info, !config.mainwin_use_bitmapfont, config.mainwin_font); +} + +static void +playlist_font_set_cb() +{ + AUDDBG("Attempt to set font \"%s\"\n", config.playlist_font); + ui_skinned_playlist_set_font(config.playlist_font); + playlistwin_set_sinfo_font(config.playlist_font); /* propagate font setting to playlistwin_sinfo */ + playlistwin_update_list(aud_playlist_get_active()); +} + +static void +bitmap_fonts_cb() +{ + ui_skinned_textbox_set_xfont(mainwin_info, !config.mainwin_use_bitmapfont, config.mainwin_font); + playlistwin_set_sinfo_font(config.playlist_font); + + if (config.playlist_shaded) { + playlistwin_update_list(aud_playlist_get_active()); + ui_skinned_window_draw_all(playlistwin); + } +} + +static void +show_wm_decorations_cb() +{ + gtk_window_set_decorated(GTK_WINDOW(mainwin), config.show_wm_decorations); + gtk_window_set_decorated(GTK_WINDOW(playlistwin), config.show_wm_decorations); + gtk_window_set_decorated(GTK_WINDOW(equalizerwin), config.show_wm_decorations); +} + +static PreferencesWidget appearance_misc_widgets[] = { + {WIDGET_LABEL, N_("<b>_Fonts</b>"), NULL, NULL, NULL, FALSE}, + {WIDGET_FONT_BTN, N_("_Player:"), &config.mainwin_font, G_CALLBACK(mainwin_font_set_cb), N_("Select main player window font:"), FALSE}, + {WIDGET_FONT_BTN, N_("_Playlist:"), &config.playlist_font, G_CALLBACK(playlist_font_set_cb), N_("Select playlist font:"), FALSE}, + {WIDGET_CHK_BTN, N_("Use Bitmap fonts if available"), &config.mainwin_use_bitmapfont, G_CALLBACK(bitmap_fonts_cb), N_("Use bitmap fonts if they are available. Bitmap fonts do not support Unicode strings."), FALSE}, + {WIDGET_LABEL, N_("<b>_Miscellaneous</b>"), NULL, NULL, NULL, FALSE}, + {WIDGET_CHK_BTN, N_("Show track numbers in playlist"), &config.show_numbers_in_pl, + G_CALLBACK(playlist_show_pl_separator_numbers_cb), NULL, FALSE}, + {WIDGET_CHK_BTN, N_("Show separators in playlist"), &config.show_separator_in_pl, + G_CALLBACK(playlist_show_pl_separator_numbers_cb), NULL, FALSE}, + {WIDGET_CHK_BTN, N_("Show window manager decoration"), &config.show_wm_decorations, G_CALLBACK(show_wm_decorations_cb), + N_("This enables the window manager to show decorations for windows."), FALSE}, + {WIDGET_CHK_BTN, N_("Use two-way text scroller"), &config.twoway_scroll, NULL, + 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}, + {WIDGET_CHK_BTN, N_("Disable inline gtk theme"), &config.disable_inline_gtk, NULL, NULL, FALSE}, + {WIDGET_CHK_BTN, N_("Allow loading incomplete skins"), &config.allow_broken_skins, NULL, + N_("If selected, audacious won't refuse loading broken skins. Use only if your favourite skin doesn't work"), FALSE}, +}; + +static gboolean +on_skin_view_realize(GtkTreeView * treeview, + gpointer data) +{ + skin_view_realize(treeview); + skin_view_update(GTK_TREE_VIEW(skin_view), GTK_WIDGET(skin_refresh_button)); + + return TRUE; +} + +static void +reload_skin() +{ + /* reload the skin to apply the change */ + skin_reload_forced(); + ui_skinned_window_draw_all(mainwin); + ui_skinned_window_draw_all(equalizerwin); + ui_skinned_window_draw_all(playlistwin); +} + +static void +on_red_scale_value_changed(GtkHScale *scale, gpointer data) +{ + config.colorize_r = gtk_range_get_value(GTK_RANGE(scale)); + reload_skin(); +} + +static void +on_green_scale_value_changed(GtkHScale *scale, gpointer data) +{ + config.colorize_g = gtk_range_get_value(GTK_RANGE(scale)); + reload_skin(); +} + +static void +on_blue_scale_value_changed(GtkHScale *scale, gpointer data) +{ + config.colorize_b = gtk_range_get_value(GTK_RANGE(scale)); + reload_skin(); +} + +static void +on_colorize_close_clicked(GtkButton *button, gpointer data) +{ + gtk_widget_destroy(colorize_settings); + colorize_settings = NULL; +} + +void +create_colorize_settings(void) +{ + GtkWidget *vbox; + GtkWidget *label; + GtkWidget *table; + GtkWidget *hbuttonbox; + GtkWidget *colorize_close; + + GtkWidget *green_label; + GtkWidget *red_label; + GtkWidget *blue_label; + + colorize_settings = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_container_set_border_width(GTK_CONTAINER(colorize_settings), 12); + gtk_window_set_title(GTK_WINDOW(colorize_settings), _("Color Adjustment")); + gtk_window_set_type_hint(GTK_WINDOW(colorize_settings), GDK_WINDOW_TYPE_HINT_DIALOG); + gtk_window_set_transient_for(GTK_WINDOW(colorize_settings), GTK_WINDOW(cfg_win)); + + vbox = gtk_vbox_new(FALSE, 12); + gtk_container_add(GTK_CONTAINER(colorize_settings), vbox); + + 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.")); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); + gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + + table = gtk_table_new(3, 2, FALSE); + gtk_box_pack_start(GTK_BOX(vbox), table, TRUE, TRUE, 0); + gtk_table_set_row_spacings(GTK_TABLE(table), 6); + gtk_table_set_col_spacings(GTK_TABLE(table), 12); + + blue_label = gtk_label_new(_("Blue")); + gtk_table_attach(GTK_TABLE(table), blue_label, 0, 1, 2, 3, + (GtkAttachOptions) (0), + (GtkAttachOptions) (0), 0, 0); + gtk_label_set_justify(GTK_LABEL(blue_label), GTK_JUSTIFY_RIGHT); + gtk_misc_set_alignment(GTK_MISC(blue_label), 1, 0.5); + + green_label = gtk_label_new(_("Green")); + gtk_table_attach(GTK_TABLE(table), green_label, 0, 1, 1, 2, + (GtkAttachOptions) (0), + (GtkAttachOptions) (0), 0, 0); + gtk_label_set_justify(GTK_LABEL(green_label), GTK_JUSTIFY_RIGHT); + gtk_misc_set_alignment(GTK_MISC(green_label), 1, 0.5); + + red_label = gtk_label_new(_("Red")); + gtk_table_attach(GTK_TABLE(table), red_label, 0, 1, 0, 1, + (GtkAttachOptions) (0), + (GtkAttachOptions) (0), 0, 0); + gtk_label_set_justify(GTK_LABEL(red_label), GTK_JUSTIFY_RIGHT); + gtk_misc_set_alignment(GTK_MISC(red_label), 1, 0.5); + + red_scale = gtk_hscale_new(GTK_ADJUSTMENT(gtk_adjustment_new(0, 0, 255, 0, 0, 0))); + gtk_table_attach(GTK_TABLE(table), red_scale, 1, 2, 0, 1, + (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), + (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); + gtk_scale_set_draw_value(GTK_SCALE(red_scale), FALSE); + gtk_scale_set_digits(GTK_SCALE(red_scale), 3); + + green_scale = gtk_hscale_new(GTK_ADJUSTMENT(gtk_adjustment_new(0, 0, 255, 0, 0, 0))); + gtk_table_attach(GTK_TABLE(table), green_scale, 1, 2, 1, 2, + (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), + (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); + gtk_scale_set_draw_value(GTK_SCALE(green_scale), FALSE); + gtk_scale_set_digits(GTK_SCALE(green_scale), 3); + + blue_scale = gtk_hscale_new(GTK_ADJUSTMENT(gtk_adjustment_new(0, 0, 255, 0, 0, 0))); + gtk_table_attach(GTK_TABLE(table), blue_scale, 1, 2, 2, 3, + (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), + (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), 0, 0); + gtk_scale_set_draw_value(GTK_SCALE(blue_scale), FALSE); + gtk_scale_set_digits(GTK_SCALE(blue_scale), 3); + + hbuttonbox = gtk_hbutton_box_new(); + gtk_box_pack_start(GTK_BOX(vbox), hbuttonbox, FALSE, FALSE, 0); + gtk_button_box_set_layout(GTK_BUTTON_BOX(hbuttonbox), GTK_BUTTONBOX_END); + gtk_box_set_spacing(GTK_BOX(hbuttonbox), 6); + + colorize_close = gtk_button_new_from_stock("gtk-close"); + gtk_container_add(GTK_CONTAINER(hbuttonbox), colorize_close); + GTK_WIDGET_SET_FLAGS(colorize_close, GTK_CAN_DEFAULT); + + g_signal_connect((gpointer) red_scale, "value_changed", + G_CALLBACK(on_red_scale_value_changed), + NULL); + g_signal_connect((gpointer) green_scale, "value_changed", + G_CALLBACK(on_green_scale_value_changed), + NULL); + g_signal_connect((gpointer) blue_scale, "value_changed", + G_CALLBACK(on_blue_scale_value_changed), + NULL); + g_signal_connect((gpointer) colorize_close, "clicked", + G_CALLBACK(on_colorize_close_clicked), + NULL); + + gtk_range_set_value(GTK_RANGE(red_scale), config.colorize_r); + gtk_range_set_value(GTK_RANGE(green_scale), config.colorize_g); + gtk_range_set_value(GTK_RANGE(blue_scale), config.colorize_b); + + gtk_widget_grab_default(colorize_close); + gtk_widget_show_all(colorize_settings); +} + +static void +on_colorize_button_clicked(GtkButton *button, gpointer data) +{ + if (colorize_settings) + gtk_window_present(GTK_WINDOW(colorize_settings)); + else + create_colorize_settings(); +} + +void +on_skin_view_drag_data_received(GtkWidget * widget, + GdkDragContext * context, + gint x, gint y, + GtkSelectionData * selection_data, + guint info, guint time, + gpointer user_data) +{ + mcs_handle_t *db; + gchar *path; + + if (!selection_data->data) { + g_warning("DND data string is NULL"); + return; + } + + path = (gchar *) selection_data->data; + + /* FIXME: use a real URL validator/parser */ + + if (aud_str_has_prefix_nocase(path, "file:///")) { + path[strlen(path) - 2] = 0; /* Why the hell a CR&LF? */ + path += 7; + } + else if (aud_str_has_prefix_nocase(path, "file:")) { + path += 5; + } + + if (file_is_archive(path)) { + if (!aud_active_skin_load(path)) + return; + skin_install_skin(path); + skin_view_update(GTK_TREE_VIEW(widget), + GTK_WIDGET(skin_refresh_button)); + + /* Change skin name in the config file */ + db = aud_cfg_db_open(); + aud_cfg_db_set_string(db, "skins", "skin", path); + aud_cfg_db_close(db); + } +} + +void skins_configure(void) { + GtkWidget *appearance_page_vbox; + GtkWidget *vbox37; + GtkWidget *vbox38; + GtkWidget *hbox12; + GtkWidget *alignment94; + GtkWidget *hbox13; + GtkWidget *label103; + GtkWidget *colorspace_button; + GtkWidget *image11; + GtkWidget *image12; + GtkWidget *alignment95; + GtkWidget *skin_view_scrolled_window; + + if (cfg_win != NULL) { + gtk_window_present(GTK_WINDOW(cfg_win)); + return; + } + + cfg_win = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_type_hint(GTK_WINDOW(cfg_win), GDK_WINDOW_TYPE_HINT_DIALOG); + gtk_window_set_title(GTK_WINDOW(cfg_win), _("Audacious Skinned GUI Configuration")); + gtk_container_set_border_width(GTK_CONTAINER(cfg_win), 10); + g_signal_connect(G_OBJECT(cfg_win), "destroy" , + G_CALLBACK(gtk_widget_destroyed), &cfg_win); + gtk_widget_set_size_request(cfg_win, 500, -1); + + appearance_page_vbox = gtk_vbox_new (FALSE, 0); + gtk_container_add(GTK_CONTAINER(cfg_win), appearance_page_vbox); + + vbox37 = gtk_vbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (appearance_page_vbox), vbox37, TRUE, TRUE, 0); + + vbox38 = gtk_vbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox37), vbox38, FALSE, TRUE, 0); + + hbox12 = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start (GTK_BOX (vbox38), hbox12, TRUE, TRUE, 0); + + alignment94 = gtk_alignment_new (0.5, 0.5, 1, 1); + gtk_box_pack_start (GTK_BOX (hbox12), alignment94, TRUE, TRUE, 0); + gtk_alignment_set_padding (GTK_ALIGNMENT (alignment94), 0, 4, 0, 0); + + hbox13 = gtk_hbox_new (FALSE, 0); + gtk_container_add (GTK_CONTAINER (alignment94), hbox13); + + label103 = gtk_label_new_with_mnemonic (_("<b>_Skin</b>")); + gtk_box_pack_start (GTK_BOX (hbox13), label103, TRUE, TRUE, 0); + gtk_label_set_use_markup (GTK_LABEL (label103), TRUE); + gtk_misc_set_alignment (GTK_MISC (label103), 0, 0); + + colorspace_button = gtk_button_new (); + gtk_box_pack_start (GTK_BOX (hbox13), colorspace_button, FALSE, FALSE, 0); + + image11 = gtk_image_new_from_stock ("gtk-properties", GTK_ICON_SIZE_BUTTON); + gtk_container_add (GTK_CONTAINER (colorspace_button), image11); + + skin_refresh_button = gtk_button_new (); + gtk_box_pack_start (GTK_BOX (hbox13), skin_refresh_button, FALSE, FALSE, 0); + GTK_WIDGET_UNSET_FLAGS (skin_refresh_button, GTK_CAN_FOCUS); + gtk_button_set_relief (GTK_BUTTON (skin_refresh_button), GTK_RELIEF_HALF); + gtk_button_set_focus_on_click (GTK_BUTTON (skin_refresh_button), FALSE); + + image12 = gtk_image_new_from_stock ("gtk-refresh", GTK_ICON_SIZE_BUTTON); + gtk_container_add (GTK_CONTAINER (skin_refresh_button), image12); + + alignment95 = gtk_alignment_new (0.5, 0.5, 1, 1); + gtk_box_pack_start (GTK_BOX (vbox38), alignment95, TRUE, TRUE, 0); + gtk_widget_set_size_request (alignment95, -1, 172); + gtk_alignment_set_padding (GTK_ALIGNMENT (alignment95), 0, 0, 12, 0); + + skin_view_scrolled_window = gtk_scrolled_window_new (NULL, NULL); + gtk_container_add (GTK_CONTAINER (alignment95), skin_view_scrolled_window); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (skin_view_scrolled_window), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); + gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (skin_view_scrolled_window), GTK_SHADOW_IN); + + skin_view = gtk_tree_view_new (); + gtk_container_add (GTK_CONTAINER (skin_view_scrolled_window), skin_view); + gtk_widget_set_size_request (skin_view, -1, 100); + + aud_create_widgets(GTK_BOX(vbox37), appearance_misc_widgets, G_N_ELEMENTS(appearance_misc_widgets)); + gtk_widget_show_all(appearance_page_vbox); + + + g_signal_connect(G_OBJECT(colorspace_button), "clicked", + G_CALLBACK(on_colorize_button_clicked), + NULL); + + g_signal_connect(skin_view, "drag-data-received", + G_CALLBACK(on_skin_view_drag_data_received), + NULL); + aud_drag_dest_set(skin_view); + + g_signal_connect(mainwin, "drag-data-received", + G_CALLBACK(mainwin_drag_data_received), + skin_view); +#if 0 + g_signal_connect(skin_refresh_button, "clicked", + G_CALLBACK(on_skin_refresh_button_clicked), + NULL); + + g_signal_connect_swapped(G_OBJECT(skin_refresh_button), "clicked", + G_CALLBACK(on_skin_refresh_button_clicked), + prefswin); +#endif + g_signal_connect_after(G_OBJECT(skin_view), "realize", + G_CALLBACK(on_skin_view_realize), + NULL); + + gtk_window_present(GTK_WINDOW(cfg_win)); + + return; +}
--- a/src/skins/skins_cfg.h Fri Jun 06 13:41:12 2008 +0300 +++ b/src/skins/skins_cfg.h Fri Jun 06 12:52:49 2008 +0200 @@ -86,4 +86,6 @@ void skins_cfg_load(); void skins_cfg_save(); +void skins_configure(void); + #endif
--- a/src/skins/ui_main.c Fri Jun 06 13:41:12 2008 +0300 +++ b/src/skins/ui_main.c Fri Jun 06 12:52:49 2008 +0200 @@ -1062,7 +1062,7 @@ g_return_if_fail(selection_data != NULL); g_return_if_fail(selection_data->data != NULL); -#if 0 + if (aud_str_has_prefix_nocase((gchar *) selection_data->data, "fonts:///")) { gchar *path = (gchar *) selection_data->data; @@ -1088,7 +1088,7 @@ return; } } -#endif + aud_playlist_clear(playlist); aud_playlist_add_url(playlist, (gchar *) selection_data->data); audacious_drct_initiate();