summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--callbacks.c19
-rw-r--r--gtkplaylist.c35
-rw-r--r--gtkplaylist.h3
-rw-r--r--main.c3
-rw-r--r--messages.h1
5 files changed, 44 insertions, 17 deletions
diff --git a/callbacks.c b/callbacks.c
index 17415077..6befe0e1 100644
--- a/callbacks.c
+++ b/callbacks.c
@@ -22,13 +22,6 @@
extern GtkWidget *mainwin;
-static void
-addfile_func (gpointer data, gpointer userdata) {
- ps_add_file (data, NULL, NULL);
- g_free (data);
-}
-
-
void
on_volume_value_changed (GtkRange *range,
gpointer user_data)
@@ -163,15 +156,11 @@ on_add_files_activate (GtkMenuItem *menuitem,
if (gtk_dialog_run (GTK_DIALOG (dlg)) == GTK_RESPONSE_OK)
{
GSList *lst = gtk_file_chooser_get_filenames (GTK_FILE_CHOOSER (dlg));
- g_slist_foreach(lst, addfile_func, NULL);
- g_slist_free (lst);
+ gtk_widget_destroy (dlg);
+ if (lst) {
+ messagepump_push (M_ADDFILES, (uintptr_t)lst, 0, 0);
+ }
}
- gtk_widget_destroy (dlg);
- ps_shuffle ();
- gtkps_setup_scrollbar ();
- GtkWidget *widget = lookup_widget (mainwin, "playlist");
- draw_playlist (widget, 0, 0, widget->allocation.width, widget->allocation.height);
- gtkps_expose (widget, 0, 0, widget->allocation.width, widget->allocation.height);
}
void
diff --git a/gtkplaylist.c b/gtkplaylist.c
index c81f1cf3..6fdf3288 100644
--- a/gtkplaylist.c
+++ b/gtkplaylist.c
@@ -1333,7 +1333,7 @@ on_header_button_release_event (GtkWidget *widget,
}
int
-gtkps_add_file_cb (playItem_t *it, void *data) {
+gtkps_add_file_info_cb (playItem_t *it, void *data) {
GtkEntry *e = (GtkEntry *)data;
// printf ("%s\n", it->fname);
GDK_THREADS_ENTER();
@@ -1355,7 +1355,7 @@ gtkps_add_dir (char *folder) {
gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (d))), e);
gtk_widget_show_all (d);
GDK_THREADS_LEAVE();
- ps_add_dir (folder, gtkps_add_file_cb, e);
+ ps_add_dir (folder, gtkps_add_file_info_cb, e);
g_free (folder);
ps_shuffle ();
GDK_THREADS_ENTER();
@@ -1367,3 +1367,34 @@ gtkps_add_dir (char *folder) {
gtkps_expose (widget, 0, 0, widget->allocation.width, widget->allocation.height);
GDK_THREADS_LEAVE();
}
+
+static void
+gtkps_addfile_cb (gpointer data, gpointer userdata) {
+ ps_add_file (data, gtkps_add_file_info_cb, userdata);
+ g_free (data);
+}
+
+void
+gtkps_add_files (GSList *lst) {
+ // create window
+ GDK_THREADS_ENTER();
+ gtk_widget_set_sensitive (mainwin, FALSE);
+ GtkWidget *d = gtk_dialog_new ();
+ GtkWidget *e = gtk_entry_new ();
+ gtk_widget_set_size_request (e, 500, -1);
+ gtk_widget_set_sensitive (GTK_WIDGET (e), FALSE);
+ gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (d))), e);
+ gtk_widget_show_all (d);
+ GDK_THREADS_LEAVE();
+ g_slist_foreach(lst, gtkps_addfile_cb, e);
+ g_slist_free (lst);
+ ps_shuffle ();
+ GDK_THREADS_ENTER();
+ gtk_widget_destroy (d);
+ gtk_widget_set_sensitive (mainwin, TRUE);
+ gtkps_setup_scrollbar ();
+ GtkWidget *widget = lookup_widget (mainwin, "playlist");
+ draw_playlist (widget, 0, 0, widget->allocation.width, widget->allocation.height);
+ gtkps_expose (widget, 0, 0, widget->allocation.width, widget->allocation.height);
+ GDK_THREADS_LEAVE();
+}
diff --git a/gtkplaylist.h b/gtkplaylist.h
index 498887a8..df4a8218 100644
--- a/gtkplaylist.h
+++ b/gtkplaylist.h
@@ -91,4 +91,7 @@ gtkps_handle_fm_drag_drop (int drop_y, void *ptr, int length);
void
gtkps_add_dir (char *dir);
+void
+gtkps_add_files (GSList *lst);
+
#endif
diff --git a/main.c b/main.c
index a8abc94a..a0a465da 100644
--- a/main.c
+++ b/main.c
@@ -80,6 +80,9 @@ psdl_thread (uintptr_t ctx) {
// long time processing
gtkps_add_dir ((char *)ctx);
break;
+ case M_ADDFILES:
+ gtkps_add_files ((GSList *)ctx);
+ break;
}
}
usleep(10000);
diff --git a/messages.h b/messages.h
index 84b358a0..19e87fca 100644
--- a/messages.h
+++ b/messages.h
@@ -13,6 +13,7 @@ enum {
M_SONGSEEK,
M_SONGCHANGED, // p1=from, p2=to
M_ADDDIR, // ctx = pointer to string, which must be freed by f_free
+ M_ADDFILES, // ctx = GSList pointer, must be freed with g_slist_free
};
#endif // __MESSAGES_H