[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