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

View file

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

View file

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

View file

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

View file

@ -279,6 +279,7 @@ bool ScopedDisableResize::disable_resize_ = false;
@property BOOL acceptsFirstMouse; @property BOOL acceptsFirstMouse;
@property BOOL disableAutoHideCursor; @property BOOL disableAutoHideCursor;
@property BOOL disableKeyOrMainWindow; @property BOOL disableKeyOrMainWindow;
@property BOOL disableMouseEvents;
- (void)setShell:(atom::NativeWindowMac*)shell; - (void)setShell:(atom::NativeWindowMac*)shell;
- (void)setEnableLargerThanScreen:(bool)enable; - (void)setEnableLargerThanScreen:(bool)enable;
@ -348,6 +349,29 @@ bool ScopedDisableResize::disable_resize_ = false;
return !self.disableKeyOrMainWindow; 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 @end
@interface ControlRegionView : NSView @interface ControlRegionView : NSView
@ -496,6 +520,7 @@ NativeWindowMac::NativeWindowMac(
backing:NSBackingStoreBuffered backing:NSBackingStoreBuffered
defer:YES]); defer:YES]);
[window_ setShell:this]; [window_ setShell:this];
[window_ setDisableMouseEvents:NO];
[window_ setEnableLargerThanScreen:enable_larger_than_screen()]; [window_ setEnableLargerThanScreen:enable_larger_than_screen()];
window_delegate_.reset([[AtomNSWindowDelegate alloc] initWithShell:this]); window_delegate_.reset([[AtomNSWindowDelegate alloc] initWithShell:this]);
@ -647,6 +672,20 @@ bool NativeWindowMac::IsVisible() {
return [window_ 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() { void NativeWindowMac::Maximize() {
if (IsMaximized()) if (IsMaximized())
return; return;

View file

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

View file

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