[vlc-commits] macosx: add multiple files dragged to dock icon together

David Fuhrmann git at videolan.org
Mon Jun 11 18:10:32 CEST 2012


vlc | branch: master | David Fuhrmann <david.fuhrmann at googlemail.com> | Mon Jun 11 18:08:33 2012 +0200| [13e2c3bdfba86c9a1400deb9b14e201bbb40ec9e] | committer: David Fuhrmann

macosx: add multiple files dragged to dock icon together

refs #4358

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

 modules/gui/macosx/intf.h |    2 +-
 modules/gui/macosx/intf.m |   48 ++++++++++++++++++++++++++-------------------
 2 files changed, 29 insertions(+), 21 deletions(-)

diff --git a/modules/gui/macosx/intf.h b/modules/gui/macosx/intf.h
index 46d93e9..9bf57ce 100644
--- a/modules/gui/macosx/intf.h
+++ b/modules/gui/macosx/intf.h
@@ -196,7 +196,7 @@ struct intf_sys_t
 - (void)showFullscreenController;
 - (void)updateDelays;
 - (void)initStrings;
-- (BOOL)application:(NSApplication *)o_app openFile:(NSString *)o_filename;
+- (BOOL)application:(NSApplication *)o_app openFiles:(NSString *)o_filename;
 
 - (IBAction)crashReporterAction:(id)sender;
 - (IBAction)openCrashLog:(id)sender;
diff --git a/modules/gui/macosx/intf.m b/modules/gui/macosx/intf.m
index 66d887d..345909f 100644
--- a/modules/gui/macosx/intf.m
+++ b/modules/gui/macosx/intf.m
@@ -904,39 +904,47 @@ static VLCMain *_o_sharedMainInstance = nil;
 }
 
 #pragma mark -
-#pragma mark File opening
+#pragma mark File opening over dock icon
 
-- (BOOL)application:(NSApplication *)o_app openFile:(NSString *)o_filename
+- (BOOL)application:(NSApplication *)o_app openFiles:(NSArray *)o_names
 {
     BOOL b_autoplay = config_GetInt( VLCIntf, "macosx-autoplay" );
-    char *psz_uri = make_URI([o_filename UTF8String], "file" );
-    if( !psz_uri )
-        return( FALSE );
+    char *psz_uri = make_URI([[o_names objectAtIndex:0] UTF8String], "file" );
 
-    input_thread_t * p_input = pl_CurrentInput( VLCIntf );
-    BOOL b_returned = NO;
-
-    if (p_input)
+    // try to add file as subtitle
+    if( [o_names count] == 1 && psz_uri )
     {
-        b_returned = input_AddSubtitle( p_input, psz_uri, true );
-        vlc_object_release( p_input );
-        if(!b_returned)
+        input_thread_t * p_input = pl_CurrentInput( VLCIntf );
+        if( p_input )
         {
-            free( psz_uri );
-            return YES;
+            BOOL b_returned = NO;
+            b_returned = input_AddSubtitle( p_input, psz_uri, true );
+            vlc_object_release( p_input );
+            if( !b_returned )
+            {
+                free( psz_uri );
+                return YES;
+            }
         }
     }
-    else if( p_input )
-        vlc_object_release( p_input );
+    free( psz_uri );
 
-    NSDictionary *o_dic = [NSDictionary dictionaryWithObject:[NSString stringWithCString:psz_uri encoding:NSUTF8StringEncoding] forKey:@"ITEM_URL"];
+    NSMutableArray *o_result = [NSMutableArray arrayWithCapacity: [o_names count]];
+    for( int i = 0; i < [o_names count]; i++ )
+    {
+        psz_uri = make_URI([[o_names objectAtIndex: i] UTF8String], "file" );
+        if( !psz_uri )
+            return NO;
 
-    free( psz_uri );
+        NSDictionary *o_dic = [NSDictionary dictionaryWithObject:[NSString stringWithCString:psz_uri encoding:NSUTF8StringEncoding] forKey:@"ITEM_URL"];
+        free( psz_uri );
+        [o_result insertObject: o_dic atIndex: i];
+    }
 
     if( b_autoplay )
-        [o_playlist appendArray: [NSArray arrayWithObject: o_dic] atPos: -1 enqueue: NO];
+        [o_playlist appendArray: o_result atPos: -1 enqueue: NO];
     else
-        [o_playlist appendArray: [NSArray arrayWithObject: o_dic] atPos: -1 enqueue: YES];
+        [o_playlist appendArray: o_result atPos: -1 enqueue: YES];
 
     return( TRUE );
 }



More information about the vlc-commits mailing list