Merge pull request #4646 from phamdaniel/dark-mode
Add API to check OSX's Dark theme
This commit is contained in:
commit
0e2ac2d802
8 changed files with 44 additions and 0 deletions
|
@ -283,6 +283,12 @@ void App::OnGpuProcessCrashed(base::TerminationStatus exit_code) {
|
||||||
Emit("gpu-process-crashed");
|
Emit("gpu-process-crashed");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(OS_MACOSX)
|
||||||
|
void App::OnPlatformThemeChanged() {
|
||||||
|
Emit("platform-theme-changed");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
base::FilePath App::GetPath(mate::Arguments* args, const std::string& name) {
|
base::FilePath App::GetPath(mate::Arguments* args, const std::string& name) {
|
||||||
bool succeed = false;
|
bool succeed = false;
|
||||||
base::FilePath path;
|
base::FilePath path;
|
||||||
|
@ -371,6 +377,8 @@ mate::ObjectTemplateBuilder App::GetObjectTemplateBuilder(
|
||||||
#if defined(OS_MACOSX)
|
#if defined(OS_MACOSX)
|
||||||
.SetMethod("hide", base::Bind(&Browser::Hide, browser))
|
.SetMethod("hide", base::Bind(&Browser::Hide, browser))
|
||||||
.SetMethod("show", base::Bind(&Browser::Show, browser))
|
.SetMethod("show", base::Bind(&Browser::Show, browser))
|
||||||
|
.SetMethod("isDarkMode",
|
||||||
|
base::Bind(&Browser::IsDarkMode, browser))
|
||||||
#endif
|
#endif
|
||||||
#if defined(OS_WIN)
|
#if defined(OS_WIN)
|
||||||
.SetMethod("setUserTasks",
|
.SetMethod("setUserTasks",
|
||||||
|
|
|
@ -71,6 +71,10 @@ class App : public AtomBrowserClient::Delegate,
|
||||||
// content::GpuDataManagerObserver:
|
// content::GpuDataManagerObserver:
|
||||||
void OnGpuProcessCrashed(base::TerminationStatus exit_code) override;
|
void OnGpuProcessCrashed(base::TerminationStatus exit_code) override;
|
||||||
|
|
||||||
|
#if defined(OS_MACOSX)
|
||||||
|
void OnPlatformThemeChanged() override;
|
||||||
|
#endif
|
||||||
|
|
||||||
// mate::Wrappable:
|
// mate::Wrappable:
|
||||||
mate::ObjectTemplateBuilder GetObjectTemplateBuilder(
|
mate::ObjectTemplateBuilder GetObjectTemplateBuilder(
|
||||||
v8::Isolate* isolate) override;
|
v8::Isolate* isolate) override;
|
||||||
|
|
|
@ -181,4 +181,8 @@ void Browser::OnWindowAllClosed() {
|
||||||
FOR_EACH_OBSERVER(BrowserObserver, observers_, OnWindowAllClosed());
|
FOR_EACH_OBSERVER(BrowserObserver, observers_, OnWindowAllClosed());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Browser::PlatformThemeChanged() {
|
||||||
|
FOR_EACH_OBSERVER(BrowserObserver, observers_, OnPlatformThemeChanged());
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace atom
|
} // namespace atom
|
||||||
|
|
|
@ -83,6 +83,9 @@ class Browser : public WindowListObserver {
|
||||||
// Show the application.
|
// Show the application.
|
||||||
void Show();
|
void Show();
|
||||||
|
|
||||||
|
// Check if the system is in Dark Mode.
|
||||||
|
bool IsDarkMode();
|
||||||
|
|
||||||
// Bounce the dock icon.
|
// Bounce the dock icon.
|
||||||
enum BounceType {
|
enum BounceType {
|
||||||
BOUNCE_CRITICAL = 0,
|
BOUNCE_CRITICAL = 0,
|
||||||
|
@ -142,6 +145,9 @@ class Browser : public WindowListObserver {
|
||||||
// Request basic auth login.
|
// Request basic auth login.
|
||||||
void RequestLogin(LoginHandler* login_handler);
|
void RequestLogin(LoginHandler* login_handler);
|
||||||
|
|
||||||
|
// Tell the application that plaform's theme changed.
|
||||||
|
void PlatformThemeChanged();
|
||||||
|
|
||||||
void AddObserver(BrowserObserver* obs) {
|
void AddObserver(BrowserObserver* obs) {
|
||||||
observers_.AddObserver(obs);
|
observers_.AddObserver(obs);
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,11 @@ void Browser::Show() {
|
||||||
[[AtomApplication sharedApplication] unhide:nil];
|
[[AtomApplication sharedApplication] unhide:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Browser::IsDarkMode() {
|
||||||
|
NSString *mode = [[NSUserDefaults standardUserDefaults] stringForKey:@"AppleInterfaceStyle"];
|
||||||
|
return [mode isEqualToString: @"Dark"];
|
||||||
|
}
|
||||||
|
|
||||||
void Browser::AddRecentDocument(const base::FilePath& path) {
|
void Browser::AddRecentDocument(const base::FilePath& path) {
|
||||||
NSString* path_string = base::mac::FilePathToNSString(path);
|
NSString* path_string = base::mac::FilePathToNSString(path);
|
||||||
if (!path_string)
|
if (!path_string)
|
||||||
|
|
|
@ -45,6 +45,8 @@ class BrowserObserver {
|
||||||
// The browser requests HTTP login.
|
// The browser requests HTTP login.
|
||||||
virtual void OnLogin(LoginHandler* login_handler) {}
|
virtual void OnLogin(LoginHandler* login_handler) {}
|
||||||
|
|
||||||
|
virtual void OnPlatformThemeChanged() {}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual ~BrowserObserver() {}
|
virtual ~BrowserObserver() {}
|
||||||
};
|
};
|
||||||
|
|
|
@ -24,6 +24,9 @@
|
||||||
// Don't add the "Enter Full Screen" menu item automatically.
|
// Don't add the "Enter Full Screen" menu item automatically.
|
||||||
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"NSFullScreenMenuItemEverywhere"];
|
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"NSFullScreenMenuItemEverywhere"];
|
||||||
|
|
||||||
|
// Add observer to monitor the system's Dark Mode theme.
|
||||||
|
[[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(platformThemeChanged:) name:@"AppleInterfaceThemeChangedNotification" object:nil];
|
||||||
|
|
||||||
atom::Browser::Get()->WillFinishLaunching();
|
atom::Browser::Get()->WillFinishLaunching();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,4 +62,8 @@
|
||||||
return flag;
|
return flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)platformThemeChanged:(NSNotification *)notify {
|
||||||
|
atom::Browser::Get()->PlatformThemeChanged();
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -228,6 +228,10 @@ app.on('login', function(event, webContents, request, authInfo, callback) {
|
||||||
|
|
||||||
Emitted when the gpu process crashes.
|
Emitted when the gpu process crashes.
|
||||||
|
|
||||||
|
### Event: 'platform-theme-changed' _OS X_
|
||||||
|
|
||||||
|
Emitted when the system's Dark Mode theme is toggled.
|
||||||
|
|
||||||
## Methods
|
## Methods
|
||||||
|
|
||||||
The `app` object has the following methods:
|
The `app` object has the following methods:
|
||||||
|
@ -461,6 +465,10 @@ if (browserOptions.transparent) {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### `app.isDarkMode()` _OS X_
|
||||||
|
|
||||||
|
This method returns `true` if the system is in Dark Mode, and `false` otherwise.
|
||||||
|
|
||||||
### `app.commandLine.appendSwitch(switch[, value])`
|
### `app.commandLine.appendSwitch(switch[, value])`
|
||||||
|
|
||||||
Append a switch (with optional `value`) to Chromium's command line.
|
Append a switch (with optional `value`) to Chromium's command line.
|
||||||
|
|
Loading…
Reference in a new issue