summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'plugins')
-rw-r--r--plugins/gtkui/ddblistview.c3
-rw-r--r--plugins/gtkui/fileman.c56
-rw-r--r--plugins/gtkui/gtkui.c72
-rw-r--r--plugins/gtkui/gtkui.h15
4 files changed, 103 insertions, 43 deletions
diff --git a/plugins/gtkui/ddblistview.c b/plugins/gtkui/ddblistview.c
index 5508adc2..93176d18 100644
--- a/plugins/gtkui/ddblistview.c
+++ b/plugins/gtkui/ddblistview.c
@@ -2805,6 +2805,7 @@ ddb_listview_free_groups (DdbListview *listview) {
void
ddb_listview_build_groups (DdbListview *listview) {
+ deadbeef->pl_lock ();
ddb_listview_free_groups (listview);
listview->fullheight = 0;
@@ -2837,6 +2838,7 @@ ddb_listview_build_groups (DdbListview *listview) {
// }
listview->fullheight = grp->height;
listview->fullheight += listview->grouptitle_height;
+ deadbeef->pl_unlock ();
return;
}
if (!grp || strcmp (str, curr)) {
@@ -2871,6 +2873,7 @@ ddb_listview_build_groups (DdbListview *listview) {
}
listview->fullheight += grp->height;
}
+ deadbeef->pl_unlock ();
}
void
ddb_listview_set_vscroll (DdbListview *listview, gboolean scroll) {
diff --git a/plugins/gtkui/fileman.c b/plugins/gtkui/fileman.c
index 4fe56298..3f58bb09 100644
--- a/plugins/gtkui/fileman.c
+++ b/plugins/gtkui/fileman.c
@@ -7,70 +7,40 @@
#include "progress.h"
#include "support.h"
-static gboolean
-progress_show_idle (gpointer data) {
- progress_show ();
- return FALSE;
-}
-
-static gboolean
-set_progress_text_idle (gpointer data) {
- const char *text = (const char *)data;
- progress_settext (text);
- return FALSE;
-}
-
-int
-gtkpl_add_file_info_cb (DB_playItem_t *it, void *data) {
- if (progress_is_aborted ()) {
- return -1;
- }
- g_idle_add (set_progress_text_idle, it->fname);
- return 0;
-}
-
-static gboolean
-progress_hide_idle (gpointer data) {
- progress_hide ();
- deadbeef->sendmessage (M_PLAYLISTREFRESH, 0, 0, 0);
- //playlist_refresh ();
- return FALSE;
-}
-
void
gtkpl_add_dir (DdbListview *ps, char *folder) {
- g_idle_add (progress_show_idle, NULL);
- deadbeef->pl_add_dir (folder, gtkpl_add_file_info_cb, NULL);
+ g_idle_add (gtkui_progress_show_idle, NULL);
+ gtkui_original_pl_add_dir (folder, gtkui_add_file_info_cb, NULL);
g_free (folder);
- g_idle_add (progress_hide_idle, NULL);
+ g_idle_add (gtkui_progress_hide_idle, NULL);
}
static void
gtkpl_adddir_cb (gpointer data, gpointer userdata) {
- deadbeef->pl_add_dir (data, gtkpl_add_file_info_cb, userdata);
+ gtkui_original_pl_add_dir (data, gtkui_add_file_info_cb, userdata);
g_free (data);
}
void
gtkpl_add_dirs (GSList *lst) {
- g_idle_add (progress_show_idle, NULL);
+ g_idle_add (gtkui_progress_show_idle, NULL);
g_slist_foreach(lst, gtkpl_adddir_cb, NULL);
g_slist_free (lst);
- g_idle_add (progress_hide_idle, NULL);
+ g_idle_add (gtkui_progress_hide_idle, NULL);
}
static void
gtkpl_addfile_cb (gpointer data, gpointer userdata) {
- deadbeef->pl_add_file (data, gtkpl_add_file_info_cb, userdata);
+ gtkui_original_pl_add_file (data, gtkui_add_file_info_cb, userdata);
g_free (data);
}
void
gtkpl_add_files (GSList *lst) {
- g_idle_add (progress_show_idle, NULL);
+ g_idle_add (gtkui_progress_show_idle, NULL);
g_slist_foreach(lst, gtkpl_addfile_cb, NULL);
g_slist_free (lst);
- g_idle_add (progress_hide_idle, NULL);
+ g_idle_add (gtkui_progress_hide_idle, NULL);
}
static void
@@ -170,7 +140,7 @@ set_dnd_cursor_idle (gpointer data) {
void
gtkpl_add_fm_dropped_files (DB_playItem_t *drop_before, char *ptr, int length) {
DdbListview *pl = DDB_LISTVIEW (lookup_widget (mainwin, "playlist"));
- g_idle_add (progress_show_idle, NULL);
+ g_idle_add (gtkui_progress_show_idle, NULL);
DdbListviewIter first = NULL;
DdbListviewIter after = NULL;
@@ -192,9 +162,9 @@ gtkpl_add_fm_dropped_files (DB_playItem_t *drop_before, char *ptr, int length) {
//strncpy (fname, p, pe - p);
//fname[pe - p] = 0;
int abort = 0;
- DdbListviewIter inserted = deadbeef->pl_insert_dir (after, fname, &abort, gtkpl_add_file_info_cb, NULL);
+ DdbListviewIter inserted = deadbeef->pl_insert_dir (after, fname, &abort, gtkui_add_file_info_cb, NULL);
if (!inserted && !abort) {
- inserted = deadbeef->pl_insert_file (after, fname, &abort, gtkpl_add_file_info_cb, NULL);
+ inserted = deadbeef->pl_insert_file (after, fname, &abort, gtkui_add_file_info_cb, NULL);
}
if (inserted) {
if (!first) {
@@ -218,7 +188,7 @@ gtkpl_add_fm_dropped_files (DB_playItem_t *drop_before, char *ptr, int length) {
}
free (ptr);
- g_idle_add (progress_hide_idle, NULL);
+ g_idle_add (gtkui_progress_hide_idle, NULL);
g_idle_add (set_dnd_cursor_idle, first);
}
diff --git a/plugins/gtkui/gtkui.c b/plugins/gtkui/gtkui.c
index 5b41dcf0..31cc5f85 100644
--- a/plugins/gtkui/gtkui.c
+++ b/plugins/gtkui/gtkui.c
@@ -993,6 +993,65 @@ gtkui_thread (void *ctx) {
gdk_threads_leave ();
}
+gboolean
+gtkui_progress_show_idle (gpointer data) {
+ progress_show ();
+ return FALSE;
+}
+
+gboolean
+gtkui_set_progress_text_idle (gpointer data) {
+ const char *text = (const char *)data;
+ progress_settext (text);
+ return FALSE;
+}
+
+gboolean
+gtkui_progress_hide_idle (gpointer data) {
+ progress_hide ();
+ deadbeef->sendmessage (M_PLAYLISTREFRESH, 0, 0, 0);
+ //playlist_refresh ();
+ return FALSE;
+}
+
+int
+gtkui_add_file_info_cb (DB_playItem_t *it, void *data) {
+ if (progress_is_aborted ()) {
+ return -1;
+ }
+ g_idle_add (gtkui_set_progress_text_idle, it->fname);
+ return 0;
+}
+
+int (*gtkui_original_pl_add_dir) (const char *dirname, int (*cb)(DB_playItem_t *it, void *data), void *user_data);
+int (*gtkui_original_pl_add_file) (const char *fname, int (*cb)(DB_playItem_t *it, void *data), void *user_data);
+void (*gtkui_original_pl_add_files_begin) (void);
+void (*gtkui_original_pl_add_files_end) (void);
+
+int
+gtkui_pl_add_dir (const char *dirname, int (*cb)(DB_playItem_t *it, void *data), void *user_data) {
+ int res = gtkui_original_pl_add_dir (dirname, gtkui_add_file_info_cb, NULL);
+ return res;
+}
+
+int
+gtkui_pl_add_file (const char *filename, int (*cb)(DB_playItem_t *it, void *data), void *user_data) {
+ int res = gtkui_original_pl_add_file (filename, gtkui_add_file_info_cb, NULL);
+ return res;
+}
+
+void
+gtkui_pl_add_files_begin (void) {
+ g_idle_add (gtkui_progress_show_idle, NULL);
+ gtkui_original_pl_add_files_begin ();
+}
+
+void
+gtkui_pl_add_files_end (void) {
+ g_idle_add (gtkui_progress_hide_idle, NULL);
+ gtkui_original_pl_add_files_end ();
+}
+
static int
gtkui_start (void) {
// gtk must be running in separate thread
@@ -1003,6 +1062,19 @@ gtkui_start (void) {
usleep (10000);
}
+ // override default pl_add_dir
+ gtkui_original_pl_add_dir = deadbeef->pl_add_dir;
+ deadbeef->pl_add_dir = gtkui_pl_add_dir;
+
+ gtkui_original_pl_add_file = deadbeef->pl_add_file;
+ deadbeef->pl_add_file = gtkui_pl_add_file;
+
+ gtkui_original_pl_add_files_begin = deadbeef->pl_add_files_begin;
+ deadbeef->pl_add_files_begin = gtkui_pl_add_files_begin;
+
+ gtkui_original_pl_add_files_end = deadbeef->pl_add_files_end;
+ deadbeef->pl_add_files_end = gtkui_pl_add_files_end;
+
return 0;
}
diff --git a/plugins/gtkui/gtkui.h b/plugins/gtkui/gtkui.h
index 178792b8..5ab30376 100644
--- a/plugins/gtkui/gtkui.h
+++ b/plugins/gtkui/gtkui.h
@@ -139,4 +139,19 @@ gtkui_playlist_changed (void);
void
gtkui_set_titlebar (DB_playItem_t *it);
+gboolean
+gtkui_progress_show_idle (gpointer data);
+
+gboolean
+gtkui_progress_hide_idle (gpointer data);
+
+gboolean
+gtkui_set_progress_text_idle (gpointer data);
+
+int
+gtkui_add_file_info_cb (DB_playItem_t *it, void *data);
+
+extern int (*gtkui_original_pl_add_dir) (const char *dirname, int (*cb)(DB_playItem_t *it, void *data), void *user_data);
+extern int (*gtkui_original_pl_add_file) (const char *fname, int (*cb)(DB_playItem_t *it, void *data), void *user_data);
+
#endif