loleaflet/build/deps.js | 3 - loleaflet/src/dom/DomEvent.MultiClick.js | 66 +++++++++++++++++++++++++++++++ loleaflet/src/dom/DomEvent.js | 6 ++ loleaflet/src/map/Map.js | 2 loleaflet/src/map/handler/Map.Mouse.js | 31 +++++++++++--- 5 files changed, 99 insertions(+), 9 deletions(-)
New commits: commit b394f337c7aa3a2650fe5abdbcfd849c5829ca57 Author: Andrzej Hunt <andrzej.h...@collabora.com> Date: Thu Oct 29 15:26:01 2015 +0100 loleaflet: tdf#94609 Support triple and quadruple click selection Currently probably only supported on desktop (clicking) browsers. diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js index f79ace4..effe453 100644 --- a/loleaflet/src/map/Map.js +++ b/loleaflet/src/map/Map.js @@ -573,7 +573,7 @@ L.Map = L.Evented.extend({ var onOff = remove ? 'off' : 'on'; L.DomEvent[onOff](this._container, 'click dblclick mousedown mouseup ' + - 'mouseover mouseout mousemove contextmenu keydown keypress keyup', this._handleDOMEvent, this); + 'mouseover mouseout mousemove contextmenu keydown keypress keyup trplclick qdrplclick', this._handleDOMEvent, this); L.DomEvent[onOff](this._textArea, 'copy paste keydown keypress keyup', this._handleDOMEvent, this); if (this.options.trackResize) { diff --git a/loleaflet/src/map/handler/Map.Mouse.js b/loleaflet/src/map/handler/Map.Mouse.js index 4d03770..6477be4 100644 --- a/loleaflet/src/map/handler/Map.Mouse.js +++ b/loleaflet/src/map/handler/Map.Mouse.js @@ -14,12 +14,12 @@ L.Map.Mouse = L.Handler.extend({ }, addHooks: function () { - this._map.on('mousedown mouseup mouseover mouseout mousemove dblclick', + this._map.on('mousedown mouseup mouseover mouseout mousemove dblclick trplclick qdrplclick', this._onMouseEvent, this); }, removeHooks: function () { - this._map.off('mousedown mouseup mouseover mouseout mousemove dblclick', + this._map.off('mousedown mouseup mouseover mouseout mousemove dblclick trplclick qdrplclick', this._onMouseEvent, this); }, @@ -81,10 +81,22 @@ L.Map.Mouse = L.Handler.extend({ if (this._clickTime && Date.now() - this._clickTime <= 250) { // double click, a click was sent already this._mouseEventsQueue = []; + this._clickCount++; + if (this._clickCount < 4) { + // Reset the timer in order to keep resetting until + // we could have sent through a quadruple click. After this revert + // to normal behaviour so that a following single-click is treated + // as a separate click, in order to match LO desktop behaviour. + // (Clicking five times results in paragraph selection after 4 clicks, + // followed by resetting to a single cursor and no selection on the + // fifth click.) + this._clickTime = Date.now(); + } return; } else { this._clickTime = Date.now(); + this._clickCount = 1; mousePos = docLayer._latLngToTwips(e.latlng); var timeOut = 250; if (docLayer._permission === 'edit') { @@ -145,10 +157,17 @@ L.Map.Mouse = L.Handler.extend({ this._map.fire('handleautoscroll', { pos: e.containerPoint, map: this._map }); } } - else if (e.type === 'dblclick') { + else if (e.type === 'dblclick' || e.type === 'trplclick' || e.type === 'qdrplclick') { mousePos = docLayer._latLngToTwips(e.latlng); - docLayer._postMouseEvent('buttondown', mousePos.x, mousePos.y, 2, buttons, modifier); - docLayer._postMouseEvent('buttonup', mousePos.x, mousePos.y, 2, buttons, modifier); + var clicks = { + dblclick: 2, + trplclick: 3, + qdrplclick: 4 + }; + var count = clicks[e.type]; + + docLayer._postMouseEvent('buttondown', mousePos.x, mousePos.y, count, buttons, modifier); + docLayer._postMouseEvent('buttonup', mousePos.x, mousePos.y, count, buttons, modifier); } }, commit 2879547c67416aaaf1103d810257651099f98271 Author: Andrzej Hunt <andrzej.h...@collabora.com> Date: Thu Oct 29 15:19:50 2015 +0100 loleaflet: Implement DomEvent trplclick and qdrplclick support Browsers only support single and double click, so we need to do our own trplclick and qdrplclick synthesis. diff --git a/loleaflet/build/deps.js b/loleaflet/build/deps.js index 277e40b..c9b3d1a 100644 --- a/loleaflet/build/deps.js +++ b/loleaflet/build/deps.js @@ -221,7 +221,8 @@ var deps = { }, Mouse: { - src: ['map/handler/Map.Mouse.js'], + src: ['dom/DomEvent.MultiClick.js', + 'map/handler/Map.Mouse.js'], desc: 'Handles mouse interaction with the document.' }, diff --git a/loleaflet/src/dom/DomEvent.MultiClick.js b/loleaflet/src/dom/DomEvent.MultiClick.js new file mode 100644 index 0000000..a9c4e47 --- /dev/null +++ b/loleaflet/src/dom/DomEvent.MultiClick.js @@ -0,0 +1,66 @@ +/* + * Extends the event handling code with triple and quadruple click support + * This is vaguely based on the DomEvent.DoubleTap implementation. + */ + +L.extend(L.DomEvent, { + + addMultiClickListener: function (obj, handler, id, type) { + var last = [], + delay = 250; + + function onClick(e) { + var now = Date.now(); + var delta = 0; + if (last) { + delta = now - (last[last.length - 1] || now); + } + + var doubleTap = (delta > 0 && delta <= delay); + + var tripleTap = false; + if (last.length > 1 && doubleTap) { + var delta2 = last[last.length - 1] - last[last.length - 2]; + tripleTap = (delta2 > 0 && delta2 <= delay); + } + + if (tripleTap) { + + var quadTap = false; + if (last.length > 2 && tripleTap) { + var delta3 = last[last.length - 2] - last[last.length - 3]; + quadTap = (delta3 > 0 && delta3 <= delay); + } + + // We can't modify e as it's a native DOM object, hence we copy + // what we need instead. (I am however unable to actually find any + // documentation regarding this anywhere.) + var eOut = { + type: quadTap ? 'qdrplclick' : 'trplclick', + clientX: e.clientX, + clientY: e.clientY, + button: e.button, + target: e.target + }; + + handler(eOut); + } + + last.push(now); + while (last.length > 3) { + last.shift(); + } + } + + obj['_leaflet_click' + id] = onClick; + + obj.addEventListener('click', onClick, false); + return this; + }, + + removeMultiClickListener: function (obj, id, type) { + obj.removeEventListener('click', obj['_leaflet_click' + id], false); + + return this; + } +}); diff --git a/loleaflet/src/dom/DomEvent.js b/loleaflet/src/dom/DomEvent.js index b60e174..7de458b 100644 --- a/loleaflet/src/dom/DomEvent.js +++ b/loleaflet/src/dom/DomEvent.js @@ -58,6 +58,9 @@ L.DomEvent = { } else if (L.Browser.touch && (type === 'dblclick') && this.addDoubleTapListener) { this.addDoubleTapListener(obj, handler, id); + } else if (type === "trplclick" || type === "qdrplclick") { + this.addMultiClickListener(obj, handler, id, type); + } else if ('addEventListener' in obj) { if (type === 'mousewheel') { @@ -105,6 +108,9 @@ L.DomEvent = { } else if (L.Browser.touch && (type === 'dblclick') && this.removeDoubleTapListener) { this.removeDoubleTapListener(obj, id); + } else if (type === 'trplclick' || type === 'qdrplclick') { + this.removeMultiClickListener(obj, id, type); + } else if ('removeEventListener' in obj) { if (type === 'mousewheel') { commit a7269e40c39823de8e9b314375c0e419f37ac642 Author: Andrzej Hunt <andrzej.h...@collabora.com> Date: Thu Oct 29 14:33:06 2015 +0100 loleaflet: Cleanup dblclick handling We only seem to need to send the dblclick event (nCount = 2) and not an enclosing single click (nCount = 1) too - the single click is effectively overridden by the double click. The buttonup calls also had an erronous additional parameter, which seems to have been added accidentally in: 14dca89150ca550e8031888b1cd5b1f37ee626da diff --git a/loleaflet/src/map/handler/Map.Mouse.js b/loleaflet/src/map/handler/Map.Mouse.js index b3f9eba..4d03770 100644 --- a/loleaflet/src/map/handler/Map.Mouse.js +++ b/loleaflet/src/map/handler/Map.Mouse.js @@ -147,10 +147,8 @@ L.Map.Mouse = L.Handler.extend({ } else if (e.type === 'dblclick') { mousePos = docLayer._latLngToTwips(e.latlng); - docLayer._postMouseEvent('buttondown', mousePos.x, mousePos.y, 1, buttons, modifier); docLayer._postMouseEvent('buttondown', mousePos.x, mousePos.y, 2, buttons, modifier); - docLayer._postMouseEvent('buttonup', mousePos.x, mousePos.y, 2, 1, buttons, modifier); - docLayer._postMouseEvent('buttonup', mousePos.x, mousePos.y, 1, 1, buttons, modifier); + docLayer._postMouseEvent('buttonup', mousePos.x, mousePos.y, 2, buttons, modifier); } }, _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits