[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