From 2097224061bd185d54f82fbf0e03225bb5a1bb3f Mon Sep 17 00:00:00 2001 From: Palana Date: Sat, 6 Jun 2015 21:01:35 +0200 Subject: [PATCH] libobs: Move OSX keyboard layout logging In the (unlikely) event of multiple concurrent calls to input_method_changed it was possible that the log messages would appear out of order with respect to which layout would actually be active after the last log message --- libobs/obs-cocoa.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/libobs/obs-cocoa.c b/libobs/obs-cocoa.c index 27871357a..975100594 100644 --- a/libobs/obs-cocoa.c +++ b/libobs/obs-cocoa.c @@ -204,6 +204,7 @@ static bool dstr_from_cfstring(struct dstr *str, CFStringRef ref) struct obs_hotkeys_platform { volatile long refs; + TISInputSourceRef tis; CFDataRef layout_data; UCKeyboardLayout *layout; IOHIDManagerRef manager; @@ -1096,6 +1097,11 @@ static inline void free_hotkeys_platform(obs_hotkeys_platform_t *plat) if (!plat) return; + if (plat->tis) { + CFRelease(plat->tis); + plat->tis = NULL; + } + if (plat->layout_data) { CFRelease(plat->layout_data); plat->layout_data = NULL; @@ -1154,8 +1160,8 @@ static bool init_hotkeys_platform(obs_hotkeys_platform_t **plat_) return false; } - TISInputSourceRef tis = TISCopyCurrentKeyboardLayoutInputSource(); - plat->layout_data = (CFDataRef)TISGetInputSourceProperty(tis, + plat->tis = TISCopyCurrentKeyboardLayoutInputSource(); + plat->layout_data = (CFDataRef)TISGetInputSourceProperty(plat->tis, kTISPropertyUnicodeKeyLayoutData); if (!plat->layout_data) { @@ -1163,8 +1169,6 @@ static bool init_hotkeys_platform(obs_hotkeys_platform_t **plat_) goto fail; } - log_layout_name(tis); - CFRetain(plat->layout_data); plat->layout = (UCKeyboardLayout*)CFDataGetBytePtr(plat->layout_data); @@ -1180,11 +1184,9 @@ static bool init_hotkeys_platform(obs_hotkeys_platform_t **plat_) init_keyboard(plat); - CFRelease(tis); return true; fail: - CFRelease(tis); hotkeys_release(plat); *plat_ = NULL; return false; @@ -1207,6 +1209,8 @@ static void input_method_changed(CFNotificationCenterRef nc, void *observer, pthread_mutex_lock(&hotkeys->mutex); plat = hotkeys->platform_context; hotkeys->platform_context = new_plat; + if (new_plat) + log_layout_name(new_plat->tis); pthread_mutex_unlock(&hotkeys->mutex); calldata_t params = {0}; -- GitLab