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

Reply via email to