summaryrefslogtreecommitdiff
path: root/plugins/gtkui/gtkui.c
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-05-17 21:25:22 +0200
committerGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-05-17 21:25:22 +0200
commitcafa41031499e9dff3a0c4f9f30d822c981d0ce2 (patch)
tree58f37717c06a9d98e3b5c01d3b6240954598781f /plugins/gtkui/gtkui.c
parent229606b402f71bfe6c0ccd68b355f9f4172ba3d6 (diff)
parentd5eeb44a9d05a1b8072fc090fe07d7a13a8bfb06 (diff)
Merge branch 'master' into i18n
Conflicts: plugins/gtkui/callbacks.c plugins/gtkui/prefwin.c
Diffstat (limited to 'plugins/gtkui/gtkui.c')
-rw-r--r--plugins/gtkui/gtkui.c84
1 files changed, 81 insertions, 3 deletions
diff --git a/plugins/gtkui/gtkui.c b/plugins/gtkui/gtkui.c
index abdf1237..3857a7bd 100644
--- a/plugins/gtkui/gtkui.c
+++ b/plugins/gtkui/gtkui.c
@@ -438,9 +438,14 @@ playlistchanged_cb (gpointer none) {
return FALSE;
}
+void
+gtkui_playlist_changed (void) {
+ g_idle_add (playlistchanged_cb, NULL);
+}
+
static int
gtkui_on_playlistchanged (DB_event_t *ev, uintptr_t data) {
- g_idle_add (playlistchanged_cb, NULL);
+ gtkui_playlist_changed ();
return 0;
}
@@ -521,19 +526,92 @@ gtkui_on_outputchanged (DB_event_t *ev, uintptr_t nothing) {
return 0;
}
+char last_playlist_save_name[1024] = "";
+
+void
+save_playlist_as (void) {
+ GtkWidget *dlg = gtk_file_chooser_dialog_new ("Save Playlist As", GTK_WINDOW (mainwin), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_OK, NULL);
+
+ gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dlg), TRUE);
+ gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dlg), "untitled.dbpl");
+ // restore folder
+ gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (dlg), deadbeef->conf_get_str ("filechooser.playlist.lastdir", ""));
+
+ GtkFileFilter* flt;
+ flt = gtk_file_filter_new ();
+ gtk_file_filter_set_name (flt, "DeaDBeeF playlist files (*.dbpl)");
+ gtk_file_filter_add_pattern (flt, "*.dbpl");
+ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dlg), flt);
+
+ int res = gtk_dialog_run (GTK_DIALOG (dlg));
+ // store folder
+ gchar *folder = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER (dlg));
+ if (folder) {
+ deadbeef->conf_set_str ("filechooser.playlist.lastdir", folder);
+ g_free (folder);
+ }
+ if (res == GTK_RESPONSE_OK)
+ {
+ gchar *fname = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dlg));
+ gtk_widget_destroy (dlg);
+
+ if (fname) {
+ int res = deadbeef->pl_save (fname);
+ if (res >= 0 && strlen (fname) < 1024) {
+ strcpy (last_playlist_save_name, fname);
+ }
+ g_free (fname);
+ }
+ }
+ else {
+ gtk_widget_destroy (dlg);
+ }
+}
+
+void
+on_playlist_save_activate (GtkMenuItem *menuitem,
+ gpointer user_data)
+{
+ if (!last_playlist_save_name[0]) {
+ save_playlist_as ();
+ }
+ else {
+ /*int res = */deadbeef->pl_save (last_playlist_save_name);
+ }
+}
+
+
+void
+on_playlist_save_as_activate (GtkMenuItem *menuitem,
+ gpointer user_data)
+{
+ save_playlist_as ();
+}
+
+
void
on_playlist_load_activate (GtkMenuItem *menuitem,
gpointer user_data)
{
GtkWidget *dlg = gtk_file_chooser_dialog_new (_("Load Playlist"), GTK_WINDOW (mainwin), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL);
+ // restore folder
+ gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (dlg), deadbeef->conf_get_str ("filechooser.playlist.lastdir", ""));
+
GtkFileFilter* flt;
flt = gtk_file_filter_new ();
gtk_file_filter_set_name (flt, _("DeaDBeeF playlist files (*.dbpl)"));
gtk_file_filter_add_pattern (flt, "*.dbpl");
gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dlg), flt);
-
- if (gtk_dialog_run (GTK_DIALOG (dlg)) == GTK_RESPONSE_OK)
+
+ int res = gtk_dialog_run (GTK_DIALOG (dlg));
+ // store folder
+ gchar *folder = gtk_file_chooser_get_current_folder_uri (GTK_FILE_CHOOSER (dlg));
+ if (folder) {
+ deadbeef->conf_set_str ("filechooser.playlist.lastdir", folder);
+ g_free (folder);
+ }
+ if (res == GTK_RESPONSE_OK)
{
gchar *fname = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dlg));
gtk_widget_destroy (dlg);