From a5042befd432ca0548c6880519cdb7af7e9fc40e Mon Sep 17 00:00:00 2001 From: Anthony Tseng Date: Sat, 17 Sep 2016 22:29:32 +0800 Subject: [PATCH] Emit scroll-touch-edge event instead of changing the behavior of scroll-touch-begin/end Auditor: @bbondy --- atom/browser/api/atom_api_window.cc | 4 ++++ atom/browser/api/atom_api_window.h | 1 + atom/browser/native_window.cc | 5 +++++ atom/browser/native_window.h | 1 + atom/browser/native_window_mac.h | 3 --- atom/browser/native_window_mac.mm | 9 +++------ atom/browser/native_window_observer.h | 1 + docs/api/browser-window.md | 4 ++++ 8 files changed, 19 insertions(+), 9 deletions(-) diff --git a/atom/browser/api/atom_api_window.cc b/atom/browser/api/atom_api_window.cc index 535a155257..92e5e5b562 100644 --- a/atom/browser/api/atom_api_window.cc +++ b/atom/browser/api/atom_api_window.cc @@ -230,6 +230,10 @@ void Window::OnWindowScrollTouchEnd() { Emit("scroll-touch-end"); } +void Window::OnWindowScrollTouchEdge() { + Emit("scroll-touch-edge"); +} + void Window::OnWindowSwipe(const std::string& direction) { Emit("swipe", direction); } diff --git a/atom/browser/api/atom_api_window.h b/atom/browser/api/atom_api_window.h index 406e47d908..d2c41c2881 100644 --- a/atom/browser/api/atom_api_window.h +++ b/atom/browser/api/atom_api_window.h @@ -74,6 +74,7 @@ class Window : public mate::TrackableObject, void OnWindowMoved() override; void OnWindowScrollTouchBegin() override; void OnWindowScrollTouchEnd() override; + void OnWindowScrollTouchEdge() override; void OnWindowSwipe(const std::string& direction) override; void OnWindowEnterFullScreen() override; void OnWindowLeaveFullScreen() override; diff --git a/atom/browser/native_window.cc b/atom/browser/native_window.cc index 8dbed6d33d..7280533237 100644 --- a/atom/browser/native_window.cc +++ b/atom/browser/native_window.cc @@ -504,6 +504,11 @@ void NativeWindow::NotifyWindowScrollTouchEnd() { OnWindowScrollTouchEnd()); } +void NativeWindow::NotifyWindowScrollTouchEdge() { + FOR_EACH_OBSERVER(NativeWindowObserver, observers_, + OnWindowScrollTouchEdge()); +} + void NativeWindow::NotifyWindowSwipe(const std::string& direction) { FOR_EACH_OBSERVER(NativeWindowObserver, observers_, OnWindowSwipe(direction)); diff --git a/atom/browser/native_window.h b/atom/browser/native_window.h index 76c47417bd..734584f8c7 100644 --- a/atom/browser/native_window.h +++ b/atom/browser/native_window.h @@ -207,6 +207,7 @@ class NativeWindow : public base::SupportsUserData, void NotifyWindowMoved(); void NotifyWindowScrollTouchBegin(); void NotifyWindowScrollTouchEnd(); + void NotifyWindowScrollTouchEdge(); void NotifyWindowSwipe(const std::string& direction); void NotifyWindowEnterFullScreen(); void NotifyWindowLeaveFullScreen(); diff --git a/atom/browser/native_window_mac.h b/atom/browser/native_window_mac.h index 9aaaa066db..10b3516597 100644 --- a/atom/browser/native_window_mac.h +++ b/atom/browser/native_window_mac.h @@ -160,9 +160,6 @@ class NativeWindowMac : public NativeWindow, // The "titleBarStyle" option. TitleBarStyle title_bar_style_; - // Whether user has scrolled the page to edge. - bool is_edge_; - DISALLOW_COPY_AND_ASSIGN(NativeWindowMac); }; diff --git a/atom/browser/native_window_mac.mm b/atom/browser/native_window_mac.mm index a0fab5ed4e..87353da7f8 100644 --- a/atom/browser/native_window_mac.mm +++ b/atom/browser/native_window_mac.mm @@ -530,8 +530,7 @@ static bool FromV8(v8::Isolate* isolate, v8::Handle val, : NativeWindow(web_contents, options, parent), is_kiosk_(false), attention_request_id_(0), - title_bar_style_(NORMAL), - is_edge_(false) { + title_bar_style_(NORMAL) { int width = 800, height = 600; options.Get(options::kWidth, &width); options.Get(options::kHeight, &height); @@ -676,16 +675,14 @@ static bool FromV8(v8::Isolate* isolate, v8::Handle val, if (!web_contents) return event; - if (!began && is_edge_ && (([event phase] == NSEventPhaseMayBegin) || + if (!began && (([event phase] == NSEventPhaseMayBegin) || ([event phase] == NSEventPhaseBegan))) { this->NotifyWindowScrollTouchBegin(); began = YES; - is_edge_ = false; } else if (began && (([event phase] == NSEventPhaseEnded) || ([event phase] == NSEventPhaseCancelled))) { this->NotifyWindowScrollTouchEnd(); began = NO; - is_edge_ = false; } return event; }]; @@ -1132,7 +1129,7 @@ static bool FromV8(v8::Isolate* isolate, v8::Handle val, case blink::WebInputEvent::GestureScrollBegin: case blink::WebInputEvent::GestureScrollUpdate: case blink::WebInputEvent::GestureScrollEnd: - is_edge_ = true; + this->NotifyWindowScrollTouchEdge(); break; default: break; diff --git a/atom/browser/native_window_observer.h b/atom/browser/native_window_observer.h index b2bc588c30..42d6b0287f 100644 --- a/atom/browser/native_window_observer.h +++ b/atom/browser/native_window_observer.h @@ -64,6 +64,7 @@ class NativeWindowObserver { virtual void OnWindowMoved() {} virtual void OnWindowScrollTouchBegin() {} virtual void OnWindowScrollTouchEnd() {} + virtual void OnWindowScrollTouchEdge() {} virtual void OnWindowSwipe(const std::string& direction) {} virtual void OnWindowEnterFullScreen() {} virtual void OnWindowLeaveFullScreen() {} diff --git a/docs/api/browser-window.md b/docs/api/browser-window.md index 1167d5e94f..c09577ac3c 100644 --- a/docs/api/browser-window.md +++ b/docs/api/browser-window.md @@ -448,6 +448,10 @@ Emitted when scroll wheel event phase has begun. Emitted when scroll wheel event phase has ended. +#### Event: 'scroll-touch-edge' _macOS_ + +Emitted when scroll wheel event phase filed upon reaching the edge of element. + #### Event: 'swipe' _macOS_ Returns: