diff --git a/atom/browser/api/atom_api_window.cc b/atom/browser/api/atom_api_window.cc index ccc3c8695d51..a10f46fe75e7 100644 --- a/atom/browser/api/atom_api_window.cc +++ b/atom/browser/api/atom_api_window.cc @@ -248,6 +248,10 @@ void Window::OnWindowScrollTouchEnd() { Emit("scroll-touch-end"); } +void Window::OnWindowSwipe(const std::string& direction) { + Emit("swipe", direction); +} + void Window::OnWindowEnterHtmlFullScreen() { Emit("enter-html-full-screen"); } diff --git a/atom/browser/api/atom_api_window.h b/atom/browser/api/atom_api_window.h index f69f54529942..d26ff5b36748 100644 --- a/atom/browser/api/atom_api_window.h +++ b/atom/browser/api/atom_api_window.h @@ -69,6 +69,7 @@ class Window : public mate::TrackableObject, void OnWindowMoved() override; void OnWindowScrollTouchBegin() override; void OnWindowScrollTouchEnd() override; + void OnWindowSwipe(const std::string& direction) override; void OnWindowEnterFullScreen() override; void OnWindowLeaveFullScreen() override; void OnWindowEnterHtmlFullScreen() override; diff --git a/atom/browser/native_window.cc b/atom/browser/native_window.cc index 6c64edec5fbe..2627c704d21f 100644 --- a/atom/browser/native_window.cc +++ b/atom/browser/native_window.cc @@ -480,6 +480,11 @@ void NativeWindow::NotifyWindowScrollTouchEnd() { OnWindowScrollTouchEnd()); } +void NativeWindow::NotifyWindowSwipe(const std::string& direction) { + FOR_EACH_OBSERVER(NativeWindowObserver, observers_, + OnWindowSwipe(direction)); +} + void NativeWindow::NotifyWindowLeaveFullScreen() { FOR_EACH_OBSERVER(NativeWindowObserver, observers_, OnWindowLeaveFullScreen()); diff --git a/atom/browser/native_window.h b/atom/browser/native_window.h index a215b9eb4c1f..49e1e71d5df6 100644 --- a/atom/browser/native_window.h +++ b/atom/browser/native_window.h @@ -221,6 +221,7 @@ class NativeWindow : public base::SupportsUserData, void NotifyWindowMoved(); void NotifyWindowScrollTouchBegin(); void NotifyWindowScrollTouchEnd(); + void NotifyWindowSwipe(const std::string& direction); void NotifyWindowEnterFullScreen(); void NotifyWindowLeaveFullScreen(); void NotifyWindowEnterHtmlFullScreen(); diff --git a/atom/browser/native_window_mac.mm b/atom/browser/native_window_mac.mm index a8f7bc5c1681..2044ee7d7189 100644 --- a/atom/browser/native_window_mac.mm +++ b/atom/browser/native_window_mac.mm @@ -267,6 +267,18 @@ bool ScopedDisableResize::disable_resize_ = false; // NSWindow overrides. +- (void)swipeWithEvent:(NSEvent *)event { + if (event.deltaY == 1.0) { + shell_->NotifyWindowSwipe("up"); + } else if (event.deltaX == -1.0) { + shell_->NotifyWindowSwipe("right"); + } else if (event.deltaY == -1.0) { + shell_->NotifyWindowSwipe("down"); + } else if (event.deltaX == 1.0) { + shell_->NotifyWindowSwipe("left"); + } +} + - (NSRect)constrainFrameRect:(NSRect)frameRect toScreen:(NSScreen*)screen { // Resizing is disabled. if (ScopedDisableResize::IsResizeDisabled()) diff --git a/atom/browser/native_window_observer.h b/atom/browser/native_window_observer.h index e9dbff4292e1..cfbae95bda16 100644 --- a/atom/browser/native_window_observer.h +++ b/atom/browser/native_window_observer.h @@ -58,6 +58,7 @@ class NativeWindowObserver { virtual void OnWindowMoved() {} virtual void OnWindowScrollTouchBegin() {} virtual void OnWindowScrollTouchEnd() {} + virtual void OnWindowSwipe(const std::string& direction) {} virtual void OnWindowEnterFullScreen() {} virtual void OnWindowLeaveFullScreen() {} virtual void OnWindowEnterHtmlFullScreen() {} diff --git a/docs/api/browser-window.md b/docs/api/browser-window.md index e2380e4cb18a..76343f967b15 100644 --- a/docs/api/browser-window.md +++ b/docs/api/browser-window.md @@ -322,6 +322,15 @@ Emitted when scroll wheel event phase has begun. Emitted when scroll wheel event phase has ended. +### Event: 'swipe' _OS X_ + +Returns: + +* `event` Event +* `direction` String + +Emitted on 3-finger swipe. Possible directions are `up`, `right`, `down`, `left`. + ## Methods The `BrowserWindow` object has the following methods: