swipe-scroll: Don't eat button-release events on click
The main overview group starts capturing events on button-press events to implement swipe-scrolling. While reactive children of the group which handle both button-press and button-release events don't trigger swipe-scrolling, children that only rely on button-release have stopped working - at least the primary/secondary icons of the search entry are affected. While the capture handler already checks the pointer movement between press and release to determine whether the action should be considered a click rather than a drag, it still blocks the release event from propagating. Instead, only block release events for drag actions, but not for clicks. https://bugzilla.gnome.org/show_bug.cgi?id=640493
This commit is contained in:
parent
f721e80685
commit
b9e1d917da
@ -324,16 +324,17 @@ Overview.prototype = {
|
|||||||
newValue += difference;
|
newValue += difference;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let result;
|
||||||
|
|
||||||
// See if the user has moved the mouse enough to trigger
|
// See if the user has moved the mouse enough to trigger
|
||||||
// a drag
|
// a drag
|
||||||
let threshold = Gtk.Settings.get_default().gtk_dnd_drag_threshold;
|
let threshold = Gtk.Settings.get_default().gtk_dnd_drag_threshold;
|
||||||
if (Math.abs(stageX - this._dragStartX) < threshold &&
|
if (Math.abs(stageX - this._dragStartX) < threshold &&
|
||||||
Math.abs(stageY - this._dragStartY) < threshold) {
|
Math.abs(stageY - this._dragStartY) < threshold) {
|
||||||
// no motion? It's a click!
|
// no motion? It's a click!
|
||||||
this.emit('swipe-scroll-end', SwipeScrollResult.CLICK);
|
result = SwipeScrollResult.CLICK;
|
||||||
|
this.emit('swipe-scroll-end', result);
|
||||||
} else {
|
} else {
|
||||||
let result;
|
|
||||||
|
|
||||||
if (newValue == this._dragStartValue)
|
if (newValue == this._dragStartValue)
|
||||||
result = SwipeScrollResult.CANCEL;
|
result = SwipeScrollResult.CANCEL;
|
||||||
else
|
else
|
||||||
@ -362,7 +363,7 @@ Overview.prototype = {
|
|||||||
global.stage.disconnect(this._capturedEventId);
|
global.stage.disconnect(this._capturedEventId);
|
||||||
this._capturedEventId = 0;
|
this._capturedEventId = 0;
|
||||||
|
|
||||||
return true;
|
return result != SwipeScrollResult.CLICK;
|
||||||
|
|
||||||
case Clutter.EventType.MOTION:
|
case Clutter.EventType.MOTION:
|
||||||
[stageX, stageY] = event.get_coords();
|
[stageX, stageY] = event.get_coords();
|
||||||
|
Loading…
Reference in New Issue
Block a user