Skip to content
This repository was archived by the owner on Dec 11, 2019. It is now read-only.

Commit cd3dd78

Browse files
committed
Prevent two-finger swipe forard/back when scrolling on viewport
fix #2577
1 parent 036578e commit cd3dd78

File tree

5 files changed

+61
-8
lines changed

5 files changed

+61
-8
lines changed

app/extensions/brave/content/scripts/inputHandler.js

+14
Original file line numberDiff line numberDiff line change
@@ -156,3 +156,17 @@ document.addEventListener('keydown', (e /*: Event*/) => {
156156
break
157157
}
158158
})
159+
160+
chrome.ipc.on('check-swipe-back', (e) => {
161+
if (document.scrollingElement.scrollLeft === 0) {
162+
chrome.ipc.sendToHost('can-swipe-back')
163+
}
164+
})
165+
166+
chrome.ipc.on('check-swipe-forward', (e) => {
167+
const scrollEle = document.scrollingElement
168+
if (scrollEle.scrollLeft === 0 ||
169+
scrollEle.scrollLeft === (scrollEle.scrollWidth - scrollEle.clientWidth)) {
170+
chrome.ipc.sendToHost('can-swipe-forward')
171+
}
172+
})

js/actions/webviewActions.js

+17
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
'use strict'
66

7+
const messages = require('../constants/messages.js')
8+
79
const getWebview = () =>
810
document.querySelector('.frameWrapper.isActive webview')
911

@@ -49,6 +51,21 @@ const webviewActions = {
4951
if (webview) {
5052
webview.showDefinitionForSelection()
5153
}
54+
},
55+
56+
/**
57+
* Check two-finger gesture swipe back/forward ability
58+
* @param {bool} back - true for back, false for forward
59+
*/
60+
checkSwipe: function (back) {
61+
const webview = getWebview()
62+
if (webview) {
63+
if (back) {
64+
webview.send(messages.CHECK_SWIPE_BACK)
65+
} else {
66+
webview.send(messages.CHECK_SWIPE_FORWARD)
67+
}
68+
}
5269
}
5370
}
5471

js/components/frame.js

+6
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,12 @@ class Frame extends ImmutableComponent {
505505
case messages.GO_FORWARD:
506506
method = () => this.webview.goForward()
507507
break
508+
case messages.CAN_SWIPE_BACK:
509+
remote.getCurrentWindow().webContents.send(messages.CAN_SWIPE_BACK)
510+
break
511+
case messages.CAN_SWIPE_FORWARD:
512+
remote.getCurrentWindow().webContents.send(messages.CAN_SWIPE_FORWARD)
513+
break
508514
case messages.NEW_FRAME:
509515
method = (frameOpts, openInForeground) => {
510516
windowActions.newFrame(frameOpts, openInForeground)

js/components/main.js

+20-8
Original file line numberDiff line numberDiff line change
@@ -110,34 +110,46 @@ class Main extends ImmutableComponent {
110110
registerSwipeListener () {
111111
// Navigates back/forward on macOS two-finger swipe
112112
var trackingFingers = false
113+
var canSwipeBack = false
114+
var canSwipeForward = false
113115
var deltaX = 0
114116
var deltaY = 0
115117
var startTime = 0
116-
var xVelocity = 0
117-
var yVelocity = 0
118+
var time
118119

119120
this.mainWindow.addEventListener('wheel', (e) => {
120121
if (trackingFingers) {
121122
deltaX = deltaX + e.deltaX
122123
deltaY = deltaY + e.deltaY
123-
var time = (new Date()).getTime() - startTime
124-
xVelocity = deltaX / time
125-
yVelocity = deltaY / time
124+
time = (new Date()).getTime() - startTime
125+
if (deltaX > 0) {
126+
webviewActions.checkSwipe(false)
127+
} else if (deltaX < 0) {
128+
webviewActions.checkSwipe(true)
129+
}
126130
}
127131
})
132+
ipc.on(messages.CAN_SWIPE_BACK, (e) => {
133+
canSwipeBack = true
134+
})
135+
ipc.on(messages.CAN_SWIPE_FORWARD, (e) => {
136+
canSwipeForward = true
137+
})
128138
ipc.on('scroll-touch-begin', function () {
129139
trackingFingers = true
130140
startTime = (new Date()).getTime()
131141
})
132142
ipc.on('scroll-touch-end', function () {
133-
if (trackingFingers && Math.abs(yVelocity) < 1) {
134-
if (xVelocity > 1.5) {
143+
if (time > 50 && trackingFingers && Math.abs(deltaY) < 50) {
144+
if (deltaX > 100 && canSwipeForward) {
135145
ipc.emit(messages.SHORTCUT_ACTIVE_FRAME_FORWARD)
136-
} else if (xVelocity < -1.5) {
146+
} else if (deltaX < -100 && canSwipeBack) {
137147
ipc.emit(messages.SHORTCUT_ACTIVE_FRAME_BACK)
138148
}
139149
}
140150
trackingFingers = false
151+
canSwipeBack = false
152+
canSwipeForward = false
141153
deltaX = 0
142154
deltaY = 0
143155
startTime = 0

js/constants/messages.js

+4
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,10 @@ const messages = {
7474
SET_RESOURCE_ENABLED: _,
7575
GO_BACK: _,
7676
GO_FORWARD: _,
77+
CAN_SWIPE_BACK: _,
78+
CAN_SWIPE_FORWARD: _,
79+
CHECK_SWIPE_BACK: _,
80+
CHECK_SWIPE_FORWARD: _,
7781
// Password manager
7882
GET_PASSWORDS: _, /** @arg {string} formOrigin, @arg {string} action */
7983
GOT_PASSWORD: _, /** @arg {string} username, @arg {string} password, @arg {string} origin, @arg {string} action, @arg {boolean} isUnique */

0 commit comments

Comments
 (0)