macOS: Watch for system preferences changes and update global_shortcuts
This commit is contained in:
parent
ab5b9fb329
commit
a9bdf70275
@ -264,6 +264,8 @@ display_reconfigured(CGDirectDisplayID display UNUSED, CGDisplayChangeSummaryFla
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static NSDictionary<NSString*,NSNumber*> *global_shortcuts = nil;
|
||||||
|
|
||||||
@interface GLFWHelper : NSObject
|
@interface GLFWHelper : NSObject
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@ -280,6 +282,16 @@ display_reconfigured(CGDirectDisplayID display UNUSED, CGDisplayChangeSummaryFla
|
|||||||
(void)object;
|
(void)object;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// watch for settings change and rebuild global_shortcuts using key/value observing on NSUserDefaults
|
||||||
|
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
|
||||||
|
{
|
||||||
|
(void)keyPath; (void)object; (void)change; (void)context;
|
||||||
|
if (global_shortcuts != nil) {
|
||||||
|
[global_shortcuts release];
|
||||||
|
global_shortcuts = nil;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@end // GLFWHelper
|
@end // GLFWHelper
|
||||||
|
|
||||||
// Delegate for application related notifications {{{
|
// Delegate for application related notifications {{{
|
||||||
@ -542,8 +554,6 @@ typedef enum AppleShortcutNames {
|
|||||||
kSHKUnknown = 0, //
|
kSHKUnknown = 0, //
|
||||||
} AppleShortcutNames;
|
} AppleShortcutNames;
|
||||||
|
|
||||||
static NSDictionary<NSString*,NSNumber*> *global_shortcuts = nil;
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
build_global_shortcuts_lookup(void) {
|
build_global_shortcuts_lookup(void) {
|
||||||
NSMutableDictionary<NSString*, NSNumber*> *temp = [NSMutableDictionary dictionaryWithCapacity:128]; // will be autoreleased
|
NSMutableDictionary<NSString*, NSNumber*> *temp = [NSMutableDictionary dictionaryWithCapacity:128]; // will be autoreleased
|
||||||
@ -584,7 +594,6 @@ build_global_shortcuts_lookup(void) {
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
is_active_apple_global_shortcut(NSEvent *event) {
|
is_active_apple_global_shortcut(NSEvent *event) {
|
||||||
// TODO: watch for settings change and rebuild global_shortcuts using key/value observing on NSUserDefaults
|
|
||||||
if (global_shortcuts == nil) build_global_shortcuts_lookup();
|
if (global_shortcuts == nil) build_global_shortcuts_lookup();
|
||||||
NSEventModifierFlags modifierFlags = [event modifierFlags] & (NSEventModifierFlagShift | NSEventModifierFlagOption | NSEventModifierFlagCommand | NSEventModifierFlagControl);
|
NSEventModifierFlags modifierFlags = [event modifierFlags] & (NSEventModifierFlagShift | NSEventModifierFlagOption | NSEventModifierFlagCommand | NSEventModifierFlagControl);
|
||||||
static char lookup_key[64];
|
static char lookup_key[64];
|
||||||
@ -785,6 +794,13 @@ int _glfwPlatformInit(void)
|
|||||||
};
|
};
|
||||||
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
|
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
|
||||||
|
|
||||||
|
NSUserDefaults *apple_settings = [[NSUserDefaults alloc] initWithSuiteName:@"com.apple.symbolichotkeys"];
|
||||||
|
[apple_settings addObserver:_glfw.ns.helper
|
||||||
|
forKeyPath:@"AppleSymbolicHotKeys"
|
||||||
|
options:NSKeyValueObservingOptionNew
|
||||||
|
context:NULL];
|
||||||
|
_glfw.ns.appleSettings = apple_settings;
|
||||||
|
|
||||||
[[NSNotificationCenter defaultCenter]
|
[[NSNotificationCenter defaultCenter]
|
||||||
addObserver:_glfw.ns.helper
|
addObserver:_glfw.ns.helper
|
||||||
selector:@selector(selectedKeyboardInputSourceChanged:)
|
selector:@selector(selectedKeyboardInputSourceChanged:)
|
||||||
@ -840,6 +856,8 @@ void _glfwPlatformTerminate(void)
|
|||||||
object:nil];
|
object:nil];
|
||||||
[[NSNotificationCenter defaultCenter]
|
[[NSNotificationCenter defaultCenter]
|
||||||
removeObserver:_glfw.ns.helper];
|
removeObserver:_glfw.ns.helper];
|
||||||
|
if (_glfw.ns.appleSettings)
|
||||||
|
[_glfw.ns.appleSettings removeObserver:_glfw.ns.helper forKeyPath:@"AppleSymbolicHotKeys"];
|
||||||
[_glfw.ns.helper release];
|
[_glfw.ns.helper release];
|
||||||
_glfw.ns.helper = nil;
|
_glfw.ns.helper = nil;
|
||||||
}
|
}
|
||||||
@ -849,6 +867,11 @@ void _glfwPlatformTerminate(void)
|
|||||||
if (_glfw.ns.keyDownMonitor)
|
if (_glfw.ns.keyDownMonitor)
|
||||||
[NSEvent removeMonitor:_glfw.ns.keyDownMonitor];
|
[NSEvent removeMonitor:_glfw.ns.keyDownMonitor];
|
||||||
|
|
||||||
|
if (_glfw.ns.appleSettings != nil) {
|
||||||
|
[_glfw.ns.appleSettings release];
|
||||||
|
_glfw.ns.appleSettings = nil;
|
||||||
|
}
|
||||||
|
|
||||||
free(_glfw.ns.clipboardString);
|
free(_glfw.ns.clipboardString);
|
||||||
|
|
||||||
_glfwTerminateNSGL();
|
_glfwTerminateNSGL();
|
||||||
|
|||||||
1
glfw/cocoa_platform.h
vendored
1
glfw/cocoa_platform.h
vendored
@ -176,6 +176,7 @@ typedef struct _GLFWlibraryNS
|
|||||||
id helper;
|
id helper;
|
||||||
id keyUpMonitor;
|
id keyUpMonitor;
|
||||||
id keyDownMonitor;
|
id keyDownMonitor;
|
||||||
|
id appleSettings;
|
||||||
id nibObjects;
|
id nibObjects;
|
||||||
|
|
||||||
char keyName[64];
|
char keyName[64];
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user