mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 11:27:35 +00:00
Ladybird: Add a menu item to the AppKit chrome to choose a color scheme
This lets the user choose a color scheme which differs from the active system theme. Upon changing the color scheme, the scheme is broadcast to all active tabs, and will be used in new tabs.
This commit is contained in:
parent
3fc0c21b6c
commit
6e3177e2fc
6 changed files with 99 additions and 6 deletions
|
@ -10,6 +10,7 @@
|
|||
#include <AK/StringView.h>
|
||||
#include <AK/URL.h>
|
||||
#include <Browser/CookieJar.h>
|
||||
#include <LibWeb/CSS/PreferredColorScheme.h>
|
||||
#include <LibWeb/HTML/ActivateTab.h>
|
||||
|
||||
#import <System/Cocoa.h>
|
||||
|
@ -31,5 +32,6 @@
|
|||
|
||||
- (Browser::CookieJar&)cookieJar;
|
||||
- (Optional<StringView> const&)webdriverContentIPCPath;
|
||||
- (Web::CSS::PreferredColorScheme)preferredColorScheme;
|
||||
|
||||
@end
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include <BrowserSettings/Defaults.h>
|
||||
|
||||
#import <Application/ApplicationDelegate.h>
|
||||
#import <UI/LadybirdWebView.h>
|
||||
#import <UI/Tab.h>
|
||||
#import <UI/TabController.h>
|
||||
#import <Utilities/URL.h>
|
||||
|
@ -24,6 +25,8 @@
|
|||
Optional<Browser::CookieJar> m_cookie_jar;
|
||||
|
||||
Optional<StringView> m_webdriver_content_ipc_path;
|
||||
|
||||
Web::CSS::PreferredColorScheme m_preferred_color_scheme;
|
||||
}
|
||||
|
||||
@property (nonatomic, strong) NSMutableArray<TabController*>* managed_tabs;
|
||||
|
@ -68,6 +71,8 @@
|
|||
m_webdriver_content_ipc_path = webdriver_content_ipc_path;
|
||||
}
|
||||
|
||||
m_preferred_color_scheme = Web::CSS::PreferredColorScheme::Auto;
|
||||
|
||||
// Reduce the tooltip delay, as the default delay feels quite long.
|
||||
[[NSUserDefaults standardUserDefaults] setObject:@100 forKey:@"NSInitialToolTipDelay"];
|
||||
}
|
||||
|
@ -119,6 +124,11 @@
|
|||
return m_webdriver_content_ipc_path;
|
||||
}
|
||||
|
||||
- (Web::CSS::PreferredColorScheme)preferredColorScheme
|
||||
{
|
||||
return m_preferred_color_scheme;
|
||||
}
|
||||
|
||||
#pragma mark - Private methods
|
||||
|
||||
- (void)closeCurrentTab:(id)sender
|
||||
|
@ -134,6 +144,32 @@
|
|||
[controller focusLocationToolbarItem];
|
||||
}
|
||||
|
||||
- (void)setAutoPreferredColorScheme:(id)sender
|
||||
{
|
||||
m_preferred_color_scheme = Web::CSS::PreferredColorScheme::Auto;
|
||||
[self broadcastPreferredColorSchemeUpdate];
|
||||
}
|
||||
|
||||
- (void)setDarkPreferredColorScheme:(id)sender
|
||||
{
|
||||
m_preferred_color_scheme = Web::CSS::PreferredColorScheme::Dark;
|
||||
[self broadcastPreferredColorSchemeUpdate];
|
||||
}
|
||||
|
||||
- (void)setLightPreferredColorScheme:(id)sender
|
||||
{
|
||||
m_preferred_color_scheme = Web::CSS::PreferredColorScheme::Light;
|
||||
[self broadcastPreferredColorSchemeUpdate];
|
||||
}
|
||||
|
||||
- (void)broadcastPreferredColorSchemeUpdate
|
||||
{
|
||||
for (TabController* controller in self.managed_tabs) {
|
||||
auto* tab = (Tab*)[controller window];
|
||||
[[tab web_view] setPreferredColorScheme:m_preferred_color_scheme];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)clearHistory:(id)sender
|
||||
{
|
||||
for (TabController* controller in self.managed_tabs) {
|
||||
|
@ -229,6 +265,25 @@
|
|||
auto* menu = [[NSMenuItem alloc] init];
|
||||
auto* submenu = [[NSMenu alloc] initWithTitle:@"View"];
|
||||
|
||||
auto* color_scheme_menu = [[NSMenu alloc] init];
|
||||
[color_scheme_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Auto"
|
||||
action:@selector(setAutoPreferredColorScheme:)
|
||||
keyEquivalent:@""]];
|
||||
[color_scheme_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Dark"
|
||||
action:@selector(setDarkPreferredColorScheme:)
|
||||
keyEquivalent:@""]];
|
||||
[color_scheme_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Light"
|
||||
action:@selector(setLightPreferredColorScheme:)
|
||||
keyEquivalent:@""]];
|
||||
|
||||
auto* color_scheme_menu_item = [[NSMenuItem alloc] initWithTitle:@"Color Scheme"
|
||||
action:nil
|
||||
keyEquivalent:@""];
|
||||
[color_scheme_menu_item setSubmenu:color_scheme_menu];
|
||||
|
||||
[submenu addItem:color_scheme_menu_item];
|
||||
[submenu addItem:[NSMenuItem separatorItem]];
|
||||
|
||||
[menu setSubmenu:submenu];
|
||||
return menu;
|
||||
}
|
||||
|
@ -310,4 +365,21 @@
|
|||
return YES;
|
||||
}
|
||||
|
||||
- (BOOL)validateMenuItem:(NSMenuItem*)item
|
||||
{
|
||||
using enum Web::CSS::PreferredColorScheme;
|
||||
|
||||
if ([item action] == @selector(setAutoPreferredColorScheme:)) {
|
||||
[item setState:(m_preferred_color_scheme == Auto) ? NSControlStateValueOn : NSControlStateValueOff];
|
||||
}
|
||||
if ([item action] == @selector(setDarkPreferredColorScheme:)) {
|
||||
[item setState:(m_preferred_color_scheme == Dark) ? NSControlStateValueOn : NSControlStateValueOff];
|
||||
}
|
||||
if ([item action] == @selector(setLightPreferredColorScheme:)) {
|
||||
[item setState:(m_preferred_color_scheme == Light) ? NSControlStateValueOn : NSControlStateValueOff];
|
||||
}
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue