summaryrefslogtreecommitdiffstats
path: root/video
diff options
context:
space:
mode:
authorStefano Pigozzi <stefano.pigozzi@gmail.com>2013-01-16 00:42:07 +0100
committerStefano Pigozzi <stefano.pigozzi@gmail.com>2013-01-16 22:27:04 +0100
commit89a49ffd74f8be4ff36b0e6500e7b4434944c7fa (patch)
tree7d65e2c29b0984ac3c62d77510c433d22559b69b /video
parent60755108a61d7ce2f5ff07226a689bde552be008 (diff)
downloadmpv-89a49ffd74f8be4ff36b0e6500e7b4434944c7fa.tar.bz2
mpv-89a49ffd74f8be4ff36b0e6500e7b4434944c7fa.tar.xz
osxbundle: cocoa_common: change playlist on fileopen events
When opening new files in Finder when `mpv` is running from an application bundle, the new files will now replace the current playlist. Fixes #14
Diffstat (limited to 'video')
-rw-r--r--video/out/cocoa_common.m20
-rw-r--r--video/out/osx_common.h1
-rw-r--r--video/out/osx_common.m21
3 files changed, 42 insertions, 0 deletions
diff --git a/video/out/cocoa_common.m b/video/out/cocoa_common.m
index 071366c378..c713398863 100644
--- a/video/out/cocoa_common.m
+++ b/video/out/cocoa_common.m
@@ -767,6 +767,26 @@ void create_menu()
}
}
+- (void)application:(NSApplication *)sender openFiles:(NSArray *)filenames
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ NSArray *sorted_filenames = [filenames
+ sortedArrayUsingSelector:@selector(compare:)];
+
+ for (int i = 0; i < [sorted_filenames count]; i++) {
+ NSString *filename = [sorted_filenames objectAtIndex:i];
+ NSString *escaped_filename = escape_loadfile_name(filename);
+
+ char *cmd = talloc_asprintf(NULL, "loadfile \"%s\"%s",
+ [escaped_filename UTF8String],
+ (i == 0) ? "" : " append");
+ mp_input_queue_cmd(_vo->input_ctx, mp_input_parse_cmd(bstr0(cmd), ""));
+ talloc_free(cmd);
+ }
+
+ [pool release];
+}
+
- (void)applicationWillBecomeActive:(NSNotification *)aNotification
{
if (vo_fs && current_screen_has_dock_or_menubar(_vo)) {
diff --git a/video/out/osx_common.h b/video/out/osx_common.h
index ae31a6353d..8d2d70edc4 100644
--- a/video/out/osx_common.h
+++ b/video/out/osx_common.h
@@ -23,5 +23,6 @@ struct vo;
int convert_key(unsigned key, unsigned charcode);
int is_osx_version_at_least(int majorv, int minorv, int bugfixv);
+NSString *escape_loadfile_name(NSString *input);
#endif /* MPLAYER_OSX_COMMON_H */
diff --git a/video/out/osx_common.m b/video/out/osx_common.m
index 58198c11e2..2d22fc52dc 100644
--- a/video/out/osx_common.m
+++ b/video/out/osx_common.m
@@ -152,3 +152,24 @@ cleanup_and_return:
[pool release];
return rv;
}
+
+struct escape_couple {
+ NSString *in;
+ NSString *out;
+};
+
+static struct escape_couple escapes[] = {
+ { @"\\", @"\\\\" },
+ { @"\"", @"\\\"" },
+ { NULL, NULL }
+};
+
+NSString *escape_loadfile_name(NSString *input)
+{
+ for (int i = 0; escapes[i].out; i++) {
+ input = [input stringByReplacingOccurrencesOfString:escapes[i].in
+ withString:escapes[i].out];
+ }
+
+ return input;
+}