mac: Add win.disable/enable/isEnabled() API
authorCheng Zhao <zcbenz@gmail.com>
Fri, 17 Jun 2016 08:38:44 +0000 (17:38 +0900)
committerCheng Zhao <zcbenz@gmail.com>
Mon, 20 Jun 2016 02:16:41 +0000 (11:16 +0900)
atom/browser/api/atom_api_window.cc
atom/browser/api/atom_api_window.h
atom/browser/native_window.h
atom/browser/native_window_mac.h
atom/browser/native_window_mac.mm
atom/browser/native_window_views.cc
atom/browser/native_window_views.h

index 3e1bb6a..30427d5 100644 (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)
index 0cc238a..3e53cbf 100644 (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();
index 8dd3dc5..a2adb55 100644 (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;
index 2e0b769..0a783c3 100644 (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;
index 8dd6457..bad2fc7 100644 (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;
index ca93bb0..b27f08a 100644 (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();
index 2c63270..f876a8b 100644 (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;