mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2024-10-01 01:26:01 -04:00
Don't rely on AppleInterfaceStyle for theme switching (#8615)
* Fix #7615 - Don't rely on AppleInterfaceStyle preference key for dark mode detection, as it's not always correct
This commit is contained in:
parent
d90b32a7c9
commit
1e770e3a71
@ -38,10 +38,7 @@
|
|||||||
name:NSWorkspaceSessionDidResignActiveNotification
|
name:NSWorkspaceSessionDidResignActiveNotification
|
||||||
object:nil];
|
object:nil];
|
||||||
|
|
||||||
[[NSDistributedNotificationCenter defaultCenter] addObserver:self
|
[NSApp addObserver:self forKeyPath:@"effectiveAppearance" options:NSKeyValueObservingOptionNew context:nil];
|
||||||
selector:@selector(interfaceThemeChanged:)
|
|
||||||
name:@"AppleInterfaceThemeChangedNotification"
|
|
||||||
object:nil];
|
|
||||||
|
|
||||||
// Unfortunately, there is no notification for a wallpaper change, which affects
|
// Unfortunately, there is no notification for a wallpaper change, which affects
|
||||||
// the status bar colour on macOS Big Sur, but we can at least subscribe to this.
|
// the status bar colour on macOS Big Sur, but we can at least subscribe to this.
|
||||||
@ -67,14 +64,29 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
- (void) observeValueForKeyPath:(NSString *)keyPath
|
||||||
// Light / dark theme toggled
|
ofObject:(id)object
|
||||||
//
|
change:(NSDictionary<NSKeyValueChangeKey,id> *)change
|
||||||
- (void) interfaceThemeChanged:(NSNotification*) notification
|
context:(void *)context
|
||||||
{
|
{
|
||||||
Q_UNUSED(notification);
|
Q_UNUSED(object)
|
||||||
if (m_appkit) {
|
Q_UNUSED(change)
|
||||||
emit m_appkit->interfaceThemeChanged();
|
Q_UNUSED(context)
|
||||||
|
if ([keyPath isEqualToString:@"effectiveAppearance"]) {
|
||||||
|
if (m_appkit) {
|
||||||
|
|
||||||
|
void (^emitBlock)(void) = ^{
|
||||||
|
emit m_appkit->interfaceThemeChanged();
|
||||||
|
};
|
||||||
|
|
||||||
|
if(@available(macOS 11.0, *)) {
|
||||||
|
// Not sure why exactly this call is needed, but Apple sample code uses it so it's best to use it here too
|
||||||
|
[NSApp.effectiveAppearance performAsCurrentDrawingAppearance:emitBlock];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
emitBlock();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,10 +139,7 @@
|
|||||||
//
|
//
|
||||||
- (bool) isDarkMode
|
- (bool) isDarkMode
|
||||||
{
|
{
|
||||||
NSDictionary* dict = [[NSUserDefaults standardUserDefaults] persistentDomainForName:NSGlobalDomain];
|
return [NSApp.effectiveAppearance.name isEqualToString:NSAppearanceNameDarkAqua];
|
||||||
id style = [dict objectForKey:@"AppleInterfaceStyle"];
|
|
||||||
return ( style && [style isKindOfClass:[NSString class]]
|
|
||||||
&& NSOrderedSame == [style caseInsensitiveCompare:@"dark"] );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user