diff --git a/grab.js b/grab.js index 512a65bce..5aee3ec45 100644 --- a/grab.js +++ b/grab.js @@ -85,6 +85,14 @@ export class MoveGrab { center && clone.set_pivot_point(0, 0); this.signals.connect(this.actor, "button-release-event", this.end.bind(this)); + this.signals.connect(this.actor, "touch-event", (act, evt) => { + if (evt.type() === Clutter.EventType.TOUCH_END) { + this.end(); + } + else { + this.motion(act, evt); + } + }); this.signals.connect(this.actor, "motion-event", this.motion.bind(this)); this.signals.connect(global.display, "window-entered-monitor", this.beginDnD.bind(this) @@ -301,6 +309,11 @@ export class MoveGrab { let metaWindow = this.window; // let [gx, gy] = event.get_coords(); let [gx, gy, $] = global.get_pointer(); + if (event.type() === Clutter.EventType.TOUCH_UPDATE) { + [gx, gy] = event.get_coords(); + // We update global pointer to match touch event + Utils.warpPointer(gx, gy, false); + } let [dx, dy] = this.pointerOffset; let clone = metaWindow.clone; diff --git a/utils.js b/utils.js index 86f12bfb0..a8d1429d7 100644 --- a/utils.js +++ b/utils.js @@ -209,12 +209,14 @@ export function warpPointerToMonitor(monitor, center = false) { /** * Warps pointer to x, y coordinates. + * Optionally shows a ripple effect after warp. */ -export function warpPointer(x, y) { - let backend = Clutter.get_default_backend(); - let seat = backend.get_default_seat(); +export function warpPointer(x, y, ripple = true) { + const seat = Clutter.get_default_backend().get_default_seat(); seat.warp_pointer(x, y); - warpRipple.playAnimation(x, y); + if (ripple) { + warpRipple.playAnimation(x, y); + } } /**