diff options
author | waker <wakeroid@gmail.com> | 2009-08-08 15:16:04 +0200 |
---|---|---|
committer | waker <wakeroid@gmail.com> | 2009-08-08 15:16:04 +0200 |
commit | a206a5054db858478b693c0a6fcfcc91f56dbd93 (patch) | |
tree | 12349ec40b4234712585445bafd230424d3b7ec6 | |
parent | 48348d7bf206dd7b822d28a3fa17cb7a310010ed (diff) |
added progress display on Add Files
-rw-r--r-- | callbacks.c | 19 | ||||
-rw-r--r-- | gtkplaylist.c | 35 | ||||
-rw-r--r-- | gtkplaylist.h | 3 | ||||
-rw-r--r-- | main.c | 3 | ||||
-rw-r--r-- | messages.h | 1 |
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 @@ -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); @@ -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 |