[Libreoffice-commits] online.git: Branch 'feature/jsdialogs' - 417 commits - android/app android/build.gradle android/build.gradle.in android/.gitignore android/gradle android/lib android/Makefile.am android/README common/Authorization.hpp common/Clipboard.hpp common/Common.hpp common/Crypto.hpp common/FileUtil.cpp common/FileUtil.hpp common/IoUtil.cpp common/IoUtil.hpp common/JsonUtil.hpp common/Log.cpp common/Log.hpp common/LOOLWebSocket.hpp common/Message.hpp common/MessageQueue.cpp common/MessageQueue.hpp common/Png.hpp common/Protocol.hpp common/Rectangle.hpp common/Seccomp.hpp common/security.h common/Session.cpp common/Session.hpp common/SigUtil.cpp common/SigUtil.hpp common/SpookyV2.h common/StringVector.hpp common/Unit.hpp common/UnitHTTP.hpp common/Util.cpp common/Util.hpp configure.ac cypress_test/cypress.json cypress_test/data cypress_test/eslint_plugin cypress_test/.eslintrc cypress_test/.gitignore cypress_test/integration_tests cypress_test/Makefile.am cypress_test/package.json cypr ess_test/run_iteratively.sh cypress_test/support debian/loolwsd.postinst.in docker/Dockerfile docker/scripts fuzzer/admin-data fuzzer/ClientSession.cpp .gitignore ios/config.h.in ios/Mobile ios/Mobile.xcodeproj ios/README kit/ChildSession.cpp kit/ChildSession.hpp kit/Delta.hpp kit/DummyLibreOfficeKit.cpp kit/DummyLibreOfficeKit.hpp kit/ForKit.cpp kit/Kit.cpp kit/KitHelper.hpp kit/Kit.hpp kit/Watermark.hpp logerrit loleaflet/admin loleaflet/css loleaflet/.eslintrc loleaflet/.gitignore loleaflet/html loleaflet/images loleaflet/js loleaflet/l10n loleaflet/Makefile.am loleaflet/po loleaflet/README loleaflet/reference.html loleaflet/spec loleaflet/src loleaflet/util loleaflet/welcome loolstat loolwsd-generate-proof-key loolwsd.spec.in loolwsd.xml.in Makefile.am man/loolconfig.1 man/loolconvert.1 man/loolforkit.1 man/loolwsd.1 man/loolwsd-generate-proof-key.1 man/loolwsd-systemplate-setup.1 net/clientnb.cpp net/DelaySocket.cpp net/DelaySocket.hpp net/FakeSocket.hpp net/ServerSocket.hpp ne t/Socket.cpp net/Socket.hpp net/Ssl.cpp net/Ssl.hpp net/SslSocket.hpp net/WebSocketHandler.hpp sysconfig.loolwsd test/countloolkits.hpp test/helpers.hpp test/httpcrashtest.cpp test/lokassert.hpp test/Makefile.am test/test.hpp test/TileCacheTests.cpp test/UnitAdmin.cpp test/UnitConvert.cpp test/UnitFuzz.cpp test/UnitHTTP.cpp test/UnitOOB.cpp test/UnitSession.cpp test/UnitWOPIDocumentConflict.cpp test/UnitWOPITemplate.cpp test/WhiteBoxTests.cpp test/WopiProofTests.cpp test/WopiTestServer.hpp tools/Config.cpp tools/Connect.cpp tools/KitClient.cpp tools/Replay.hpp tools/Stress.cpp tools/Tool.cpp tools/WebSocketDump.cpp wsd/Admin.cpp wsd/Admin.hpp wsd/AdminModel.cpp wsd/AdminModel.hpp wsd/Auth.cpp wsd/Auth.hpp wsd/ClientSession.cpp wsd/ClientSession.hpp wsd/DocumentBroker.cpp wsd/DocumentBroker.hpp wsd/Exceptions.hpp wsd/FileServer.cpp wsd/FileServer.hpp wsd/LOOLWSD.cpp wsd/LOOLWSD.hpp wsd/metrics.txt wsd/ProofKey.cpp wsd/ProofKey.hpp wsd/protocol.txt wsd/ProxyProtocol.cpp wsd/ProxyProto col.hpp wsd/QueueHandler.hpp wsd/reference.md wsd/SenderQueue.hpp wsd/Storage.cpp wsd/Storage.hpp wsd/TileCache.cpp wsd/TileCache.hpp wsd/TileDesc.hpp wsd/TraceFile.hpp wsd/UserMessages.hpp
Szymon KÅos (via logerrit)
logerrit at kemper.freedesktop.org
Tue May 5 11:33:09 UTC 2020
Rebased ref, commits from common ancestor:
commit 180eecb3e821e63edb05e306cca70ad7f78e278f
Author: Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Tue Mar 31 12:17:20 2020 +0200
Commit: Szymon Kłos <szymon.klos at collabora.com>
CommitDate: Tue May 5 12:47:33 2020 +0200
jsdialog: show ok button in message boxes
Change-Id: I4f57b6cc0275875150a6cd1c944e2d12394a59a4
diff --git a/loleaflet/src/control/Control.JSDialogBuilder.js b/loleaflet/src/control/Control.JSDialogBuilder.js
index 35df4a7d7..a1febf8df 100644
--- a/loleaflet/src/control/Control.JSDialogBuilder.js
+++ b/loleaflet/src/control/Control.JSDialogBuilder.js
@@ -128,6 +128,7 @@ L.Control.JSDialogBuilder = L.Control.extend({
this._controlHandlers['edit'] = this._editControl;
this._controlHandlers['multilineedit'] = this._multiLineEditControl;
this._controlHandlers['pushbutton'] = this._pushbuttonControl;
+ this._controlHandlers['okbutton'] = this._pushbuttonControl;
this._controlHandlers['combobox'] = this._comboboxControl;
this._controlHandlers['comboboxentry'] = this._comboboxEntry;
this._controlHandlers['listbox'] = this._listboxControl;
commit f0c70b9d1d650b7724629caa9d85312e57ee8945
Author: Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Tue Mar 31 12:14:40 2020 +0200
Commit: Szymon Kłos <szymon.klos at collabora.com>
CommitDate: Tue May 5 12:47:33 2020 +0200
jsdialog: close mobilewizard before all dialogs
Mobilewizard has reference to the last window so in
case of message box it will be closed first.
This prevent us from closing parent window before child
as we close all windows in closePopups.
Change-Id: I9887b56374f2fc7e1cabb46d97e2c8ee03511596
diff --git a/loleaflet/src/map/handler/Map.TouchGesture.js b/loleaflet/src/map/handler/Map.TouchGesture.js
index cff7eeffe..2a17360e2 100644
--- a/loleaflet/src/map/handler/Map.TouchGesture.js
+++ b/loleaflet/src/map/handler/Map.TouchGesture.js
@@ -309,7 +309,6 @@ L.Map.TouchGesture = L.Handler.extend({
return;
}
- this._map.fire('closepopups');
this._map.fire('closemobilewizard');
// The validity dropdown marker icon (exists only in calc) needs to be notified of tap events if it is the target.
@@ -320,6 +319,7 @@ L.Map.TouchGesture = L.Handler.extend({
return;
}
+ this._map.fire('closepopups');
this._map.fire('editorgotfocus');
var docLayer = this._map._docLayer;
commit e1887377ff59938b30a8462914ef36945308e0f5
Author: Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Thu Mar 26 14:58:14 2020 +0100
Commit: Szymon Kłos <szymon.klos at collabora.com>
CommitDate: Tue May 5 12:47:33 2020 +0200
jsdialog: customize spell checking error label
Change-Id: Ieb977363bda76af51a4e5d41052fc378995e24ea
diff --git a/loleaflet/css/mobilewizard.css b/loleaflet/css/mobilewizard.css
index aa462ddb7..f4ad379fe 100644
--- a/loleaflet/css/mobilewizard.css
+++ b/loleaflet/css/mobilewizard.css
@@ -848,6 +848,12 @@ input[type=checkbox][disabled] {
font-size: 15pt;
}
+#mobile-spell-error {
+ border: none;
+ font-size: 15pt;
+ color: red !important;
+}
+
#searchlabel {
border: none;
font-size: 11pt;
commit daf63f6171f2caad4a4bc8021aebf65a3116e823
Author: Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Wed Mar 25 12:17:06 2020 +0100
Commit: Szymon Kłos <szymon.klos at collabora.com>
CommitDate: Tue May 5 12:47:33 2020 +0200
jsdialog: handle drawingarea
Change-Id: Ia3bc01e76c71edc7ac59e3157e7de5700397c21d
diff --git a/loleaflet/css/mobilewizard.css b/loleaflet/css/mobilewizard.css
index 8b52fb3bd..aa462ddb7 100644
--- a/loleaflet/css/mobilewizard.css
+++ b/loleaflet/css/mobilewizard.css
@@ -856,3 +856,8 @@ input[type=checkbox][disabled] {
#criteria.ui-tab, #inputhelp.ui-tab {
width: 30% !important;
}
+
+.mobile-wizard.ui-drawing-area {
+ margin: 10px 5% 10px 5% !important;
+ width: 90%;
+}
diff --git a/loleaflet/src/control/Control.JSDialogBuilder.js b/loleaflet/src/control/Control.JSDialogBuilder.js
index 2506960a9..35df4a7d7 100644
--- a/loleaflet/src/control/Control.JSDialogBuilder.js
+++ b/loleaflet/src/control/Control.JSDialogBuilder.js
@@ -152,6 +152,7 @@ L.Control.JSDialogBuilder = L.Control.extend({
this._controlHandlers['colorlistbox'] = this._colorControl;
this._controlHandlers['borderstyle'] = this._borderControl;
this._controlHandlers['treelistbox'] = this._listboxControl;
+ this._controlHandlers['drawingarea'] = this._drawingAreaControl;
this._controlHandlers['mainmenu'] = this._containerHandler;
this._controlHandlers['submenu'] = this._subMenuHandler;
@@ -1481,6 +1482,15 @@ L.Control.JSDialogBuilder = L.Control.extend({
return false;
},
+ _drawingAreaControl: function(parentContainer, data) {
+ if (data.image) {
+ var image = L.DomUtil.create('img', 'mobile-wizard ui-drawing-area', parentContainer);
+ image.src = data.image.replace('\\', '');
+ image.id = data.id;
+ }
+ return false;
+ },
+
_htmlControl: function(parentContainer, data, builder) {
var container = L.DomUtil.create('div', builder.options.cssClass, parentContainer);
container.appendChild(data.content);
commit b378eba092d956d6810ad3379fc59186fb1ce893
Author: Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Tue Mar 24 14:53:35 2020 +0100
Commit: Szymon Kłos <szymon.klos at collabora.com>
CommitDate: Tue May 5 12:47:33 2020 +0200
jsdialog: handle treelistbox
Change-Id: I89da1b60591f8a83413b0d25ec75812120ab5f11
diff --git a/loleaflet/src/control/Control.JSDialogBuilder.js b/loleaflet/src/control/Control.JSDialogBuilder.js
index f1248abd9..2506960a9 100644
--- a/loleaflet/src/control/Control.JSDialogBuilder.js
+++ b/loleaflet/src/control/Control.JSDialogBuilder.js
@@ -151,6 +151,7 @@ L.Control.JSDialogBuilder = L.Control.extend({
this._controlHandlers['divcontainer'] = this._divContainerHandler;
this._controlHandlers['colorlistbox'] = this._colorControl;
this._controlHandlers['borderstyle'] = this._borderControl;
+ this._controlHandlers['treelistbox'] = this._listboxControl;
this._controlHandlers['mainmenu'] = this._containerHandler;
this._controlHandlers['submenu'] = this._subMenuHandler;
@@ -1383,9 +1384,10 @@ L.Control.JSDialogBuilder = L.Control.extend({
var value = data.entries[data.selectedEntries[0]];
valueNode = L.DomUtil.create('div', '', null);
valueNode.innerHTML = value;
- } else {
+ } else if (isNaN(parseInt(data.selectedEntries[0])))
+ title = builder._cleanText(data.selectedEntries[0]);
+ else
title = data.entries[data.selectedEntries[0]];
- }
}
title = builder._cleanText(title);
data.text = title;
@@ -1394,6 +1396,7 @@ L.Control.JSDialogBuilder = L.Control.extend({
for (var index in data.entries) {
var style = 'ui-combobox-text';
if ((data.selectedEntries && index == data.selectedEntries[0])
+ || (data.selectedEntries && data.entries[index] == data.selectedEntries[0])
|| data.entries[index] == title) {
style += ' selected';
}
commit e73a37da3baa7d8b4dd4b039f100f6763d1f55c1
Author: Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Wed Mar 18 14:47:36 2020 +0100
Commit: Szymon Kłos <szymon.klos at collabora.com>
CommitDate: Tue May 5 12:47:07 2020 +0200
jsdialog: full width combobox
Change-Id: I8df77720b975bcd34822d04cedbe4bd1c360e193
diff --git a/loleaflet/css/mobilewizard.css b/loleaflet/css/mobilewizard.css
index 4bb3c469c..8b52fb3bd 100644
--- a/loleaflet/css/mobilewizard.css
+++ b/loleaflet/css/mobilewizard.css
@@ -832,6 +832,11 @@ input[type=checkbox][disabled] {
width: 100%;
}
+.combobox {
+ width: -moz-available !important;
+ width: -webkit-fill-available !important;
+}
+
.ui-edit.mobile-wizard, textarea {
width: -moz-available;
width: -webkit-fill-available;
diff --git a/loleaflet/src/control/Control.JSDialogBuilder.js b/loleaflet/src/control/Control.JSDialogBuilder.js
index 67f221ce4..f1248abd9 100644
--- a/loleaflet/src/control/Control.JSDialogBuilder.js
+++ b/loleaflet/src/control/Control.JSDialogBuilder.js
@@ -1303,7 +1303,7 @@ L.Control.JSDialogBuilder = L.Control.extend({
if (data && data.id)
sectionTitle.id = data.id;
- var leftDiv = L.DomUtil.create('div', 'ui-header-left', sectionTitle);
+ var leftDiv = L.DomUtil.create('div', 'ui-header-left combobox', sectionTitle);
var editCallback = function(value) {
builder.callback('combobox', 'change', data, value, builder);
commit 31d1ea984a598d27763c076e76a6090fd16e08a5
Author: Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Wed Mar 11 13:17:07 2020 +0100
Commit: Szymon Kłos <szymon.klos at collabora.com>
CommitDate: Tue May 5 12:12:53 2020 +0200
jsdialog: fix inifinite regenetate JSON loop
Change-Id: I52667e115a0cf70f09f570dc6ea1ec0bcac49460
diff --git a/loleaflet/src/control/Control.MobileWizard.js b/loleaflet/src/control/Control.MobileWizard.js
index 3a7715c00..1507e9b79 100644
--- a/loleaflet/src/control/Control.MobileWizard.js
+++ b/loleaflet/src/control/Control.MobileWizard.js
@@ -269,7 +269,8 @@ L.Control.MobileWizard = L.Control.extend({
},
_goToPath: function(path) {
- if (this._tabs && path && path.length)
+ // when dialog has tabs, tab selection triggers the callback, causes infinite regenetate loop
+ if (this._tabs && path && path.length && !this.map.dialog.hasDialogInMobilePanelOpened())
this._selectTab(path[0]);
var _path = [];
commit 400730e2204361b49219d573a9b5cde08548077d
Author: Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Thu Mar 5 14:40:54 2020 +0100
Commit: Szymon Kłos <szymon.klos at collabora.com>
CommitDate: Tue May 5 11:54:00 2020 +0200
jsdialog: send control type with event
Change-Id: I6cd6f1d26b5c78715f9e0adc992a1869e0f19a97
diff --git a/loleaflet/src/control/Control.JSDialogBuilder.js b/loleaflet/src/control/Control.JSDialogBuilder.js
index 9300bc4a7..67f221ce4 100644
--- a/loleaflet/src/control/Control.JSDialogBuilder.js
+++ b/loleaflet/src/control/Control.JSDialogBuilder.js
@@ -205,8 +205,11 @@ L.Control.JSDialogBuilder = L.Control.extend({
data = typeof data === 'string' ? data.replace('"', '\\"') : data;
var windowId = window.mobileDialogId !== undefined ? window.mobileDialogId :
(window.sidebarId !== undefined ? window.sidebarId : -1);
- var message = 'dialogevent ' + windowId +
- ' {\"id\":\"' + object.id + '\", \"cmd\": \"' + eventType + '\", \"data\":\"' + data + '\"}';
+ var message = 'dialogevent ' + windowId
+ + ' {\"id\":\"' + object.id
+ + '\", \"cmd\": \"' + eventType
+ + '\", \"data\": \"' + data
+ + '\", \"type\": \"' + objectType + '\"}';
builder.map._socket.sendMessage(message);
}
},
commit 2caba3fbc691e2ca062febbe3f9736aee274cdb1
Author: Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Fri Feb 21 09:54:33 2020 +0100
Commit: Szymon Kłos <szymon.klos at collabora.com>
CommitDate: Tue May 5 11:49:46 2020 +0200
jsdialog: handle events for dialogs in mobilewizard
- remember window id
- close mobile wizard on dialog close
- close dialog on mobile wizard close
- don't show dialogs on mobile devices
Change-Id: I585c5b92192655684eedd62d88817a92fc1fc0a8
diff --git a/loleaflet/src/control/Control.JSDialogBuilder.js b/loleaflet/src/control/Control.JSDialogBuilder.js
index e10211306..9300bc4a7 100644
--- a/loleaflet/src/control/Control.JSDialogBuilder.js
+++ b/loleaflet/src/control/Control.JSDialogBuilder.js
@@ -203,7 +203,9 @@ L.Control.JSDialogBuilder = L.Control.extend({
builder.map.sendUnoCommand(encodedCommand);
} else if (object) {
data = typeof data === 'string' ? data.replace('"', '\\"') : data;
- var message = 'dialogevent ' + (window.sidebarId !== undefined ? window.sidebarId : -1) +
+ var windowId = window.mobileDialogId !== undefined ? window.mobileDialogId :
+ (window.sidebarId !== undefined ? window.sidebarId : -1);
+ var message = 'dialogevent ' + windowId +
' {\"id\":\"' + object.id + '\", \"cmd\": \"' + eventType + '\", \"data\":\"' + data + '\"}';
builder.map._socket.sendMessage(message);
}
diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js
index 9c92895b2..e8773edf6 100644
--- a/loleaflet/src/control/Control.LokDialog.js
+++ b/loleaflet/src/control/Control.LokDialog.js
@@ -59,6 +59,10 @@ L.Control.LokDialog = L.Control.extend({
dialogIdPrefix: 'lokdialog-',
+ hasDialogInMobilePanelOpened: function() {
+ return window.mobileDialogId !== undefined;
+ },
+
onPan: function (ev) {
if (!draggedObject)
return;
@@ -289,7 +293,7 @@ L.Control.LokDialog = L.Control.extend({
}
if (e.action === 'created') {
- if (e.winType === 'dialog') {
+ if (e.winType === 'dialog' && !window.mode.isMobile()) {
// When left/top are invalid, the dialog shows in the center.
this._launchDialog(e.id, left, top, width, height, e.title);
} else if (e.winType === 'calc-input-win') {
@@ -335,7 +339,17 @@ L.Control.LokDialog = L.Control.extend({
}
// All other callbacks doen't make sense without an active dialog.
- if (!(this._isOpen(e.id) || this._getParentId(e.id)))
+ if (!(this._isOpen(e.id) || this._getParentId(e.id))) {
+ if (e.action == 'close' && window.mobileDialogId == e.id) {
+ window.mobileDialogId = undefined;
+ this._map.fire('closemobilewizard');
+ }
+
+ return;
+ }
+
+ // We don't want dialogs and sidebar on smartphones, only calc input window is allowed
+ if (window.mode.isMobile() && e.winType !== 'calc-input-win' && !this.isCalcInputBar(e.id))
return;
if (e.action === 'invalidate') {
@@ -1387,6 +1401,9 @@ L.Control.LokDialog = L.Control.extend({
this._onDialogClose(dialogId, true);
}
}
+ if (this.hasDialogInMobilePanelOpened()) {
+ this._onDialogClose(window.mobileDialogId, true);
+ }
},
onCloseCurrentPopUp: function() {
diff --git a/loleaflet/src/control/Control.MobileWizard.js b/loleaflet/src/control/Control.MobileWizard.js
index fa04d7b77..3a7715c00 100644
--- a/loleaflet/src/control/Control.MobileWizard.js
+++ b/loleaflet/src/control/Control.MobileWizard.js
@@ -93,6 +93,12 @@ L.Control.MobileWizard = L.Control.extend({
},
_hideWizard: function() {
+ // dialog
+ if (this.map.dialog.hasDialogInMobilePanelOpened()) {
+ this.map.dialog._onDialogClose(window.mobileDialogId, true);
+ window.mobileDialogId = undefined;
+ }
+
$('#mobile-wizard').hide();
$('#mobile-wizard-content').empty();
if (this.map._permission === 'edit') {
@@ -316,6 +322,11 @@ L.Control.MobileWizard = L.Control.extend({
return;
}
+ if (data.id && !isNaN(data.id) && !isSidebar) {
+ // id is a number - remember window id for interaction
+ window.mobileDialogId = data.id;
+ }
+
// Sometimes it happens that we get the same sidebar
// structure twice. This makes hard to test mobile wizard.
if (isSidebar && L.Browser.cypressTest) {
commit 85f09360d8f3d4b68f7f533d4cef5203fc58413f
Author: Pranam Lashkari <lpranam at collabora.com>
AuthorDate: Wed Jan 29 02:35:02 2020 +0530
Commit: Michael Meeks <michael.meeks at collabora.com>
CommitDate: Mon May 4 13:59:47 2020 +0200
Follow up for be48005
substr method replaced with startsWith for more readability and optimisation
Change-Id: I205a843359942ef7dea92333eaf2076ab2080983
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/87661
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
diff --git a/loleaflet/src/control/Control.JSDialogBuilder.js b/loleaflet/src/control/Control.JSDialogBuilder.js
index 7573c1376..e10211306 100644
--- a/loleaflet/src/control/Control.JSDialogBuilder.js
+++ b/loleaflet/src/control/Control.JSDialogBuilder.js
@@ -1891,7 +1891,7 @@ L.Control.JSDialogBuilder = L.Control.extend({
}
var icon = null;
- var commandName = data.command && data.command.substring(0, '.uno:'.length) === '.uno:' ? data.command.substring('.uno:'.length) : data.id;
+ var commandName = data.command && data.command.startsWith('.uno:') ? data.command.substring('.uno:'.length) : data.id;
if (commandName && commandName.length && L.LOUtil.existsIconForCommand(commandName, builder.map.getDocType())) {
var iconName = builder._generateMenuIconName(commandName);
var iconSpan = L.DomUtil.create('span', 'menu-entry-icon ' + iconName, menuEntry);
diff --git a/loleaflet/src/core/Util.js b/loleaflet/src/core/Util.js
index e504c92c5..0ea2b0ff6 100644
--- a/loleaflet/src/core/Util.js
+++ b/loleaflet/src/core/Util.js
@@ -244,6 +244,13 @@ L.Util = {
L.Util.MIN_SAFE_INTEGER = -L.Util.MAX_SAFE_INTEGER;
})();
+if (!String.prototype.startsWith) {
+ String.prototype.startsWith = function(searchString, position) {
+ position = position || 0;
+ return this.substr(position, searchString.length) === searchString;
+ };
+}
+
// shortcuts for most used utility functions
L.extend = L.Util.extend;
L.bind = L.Util.bind;
commit 8aa42bc1ba6ad4c645835c52f0aba6347dbdf978
Author: Pranam Lashkari <lpranam at collabora.com>
AuthorDate: Wed Nov 20 16:03:15 2019 +0530
Commit: Michael Meeks <michael.meeks at collabora.com>
CommitDate: Mon May 4 13:57:46 2020 +0200
killpoco: removed Poco::Thread from net directory
Removed unused Poco/Thread.h header
Change-Id: Iafcd32656f0153ec97a4db0fe0259e8b34f79add
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/83290
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
diff --git a/net/clientnb.cpp b/net/clientnb.cpp
index b63fcd5d5..6d8e7c494 100644
--- a/net/clientnb.cpp
+++ b/net/clientnb.cpp
@@ -35,7 +35,6 @@
#include <Poco/Util/Option.h>
#include <Poco/Util/OptionSet.h>
#include <Poco/Runnable.h>
-#include <Poco/Thread.h>
#include <Util.hpp>
@@ -44,7 +43,6 @@ using Poco::Net::HTTPRequest;
using Poco::Net::HTTPResponse;
using Poco::Net::WebSocket;
using Poco::Runnable;
-using Poco::Thread;
using Poco::Util::Application;
const char *HostName = "127.0.0.1";
@@ -178,8 +176,7 @@ struct Client : public Poco::Util::Application
{
std::cerr << "testLadder\n";
ThreadWorker ladder;
- Thread thread;
- thread.start(ladder);
+ std::thread thread([&ladder]{ladder.run();});
thread.join();
}
@@ -187,11 +184,11 @@ struct Client : public Poco::Util::Application
{
std::cerr << "testParallel\n";
const int num = 10;
- Thread snakes[num];
+ std::thread snakes[num];
ThreadWorker ladders[num];
for (size_t i = 0; i < num; i++)
- snakes[i].start(ladders[i]);
+ snakes[i] = std::thread([&ladders, i]{ladders[i].run();});
for (int i = 0; i < num; i++)
snakes[i].join();
diff --git a/test/httpcrashtest.cpp b/test/httpcrashtest.cpp
index 3a69a96ba..1faa4b452 100644
--- a/test/httpcrashtest.cpp
+++ b/test/httpcrashtest.cpp
@@ -30,7 +30,6 @@
#include <Poco/Net/Socket.h>
#include <Poco/Path.h>
#include <Poco/StreamCopier.h>
-#include <Poco/Thread.h>
#include <Poco/URI.h>
#include <cppunit/extensions/HelperMacros.h>
commit afcca641e560d7beef7331af5d3204ec19f3da1c
Author: Michael Meeks <michael.meeks at collabora.com>
AuthorDate: Mon May 4 09:11:00 2020 +0100
Commit: Miklos Vajna <vmiklos at collabora.com>
CommitDate: Mon May 4 11:16:44 2020 +0200
AdminModel::removeDocument: fix the other key issue by code sharing.
Change-Id: I0f841b0b54f44827f397e57e22c0d845cfb121ba
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/93401
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Miklos Vajna <vmiklos at collabora.com>
diff --git a/wsd/AdminModel.cpp b/wsd/AdminModel.cpp
index dca1c7bc0..9579a4e51 100644
--- a/wsd/AdminModel.cpp
+++ b/wsd/AdminModel.cpp
@@ -543,6 +543,17 @@ void AdminModel::addDocument(const std::string& docKey, pid_t pid,
notify(oss.str());
}
+void AdminModel::doRemove(std::map<std::string, std::unique_ptr<Document>>::iterator &docIt)
+{
+ std::unique_ptr<Document> doc;
+ std::swap(doc, docIt->second);
+ std::string docItKey = docIt->first;
+ _documents.erase(docIt);
+ _expiredDocuments.emplace(docItKey + std::to_string(std::chrono::duration_cast<std::chrono::nanoseconds>(
+ std::chrono::steady_clock::now().time_since_epoch()).count()),
+ std::move(doc));
+}
+
void AdminModel::removeDocument(const std::string& docKey, const std::string& sessionId)
{
assertCorrectThread();
@@ -561,13 +572,7 @@ void AdminModel::removeDocument(const std::string& docKey, const std::string& se
// of documents open and close, to be able to give a detailed summary
// to the admin console with views.
if (docIt->second->expireView(sessionId) == 0)
- {
- std::unique_ptr<Document> doc;
- std::swap(doc, docIt->second);
- std::string docItKey = docIt->first;
- _documents.erase(docIt);
- _expiredDocuments.emplace(docItKey + std::to_string(std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::steady_clock::now().time_since_epoch()).count()), std::move(doc));
- }
+ doRemove(docIt);
}
}
@@ -591,10 +596,7 @@ void AdminModel::removeDocument(const std::string& docKey)
}
LOG_DBG("Removed admin document [" << docKey << "].");
- std::unique_ptr<Document> doc;
- std::swap(doc, docIt->second);
- _documents.erase(docIt);
- _expiredDocuments.emplace(docIt->first + std::to_string(std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::steady_clock::now().time_since_epoch()).count()), std::move(doc));
+ doRemove(docIt);
}
}
diff --git a/wsd/AdminModel.hpp b/wsd/AdminModel.hpp
index 63f61d5c9..8faceb5f3 100644
--- a/wsd/AdminModel.hpp
+++ b/wsd/AdminModel.hpp
@@ -341,6 +341,8 @@ public:
static int getPidsFromProcName(const std::regex& procNameRegEx, std::vector<int> *pids);
private:
+ void doRemove(std::map<std::string, std::unique_ptr<Document>>::iterator &docIt);
+
std::string getMemStats();
std::string getSentActivity();
commit 389a5e8674edc527a22e083a5350d9a925752db6
Author: Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Mon May 4 09:40:40 2020 +0200
Commit: Szymon Kłos <szymon.klos at collabora.com>
CommitDate: Mon May 4 10:27:13 2020 +0200
notebookbar: hide unsupported items from review tab
Change-Id: I730a68b46e0a7a896a068e5e2fff4e7d5ea3dc86
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/93400
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Szymon Kłos <szymon.klos at collabora.com>
diff --git a/loleaflet/src/control/Control.NotebookbarBuilder.js b/loleaflet/src/control/Control.NotebookbarBuilder.js
index a651b7255..011cc61bb 100644
--- a/loleaflet/src/control/Control.NotebookbarBuilder.js
+++ b/loleaflet/src/control/Control.NotebookbarBuilder.js
@@ -77,6 +77,10 @@ L.Control.NotebookbarBuilder = L.Control.JSDialogBuilder.extend({
this._toolitemHandlers['.uno:LineStyle'] = function() {};
this._toolitemHandlers['.uno:InsertFormula'] = function() {};
this._toolitemHandlers['.uno:AutoSum'] = function() {};
+ this._toolitemHandlers['.uno:ReplyComment'] = function() {};
+ this._toolitemHandlers['.uno:DeleteComment'] = function() {};
+ this._toolitemHandlers['.uno:CompareDocuments'] = function() {};
+ this._toolitemHandlers['.uno:MergeDocuments'] = function() {};
this._toolitemHandlers['vnd.sun.star.findbar:FocusToFindbar'] = function() {};
},
commit 6bdcca933d7acfc992a40948f8b5afc5c57f61dc
Author: Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Mon May 4 09:26:05 2020 +0200
Commit: Miklos Vajna <vmiklos at collabora.com>
CommitDate: Mon May 4 09:43:42 2020 +0200
AdminModel::removeDocument: hold a copy of doc key before erase
Change-Id: I3713976b980897c6eb3e1d9e95476c5ff3dbbba1
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/93398
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Miklos Vajna <vmiklos at collabora.com>
diff --git a/wsd/AdminModel.cpp b/wsd/AdminModel.cpp
index e88b7aeab..dca1c7bc0 100644
--- a/wsd/AdminModel.cpp
+++ b/wsd/AdminModel.cpp
@@ -564,8 +564,9 @@ void AdminModel::removeDocument(const std::string& docKey, const std::string& se
{
std::unique_ptr<Document> doc;
std::swap(doc, docIt->second);
+ std::string docItKey = docIt->first;
_documents.erase(docIt);
- _expiredDocuments.emplace(docIt->first + std::to_string(std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::steady_clock::now().time_since_epoch()).count()), std::move(doc));
+ _expiredDocuments.emplace(docItKey + std::to_string(std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::steady_clock::now().time_since_epoch()).count()), std::move(doc));
}
}
}
commit b0e2bd990efda7c408d8ac4e76c15327b30a35f3
Author: Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Fri May 1 12:19:29 2020 +0200
Commit: Szymon Kłos <szymon.klos at collabora.com>
CommitDate: Mon May 4 08:54:32 2020 +0200
notebookbar: separate file for each app
Change-Id: If61ed762a3dd55c0cef7d58b7a3b1ddf8276cce3
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/93304
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Szymon Kłos <szymon.klos at collabora.com>
diff --git a/loleaflet/Makefile.am b/loleaflet/Makefile.am
index 94caedb92..4bb2b1c84 100644
--- a/loleaflet/Makefile.am
+++ b/loleaflet/Makefile.am
@@ -282,6 +282,8 @@ LOLEAFLET_JS =\
src/control/Control.UIManager.js \
src/control/Control.DocumentNameInput.js \
src/control/Control.Notebookbar.js \
+ src/control/Control.NotebookbarWriter.js \
+ src/control/Control.NotebookbarCalc.js \
src/control/Control.NotebookbarBuilder.js \
src/control/Control.Layers.js \
src/control/Search.js \
@@ -552,6 +554,8 @@ pot:
src/control/Control.UIManager.js \
src/control/Control.DocumentNameInput.js \
src/control/Control.Notebookbar.js \
+ src/control/Control.NotebookbarWriter.js \
+ src/control/Control.NotebookbarCalc.js \
src/control/Control.NotebookbarBuilder.js \
src/control/Ruler.js \
src/control/Signing.js \
diff --git a/loleaflet/src/control/Control.Notebookbar.js b/loleaflet/src/control/Control.Notebookbar.js
index 1a1bc37c1..0fca7d1ca 100644
--- a/loleaflet/src/control/Control.Notebookbar.js
+++ b/loleaflet/src/control/Control.Notebookbar.js
@@ -5,9 +5,6 @@
/* global $ */
L.Control.Notebookbar = L.Control.extend({
- options: {
- docType: ''
- },
onAdd: function (map) {
this.map = map;
@@ -39,68 +36,13 @@ L.Control.Notebookbar = L.Control.extend({
$('nav').prepend(tabs);
},
- selectedTab: function(tabText) {
- console.log(tabText);
- switch (tabText) {
- case 'HomeLabel':
- this.loadTab(this.getHomeTab());
- break;
-
- case 'InsertLabel':
- this.loadTab(this.getInsertTab());
- break;
-
- case 'LayoutLabel':
- this.loadTab(this.getLayoutTab());
- break;
-
- case 'ReferencesLabel':
- this.loadTab(this.getReferencesTab());
- break;
-
- case 'TableLabel':
- this.loadTab(this.getTableTab());
- break;
-
- case 'ReviewLabel':
- this.loadTab(this.getReviewTab());
- break;
- }
+ selectedTab: function() {
+ // implement in child classes
},
getTabs: function() {
- return [
- {
- 'text': '~Home',
- 'id': '2',
- 'name': 'HomeLabel'
- },
- {
- 'text': '~Insert',
- 'id': '3',
- 'name': 'InsertLabel'
- },
- {
- 'text': '~Layout',
- 'id': '4',
- 'name': 'LayoutLabel'
- },
- {
- 'text': 'Reference~s',
- 'id': '5',
- 'name': 'ReferencesLabel'
- },
- {
- 'text': '~Review',
- 'id': '6',
- 'name': 'ReviewLabel'
- },
- {
- 'text': '~Table',
- 'id': '8',
- 'name': 'TableLabel'
- }
- ];
+ // implement in child classes
+ return [];
},
// required, called by builder, not needed in this container
@@ -153,32 +95,4 @@ L.Control.Notebookbar = L.Control.extend({
$(window).resize(handler);
$('.notebookbar-scroll-wrapper').scroll(handler);
},
-
- getHomeTab: function() {
- return '';
- },
-
- getInsertTab: function() {
- return '';
- },
-
- getLayoutTab: function() {
- return '';
- },
-
- getReferencesTab: function() {
- return '';
- },
-
- getTableTab: function() {
- return '';
- },
-
- getReviewTab: function() {
- return '';
- }
});
-
-L.control.notebookbar = function (options) {
- return new L.Control.Notebookbar(options);
-};
diff --git a/loleaflet/src/control/Control.NotebookbarCalc.js b/loleaflet/src/control/Control.NotebookbarCalc.js
new file mode 100644
index 000000000..3b530d922
--- /dev/null
+++ b/loleaflet/src/control/Control.NotebookbarCalc.js
@@ -0,0 +1,52 @@
+/* -*- js-indent-level: 8 -*- */
+/*
+ * L.Control.NotebookbarCalc
+ */
+
+/* global */
+L.Control.NotebookbarCalc = L.Control.NotebookbarWriter.extend({
+
+ selectedTab: function(tabText) {
+ switch (tabText) {
+ case 'HomeLabel':
+ this.loadTab(this.getHomeTab());
+ break;
+
+ case 'InsertLabel':
+ this.loadTab(this.getInsertTab());
+ break;
+
+ case 'ReviewLabel':
+ this.loadTab(this.getReviewTab());
+ break;
+ }
+ },
+
+ getTabs: function() {
+ return [
+ {
+ 'text': '~Home',
+ 'id': '2',
+ 'name': 'HomeLabel'
+ },
+ {
+ 'text': '~Insert',
+ 'id': '3',
+ 'name': 'InsertLabel'
+ },
+ {
+ 'text': '~Review',
+ 'id': '6',
+ 'name': 'ReviewLabel'
+ }
+ ];
+ },
+
+ getHomeTab: function() {
+ return '';
+ }
+});
+
+L.control.notebookbarCalc = function (options) {
+ return new L.Control.NotebookbarCalc(options);
+};
diff --git a/loleaflet/src/control/Control.NotebookbarWriter.js b/loleaflet/src/control/Control.NotebookbarWriter.js
new file mode 100644
index 000000000..17a443fee
--- /dev/null
+++ b/loleaflet/src/control/Control.NotebookbarWriter.js
@@ -0,0 +1,99 @@
+/* -*- js-indent-level: 8 -*- */
+/*
+ * L.Control.NotebookbarWriter
+ */
+
+/* global */
+L.Control.NotebookbarWriter = L.Control.Notebookbar.extend({
+
+ selectedTab: function(tabText) {
+ switch (tabText) {
+ case 'HomeLabel':
+ this.loadTab(this.getHomeTab());
+ break;
+
+ case 'InsertLabel':
+ this.loadTab(this.getInsertTab());
+ break;
+
+ case 'LayoutLabel':
+ this.loadTab(this.getLayoutTab());
+ break;
+
+ case 'ReferencesLabel':
+ this.loadTab(this.getReferencesTab());
+ break;
+
+ case 'TableLabel':
+ this.loadTab(this.getTableTab());
+ break;
+
+ case 'ReviewLabel':
+ this.loadTab(this.getReviewTab());
+ break;
+ }
+ },
+
+ getTabs: function() {
+ return [
+ {
+ 'text': '~Home',
+ 'id': '2',
+ 'name': 'HomeLabel'
+ },
+ {
+ 'text': '~Insert',
+ 'id': '3',
+ 'name': 'InsertLabel'
+ },
+ {
+ 'text': '~Layout',
+ 'id': '4',
+ 'name': 'LayoutLabel'
+ },
+ {
+ 'text': 'Reference~s',
+ 'id': '5',
+ 'name': 'ReferencesLabel'
+ },
+ {
+ 'text': '~Review',
+ 'id': '6',
+ 'name': 'ReviewLabel'
+ },
+ {
+ 'text': '~Table',
+ 'id': '8',
+ 'name': 'TableLabel'
+ }
+ ];
+ },
+
+ getHomeTab: function() {
+ return '';
+ },
+
+ getInsertTab: function() {
+ return '';
+ },
+
+ getLayoutTab: function() {
+ return '';
+ },
+
+ getReferencesTab: function() {
+ return '';
+ },
+
+ getTableTab: function() {
+ return '';
+ },
+
+ getReviewTab: function() {
+ return '';
+ }
+});
+
+L.control.notebookbarWriter = function (options) {
+ return new L.Control.NotebookbarWriter(options);
+};
diff --git a/loleaflet/src/control/Control.UIManager.js b/loleaflet/src/control/Control.UIManager.js
index 6070ae26c..d613927a9 100644
--- a/loleaflet/src/control/Control.UIManager.js
+++ b/loleaflet/src/control/Control.UIManager.js
@@ -66,7 +66,11 @@ L.Control.UIManager = L.Control.extend({
this.map.addControl(L.control.mobileTopBar(docType));
this.map.addControl(L.control.searchBar());
} else if (window.enableNotebookbar) {
- this.map.addControl(L.control.notebookbar({docType: docType}));
+ if (docType === 'spreadsheet') {
+ this.map.addControl(L.control.notebookbarCalc());
+ } else {
+ this.map.addControl(L.control.notebookbarWriter());
+ }
var additionalOffset = 0;
if (docType === 'spreadsheet') {
commit 100396286b730bfde5bb97d7cba51c493186954e
Author: Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Thu Apr 30 16:17:57 2020 +0200
Commit: Szymon Kłos <szymon.klos at collabora.com>
CommitDate: Mon May 4 08:54:01 2020 +0200
notebookbar: show inline labels for small icons
Change-Id: Id8128c2b043eb17d2f31773ba966a6ab9944ec04
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/93303
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Szymon Kłos <szymon.klos at collabora.com>
diff --git a/loleaflet/css/notebookbar.css b/loleaflet/css/notebookbar.css
index b85f9b52e..22065a7f5 100644
--- a/loleaflet/css/notebookbar.css
+++ b/loleaflet/css/notebookbar.css
@@ -62,11 +62,11 @@ div[id*='Row'].notebookbar, div[id*='Column'].notebookbar, #SendToBack.notebookb
height: 24px !important;
}
-.ui-content.notebookbar .unobutton.selected {
+.unotoolbutton.notebookbar .unobutton.selected {
box-shadow: 0 0 0px 4px #e6e6e640 !important;
}
-.ui-content.notebookbar .unobutton:hover, #clearFormatting.notebookbar div img:hover {
+.unotoolbutton.notebookbar:hover, #clearFormatting.notebookbar div img:hover {
box-shadow: 0 0 0px 4px #e6e6e6b0;
border-radius: 0.1px;
background-color: #e6e6e6b0;
@@ -81,6 +81,19 @@ div[id*='Row'].notebookbar, div[id*='Column'].notebookbar, #SendToBack.notebookb
border: 1px solid silver;
}
+/* unobuttons with inline labels */
+
+.inline.notebookbar {
+ float: left;
+ width: max-content;
+ display: inline-table;
+}
+
+#FormatPaintbrush span
+{
+ display: none;
+}
+
/* Home tab */
#clearFormatting.notebookbar div img {
width: 24px !important;
diff --git a/loleaflet/src/control/Control.JSDialogBuilder.js b/loleaflet/src/control/Control.JSDialogBuilder.js
index 459172901..7573c1376 100644
--- a/loleaflet/src/control/Control.JSDialogBuilder.js
+++ b/loleaflet/src/control/Control.JSDialogBuilder.js
@@ -17,7 +17,10 @@ L.Control.JSDialogBuilder = L.Control.extend({
cssClass: 'mobile-wizard',
// create only icon without label
- noLabelsForUnoButtons: false
+ noLabelsForUnoButtons: false,
+
+ // create labels next to the icon
+ useInLineLabelsForUnoButtons: false
},
/* Handler is a function which takes three parameters:
@@ -1545,6 +1548,15 @@ L.Control.JSDialogBuilder = L.Control.extend({
$(div).tooltip();
}
+ if (builder.options.useInLineLabelsForUnoButtons === true) {
+ $(div).addClass('inline');
+ label = L.DomUtil.create('span', 'ui-content unolabel', div);
+ label.for = buttonId;
+ label.innerHTML = data.text;
+
+ controls['label'] = label;
+ }
+
var updateFunction = function() {
var items = builder.map['stateChangeHandler'];
var state = items.getItemValue(data.command);
diff --git a/loleaflet/src/control/Control.NotebookbarBuilder.js b/loleaflet/src/control/Control.NotebookbarBuilder.js
index e49ce2c3f..a651b7255 100644
--- a/loleaflet/src/control/Control.NotebookbarBuilder.js
+++ b/loleaflet/src/control/Control.NotebookbarBuilder.js
@@ -8,6 +8,7 @@ L.Control.NotebookbarBuilder = L.Control.JSDialogBuilder.extend({
_customizeOptions: function() {
this.options.noLabelsForUnoButtons = true;
+ this.options.useInLineLabelsForUnoButtons = false;
this.options.cssClass = 'notebookbar';
},
@@ -392,11 +393,16 @@ L.Control.NotebookbarBuilder = L.Control.JSDialogBuilder.extend({
else
console.warn('Unsupported control type: \"' + childType + '\"');
+ if (childType === 'toolbox' && hasVerticalParent === true && childData.children.length === 1)
+ this.options.useInLineLabelsForUnoButtons = true;
+
if (processChildren && childData.children != undefined)
this.build(childObject, childData.children, isVertical, hasManyChildren);
else if (childData.visible && (childData.visible === false || childData.visible === 'false')) {
$('#' + childData.id).addClass('hidden-from-event');
}
+
+ this.options.useInLineLabelsForUnoButtons = false;
}
}
}
commit 147f1e1490f4f684f305d0e9bc6fda3692493e5e
Author: Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Thu Apr 30 14:09:22 2020 +0200
Commit: Szymon Kłos <szymon.klos at collabora.com>
CommitDate: Mon May 4 08:53:00 2020 +0200
notebookbar: icons & layout the table tab
Change-Id: Icdc8cfca849ebf05ffa9feb0455cc324445b4e60
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/93301
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Szymon Kłos <szymon.klos at collabora.com>
diff --git a/loleaflet/css/notebookbar.css b/loleaflet/css/notebookbar.css
index fbbe66873..b85f9b52e 100644
--- a/loleaflet/css/notebookbar.css
+++ b/loleaflet/css/notebookbar.css
@@ -195,4 +195,43 @@ div[id*='Row'].notebookbar, div[id*='Column'].notebookbar, #SendToBack.notebookb
#InsertCaptionDialog.notebookbar
{
margin-top: 10px;
+}
+
+/* Table Tab */
+
+#table-Table-Container,
+#table-SectionBottom85.notebookbar
+{
+ margin-top: 5px;
+}
+
+#table-Table-Section-Layout #InsertCaptionDialog.notebookbar img,
+#BorderDialog.notebookbar img,
+#MergeCells.notebookbar img,
+#EntireCell.notebookbar img,
+#OptimizeTable.notebookbar img,
+#AutoFormat.notebookbar img,
+#TableSort.notebookbar img,
+#TableNumberFormatDialog.notebookbar img,
+#TableDialog.notebookbar img
+{
+ height: 32px !important;
+ width: 32px !important;
+}
+
+#table-SectionBottom40.notebookbar,
+#SplitTable.notebookbar,
+#EntireRow.notebookbar,
+#DeleteTable.notebookbar,
+#table-SectionBottom44.notebookbar
+{
+ margin-top: 10px !important;
+}
+
+#NumberFormatPercent.notebookbar {
+ margin-right: 10px;
+}
+
+#table-box17.notebookbar #BackgroundColor {
+ padding-left: 15px;
}
\ No newline at end of file
diff --git a/loleaflet/images/lc_autoformat.svg b/loleaflet/images/lc_autoformat.svg
new file mode 100644
index 000000000..f9b6c100f
--- /dev/null
+++ b/loleaflet/images/lc_autoformat.svg
@@ -0,0 +1,14 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
+ <path
+ style="fill:#ffffff"
+ d="M 3 6 L 3 21 L 7.6152344 21 C 7.6801981 20.904652 7.7477826 20.787775 7.8164062 20.638672 C 8.0736862 20.079665 8.1627353 19.139206 9.1230469 18.464844 C 9.5696619 18.151212 10.072619 18.066272 10.556641 18.076172 C 11.615978 16.577659 12.771404 15.024555 14.003906 13.648438 C 14.045644 13.597584 14.119026 13.494791 14.228516 13.365234 L 14.242188 13.349609 L 14.255859 13.335938 C 14.426842 13.149753 14.553774 13.043346 14.621094 12.972656 C 14.810998 12.758069 14.999568 12.558633 15.183594 12.361328 C 16.992864 10.421568 19.135908 8.5588211 21 7.109375 L 21 6 L 3 6 z M 21 11.322266 C 19.770801 12.981644 18.699392 14.285045 17.863281 15.21875 C 17.50426 15.619689 17.17866 15.987953 16.884766 16.291016 L 16.878906 16.296875 C 15.971229 17.266183 14.569629 18.588483 12.912109 20.035156 C 12.986432 20.347653 13.012088 20.673435 12.996094 21 L 21 21 L 21 11.322266 z "
+ />
+ <path
+ style="fill:#808080"
+ d="M 2 6 L 2 21 C 2 21.554 2.446 22 3 22 L 5.8984375 22 L 5.7441406 21.332031 L 7 21.332031 C 7.2828047 21.332146 7.3516676 21.282839 7.4550781 21.193359 C 7.5033209 21.15161 7.5584192 21.083388 7.6152344 21 L 3 21 L 3 18 L 8 18 L 8 20.148438 C 8.1689601 19.644658 8.3695107 19.067196 9 18.566406 L 9 18 L 10.613281 18 C 10.848451 17.667953 11.103311 17.33454 11.347656 17 L 9 17 L 9 14 L 13.701172 14 C 13.802391 13.883476 13.901614 13.762648 14.003906 13.648438 C 14.045644 13.597583 14.119026 13.494791 14.228516 13.365234 L 14.242188 13.349609 L 14.255859 13.335938 C 14.414007 13.163729 14.523287 13.070573 14.59375 13 L 9 13 L 9 10 L 15 10 L 15 12.560547 C 15.060868 12.495298 15.123581 12.425672 15.183594 12.361328 C 15.443179 12.083021 15.727858 11.814104 16 11.539062 L 16 10 L 17.591797 10 C 17.95877 9.6626759 18.324965 9.3203827 18.693359 9 L 16 9 L 16 6 L 15 6 L 15 9 L 9 9 L 9 6 L 8 6 L 8 9 L 3 9 L 3 6 L 2 6 z M 21 6 L 21 7.109375 C 21.342514 6.8430491 21.68154 6.5799986 22 6
.3457031 L 22 6 L 21 6 z M 22.791016 7 C 20.766577 8.4714687 18.060992 10.741196 15.914062 13.042969 C 15.719186 13.251907 15.52981 13.452861 15.345703 13.662109 C 15.229314 13.784323 15.108537 13.885027 14.992188 14.011719 C 14.918748 14.098619 14.848508 14.196498 14.777344 14.283203 C 13.442361 15.76921 12.142691 17.489034 11.009766 19.121094 C 10.632922 18.95113 10.181836 18.942923 9.6972656 19.283203 C 8.7515786 19.947295 8.947713 22.33282 7 22.332031 C 7.184409 23.134846 9.1784206 23.125555 10.525391 22.767578 C 11.79676 22.429692 12.185291 21.242174 11.943359 20.251953 C 11.904689 20.093685 11.828422 19.931872 11.732422 19.775391 C 13.71681 18.089554 15.158112 16.672545 16.162109 15.599609 C 16.432537 15.321065 16.75722 14.956912 17.119141 14.552734 C 18.473088 13.040748 20.408444 10.658758 22.791016 7 z M 22 9.9492188 C 21.648007 10.449824 21.327011 10.880811 21 11.322266 L 21 13 L 19.716797 13 C 19.441945 13.345315 19.162058 13.700752 18.912109 14 L 21 14 L 21 17 L 16.169922
17 C 15.805273 17.365766 15.453195 17.720262 15 18.144531 L 15 21 L 12.996094 21 C 12.97956 21.337573 12.905341 21.673363 12.773438 22 L 21 22 C 21.554 22 22 21.554 22 21 L 22 9.9492188 z M 3 10 L 8 10 L 8 13 L 3 13 L 3 10 z M 3 14 L 8 14 L 8 17 L 3 17 L 3 14 z M 16 18 L 21 18 L 21 21 L 16 21 L 16 18 z "
+ />
+ <path
+ style="fill:#4d82b8"
+ d="M 2 2 L 2 6 L 22 6 L 22 2 L 2 2 z M 10.394531 19.009766 C 10.174083 19.029003 9.9395506 19.113063 9.6972656 19.283203 C 8.7515786 19.947295 8.947713 22.33282 7 22.332031 C 7.184409 23.134846 9.1784206 23.125555 10.525391 22.767578 C 11.79676 22.429692 12.185291 21.242174 11.943359 20.251953 C 11.904689 20.093685 11.828422 19.931872 11.732422 19.775391 L 11.009766 19.121094 C 10.821344 19.036112 10.61498 18.990528 10.394531 19.009766 z "
+ />
+</svg>
diff --git a/loleaflet/images/lc_borderdialog.svg b/loleaflet/images/lc_borderdialog.svg
new file mode 100644
index 000000000..cf7bcf728
--- /dev/null
+++ b/loleaflet/images/lc_borderdialog.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m9 3v5c0 .554-.446 1-1 1h-5v10h10.585938l7.414062-7.414062v-8.585938z" fill="#fff"/><path d="m9 2v1h12v8.585938l1-1v-7.585938c0-.554-.446-1-1-1zm-7 7v10c0 .554.446 1 1 1h9.585938l1-1h-10.585938v-10z" fill="#808080"/><path d="m18.791016 2.9998446c-2.024439 1.4714687-4.730024 3.7411959-6.876954 6.0429688-.194876.2089383-.384252.4098921-.568359.6191406-.116389.1222132-.237166.2229163-.353515.349609-.07344.0869-.14368.18478-.214844.271485-1.3349826 1.486007-2.6346528 3.20583-3.7675784 4.83789-.3768434-.169964-.82793-.178171-1.3125.162109-.9456866.664092-.7495529 3.049617-2.6972656 3.048828.1844093.802815 2.1784206.793524 3.5253906.435547 1.2713696-.337886 1.6599002-1.525404 1.4179688-2.515625-.038668-.158268-.1149372-.320081-.2109375-.476562 1.9843886-1.685837 3.4256901-3.102846 4.4296871-4.175782.270428-.278544.595111-.642696.957032-1.046874 1.353947-1.5119865 3.289303-3.8939765 5.671875-7.5527344z" fill="#808080"/><p
ath d="m7.0097656 15.120938c-.3768434-.169964-.82793-.178171-1.3125.162109-.9456866.664092-.7495529 3.049617-2.6972656 3.048828.1844093.802815 2.1784206.793524 3.5253906.435547 1.2713696-.337886 1.6599002-1.525404 1.4179688-2.515625-.0386682-.158268-.1149372-.320081-.2109375-.476562z" fill="#4d82b8"/><path d="m23 11-12 12h12zm-2 5v5h-5z" fill="#4d82b8" fill-rule="evenodd"/><g fill="#eac282"><rect height="1" ry=".5" width="6" x="1" y="1"/><rect height="6" ry=".5" width="1" x="1" y="1"/><path d="m2.4999352 7.4999941 5.0000589-5.0000589v5.0000589z" fill-rule="evenodd" stroke="#eac282" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.000012"/></g></svg>
\ No newline at end of file
diff --git a/loleaflet/images/lc_entirecell.svg b/loleaflet/images/lc_entirecell.svg
new file mode 100644
index 000000000..1494a7755
--- /dev/null
+++ b/loleaflet/images/lc_entirecell.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m2 3v5h6c.554 0 1 .446 1 1v5c0 .554-.446 1-1 1h-6v6h8.542969l1.382812-1.382812.285157-.345704v-1.433593-.001953c.000522-.460019.184394-.901432.509765-1.226563l5.130859-5.128906-.044921.048828c.304121-.347566.691446-.612471 1.1875-.726563.379362-.08725.711923-.044243 1.005859.035157v-7.837891zm18 17.144531-.855469.855469h.855469z" fill="#fff"/><path d="m2 2c-.554 0-1 .446-1 1v5h1v-5h5v5h1v-5h6v6h-5v1h5v3h-5v1h5v1.330078l1-1v-.330078h.332031l1-1h-1.332031v-3h5v.837891c.424083.114552.753847.32083.912109.455078l-.001953-.003907c.054185.045601.058.054932.089844.085938v-8.375c0-.554-.446-1-1-1zm13 1h5v6h-5zm-14 12v6c0 .554.446 1 1 1h8.033203c.025684-.169357.075231-.333623.150391-.492188.003535-.007633.00416-.015846.007812-.023437.079912-.162436.183629-.316744.31836-.451172l.033203-.033203h-2.542969v-3h4.210938v-.162109a1.0001 1.0001 0 0 0 0-.001953c.000161-.141394.023051-.279021.05664-.414063.004697-.017903.010359-.03500
1.015625-.052734.03615-.127888.086158-.250858.150391-.367188.000412-.000746.001539-.001207.001953-.001953h-4.435547v-2h-1v2h-5v-2zm1 3h5v3h-5zm19 1.144531-1 1v.851563.003906h-.855469l-1 1h1.855469c.554 0 1-.446 1-1v-.001953z" fill="#808080"/><path d="m1 2v4h20v-4z" fill="#808080"/><path d="m-8 9h7v5h-7z" fill="#eac282" transform="scale(-1 1)"/><g transform="translate(-20)"><path d="m33.950043 17.837242 2.950147 2.950148 5.162758-5.162758c.451264-.371629 0-.737537 0-.737537l-2.212611-2.21261s-.339362-.398175-.737537 0z" fill="none" stroke="#808080" stroke-linejoin="round" stroke-width="1.475074"/><path d="m33.950043 17.837242 2.950147 2.950148 5.162758-5.162758c.504354-.371629 0-.737537 0-.737537l-2.212611-2.21261s-.365907-.42472-.737537 0z" fill="#eac282" fill-rule="evenodd"/><path d="m33.950043 17.837242v1.475074l1.475073 1.475074h1.475074z" fill="none" stroke="#808080" stroke-linejoin="round" stroke-width="1.475074"/><path d="m33.950043 17.837242v1.475074l1.475073 1.475074h1.47507
4z" fill="#fff" fill-rule="evenodd"/><path d="m31.737432 22.262463h1.475074l.737537-.737537-.737537-.737536z" fill="none" stroke="#808080" stroke-linejoin="round" stroke-width="1.475074"/><path d="m33.765659 20.118997-.553153.668393.737537.737536.622296-.484008z" fill="none" stroke="#808080" stroke-width="1.475074"/><g fill-rule="evenodd"><path d="m33.765659 20.118997-.553153.668393.737537.737536.622296-.484008z" fill="#fff"/><path d="m31.737432 22.262463h1.475074l.737537-.737537-.737537-.737536z" fill="#eac282"/></g></g></svg>
\ No newline at end of file
diff --git a/loleaflet/images/lc_entirecolumn.svg b/loleaflet/images/lc_entirecolumn.svg
new file mode 100644
index 000000000..c9bd56082
--- /dev/null
+++ b/loleaflet/images/lc_entirecolumn.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m3 3v18h7v-18zm8 0v17.542969l.925781-.925781.285157-.345704v-1.433593-.001953c.000522-.460019.184394-.901432.509765-1.226563l5.130859-5.128906-.044921.048828c.304121-.347566.691446-.612471 1.1875-.726563.926697-.213127 1.650012.262938 1.917968.490235l-.001953-.003907c.05419.045601.058004.054928.089844.085938v-8.375zm10 16.144531-1.855469 1.855469h1.855469z" fill="#fff"/><path d="m3 3v18h6v-18z" fill="#eac282"/><path d="m11 2v4h4v3h-4v1h4v3h-4v1h4v.330078l.798828-.798828.533203-.53125h-.332031v-3h5v1.375c.039986.038934.102081.095047.113281.107422l.029297.029297.857422.857422v-6.369141-3-1h-1zm5 4h5v3h-5zm-5 11v1h1.210938v-.162109a1.0001 1.0001 0 0 0 0-.001953c.000161-.141394.023051-.279021.05664-.414063.004697-.017903.010359-.035001.015625-.052734.03615-.127888.086158-.250858.150391-.367188.000412-.000746.001539-.001207.001953-.001953zm11 1.144531-1 1v1.855469h-1.855469l-1 1h2.855469c.554 0 1-.446 1-1z" fill="#80808
0"/><path d="m2 2v18.5.5.5c0 .277.223.5.5.5h6.5.5.5v-.5-.5-19zm1 4h6v3h-6zm0 4h6v3h-6zm0 4h6v3h-6zm0 4h6v3h-6v-.5z" fill="#808080"/><g transform="translate(-20)"><path d="m33.950043 17.837242 2.950147 2.950148 5.162758-5.162758c.451264-.371629 0-.737537 0-.737537l-2.212611-2.21261s-.339362-.398175-.737537 0z" fill="none" stroke="#808080" stroke-linejoin="round" stroke-width="1.475074"/><path d="m33.950043 17.837242 2.950147 2.950148 5.162758-5.162758c.504354-.371629 0-.737537 0-.737537l-2.212611-2.21261s-.365907-.42472-.737537 0z" fill="#eac282" fill-rule="evenodd"/><path d="m33.950043 17.837242v1.475074l1.475073 1.475074h1.475074z" fill="none" stroke="#808080" stroke-linejoin="round" stroke-width="1.475074"/><path d="m33.950043 17.837242v1.475074l1.475073 1.475074h1.475074z" fill="#fff" fill-rule="evenodd"/><path d="m31.737432 22.262463h1.475074l.737537-.737537-.737537-.737536z" fill="none" stroke="#808080" stroke-linejoin="round" stroke-width="1.475074"/><path d="m33.765659 20.118
997-.553153.668393.737537.737536.622296-.484008z" fill="none" stroke="#808080" stroke-width="1.475074"/><g fill-rule="evenodd"><path d="m33.765659 20.118997-.553153.668393.737537.737536.622296-.484008z" fill="#fff"/><path d="m31.737432 22.262463h1.475074l.737537-.737537-.737537-.737536z" fill="#eac282"/></g></g></svg>
\ No newline at end of file
diff --git a/loleaflet/images/lc_entirerow.svg b/loleaflet/images/lc_entirerow.svg
new file mode 100644
index 000000000..a3eeab2bd
--- /dev/null
+++ b/loleaflet/images/lc_entirerow.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m3 3v5h18v-5zm0 6v12h7.542969l1.382812-1.382812.285157-.345704v-1.433593a1.0001 1.0001 0 0 0 0-.001953c.000522-.460018.184394-.901432.509765-1.226563l5.130859-5.128906-.044921.048828c.304121-.347566.691446-.612471 1.1875-.726563.926697-.213127 1.650012.262938 1.917968.490235l-.001953-.003907c.054185.045602.058.054932.089844.085938v-2.375zm18 10.144531-1.855469 1.855469h1.855469z" fill="#fff"/><path d="m2 9v1 11c0 .554.446 1 1 1h7.033203c.025684-.169357.075231-.333623.150391-.492188.003535-.007633.00416-.015846.007812-.023437.079912-.162436.183629-.316744.31836-.451172l.033203-.033203h-1.542969v-3h1.283203 1.927735v-.162109a1.0001 1.0001 0 0 0 0-.001953c.000161-.141394.023051-.279021.05664-.414063.004697-.017903.010359-.035001.015625-.052734.03615-.127888.086158-.250858.150391-.367188.000412-.000746.001539-.001207.001953-.001953h-2.435547-1v-3h6v.330078l.798828-.798828.533203-.53125h-.332031v-2.716797-.283203h5v1.37
5c.039986.038934.102081.095047.113281.107422l.029297.029297.857422.857422v-2.369141-1zm1 1h5v3h-5zm6 0h6v2 1h-6zm-6 4h5v3h-5zm0 4h5v3h-5zm19 .144531-1 1v1.855469h-1-.855469l-1 1h.855469 1 1c.554 0 1-.446 1-1v-2z" fill="#808080"/><path d="m3 4h18v3h-18z" fill="#eac282"/><path d="m2 3v5h20v-5zm1 1h5v3h-5zm6 0h6v3h-6zm7 0h5v3h-5z" fill="#808080"/><g transform="translate(-20)"><path d="m33.950043 17.837242 2.950147 2.950148 5.162758-5.162758c.451264-.371629 0-.737537 0-.737537l-2.212611-2.21261s-.339362-.398175-.737537 0z" fill="none" stroke="#808080" stroke-linejoin="round" stroke-width="1.475074"/><path d="m33.950043 17.837242 2.950147 2.950148 5.162758-5.162758c.504354-.371629 0-.737537 0-.737537l-2.212611-2.21261s-.365907-.42472-.737537 0z" fill="#eac282" fill-rule="evenodd"/><path d="m33.950043 17.837242v1.475074l1.475073 1.475074h1.475074z" fill="none" stroke="#808080" stroke-linejoin="round" stroke-width="1.475074"/><path d="m33.950043 17.837242v1.475074l1.475073 1.475074h1.47507
4z" fill="#fff" fill-rule="evenodd"/><path d="m31.737432 22.262463h1.475074l.737537-.737537-.737537-.737536z" fill="none" stroke="#808080" stroke-linejoin="round" stroke-width="1.475074"/><path d="m33.765659 20.118997-.553153.668393.737537.737536.622296-.484008z" fill="none" stroke="#808080" stroke-width="1.475074"/><g fill-rule="evenodd"><path d="m33.765659 20.118997-.553153.668393.737537.737536.622296-.484008z" fill="#fff"/><path d="m31.737432 22.262463h1.475074l.737537-.737537-.737537-.737536z" fill="#eac282"/></g></g></svg>
\ No newline at end of file
diff --git a/loleaflet/images/lc_numberformatdate.svg b/loleaflet/images/lc_numberformatdate.svg
new file mode 100644
index 000000000..314a67c9c
--- /dev/null
+++ b/loleaflet/images/lc_numberformatdate.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m8 7v1.4628906c0 .1325301.0498732.251106.1503906.3535156.1005174.0963856.2137221.1445313.3378906.1445313h5.3378908c-.135994.1506024-.256851.3098409-.363281.4785156-.106431.1686747-.21003.3519861-.310547.5507813l-4.3281252 9.0097656h1.5625002c.301552 0 .537513-.072219.708984-.216797.177384-.144578.315498-.318618.416016-.523437l4.230469-9.2167972c.053215-.1144579.110794-.258895.169921-.4335938.059128-.1746988.087891-.400626.087891-.6777344v-.9316406z" fill="#696969"/><path d="m2 3v1 2 15c0 .554.446 1 1 1h18c .554 0 1-.446 1-1v-15-2-1h-1-18zm2 3h16v14h-16z" fill="#696969"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/lc_optimizetable.svg b/loleaflet/images/lc_optimizetable.svg
new file mode 100644
index 000000000..13f063e54
--- /dev/null
+++ b/loleaflet/images/lc_optimizetable.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m3 3v18h7.242188l-1.6113286-1.576172c-.8740813-.854669-.8740603-2.221546 0-3.076172.874124-.854551 2.2079246-.854761 3.0820316 0l1.886718 1.84375 6.654297-7.447265-.019531.02539c.211476-.252386.473644-.443458.765625-.576172v-7.193359zm18 13.375-4.138672 4.625h4.138672z" fill="#fff"/><path d="m3 2c-.554 0-1 .446-1 1v18c0 .554.446 1 1 1h8.265625l-1.023437-1h-1.242188v-1.214844l-.3691406-.361328c-.3695249-.361318-.5737765-.814249-.6308594-1.28125v2.857422h-5v-3h4.9863281c-.0319479-.592744.177597-1.195792.6445313-1.652344.1155112-.112924.2396969-.209883.3691406-.292968v-2.054688h6v2.625l1-1.119141v-1.505859h1.34375l.894531-1h-2.238281v-3h5v.193359c.144002-.065452.293178-.120913.451172-.154297l.011719-.001953c.123152-.02472.238377-.001431.359375-.001953.055338-.01123.111528-.017731.167968-.019531.003253-.000071.006514.000039.009766 0v-7.015625c0-.554-.446-1-1-1zm0 1h5v6h-5zm6 0h6v6h-6zm7 0h5v6h-5zm-13 7h5v3h-5zm6 0h6v3h
-6zm-6 4h5v3h-5zm19 1.255859-1 1.119141v.625h-.560547l-.894531 1h1.455078v3h-4.138672l-.894531 1h5.033203c.554 0 1-.446 1-1zm-9.619141 1.744141 1.023438 1h.367187l.892578-1z" fill="#808080"/><path d="m2 2h20v4h-20z" fill="#808080"/><path d="m22.008379 11.015652c-.11263-.02069-.229582-.02189-.349814.0022-.256226.05414-.492352.195183-.658476.393444l-7.352978 8.22655-2.633903-2.575268c-.440541-.430791-1.2421489-.430757-1.6827719 0-.440564.430768-.440599 1.214497 0 1.645311l3.5118709 3.433689.91455.858422.804804-.929957 8.194364-9.156507c.581205-.618654.04074-1.75309-.747646-1.897919z" fill="#76a797"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/lc_selecttable.svg b/loleaflet/images/lc_selecttable.svg
new file mode 100644
index 000000000..574452d2e
--- /dev/null
+++ b/loleaflet/images/lc_selecttable.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m3 3v18h7.878906l1.222656-1.222656.34961-.423828c-.0009-.01366-.0015-.02734-.002-.04102v-1.474609c.000077-.397798.158149-.779279.439453-1.060547l5.164062-5.164063-.06836.07227c.257371-.294148.651998-.555531 1.064453-.650391.852738-.196122 1.450668.222171 1.701172.433594.115073.09674.230469.21875.230469.21875l-.070265-.074219.089844.089844v-8.703125z" fill="#eac282"/><path d="m3 2c-.554 0-1 .446-1 1v18c0 .554.446 1 1 1h7.257812c.04921-.284307.183839-.56258.419922-.798828l.201172-.201172h-1.878906v-3h3.449219v-.162109c.000058-.300706.090252-.592072.255859-.837891h-3.705078v-3h6v.666016l1.666016-1.666016h-.666016v-3h5v1.703125l1 1v-9.703125c0-.554-.446-1-1-1zm0 1h5v6h-5zm6 0h6v6h-6zm7 0h5v6h-5zm-13 7h5v3h-5zm6 0h6v3h-6zm-6 4h5v3h-5zm0 4h5v3h-5z" fill="#808080"/><path d="m2 2h20v4h-20z" fill="#808080"/><g transform="translate(-20)"><path d="m33.950043 17.837242 2.950147 2.950148 5.162758-5.162758c.451264-.371629 0-.737
537 0-.737537l-2.212611-2.21261s-.339362-.398175-.737537 0z" fill="none" stroke="#808080" stroke-linejoin="round" stroke-width="1.475074"/><path d="m33.950043 17.837242 2.950147 2.950148 5.162758-5.162758c.504354-.371629 0-.737537 0-.737537l-2.212611-2.21261s-.365907-.42472-.737537 0z" fill="#eac282" fill-rule="evenodd"/><path d="m33.950043 17.837242v1.475074l1.475073 1.475074h1.475074z" fill="none" stroke="#808080" stroke-linejoin="round" stroke-width="1.475074"/><path d="m33.950043 17.837242v1.475074l1.475073 1.475074h1.475074z" fill="#fff" fill-rule="evenodd"/><path d="m31.737432 22.262463h1.475074l.737537-.737537-.737537-.737536z" fill="none" stroke="#808080" stroke-linejoin="round" stroke-width="1.475074"/><path d="m33.765659 20.118997-.553153.668393.737537.737536.622296-.484008z" fill="none" stroke="#808080" stroke-width="1.475074"/><g fill-rule="evenodd"><path d="m33.765659 20.118997-.553153.668393.737537.737536.622296-.484008z" fill="#fff"/><path d="m31.737432 22.262463h1.47
5074l.737537-.737537-.737537-.737536z" fill="#eac282"/></g></g></svg>
\ No newline at end of file
diff --git a/loleaflet/images/lc_splitcell.svg b/loleaflet/images/lc_splitcell.svg
new file mode 100644
index 000000000..7f29f6798
--- /dev/null
+++ b/loleaflet/images/lc_splitcell.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m2 10h20v6h-20z" fill="#fff"/><path d="m3 6v3h18v-3zm0 11v4h18v-4z" fill="#fff"/><path d="m2 2v1 3 3h1v-3h9v3h1v-3h8v3h1v-3-3-1h-1-18zm0 15v4c0 .554.446 1 1 1h18c.554 0 1-.446 1-1v-4h-1v4h-8v-4h-1v4h-9v-4z" fill="#808080"/><path d="m2 10v6h20v-6zm1 1h5v4h-5zm6 0h6v4h-6zm7 0h5v4h-5z" fill="#4d82b8"/><path d="m11 17h1v4h-1z" fill="#fff"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/lc_splittable.svg b/loleaflet/images/lc_splittable.svg
new file mode 100644
index 000000000..df2741c61
--- /dev/null
+++ b/loleaflet/images/lc_splittable.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m3 6v3h8.091797c-.057283-.1672871-.094214-.3415432-.091797-.5136719l-.001953-2.4863281h-1.3378908c-.0822476.010724-.164011.0202234-.2441406.015625-.0347685-.0019953-.0658653-.0113684-.0996094-.015625zm10.998047 0 .001953 2.4863281c.002434.1721287-.034512.3463848-.091797.5136719h8.091797v-3h-6.287109c-.046472.0069169-.090227.0188766-.138672.0214844-.101658.0054721-.206525-.0026282-.310547-.0214844z" fill="#fff"/><path d="m3 14v7h5.875l-.4414062-.441406c-.2944367-.295168-.4694206-.741807-.4453126-1.142578.024108-.400772.201276-.733204.4472657-.978516s.5796325-.422313.9804687-.445312c.4002421-.022969.8462574.152808 1.1406254.447265h.001953l.4375.439453.003906-3.357422c-.005942-.420168.182805-.867654.484375-1.138672.30157-.271015.666177-.382812 1.015625-.382812zm9.5 0c.349448 0 .714055.111797 1.015625.382812.30157.271018.490275.718504.484375 1.138672l-.003906 3.355469.427734-.425781c.292963-.303321.743758-.486734 1.150
391-.464844.406633.021889.745119.200781.992187.449219.247069.248437.42372.58544.44336.992187.019641.406748-.165768.859109-.470704 1.150391l-.421874.421875h5.882812v-7z" fill="#fff"/><path d="m2 2v1 3 4h1 5 1 3.455078c-.168491-.0046376-.338636-.0312719-.503906-.09375-.081606-.0308502-.162575-.0683647-.240234-.1152344-.078316-.0465951-.154395-.1011595-.226563-.1660156-.08587-.0771698-.158928-.1704034-.224609-.2714844-.008246-.013092-.013608-.027616-.021485-.0410156-.058756-.0966958-.107026-.1999993-.144531-.3085938-.000478-.0013864-.001478-.0025186-.001953-.0039062h-2.091797v-3h.3164062c-.1751143-.0220895-.3351694-.0728157-.4804687-.1464844-.1512251-.0743577-.2858906-.1690184-.4003906-.2832031-.2459897-.2453123-.4231577-.5796975-.4472657-.9804687-.0241079-.4007713.1508758-.84741.4453126-1.1425782l1.4453124-1.4472656h-6.8789062zm13.107422 0 1.43164 1.4296875c.304935.2912824.490344.7416899.470704 1.1484375-.019642.4067476-.196291.7457032-.44336.9941406-.114215.1148487-.250379.210537-.40
2344.2851563-.136806.0693438-.287761.1182559-.451171.1425781h.287109v3h-2.091797c-.000466.0013617-.001483.0025458-.001953.0039062-.037507.1085945-.085771.211898-.144531.3085938-.007877.0133996-.013239.0279236-.021485.0410156-.065684.101081-.138739.1943146-.224609.2714844-.072168.0648561-.148247.1194205-.226563.1660156-.077659.0468697-.158628.0843842-.240234.1152344-.16527.0624781-.335415.0891124-.503906.09375h3.455078 1 5 1v-4-3-1h-1zm-4.111328 3.1289062-.4375.4375-.001953.0019532c-.11039.1103052-.246016.1967033-.388672.2695312-.01662.0083099-.031929.0157008-.048828.0234375-.1478238.0693909-.3020041.1182036-.4589848.1386719h1.3378908zm3 0 .001953.8710938h1.265625c-.138794-.0251591-.272458-.0776997-.402344-.140625-.033042-.0159192-.063841-.0307196-.095703-.0488281-.125348-.0713246-.244074-.1527288-.341797-.2539063zm-10.996094.8710938h5v3h-5zm14 0h5v3h-5z" fill="#808080"/><path d="m12.482422 1a.50005.50005 0 0 0 -.394531.203125l-2.947266 2.951171a.50063788.50063788 0 1 0 .7089844.7070
32l2.1425786-2.146485.0078 5.785157a.50005.50005 0 1 0 1 0l-.0078-5.785157 2.15039 2.146485a.50005.50005 0 1 0 .705078-.708985l-2.960937-2.957031a.50005.50005 0 0 0 -.404297-.195312z" fill="#4d82b8" fill-rule="evenodd"/><path d="m2 13v8c0 .554.446 1 1 1h6.8730469l-1.4394531-1.441406c-.1154416-.115729-.2053807-.2578-.2792969-.408203-.0074975-.015595-.0164456-.029095-.0234375-.044922-.0707798-.1561-.1147187-.319683-.1308594-.484375v1.378906h-5v-3h5v1.341797c.0199375-.179422.0688326-.343732.1425781-.492188.0756556-.155965.1752182-.294683.2929688-.412109.1015821-.101303.2243145-.18179.3554687-.251953.0677149-.037573.1341343-.074437.2089844-.101563v-.083984h.3652344c.0174526-.001611.0330643-.006797.0507812-.007812.0397687-.002283.0806149.006248.1210938.007812h1.4609376v-1h-1.998047v-3h3.5 3.5v3h-2.001953v.199219.800781h1.378906c.065995-.006537.13269-.017148.197266-.013672.030707.001653.05797.010266.08789.013672h.337891v.080078c.074232.026959.139861.064389.207031.101563.133004.070785.2571
37.1511.359375.253906.118241.118896.217716.259929.292969.417969.074459.15296.123284.322295.140625.507812v-1.361328h5v3h-5v-1.431641c-.005634.090884-.019446.180645-.042969.271485-.00047.001893.000478.003967 0 .005859-.001201.004571-.002662.009107-.003906.013672-.022544.08272-.050045.163227-.085937.242187-.014044.031785-.032762.060997-.048829.091797-.027716.051891-.052863.104072-.085937.152344-.056837.084368-.121017.163318-.19336.232422l-1.423828 1.421875h6.884766c.554 0 1-.446 1-1v-8h-1-5-1-7-1-5zm1 1h5v3h-5zm14 0h5v3h-5z" fill="#808080"/><path d="m12.482422 23.007061a.50005.50005 0 0 1 -.394531-.203125l-2.947266-2.951171a.50063788.50063788 0 1 1 .7089844-.707032l2.1425786 2.146485.0078-5.785157a.50005.50005 0 1 1 1 0l-.0078 5.785157 2.15039-2.146485a.50005.50005 0 1 1 .705078.708985l-2.960937 2.957031a.50005.50005 0 0 1 -.404297.195312z" fill="#4d82b8" fill-rule="evenodd"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/lc_tabledialog.svg b/loleaflet/images/lc_tabledialog.svg
new file mode 100644
index 000000000..203d3d21d
--- /dev/null
+++ b/loleaflet/images/lc_tabledialog.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m9 3v5c0 .554-.446 1-1 1h-5v12h18v-18z" fill="#fff"/><path d="m9 2v4h6v3h-6-1-5-1v12c0 .554.446 1 1 1h18c.554 0 1-.446 1-1v-15-3-1h-1zm7 4h5v3h-5zm-13 4h5v3h-5zm6 0h6v3h-6zm7 0h5v3h-5zm-13 4h5v3h-5zm6 0h6v3h-6zm7 0h5v3h-5zm-13 4h5v3h-5zm6 0h6v3h-6zm7 0h5v3h-5z" fill="#808080"/><g fill="#eac282"><rect height="1" ry=".5" width="6" x="1" y="1"/><rect height="6" ry=".5" width="1" x="1" y="1"/><path d="m2.4999352 7.4999941 5.0000589-5.0000589v5.0000589z" fill-rule="evenodd" stroke="#eac282" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.000012"/></g></svg>
\ No newline at end of file
diff --git a/loleaflet/images/lc_tablenumberformatdialog.svg b/loleaflet/images/lc_tablenumberformatdialog.svg
new file mode 100644
index 000000000..39093536c
--- /dev/null
+++ b/loleaflet/images/lc_tablenumberformatdialog.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m12.421875 2c-.8981 0-1.762781.121485-2.5917969.3632812-.286457.0805661-.5570249.1886883-.8300781.2929688v1.6230469c.0961904-.0466031.1884005-.099393.2871094-.1425781.9758206-.4231434 2.0207756-.6347657 3.1347656-.6347657 1.018998 0 1.963744.1477966 2.835937.4414063.88083.2849741 1.640265.7163381 2.279297 1.2949218.647669.5699482 1.152931 1.2868328 1.515625 2.1503907.37133.8635578.556641 1.8690461.556641 3.0175781 0 .725389-.082018 1.386567-.246094 1.982422-.164076.587219-.383817 1.097518-.660156 1.529297-.267703.423143-.587654.751214-.958984.984375-.362695.23316-.741436.349609-1.138672.349609-.259068 0-.497001-.039467-.712891-.117187-.215889-.086356-.384961-.242272-.505859-.466797s-.184724-.531321-.19336-.919922c0-.397237.082018-.910619.246094-1.541016l1.166016-4.5078122c-.379966-.1727116-.781935-.3023161-1.205078-.3886719-.423144-.0863558-.91525-.1289063-1.476563-.1289063-.699482 0-1.342468.085101-1.929687.257812
5-.58722.164076-1.118794.3938903-1.59375.6875-.4663216.2849741-.8814467.6262009-1.244141 1.0234375-.3540587.3886011-.6507819.8068093-.8925781 1.2558594-.2331606.44905-.4103519.916798-.53125 1.400391-.1208981.483592-.1816407.962543-.1816407 1.4375 0 .483592.0607426.936231.1816407 1.359375.1208981.414507.3011725.773926.5429687 1.076172.2504318.302245.5622639.538225.9335938.710937s.8026936.259766 1.2949216.259766c.647669 0 1.251188-.142761 1.8125-.427735.569948-.293609 1.098439-.77256 1.582032-1.4375.120898.647669.38319 1.126619.789062 1.4375.414508.310881.941045.466797 1.580078.466797.708118 0 1.36426-.155916 1.96875-.466797.604491-.319516 1.131028-.759 1.580078-1.320312.44905-.561313.80035-1.227527 1.050782-1.996094.259067-.768567.388671-1.6019.388671-2.5 0-1.3298791-.246053-2.517595-.738281-3.5625-.483592-1.044905-1.136651-1.9258251-1.957031-2.6425781-.811745-.7167531-1.748371-1.2595295-2.810547-1.6308594-1.062176-.3799655-2.170957-.5703125-3.328125-.5703125zm1.138672 6.6328125c.388
601 0 .737947.0375142 1.048828.1152344l-.945313 3.6796871c-.138169.535406-.310324.979926-.517578 1.333985-.207254.354058-.432032.634543-.673828.841797-.23316.207254-.48425.35505-.751953.441406-.259067.07772-.51324.115234-.763672.115234-.544041 0-.95413-.177191-1.2304685-.53125-.2677029-.362694-.4023437-.841645-.4023437-1.4375 0-.569948.1052461-1.12588.3125-1.669922.2158894-.552677.5095292-1.0417.8808592-1.464843.379966-.4317793.827569-.7760893 1.345703-1.0351566.518135-.2590674 1.08414-.3886719 1.697266-.3886719zm-10.3828126.3671875c-.028915.0949515-.0691417.1828885-.0957032.2792969-.224525.8376511-.3378906 1.7104521-.3378906 2.6171871 0 1.580311.2592091 2.995888.7773438 4.248047.5267703 1.252159 1.2436548 2.310271 2.1503906 3.173828.9153713.872194 1.9947579 1.536455 3.2382812 1.994141 1.2435238.457686 2.5902388.6875 4.0410158.6875 1.433506 0 2.721432-.172155 3.861328-.517578 1.148532-.345423 2.167176-.813171 3.056641-1.400391l-.324219-.841797c-.060449-.146804-.155623-.241978-.28515
6-.285156-.120898-.043178-.266742-.01183-.439454.091797-.699481.423143-1.537851.767453-2.513671 1.035156-.967185.276339-2.086039.416016-3.355469.416016-1.19171 0-2.305528-.187264-3.341797-.558594-1.0362694-.362694-1.9384647-.902387-2.7070312-1.619141-.7685666-.725388-1.3771218-1.622547-1.8261719-2.693359-.4404145-1.070812-.6601563-2.314234-.6601563-3.730469 0-1.033831.1632213-1.9971761.4707032-2.896484z" fill="#696969"/><g fill="#eac282"><rect height="1" ry=".5" width="6" x="1" y="1"/><rect height="6" ry=".5" width="1" x="1" y="1"/><path d="m2.4999352 7.4999941 5.0000589-5.0000589v5.0000589z" fill-rule="evenodd" stroke="#eac282" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.000012"/></g></svg>
\ No newline at end of file
diff --git a/loleaflet/images/lc_tablesort.svg b/loleaflet/images/lc_tablesort.svg
new file mode 100644
index 000000000..04427b68b
--- /dev/null
+++ b/loleaflet/images/lc_tablesort.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m22.495233 15.492559-3.995233 4.000284-3.995233-4.000284" fill="none" stroke="#808080" stroke-linecap="round" stroke-linejoin="round" stroke-width=".999439"/><path d="m18.5 19.492843v-14.992843" fill="none" stroke="#808080" stroke-linecap="round" stroke-linejoin="round" stroke-width=".999439"/><path d="m8.9777656 12.132527q-.2635302 0-.4054311-.08109-.1419009-.081082-.1925798-.334477l-.2229871-.922355q-.3851596.354752-.7601834.638554-.364888.273666-.7703191.466245-.4054311.19258-.8716769.283802-.4662458.101358-1.0237136.101358-.5777394 0-1.0845283-.152037-.4966531-.162172-.8818127-.486517-.3750238-.334481-.5980109-.820998-.2128514-.496653-.2128514-1.1656145 0-.5878752.3142092-1.1250714.3243449-.547332 1.0439851-.9730347.7196403-.4257027 1.875119-.6892329 1.1554787-.2736661 2.8380179-.3142092v-.7601833q0-1.1554788-.4966532-1.7332181-.4865173-.5878752-1.4291447-.5878752-.6284182 0-1.0642567.1621725-.4257027.1621724-.
7399118.3547522-.3142091.1925798-.547332.3547523-.2229871.1621724-.45611.1621724-.1824441 0-.3142092-.091222-.1317651-.091222-.2128513-.2331229l-.3243449-.5676036q.820998-.7905907 1.7636254-1.1757502.9527631-.3952954 2.1082419-.3952954.8311338 0 1.4798236.273666.6486898.2635303 1.0845283.7601834.4358384.4966531.6588255 1.185886.2331229.689233.2331229 1.5305026v6.334861zm-3.7096948-1.094664q.4459742 0 .820998-.09122.3750238-.09122.7095045-.253394.3344807-.17231.6284183-.415569.3040733-.253395.5980109-.5574679v-2.0474272q-1.1858861.0506789-2.0170199.2027156-.8311338.1419009-1.3581943.3851596-.5169247.2432586-.7500476.5777393-.2331229.3243449-.2331229.7297761 0 .3851595.1216294.6689615.1317651.273666.3446164.45611.2128514.172308.506789.26353.2939375.08109.6284182.08109z" fill="#4d82b8" transform="scale(1.0237137 .97683566)"/><path d="m8.7227227 15.06959q0 .16036-.05908.31228-.05064.143479-.1350397.261639l-3.9077122 5.899548h3.9752321v1.156278h-5.6885487v-.616119q0-.109719.05064-.253199
.05908-.14348.1519197-.27852l3.9161522-5.950188h-3.8908323v-1.156278h5.5872689z" fill="#808080" transform="scale(1.0317879 .96919142)"/></svg>
\ No newline at end of file
diff --git a/loleaflet/src/control/Control.NotebookbarBuilder.js b/loleaflet/src/control/Control.NotebookbarBuilder.js
index 9bd26f66e..e49ce2c3f 100644
--- a/loleaflet/src/control/Control.NotebookbarBuilder.js
+++ b/loleaflet/src/control/Control.NotebookbarBuilder.js
@@ -71,6 +71,11 @@ L.Control.NotebookbarBuilder = L.Control.JSDialogBuilder.extend({
this._toolitemHandlers['.uno:SelectObject'] = function() {};
this._toolitemHandlers['.uno:BibliographyComponent'] = function() {};
this._toolitemHandlers['.uno:ViewDataSourceBrowser'] = function() {};
+ this._toolitemHandlers['.uno:FormatArea'] = function() {};
+ this._toolitemHandlers['.uno:SetBorderStyle'] = function() {};
+ this._toolitemHandlers['.uno:LineStyle'] = function() {};
+ this._toolitemHandlers['.uno:InsertFormula'] = function() {};
+ this._toolitemHandlers['.uno:AutoSum'] = function() {};
this._toolitemHandlers['vnd.sun.star.findbar:FocusToFindbar'] = function() {};
},
commit 0ca56c8e708ec29d7823ed40d1d90af4d8e6737e
Author: Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Thu Apr 30 14:20:32 2020 +0200
Commit: Szymon Kłos <szymon.klos at collabora.com>
CommitDate: Mon May 4 08:52:51 2020 +0200
notebookbar: added review tab
Change-Id: I734ed2ed4d261e00a30ebc209749142fb8a1f157
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/93302
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Szymon Kłos <szymon.klos at collabora.com>
diff --git a/loleaflet/src/control/Control.Notebookbar.js b/loleaflet/src/control/Control.Notebookbar.js
index c2c9b4049..1a1bc37c1 100644
--- a/loleaflet/src/control/Control.Notebookbar.js
+++ b/loleaflet/src/control/Control.Notebookbar.js
@@ -61,6 +61,10 @@ L.Control.Notebookbar = L.Control.extend({
case 'TableLabel':
this.loadTab(this.getTableTab());
break;
+
+ case 'ReviewLabel':
+ this.loadTab(this.getReviewTab());
+ break;
}
},
@@ -86,6 +90,11 @@ L.Control.Notebookbar = L.Control.extend({
'id': '5',
'name': 'ReferencesLabel'
},
+ {
+ 'text': '~Review',
+ 'id': '6',
+ 'name': 'ReviewLabel'
+ },
{
'text': '~Table',
'id': '8',
@@ -159,6 +168,14 @@ L.Control.Notebookbar = L.Control.extend({
getReferencesTab: function() {
return '';
+ },
+
+ getTableTab: function() {
+ return '';
+ },
+
+ getReviewTab: function() {
+ return '';
}
});
commit 5f2371d12fc70f4e743b83407820e25ed90f48de
Author: Andras Timar <andras.timar at collabora.com>
AuthorDate: Mon May 4 08:33:55 2020 +0200
Commit: Andras Timar <andras.timar at collabora.com>
CommitDate: Mon May 4 08:33:55 2020 +0200
If we change text but not the id, old translations are pulled in
Change-Id: I34cbaba2260ee2ae0bd5e83adec7522225e451aa
diff --git a/android/app/src/main/res/layout/about.xml b/android/app/src/main/res/layout/about.xml
index 3b1ec37ff..0b02204b1 100644
--- a/android/app/src/main/res/layout/about.xml
+++ b/android/app/src/main/res/layout/about.xml
@@ -41,7 +41,7 @@
android:id="@+id/about_version"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:text="@string/app_version"
+ android:text="@string/app_version_and_hash"
android:textAlignment="center"
android:textIsSelectable="true"
android:textSize="14sp" />
diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml
index d9db90079..fa8c6f037 100644
--- a/android/app/src/main/res/values/strings.xml
+++ b/android/app/src/main/res/values/strings.xml
@@ -2,7 +2,7 @@
<!--string name="app_name" definition is deliberately missing here, it is filled in in build.gradle.-->
<string name="app_name_settings">Settings</string>
- <string name="app_version">Version: %1$s\nonline git-hash: %2$s\ncore git-hash: %3$s</string>
+ <string name="app_version_and_hash">Version: %1$s\nonline git-hash: %2$s\ncore git-hash: %3$s</string>
<string name="app_description">$APP_NAME is a modern, easy-to-use, open source productivity suite for word processing, spreadsheets, presentations and more.</string>
<string name="app_vendor">This release was supplied by $VENDOR.</string>
commit 30a01c0b215209a0fc8bef7fc4c102e17b6754f0
Author: mert <mert.tumer at collabora.com>
AuthorDate: Thu Apr 9 11:19:10 2020 +0300
Commit: Andras Timar <andras.timar at collabora.com>
CommitDate: Sun May 3 08:49:33 2020 +0200
tdf#131567 android: added version number in about dialog
also included git-hashes
Change-Id: Ia1d7f7f14b4c560ad7e47fd7a2f459e0da60e3d1
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/91951
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Andras Timar <andras.timar at collabora.com>
diff --git a/android/app/appSettings.gradle.in b/android/app/appSettings.gradle.in
index cbef6f786..611a9e48a 100644
--- a/android/app/appSettings.gradle.in
+++ b/android/app/appSettings.gradle.in
@@ -8,6 +8,9 @@ ext {
liboHasBranding = '@APP_HAS_BRANDING@'
liboBrandingDir = '@APP_BRANDING_DIR@'
liboAndroidAbi = '@ANDROID_ABI@'
+ liboOVersionHash = '@LOOLWSD_VERSION_HASH@'
+ liboCoreVersionHash = '@CORE_VERSION_HASH@'
+
}
android.defaultConfig {
applicationId '@ANDROID_PACKAGE_NAME@'
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 9d45689bb..1b4848bd0 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -22,6 +22,8 @@ android {
resValue "string", "app_name", "${liboAppName} Debug"
resValue "string", "vendor", "${liboVendor}"
resValue "string", "info_url", "${liboInfoURL}"
+ resValue "string", "online_version_hash", "${liboOVersionHash}"
+ resValue "string", "core_version_hash", "${liboCoreVersionHash}"
resValue "string", "image_draw_header", "@drawable/drawer_header"
manifestPlaceholders = [ appIcon: "${liboLauncherIcon}" ]
buildConfigField "boolean", "APP_HAS_BRANDING", "${liboHasBranding}"
@@ -37,6 +39,8 @@ android {
resValue "string", "app_name", "${liboAppName}"
resValue "string", "vendor", "${liboVendor}"
resValue "string", "info_url", "${liboInfoURL}"
+ resValue "string", "online_version_hash", "${liboOVersionHash}"
+ resValue "string", "core_version_hash", "${liboCoreVersionHash}"
if (file("src/main/res/drawable/drawer_header_brand.png").exists()) {
resValue "string", "image_draw_header", "@drawable/drawer_header_brand"
} else {
diff --git a/android/app/src/main/java/org/libreoffice/androidapp/AboutDialogFragment.java b/android/app/src/main/java/org/libreoffice/androidapp/AboutDialogFragment.java
index 0afad916a..b348cd58d 100644
--- a/android/app/src/main/java/org/libreoffice/androidapp/AboutDialogFragment.java
+++ b/android/app/src/main/java/org/libreoffice/androidapp/AboutDialogFragment.java
@@ -52,11 +52,14 @@ public class AboutDialogFragment extends DialogFragment {
{
String versionName = getActivity().getPackageManager()
.getPackageInfo(getActivity().getPackageName(), 0).versionName;
- String[] tokens = versionName.split("/");
- if (tokens.length >= 2)
+ String onlineVersionHash = getString(R.string.online_version_hash);
+ String coreVersionHash = getString(R.string.core_version_hash);
+
+ if (!onlineVersionHash.isEmpty() && !coreVersionHash.isEmpty() && !versionName.isEmpty())
{
String version = String.format(versionView.getText().toString().replace("\n", "<br/>"),
- tokens[0], "<a href=\"https://hub.libreoffice.org/git-online/" + tokens[1] + "\">" + tokens[1] + "</a>");
+ versionName, "<a href=\"https://hub.libreoffice.org/git-online/" + onlineVersionHash + "\">" + onlineVersionHash + "</a>",
+ "<a href=\"https://hub.libreoffice.org/git-core/" + coreVersionHash + "\">" + coreVersionHash + "</a>");
@SuppressWarnings("deprecation") // since 24 with additional option parameter
Spanned versionString = Html.fromHtml(version);
versionView.setText(versionString);
diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml
index 8368c33fc..d9db90079 100644
--- a/android/app/src/main/res/values/strings.xml
+++ b/android/app/src/main/res/values/strings.xml
@@ -2,7 +2,7 @@
<!--string name="app_name" definition is deliberately missing here, it is filled in in build.gradle.-->
<string name="app_name_settings">Settings</string>
- <string name="app_version">Version: %1$s, Build ID: %2$s</string>
+ <string name="app_version">Version: %1$s\nonline git-hash: %2$s\ncore git-hash: %3$s</string>
<string name="app_description">$APP_NAME is a modern, easy-to-use, open source productivity suite for word processing, spreadsheets, presentations and more.</string>
<string name="app_vendor">This release was supplied by $VENDOR.</string>
commit 2ccb0c2b0a84242251f440c1f18bfba9dc1b7f84
Author: Ashod Nakashian <ashod.nakashian at collabora.co.uk>
AuthorDate: Mon Apr 27 10:01:14 2020 -0400
Commit: Andras Timar <andras.timar at collabora.com>
CommitDate: Sat May 2 22:59:26 2020 +0200
leaflet: re-align child popups to avoid trimming
When a child's origin is such that its width
overflows its parent, we move it left such that
it fits the parent and doesn't get trimmed.
Change-Id: Ica8e0e9c8ce994aeb00704eb38ce3485db7cbd59
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/92995
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Andras Timar <andras.timar at collabora.com>
diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js
index dd0a78113..9c92895b2 100644
--- a/loleaflet/src/control/Control.LokDialog.js
+++ b/loleaflet/src/control/Control.LokDialog.js
@@ -1513,6 +1513,17 @@ L.Control.LokDialog = L.Control.extend({
if (!canvas)
return; // no floating window to paint to
+ // Make sure the child is not trimmed on the right.
+ var width = this._dialogs[parentId].childwidth;
+ var left = this._dialogs[parentId].childx;
+ var dialogContainer = L.DomUtil.get(strId).parentNode;
+ if (left + width > dialogContainer.clientWidth) {
+ // Align the right of the child to the right of the parent.
+ left -= Math.max(0, (left + width) - dialogContainer.clientWidth);
+ this._dialogs[parentId].childx = left;
+ L.DomUtil.setStyle(canvas, 'left', left + 'px');
+ }
+
// The image is rendered per the HiDPI scale we used
// while requesting rendering the image. Here we
// set the canvas to have the actual size, while
commit 92eff552a5fcef89a6bd0abadf19570c2f5457b8
Author: Michael Meeks <michael.meeks at collabora.com>
AuthorDate: Sat May 2 19:13:14 2020 +0100
Commit: Michael Meeks <michael.meeks at collabora.com>
CommitDate: Sat May 2 22:03:36 2020 +0200
Lower convert-to process priorities by default.
Interactive / editing processes should take precedence over batch
thumbnailing processes to keep responsiveness good.
Change-Id: Ib100409e312cb2ca545586a734711a31a92f110c
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/93323
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
diff --git a/common/Util.cpp b/common/Util.cpp
index 0ae624983..881836c34 100644
--- a/common/Util.cpp
+++ b/common/Util.cpp
@@ -14,9 +14,10 @@
#include <csignal>
#include <sys/poll.h>
#ifdef __linux
-#include <sys/prctl.h>
-#include <sys/syscall.h>
-#include <sys/vfs.h>
+# include <sys/prctl.h>
+# include <sys/syscall.h>
+# include <sys/vfs.h>
+# include <sys/resource.h>
#elif defined IOS
#import <Foundation/Foundation.h>
#endif
@@ -520,6 +521,18 @@ namespace Util
}
return 0;
}
+
+ void setProcessAndThreadPriorities(const pid_t pid, int prio)
+ {
+ int res = setpriority(PRIO_PROCESS, pid, prio);
+ LOG_TRC("Lowered kit [" << (int)pid << "] priority: " << prio << " with result: " << res);
+
+ // rely on Linux thread-id priority setting to drop this thread' priority
+ pid_t tid = getThreadId();
+ res = setpriority(PRIO_PROCESS, tid, prio);
+ LOG_TRC("Lowered own thread [" << (int)tid << "] priority: " << prio << " with result: " << res);
+ }
+
#endif
std::string replace(std::string result, const std::string& a, const std::string& b)
diff --git a/common/Util.hpp b/common/Util.hpp
index 105eef7dd..0f19828ba 100644
--- a/common/Util.hpp
+++ b/common/Util.hpp
@@ -151,6 +151,9 @@ namespace Util
size_t getCpuUsage(const pid_t pid);
size_t getStatFromPid(const pid_t pid, int ind);
+
+ /// Sets priorities for a given pid & the current thread
+ void setProcessAndThreadPriorities(const pid_t pid, int prio);
#endif
std::string replace(std::string s, const std::string& a, const std::string& b);
diff --git a/loolwsd.xml.in b/loolwsd.xml.in
index 4b40aa46f..bbd37ec35 100644
--- a/loolwsd.xml.in
+++ b/loolwsd.xml.in
@@ -15,6 +15,7 @@
<num_prespawn_children desc="Number of child processes to keep started in advance and waiting for new clients." type="uint" default="1">1</num_prespawn_children>
<per_document desc="Document-specific settings, including LO Core settings.">
<max_concurrency desc="The maximum number of threads to use while processing a document." type="uint" default="4">4</max_concurrency>
+ <batch_priority desc="A (lower) priority for use by batch eg. convert-to processes to avoid starving interactive ones" type="uint" default="5">5</batch_priority>
<document_signing_url desc="The endpoint URL of signing server, if empty the document signing is disabled" type="string" default="@VEREIGN_URL@">@VEREIGN_URL@</document_signing_url>
<redlining_as_comments desc="If true show red-lines as comments" type="bool" default="false">false</redlining_as_comments>
<idle_timeout_secs desc="The maximum number of seconds before unloading an idle document. Defaults to 1 hour." type="uint" default="3600">3600</idle_timeout_secs>
diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp
index 801343c63..f0e4a99df 100644
--- a/wsd/DocumentBroker.cpp
+++ b/wsd/DocumentBroker.cpp
@@ -172,11 +172,13 @@ public:
std::atomic<unsigned> DocumentBroker::DocBrokerId(1);
-DocumentBroker::DocumentBroker(const std::string& uri,
+DocumentBroker::DocumentBroker(ChildType type,
+ const std::string& uri,
const Poco::URI& uriPublic,
const std::string& docKey) :
_limitLifeSeconds(0),
_uriOrig(uri),
+ _type(type),
_uriPublic(uriPublic),
_docKey(docKey),
_docId(Util::encodeId(DocBrokerId++, 3)),
@@ -206,6 +208,17 @@ DocumentBroker::DocumentBroker(const std::string& uri,
"] created with docKey [" << _docKey << "]");
}
+void DocumentBroker::setupPriorities()
+{
+#if !MOBILEAPP
+ if (_type == ChildType::Batch)
+ {
+ int prio = LOOLWSD::getConfigValue<int>("per_document.batch_priority", 5);
+ Util::setProcessAndThreadPriorities(_childProcess->getPid(), prio);
+ }
+#endif // !MOBILE
+}
+
void DocumentBroker::startThread()
{
_poll->startThread();
@@ -271,6 +284,8 @@ void DocumentBroker::pollThread()
_childProcess->setDocumentBroker(shared_from_this());
LOG_INF("Doc [" << _docKey << "] attached to child [" << _childProcess->getPid() << "].");
+ setupPriorities();
+
static const bool AutoSaveEnabled = !std::getenv("LOOL_NO_AUTOSAVE");
#if !MOBILEAPP
@@ -2226,7 +2241,7 @@ ConvertToBroker::ConvertToBroker(const std::string& uri,
const std::string& docKey,
const std::string& format,
const std::string& sOptions) :
- DocumentBroker(uri, uriPublic, docKey),
+ DocumentBroker(ChildType::Batch, uri, uriPublic, docKey),
_format(format),
_sOptions(sOptions)
{
diff --git a/wsd/DocumentBroker.hpp b/wsd/DocumentBroker.hpp
index 61f74f5a7..40784b204 100644
--- a/wsd/DocumentBroker.hpp
+++ b/wsd/DocumentBroker.hpp
@@ -109,7 +109,15 @@ class ClientSession;
class DocumentBroker : public std::enable_shared_from_this<DocumentBroker>
{
class DocumentBrokerPoll;
+
+ void setupPriorities();
+
public:
+ /// How to prioritize this document.
+ enum class ChildType {
+ Interactive, Batch
+ };
+
static Poco::URI sanitizeURI(const std::string& uri);
/// Returns a document-specific key based
@@ -120,7 +128,8 @@ public:
DocumentBroker();
/// Construct DocumentBroker with URI, docKey, and root path.
- DocumentBroker(const std::string& uri,
+ DocumentBroker(ChildType type,
+ const std::string& uri,
const Poco::URI& uriPublic,
const std::string& docKey);
@@ -361,6 +370,8 @@ protected:
/// Seconds to live for, or 0 forever
int64_t _limitLifeSeconds;
std::string _uriOrig;
+ /// What type are we: affects priority.
+ ChildType _type;
private:
const Poco::URI _uriPublic;
/// URL-based key. May be repeated during the lifetime of WSD.
diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp
index dbe119067..60d3c0376 100644
--- a/wsd/LOOLWSD.cpp
+++ b/wsd/LOOLWSD.cpp
@@ -914,6 +914,7 @@ void LOOLWSD::initialize(Application& self)
{ "per_document.limit_stack_mem_kb", "8000" },
{ "per_document.limit_virt_mem_mb", "0" },
{ "per_document.max_concurrency", "4" },
+ { "per_document.batch_priority", "5" },
{ "per_document.redlining_as_comments", "false" },
{ "per_view.idle_timeout_secs", "900" },
{ "per_view.out_of_focus_timeout_secs", "120" },
@@ -1816,6 +1817,7 @@ std::mutex Connection::Mutex;
/// After returning a valid instance DocBrokers must be cleaned up after exceptions.
static std::shared_ptr<DocumentBroker>
findOrCreateDocBroker(const std::shared_ptr<ProtocolHandlerInterface>& proto,
+ DocumentBroker::ChildType type,
const std::string& uri,
const std::string& docKey,
const std::string& id,
@@ -1891,7 +1893,7 @@ static std::shared_ptr<DocumentBroker>
// Set the one we just created.
LOG_DBG("New DocumentBroker for docKey [" << docKey << "].");
- docBroker = std::make_shared<DocumentBroker>(uri, uriPublic, docKey);
+ docBroker = std::make_shared<DocumentBroker>(type, uri, uriPublic, docKey);
DocBrokers.emplace(docKey, docBroker);
LOG_TRC("Have " << DocBrokers.size() << " DocBrokers after inserting [" << docKey << "].");
}
@@ -2962,7 +2964,7 @@ private:
std::shared_ptr<ProtocolHandlerInterface> none;
// Request a kit process for this doc.
std::shared_ptr<DocumentBroker> docBroker = findOrCreateDocBroker(
- none, url, docKey, _id, uriPublic);
+ none, DocumentBroker::ChildType::Interactive, url, docKey, _id, uriPublic);
std::string fullURL = request.getURI();
std::string ending = "/ws/wait";
@@ -3078,7 +3080,8 @@ private:
// Request a kit process for this doc.
std::shared_ptr<DocumentBroker> docBroker = findOrCreateDocBroker(
- std::static_pointer_cast<ProtocolHandlerInterface>(ws), url, docKey, _id, uriPublic);
+ std::static_pointer_cast<ProtocolHandlerInterface>(ws),
+ DocumentBroker::ChildType::Interactive, url, docKey, _id, uriPublic);
if (docBroker)
{
#if MOBILEAPP
commit fdd4b4f63ddd16679a5a7035aa14d6e02fd57fdd
Author: Michael Meeks <michael.meeks at collabora.com>
AuthorDate: Sat May 2 19:14:05 2020 +0100
Commit: Michael Meeks <michael.meeks at collabora.com>
CommitDate: Sat May 2 21:31:25 2020 +0200
mobile: remove a few conditionals.
Change-Id: I5f306904b0b0533290d5533bbc3452217689eaec
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/93324
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp
index b6defa9d5..801343c63 100644
--- a/wsd/DocumentBroker.cpp
+++ b/wsd/DocumentBroker.cpp
@@ -228,7 +228,7 @@ void DocumentBroker::pollThread()
do
{
static const int timeoutMs = COMMAND_TIMEOUT_MS * 5;
- _childProcess = getNewChild_Blocks();
+ _childProcess = getNewChild_Blocks(getPublicUri().getPath());
if (_childProcess ||
std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now() -
_threadStart).count() > timeoutMs)
diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp
index f4812ff30..dbe119067 100644
--- a/wsd/LOOLWSD.cpp
+++ b/wsd/LOOLWSD.cpp
@@ -491,17 +491,14 @@ static size_t addNewChild(const std::shared_ptr<ChildProcess>& child)
std::mutex LOOLWSD::lokit_main_mutex;
#endif
-std::shared_ptr<ChildProcess> getNewChild_Blocks(
-#if MOBILEAPP
- const std::string& uri
-#endif
- )
+std::shared_ptr<ChildProcess> getNewChild_Blocks(const std::string& uri)
{
std::unique_lock<std::mutex> lock(NewChildrenMutex);
const auto startTime = std::chrono::steady_clock::now();
#if !MOBILEAPP
+ (void)uri;
LOG_DBG("getNewChild: Rebalancing children.");
int numPreSpawn = LOOLWSD::NumPreSpawnedChildren;
++numPreSpawn; // Replace the one we'll dispatch just now.
diff --git a/wsd/LOOLWSD.hpp b/wsd/LOOLWSD.hpp
index f2f7e0abc..dc0a68e06 100644
--- a/wsd/LOOLWSD.hpp
+++ b/wsd/LOOLWSD.hpp
@@ -32,15 +32,11 @@ class TraceFileWriter;
class DocumentBroker;
class ClipboardCache;
-std::shared_ptr<ChildProcess> getNewChild_Blocks(
-#if MOBILEAPP
- const std::string& uri
-#endif
- );
+std::shared_ptr<ChildProcess> getNewChild_Blocks(const std::string& uri);
+
// A WSProcess object in the WSD process represents a descendant process, either the direct child
// process FORKIT or a grandchild KIT process, with which the WSD process communicates through a
// WebSocket.
-
class WSProcess
{
public:
commit 3c73ef8765a7ddfa3568b156385b3786b4784f38
Author: Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Thu Apr 30 12:40:56 2020 +0200
Commit: Szymon Kłos <szymon.klos at collabora.com>
CommitDate: Fri May 1 21:40:29 2020 +0200
notebookbar: icons & layout the references tab
Change-Id: I52f319be7dc17cfe8376e673d46adb691f994df7
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/93300
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Szymon Kłos <szymon.klos at collabora.com>
diff --git a/loleaflet/css/notebookbar.css b/loleaflet/css/notebookbar.css
index 85c0c077f..fbbe66873 100644
--- a/loleaflet/css/notebookbar.css
+++ b/loleaflet/css/notebookbar.css
@@ -139,7 +139,8 @@ div[id*='Row'].notebookbar, div[id*='Column'].notebookbar, #SendToBack.notebookb
#DrawText.notebookbar img,
#VerticalText.notebookbar img,
#BasicShapes.notebookbar img,
-#table-Insert-Section-Symbol #CharmapControl.notebookbar img{
+#table-Insert-Section-Symbol #CharmapControl.notebookbar img
+{
height: 32px !important;
width: 32px !important;
}
@@ -155,7 +156,8 @@ div[id*='Row'].notebookbar, div[id*='Column'].notebookbar, #SendToBack.notebookb
#ObjectForwardOne.notebookbar img,
#SendToBack.notebookbar img,
#ObjectBackOne.notebookbar img,
-#PageDialog.notebookbar img {
+#PageDialog.notebookbar img
+{
height: 32px !important;
width: 32px !important;
}
@@ -167,6 +169,30 @@ div[id*='Row'].notebookbar, div[id*='Column'].notebookbar, #SendToBack.notebookb
#InsertBreak.notebookbar,
#Watermark.notebookbar,
#LineNumberingDialog.notebookbar
- {
+{
+ margin-top: 10px;
+}
+
+/* References Tab */
+
+#table-ReferencesBox
+{
+ margin-top: 5px;
+}
+
+#InsertMultiIndex.notebookbar img,
+#InsertFootnote.notebookbar img,
+#InsertReferenceField.notebookbar img,
+#InsertAuthoritiesEntry.notebookbar img,
+#UpdateAll.notebookbar img
+{
+ height: 32px !important;
+ width: 32px !important;
+}
+
+#UpdateCurIndex.notebookbar,
+#FootnoteDialog.notebookbar,
+#InsertCaptionDialog.notebookbar
+{
margin-top: 10px;
}
\ No newline at end of file
diff --git a/loleaflet/images/lc_footnotedialog.svg b/loleaflet/images/lc_footnotedialog.svg
new file mode 100644
index 000000000..f1e621a3c
--- /dev/null
+++ b/loleaflet/images/lc_footnotedialog.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m9 3v5.5c0 .277-.223.5-.5.5h-3.5v12h13v-4.892578c-.157532.018023-.317687.020854-.474609-.019531-.01639-.00417-.032669-.008672-.048829-.013672-.266932-.083795-.579671-.239065-.80664-.5625l-.47461-.646485c-.305358-.41509-.245328-.994252.138672-1.33789l1.666016-1.488282v-9.039062z" fill="#fff"/><path d="m9 2v1h9v9.039062l1-.894531v-8.144531c0-.554-.446-1-1-1zm-5 7v12c0 .554.446 1 1 1h13 .972656v-6.355469l-.066406.064453c-.02003.01975-.04088.038651-.0625.056641-.206896.170095-.516862.304399-.84375.341797v4.892578h-13v-12z" fill="#808080"/><path d="m19.972751 22v-8.720406l-1.763785 1.712613c-.14766.121396-.292243.163885-.433751.127466-.135355-.04249-.230718-.103185-.286092-.182094l-.489123-.664643 3.662167-3.272936h1.337833v11 1h-2.027249z" fill="#4d82b8"/><g fill="#eac282"><path d="m2.4999352 7.4999941 5.0000589-5.0000589v5.0000589z" fill-rule="evenodd" stroke="#eac282" stroke-linecap="round" stroke-linejoin="round" st
roke-width="1.000012"/><rect height="6" ry=".5" width="1" x="1" y="1"/><rect height="1" ry=".5" width="6" x="1" y="1"/></g></svg>
\ No newline at end of file
diff --git a/loleaflet/images/lc_insertcaptiondialog.svg b/loleaflet/images/lc_insertcaptiondialog.svg
new file mode 100644
index 000000000..5268ce5da
--- /dev/null
+++ b/loleaflet/images/lc_insertcaptiondialog.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m3 3h18v15h-18z" fill="#fff"/><path d="m2 2v17h20v-17zm1 1h18v15h-18z" fill="#808080"/><circle cx="7.5" cy="7.5" fill="#eac282" r="2.5"/><path d="m3 18c .4875945 0 6-5 6-5l2 1.593356 5-4.593356 5 5v3z" fill="#808080" fill-rule="evenodd"/><rect fill="#4d82b8" height="2" ry="1" width="3" x="2" y="20"/><rect fill="#4d82b8" height="2" ry="1" width="15" x="7" y="20"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/lc_updateall.svg b/loleaflet/images/lc_updateall.svg
new file mode 100644
index 000000000..6e844f32e
--- /dev/null
+++ b/loleaflet/images/lc_updateall.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m12 2a10 10 0 0 0 -5.5097656 1.6621094l.4453125.4453125.2773437.2773437 3.7226564 3.7226563.707031-.7070313-3.5136718-3.5136718a9 9 0 0 1 3.8710938-.8867188 9 9 0 0 1 9 9 9 9 0 0 1 -1.388672 4.783203l.726563.726563a10 10 0 0 0 1.662109-5.509766 10 10 0 0 0 -10-10zm-8.3378906 4.4902344a10 10 0 0 0 -1.6621094 5.5097656 10 10 0 0 0 10 10 10 10 0 0 0 5.509766-1.662109l-.669922-.669922.005859-.003907-4-4-.707031.707032 3.740234 3.740234a9 9 0 0 1 -3.878906.888672 9 9 0 0 1 -9-9 9 9 0 0 1 1.3886719-4.7832031z" fill="#4d82b8" fill-rule="evenodd"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/lc_updatecurindex.svg b/loleaflet/images/lc_updatecurindex.svg
new file mode 100644
index 000000000..e26fc6a01
--- /dev/null
+++ b/loleaflet/images/lc_updatecurindex.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m5 3v18h14v-14.2705905l-4-3.7294095z" fill="#fff"/><path d="m5 2c-.554 0-1 .446-1 1v18c0 .554.446 1 1 1h14c.554 0 1-.446 1-1v-10.109375-3.6412209-.2079239c0-.4506799.09887-.4265951-.604637-1.0675892l-3.307389-3.2370335c-.709525-.7368575-.711223-.7368575-1.094804-.7368575h-.331557-.661613zm0 1h9v4c0 .554.446 1 1 1h4v13h-14z" fill="#808080"/><path d="m15 7h4l-4-4z" fill="#fff" fill-rule="evenodd"/><g fill="#4d82b8"><rect height="2" ry="1" width="7" x="6" y="5"/><rect height="1" ry=".491011" width="8" x="6" y="9"/><rect height="1" ry=".473034" width="2" x="16" y="9"/><rect height="1" ry=".491011" width="8" x="6" y="12"/><rect height="1" ry=".473034" width="2" x="16" y="12"/><rect height="1" ry=".491011" width="8" x="6" y="15"/><rect height="1" ry=".473034" width="2" x="16" y="15"/><rect height="1" ry=".491011" width="8" x="6" y="18"/><rect height="1" ry=".473034" width="2" x="16" y="18"/></g></svg>
\ No newline at end of file
diff --git a/loleaflet/src/control/Control.NotebookbarBuilder.js b/loleaflet/src/control/Control.NotebookbarBuilder.js
index d9c13f358..9bd26f66e 100644
--- a/loleaflet/src/control/Control.NotebookbarBuilder.js
+++ b/loleaflet/src/control/Control.NotebookbarBuilder.js
... etc. - the rest is truncated
More information about the Libreoffice-commits
mailing list