Support the "desktop" window type on Mac OS X
Adds the desktop window type referenced in https://github.com/atom/electron/issues/2899 for compatiblity with the linux version. Note that on Mac OS X, the desktop window cannot receive input events (seems to be a limitation of being behind the desktop). In this diff I also removed the `standardWindow` option from the docs, in favor of an additional `textured` value for window `type` on Mac OS X. The old `standardWindow` option continues to work, but seemed more confusing. If this seems like a bad idea, I can revert that change.
This commit is contained in:
parent
52e34ca0f9
commit
d427ae1030
2 changed files with 43 additions and 10 deletions
|
@ -211,6 +211,8 @@ bool ScopedDisableResize::disable_resize_ = false;
|
||||||
}
|
}
|
||||||
@property BOOL acceptsFirstMouse;
|
@property BOOL acceptsFirstMouse;
|
||||||
@property BOOL disableAutoHideCursor;
|
@property BOOL disableAutoHideCursor;
|
||||||
|
@property BOOL disableKeyOrMainWindow;
|
||||||
|
|
||||||
- (void)setShell:(atom::NativeWindowMac*)shell;
|
- (void)setShell:(atom::NativeWindowMac*)shell;
|
||||||
- (void)setEnableLargerThanScreen:(bool)enable;
|
- (void)setEnableLargerThanScreen:(bool)enable;
|
||||||
@end
|
@end
|
||||||
|
@ -257,6 +259,16 @@ bool ScopedDisableResize::disable_resize_ = false;
|
||||||
return [children filteredArrayUsingPredicate:predicate];
|
return [children filteredArrayUsingPredicate:predicate];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (BOOL)canBecomeMainWindow
|
||||||
|
{
|
||||||
|
return !self.disableKeyOrMainWindow;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)canBecomeKeyWindow
|
||||||
|
{
|
||||||
|
return !self.disableKeyOrMainWindow;
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface ControlRegionView : NSView
|
@interface ControlRegionView : NSView
|
||||||
|
@ -330,8 +342,6 @@ NativeWindowMac::NativeWindowMac(
|
||||||
width,
|
width,
|
||||||
height);
|
height);
|
||||||
|
|
||||||
bool useStandardWindow = true;
|
|
||||||
options.Get(options::kStandardWindow, &useStandardWindow);
|
|
||||||
bool resizable = true;
|
bool resizable = true;
|
||||||
options.Get(options::kResizable, &resizable);
|
options.Get(options::kResizable, &resizable);
|
||||||
|
|
||||||
|
@ -340,6 +350,17 @@ NativeWindowMac::NativeWindowMac(
|
||||||
if (base::mac::IsOSYosemiteOrLater())
|
if (base::mac::IsOSYosemiteOrLater())
|
||||||
options.Get(options::kTitleBarStyle, &titleBarStyle);
|
options.Get(options::kTitleBarStyle, &titleBarStyle);
|
||||||
|
|
||||||
|
std::string windowType;
|
||||||
|
options.Get(options::kType, &windowType);
|
||||||
|
|
||||||
|
bool useStandardWindow = true;
|
||||||
|
// eventually deprecate separate "standardWindow" option in favor of
|
||||||
|
// standard / textured window types
|
||||||
|
options.Get(options::kStandardWindow, &useStandardWindow);
|
||||||
|
if (windowType == "textured") {
|
||||||
|
useStandardWindow = false;
|
||||||
|
}
|
||||||
|
|
||||||
NSUInteger styleMask = NSTitledWindowMask | NSClosableWindowMask |
|
NSUInteger styleMask = NSTitledWindowMask | NSClosableWindowMask |
|
||||||
NSMiniaturizableWindowMask;
|
NSMiniaturizableWindowMask;
|
||||||
if (!useStandardWindow || transparent() || !has_frame()) {
|
if (!useStandardWindow || transparent() || !has_frame()) {
|
||||||
|
@ -371,6 +392,15 @@ NativeWindowMac::NativeWindowMac(
|
||||||
[window_ setBackgroundColor:[NSColor clearColor]];
|
[window_ setBackgroundColor:[NSColor clearColor]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (windowType == "desktop") {
|
||||||
|
[window_ setLevel:kCGDesktopWindowLevel - 1];
|
||||||
|
[window_ setDisableKeyOrMainWindow: YES];
|
||||||
|
[window_ setCollectionBehavior:
|
||||||
|
(NSWindowCollectionBehaviorCanJoinAllSpaces |
|
||||||
|
NSWindowCollectionBehaviorStationary |
|
||||||
|
NSWindowCollectionBehaviorIgnoresCycle)];
|
||||||
|
}
|
||||||
|
|
||||||
// Remove non-transparent corners, see http://git.io/vfonD.
|
// Remove non-transparent corners, see http://git.io/vfonD.
|
||||||
if (!has_frame())
|
if (!has_frame())
|
||||||
[window_ setOpaque:NO];
|
[window_ setOpaque:NO];
|
||||||
|
|
|
@ -66,11 +66,14 @@ It creates a new `BrowserWindow` with native properties as set by the `options`.
|
||||||
* `darkTheme` Boolean - Forces using dark theme for the window, only works on
|
* `darkTheme` Boolean - Forces using dark theme for the window, only works on
|
||||||
some GTK+3 desktop environments.
|
some GTK+3 desktop environments.
|
||||||
* `transparent` Boolean - Makes the window [transparent](frameless-window.md).
|
* `transparent` Boolean - Makes the window [transparent](frameless-window.md).
|
||||||
* `type` String - Specifies the type of the window, possible types are
|
* `type` String - Specifies the type of the window, which applies
|
||||||
`desktop`, `dock`, `toolbar`, `splash`, `notification`. This only works on
|
additional platform-specific properties.
|
||||||
Linux.
|
- On Linux, possible types are `desktop`, `dock`, `toolbar`, `splash`, `notification`.
|
||||||
* `standardWindow` Boolean - Uses the OS X's standard window instead of the
|
- On Mac OS X:
|
||||||
textured window. Defaults to `true`.
|
- `textured`: Adds metal gradient appearance (NSTexturedBackgroundWindowMask)
|
||||||
|
- `desktop`: Places the window at the desktop background window level (kCGDesktopWindowLevel - 1).
|
||||||
|
Note that the window will not receive focus, keyboard or mouse events, but
|
||||||
|
you can use `globalShortcut` to receive input sparingly.
|
||||||
* `titleBarStyle` String, OS X - specifies the style of window title bar.
|
* `titleBarStyle` String, OS X - specifies the style of window title bar.
|
||||||
This option is supported on OS X 10.10 Yosemite and newer. There are three
|
This option is supported on OS X 10.10 Yosemite and newer. There are three
|
||||||
possible values:
|
possible values:
|
||||||
|
@ -86,11 +89,11 @@ It creates a new `BrowserWindow` with native properties as set by the `options`.
|
||||||
is `true`.
|
is `true`.
|
||||||
* `preload` String - Specifies a script that will be loaded before other
|
* `preload` String - Specifies a script that will be loaded before other
|
||||||
scripts run in the page. This script will always have access to node APIs
|
scripts run in the page. This script will always have access to node APIs
|
||||||
no matter whether node integration is turned on or off. The value should
|
no matter whether node integration is turned on or off. The value should
|
||||||
be the absolute file path to the script.
|
be the absolute file path to the script.
|
||||||
|
|
||||||
When node integration is turned off, the preload script can reintroduce
|
When node integration is turned off, the preload script can reintroduce
|
||||||
Node global symbols back to the global scope. See example
|
Node global symbols back to the global scope. See example
|
||||||
[here](process.md#event-loaded).
|
[here](process.md#event-loaded).
|
||||||
* `partition` String - Sets the session used by the page. If `partition`
|
* `partition` String - Sets the session used by the page. If `partition`
|
||||||
starts with `persist:`, the page will use a persistent session available to
|
starts with `persist:`, the page will use a persistent session available to
|
||||||
|
|
Loading…
Reference in a new issue