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:
Florian Müllner 2011-01-24 22:31:10 +01:00
parent f721e80685
commit b9e1d917da

View File

@ -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();