diff options
author | Stefano Pigozzi <stefano.pigozzi@gmail.com> | 2014-01-14 08:18:05 +0100 |
---|---|---|
committer | Stefano Pigozzi <stefano.pigozzi@gmail.com> | 2014-01-14 20:42:12 +0100 |
commit | 9dc9254da25b784fe32ec6bedfc258efe2254ba5 (patch) | |
tree | bbb17886a1ab1cbecd8c6ab6c1078f1a20bb9ebe | |
parent | e32adef9c4775f9bfb696080b17193bbb58db507 (diff) | |
download | mpv-9dc9254da25b784fe32ec6bedfc258efe2254ba5.tar.bz2 mpv-9dc9254da25b784fe32ec6bedfc258efe2254ba5.tar.xz |
cocoa: add application icon to the Dock when run from CLI
Application icon was added to the Dock only when run inside of a bundle. That
was handled automatically by OS X using the Info.plist definition.
To add the Application icon when run as a CLI program, I used the samme
approach in the X11 code and loaded the icon as a static binary blob inside
of mpv's binary. This is the simplest approach as it avoid headackes when
relocating the binary and such.
-rw-r--r-- | old-makefile | 5 | ||||
-rw-r--r-- | osdep/macosx_application.m | 16 | ||||
-rw-r--r-- | wscript_build.py | 4 |
3 files changed, 25 insertions, 0 deletions
diff --git a/old-makefile b/old-makefile index 05f1f7d4a7..ab793febf7 100644 --- a/old-makefile +++ b/old-makefile @@ -420,6 +420,10 @@ video/out/gl_video.c: video/out/gl_video_shaders.h video/out/gl_video_shaders.h: TOOLS/file2string.pl video/out/gl_video_shaders.glsl ./$^ >$@ +osdep/macosx_application.m: osdep/macosx_icon.inc +osdep/macosx_icon.inc: TOOLS/file2string.pl TOOLS/osxbundle/mpv.app/Contents/Resources/icon.icns + ./$^ >$@ + video/out/x11_common.c: video/out/x11_icon.inc video/out/x11_icon.inc: TOOLS/file2string.pl video/out/x11_icon.bin ./$^ >$@ @@ -541,6 +545,7 @@ clean: -$(RM) demux/ebml_types.h demux/ebml_defs.c -$(RM) video/out/gl_video_shaders.h -$(RM) video/out/x11_icon.inc + -$(RM) osdep/macosx_icon.inc -$(RM) sub/osd_font.h -$(RM) player/lua/defaults.inc -$(RM) player/lua/assdraw.inc diff --git a/osdep/macosx_application.m b/osdep/macosx_application.m index 8632cfc987..86bfc61a08 100644 --- a/osdep/macosx_application.m +++ b/osdep/macosx_application.m @@ -468,6 +468,21 @@ static bool bundle_started_from_finder(int argc, char **argv) } } +static const char macosx_icon[] = +#include "osdep/macosx_icon.inc" +; + +static void set_application_icon(NSApplication *app) +{ + NSData *icon_data = [NSData dataWithBytesNoCopy:(void *)macosx_icon + length:sizeof(macosx_icon) + freeWhenDone:NO]; + NSImage *icon = [[NSImage alloc] initWithData:icon_data]; + [app setApplicationIconImage:icon]; + [icon release]; + [icon_data release]; +} + void macosx_finder_args_preinit(int *argc, char ***argv) { Application *app = mpv_shared_app(); @@ -489,6 +504,7 @@ void macosx_finder_args_preinit(int *argc, char ***argv) *argc = cocoa_argc; *argv = cocoa_argv; } else { + set_application_icon(app); for (int i = 0; i < *argc; i++ ) { NSString *arg = [NSString stringWithUTF8String:(*argv)[i]]; [app.argumentsList addObject:arg]; diff --git a/wscript_build.py b/wscript_build.py index 5cdbd5a4f7..5b46c4fa60 100644 --- a/wscript_build.py +++ b/wscript_build.py @@ -35,6 +35,10 @@ def build(ctx): ctx.load('generators.sources') ctx.file2string( + source = "TOOLS/osxbundle/mpv.app/Contents/Resources/icon.icns", + target = "osdep/macosx_icon.inc") + + ctx.file2string( source = "video/out/x11_icon.bin", target = "video/out/x11_icon.inc") |