Add focusable option
This commit is contained in:
parent
5aecd10502
commit
8eca728e0a
11 changed files with 24 additions and 23 deletions
|
@ -529,8 +529,8 @@ void Window::SetIgnoreMouseEvents(bool ignore) {
|
|||
return window_->SetIgnoreMouseEvents(ignore);
|
||||
}
|
||||
|
||||
void Window::SetIgnoreFocus(bool ignore) {
|
||||
return window_->SetIgnoreFocus(ignore);
|
||||
void Window::SetFocusable(bool focusable) {
|
||||
return window_->SetFocusable(focusable);
|
||||
}
|
||||
|
||||
void Window::CapturePage(mate::Arguments* args) {
|
||||
|
@ -736,7 +736,7 @@ void Window::BuildPrototype(v8::Isolate* isolate,
|
|||
.SetMethod("setDocumentEdited", &Window::SetDocumentEdited)
|
||||
.SetMethod("isDocumentEdited", &Window::IsDocumentEdited)
|
||||
.SetMethod("setIgnoreMouseEvents", &Window::SetIgnoreMouseEvents)
|
||||
.SetMethod("setIgnoreFocus", &Window::SetIgnoreFocus)
|
||||
.SetMethod("setFocusable", &Window::SetFocusable)
|
||||
.SetMethod("focusOnWebView", &Window::FocusOnWebView)
|
||||
.SetMethod("blurWebView", &Window::BlurWebView)
|
||||
.SetMethod("isWebViewFocused", &Window::IsWebViewFocused)
|
||||
|
|
|
@ -146,7 +146,7 @@ class Window : public mate::TrackableObject<Window>,
|
|||
void SetDocumentEdited(bool edited);
|
||||
bool IsDocumentEdited();
|
||||
void SetIgnoreMouseEvents(bool ignore);
|
||||
void SetIgnoreFocus(bool ignore);
|
||||
void SetFocusable(bool focusable);
|
||||
void CapturePage(mate::Arguments* args);
|
||||
void SetProgressBar(double progress);
|
||||
void SetOverlayIcon(const gfx::Image& overlay,
|
||||
|
|
|
@ -282,6 +282,9 @@ bool NativeWindow::IsDocumentEdited() {
|
|||
return false;
|
||||
}
|
||||
|
||||
void NativeWindow::SetFocusable(bool focusable) {
|
||||
}
|
||||
|
||||
void NativeWindow::SetMenu(ui::MenuModel* menu) {
|
||||
}
|
||||
|
||||
|
|
|
@ -155,7 +155,7 @@ class NativeWindow : public base::SupportsUserData,
|
|||
virtual void SetDocumentEdited(bool edited);
|
||||
virtual bool IsDocumentEdited();
|
||||
virtual void SetIgnoreMouseEvents(bool ignore) = 0;
|
||||
virtual void SetIgnoreFocus(bool ignore) = 0;
|
||||
virtual void SetFocusable(bool focusable);
|
||||
virtual void SetMenu(ui::MenuModel* menu);
|
||||
virtual bool HasModalDialog();
|
||||
virtual gfx::NativeWindow GetNativeWindow() = 0;
|
||||
|
|
|
@ -77,7 +77,6 @@ class NativeWindowMac : public NativeWindow {
|
|||
void SetDocumentEdited(bool edited) override;
|
||||
bool IsDocumentEdited() override;
|
||||
void SetIgnoreMouseEvents(bool ignore) override;
|
||||
void SetIgnoreFocus(bool ignore) override;
|
||||
bool HasModalDialog() override;
|
||||
gfx::NativeWindow GetNativeWindow() override;
|
||||
gfx::AcceleratedWidget GetAcceleratedWidget() override;
|
||||
|
|
|
@ -490,6 +490,10 @@ NativeWindowMac::NativeWindowMac(
|
|||
NSWindowCollectionBehaviorIgnoresCycle)];
|
||||
}
|
||||
|
||||
bool focusable;
|
||||
if (options.Get(options::kFocusable, &focusable) && !focusable)
|
||||
[window_ setDisableKeyOrMainWindow:YES];
|
||||
|
||||
// Remove non-transparent corners, see http://git.io/vfonD.
|
||||
if (!has_frame())
|
||||
[window_ setOpaque:NO];
|
||||
|
@ -883,10 +887,6 @@ void NativeWindowMac::SetIgnoreMouseEvents(bool ignore) {
|
|||
[window_ setIgnoresMouseEvents:ignore];
|
||||
}
|
||||
|
||||
void NativeWindowMac::SetIgnoreFocus(bool ignore) {
|
||||
[window_ setDisableKeyOrMainWindow:ignore];
|
||||
}
|
||||
|
||||
bool NativeWindowMac::HasModalDialog() {
|
||||
return [window_ attachedSheet] != nil;
|
||||
}
|
||||
|
|
|
@ -692,10 +692,10 @@ void NativeWindowViews::SetIgnoreMouseEvents(bool ignore) {
|
|||
#endif
|
||||
}
|
||||
|
||||
void NativeWindowViews::SetIgnoreFocus(bool ignore) {
|
||||
void NativeWindowViews::SetFocusable(bool focusable) {
|
||||
#if defined(OS_WIN)
|
||||
LONG ex_style = ::GetWindowLong(GetAcceleratedWidget(), GWL_EXSTYLE);
|
||||
if (ignore)
|
||||
if (focusable)
|
||||
ex_style |= WS_EX_NOACTIVATE;
|
||||
else
|
||||
ex_style &= ~WS_EX_NOACTIVATE;
|
||||
|
|
|
@ -92,7 +92,7 @@ class NativeWindowViews : public NativeWindow,
|
|||
void SetHasShadow(bool has_shadow) override;
|
||||
bool HasShadow() override;
|
||||
void SetIgnoreMouseEvents(bool ignore) override;
|
||||
void SetIgnoreFocus(bool ignore) override;
|
||||
void SetFocusable(bool focusable) override;
|
||||
void SetMenu(ui::MenuModel* menu_model) override;
|
||||
gfx::NativeWindow GetNativeWindow() override;
|
||||
void SetOverlayIcon(const gfx::Image& overlay,
|
||||
|
|
|
@ -75,6 +75,9 @@ const char kBackgroundColor[] = "backgroundColor";
|
|||
// Whether the window should have a shadow.
|
||||
const char kHasShadow[] = "hasShadow";
|
||||
|
||||
// Whether the window can be activated.
|
||||
const char kFocusable[] = "focusable";
|
||||
|
||||
// The WebPreferences.
|
||||
const char kWebPreferences[] = "webPreferences";
|
||||
|
||||
|
|
|
@ -44,6 +44,7 @@ extern const char kDisableAutoHideCursor[];
|
|||
extern const char kStandardWindow[];
|
||||
extern const char kBackgroundColor[];
|
||||
extern const char kHasShadow[];
|
||||
extern const char kFocusable[];
|
||||
extern const char kWebPreferences[];
|
||||
|
||||
// WebPreferences.
|
||||
|
|
|
@ -54,6 +54,8 @@ It creates a new `BrowserWindow` with native properties as set by the `options`.
|
|||
implemented on Linux. Default is `true`.
|
||||
* `closable` Boolean - Whether window is closable. This is not implemented
|
||||
on Linux. Default is `true`.
|
||||
* `focusable` Boolean - Whether the window can be focused. Default is
|
||||
`true`.
|
||||
* `alwaysOnTop` Boolean - Whether the window should always stay on top of
|
||||
other windows. Default is `false`.
|
||||
* `fullscreen` Boolean - Whether the window should show in fullscreen. When
|
||||
|
@ -953,17 +955,10 @@ All mouse events happened in this window will be passed to the window below
|
|||
this window, but if this window has focus, it will still receive keyboard
|
||||
events.
|
||||
|
||||
### `win.setIgnoreFocus(ignore)` _OS X_ _Windows_
|
||||
### `win.setActivatable(activatable)` _Windows_
|
||||
|
||||
* `ignore` Boolean
|
||||
* `activatable` Boolean
|
||||
|
||||
Prevents the window from getting focus.
|
||||
|
||||
On OS X this API has to be called before the window shows:
|
||||
|
||||
```javascript
|
||||
let win = new BrowserWindow({show: false})
|
||||
win.setIgnoreFocus(true)
|
||||
```
|
||||
Changes whether the window can be activated.
|
||||
|
||||
[blink-feature-string]: https://cs.chromium.org/chromium/src/third_party/WebKit/Source/platform/RuntimeEnabledFeatures.in
|
||||
|
|
Loading…
Reference in a new issue