[vlc-commits] macosx: drag and drop cleanup

Felix Paul Kühne git at videolan.org
Mon Jul 8 21:38:05 CEST 2019


vlc | branch: master | Felix Paul Kühne <felix at feepk.net> | Mon Jul  8 19:53:22 2019 +0200| [0def47bd2533cd74519990e2948a3b9e386e7196] | committer: Felix Paul Kühne

macosx: drag and drop cleanup

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=0def47bd2533cd74519990e2948a3b9e386e7196
---

 modules/gui/macosx/library/VLCLibraryDataTypes.h   |  2 +
 modules/gui/macosx/library/VLCLibraryDataTypes.m   |  2 +
 .../gui/macosx/library/VLCLibraryVideoDataSource.m |  5 +--
 .../gui/macosx/playlist/VLCPlaylistDataSource.m    |  6 +--
 modules/gui/macosx/views/VLCDragDropView.m         |  2 +-
 .../VLCConvertAndSaveWindowController.m            | 48 ++++------------------
 6 files changed, 17 insertions(+), 48 deletions(-)

diff --git a/modules/gui/macosx/library/VLCLibraryDataTypes.h b/modules/gui/macosx/library/VLCLibraryDataTypes.h
index f496d60dd9..d81be57384 100644
--- a/modules/gui/macosx/library/VLCLibraryDataTypes.h
+++ b/modules/gui/macosx/library/VLCLibraryDataTypes.h
@@ -25,6 +25,8 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
+extern NSString *VLCMediaLibraryMediaItemPasteboardType;
+
 @class VLCMediaLibraryMediaItem;
 @class VLCInputItem;
 
diff --git a/modules/gui/macosx/library/VLCLibraryDataTypes.m b/modules/gui/macosx/library/VLCLibraryDataTypes.m
index ffced77f9e..eb56aca49a 100644
--- a/modules/gui/macosx/library/VLCLibraryDataTypes.m
+++ b/modules/gui/macosx/library/VLCLibraryDataTypes.m
@@ -28,6 +28,8 @@
 
 #import <vlc_url.h>
 
+NSString *VLCMediaLibraryMediaItemPasteboardType = @"VLCMediaLibraryMediaItemPasteboardType";
+
 const CGFloat VLCMediaLibrary4KWidth = 3840.;
 const CGFloat VLCMediaLibrary4KHeight = 2160.;
 const CGFloat VLCMediaLibrary720pWidth = 1280.;
diff --git a/modules/gui/macosx/library/VLCLibraryVideoDataSource.m b/modules/gui/macosx/library/VLCLibraryVideoDataSource.m
index fd3f6afb09..b6939fa5bc 100644
--- a/modules/gui/macosx/library/VLCLibraryVideoDataSource.m
+++ b/modules/gui/macosx/library/VLCLibraryVideoDataSource.m
@@ -111,9 +111,8 @@ writeItemsAtIndexPaths:(NSSet<NSIndexPath *> *)indexPaths
     }
 
     NSData *data = [NSKeyedArchiver archivedDataWithRootObject:mutableArray];
-    NSString *pasteboardType = NSStringFromClass([VLCMediaLibraryMediaItem class]);
-    [pasteboard declareTypes:@[pasteboardType] owner:self];
-    [pasteboard setData:data forType:pasteboardType];
+    [pasteboard declareTypes:@[VLCMediaLibraryMediaItemPasteboardType] owner:self];
+    [pasteboard setData:data forType:VLCMediaLibraryMediaItemPasteboardType];
 
     return YES;
 }
diff --git a/modules/gui/macosx/playlist/VLCPlaylistDataSource.m b/modules/gui/macosx/playlist/VLCPlaylistDataSource.m
index d10c4b61b7..61a8b39391 100644
--- a/modules/gui/macosx/playlist/VLCPlaylistDataSource.m
+++ b/modules/gui/macosx/playlist/VLCPlaylistDataSource.m
@@ -50,8 +50,7 @@ static NSString *VLCPlaylistCellIdentifier = @"VLCPlaylistCellIdentifier";
 
 - (void)prepareForUse
 {
-    NSString *pasteboardType = NSStringFromClass([VLCMediaLibraryMediaItem class]);
-    [_tableView registerForDraggedTypes:@[pasteboardType, NSFilenamesPboardType]];
+    [_tableView registerForDraggedTypes:@[VLCMediaLibraryMediaItemPasteboardType, NSFilenamesPboardType]];
 }
 
 - (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
@@ -116,8 +115,7 @@ static NSString *VLCPlaylistCellIdentifier = @"VLCPlaylistCellIdentifier";
               row:(NSInteger)row
     dropOperation:(NSTableViewDropOperation)dropOperation
 {
-    NSString *pasteboardType = NSStringFromClass([VLCMediaLibraryMediaItem class]);
-    NSData *data = [info.draggingPasteboard dataForType:pasteboardType];
+    NSData *data = [info.draggingPasteboard dataForType:VLCMediaLibraryMediaItemPasteboardType];
     if (!data) {
         id propertyList = [info.draggingPasteboard propertyListForType:NSFilenamesPboardType];
         if (propertyList == nil) {
diff --git a/modules/gui/macosx/views/VLCDragDropView.m b/modules/gui/macosx/views/VLCDragDropView.m
index 5daa1f5e77..7c96461be2 100644
--- a/modules/gui/macosx/views/VLCDragDropView.m
+++ b/modules/gui/macosx/views/VLCDragDropView.m
@@ -47,7 +47,7 @@
 
 - (void)enablePlaylistItems
 {
-    [self registerForDraggedTypes:[NSArray arrayWithObjects:NSFilenamesPboardType, @"VLCPlaylistItemPboardType", nil]];
+    [self registerForDraggedTypes:[NSArray arrayWithObjects:NSFilenamesPboardType, nil]];
 }
 
 - (BOOL)mouseDownCanMoveWindow
diff --git a/modules/gui/macosx/windows/convertandsave/VLCConvertAndSaveWindowController.m b/modules/gui/macosx/windows/convertandsave/VLCConvertAndSaveWindowController.m
index 13a4248dcd..c60a964286 100644
--- a/modules/gui/macosx/windows/convertandsave/VLCConvertAndSaveWindowController.m
+++ b/modules/gui/macosx/windows/convertandsave/VLCConvertAndSaveWindowController.m
@@ -331,9 +331,8 @@ NSString *VLCConvertAndSaveProfileNamesKey = @"CASProfileNames";
     [openPanel setResolvesAliases:YES];
     [openPanel setAllowsMultipleSelection:NO];
     [openPanel beginSheetModalForWindow:self.window completionHandler:^(NSInteger returnCode) {
-        if (returnCode == NSModalResponseOK)
-        {
-            [self setMRL: toNSStr(vlc_path2uri([[[openPanel URL] path] UTF8String], NULL))];
+        if (returnCode == NSModalResponseOK) {
+            [self setMRL: [[openPanel URL] absoluteString]];
             [self updateOKButton];
             [self updateDropView];
         }
@@ -641,7 +640,7 @@ NSString *VLCConvertAndSaveProfileNamesKey = @"CASProfileNames";
 
 - (BOOL)handlePasteBoardFromDragSession:(NSPasteboard *)paste
 {
-    NSArray *types = [NSArray arrayWithObjects:NSFilenamesPboardType, @"VLCPlaylistItemPboardType", nil];
+    NSArray *types = [NSArray arrayWithObjects:NSFilenamesPboardType, nil];
     NSString *desired_type = [paste availableTypeFromArray: types];
     NSData *carried_data = [paste dataForType: desired_type];
 
@@ -652,48 +651,17 @@ NSString *VLCConvertAndSaveProfileNamesKey = @"CASProfileNames";
         NSArray *values = [[paste propertyListForType: NSFilenamesPboardType] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
 
         if ([values count] > 0) {
-            [self setMRL: toNSStr(vlc_path2uri([[values firstObject] UTF8String], NULL))];
+            NSURL *url = [NSURL fileURLWithPath:[values firstObject] isDirectory:NO];
+            if (!url) {
+                return NO;
+            }
+            [self setMRL:url.absoluteString];
             [self updateOKButton];
             [self updateDropView];
             return YES;
         }
     }
 
-#if 0
-    // FIXME: re-implement drag-n-drop from the new playlist
-    else if ([desired_type isEqualToString:@"VLCPlaylistItemPboardType"]) {
-        NSArray *draggedItems = [[[VLCMain sharedInstance] playlist] draggedItems];
-
-        // Return early to prevent unnecessary playlist access/locking
-        if ([draggedItems count] <= 0) {
-            return NO;
-        }
-
-        playlist_t *p_playlist = pl_Get(getIntf());
-        playlist_item_t *p_item = NULL;
-
-        PL_LOCK;
-        for (VLCPLItem *draggedItem in draggedItems) {
-            p_item = playlist_ItemGetById(p_playlist, [draggedItem plItemId]);
-
-            // Check if the item is usable
-            if (!p_item || !p_item->p_input || !p_item->p_input->psz_uri) {
-                // Item not usable, reset it.
-                p_item = NULL;
-                continue;
-            }
-
-            // First usable item found
-            [self setMRL: toNSStr(p_item->p_input->psz_uri)];
-            [self updateDropView];
-            [self updateOKButton];
-            break;
-        }
-        PL_UNLOCK;
-
-        return (p_item != NULL) ? YES : NO;
-    }
-#endif
     return NO;
 }
 



More information about the vlc-commits mailing list