feat: Implement BrowserWindow.setFocusable on macOS (#19033)

It was not implemented on Mac despite being available as a constructor
option. Implementation already exists on Windows. Linux case can be
separately.

https://github.com/electron/electron/issues/19032

Notes: Implemented BrowserWindow.setFocusable on macOS.
This commit is contained in:
Julien Isorce 2019-07-07 19:34:18 -07:00 committed by Cheng Zhao
parent e6a7a84834
commit 09c3277b42
3 changed files with 11 additions and 1 deletions

View file

@ -1551,12 +1551,14 @@ Prevents the window contents from being captured by other apps.
On macOS it sets the NSWindow's sharingType to NSWindowSharingNone.
On Windows it calls SetWindowDisplayAffinity with `WDA_MONITOR`.
#### `win.setFocusable(focusable)` _Windows_
#### `win.setFocusable(focusable)` _macOS_ _Windows_
* `focusable` Boolean
Changes whether the window can be focused.
On macOS it does not remove the focus from the window.
#### `win.setParentWindow(parent)`
* `parent` BrowserWindow

View file

@ -104,6 +104,7 @@ class NativeWindowMac : public NativeWindow {
bool IsDocumentEdited() override;
void SetIgnoreMouseEvents(bool ignore, bool forward) override;
void SetContentProtection(bool enable) override;
void SetFocusable(bool focusable) override;
void AddBrowserView(NativeBrowserView* browser_view) override;
void RemoveBrowserView(NativeBrowserView* browser_view) override;
void SetParentWindow(NativeWindow* parent) override;

View file

@ -1076,6 +1076,13 @@ void NativeWindowMac::SetContentProtection(bool enable) {
setSharingType:enable ? NSWindowSharingNone : NSWindowSharingReadOnly];
}
void NativeWindowMac::SetFocusable(bool focusable) {
// No known way to unfocus the window if it had the focus. Here we do not
// want to call Focus(false) because it moves the window to the back, i.e.
// at the bottom in term of z-order.
[window_ setDisableKeyOrMainWindow:!focusable];
}
void NativeWindowMac::AddBrowserView(NativeBrowserView* view) {
[CATransaction begin];
[CATransaction setDisableActions:YES];