mac: Add win.disable/enable/isEnabled() API

This commit is contained in:
Cheng Zhao 2016-06-17 17:38:44 +09:00
parent 214dd97165
commit 1a4b4a65c9
7 changed files with 76 additions and 0 deletions

View file

@ -293,6 +293,18 @@ bool Window::IsVisible() {
return window_->IsVisible();
}
void Window::Disable() {
window_->Disable();
}
void Window::Enable() {
window_->Enable();
}
bool Window::IsEnabled() {
return window_->IsEnabled();
}
void Window::Maximize() {
window_->Maximize();
}
@ -726,6 +738,9 @@ void Window::BuildPrototype(v8::Isolate* isolate,
.SetMethod("showInactive", &Window::ShowInactive)
.SetMethod("hide", &Window::Hide)
.SetMethod("isVisible", &Window::IsVisible)
.SetMethod("enable", &Window::Enable)
.SetMethod("disable", &Window::Disable)
.SetMethod("isEnabled", &Window::IsEnabled)
.SetMethod("maximize", &Window::Maximize)
.SetMethod("unmaximize", &Window::Unmaximize)
.SetMethod("isMaximized", &Window::IsMaximized)

View file

@ -95,6 +95,9 @@ class Window : public mate::TrackableObject<Window>,
void ShowInactive();
void Hide();
bool IsVisible();
void Disable();
void Enable();
bool IsEnabled();
void Maximize();
void Unmaximize();
bool IsMaximized();

View file

@ -97,6 +97,9 @@ class NativeWindow : public base::SupportsUserData,
virtual void ShowInactive() = 0;
virtual void Hide() = 0;
virtual bool IsVisible() = 0;
virtual void Disable() = 0;
virtual void Enable() = 0;
virtual bool IsEnabled() = 0;
virtual void Maximize() = 0;
virtual void Unmaximize() = 0;
virtual bool IsMaximized() = 0;

View file

@ -34,6 +34,9 @@ class NativeWindowMac : public NativeWindow {
void ShowInactive() override;
void Hide() override;
bool IsVisible() override;
void Disable() override;
void Enable() override;
bool IsEnabled() override;
void Maximize() override;
void Unmaximize() override;
bool IsMaximized() override;

View file

@ -279,6 +279,7 @@ bool ScopedDisableResize::disable_resize_ = false;
@property BOOL acceptsFirstMouse;
@property BOOL disableAutoHideCursor;
@property BOOL disableKeyOrMainWindow;
@property BOOL disableMouseEvents;
- (void)setShell:(atom::NativeWindowMac*)shell;
- (void)setEnableLargerThanScreen:(bool)enable;
@ -348,6 +349,29 @@ bool ScopedDisableResize::disable_resize_ = false;
return !self.disableKeyOrMainWindow;
}
- (void)sendEvent:(NSEvent*)event {
// Drop all mouse events.
if (self.disableMouseEvents) {
switch([event type]) {
case NSLeftMouseUp:
case NSLeftMouseDown:
case NSRightMouseDown:
case NSRightMouseUp:
case NSOtherMouseUp:
case NSLeftMouseDragged:
case NSRightMouseDragged:
case NSOtherMouseDragged:
case NSMouseMoved:
case NSScrollWheel:
return;
default:
break;
}
}
[super sendEvent:event];
}
@end
@interface ControlRegionView : NSView
@ -496,6 +520,7 @@ NativeWindowMac::NativeWindowMac(
backing:NSBackingStoreBuffered
defer:YES]);
[window_ setShell:this];
[window_ setDisableMouseEvents:NO];
[window_ setEnableLargerThanScreen:enable_larger_than_screen()];
window_delegate_.reset([[AtomNSWindowDelegate alloc] initWithShell:this]);
@ -647,6 +672,20 @@ bool NativeWindowMac::IsVisible() {
return [window_ isVisible];
}
void NativeWindowMac::Disable() {
[window_ setDisableKeyOrMainWindow:YES];
[window_ setDisableMouseEvents:YES];
}
void NativeWindowMac::Enable() {
[window_ setDisableKeyOrMainWindow:NO];
[window_ setDisableMouseEvents:NO];
}
bool NativeWindowMac::IsEnabled() {
return ![window_ disableMouseEvents];
}
void NativeWindowMac::Maximize() {
if (IsMaximized())
return;

View file

@ -373,6 +373,16 @@ bool NativeWindowViews::IsVisible() {
return window_->IsVisible();
}
void NativeWindowViews::Disable() {
}
void NativeWindowViews::Enable() {
}
bool NativeWindowViews::IsEnabled() {
return true;
}
void NativeWindowViews::Maximize() {
if (IsVisible())
window_->Maximize();

View file

@ -54,6 +54,9 @@ class NativeWindowViews : public NativeWindow,
void ShowInactive() override;
void Hide() override;
bool IsVisible() override;
void Disable() override;
void Enable() override;
bool IsEnabled() override;
void Maximize() override;
void Unmaximize() override;
bool IsMaximized() override;