[Libreoffice-commits] online.git: 3 commits - loleaflet/build loleaflet/dist loleaflet/src loolwsd/bundled loolwsd/LOOLSession.cpp
Andrzej Hunt
andrzej at ahunt.org
Wed Dec 2 07:23:34 PST 2015
loleaflet/build/deps.js | 2
loleaflet/dist/leaflet.css | 7 +
loleaflet/src/control/Control.ColRowHeader.js | 69 ++++++++++++++++
loleaflet/src/control/Control.ColumnHeader.js | 13 +--
loleaflet/src/control/Control.RowHeader.js | 12 +-
loleaflet/src/layer/tile/TileLayer.js | 12 +-
loolwsd/LOOLSession.cpp | 12 ++
loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKit.h | 3
8 files changed, 113 insertions(+), 17 deletions(-)
New commits:
commit db02f8795b346c76a3ddbdfc55016a92207a0e98
Author: Andrzej Hunt <andrzej at ahunt.org>
Date: Mon Nov 30 12:15:52 2015 -0800
loleaflet: add column/row-header selection support
(cherry picked from commit 264761ca18406b414080ccae31554b8ea1128dfd)
diff --git a/loleaflet/build/deps.js b/loleaflet/build/deps.js
index 9f433ac..657ad69 100644
--- a/loleaflet/build/deps.js
+++ b/loleaflet/build/deps.js
@@ -284,6 +284,7 @@ var deps = {
ControlColumnHeader: {
src: ['control/Control.js',
+ 'control/Control.ColRowHeader.js',
'control/Control.ColumnHeader.js'],
heading: 'Controls',
desc: 'Column Header bar'
@@ -291,6 +292,7 @@ var deps = {
ControlRowHeader: {
src: ['control/Control.js',
+ 'control/Control.ColRowHeader.js',
'control/Control.RowHeader.js'],
heading: 'Controls',
desc: 'Row Header bar'
diff --git a/loleaflet/dist/leaflet.css b/loleaflet/dist/leaflet.css
index d31be8a..1c44072 100644
--- a/loleaflet/dist/leaflet.css
+++ b/loleaflet/dist/leaflet.css
@@ -785,6 +785,13 @@ a.leaflet-control-buttons:hover:first-child {
overflow: hidden;
}
+.spreadsheet-table-noselect {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ user-select: none;
+ -webkit-user-drag: none;
+ }
+
.spreadsheet-table-column {
table-layout: fixed;
left: 0px;
diff --git a/loleaflet/src/control/Control.ColRowHeader.js b/loleaflet/src/control/Control.ColRowHeader.js
new file mode 100644
index 0000000..2068d69
--- /dev/null
+++ b/loleaflet/src/control/Control.ColRowHeader.js
@@ -0,0 +1,69 @@
+/*
+ * L.Control.ColRowHeader
+ *
+ * Provides common methods for the column and row headers.
+ */
+
+L.Control.ColRowHeader = L.Control.extend({
+
+ LOButtons: {
+ left: 1,
+ middle: 2,
+ right: 4
+ },
+
+ JSButtons: {
+ left: 0,
+ middle: 1,
+ right: 2
+ },
+
+ _initializeColRowBar: function(type) {
+ this._type = type;
+ L.DomEvent.on(this._table, 'mousedown', this._onMouseEvent, this);
+ L.DomEvent.on(this._table, 'mouseup', this._onMouseEvent, this);
+ },
+
+ // Avoid sending mouse move events when we don't have a button down (they are just
+ // ignored client side).
+ _enableMouseMove: function(enable) {
+ if (enable === false) {
+ L.DomEvent.off(this._table, 'mousemove', this._onMouseEvent, this);
+ } else {
+ L.DomEvent.on(this._table, 'mousemove', this._onMouseEvent, this);
+ }
+ },
+
+ _onMouseEvent: function(e) {
+ var docLayer = this._map._docLayer;
+ if (!docLayer) {
+ return;
+ }
+
+ var mousePos = docLayer._latLngToTwips(this._map.containerPointToLatLng(this._map.mouseEventToContainerPoint(e)));
+ var modifier = this._map.keyboard.modifier;
+ if (e.type === 'mousemove') {
+ docLayer._postMouseEvent('move', mousePos.x, mousePos.y, 1, this._cachedButtons, modifier, this._type);
+ return;
+ }
+
+ var buttons = 0;
+ buttons |= e.button === this.JSButtons.left ? this.LOButtons.left : 0;
+ buttons |= e.button === this.JSButtons.middle ? this.LOButtons.middle : 0;
+ buttons |= e.button === this.JSButtons.right ? this.LOButtons.right : 0;
+
+ if (e.type === 'mousedown') {
+ this._enableMouseMove(true);
+ this._cachedButtons = buttons;
+ docLayer._postMouseEvent('buttondown', mousePos.x, mousePos.y, 1, buttons, modifier, this._type);
+ } else if (e.type === 'mouseup') {
+ this._enableMouseMove(false);
+ docLayer._postMouseEvent('buttonup', mousePos.x, mousePos.y, 1, buttons, modifier, this._type);
+ }
+ },
+
+});
+
+L.colrowheader = function (options) {
+ return new L.ColRowHeader(options);
+};
\ No newline at end of file
diff --git a/loleaflet/src/control/Control.ColumnHeader.js b/loleaflet/src/control/Control.ColumnHeader.js
index 17d9082..a6746b9 100644
--- a/loleaflet/src/control/Control.ColumnHeader.js
+++ b/loleaflet/src/control/Control.ColumnHeader.js
@@ -2,7 +2,8 @@
* Control.ColumnHeader
*/
-L.Control.ColumnHeader = L.Control.extend({
+L.Control.ColumnHeader = L.Control.ColRowHeader.extend({
+
onAdd: function () {
var docContainer = L.DomUtil.get('document-container');
var divHeader = L.DomUtil.create('div', 'spreadsheet-container-column', docContainer.parentElement);
@@ -22,8 +23,10 @@ L.Control.ColumnHeader = L.Control.extend({
this._viewPort = 0;
// dummy initial header
- var dummy = L.DomUtil.create('th', 'spreadsheet-table-column-cell', this._columns);
- L.DomUtil.create('div', 'spreadsheet-table-column-cell-text', dummy);
+ var dummy = L.DomUtil.create('th', 'spreadsheet-table-column-cell spreadsheet-table-noselect', this._columns);
+ L.DomUtil.create('div', 'spreadsheet-table-column-cell-text spreadsheet-table-noselect', dummy);
+
+ this._initializeColRowBar('colbar');
return document.createElement('div');
},
@@ -57,8 +60,8 @@ L.Control.ColumnHeader = L.Control.extend({
for (iterator = 0; iterator < columns.length; iterator++) {
width = columns[iterator].size - (iterator > 0 ? columns[iterator - 1].size : 0);
twip = new L.Point(width, width);
- column = L.DomUtil.create('th', 'spreadsheet-table-column-cell', this._columns);
- text = L.DomUtil.create('div', 'spreadsheet-table-column-cell-text', column);
+ column = L.DomUtil.create('th', 'spreadsheet-table-column-cell spreadsheet-table-noselect', this._columns);
+ text = L.DomUtil.create('div', 'spreadsheet-table-column-cell-text spreadsheet-table-noselect', column);
text.innerHTML = columns[iterator].text;
column.width = Math.round(converter.call(context, twip).x) - 1 + 'px';
}
diff --git a/loleaflet/src/control/Control.RowHeader.js b/loleaflet/src/control/Control.RowHeader.js
index c4fab2a..8700c65 100644
--- a/loleaflet/src/control/Control.RowHeader.js
+++ b/loleaflet/src/control/Control.RowHeader.js
@@ -2,7 +2,7 @@
* L.Control.RowHeader
*/
-L.Control.RowHeader = L.Control.extend({
+L.Control.RowHeader = L.Control.ColRowHeader.extend({
onAdd: function () {
var docContainer = L.DomUtil.get('document-container');
var divRowHeader = L.DomUtil.create('div', 'spreadsheet-container-row', docContainer.parentElement);
@@ -15,8 +15,10 @@ L.Control.RowHeader = L.Control.extend({
// dummy initial row header
var trRow = L.DomUtil.create('tr', '', this._rows);
- var thRow = L.DomUtil.create('th', 'spreadsheet-table-row-cell', trRow);
- L.DomUtil.create('div', 'spreadsheet-table-row-cell-text', thRow);
+ var thRow = L.DomUtil.create('th', 'spreadsheet-table-row-cell spreadsheet-table-noselect', trRow);
+ L.DomUtil.create('div', 'spreadsheet-table-row-cell-text spreadsheet-table-noselect', thRow);
+
+ this._initializeColRowBar('rowbar');
return document.createElement('div');
},
@@ -51,8 +53,8 @@ L.Control.RowHeader = L.Control.extend({
height = rows[iterator].size - (iterator > 0 ? rows[iterator - 1].size : 0);
twip = new L.Point(height, height);
row = L.DomUtil.create('tr', '', this._rows);
- cell = L.DomUtil.create('th', 'spreadsheet-table-row-cell', row);
- text = L.DomUtil.create('div', 'spreadsheet-table-row-cell-text', cell);
+ cell = L.DomUtil.create('th', 'spreadsheet-table-row-cell spreadsheet-table-noselect', row);
+ text = L.DomUtil.create('div', 'spreadsheet-table-row-cell-text spreadsheet-table-noselect', cell);
text.innerHTML = rows[iterator].text;
height = Math.round(converter.call(context, twip).y) - (iterator > 0 ? 1 : 0) + 'px';
L.DomUtil.setStyle(text, 'line-height', height);
diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index 1810ca3..6f05a2f 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -660,15 +660,19 @@ L.TileLayer = L.GridLayer.extend({
this._onUpdateCellCursor();
},
- _postMouseEvent: function(type, x, y, count, buttons, modifier) {
+ _postMouseEvent: function(type, x, y, count, buttons, modifier, targetwindow) {
if (this._clientZoom) {
// the zoom level has changed
L.Socket.sendMessage('clientzoom ' + this._clientZoom);
this._clientZoom = null;
}
- L.Socket.sendMessage('mouse type=' + type +
- ' x=' + x + ' y=' + y + ' count=' + count +
- ' buttons=' + buttons + ' modifier=' + modifier);
+ var message = 'mouse type=' + type +
+ ' x=' + x + ' y=' + y + ' count=' + count +
+ ' buttons=' + buttons + ' modifier=' + modifier;
+ if (targetwindow) {
+ message += ' targetwindow=' + targetwindow;
+ }
+ L.Socket.sendMessage(message);
},
_postKeyboardEvent: function(type, charcode, keycode) {
commit d1b39e39e86c4e5bc58dfffdceed2ac6b4d95606
Author: Andrzej Hunt <andrzej at ahunt.org>
Date: Mon Nov 30 12:14:33 2015 -0800
loolwsd: add support for postMouseEvent's targetwindow
(cherry picked from commit b45e3fa5becf8fcbf106cb6b944c8f4709563d43)
diff --git a/loolwsd/LOOLSession.cpp b/loolwsd/LOOLSession.cpp
index 9708131..17bac85 100644
--- a/loolwsd/LOOLSession.cpp
+++ b/loolwsd/LOOLSession.cpp
@@ -1372,8 +1372,9 @@ bool ChildProcessSession::keyEvent(const char* /*buffer*/, int /*length*/, Strin
bool ChildProcessSession::mouseEvent(const char* /*buffer*/, int /*length*/, StringTokenizer& tokens)
{
int type, x, y, count, buttons, modifier;
+ std::string targetwindow;
- if (tokens.count() != 7 ||
+ if (((tokens.count() != 7 && tokens.count() != 8)) ||
!getTokenKeyword(tokens[1], "type",
{{"buttondown", LOK_MOUSEEVENT_MOUSEBUTTONDOWN},
{"buttonup", LOK_MOUSEEVENT_MOUSEBUTTONUP},
@@ -1389,7 +1390,14 @@ bool ChildProcessSession::mouseEvent(const char* /*buffer*/, int /*length*/, Str
return false;
}
- _loKitDocument->pClass->postMouseEvent(_loKitDocument, type, x, y, count, buttons, modifier);
+ // target window parameter is optional - LOK assumes
+ // document if not specified.
+ if (tokens.count() == 8)
+ {
+ getTokenString(tokens[7], "targetwindow", targetwindow);
+ }
+
+ _loKitDocument->pClass->postMouseEvent(_loKitDocument, type, x, y, count, buttons, modifier, targetwindow.c_str());
return true;
}
commit 9bcde92f5084c35f0800df5b40ccd6ef5630aa59
Author: Andrzej Hunt <andrzej at ahunt.org>
Date: Mon Nov 30 12:15:07 2015 -0800
loolwsd: update bundled headers
(cherry picked from commit 49cddd1efb93d8f03a1696f64cf79f96839e1d6b)
diff --git a/loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKit.h b/loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKit.h
index a78c0aa..016caf4 100644
--- a/loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKit.h
+++ b/loolwsd/bundled/include/LibreOfficeKit/LibreOfficeKit.h
@@ -148,7 +148,8 @@ struct _LibreOfficeKitDocumentClass
int nY,
int nCount,
int nButtons,
- int nModifier);
+ int nModifier,
+ const char* pTargetWindow);
/// @see lok::Document::postUnoCommand
void (*postUnoCommand) (LibreOfficeKitDocument* pThis,
More information about the Libreoffice-commits
mailing list