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 macOS it sets the NSWindow's sharingType to NSWindowSharingNone.
On Windows it calls SetWindowDisplayAffinity with `WDA_MONITOR`. On Windows it calls SetWindowDisplayAffinity with `WDA_MONITOR`.
#### `win.setFocusable(focusable)` _Windows_ #### `win.setFocusable(focusable)` _macOS_ _Windows_
* `focusable` Boolean * `focusable` Boolean
Changes whether the window can be focused. Changes whether the window can be focused.
On macOS it does not remove the focus from the window.
#### `win.setParentWindow(parent)` #### `win.setParentWindow(parent)`
* `parent` BrowserWindow * `parent` BrowserWindow

View file

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

View file

@ -1076,6 +1076,13 @@ void NativeWindowMac::SetContentProtection(bool enable) {
setSharingType:enable ? NSWindowSharingNone : NSWindowSharingReadOnly]; 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) { void NativeWindowMac::AddBrowserView(NativeBrowserView* view) {
[CATransaction begin]; [CATransaction begin];
[CATransaction setDisableActions:YES]; [CATransaction setDisableActions:YES];