From 78a2d99de130cc8e6adc18c5d7a987c5c8b2d2b3 Mon Sep 17 00:00:00 2001 From: FRAU KOUJIRO Date: Tue, 15 Apr 2014 17:09:47 -0700 Subject: cocoa: sync inputContext inside EventsResponder --- osdep/macosx_application.m | 10 ++-------- osdep/macosx_events.m | 26 +++++++++++++++++++++++--- osdep/macosx_events_objc.h | 4 +++- 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/osdep/macosx_application.m b/osdep/macosx_application.m index f6061fe76a..9aff6e814b 100644 --- a/osdep/macosx_application.m +++ b/osdep/macosx_application.m @@ -318,10 +318,7 @@ int cocoa_main(mpv_main_fn mpv_main, int argc, char *argv[]) macosx_finder_args_preinit(&argc, &argv); pthread_create(&playback_thread_id, NULL, playback_thread, &ctx); - [_eventsResponder.input_ready lock]; - while (!_eventsResponder.inputContext) - [_eventsResponder.input_ready wait]; - [_eventsResponder.input_ready unlock]; + [[EventsResponder sharedInstance] waitForInputContext]; cocoa_run_runloop(); @@ -378,10 +375,7 @@ void cocoa_stop_runloop(void) void cocoa_set_input_context(struct input_ctx *input_context) { - [_eventsResponder.input_ready lock]; - _eventsResponder.inputContext = input_context; - [_eventsResponder.input_ready signal]; - [_eventsResponder.input_ready unlock]; + [EventsResponder sharedInstance].inputContext = input_context; } void cocoa_post_fake_event(void) diff --git a/osdep/macosx_events.m b/osdep/macosx_events.m index 7a525f7dd5..c8da555fa1 100644 --- a/osdep/macosx_events.m +++ b/osdep/macosx_events.m @@ -36,6 +36,8 @@ @interface EventsResponder () { + struct input_ctx *_inputContext; + NSCondition *_input_ready; CFMachPortRef _mk_tap_port; HIDRemote *_remote; } @@ -188,9 +190,6 @@ void cocoa_put_key_with_modifiers(int keycode, int modifiers) @implementation EventsResponder -@synthesize inputContext = _input_context; -@synthesize input_ready = _input_ready; - + (EventsResponder *)sharedInstance { static EventsResponder *responder = nil; @@ -220,6 +219,27 @@ void cocoa_put_key_with_modifiers(int keycode, int modifiers) return self; } +- (void)waitForInputContext +{ + [_input_ready lock]; + while (!self.inputContext) + [_input_ready wait]; + [_input_ready unlock]; +} + +- (void)setInputContext:(struct input_ctx *)ctx; +{ + [_input_ready lock]; + _inputContext = ctx; + [_input_ready signal]; + [_input_ready unlock]; +} + +- (struct input_ctx *)inputContext +{ + return _inputContext; +} + - (BOOL)useAltGr { if (self.inputContext) diff --git a/osdep/macosx_events_objc.h b/osdep/macosx_events_objc.h index 226d8cb562..575f336f87 100644 --- a/osdep/macosx_events_objc.h +++ b/osdep/macosx_events_objc.h @@ -27,7 +27,9 @@ struct input_ctx; + (EventsResponder *)sharedInstance; +/// Blocks until inputContext is present. +- (void)waitForInputContext; + @property(nonatomic, assign) struct input_ctx *inputContext; -@property(nonatomic, retain) NSCondition *input_ready; @end -- cgit v1.2.3