summaryrefslogtreecommitdiff
path: root/plugins/gtkui
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <wakeroid@gmail.com>2009-11-30 22:10:09 +0100
committerGravatar Alexey Yakovenko <wakeroid@gmail.com>2009-11-30 22:10:09 +0100
commit576b8419ed5b8d4e586151d8965d1d5f89624ee1 (patch)
treeee6ee3407ef4ed1b78b2c57cd0ff45b86789a8c3 /plugins/gtkui
parent2181dcac0261f9036f0efec4390d47639fe6aa10 (diff)
ported filemanager dnd into gtkui
Diffstat (limited to 'plugins/gtkui')
-rw-r--r--plugins/gtkui/callbacks.c21
-rw-r--r--plugins/gtkui/fileman.c27
-rw-r--r--plugins/gtkui/gtkplaylist.c20
-rw-r--r--plugins/gtkui/gtkplaylist.h9
-rw-r--r--plugins/gtkui/gtkui.c39
-rw-r--r--plugins/gtkui/gtkui.h3
6 files changed, 48 insertions, 71 deletions
diff --git a/plugins/gtkui/callbacks.c b/plugins/gtkui/callbacks.c
index 5f1cd755..99373594 100644
--- a/plugins/gtkui/callbacks.c
+++ b/plugins/gtkui/callbacks.c
@@ -38,6 +38,9 @@
#include "session.h"
#include "gtkui.h"
+#define SELECTED(it) (deadbeef->pl_is_selected(it))
+#define PL_NEXT(it, iter) (deadbeef->pl_get_next(it, iter))
+
extern GtkWidget *mainwin;
extern gtkplaylist_t main_playlist;
extern gtkplaylist_t search_playlist;
@@ -611,14 +614,22 @@ on_playlist_drag_data_received (GtkWidget *widget,
GTKPL_PROLOGUE;
gchar *ptr=(char*)data->data;
if (target_type == 0) { // uris
- fprintf (stderr, "calling gtkpl_handle_fm_drag_drop\n");
-// if (!strncmp(ptr,"file:///",8)) {
- gtkpl_handle_fm_drag_drop (ps, y, ptr, data->length);
-// }
+ // this happens when dropped from file manager
+ char *mem = malloc (data->length+1);
+ memcpy (mem, ptr, data->length);
+ mem[data->length] = 0;
+ // we don't pass control structure, but there's only one drag-drop view currently
+ gtkui_receive_fm_drop (mem, data->length, y);
}
else if (target_type == 1) {
uint32_t *d= (uint32_t *)ptr;
- gtkpl_handle_drag_drop (ps, y, d, data->length/4);
+ int length = data->length/4;
+ int drop_row = y / rowheight + ps->scrollpos;
+ DB_playItem_t *drop_before = deadbeef->pl_get_for_idx_and_iter (drop_row, ps->iterator);
+ while (drop_before && SELECTED (drop_before)) {
+ drop_before = PL_NEXT(drop_before, ps->iterator);
+ }
+ deadbeef->pl_move_items (ps->iterator, drop_before, d, length);
}
gtk_drag_finish (drag_context, TRUE, FALSE, time);
}
diff --git a/plugins/gtkui/fileman.c b/plugins/gtkui/fileman.c
index 14bfddca..8b08f466 100644
--- a/plugins/gtkui/fileman.c
+++ b/plugins/gtkui/fileman.c
@@ -1,5 +1,6 @@
#include "../../deadbeef.h"
#include <gtk/gtk.h>
+#include <stdlib.h>
#include "gtkui.h"
#include "gtkplaylist.h"
@@ -37,3 +38,29 @@ gtkui_open_files (struct _GSList *lst) {
deadbeef->pl_free ();
deadbeef->thread_start (open_files_worker, lst);
}
+
+struct fmdrop_data {
+ char *mem;
+ int length;
+ int drop_y;
+};
+
+static void
+fmdrop_worker (void *ctx) {
+ struct fmdrop_data *data = (struct fmdrop_data *)ctx;
+ gtkpl_add_fm_dropped_files (&main_playlist, data->mem, data->length, data->drop_y);
+ free (data);
+}
+
+void
+gtkui_receive_fm_drop (char *mem, int length, int drop_y) {
+ struct fmdrop_data *data = malloc (sizeof (struct fmdrop_data));
+ if (!data) {
+ fprintf (stderr, "gtkui_receive_fm_drop: malloc failed\n");
+ return;
+ }
+ data->mem = mem;
+ data->length = length;
+ data->drop_y = drop_y;
+ deadbeef->thread_start (fmdrop_worker, data);
+}
diff --git a/plugins/gtkui/gtkplaylist.c b/plugins/gtkui/gtkplaylist.c
index 2186af2a..358b5a38 100644
--- a/plugins/gtkui/gtkplaylist.c
+++ b/plugins/gtkui/gtkplaylist.c
@@ -1191,16 +1191,6 @@ gtkpl_track_dragdrop (gtkplaylist_t *ps, int y) {
}
void
-gtkpl_handle_drag_drop (gtkplaylist_t *ps, int drop_y, uint32_t *d, int length) {
- int drop_row = drop_y / rowheight + ps->scrollpos;
- DB_playItem_t *drop_before = deadbeef->pl_get_for_idx_and_iter (drop_row, ps->iterator);
- while (drop_before && SELECTED (drop_before)) {
- drop_before = PL_NEXT(drop_before, ps->iterator);
- }
- deadbeef->pl_move_items (ps->iterator, drop_before, d, length);
-}
-
-void
on_playlist_drag_end (GtkWidget *widget,
GdkDragContext *drag_context,
gpointer user_data)
@@ -1324,16 +1314,6 @@ gtkpl_add_fm_dropped_files (gtkplaylist_t *ps, char *ptr, int length, int drop_y
}
void
-gtkpl_handle_fm_drag_drop (gtkplaylist_t *ps, int drop_y, void *ptr, int length) {
- // this happens when dropped from file manager
- char *mem = malloc (length+1);
- memcpy (mem, ptr, length);
- mem[length] = 0;
- // we don't pass control structure, but there's only one drag-drop view currently
- deadbeef->sendmessage (M_FMDRAGDROP, (uintptr_t)mem, length, drop_y);
-}
-
-void
gtkpl_header_draw (gtkplaylist_t *ps) {
GtkWidget *widget = ps->header;
int x = -ps->hscrollpos;
diff --git a/plugins/gtkui/gtkplaylist.h b/plugins/gtkui/gtkplaylist.h
index ddeb479f..5bf49d2e 100644
--- a/plugins/gtkui/gtkplaylist.h
+++ b/plugins/gtkui/gtkplaylist.h
@@ -150,15 +150,6 @@ void
gtkpl_track_dragdrop (gtkplaylist_t *ps, int y);
void
-gtkpl_handle_drag_drop (gtkplaylist_t *ps, int drop_y, uint32_t *d, int length);
-
-void
-gtkpl_handle_fm_drag_drop (gtkplaylist_t *ps, int drop_y, void *ptr, int length);
-
-void
-gtkpl_add_fm_dropped_files (gtkplaylist_t *ps, char *ptr, int length, int drop_y);
-
-void
gtkpl_select_single (gtkplaylist_t *ps, int sel);
void
diff --git a/plugins/gtkui/gtkui.c b/plugins/gtkui/gtkui.c
index 88688863..96420a8b 100644
--- a/plugins/gtkui/gtkui.c
+++ b/plugins/gtkui/gtkui.c
@@ -245,41 +245,6 @@ guiplug_shutdown (void) {
GDK_THREADS_LEAVE();
}
-#if 0
-void
-guiplug_start_current_track (void) {
- gtkpl_playsong (&main_playlist);
- if (playlist_current_ptr) {
- GDK_THREADS_ENTER();
- gtkpl_redraw_pl_row (&main_playlist, pl_get_idx_of (playlist_current_ptr), playlist_current_ptr);
- GDK_THREADS_LEAVE();
- }
-}
-#endif
-
-void
-guiplug_start_track (int idx) {
- GDK_THREADS_ENTER();
- gtkpl_playsongnum (idx);
- GDK_THREADS_LEAVE();
-}
-
-void
-guiplug_start_random (void) {
- // <deprecated>
- assert (0);
-}
-
-void
-guiplug_open_files (GSList *files) {
- gtkpl_add_files (&main_playlist, files);
- //gtkpl_playsong (&main_playlist);
-}
-
-void
-guiplug_add_fm_dropped_files (char *files, int p1, int p2) {
- gtkpl_add_fm_dropped_files (&main_playlist, files, p1, p2);
-}
static int
gtkui_on_activate (DB_event_t *ev, uintptr_t data) {
@@ -335,7 +300,7 @@ gtkui_on_volumechanged (DB_event_t *ev, uintptr_t data) {
}
void
-gtkui_thread (uintptr_t ctx) {
+gtkui_thread (void *ctx) {
// let's start some gtk
g_thread_init (NULL);
add_pixmap_directory (PREFIX "/share/deadbeef/pixmaps");
@@ -403,7 +368,7 @@ gtkui_start (void) {
deadbeef->ev_subscribe (DB_PLUGIN (&plugin), DB_EV_FRAMEUPDATE, DB_CALLBACK (gtkui_on_frameupdate), 0);
deadbeef->ev_subscribe (DB_PLUGIN (&plugin), DB_EV_VOLUMECHANGED, DB_CALLBACK (gtkui_on_volumechanged), 0);
// gtk must be running in separate thread
- deadbeef->thread_start (gtkui_thread, 0);
+ deadbeef->thread_start (gtkui_thread, NULL);
return 0;
}
diff --git a/plugins/gtkui/gtkui.h b/plugins/gtkui/gtkui.h
index dcfa5cd1..ae88ecff 100644
--- a/plugins/gtkui/gtkui.h
+++ b/plugins/gtkui/gtkui.h
@@ -14,4 +14,7 @@ gtkui_add_files (struct _GSList *lst);
void
gtkui_open_files (struct _GSList *lst);
+void
+gtkui_receive_fm_drop (char *mem, int length, int drop_y);
+
#endif