diff options
author | 2009-11-30 22:10:09 +0100 | |
---|---|---|
committer | 2009-11-30 22:10:09 +0100 | |
commit | 576b8419ed5b8d4e586151d8965d1d5f89624ee1 (patch) | |
tree | ee6ee3407ef4ed1b78b2c57cd0ff45b86789a8c3 /plugins/gtkui | |
parent | 2181dcac0261f9036f0efec4390d47639fe6aa10 (diff) |
ported filemanager dnd into gtkui
Diffstat (limited to 'plugins/gtkui')
-rw-r--r-- | plugins/gtkui/callbacks.c | 21 | ||||
-rw-r--r-- | plugins/gtkui/fileman.c | 27 | ||||
-rw-r--r-- | plugins/gtkui/gtkplaylist.c | 20 | ||||
-rw-r--r-- | plugins/gtkui/gtkplaylist.h | 9 | ||||
-rw-r--r-- | plugins/gtkui/gtkui.c | 39 | ||||
-rw-r--r-- | plugins/gtkui/gtkui.h | 3 |
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 |