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};