From 1a4b4a65c96ece6225edddee28560d372b87c9ed Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Fri, 17 Jun 2016 17:38:44 +0900 Subject: [PATCH] mac: Add win.disable/enable/isEnabled() API --- atom/browser/api/atom_api_window.cc | 15 +++++++++++ atom/browser/api/atom_api_window.h | 3 +++ atom/browser/native_window.h | 3 +++ atom/browser/native_window_mac.h | 3 +++ atom/browser/native_window_mac.mm | 39 +++++++++++++++++++++++++++++ atom/browser/native_window_views.cc | 10 ++++++++ atom/browser/native_window_views.h | 3 +++ 7 files changed, 76 insertions(+) diff --git a/atom/browser/api/atom_api_window.cc b/atom/browser/api/atom_api_window.cc index 3e1bb6a3464f..30427d536be0 100644 --- a/atom/browser/api/atom_api_window.cc +++ b/atom/browser/api/atom_api_window.cc @@ -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) diff --git a/atom/browser/api/atom_api_window.h b/atom/browser/api/atom_api_window.h index 0cc238afb07d..3e53cbf65ce5 100644 --- a/atom/browser/api/atom_api_window.h +++ b/atom/browser/api/atom_api_window.h @@ -95,6 +95,9 @@ class Window : public mate::TrackableObject, void ShowInactive(); void Hide(); bool IsVisible(); + void Disable(); + void Enable(); + bool IsEnabled(); void Maximize(); void Unmaximize(); bool IsMaximized(); diff --git a/atom/browser/native_window.h b/atom/browser/native_window.h index 8dd3dc5f334b..a2adb5505c58 100644 --- a/atom/browser/native_window.h +++ b/atom/browser/native_window.h @@ -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; diff --git a/atom/browser/native_window_mac.h b/atom/browser/native_window_mac.h index 2e0b769d2adc..0a783c350e17 100644 --- a/atom/browser/native_window_mac.h +++ b/atom/browser/native_window_mac.h @@ -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; diff --git a/atom/browser/native_window_mac.mm b/atom/browser/native_window_mac.mm index 8dd6457f87fb..bad2fc7f2436 100644 --- a/atom/browser/native_window_mac.mm +++ b/atom/browser/native_window_mac.mm @@ -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; diff --git a/atom/browser/native_window_views.cc b/atom/browser/native_window_views.cc index ca93bb08a46f..b27f08aa2335 100644 --- a/atom/browser/native_window_views.cc +++ b/atom/browser/native_window_views.cc @@ -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(); diff --git a/atom/browser/native_window_views.h b/atom/browser/native_window_views.h index 2c63270815e6..f876a8bec241 100644 --- a/atom/browser/native_window_views.h +++ b/atom/browser/native_window_views.h @@ -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;