[Libreoffice-commits] online.git: loleaflet/src
Mihai Varga
mihai.varga at collabora.com
Mon Jun 29 00:58:49 PDT 2015
loleaflet/src/layer/tile/TileLayer.js | 67 ++++++++++++++++++++++------------
1 file changed, 44 insertions(+), 23 deletions(-)
New commits:
commit a32278cb2bfc50b23361d103915c4e1c70f1a82a
Author: Mihai Varga <mihai.varga at collabora.com>
Date: Mon Jun 29 10:54:32 2015 +0300
Don't send 2 clicks before sending dblclick
Mouse events are now put in a queue. If within 250ms from the first
click arrives another, it's a double click, the previos and the current
clicks are canceled and a dblclick command is sent instead.
diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index 805e0a8..f83038d 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -154,6 +154,7 @@ L.TileLayer = L.GridLayer.extend({
}),
draggable: true
});
+ this._mouseEventsQueue = [];
this._textArea = L.DomUtil.get('clipboard');
this._textArea.focus();
},
@@ -669,35 +670,45 @@ L.TileLayer = L.GridLayer.extend({
},
_onMouseEvent: function (e) {
- if (this._graphicMarker && this._graphicMarker.isDragged) { return; }
+ if (this._graphicMarker && this._graphicMarker.isDragged) {
+ return;
+ }
- if (this._startMarker.isDragged === true || this._endMarker.isDragged === true)
+ if (this._startMarker.isDragged === true || this._endMarker.isDragged === true) {
return;
+ }
if (e.type === 'mousedown') {
this._selecting = true;
- this._clearSelections();
+ if (this._holdMouseEvent) {
+ clearTimeout(this._holdMouseEvent);
+ }
var mousePos = this._latLngToTwips(e.latlng);
- this._mouseDownPos = mousePos;
- this._holdStart = setTimeout(L.bind(function() {
- this._holdStart = null;
- this._postMouseEvent('buttondown', this._mouseDownPos.x,
- this._mouseDownPos.y, 1);
- }, this), 500);
+ this._mouseEventsQueue.push(L.bind(function() {
+ this._postMouseEvent('buttondown', mousePos.x, mousePos.y, 1);}, this));
+ this._holdMouseEvent = setTimeout(L.bind(this._executeMouseEvents, this), 500);
this._editMode = true;
}
else if (e.type === 'mouseup') {
this._selecting = false;
- if (this._holdStart) {
- // it was a click
- clearTimeout(this._holdStart);
- this._holdStart = null;
- this._postMouseEvent('buttondown', this._mouseDownPos.x,
- this._mouseDownPos.y, 1);
+ if (this._holdMouseEvent) {
+ clearTimeout(this._holdMouseEvent);
+ this._holdMouseEvent = null;
+ }
+ if (this._mouseEventsQueue.length === 3) {
+ // i.e. we have mousedown, mouseup, mousedown and here comes another
+ // mouseup. Those are 2 consecutive clicks == doubleclick, we cancel
+ // everything and wait for the dblclick event to arrive where it's handled
+ this._mouseEventsQueue = [];
+ return;
}
mousePos = this._latLngToTwips(e.latlng);
- this._postMouseEvent('buttonup', mousePos.x, mousePos.y, 1);
+ this._mouseEventsQueue.push(L.bind(function() {
+ this._postMouseEvent('buttonup', mousePos.x, mousePos.y, 1);
+ this._textArea.focus();
+ }, this));
+ this._holdMouseEvent = setTimeout(L.bind(this._executeMouseEvents, this), 250);
this._editMode = true;
if (this._startMarker._icon) {
@@ -706,15 +717,17 @@ L.TileLayer = L.GridLayer.extend({
if (this._endMarker._icon) {
L.DomUtil.removeClass(this._endMarker._icon, 'leaflet-not-clickable');
}
- this._textArea.focus();
}
else if (e.type === 'mousemove' && this._selecting) {
- if (this._holdStart) {
- clearTimeout(this._holdStart);
- // it's not a dblclick, so we post the initial mousedown
- this._postMouseEvent('buttondown', this._mouseDownPos.x,
- this._mouseDownPos.y, 1);
- this._holdStart = null;
+ if (this._holdMouseEvent) {
+ clearTimeout(this._holdMouseEvent);
+ this._holdMouseEvent = null;
+ for (var i = 0; i < this._mouseEventsQueue.length; i++) {
+ // synchronously execute old mouse events so we know that
+ // they arrive to the server before the move command
+ this._mouseEventsQueue[i]();
+ }
+ this._mouseEventsQueue = [];
}
mousePos = this._latLngToTwips(e.latlng);
this._postMouseEvent('move', mousePos.x, mousePos.y, 1);
@@ -734,6 +747,14 @@ L.TileLayer = L.GridLayer.extend({
}
},
+ _executeMouseEvents: function () {
+ this._holdMouseEvent = null;
+ for (var i = 0; i < this._mouseEventsQueue.length; i++) {
+ this._mouseEventsQueue[i]();
+ }
+ this._mouseEventsQueue = [];
+ },
+
_onSwitchPart: function (e) {
if (e.type === 'prevpart') {
if (this._currentPart > 0) {
More information about the Libreoffice-commits
mailing list