]> git.sesse.net Git - vlc/commitdiff
* Still some work for playlist drag'n'drop
authorBenjamin Pracht <bigben@videolan.org>
Wed, 29 Jun 2005 20:53:06 +0000 (20:53 +0000)
committerBenjamin Pracht <bigben@videolan.org>
Wed, 29 Jun 2005 20:53:06 +0000 (20:53 +0000)
modules/gui/macosx/playlist.m

index 86d87f7168fbe18da51e7e844b4f9452d76e9057..b99a80e0c23f495760a0f8d219d9b99cc47f0c2f 100644 (file)
@@ -1359,8 +1359,8 @@ belongs to an Apple hidden private API, and then can "disapear" at any time*/
 
     if( !p_playlist ) return NO;
 
-    [pboard declareTypes: [NSArray arrayWithObject:
-                                    @"VLCPlaylistItemPboardType"] owner: nil];
+    [pboard declareTypes: [NSArray arrayWithObjects:
+        @"VLCPlaylistItemPboardType", NSFilenamesPboardType, nil] owner: self];
 
     for( i = 0 ; i < [items count] ; i++ )
     {
@@ -1415,8 +1415,10 @@ belongs to an Apple hidden private API, and then can "disapear" at any time*/
     [o_objects_array addObjectsFromArray: o_nodes_array];
     [o_objects_array addObjectsFromArray: o_items_array];
 
-    if( ![pboard setPropertyList:(id)o_objects_array
-                                        forType:@"VLCPlaylistItemPboardType"] )
+    if( ![pboard setPropertyList: o_objects_array
+            forType:@"VLCPlaylistItemPboardType"] ||
+            ![pboard setPropertyList: [NSArray array]
+            forType:@"VLCPlaylistItemPboardType"])
     {
         vlc_object_release(p_playlist);
         return NO;
@@ -1428,12 +1430,28 @@ belongs to an Apple hidden private API, and then can "disapear" at any time*/
 
 - (NSDragOperation)outlineView:(NSOutlineView *)outlineView validateDrop:(id <NSDraggingInfo>)info proposedItem:(id)item proposedChildIndex:(int)index
 {
+    playlist_t *p_playlist = vlc_object_find( VLCIntf, VLC_OBJECT_PLAYLIST,
+                                               FIND_ANYWHERE );
     NSPasteboard *o_pasteboard = [info draggingPasteboard];
 
-    if( [[o_pasteboard types] containsObject: NSFilenamesPboardType] )
+    if( !p_playlist ) return NSDragOperationNone;
+
+    /* Drop from the Playlist */
+    if( [[o_pasteboard types] containsObject: @"VLCPlaylistItemPboardType"] &&
+        [self isItem: [item pointerValue] inNode: p_playlist->p_general])
+    {
+        vlc_object_release(p_playlist);
+        return NSDragOperationMove;
+    }
+
+    /* Drop from the Finder */
+    else if( [[o_pasteboard types] containsObject: NSFilenamesPboardType] &&
+        ![[o_pasteboard types] containsObject: @"VLCPlaylistItemPboardType"])
     {
+        vlc_object_release(p_playlist);
         return NSDragOperationGeneric;
     }
+    vlc_object_release(p_playlist);
     return NSDragOperationNone;
 }