[Libreoffice-commits] online.git: loleaflet/src loolwsd/bundled loolwsd/LOOLSession.cpp

Mihai Varga mihai.varga at collabora.com
Mon Oct 5 05:06:06 PDT 2015


 loleaflet/src/layer/tile/TileLayer.js                   |   13 +++++-
 loleaflet/src/map/handler/Map.Keyboard.js               |    6 ++
 loleaflet/src/map/handler/Map.Mouse.js                  |   33 ++++++++++++----
 loolwsd/LOOLSession.cpp                                 |   10 ++--
 loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKit.h |    4 +
 5 files changed, 52 insertions(+), 14 deletions(-)

New commits:
commit 14dca89150ca550e8031888b1cd5b1f37ee626da
Author: Mihai Varga <mihai.varga at collabora.com>
Date:   Mon Oct 5 15:04:19 2015 +0300

    We now send the mouse button that has been pressed and also they key
    modifiers for actions such as ctrl+click or shift+click

diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index 86d7f2b..cfe686a 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -191,6 +191,9 @@ L.TileLayer = L.GridLayer.extend({
 		else if (textMsg.startsWith('graphicselection:')) {
 			this._onGraphicSelectionMsg(textMsg);
 		}
+		else if (textMsg.startsWith('hyperlinkclicked:')) {
+			this._onHyperlinkClickedMsg(textMsg);
+		}
 		else if (textMsg.startsWith('invalidatecursor:')) {
 			this._onInvalidateCursorMsg(textMsg);
 		}
@@ -280,6 +283,11 @@ L.TileLayer = L.GridLayer.extend({
 		this._onUpdateGraphicSelection();
 	},
 
+	_onHyperlinkClickedMsg: function (textMsg) {
+		var link = textMsg.substring(18);
+		window.open(link, '_blank');
+	},
+
 	_onInvalidateCursorMsg: function (textMsg) {
 		var strTwips = textMsg.match(/\d+/g);
 		var topLeftTwips = new L.Point(parseInt(strTwips[0]), parseInt(strTwips[1]));
@@ -503,9 +511,10 @@ L.TileLayer = L.GridLayer.extend({
 		this._onUpdateGraphicSelection();
 	},
 
-	_postMouseEvent: function(type, x, y, count) {
+	_postMouseEvent: function(type, x, y, count, buttons, modifier) {
 		L.Socket.sendMessage('mouse type=' + type +
-				' x=' + x + ' y=' + y + ' count=' + count);
+				' x=' + x + ' y=' + y + ' count=' + count +
+				' buttons=' + buttons + ' modifier=' + modifier);
 	},
 
 	_postKeyboardEvent: function(type, charcode, keycode) {
diff --git a/loleaflet/src/map/handler/Map.Keyboard.js b/loleaflet/src/map/handler/Map.Keyboard.js
index 987d2b4..98c722d 100644
--- a/loleaflet/src/map/handler/Map.Keyboard.js
+++ b/loleaflet/src/map/handler/Map.Keyboard.js
@@ -115,6 +115,7 @@ L.Map.Keyboard = L.Handler.extend({
 		this._map = map;
 		this._setPanOffset(map.options.keyboardPanOffset);
 		this._setZoomOffset(map.options.keyboardZoomOffset);
+		this.modifier = 0;
 	},
 
 	addHooks: function () {
@@ -180,6 +181,11 @@ L.Map.Keyboard = L.Handler.extend({
 
 	_onKeyDown: function (e) {
 		var docLayer = this._map._docLayer;
+		this.modifier = 0;
+		var shift = e.originalEvent.shiftKey ? this.keyModifier.shift : 0;
+		var ctrl = e.originalEvent.ctrlKey ? this.keyModifier.ctrl : 0;
+		var alt = e.originalEvent.altKey ? this.keyModifier.alt : 0;
+		this.modifier = shift | ctrl | alt;
 		if (e.originalEvent.ctrlKey) {
 			// we prepare for a copy event
 			docLayer._textArea.value = 'dummy text';
diff --git a/loleaflet/src/map/handler/Map.Mouse.js b/loleaflet/src/map/handler/Map.Mouse.js
index ac731a8..9fd8ba8 100644
--- a/loleaflet/src/map/handler/Map.Mouse.js
+++ b/loleaflet/src/map/handler/Map.Mouse.js
@@ -23,6 +23,18 @@ L.Map.Mouse = L.Handler.extend({
 			this._onMouseEvent, this);
 	},
 
+	LOButtons: {
+		left: 1,
+		middle: 2,
+		right: 4
+	},
+
+	JSButtons: {
+		left: 0,
+		middle: 1,
+		right: 2
+	},
+
 	_onMouseEvent: function (e) {
 		var docLayer = this._map._docLayer;
 		if (!docLayer) {
@@ -39,6 +51,12 @@ L.Map.Mouse = L.Handler.extend({
 			}
 		}
 
+		var modifier = this._map.keyboard.modifier;
+		var buttons = 0;
+		buttons |= e.originalEvent.button === this.JSButtons.left ? this.LOButtons.left : 0;
+		buttons |= e.originalEvent.button === this.JSButtons.middle ? this.LOButtons.middle : 0;
+		buttons |= e.originalEvent.button === this.JSButtons.right ? this.LOButtons.right : 0;
+
 		if (e.type === 'mousedown') {
 			docLayer._resetPreFetching();
 			this._mouseDown = true;
@@ -47,7 +65,8 @@ L.Map.Mouse = L.Handler.extend({
 			}
 			var mousePos = docLayer._latLngToTwips(e.latlng);
 			this._mouseEventsQueue.push(L.bind(function() {
-				this._postMouseEvent('buttondown', mousePos.x, mousePos.y, 1);}, docLayer));
+				this._postMouseEvent('buttondown', mousePos.x, mousePos.y, 1, buttons, modifier);
+			}, docLayer));
 			this._holdMouseEvent = setTimeout(L.bind(this._executeMouseEvents, this), 500);
 		}
 		else if (e.type === 'mouseup') {
@@ -82,7 +101,7 @@ L.Map.Mouse = L.Handler.extend({
 						}
 					}
 					this._mouseEventsQueue = [];
-					docLayer._postMouseEvent('buttonup', mousePos.x, mousePos.y, 1);
+					docLayer._postMouseEvent('buttonup', mousePos.x, mousePos.y, 1, buttons, modifier);
 					docLayer._textArea.focus();
 				}, this));
 				this._holdMouseEvent = setTimeout(L.bind(this._executeMouseEvents, this), timeOut);
@@ -113,7 +132,7 @@ L.Map.Mouse = L.Handler.extend({
 			}
 			if (!this._map.dragging.enabled()) {
 				mousePos = docLayer._latLngToTwips(e.latlng);
-				docLayer._postMouseEvent('move', mousePos.x, mousePos.y, 1);
+				docLayer._postMouseEvent('move', mousePos.x, mousePos.y, 1, buttons, modifier);
 				for (key in docLayer._selectionHandles) {
 					handle = docLayer._selectionHandles[key];
 					if (handle._icon) {
@@ -124,10 +143,10 @@ L.Map.Mouse = L.Handler.extend({
 		}
 		else if (e.type === 'dblclick') {
 			mousePos = docLayer._latLngToTwips(e.latlng);
-			docLayer._postMouseEvent('buttondown', mousePos.x, mousePos.y, 1);
-			docLayer._postMouseEvent('buttondown', mousePos.x, mousePos.y, 2);
-			docLayer._postMouseEvent('buttonup', mousePos.x, mousePos.y, 2);
-			docLayer._postMouseEvent('buttonup', mousePos.x, mousePos.y, 1);
+			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);
 		}
 	},
 
diff --git a/loolwsd/LOOLSession.cpp b/loolwsd/LOOLSession.cpp
index 5f5d12e..a293cde 100644
--- a/loolwsd/LOOLSession.cpp
+++ b/loolwsd/LOOLSession.cpp
@@ -1025,9 +1025,9 @@ bool ChildProcessSession::keyEvent(const char *buffer, int length, StringTokeniz
 
 bool ChildProcessSession::mouseEvent(const char *buffer, int length, StringTokenizer& tokens)
 {
-    int type, x, y, count;
+    int type, x, y, count, buttons, modifier;
 
-    if (tokens.count() != 5 ||
+    if (tokens.count() != 7 ||
         !getTokenKeyword(tokens[1], "type",
                          {{"buttondown", LOK_MOUSEEVENT_MOUSEBUTTONDOWN},
                           {"buttonup", LOK_MOUSEEVENT_MOUSEBUTTONUP},
@@ -1035,13 +1035,15 @@ bool ChildProcessSession::mouseEvent(const char *buffer, int length, StringToken
                          type) ||
         !getTokenInteger(tokens[2], "x", x) ||
         !getTokenInteger(tokens[3], "y", y) ||
-        !getTokenInteger(tokens[4], "count", count))
+        !getTokenInteger(tokens[4], "count", count),
+        !getTokenInteger(tokens[5], "buttons", buttons),
+        !getTokenInteger(tokens[6], "modifier", modifier))
     {
         sendTextFrame("error: cmd=mouse kind=syntax");
         return false;
     }
 
-    _loKitDocument->pClass->postMouseEvent(_loKitDocument, type, x, y, count);
+    _loKitDocument->pClass->postMouseEvent(_loKitDocument, type, x, y, count, buttons, modifier);
 
     return true;
 }
diff --git a/loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKit.h b/loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKit.h
index d83dd49..83dcc98 100644
--- a/loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKit.h
+++ b/loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKit.h
@@ -137,7 +137,9 @@ struct _LibreOfficeKitDocumentClass
                             int nType,
                             int nX,
                             int nY,
-                            int nCount);
+                            int nCount,
+                            int nButtons,
+                            int nModifier);
 
     /// @see lok::Document::postUnoCommand
     void (*postUnoCommand) (LibreOfficeKitDocument* pThis,


More information about the Libreoffice-commits mailing list