static void stations_view_drag_data_received_cb (GtkWidget *widget, GdkDragContext *dc, gint x, gint y, GtkSelectionData *selection_data, guint info, guint time, RBIRadioSource *source) { GList *uri_list, *i; rb_debug ("parsing uri list"); uri_list = rb_uri_list_parse ((char *) gtk_selection_data_get_data (selection_data)); if (uri_list == NULL) return; for (i = uri_list; i != NULL; i = i->next) { char *uri = NULL; uri = i->data; if (uri != NULL) { rb_iradio_source_add_station (source, uri, NULL, NULL); } if (info == 1) { /* for _NETSCAPE_URL drags, this item is the link text */ i = i->next; } } rb_list_deep_free (uri_list); return; }
static gboolean impl_receive_drag (RBDisplayPage *page, GtkSelectionData *data) { GdkAtom type; GList *list; RBStaticPlaylistSource *source = RB_STATIC_PLAYLIST_SOURCE (page); type = gtk_selection_data_get_data_type (data); if (type == gdk_atom_intern ("text/uri-list", TRUE) || type == gdk_atom_intern ("application/x-rhythmbox-entry", TRUE)) { list = rb_uri_list_parse ((char *)gtk_selection_data_get_data (data)); if (list == NULL) return FALSE; if (type == gdk_atom_intern ("text/uri-list", TRUE)) rb_static_playlist_source_add_uri_list (source, list); else rb_static_playlist_source_add_id_list (source, list); rb_list_deep_free (list); } return TRUE; }
gboolean impl_receive_drag (RBDisplayPage *page, GtkSelectionData *data) { GList *entries; RhythmDB *db; char *type; entries = NULL; type = gdk_atom_name (gtk_selection_data_get_data_type (data)); db = get_db_for_source (RB_SOURCE (page)); if (strcmp (type, "text/uri-list") == 0) { GList *list; GList *i; rb_debug ("parsing uri list"); list = rb_uri_list_parse ((const char *) gtk_selection_data_get_data (data)); for (i = list; i != NULL; i = g_list_next (i)) { char *uri; RhythmDBEntry *entry; if (i->data == NULL) continue; uri = i->data; entry = rhythmdb_entry_lookup_by_location (db, uri); if (entry == NULL) { /* add to the library */ rb_debug ("received drop of unknown uri: %s", uri); } else { /* add to list of entries to copy */ entries = g_list_prepend (entries, entry); } g_free (uri); } g_list_free (list); } else if (strcmp (type, "application/x-rhythmbox-entry") == 0) { char **list; char **i; rb_debug ("parsing entry ids"); list = g_strsplit ((const char*) gtk_selection_data_get_data (data), "\n", -1); for (i = list; *i != NULL; i++) { RhythmDBEntry *entry; gulong id; id = atoi (*i); entry = rhythmdb_entry_lookup_by_id (db, id); if (entry != NULL) entries = g_list_prepend (entries, entry); } g_strfreev (list); } else { rb_debug ("received unknown drop type"); } g_object_unref (db); g_free (type); if (entries) { entries = g_list_reverse (entries); if (rb_source_can_paste (RB_SOURCE (page))) { rb_source_paste (RB_SOURCE (page), entries); } g_list_free (entries); } return TRUE; }