summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-05-02 18:09:01 +0200
committerwm4 <wm4@nowhere>2015-05-02 18:09:56 +0200
commit19a5b20752ecc7465cf17781f908e12bf4ca136d (patch)
tree84d7504b58d4c78b06b88eb85bffc00cba27e696
parentd8e92322fa6eee44bb2713a202b84dfd32cf7ea1 (diff)
downloadmpv-19a5b20752ecc7465cf17781f908e12bf4ca136d.tar.bz2
mpv-19a5b20752ecc7465cf17781f908e12bf4ca136d.tar.xz
cocoa: always compile OSX application code with cocoa
This unbreaks compiling command line player and libmpv at the same time. The problem was that doing so silently disabled the OSX application thing - but the command line player can not use the vo_opengl Cocoa backend without it. The OSX application code is basically dead in libmpv, but it's not that much code anyway. If you want a mpv binary that does not create an OSX application singleton (and creates a menu etc.), you must disable cocoa completely, as cocoa can't be used anyway in this case.
-rw-r--r--osdep/macosx_application.h1
-rw-r--r--osdep/macosx_application.m23
-rw-r--r--osdep/macosx_application_objc.h2
-rw-r--r--player/main-fn-unix.c4
-rw-r--r--video/out/cocoa_common.m8
-rw-r--r--wscript6
-rw-r--r--wscript_build.py2
7 files changed, 20 insertions, 26 deletions
diff --git a/osdep/macosx_application.h b/osdep/macosx_application.h
index 8202093aed..c48d1154a0 100644
--- a/osdep/macosx_application.h
+++ b/osdep/macosx_application.h
@@ -32,6 +32,5 @@ typedef enum {
// multithreaded wrapper for mpv_main
int cocoa_main(mpv_main_fn mpv_main, int argc, char *argv[]);
void cocoa_register_menu_item_action(MPMenuKey key, void* action);
-void terminate_cocoa_application(void);
#endif /* MPV_MACOSX_APPLICATION */
diff --git a/osdep/macosx_application.m b/osdep/macosx_application.m
index 3691e922a5..2ff3386f76 100644
--- a/osdep/macosx_application.m
+++ b/osdep/macosx_application.m
@@ -29,6 +29,10 @@
#define MPV_PROTOCOL @"mpv://"
+// Whether the NSApplication singleton was created. If this is false, we are
+// running in libmpv mode, and cocoa_main() was never called.
+static bool application_instantiated;
+
static pthread_t playback_thread_id;
@interface Application ()
@@ -53,11 +57,17 @@ static pthread_t playback_thread_id;
- (void)setAppleMenu:(NSMenu *)aMenu;
@end
-Application *mpv_shared_app(void)
+static Application *mpv_shared_app(void)
{
return (Application *)[Application sharedApplication];
}
+static void terminate_cocoa_application(void)
+{
+ [NSApp hide:NSApp];
+ [NSApp terminate:NSApp];
+}
+
@implementation Application
@synthesize menuItems = _menu_items;
@synthesize openCount = _open_count;
@@ -247,12 +257,6 @@ struct playback_thread_ctx {
char ***argv;
};
-void terminate_cocoa_application(void)
-{
- [NSApp hide:NSApp];
- [NSApp terminate:NSApp];
-}
-
static void cocoa_run_runloop(void)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
@@ -274,7 +278,8 @@ static void *playback_thread(void *ctx_obj)
void cocoa_register_menu_item_action(MPMenuKey key, void* action)
{
- [NSApp registerSelector:(SEL)action forKey:key];
+ if (application_instantiated)
+ [NSApp registerSelector:(SEL)action forKey:key];
}
static void init_cocoa_application(bool regular)
@@ -359,6 +364,8 @@ static bool bundle_started_from_finder(int argc, char **argv)
int cocoa_main(mpv_main_fn mpv_main, int argc, char *argv[])
{
@autoreleasepool {
+ application_instantiated = true;
+
struct playback_thread_ctx ctx = {0};
ctx.mpv_main = mpv_main;
ctx.argc = &argc;
diff --git a/osdep/macosx_application_objc.h b/osdep/macosx_application_objc.h
index 0f18952c7e..4741a14a64 100644
--- a/osdep/macosx_application_objc.h
+++ b/osdep/macosx_application_objc.h
@@ -27,5 +27,3 @@
@property(nonatomic, retain) NSArray *files;
@property(nonatomic, assign) size_t openCount;
@end
-
-Application *mpv_shared_app(void);
diff --git a/player/main-fn-unix.c b/player/main-fn-unix.c
index 23a047b4dc..87e1681987 100644
--- a/player/main-fn-unix.c
+++ b/player/main-fn-unix.c
@@ -1,13 +1,13 @@
#include "config.h"
#include "core.h"
-#if HAVE_COCOA_APPLICATION
+#if HAVE_COCOA
#include "osdep/macosx_application.h"
#endif
int main(int argc, char *argv[])
{
-#if HAVE_COCOA_APPLICATION
+#if HAVE_COCOA
return cocoa_main(mpv_main, argc, argv);
#else
return mpv_main(argc, argv);
diff --git a/video/out/cocoa_common.m b/video/out/cocoa_common.m
index 8a0473e729..e9c33d6f60 100644
--- a/video/out/cocoa_common.m
+++ b/video/out/cocoa_common.m
@@ -35,10 +35,8 @@
#include "config.h"
-#if HAVE_COCOA_APPLICATION
-# include "osdep/macosx_application.h"
-# include "osdep/macosx_application_objc.h"
-#endif
+#include "osdep/macosx_application.h"
+#include "osdep/macosx_application_objc.h"
#include "options/options.h"
#include "video/out/vo.h"
@@ -462,13 +460,11 @@ static void create_ui(struct vo *vo, struct mp_rect *win, int geo_flags)
[view signalMousePosition];
s->adapter = adapter;
-#if HAVE_COCOA_APPLICATION
cocoa_register_menu_item_action(MPM_H_SIZE, @selector(halfSize));
cocoa_register_menu_item_action(MPM_N_SIZE, @selector(normalSize));
cocoa_register_menu_item_action(MPM_D_SIZE, @selector(doubleSize));
cocoa_register_menu_item_action(MPM_MINIMIZE, @selector(performMiniaturize:));
cocoa_register_menu_item_action(MPM_ZOOM, @selector(performZoom:));
-#endif
s->video = [[MpvVideoView alloc] initWithFrame:[s->view bounds]];
[s->video setWantsBestResolutionOpenGLSurface:YES];
diff --git a/wscript b/wscript
index 56f03202c1..0bf62e983c 100644
--- a/wscript
+++ b/wscript
@@ -770,12 +770,6 @@ standalone_features = [
'deps_any': [ 'os-win32', 'os-cygwin'],
'func': check_ctx_vars('WINDRES')
}, {
- 'name': 'cocoa-application',
- 'desc': 'standalone Cocoa application',
- 'deps': [ 'cocoa' ],
- 'deps_neg': [ 'libmpv-shared', 'libmpv-static' ],
- 'func': check_true
- }, {
'name': '--apple-remote',
'desc': 'Apple Remote support',
'deps': [ 'cocoa' ],
diff --git a/wscript_build.py b/wscript_build.py
index e2d1562d5b..89ec67c471 100644
--- a/wscript_build.py
+++ b/wscript_build.py
@@ -373,7 +373,7 @@ def build(ctx):
( "osdep/threads.c" ),
( "osdep/ar/HIDRemote.m", "apple-remote" ),
- ( "osdep/macosx_application.m", "cocoa-application" ),
+ ( "osdep/macosx_application.m", "cocoa" ),
( "osdep/macosx_events.m", "cocoa" ),
( "osdep/semaphore_osx.c" ),
( "osdep/subprocess.c" ),