[Libreoffice-commits] online.git: Branch 'distro/collabora/co-4-2-0' - 58 commits - android/app android/lib android/README common/Session.cpp common/Session.hpp common/SigUtil.cpp common/SigUtil.hpp configure.ac debian/changelog docker/Dockerfile ios/Mobile.xcodeproj kit/ChildSession.cpp kit/Kit.cpp loleaflet/admin loleaflet/css loleaflet/html loleaflet/images loleaflet/js loleaflet/l10n loleaflet/Makefile.am loleaflet/po loleaflet/src loolwsd.spec.in net/WebSocketHandler.hpp wsd/ClientSession.cpp wsd/ClientSession.hpp wsd/DocumentBroker.cpp wsd/DocumentBroker.hpp wsd/LOOLWSD.cpp wsd/README wsd/Storage.cpp

Andras Timar (via logerrit) logerrit at kemper.freedesktop.org
Thu Jan 9 21:13:35 UTC 2020


 android/README                                   |   11 
 android/app/appSettings.gradle.in                |    1 
 android/app/build.gradle                         |   11 
 android/app/src/main/res/values-ast/strings.xml  |   23 +
 android/app/src/main/res/values-de/strings.xml   |   67 +++
 android/app/src/main/res/values-dsb/strings.xml  |  102 ++++
 android/app/src/main/res/values-el/strings.xml   |  102 ++++
 android/app/src/main/res/values-eu/strings.xml   |  102 ++++
 android/app/src/main/res/values-hsb/strings.xml  |  102 ++++
 android/app/src/main/res/values-pt/strings.xml   |  101 ++++
 android/app/src/main/res/values-tr/strings.xml   |   29 +
 android/lib/build.gradle                         |   11 
 android/lib/libSettings.gradle.in                |    1 
 android/lib/src/main/cpp/CMakeLists.txt.in       |   87 ++--
 android/lib/src/main/res/values-dsb/strings.xml  |    9 
 android/lib/src/main/res/values-el/strings.xml   |    9 
 android/lib/src/main/res/values-eu/strings.xml   |    9 
 android/lib/src/main/res/values-hsb/strings.xml  |    9 
 android/lib/src/main/res/values-tr/strings.xml   |    9 
 common/Session.cpp                               |   17 
 common/Session.hpp                               |   51 ++
 common/SigUtil.cpp                               |   15 
 common/SigUtil.hpp                               |    3 
 configure.ac                                     |   89 +++-
 debian/changelog                                 |    6 
 docker/Dockerfile                                |    4 
 ios/Mobile.xcodeproj/project.pbxproj             |  100 ++++
 kit/ChildSession.cpp                             |   39 +
 kit/Kit.cpp                                      |   36 -
 loleaflet/Makefile.am                            |    4 
 loleaflet/admin/src/AdminSocketOverview.js       |    3 
 loleaflet/css/loleaflet.css                      |    8 
 loleaflet/css/mobilewizard.css                   |    7 
 loleaflet/css/toolbar-mobile.css                 |   17 
 loleaflet/css/toolbar.css                        |    2 
 loleaflet/html/loleaflet-help.html               |   51 +-
 loleaflet/html/loleaflet.html.m4                 |    4 
 loleaflet/images/lc_insertcurrentdate.svg        |    1 
 loleaflet/images/lc_insertcurrenttime.svg        |    1 
 loleaflet/images/lc_insertdatefieldfix.svg       |    1 
 loleaflet/images/lc_insertdatefieldvar.svg       |    1 
 loleaflet/images/lc_insertfilefield.svg          |    1 
 loleaflet/images/lc_insertslidefield.svg         |    1 
 loleaflet/images/lc_insertslidesfield.svg        |    1 
 loleaflet/images/lc_insertslidetitlefield.svg    |    1 
 loleaflet/images/lc_inserttimefieldfix.svg       |    1 
 loleaflet/images/lc_inserttimefieldvar.svg       |    1 
 loleaflet/images/lc_orientation.svg              |    1 
 loleaflet/js/global.js                           |   10 
 loleaflet/js/w2ui-1.5.rc1.js                     |    6 
 loleaflet/l10n/uno/ab.json                       |    1 
 loleaflet/l10n/uno/am.json                       |    1 
 loleaflet/l10n/uno/ar.json                       |    1 
 loleaflet/l10n/uno/be.json                       |    1 
 loleaflet/l10n/uno/bg.json                       |    1 
 loleaflet/l10n/uno/br.json                       |    1 
 loleaflet/l10n/uno/ca-valencia.json              |    1 
 loleaflet/l10n/uno/ca.json                       |    1 
 loleaflet/l10n/uno/cs.json                       |    1 
 loleaflet/l10n/uno/cy.json                       |    1 
 loleaflet/l10n/uno/da.json                       |    1 
 loleaflet/l10n/uno/de.json                       |    1 
 loleaflet/l10n/uno/dsb.json                      |    1 
 loleaflet/l10n/uno/el.json                       |    1 
 loleaflet/l10n/uno/en-GB.json                    |    1 
 loleaflet/l10n/uno/eo.json                       |    1 
 loleaflet/l10n/uno/es.json                       |    4 
 loleaflet/l10n/uno/et.json                       |    1 
 loleaflet/l10n/uno/eu.json                       |    1 
 loleaflet/l10n/uno/fi.json                       |    1 
 loleaflet/l10n/uno/fr.json                       |    1 
 loleaflet/l10n/uno/fy.json                       |    1 
 loleaflet/l10n/uno/ga.json                       |    1 
 loleaflet/l10n/uno/gd.json                       |    1 
 loleaflet/l10n/uno/gl.json                       |    1 
 loleaflet/l10n/uno/gug.json                      |    1 
 loleaflet/l10n/uno/hr.json                       |    1 
 loleaflet/l10n/uno/hsb.json                      |    1 
 loleaflet/l10n/uno/hu.json                       |    1 
 loleaflet/l10n/uno/id.json                       |    1 
 loleaflet/l10n/uno/is.json                       |    1 
 loleaflet/l10n/uno/it.json                       |    1 
 loleaflet/l10n/uno/ja.json                       |    1 
 loleaflet/l10n/uno/kab.json                      |    1 
 loleaflet/l10n/uno/kk.json                       |    1 
 loleaflet/l10n/uno/ko.json                       |    1 
 loleaflet/l10n/uno/lt.json                       |    1 
 loleaflet/l10n/uno/lv.json                       |    1 
 loleaflet/l10n/uno/nb.json                       |    1 
 loleaflet/l10n/uno/nl.json                       |    1 
 loleaflet/l10n/uno/nn.json                       |    1 
 loleaflet/l10n/uno/oc.json                       |    1 
 loleaflet/l10n/uno/pl.json                       |    1 
 loleaflet/l10n/uno/pt-BR.json                    |    3 
 loleaflet/l10n/uno/pt.json                       |    1 
 loleaflet/l10n/uno/ro.json                       |    1 
 loleaflet/l10n/uno/ru.json                       |    1 
 loleaflet/l10n/uno/sk.json                       |    1 
 loleaflet/l10n/uno/sl.json                       |    1 
 loleaflet/l10n/uno/sv.json                       |    1 
 loleaflet/l10n/uno/ta.json                       |    1 
 loleaflet/l10n/uno/tr.json                       |    1 
 loleaflet/l10n/uno/ug.json                       |    1 
 loleaflet/l10n/uno/uk.json                       |    1 
 loleaflet/l10n/uno/vec.json                      |    1 
 loleaflet/l10n/uno/zh-CN.json                    |    1 
 loleaflet/l10n/uno/zh-TW.json                    |    1 
 loleaflet/po/help-ast.po                         |   22 -
 loleaflet/po/help-ca.po                          |   44 --
 loleaflet/po/help-cs.po                          |  459 ++++++++++------------
 loleaflet/po/help-dsb.po                         |   33 -
 loleaflet/po/help-el.po                          |  457 ++++++++++------------
 loleaflet/po/help-es.po                          |  118 ++---
 loleaflet/po/help-eu.po                          |  165 +++-----
 loleaflet/po/help-hsb.po                         |  125 ++----
 loleaflet/po/help-hu.po                          |   14 
 loleaflet/po/help-it.po                          |   31 -
 loleaflet/po/help-pt.po                          |   71 +--
 loleaflet/po/help-pt_BR.po                       |   21 -
 loleaflet/po/help-tr.po                          |   73 +--
 loleaflet/po/ios-ast.po                          |    8 
 loleaflet/po/ios-ja.po                           |   11 
 loleaflet/po/ios-sl.po                           |   17 
 loleaflet/po/templates/loleaflet-ui.pot          |  316 +++++++--------
 loleaflet/po/ui-ab.po                            |  323 +++++++--------
 loleaflet/po/ui-af.po                            |  316 +++++++--------
 loleaflet/po/ui-am.po                            |  325 +++++++--------
 loleaflet/po/ui-an.po                            |  316 +++++++--------
 loleaflet/po/ui-anp.po                           |  316 +++++++--------
 loleaflet/po/ui-ar.po                            |  325 +++++++--------
 loleaflet/po/ui-as.po                            |  316 +++++++--------
 loleaflet/po/ui-ast.po                           |  458 +++++++++++-----------
 loleaflet/po/ui-az.po                            |  316 +++++++--------
 loleaflet/po/ui-bar.po                           |  316 +++++++--------
 loleaflet/po/ui-be.po                            |  316 +++++++--------
 loleaflet/po/ui-bg.po                            |  325 +++++++--------
 loleaflet/po/ui-bm.po                            |  316 +++++++--------
 loleaflet/po/ui-bn.po                            |  316 +++++++--------
 loleaflet/po/ui-bn_IN.po                         |  316 +++++++--------
 loleaflet/po/ui-bo.po                            |  316 +++++++--------
 loleaflet/po/ui-br.po                            |  316 +++++++--------
 loleaflet/po/ui-brx.po                           |  316 +++++++--------
 loleaflet/po/ui-bs.po                            |  323 +++++++--------
 loleaflet/po/ui-ca-valencia.po                   |  316 +++++++--------
 loleaflet/po/ui-ca.po                            |  355 ++++++++---------
 loleaflet/po/ui-ce.po                            |  316 +++++++--------
 loleaflet/po/ui-cs.po                            |  419 +++++++++-----------
 loleaflet/po/ui-cy.po                            |  374 +++++++++---------
 loleaflet/po/ui-da.po                            |  325 +++++++--------
 loleaflet/po/ui-de.po                            |  331 ++++++++--------
 loleaflet/po/ui-dgo.po                           |  316 +++++++--------
 loleaflet/po/ui-dsb.po                           |  413 +++++++++-----------
 loleaflet/po/ui-dz.po                            |  316 +++++++--------
 loleaflet/po/ui-el.po                            |  415 +++++++++-----------
 loleaflet/po/ui-en_AU.po                         |  316 +++++++--------
 loleaflet/po/ui-en_GB.po                         |  325 +++++++--------
 loleaflet/po/ui-en_ZA.po                         |  316 +++++++--------
 loleaflet/po/ui-eo.po                            |  348 ++++++++--------
 loleaflet/po/ui-es.po                            |  362 ++++++++---------
 loleaflet/po/ui-et.po                            |  321 +++++++--------
 loleaflet/po/ui-eu.po                            |  419 +++++++++-----------
 loleaflet/po/ui-fa.po                            |  316 +++++++--------
 loleaflet/po/ui-fi.po                            |  325 +++++++--------
 loleaflet/po/ui-fr.po                            |  325 +++++++--------
 loleaflet/po/ui-fur.po                           |  316 +++++++--------
 loleaflet/po/ui-fy.po                            |  316 +++++++--------
 loleaflet/po/ui-ga.po                            |  323 +++++++--------
 loleaflet/po/ui-gbm.po                           |  316 +++++++--------
 loleaflet/po/ui-gd.po                            |  325 +++++++--------
 loleaflet/po/ui-gl.po                            |  325 +++++++--------
 loleaflet/po/ui-gu.po                            |  316 +++++++--------
 loleaflet/po/ui-gug.po                           |  323 +++++++--------
 loleaflet/po/ui-he.po                            |  325 +++++++--------
 loleaflet/po/ui-hi.po                            |  323 +++++++--------
 loleaflet/po/ui-hr.po                            |  325 +++++++--------
 loleaflet/po/ui-hsb.po                           |  413 +++++++++-----------
 loleaflet/po/ui-hu.po                            |  393 +++++++++----------
 loleaflet/po/ui-hy.po                            |  316 +++++++--------
 loleaflet/po/ui-id.po                            |  325 +++++++--------
 loleaflet/po/ui-is.po                            |  325 +++++++--------
 loleaflet/po/ui-it.po                            |  338 ++++++++--------
 loleaflet/po/ui-ja.po                            |  325 +++++++--------
 loleaflet/po/ui-jv.po                            |  316 +++++++--------
 loleaflet/po/ui-ka.po                            |  316 +++++++--------
 loleaflet/po/ui-kab.po                           |  316 +++++++--------
 loleaflet/po/ui-kk.po                            |  323 +++++++--------
 loleaflet/po/ui-kl.po                            |  316 +++++++--------
 loleaflet/po/ui-km.po                            |  316 +++++++--------
 loleaflet/po/ui-kmr-Latn.po                      |  316 +++++++--------
 loleaflet/po/ui-kn.po                            |  316 +++++++--------
 loleaflet/po/ui-ko.po                            |  325 +++++++--------
 loleaflet/po/ui-kok.po                           |  316 +++++++--------
 loleaflet/po/ui-ks.po                            |  316 +++++++--------
 loleaflet/po/ui-ky.po                            |  316 +++++++--------
 loleaflet/po/ui-lb.po                            |  316 +++++++--------
 loleaflet/po/ui-lo.po                            |  383 +++++++++---------
 loleaflet/po/ui-lt.po                            |  323 +++++++--------
 loleaflet/po/ui-lv.po                            |  323 +++++++--------
 loleaflet/po/ui-mai.po                           |  316 +++++++--------
 loleaflet/po/ui-mk.po                            |  316 +++++++--------
 loleaflet/po/ui-ml.po                            |  316 +++++++--------
 loleaflet/po/ui-mn.po                            |  316 +++++++--------
 loleaflet/po/ui-mni.po                           |  316 +++++++--------
 loleaflet/po/ui-mr.po                            |  316 +++++++--------
 loleaflet/po/ui-mt.po                            |  316 +++++++--------
 loleaflet/po/ui-my.po                            |  316 +++++++--------
 loleaflet/po/ui-nah.po                           |  316 +++++++--------
 loleaflet/po/ui-nb.po                            |  325 +++++++--------
 loleaflet/po/ui-ne.po                            |  325 +++++++--------
 loleaflet/po/ui-nl.po                            |  325 +++++++--------
 loleaflet/po/ui-nn.po                            |  325 +++++++--------
 loleaflet/po/ui-nqo.po                           |  316 +++++++--------
 loleaflet/po/ui-nr.po                            |  316 +++++++--------
 loleaflet/po/ui-nso.po                           |  316 +++++++--------
 loleaflet/po/ui-oc.po                            |  325 +++++++--------
 loleaflet/po/ui-om.po                            |  316 +++++++--------
 loleaflet/po/ui-or.po                            |  316 +++++++--------
 loleaflet/po/ui-pa_IN.po                         |  325 +++++++--------
 loleaflet/po/ui-pap_CW.po                        |  316 +++++++--------
 loleaflet/po/ui-pl.po                            |  325 +++++++--------
 loleaflet/po/ui-pt.po                            |  333 ++++++++--------
 loleaflet/po/ui-pt_BR.po                         |  472 +++++++++--------------
 loleaflet/po/ui-ro.po                            |  323 +++++++--------
 loleaflet/po/ui-ru.po                            |  325 +++++++--------
 loleaflet/po/ui-rw.po                            |  316 +++++++--------
 loleaflet/po/ui-sa_IN.po                         |  316 +++++++--------
 loleaflet/po/ui-sah.po                           |  316 +++++++--------
 loleaflet/po/ui-sat.po                           |  316 +++++++--------
 loleaflet/po/ui-sd.po                            |  316 +++++++--------
 loleaflet/po/ui-si.po                            |  316 +++++++--------
 loleaflet/po/ui-sid.po                           |  316 +++++++--------
 loleaflet/po/ui-sk.po                            |  325 +++++++--------
 loleaflet/po/ui-sl.po                            |  359 ++++++++---------
 loleaflet/po/ui-sq.po                            |  323 +++++++--------
 loleaflet/po/ui-ss.po                            |  316 +++++++--------
 loleaflet/po/ui-st.po                            |  316 +++++++--------
 loleaflet/po/ui-sv.po                            |  325 +++++++--------
 loleaflet/po/ui-sw_TZ.po                         |  316 +++++++--------
 loleaflet/po/ui-ta.po                            |  323 +++++++--------
 loleaflet/po/ui-te.po                            |  316 +++++++--------
 loleaflet/po/ui-tg.po                            |  316 +++++++--------
 loleaflet/po/ui-th.po                            |  323 +++++++--------
 loleaflet/po/ui-ti.po                            |  316 +++++++--------
 loleaflet/po/ui-tn.po                            |  316 +++++++--------
 loleaflet/po/ui-tr.po                            |  393 +++++++++----------
 loleaflet/po/ui-ts.po                            |  316 +++++++--------
 loleaflet/po/ui-tt.po                            |  316 +++++++--------
 loleaflet/po/ui-ug.po                            |  323 +++++++--------
 loleaflet/po/ui-uk.po                            |  325 +++++++--------
 loleaflet/po/ui-ur.po                            |  316 +++++++--------
 loleaflet/po/ui-uz.po                            |  325 +++++++--------
 loleaflet/po/ui-ve.po                            |  316 +++++++--------
 loleaflet/po/ui-vec.po                           |  323 +++++++--------
 loleaflet/po/ui-vi.po                            |  316 +++++++--------
 loleaflet/po/ui-wo.po                            |  316 +++++++--------
 loleaflet/po/ui-xh.po                            |  316 +++++++--------
 loleaflet/po/ui-zh_CN.po                         |  325 +++++++--------
 loleaflet/po/ui-zh_TW.po                         |  338 ++++++++--------
 loleaflet/po/ui-zu.po                            |  316 +++++++--------
 loleaflet/src/control/Control.JSDialogBuilder.js |   11 
 loleaflet/src/control/Control.LokDialog.js       |   39 +
 loleaflet/src/control/Control.Menubar.js         |  100 ++++
 loleaflet/src/control/Control.MobileWizard.js    |   23 -
 loleaflet/src/control/Control.Toolbar.js         |   48 +-
 loleaflet/src/control/Toolbar.js                 |   11 
 loleaflet/src/core/Browser.js                    |    7 
 loleaflet/src/core/LOUtil.js                     |    9 
 loleaflet/src/layer/marker/TextInput.js          |   20 
 loleaflet/src/layer/tile/CalcTileLayer.js        |    3 
 loleaflet/src/layer/tile/ImpressTileLayer.js     |   14 
 loleaflet/src/layer/tile/TileLayer.js            |    4 
 loleaflet/src/layer/tile/WriterTileLayer.js      |    5 
 loleaflet/src/main.js                            |   15 
 loleaflet/src/map/Clipboard.js                   |   14 
 loleaflet/src/map/Map.js                         |   19 
 loleaflet/src/map/handler/Map.FileInserter.js    |    4 
 loleaflet/src/map/handler/Map.StateChanges.js    |    4 
 loleaflet/src/map/handler/Map.TouchGesture.js    |   26 -
 loleaflet/src/unocommands.js                     |   14 
 loolwsd.spec.in                                  |    2 
 net/WebSocketHandler.hpp                         |    3 
 wsd/ClientSession.cpp                            |   20 
 wsd/ClientSession.hpp                            |    2 
 wsd/DocumentBroker.cpp                           |   14 
 wsd/DocumentBroker.hpp                           |    3 
 wsd/LOOLWSD.cpp                                  |    2 
 wsd/README                                       |    4 
 wsd/Storage.cpp                                  |    2 
 288 files changed, 24525 insertions(+), 23569 deletions(-)

New commits:
commit 7ea59a0c45110829e3c03564bbb9626c48943b32
Author:     Andras Timar <andras.timar at collabora.com>
AuthorDate: Thu Jan 9 22:13:06 2020 +0100
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:13:06 2020 +0100

    Bump package version to 4.2.0-3
    
    Change-Id: Ied748109f19640163c965a7f42885bfbcaae4515

diff --git a/debian/changelog b/debian/changelog
index c5b23d30d..a81097de9 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+loolwsd (4.2.0-3) unstable; urgency=medium
+
+  * see the git log: http://col.la/cool420
+
+ -- Andras Timar <andras.timar at collabora.com>  Thu, 09 Jan 2020 22:12:00 +0100
+
 loolwsd (4.2.0-2) unstable; urgency=medium
 
   * see the git log: http://col.la/cool420
diff --git a/loolwsd.spec.in b/loolwsd.spec.in
index de9893878..c31d09921 100644
--- a/loolwsd.spec.in
+++ b/loolwsd.spec.in
@@ -12,7 +12,7 @@ Name:           loolwsd%{name_suffix}
 Name:           loolwsd
 %endif
 Version:        @PACKAGE_VERSION@
-Release:        2%{?dist}
+Release:        3%{?dist}
 Vendor:         %{vendor}
 Summary:        LibreOffice Online WebSocket Daemon
 License:        MPL
commit 71f90fc13221bc4d484bf49e024ad05c790ec403
Author:     Michael Meeks <michael.meeks at collabora.com>
AuthorDate: Thu Jan 9 16:23:32 2020 +0000
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:10:31 2020 +0100

    mobile: stop disabled menu items from breaking hamburger menu.
    
    Change-Id: I0e98dbd853c0120e325f9558b7285392de615a84

diff --git a/loleaflet/src/control/Control.Menubar.js b/loleaflet/src/control/Control.Menubar.js
index a29412c51..fe1627a43 100644
--- a/loleaflet/src/control/Control.Menubar.js
+++ b/loleaflet/src/control/Control.Menubar.js
@@ -1471,7 +1471,9 @@ L.Control.Menubar = L.Control.extend({
 
 		for (var i = 0; i < items.length; i++) {
 			if (this._checkItemVisibility(items[i]) === true) {
-				topMenu.children.push(this._generateMenuStructure(items[i], docType, false));
+				var item = this._generateMenuStructure(items[i], docType, false);
+				if (item)
+					topMenu.children.push(item);
 			}
 		}
 		return topMenu;
commit 951aa8a835fd98da7ceb1cec1251ff02640a3202
Author:     Tor Lillqvist <tml at collabora.com>
AuthorDate: Thu Jan 9 14:28:31 2020 +0200
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:10:24 2020 +0100

    tdf#129327: Ignore all keydown events at the outermost level for iOS
    
    Possibly a good idea for Android, too? See bug report for description
    of what this fixes.
    
    Change-Id: I6b70f431ced09044756c2edc3fcc2542428b62e1
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/86484
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
    Reviewed-by: Tor Lillqvist <tml at collabora.com>

diff --git a/loleaflet/html/loleaflet.html.m4 b/loleaflet/html/loleaflet.html.m4
index 7639bf908..ad6d90f4b 100644
--- a/loleaflet/html/loleaflet.html.m4
+++ b/loleaflet/html/loleaflet.html.m4
@@ -65,6 +65,10 @@ ifelse(ANDROIDAPP,[true],
   [   window.ThisIsTheAndroidApp = false;]
 )
 
+if (window.ThisIsTheiOSApp) {
+  window.addEventListener("keydown", function(e) { e.preventDefault(); });
+}
+
 var Base64ToArrayBuffer = function(base64Str) {
   var binStr = atob(base64Str);
   var ab = new ArrayBuffer(binStr.length);
commit 1f4625e5a6c8754012959ff3693dd12e07803d4e
Author:     Henry Castro <hcastro at collabora.com>
AuthorDate: Wed Jan 8 11:11:46 2020 -0400
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:10:12 2020 +0100

    loleaflet: prevent auto focus when the page is loaded
    
    It has been added an attribute 'disabled' when permission is
    'readonly', otherwise it is removed
    
    Change-Id: I64a4cf9a7a754d66862e55805202358b9f83caf8
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/86442
    Reviewed-by: Henry Castro <hcastro at collabora.com>
    Tested-by: Henry Castro <hcastro at collabora.com>

diff --git a/loleaflet/src/layer/marker/TextInput.js b/loleaflet/src/layer/marker/TextInput.js
index ec431c267..4a0914b4f 100644
--- a/loleaflet/src/layer/marker/TextInput.js
+++ b/loleaflet/src/layer/marker/TextInput.js
@@ -64,6 +64,7 @@ L.TextInput = L.Layer.extend({
 
 		this._emptyArea();
 
+		this._map.on('updatepermission', this._onPermission, this);
 		L.DomEvent.on(this._textArea, 'focus blur', this._onFocusBlur, this);
 
 		// Do not wait for a 'focus' event to attach events if the
@@ -80,13 +81,22 @@ L.TextInput = L.Layer.extend({
 		if (this._container) {
 			this.getPane().removeChild(this._container);
 		}
-		L.DomEvent.off(this._textArea, 'focus blur', this._onFocusBlur, this);
 
+		this._map.off('updatepermission', this._onPermission, this);
+		L.DomEvent.off(this._textArea, 'focus blur', this._onFocusBlur, this);
 		L.DomEvent.off(this._map.getContainer(), 'mousedown touchstart', this._abortComposition, this);
 
 		this._map.removeLayer(this._cursorHandler);
 	},
 
+	_onPermission: function(e) {
+		if (e.perm === 'edit') {
+			this._textArea.removeAttribute('disabled');
+		} else {
+			this._textArea.setAttribute('disabled', true);
+		}
+	},
+
 	_onFocusBlur: function(ev) {
 		this._fancyLog(ev.type, '');
 
@@ -191,6 +201,9 @@ L.TextInput = L.Layer.extend({
 		// See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea#attr-wrap
 		this._textArea.setAttribute('wrap', 'off');
 
+		// Prevent autofocus
+		this._textArea.setAttribute('disabled', true);
+
 		this._setupStyles();
 
 		this._emptyArea();
commit 5afec9eb5f8b91b88561d5d5aaa882e7676968f2
Author:     Henry Castro <hcastro at collabora.com>
AuthorDate: Wed Jan 8 11:07:37 2020 -0400
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:10:06 2020 +0100

    loleaflet: encapsulate the function related to map blur
    
    Change-Id: I2d2dab867769e7f9b5497d4bc4834fc097c8d30f
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/86441
    Reviewed-by: Henry Castro <hcastro at collabora.com>
    Tested-by: Henry Castro <hcastro at collabora.com>

diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js
index d0f571564..eab0f9668 100644
--- a/loleaflet/src/map/Map.js
+++ b/loleaflet/src/map/Map.js
@@ -896,6 +896,10 @@ L.Map = L.Evented.extend({
 		this._textInput.focus();
 	},
 
+	blur: function () {
+		this._textInput.blur();
+	},
+
 	hasFocus: function () {
 		return document.activeElement === this._textInput.activeElement();
 	},
diff --git a/loleaflet/src/map/handler/Map.TouchGesture.js b/loleaflet/src/map/handler/Map.TouchGesture.js
index f6f22761e..505ee7feb 100644
--- a/loleaflet/src/map/handler/Map.TouchGesture.js
+++ b/loleaflet/src/map/handler/Map.TouchGesture.js
@@ -324,7 +324,7 @@ L.Map.TouchGesture = L.Handler.extend({
 			docLayer._postMouseEvent('buttonup', mousePos.x, mousePos.y, 1, 1, 0);
 
 			if (this._state === L.Map.TouchGesture.MARKER || (this._state === L.Map.TouchGesture.GRAPHIC && !docLayer._isCursorVisible)) {
-				this._map._textInput.blur();
+				this._map.blur();
 			} else if (!this._map.hasFocus()) {
 				this._map.focus();
 			}
commit 67c65a77a72191535fd852cc60aa915182143a02
Author:     Henry Castro <hcastro at collabora.com>
AuthorDate: Wed Jan 8 11:02:53 2020 -0400
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:10:01 2020 +0100

    loleaflet: simplify the function related to map focus
    
    Change-Id: I0849ad3a5abe50aaba3b993f6851c113b1bb27cb
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/86440
    Reviewed-by: Henry Castro <hcastro at collabora.com>
    Tested-by: Henry Castro <hcastro at collabora.com>

diff --git a/loleaflet/src/layer/marker/TextInput.js b/loleaflet/src/layer/marker/TextInput.js
index 22b904632..ec431c267 100644
--- a/loleaflet/src/layer/marker/TextInput.js
+++ b/loleaflet/src/layer/marker/TextInput.js
@@ -118,6 +118,9 @@ L.TextInput = L.Layer.extend({
 
 	// Focus the textarea/contenteditable
 	focus: function() {
+		// Clicking or otherwise focusing the map should focus on the clipboard
+		// container in order for the user to input text (and on-screen keyboards
+		// to pop-up), unless the document is read only.
 		if (this._map._permission !== 'edit') {
 			console.log('EPIC HORRORS HERE');
 			return;
diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js
index ef557f6c1..d0f571564 100644
--- a/loleaflet/src/map/Map.js
+++ b/loleaflet/src/map/Map.js
@@ -893,12 +893,7 @@ L.Map = L.Evented.extend({
 	},
 
 	focus: function () {
-		// Clicking or otherwise focusing the map should focus on the clipboard
-		// container in order for the user to input text (and on-screen keyboards
-		// to pop-up), unless the document is read only.
-		if (this._permission === 'edit') {
-			this._textInput.focus();
-		}
+		this._textInput.focus();
 	},
 
 	hasFocus: function () {
commit c26abc7fd90264e46ed21f492d641235694022e0
Author:     Henry Castro <hcastro at collabora.com>
AuthorDate: Tue Jan 7 14:04:14 2020 -0400
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:09:57 2020 +0100

    loleaflet: simplify "prevent default 'contextmenu' action"
    
    The mobile and desktop prevents default 'contextmenu' action
    
    Change-Id: I89171c955c153b2fceaad92970e2eaf039cb8527
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/86373
    Reviewed-by: Henry Castro <hcastro at collabora.com>
    Tested-by: Henry Castro <hcastro at collabora.com>

diff --git a/loleaflet/js/global.js b/loleaflet/js/global.js
index b3b619f8c..8445ecb4f 100644
--- a/loleaflet/js/global.js
+++ b/loleaflet/js/global.js
@@ -1,6 +1,14 @@
 /* -*- js-indent-level: 8 -*- */
 (function (global) {
 
+	document.addEventListener('contextmenu', function(e) {
+		if (e.preventDefault) {
+			e.preventDefault();
+		} else {
+			e.returnValue = false;
+		}
+	}, false);
+
 	global.fakeWebSocketCounter = 0;
 	global.FakeWebSocket = function () {
 		this.binaryType = 'arraybuffer';
diff --git a/loleaflet/src/main.js b/loleaflet/src/main.js
index fb7890b36..ba500fd09 100644
--- a/loleaflet/src/main.js
+++ b/loleaflet/src/main.js
@@ -91,10 +91,6 @@ window.addEventListener('beforeunload', function () {
 	}
 });
 
-if (!L.Browser.mobile) {
-	L.DomEvent.on(document, 'contextmenu', L.DomEvent.preventDefault);
-}
-
 window.bundlejsLoaded = true;
 
 }(window));
diff --git a/loleaflet/src/map/handler/Map.TouchGesture.js b/loleaflet/src/map/handler/Map.TouchGesture.js
index 66c333791..f6f22761e 100644
--- a/loleaflet/src/map/handler/Map.TouchGesture.js
+++ b/loleaflet/src/map/handler/Map.TouchGesture.js
@@ -62,7 +62,7 @@ L.Map.TouchGesture = L.Handler.extend({
 			}
 
 			L.DomEvent.on(this._map._mapPane, 'mousedown mousemove mouseup', L.DomEvent.preventDefault);
-			L.DomEvent.on(document, 'contextmenu touchmove', L.DomEvent.preventDefault);
+			L.DomEvent.on(document, 'touchmove', L.DomEvent.preventDefault);
 		}
 
 		for (var events in L.Draggable.MOVE) {
commit 868cec8a4b946ced6561afeb46a083b347c9c9c4
Author:     mert <mert.tumer at collabora.com>
AuthorDate: Mon Dec 23 13:09:17 2019 +0300
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:09:52 2020 +0100

    Fix insertshapes display problem
    
    Insert Shapes dialog opens on the right
    side of the screen and can be too
    narrow on desktop
    
    Change-Id: I8f9fe8f00989b504d05282fcd5332bf1a1b94ad0
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/85747
    Reviewed-by: Tor Lillqvist <tml at collabora.com>
    Tested-by: Tor Lillqvist <tml at collabora.com>

diff --git a/loleaflet/css/toolbar.css b/loleaflet/css/toolbar.css
index 95d7eae00..47ad32e4e 100644
--- a/loleaflet/css/toolbar.css
+++ b/loleaflet/css/toolbar.css
@@ -764,6 +764,7 @@ button.leaflet-control-search-next
 		position: relative;
 		padding: 2px;
 		display: inline-block;
+		min-width: 350px;
 		width:  100%;
 		height: 100%;
 }
commit b3933410616b4481ba95a58739c1747493179bfb
Author:     Tor Lillqvist <tml at collabora.com>
AuthorDate: Wed Jan 8 16:26:32 2020 +0200
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:09:47 2020 +0100

    Revert "tdf#129374: Make the overlay wider on iOS if it seems necessary"
    
    There is a better fix coming.
    
    This reverts commit ce7ad16087701adf9803f2dfd3b2da0eb2718668.

diff --git a/loleaflet/js/w2ui-1.5.rc1.js b/loleaflet/js/w2ui-1.5.rc1.js
index a9e48c1b2..687a00202 100644
--- a/loleaflet/js/w2ui-1.5.rc1.js
+++ b/loleaflet/js/w2ui-1.5.rc1.js
@@ -2388,13 +2388,6 @@ w2utils.event = {
                     Y = (offset.top + w2utils.getSize(obj, 'height') + options.top + 7);
                     offsetTop = offset.top;
                 }
-
-                // tdf#129374 make the overlay wider so that it is more likely all we want to put in it will fit. Yes, this
-                // is just horrible heuristics. The sane thing would be if this w2ui code could itself make sure that the
-                // overlay thing grows in width if necessary as stuff is added to it so that they all show up.
-                if (window.ThisIsTheiOSApp && X > window.innerWidth - 300)
-		    X = window.innerWidth - 300;
-
                 div1.css({
                     left        :  X + 'px',
                     top         :  Y + 'px',
commit 31e31b8c1daab4855aca84a83ef2b3b19b1030f0
Author:     Michael Meeks <michael.meeks at collabora.com>
AuthorDate: Wed Jan 8 11:50:19 2020 +0000
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:09:39 2020 +0100

    admin: Kill menu uses href="#" so disable vex auto-close on popstate
    
    Change-Id: Icc94fc0dae70718700b709b81785162254af2ed4

diff --git a/loleaflet/admin/src/AdminSocketOverview.js b/loleaflet/admin/src/AdminSocketOverview.js
index 9c61089cc..029b36997 100644
--- a/loleaflet/admin/src/AdminSocketOverview.js
+++ b/loleaflet/admin/src/AdminSocketOverview.js
@@ -82,6 +82,9 @@ var AdminSocketOverview = AdminSocketBase.extend({
 			});
 		}, 1000);
 
+		// Dialog uses <a href='#' - which triggers popstate
+		vex.defaultOptions.closeAllOnPopState = false;
+
 		// Allow table rows to have a context menu for terminating sessions
 		$('body').on('contextmenu', '#docview tr', function(ev) {
 			$('#rowContextMenu').css({
commit a3c9ff8398347742e212de8e5860d42349d04809
Author:     Pedro Pinto Silva <pedro.silva at collabora.com>
AuthorDate: Wed Jan 8 11:04:56 2020 +0100
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:09:31 2020 +0100

    Mobile: Insert: Fields: Add icons for the respective uno commands:
    - added in: 86371: mobile: add insert fields for calc & impress.
    
    Change-Id: I5ec7424b3149eca431cf5f081397ae4e5979664f
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/86408
    Reviewed-by: Pedro Pinto da Silva <pedro.silva at collabora.com>
    Tested-by: Pedro Pinto da Silva <pedro.silva at collabora.com>

diff --git a/loleaflet/images/lc_insertcurrentdate.svg b/loleaflet/images/lc_insertcurrentdate.svg
new file mode 100644
index 000000000..c0091b903
--- /dev/null
+++ b/loleaflet/images/lc_insertcurrentdate.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m3 6h18v14h-18z" fill="#fff"/><path d="m2 3v1 2 14c0 .554.446 1 1 1h18c .554 0 1-.446 1-1v-14-2-1h-1-18zm1 3h18v14h-10.613281-1.5625002-5.8242188z" fill="#808080"/><path d="m8 7v1.4628906c0 .1325301.049873.251106.1503906.3535156.1005174.096386.2137221.1445313.3378906.1445313h5.3378908c-.135994.1506024-.256851.3098409-.363281.4785156-.106431.1686747-.21003.3519861-.310547.5507813l-4.152344 9.0097656h1.386719c.301552 0 .537513-.07222.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="#808080"/><path d="m2 3h20v3h-20z" fill="#4d82b8"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/lc_insertcurrenttime.svg b/loleaflet/images/lc_insertcurrenttime.svg
new file mode 100644
index 000000000..451441911
--- /dev/null
+++ b/loleaflet/images/lc_insertcurrenttime.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" fill="#fff" r="9"/><g fill="#808080"><path d="m12 2a10 10 0 0 0 -10 10 10 10 0 0 0 10 10 10 10 0 0 0 10-10 10 10 0 0 0 -10-10zm0 1a9 9 0 0 1 9 9 9 9 0 0 1 -9 9 9 9 0 0 1 -9-9 9 9 0 0 1 9-9z"/><rect height="9" ry=".5" width="1" x="11" y="4"/><rect height="1" ry=".5" width="8" x="11" y="12"/></g></svg>
diff --git a/loleaflet/images/lc_insertdatefieldfix.svg b/loleaflet/images/lc_insertdatefieldfix.svg
new file mode 100644
index 000000000..c0091b903
--- /dev/null
+++ b/loleaflet/images/lc_insertdatefieldfix.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m3 6h18v14h-18z" fill="#fff"/><path d="m2 3v1 2 14c0 .554.446 1 1 1h18c .554 0 1-.446 1-1v-14-2-1h-1-18zm1 3h18v14h-10.613281-1.5625002-5.8242188z" fill="#808080"/><path d="m8 7v1.4628906c0 .1325301.049873.251106.1503906.3535156.1005174.096386.2137221.1445313.3378906.1445313h5.3378908c-.135994.1506024-.256851.3098409-.363281.4785156-.106431.1686747-.21003.3519861-.310547.5507813l-4.152344 9.0097656h1.386719c.301552 0 .537513-.07222.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="#808080"/><path d="m2 3h20v3h-20z" fill="#4d82b8"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/lc_insertdatefieldvar.svg b/loleaflet/images/lc_insertdatefieldvar.svg
new file mode 100644
index 000000000..c0091b903
--- /dev/null
+++ b/loleaflet/images/lc_insertdatefieldvar.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m3 6h18v14h-18z" fill="#fff"/><path d="m2 3v1 2 14c0 .554.446 1 1 1h18c .554 0 1-.446 1-1v-14-2-1h-1-18zm1 3h18v14h-10.613281-1.5625002-5.8242188z" fill="#808080"/><path d="m8 7v1.4628906c0 .1325301.049873.251106.1503906.3535156.1005174.096386.2137221.1445313.3378906.1445313h5.3378908c-.135994.1506024-.256851.3098409-.363281.4785156-.106431.1686747-.21003.3519861-.310547.5507813l-4.152344 9.0097656h1.386719c.301552 0 .537513-.07222.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="#808080"/><path d="m2 3h20v3h-20z" fill="#4d82b8"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/lc_insertfilefield.svg b/loleaflet/images/lc_insertfilefield.svg
new file mode 100644
index 000000000..81db9a080
--- /dev/null
+++ b/loleaflet/images/lc_insertfilefield.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><g fill-rule="evenodd"><path d="m15 4c-.265199.0000511-.519519.1054326-.707031.2929688l-3.707031 2.7070312h-8.585938c-.5522619.0000552-.9999448.4477381-1 1v13h1 18 1l2.702146-10.007153c.297854-.992847.297854-.992847-.744519-.992847h-1.957627v-5c-.000055-.5522619-.447738-.9999448-1-1zm0 1h5v5h-14.9788136c-1.0211864 0-1.0211864 0-1.2796742.990786l-1.7415122 6.67523v-9.666016h9z" fill="#eac282"/><path d="m15 5-4 3h-9v9.666016l1.7421875-6.675782c.2584878-.9907856.2581105-.990234 1.2792969-.990234h14.9785156v-5z" fill="#fff"/></g></svg>
\ No newline at end of file
diff --git a/loleaflet/images/lc_insertslidefield.svg b/loleaflet/images/lc_insertslidefield.svg
new file mode 100644
index 000000000..a2d6d0003
--- /dev/null
+++ b/loleaflet/images/lc_insertslidefield.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m5 4v17h6.283203c-.175464-.296519-.283203-.636031-.283203-1 0-1.090703.909297-2 2-2v-1c-1.090703 0-2-.909297-2-2s.909297-2 2-2c0-1.090703.909297-2 2-2s2 .909297 2 2h1c0-.726734.407943-1.366449 1-1.716797v-3.5546874l-4-3.7285156zm12 13v1h1v-1z" fill="#fff"/><path d="m5 3c-.554 0-1 .446-1 1v17c0 .554.446 1 1 1h8c-.726734 0-1.366449-.407943-1.716797-1h-6.283203v-17h9v4c0 .554.446 1 1 1h4v2.283203c.296519-.175464.636031-.283203 1-.283203v-2.75-.2089844c0-.4506799.098038-.4254121-.605469-1.0664062l-3.30664-3.2382813c-.709525-.7368575-.710169-.7363281-1.09375-.7363281h-.332032-.662109z" fill="#808080"/><path d="m15 8h4l-4-4z" fill="#fff" fill-rule="evenodd"/><path d="m15 12c-.554 0-1 .446-1 1v1h-1c-.554 0-1 .446-1 1s.446 1 1 1h1v3h-1c-.554 0-1 .446-1 1s.446 1 1 1h1v1c0 .554.446 1 1 1s1-.446 1-1v-1h3v1c0 .554.446 1 1 1s1-.446 1-1v-1h1c.554 0 1-.446 1-1s-.446-1-1-1h-1v-3h1c.554 0 1-.446 1-1s-.446-1-1-1h-1v-1c0-.554-.446-1-
 1-1s-1 .446-1 1v1h-3v-1c0-.554-.446-1-1-1zm1 4h3v3h-3z" fill="#4d82b8"/></svg>
\ No newline at end of file
diff --git a/loleaflet/images/lc_insertslidesfield.svg b/loleaflet/images/lc_insertslidesfield.svg
new file mode 100644
index 000000000..58ac27e81
--- /dev/null
+++ b/loleaflet/images/lc_insertslidesfield.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m13 4c0 1.0907028-.909297 2-2 2v1c1.090703 0 2 .9092972 2 2 0 1.090703-.909297 2-2 2 0 1.090703-.909297 2-2 2-1.0907028 0-2-.909297-2-2h-1c0 .726734-.4079429 1.366449-1 1.716797v8.283203h6.283203c-.175464-.296519-.283203-.636031-.283203-1 0-1.090703.909297-2 2-2v-1c-1.090703 0-2-.909297-2-2s.909297-2 2-2c0-1.090703.909297-2 2-2s2 .909297 2 2h1c0-.726734.407943-1.366449 1-1.716797v-3.5546874l-4-3.7285156zm-7 2v1h1v-1zm11 11v1h1v-1z" fill="#fff"/><path d="m12.716797 3c.175464.2965194.283203.6360307.283203 1h1v4c0 .554.446 1 1 1h4v2.283203c.296519-.175464.636031-.283203 1-.283203v-2.75-.2089844c0-.4506799.098038-.4254121-.605469-1.0664062l-3.30664-3.2382813c-.709525-.7368575-.710169-.7363281-1.09375-.7363281h-.332032-.662109zm-7.716797 9.716797c-.2965194.175464-.6360307.283203-1 .283203v8c0 .554.446 1 1 1h8c-.726734 0-1.366449-.407943-1.716797-1h-6.283203z" fill="#808080"/><path d="m15 8h4l-4-4z" fill="#fff" fill-rule
 ="evenodd"/><g fill="#4d82b8"><path d="m15 12c-.554 0-1 .446-1 1v1h-1c-.554 0-1 .446-1 1s.446 1 1 1h1v3h-1c-.554 0-1 .446-1 1s.446 1 1 1h1v1c0 .554.446 1 1 1s1-.446 1-1v-1h3v1c0 .554.446 1 1 1s1-.446 1-1v-1h1c.554 0 1-.446 1-1s-.446-1-1-1h-1v-3h1c.554 0 1-.446 1-1s-.446-1-1-1h-1v-1c0-.554-.446-1-1-1s-1 .446-1 1v1h-3v-1c0-.554-.446-1-1-1zm1 4h3v3h-3z"/><path d="m4 1c-.554 0-1 .446-1 1v1h-1c-.554 0-1 .446-1 1s.446 1 1 1h1v3h-1c-.554 0-1 .446-1 1s.446 1 1 1h1v1c0 .554.446 1 1 1s1-.446 1-1v-1h3v1c0 .554.446 1 1 1s1-.446 1-1v-1h1c.554 0 1-.446 1-1s-.446-1-1-1h-1v-3h1c.554 0 1-.446 1-1s-.446-1-1-1h-1v-1c0-.554-.446-1-1-1s-1 .446-1 1v1h-3v-1c0-.554-.446-1-1-1zm1 4h3v3h-3z"/></g></svg>
\ No newline at end of file
diff --git a/loleaflet/images/lc_insertslidetitlefield.svg b/loleaflet/images/lc_insertslidetitlefield.svg
new file mode 100644
index 000000000..4883eca24
--- /dev/null
+++ b/loleaflet/images/lc_insertslidetitlefield.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="#4d82b8"/><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"/><g fill="#fff"><path d="m15 7h4l-4-4z" fill-rule="evenodd"/><rect height="2" ry="1" width="6" x="9" y="10"/><rect height="1" ry=".5" width="10" x="7" y="14"/></g></svg>
\ No newline at end of file
diff --git a/loleaflet/images/lc_inserttimefieldfix.svg b/loleaflet/images/lc_inserttimefieldfix.svg
new file mode 100644
index 000000000..451441911
--- /dev/null
+++ b/loleaflet/images/lc_inserttimefieldfix.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" fill="#fff" r="9"/><g fill="#808080"><path d="m12 2a10 10 0 0 0 -10 10 10 10 0 0 0 10 10 10 10 0 0 0 10-10 10 10 0 0 0 -10-10zm0 1a9 9 0 0 1 9 9 9 9 0 0 1 -9 9 9 9 0 0 1 -9-9 9 9 0 0 1 9-9z"/><rect height="9" ry=".5" width="1" x="11" y="4"/><rect height="1" ry=".5" width="8" x="11" y="12"/></g></svg>
diff --git a/loleaflet/images/lc_inserttimefieldvar.svg b/loleaflet/images/lc_inserttimefieldvar.svg
new file mode 100644
index 000000000..451441911
--- /dev/null
+++ b/loleaflet/images/lc_inserttimefieldvar.svg
@@ -0,0 +1 @@
+<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" fill="#fff" r="9"/><g fill="#808080"><path d="m12 2a10 10 0 0 0 -10 10 10 10 0 0 0 10 10 10 10 0 0 0 10-10 10 10 0 0 0 -10-10zm0 1a9 9 0 0 1 9 9 9 9 0 0 1 -9 9 9 9 0 0 1 -9-9 9 9 0 0 1 9-9z"/><rect height="9" ry=".5" width="1" x="11" y="4"/><rect height="1" ry=".5" width="8" x="11" y="12"/></g></svg>
commit ee9a4bcde596a15fbf50a773ecf6649fca99ef13
Author:     Michael Meeks <michael.meeks at collabora.com>
AuthorDate: Tue Jan 7 18:05:53 2020 +0000
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:09:27 2020 +0100

    Mention the nodev mount flag on failed mknod.
    
    Change-Id: Iafd034149c0c2859a6705f33557d61b0b24a927a
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/86372
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
    Reviewed-by: Michael Meeks <michael.meeks at collabora.com>

diff --git a/kit/Kit.cpp b/kit/Kit.cpp
index f2930d923..e0ce393be 100644
--- a/kit/Kit.cpp
+++ b/kit/Kit.cpp
@@ -2429,14 +2429,14 @@ void lokit_main(
                       S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH,
                       makedev(1, 8)) != 0)
             {
-                LOG_SYS("mknod(" << jailPath.toString() << "/dev/random) failed.");
+                LOG_SYS("mknod(" << jailPath.toString() << "/dev/random) failed. Mount must not use nodev flag.");
             }
 
             if (mknod((jailPath.toString() + "/dev/urandom").c_str(),
                       S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH,
                       makedev(1, 9)) != 0)
             {
-                LOG_SYS("mknod(" << jailPath.toString() << "/dev/urandom) failed.");
+                LOG_SYS("mknod(" << jailPath.toString() << "/dev/random) failed. Mount must not use nodev flag.");
             }
 
             ProcSMapsFile = fopen("/proc/self/smaps", "r");
commit 38fb94e69a9d4e08793bd23de64b00ff1649fc3b
Author:     Michael Meeks <michael.meeks at collabora.com>
AuthorDate: Tue Jan 7 17:19:21 2020 +0000
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:09:21 2020 +0100

    mobile: add insert fields for calc & impress.
    
    Also add option to enable/disable on-line spell-checking to the menus too.
    
    Change-Id: I1ba2a68c7d410041b6710f598a7c7fc60511ffee
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/86371
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
    Reviewed-by: Michael Meeks <michael.meeks at collabora.com>

diff --git a/loleaflet/src/control/Control.Menubar.js b/loleaflet/src/control/Control.Menubar.js
index 55dd7b409..a29412c51 100644
--- a/loleaflet/src/control/Control.Menubar.js
+++ b/loleaflet/src/control/Control.Menubar.js
@@ -496,6 +496,7 @@ L.Control.Menubar = L.Control.extend({
 			]},
 			{name: _UNO('.uno:ViewMenu', 'text'), id: 'view', type: 'menu', menu: [
 				{uno: '.uno:ControlCodes'},
+				{uno: '.uno:SpellOnline'},
 				{name: _UNO('.uno:ShowResolvedAnnotations', 'text'), id: 'showresolved', type: 'action'},
 			]
 			},
@@ -542,6 +543,7 @@ L.Control.Menubar = L.Control.extend({
 				{name: _UNO('.uno:DeleteSlide', 'presentation'), id: 'deletepage', type: 'action'}]
 			},
 			{name: _UNO('.uno:FullScreen', 'presentation'), id: 'fullscreen', type: 'action', mobileapp: false},
+			{uno: '.uno:SpellOnline'},
 			{name: _('Fullscreen presentation'), id: 'fullscreen-presentation', type: 'action'},
 			{name: _('About'), id: 'about', type: 'action'},
 		],
@@ -603,6 +605,7 @@ L.Control.Menubar = L.Control.extend({
 					{uno: '.uno:HideDetail'},
 					{uno: '.uno:ShowDetail'}]}
 			]},
+			{uno: '.uno:SpellOnline'},
 			{name: _UNO('.uno:FullScreen', 'spreadsheet'), id: 'fullscreen', type: 'action', mobileapp: false},
 			{name: _('About'), id: 'about', type: 'action'},
 		],
@@ -657,6 +660,9 @@ L.Control.Menubar = L.Control.extend({
 					{type: 'separator'},
 					{name: _UNO('.uno:HyperlinkDialog'), id: 'inserthyperlink', type: 'action'},
 					{name: _UNO('.uno:ShapesMenu'), id: 'insertshape', type: 'action'},
+					{uno: '.uno:InsertCurrentDate'},
+					{uno: '.uno:InsertCurrentTime'},
+					// other fields need EditEngine context & can't be disabled in the menu.
 				]
 			},
 			presentation : {
@@ -667,6 +673,17 @@ L.Control.Menubar = L.Control.extend({
 					{name: _UNO('.uno:TableMenu'), id: 'inserttable', type: 'action'},
 					{name: _UNO('.uno:HyperlinkDialog'), id: 'inserthyperlink', type: 'action'},
 					{name: _UNO('.uno:ShapesMenu'), id: 'insertshape', type: 'action'},
+					{name: _UNO('.uno:InsertField', 'text'), type: 'menu', menu: [
+						{uno: '.uno:InsertDateFieldFix'},
+						{uno: '.uno:InsertDateFieldVar'},
+						{uno: '.uno:InsertTimeFieldFix'},
+						{uno: '.uno:InsertTimeFieldVar'},
+						{type: 'separator'},
+						{uno: '.uno:InsertSlideField'},
+						{uno: '.uno:InsertSlideTitleField'},
+						{uno: '.uno:InsertSlidesField'},
+						{uno: '.uno:InsertFileField'},
+					]},
 				]
 			}
 		},
diff --git a/loleaflet/src/unocommands.js b/loleaflet/src/unocommands.js
index a66de830f..37ca25205 100644
--- a/loleaflet/src/unocommands.js
+++ b/loleaflet/src/unocommands.js
@@ -144,10 +144,18 @@ var unoCommandsArray = {
 	InsertColumnsAfter:{presentation:{menu:_('Insert Column After'),},spreadsheet:{context:_('Insert Columns ~After'),menu:_('Columns ~After'),},text:{menu:_('Columns ~After'),},},
 	InsertColumnsBefore:{presentation:{menu:_('Insert Column Before'),},spreadsheet:{context:_('Insert Columns ~Before'),menu:_('Columns ~Before'),},text:{menu:_('Columns ~Before'),},},
 	InsertColumnsMenu:{spreadsheet:{menu:_('Insert Co~lumns'),},},
+	InsertCurrentDate:{spreadsheet:{menu:_('~Date'),},},
+	InsertCurrentTime:{spreadsheet:{menu:_('~Time'),},},
 	InsertDataLabel:{global:{menu:_('Insert Single Data Label'),},},
 	InsertDateField:{text:{menu:_('~Date'),},},
+	InsertDateFieldFix:{presentation:{menu:_('~Date (fixed)'),},},
+	InsertDateFieldVar:{presentation:{menu:_('Dat~e (variable)'),},},
 	InsertEndnote:{text:{menu:_('~Endnote'),},},
 	InsertField:{text:{menu:_('~More Fields...'),},},
+	InsertFieldDateVariable:{spreadsheet:{menu:_('Date'),},},
+	InsertFieldDocTitle:{spreadsheet:{menu:_('Document Title'),},},
+	InsertFieldSheet:{spreadsheet:{menu:_('Sheet Name'),},},
+	InsertFileField:{presentation:{menu:_('~File Name'),},},
 	InsertFootnote:{text:{menu:_('~Footnote'),},},
 	InsertGraphic:{global:{context:_('Insert Image...'),menu:_('~Image...'),},},
 	InsertHardHyphen:{global:{menu:_('Non-br~eaking hyphen'),},},
@@ -175,9 +183,14 @@ var unoCommandsArray = {
 	InsertRowsMenu:{spreadsheet:{menu:_('Insert ~Rows'),},},
 	InsertSection:{text:{menu:_('Se~ction...'),},},
 	InsertSlide:{presentation:{menu:_('~New Slide'),},},
+	InsertSlideField:{presentation:{menu:_('~Slide Number'),},},
+	InsertSlideTitleField:{presentation:{menu:_('Slide Tit~le'),},},
+	InsertSlidesField:{presentation:{menu:_('Slide ~Count'),},},
 	InsertSoftHyphen:{global:{menu:_('S~oft hyphen'),},},
 	InsertSymbol:{global:{context:_('Insert Special Character'),menu:_('S~pecial Character...'),},},
 	InsertTimeField:{global:{menu:_('Time Field'),},text:{menu:_('~Time'),},},
+	InsertTimeFieldFix:{presentation:{menu:_('~Time (fixed)'),},},
+	InsertTimeFieldVar:{presentation:{menu:_('T~ime (variable)'),},},
 	InsertTitleField:{text:{menu:_('T~itle'),},},
 	InsertTitles:{global:{menu:_('Insert Titles...'),},},
 	InsertTopicField:{text:{menu:_('~Subject'),},},
commit 3a91d7d8643570a7ec7bb8e69c12a9349a273850
Author:     Pedro Pinto Silva <pedro.silva at collabora.com>
AuthorDate: Tue Jan 7 17:27:21 2020 +0100
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:09:10 2020 +0100

    Mobile: w2ui scroll elements:
    - Enable and adjust elements when on mobile so they are visible but discreet (without covering icons)
    - Make them not clickable when on mobile (thus avoiding unwanted scrolled due to users mistaps
    - Make their parent aware of the ongoing scrolling and call w2ui resize on it (thus making the left and right indicator showing and hiding as we please)
    - Test and adjust so this changes do affect affect the click listening on desktop etc
    
    Change-Id: Ic35dadb71e7fd6ae3ff2fad3e52d5219e7520c55
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/86364
    Reviewed-by: Pedro Pinto da Silva <pedro.silva at collabora.com>
    Tested-by: Pedro Pinto da Silva <pedro.silva at collabora.com>

diff --git a/loleaflet/css/toolbar-mobile.css b/loleaflet/css/toolbar-mobile.css
index 3bfcb6a79..8d11b4971 100644
--- a/loleaflet/css/toolbar-mobile.css
+++ b/loleaflet/css/toolbar-mobile.css
@@ -36,9 +36,20 @@
 	}
 	#toolbar-down > .w2ui-scroll-wrapper::-webkit-scrollbar { /*webkit only*/
 		display: none;
-}
-	.w2ui-scroll-right,.w2ui-scroll-left{
-		display: none !important;
+	}
+	#toolbar-down .w2ui-scroll-left, #toolbar-down .w2ui-scroll-right{
+		background: linear-gradient(to left, #fff0 50%, #0b87e730 95%, #0a77cc52 100%);
+		height: 100%;
+		top: 0%;
+		box-shadow: none;
+	}
+	#toolbar-down .w2ui-scroll-right{
+		right: 0;
+		-webkit-transform: rotate(180deg);
+		-moz-transform: rotate(180deg);
+		-ms-transform: rotate(180deg);
+		-o-transform: rotate(180deg);
+		transform: rotate(180deg);
 	}
 	#addressInput{
 		width: 60px !important;
diff --git a/loleaflet/js/w2ui-1.5.rc1.js b/loleaflet/js/w2ui-1.5.rc1.js
index 8d6562a6e..a9e48c1b2 100644
--- a/loleaflet/js/w2ui-1.5.rc1.js
+++ b/loleaflet/js/w2ui-1.5.rc1.js
@@ -13700,7 +13700,7 @@ var w2prompt = function (label, title, callBack) {
             }
             if (!this.box) return;
             // render all buttons
-            var html = '<div class="w2ui-scroll-wrapper" onmousedown="var el=w2ui[\''+ this.name +'\']; if (el) el.resize();">'+
+            var html = '<div class="w2ui-scroll-wrapper" onmousedown="var el=w2ui[\''+ this.name +'\']; if (el) el.resize();" onscroll="var el=w2ui[\'editbar\']; if (el) el.resize();">'+
                        '<table cellspacing="0" cellpadding="0" width="100%"><tbody>'+
                        '<tr>';
             for (var i = 0; i < this.items.length; i++) {
@@ -13718,8 +13718,8 @@ var w2prompt = function (label, title, callBack) {
             html += '<td width="100%" id="tb_'+ this.name +'_right" align="right">'+ this.right +'</td>';
             html += '</tr>'+
                     '</tbody></table></div>'+
-                    '<div class="w2ui-scroll-left" onmousedown="event.preventDefault()" onclick="var el=w2ui[\''+ this.name +'\']; if (el) el.scroll(\'left\');"></div>'+
-                    '<div class="w2ui-scroll-right" onmousedown="event.preventDefault()" onclick="var el=w2ui[\''+ this.name +'\']; if (el) el.scroll(\'right\');"></div>';
+                    '<div class="w2ui-scroll-left" onmousedown="event.preventDefault()" onclick="if($(this).closest(\'#toolbar-up\').length>0 || $(\'#toolbar-down\').width() > 768){var el=w2ui[\''+ this.name +'\']; if (el) el.scroll(\'left\');}"></div>'+
+                    '<div class="w2ui-scroll-right" onmousedown="event.preventDefault()" onclick="if($(this).closest(\'#toolbar-up\').length>0 || $(\'#toolbar-down\').width() > 768){var el=w2ui[\''+ this.name +'\']; if (el) el.scroll(\'right\');}"></div>';
             $(this.box)
                 .attr('name', this.name)
                 .addClass('w2ui-reset w2ui-toolbar')
commit e4bf0d3d9d64d913c57d57216420ea1667b2551e
Author:     Ashod Nakashian <ashod.nakashian at collabora.co.uk>
AuthorDate: Tue Dec 17 09:41:34 2019 -0500
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:08:51 2020 +0100

    wsd: whitespace
    
    Change-Id: Id8185dab66f95676be2db8908d0f12c5284174fb
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/86321
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
    Reviewed-by: Jan Holesovsky <kendy at collabora.com>

diff --git a/wsd/Storage.cpp b/wsd/Storage.cpp
index 51c6969f7..e1efa864c 100644
--- a/wsd/Storage.cpp
+++ b/wsd/Storage.cpp
@@ -642,7 +642,7 @@ std::unique_ptr<WopiStorage::WOPIFileInfo> WopiStorage::getWOPIFileInfo(const Au
                 object->remove("BaseFileName");
                 object->remove("TemplateSaveAs");
                 object->remove("TemplateSource");
-                 object->remove("OwnerId");
+                object->remove("OwnerId");
                 object->remove("UserId");
                 object->remove("UserFriendlyName");
             }
commit ed6ddd001f3e1e5ebaeb8db4a247ede32d497fdf
Author:     Tor Lillqvist <tml at collabora.com>
AuthorDate: Tue Jan 7 11:47:47 2020 +0200
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:08:46 2020 +0100

    tdf#129374: Make the overlay wider on iOS if it seems necessary
    
    Horrible hack, but works for the specific case described in the bug at
    least.
    
    Change-Id: I55150d84dc892ece69540fdc0d06bc277891c1fa
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/86328
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
    Reviewed-by: Tor Lillqvist <tml at collabora.com>

diff --git a/loleaflet/js/w2ui-1.5.rc1.js b/loleaflet/js/w2ui-1.5.rc1.js
index fb5572b75..8d6562a6e 100644
--- a/loleaflet/js/w2ui-1.5.rc1.js
+++ b/loleaflet/js/w2ui-1.5.rc1.js
@@ -2388,6 +2388,13 @@ w2utils.event = {
                     Y = (offset.top + w2utils.getSize(obj, 'height') + options.top + 7);
                     offsetTop = offset.top;
                 }
+
+                // tdf#129374 make the overlay wider so that it is more likely all we want to put in it will fit. Yes, this
+                // is just horrible heuristics. The sane thing would be if this w2ui code could itself make sure that the
+                // overlay thing grows in width if necessary as stuff is added to it so that they all show up.
+                if (window.ThisIsTheiOSApp && X > window.innerWidth - 300)
+		    X = window.innerWidth - 300;
+
                 div1.css({
                     left        :  X + 'px',
                     top         :  Y + 'px',
commit 850959b77875044e38202dd639bb0ecf603fd1f1
Author:     Ashod Nakashian <ashod.nakashian at collabora.co.uk>
AuthorDate: Mon Jan 6 17:52:57 2020 -0500
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:08:42 2020 +0100

    wsd: handle rectangle=undefined gracefully
    
    Change-Id: Ib9058956143aae8151c5e76fddff5dea313ff5e7
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/86323
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
    Reviewed-by: Michael Meeks <michael.meeks at collabora.com>

diff --git a/kit/ChildSession.cpp b/kit/ChildSession.cpp
index afb052be9..58b420eaf 100644
--- a/kit/ChildSession.cpp
+++ b/kit/ChildSession.cpp
@@ -1509,25 +1509,30 @@ bool ChildSession::renderWindow(const char* /*buffer*/, int /*length*/, const st
     int bufferWidth = 800, bufferHeight = 600;
     double dpiScale = 1.0;
     std::string paintRectangle;
-    if (tokens.size() > 2 && getTokenString(tokens[2], "rectangle", paintRectangle))
+    if (tokens.size() > 2 && getTokenString(tokens[2], "rectangle", paintRectangle)
+        && paintRectangle != "undefined")
     {
-        const std::vector<std::string> rectParts = LOOLProtocol::tokenize(paintRectangle.c_str(), paintRectangle.length(), ',');
-        startX = std::atoi(rectParts[0].c_str());
-        startY = std::atoi(rectParts[1].c_str());
-        bufferWidth = std::atoi(rectParts[2].c_str());
-        bufferHeight = std::atoi(rectParts[3].c_str());
-
-        std::string dpiScaleString;
-        if (tokens.size() > 3 && getTokenString(tokens[3], "dpiscale", dpiScaleString))
+        const std::vector<std::string> rectParts
+            = LOOLProtocol::tokenize(paintRectangle.c_str(), paintRectangle.length(), ',');
+        if (rectParts.size() == 4)
         {
-            dpiScale = std::stod(dpiScaleString);
-            if (dpiScale < 0.001)
-                dpiScale = 1.0;
+            startX = std::atoi(rectParts[0].c_str());
+            startY = std::atoi(rectParts[1].c_str());
+            bufferWidth = std::atoi(rectParts[2].c_str());
+            bufferHeight = std::atoi(rectParts[3].c_str());
         }
     }
     else
         LOG_WRN("windowpaint command doesn't specify a rectangle= attribute.");
 
+    std::string dpiScaleString;
+    if (tokens.size() > 3 && getTokenString(tokens[3], "dpiscale", dpiScaleString))
+    {
+        dpiScale = std::stod(dpiScaleString);
+        if (dpiScale < 0.001)
+            dpiScale = 1.0;
+    }
+
     size_t pixmapDataSize = 4 * bufferWidth * bufferHeight;
     std::vector<unsigned char> pixmap(pixmapDataSize);
     int width = bufferWidth, height = bufferHeight;
commit 0e5d335873b11efd78f6fe4947e094b5b6e5cb54
Author:     Ashod Nakashian <ashod.nakashian at collabora.co.uk>
AuthorDate: Mon Jan 6 10:11:31 2020 -0500
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:08:23 2020 +0100

    wsd: prevent sidebar from stealing focus on painting
    
    Change-Id: I3738b95ea230faa46c122e12b7932599f0113a8f
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/86322
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
    Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
    Tested-by: Michael Meeks <michael.meeks at collabora.com>

diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js
index 836151b34..2abdc0246 100644
--- a/loleaflet/src/control/Control.LokDialog.js
+++ b/loleaflet/src/control/Control.LokDialog.js
@@ -1022,9 +1022,9 @@ L.Control.LokDialog = L.Control.extend({
 			// if dialog is hidden, show it
 			if (container)
 				 $(container).parent().show();
+
 			if (parentId in that._dialogs) {
 				// We might have closed the dialog by the time we render.
-				that.focus(parentId);
 				that._dialogs[parentId].isPainting = false;
 			}
 		};
commit 99dddabe8a2b64ee678e53d8f328e19c38c5bb6a
Author:     Henry Castro <hcastro at collabora.com>
AuthorDate: Mon Jan 6 16:22:09 2020 -0400
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:08:17 2020 +0100

    loleaflet: move global variable 'revHistoryEnabled'
    
    There are global variables when the early websocket connection
    is in progress while the bundle JS file is being downloaded,
    so in order to not confuse it is preferable to move to another location.
    
    Change-Id: I9fe144dea6bf36abd16fcf00259acca93674eff9
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/86308
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
    Reviewed-by: Henry Castro <hcastro at collabora.com>

diff --git a/loleaflet/src/control/Control.Menubar.js b/loleaflet/src/control/Control.Menubar.js
index 97b42a14c..55dd7b409 100644
--- a/loleaflet/src/control/Control.Menubar.js
+++ b/loleaflet/src/control/Control.Menubar.js
@@ -3,7 +3,7 @@
 * Control.Menubar
 */
 
-/* global $ _ _UNO vex revHistoryEnabled L */
+/* global $ _ _UNO vex L */
 L.Control.Menubar = L.Control.extend({
 	// TODO: Some mechanism to stop the need to copy duplicate menus (eg. Help)
 	options: {
@@ -1134,7 +1134,7 @@ L.Control.Menubar = L.Control.extend({
 			this._map.showHyperlinkDialog();
 		} else if (id === 'keyboard-shortcuts' || id === 'online-help') {
 			this._map.showHelp(id);
-		} else if (revHistoryEnabled && (id === 'rev-history' || id === 'last-mod')) {
+		} else if (L.Params.revHistoryEnabled && (id === 'rev-history' || id === 'last-mod')) {
 			// if we are being loaded inside an iframe, ask
 			// our host to show revision history mode
 			this._map.fire('postMessage', {msgId: 'rev-history', args: {Deprecated: true}});
@@ -1289,7 +1289,7 @@ L.Control.Menubar = L.Control.extend({
 		}
 
 		if (menuItem.type === 'action') {
-			if ((menuItem.id === 'rev-history' && !revHistoryEnabled) ||
+			if ((menuItem.id === 'rev-history' && !L.Params.revHistoryEnabled) ||
 				(menuItem.id === 'closedocument' && !window.closebutton)) {
 				return false;
 			}
diff --git a/loleaflet/src/core/LOUtil.js b/loleaflet/src/core/LOUtil.js
index 780f83a8f..f540e6da2 100644
--- a/loleaflet/src/core/LOUtil.js
+++ b/loleaflet/src/core/LOUtil.js
@@ -116,4 +116,7 @@ L.LOUtil = {
 L.Params = {
 	/// Shows close button if non-zero value provided
 	closeButtonEnabled: getParameterByName('closebutton'),
+
+	/// Shows revision history file menu option
+	revHistoryEnabled: getParameterByName('revisionhistory'),
 };
diff --git a/loleaflet/src/main.js b/loleaflet/src/main.js
index 45373715e..fb7890b36 100644
--- a/loleaflet/src/main.js
+++ b/loleaflet/src/main.js
@@ -26,8 +26,6 @@ if (reuseCookies !== '') {
 var filePath = getParameterByName('file_path');
 var permission = getParameterByName('permission') || 'edit';
 var timestamp = getParameterByName('timestamp');
-// Shows revision history file menu option
-var revHistoryEnabled = getParameterByName('revisionhistory');
 // Should the document go inactive or not
 var alwaysActive = getParameterByName('alwaysactive');
 // Loleaflet Debug mode
@@ -39,9 +37,6 @@ if (host === '' && !window.ThisIsAMobileApp) {
 	vex.dialog.alert(errorMessages.emptyhosturl);
 }
 
-// loleaflet.js accesses these globals
-// TODO: Get rid of these globals
-global.revHistoryEnabled = revHistoryEnabled;
 var docURL, docParams;
 var isWopi = false;
 if (wopiSrc != '') {
diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js
index 74795391e..ef557f6c1 100644
--- a/loleaflet/src/map/Map.js
+++ b/loleaflet/src/map/Map.js
@@ -24,7 +24,7 @@ function isAnyVexDialogActive() {
 	return res;
 }
 
-/* global vex revHistoryEnabled $ _ */
+/* global vex $ _ */
 L.Map = L.Evented.extend({
 
 	options: {
@@ -387,7 +387,7 @@ L.Map = L.Evented.extend({
 			lastModButton.firstChild.innerHTML = '';
 			lastModButton.firstChild.appendChild(mainSpan);
 
-			if (revHistoryEnabled) {
+			if (L.Params.revHistoryEnabled) {
 				L.DomUtil.setStyle(lastModButton, 'cursor', 'pointer');
 			}
 		}
commit 7560e6621cb4cc79043733f234463cb90d67bced
Author:     Henry Castro <hcastro at collabora.com>
AuthorDate: Mon Jan 6 15:33:12 2020 -0400
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:08:14 2020 +0100

    loleaflet: move global variable 'closeButtonEnabled'
    
    There are global variables when the early websocket connection
    is in progress while the bundle JS file is being downloaded,
    so in order to not confuse it is preferable to move to another location.
    
    Change-Id: I36b3e52c87666c5a805c2286af45ec5b44d79619
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/86296
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
    Reviewed-by: Henry Castro <hcastro at collabora.com>

diff --git a/loleaflet/src/control/Control.Toolbar.js b/loleaflet/src/control/Control.Toolbar.js
index f053d2b55..11614f543 100644
--- a/loleaflet/src/control/Control.Toolbar.js
+++ b/loleaflet/src/control/Control.Toolbar.js
@@ -2599,9 +2599,9 @@ function setupToolbar(e) {
 	map.on('commandstatechanged', onCommandStateChanged);
 	map.on('commandvalues', onCommandValues, this);
 
-	if (!window.closeButtonEnabled) {
+	if (!L.Params.closeButtonEnabled) {
 		$('#closebuttonwrapper').hide();
-	} else if (window.closeButtonEnabled && !L.Browser.mobile) {
+	} else if (L.Params.closeButtonEnabled && !L.Browser.mobile) {
 		$('#closebuttonwrapper').show();
 		$('.closebuttonimage').show();
 	}
diff --git a/loleaflet/src/core/LOUtil.js b/loleaflet/src/core/LOUtil.js
index 95252882d..780f83a8f 100644
--- a/loleaflet/src/core/LOUtil.js
+++ b/loleaflet/src/core/LOUtil.js
@@ -1,4 +1,5 @@
 /* -*- js-indent-level: 8 -*- */
+/* global getParameterByName */
 /*
  * L.LOUtil contains various LO related utility functions used throughout the code
  */
@@ -111,3 +112,8 @@ L.LOUtil = {
 		return res;
 	}
 };
+
+L.Params = {
+	/// Shows close button if non-zero value provided
+	closeButtonEnabled: getParameterByName('closebutton'),
+};
diff --git a/loleaflet/src/main.js b/loleaflet/src/main.js
index f4b7be0c9..45373715e 100644
--- a/loleaflet/src/main.js
+++ b/loleaflet/src/main.js
@@ -26,8 +26,6 @@ if (reuseCookies !== '') {
 var filePath = getParameterByName('file_path');
 var permission = getParameterByName('permission') || 'edit';
 var timestamp = getParameterByName('timestamp');
-// Shows close button if non-zero value provided
-window.closeButtonEnabled = getParameterByName('closebutton');
 // Shows revision history file menu option
 var revHistoryEnabled = getParameterByName('revisionhistory');
 // Should the document go inactive or not
diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js
index 778013556..74795391e 100644
--- a/loleaflet/src/map/Map.js
+++ b/loleaflet/src/map/Map.js
@@ -1676,7 +1676,7 @@ L.Map = L.Evented.extend({
 		if (!this.isMenubarHidden())
 			return;
 		$('.main-nav').show();
-		if (window.closeButtonEnabled && !window.mode.isTablet()) {
+		if (L.Params.closeButtonEnabled && !window.mode.isTablet()) {
 			$('#closebuttonwrapper').show();
 		}
 
@@ -1694,7 +1694,7 @@ L.Map = L.Evented.extend({
 		if (this.isMenubarHidden())
 			return;
 		$('.main-nav').hide();
-		if (window.closeButtonEnabled) {
+		if (L.Params.closeButtonEnabled) {
 			$('#closebuttonwrapper').hide();
 		}
 
commit 643a0b472f8f5b108f59ee9273ef95177208ad26
Author:     Henry Castro <hcastro at collabora.com>
AuthorDate: Mon Jan 6 14:32:46 2020 -0400
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:08:09 2020 +0100

    loleaflet: move global variable "isInternetExplorer" to L.Browser object
    
    To identify Browser, it has a specific section in L.Browser object
    that detects any type of browser, so let us be consistent and move
    the global variable "isInternetExplorer"
    
    Change-Id: I3f744ea21a2e051a0ad4255fcd280af4549b6ef7
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/86292
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
    Reviewed-by: Henry Castro <hcastro at collabora.com>

diff --git a/loleaflet/src/core/Browser.js b/loleaflet/src/core/Browser.js
index 9f6b765e0..c17fc0641 100644
--- a/loleaflet/src/core/Browser.js
+++ b/loleaflet/src/core/Browser.js
@@ -44,6 +44,9 @@
 	var touch = !window.L_NO_TOUCH && (pointer || 'ontouchstart' in window ||
 			(window.DocumentTouch && document instanceof window.DocumentTouch));
 
+	var isInternetExplorer = (navigator.userAgent.toLowerCase().indexOf('msie') != -1 ||
+			navigator.userAgent.toLowerCase().indexOf('trident') != -1);
+
 	L.Browser = {
 
 		// @property ie: Boolean
@@ -92,6 +95,10 @@
 		// `true` for all Internet Explorer versions supporting CSS transforms.
 		ie3d: ie3d,
 
+		// @property isInternetExplorer: Boolean
+		// `true` for Internet Explorer
+		isInternetExplorer: isInternetExplorer,
+
 		// @property webkit3d: Boolean
 		// `true` for webkit-based browsers supporting CSS transforms.
 		webkit3d: webkit3d,
diff --git a/loleaflet/src/layer/marker/TextInput.js b/loleaflet/src/layer/marker/TextInput.js
index b23355595..22b904632 100644
--- a/loleaflet/src/layer/marker/TextInput.js
+++ b/loleaflet/src/layer/marker/TextInput.js
@@ -211,7 +211,7 @@ L.TextInput = L.Layer.extend({
 			this._textArea.style.height = '1px';
 			this._textArea.style.caretColor = 'transparent';
 
-			if (window.isInternetExplorer || L.Browser.edge)
+			if (L.Browser.isInternetExplorer || L.Browser.edge)
 			{
 				// Setting the font-size to zero is the only reliable
 				// way to hide the caret in MSIE11, as the CSS "caret-color"
diff --git a/loleaflet/src/main.js b/loleaflet/src/main.js
index f8340a844..f4b7be0c9 100644
--- a/loleaflet/src/main.js
+++ b/loleaflet/src/main.js
@@ -41,10 +41,6 @@ if (host === '' && !window.ThisIsAMobileApp) {
 	vex.dialog.alert(errorMessages.emptyhosturl);
 }
 
-var isInternetExplorer = (navigator.userAgent.toLowerCase().indexOf('msie') != -1
-			|| navigator.userAgent.toLowerCase().indexOf('trident') != -1);
-global.isInternetExplorer = isInternetExplorer;
-
 // loleaflet.js accesses these globals
 // TODO: Get rid of these globals
 global.revHistoryEnabled = revHistoryEnabled;
diff --git a/loleaflet/src/map/Clipboard.js b/loleaflet/src/map/Clipboard.js
index 65ab6d1ab..a3a4c3add 100644
--- a/loleaflet/src/map/Clipboard.js
+++ b/loleaflet/src/map/Clipboard.js
@@ -40,7 +40,7 @@ L.Clipboard = L.Class.extend({
 
 		var that = this;
 		var beforeSelect = function(ev) { return that._beforeSelect(ev); }
-		if (window.isInternetExplorer)
+		if (L.Browser.isInternetExplorer)
 		{
 			document.addEventListener('cut',   function(ev)   { return that.cut(ev); });
 			document.addEventListener('copy',  function(ev)   { return that.copy(ev); });
@@ -61,7 +61,7 @@ L.Clipboard = L.Class.extend({
 	},
 
 	compatRemoveNode: function(node) {
-		if (window.isInternetExplorer)
+		if (L.Browser.isInternetExplorer)
 			node.removeNode(true);
 		else // standard
 			node.parentNode.removeChild(node);
@@ -455,7 +455,7 @@ L.Clipboard = L.Class.extend({
 	populateClipboard: function(ev) {
 		this._checkSelection();
 
-		if (window.isInternetExplorer)
+		if (L.Browser.isInternetExplorer)
 		{
 			var that = this;
 			setTimeout(function() { that._resetDiv(); }, 0);
@@ -494,7 +494,7 @@ L.Clipboard = L.Class.extend({
 	},
 
 	_beforeSelectImpl: function(operation) {
-		if (window.isInternetExplorer && operation != 'paste')
+		if (L.Browser.isInternetExplorer && operation != 'paste')
 			// We need populate our content into the div for
 			// the brower to copy.
 			this._dummyDiv.innerHTML = this._getHtmlForClipboard();
@@ -508,7 +508,7 @@ L.Clipboard = L.Class.extend({
 
 		var selected = false;
 		var selectRange;
-		if (window.isInternetExplorer && operation != 'paste')
+		if (L.Browser.isInternetExplorer && operation != 'paste')
 		{
 			this._dummyDiv.focus();
 
@@ -572,7 +572,7 @@ L.Clipboard = L.Class.extend({
 		var serial = this._clipboardSerial;
 
 		// try a direct execCommand.
-		if (window.isInternetExplorer && operation != 'paste')
+		if (L.Browser.isInternetExplorer && operation != 'paste')
 			this._beforeSelectImpl(operation);
 		if (document.execCommand(operation) &&
 		    serial !== this._clipboardSerial) {
@@ -651,7 +651,7 @@ L.Clipboard = L.Class.extend({
 			ev.usePasteKeyEvent = true;
 
 		var that = this;
-		if (window.isInternetExplorer)
+		if (L.Browser.isInternetExplorer)
 		{
 			var active = document.activeElement;
 			// Can't get HTML until it is pasted ... so quick timeout
commit 87533c9e63873f9a2dee2e0560cc57800c878da1
Author:     Henry Castro <hcastro at collabora.com>
AuthorDate: Mon Jan 6 13:26:03 2020 -0400
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:08:05 2020 +0100

    loleaflet: mobile: avoid blurs when graphic is editing
    
    This fixes the annoying effect to blur and focus again
    when the graphic is editing.
    
    Change-Id: I3b26cf0a3aaa6418062121279f65df3753e179a6
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/86289
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
    Reviewed-by: Henry Castro <hcastro at collabora.com>

diff --git a/loleaflet/src/map/handler/Map.TouchGesture.js b/loleaflet/src/map/handler/Map.TouchGesture.js
index f59604c82..66c333791 100644
--- a/loleaflet/src/map/handler/Map.TouchGesture.js
+++ b/loleaflet/src/map/handler/Map.TouchGesture.js
@@ -305,11 +305,12 @@ L.Map.TouchGesture = L.Handler.extend({
 		this._map.fire('closepopups');
 		this._map.fire('closemobilewizard');
 
+		var docLayer = this._map._docLayer;
 		// unselect if anything is selected already
-		if (this._map._docLayer && this._map._docLayer._annotations && this._map._docLayer._annotations.unselect) {
-			this._map._docLayer._annotations.unselect();
-			var pointPx = this._map._docLayer._twipsToPixels(mousePos);
-			var bounds = this._map._docLayer._annotations.getBounds();
+		if (docLayer && docLayer._annotations && docLayer._annotations.unselect) {
+			docLayer._annotations.unselect();
+			var pointPx = docLayer._twipsToPixels(mousePos);
+			var bounds = docLayer._annotations.getBounds();
 			if (bounds && bounds.contains(pointPx)) {
 				// not forward mouse events to core if the user tap on a comment box
 				// for instance on Writer that causes the text cursor to be moved
@@ -317,13 +318,16 @@ L.Map.TouchGesture = L.Handler.extend({
 			}
 		}
 		this._map._contextMenu._onMouseDown({originalEvent: e.srcEvent});
-		this._map._docLayer._postMouseEvent('buttondown', mousePos.x, mousePos.y, 1, 1, 0);
-		this._map._docLayer._postMouseEvent('buttonup', mousePos.x, mousePos.y, 1, 1, 0);
 
-		if (this._state === L.Map.TouchGesture.MARKER || this._state === L.Map.TouchGesture.GRAPHIC) {
-			this._map._textInput.blur();
-		} else {
-			this._map.focus();
+		if (docLayer) {
+			docLayer._postMouseEvent('buttondown', mousePos.x, mousePos.y, 1, 1, 0);
+			docLayer._postMouseEvent('buttonup', mousePos.x, mousePos.y, 1, 1, 0);
+
+			if (this._state === L.Map.TouchGesture.MARKER || (this._state === L.Map.TouchGesture.GRAPHIC && !docLayer._isCursorVisible)) {
+				this._map._textInput.blur();
+			} else if (!this._map.hasFocus()) {
+				this._map.focus();
+			}
 		}
 	},
 
commit aa2d6824f993a4c6e427b6ad7c81a6d16adc4d20
Author:     Henry Castro <hcastro at collabora.com>
AuthorDate: Tue Dec 17 15:41:26 2019 -0400
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:08:01 2020 +0100

    loleaflet: android: hide slide sorter if it is a small window size
    
    The android browser application changes the orientation when the
    soft keyboard pop ups, it has been given a heuristic number 2/3 screen height
    to hide the slide sorter, this is because there is a header size
    that show the URL bar and it can be improved to the equal screen size of the
    native Android app.
    
    Change-Id: I182795fe698bf191cd5b675c1768820ab78b1602
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/85333
    Reviewed-by: Henry Castro <hcastro at collabora.com>
    Tested-by: Henry Castro <hcastro at collabora.com>

diff --git a/loleaflet/css/loleaflet.css b/loleaflet/css/loleaflet.css
index 52038a224..7d3326687 100644
--- a/loleaflet/css/loleaflet.css
+++ b/loleaflet/css/loleaflet.css
@@ -301,6 +301,10 @@ body {
 		bottom: 95px;
 		width: 100%;
 	}
+
+	#document-container.parts-preview-document.keyboard {
+		bottom: 33px;
+	}
 }
 
 @media (max-width: 767px) and (orientation: landscape),(max-device-height: 767px) and (orientation: landscape)  {
@@ -325,6 +329,10 @@ body {
 		bottom: 0px;
 		max-width: 120px;
 	}
+
+	#document-container.parts-preview-document.keyboard {
+		left: 0px !important;
+	}
 }
 
 .loleaflet-font {
diff --git a/loleaflet/src/layer/tile/ImpressTileLayer.js b/loleaflet/src/layer/tile/ImpressTileLayer.js
index ffa1f40af..92a0bca5f 100644
--- a/loleaflet/src/layer/tile/ImpressTileLayer.js
+++ b/loleaflet/src/layer/tile/ImpressTileLayer.js
@@ -409,6 +409,17 @@ L.ImpressTileLayer = L.TileLayer.extend({
 			return;
 		}
 
+		// Android change the orientation if the keyboard is visible
+		if (L.Browser.android) {
+			if (window.innerHeight < 2 * screen.height / 3) {
+				L.DomUtil.addClass(this._map.options.documentContainer, 'keyboard');
+				$(preview).hide();
+			} else {
+				L.DomUtil.removeClass(this._map.options.documentContainer, 'keyboard');
+				$(preview).show();
+			}
+		}
+
 		if (L.DomUtil.isPortrait() && $(preview).data('mCS').opt.axis !== 'x') {
 			$(preview).mCustomScrollbar('destroy');
 			this._preview.createScrollbar('x');
commit 2d5d60df21badf801728e5cceca2ecfddc655353
Author:     Tor Lillqvist <tml at collabora.com>
AuthorDate: Mon Jan 6 19:41:45 2020 +0200
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:07:57 2020 +0100

    Try to avoid "TypeError: undefined is not an object"
    
    Change-Id: I19942728166b57e493fb04086d7588c74bdb49ef

diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js
index 6f9b1dfd3..836151b34 100644
--- a/loleaflet/src/control/Control.LokDialog.js
+++ b/loleaflet/src/control/Control.LokDialog.js
@@ -172,13 +172,13 @@ L.Control.LokDialog = L.Control.extend({
 	// Create a rectangle string of form "x,y,width,height"
 	// if params are missing, assumes 0,0,dialog width, dialog height
 	_createRectStr: function(id, x, y, width, height) {
-		if (!width)
+		if (!width && id !== null)
 			width = this._dialogs[parseInt(id)].width;
-		if (width <= 0)
+		if (!width || width <= 0)
 			return null;
-		if (!height)
+		if (!height && id !== null)
 			height = this._dialogs[parseInt(id)].height;
-		if (height <= 0)
+		if (!height || height <= 0)
 			return null;
 		if (!x)
 			x = 0;
commit c0810e98f144cd60e8a2d3d7b252957131f39ab4
Author:     Henry Castro <hcastro at collabora.com>
AuthorDate: Mon Dec 23 13:59:16 2019 -0400
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:07:53 2020 +0100

    makefile: generate an index (ctag) file for the JavaScript language
    
    Change-Id: I495c7665786a47cfb007260368084a01c4163ea7
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/85766
    Reviewed-by: Henry Castro <hcastro at collabora.com>
    Tested-by: Henry Castro <hcastro at collabora.com>

diff --git a/loleaflet/Makefile.am b/loleaflet/Makefile.am
index 410e7453e..25c1c1c27 100644
--- a/loleaflet/Makefile.am
+++ b/loleaflet/Makefile.am
@@ -1,3 +1,4 @@
+CTAGS = ctags
 
 L10N_PO = $(wildcard $(srcdir)/po/*.po)
 
@@ -402,3 +403,6 @@ load-test: spec/data/load-test
 	do \
 		node_modules/.bin/mocha spec/headlessLoadTest.js > load_test_out/$$i.out 2>&1 & \
 	done;
+
+ctags:
+	@$(CTAGS) --language-force=JavaScript $(LOLEAFLET_JS_SRC) $(srcdir)/js/global.js
commit cc41dbde855b393c9f5218d88a7c52e0b1f571fc
Author:     Michael Meeks <michael.meeks at collabora.com>
AuthorDate: Mon Jan 6 17:36:42 2020 +0000
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:07:49 2020 +0100

    dialogs: render red transparent rectangles to show dialog invalidation.
    
    Change-Id: Icff4a792dd54f9ab1c1f9abf13b8bdd869593fe2

diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js
index d4040aadc..6f9b1dfd3 100644
--- a/loleaflet/src/control/Control.LokDialog.js
+++ b/loleaflet/src/control/Control.LokDialog.js
@@ -194,6 +194,19 @@ L.Control.LokDialog = L.Control.extend({
 		this._sendPaintWindow(id, this._createRectStr(id, x, y, width, height));
 	},
 
+	_debugPaintWindow: function(id, rectangle) {
+		var strId = this._toStrId(id);
+		var canvas = document.getElementById(strId + '-canvas');
+		if (!canvas)
+			return; // no window to paint to
+		var ctx = canvas.getContext('2d');
+		ctx.beginPath();
+		var rect = rectangle.split(',');
+		ctx.rect(rect[0], rect[1], rect[2], rect[3]);
+		ctx.fillStyle = 'rgba(255, 0, 0, 0.5)';
+		ctx.fill();
+	},
+
 	_sendPaintWindow: function(id, rectangle) {
 		if (!rectangle)
 			return; // Don't request rendering an empty area.
@@ -205,6 +218,9 @@ L.Control.LokDialog = L.Control.extend({
 		var dpiscale = L.getDpiScaleFactor();
 		//console.log('_sendPaintWindow: rectangle: ' + rectangle + ', dpiscale: ' + dpiscale);
 		this._map._socket.sendMessage('paintwindow ' + id + ' rectangle=' + rectangle + ' dpiscale=' + dpiscale);
+
+		if (this._map._docLayer && this._map._docLayer._debug)
+			this._debugPaintWindow(id, rectangle);
 	},
 
 	_sendCloseWindow: function(id) {
commit d9fb74b301e08570f2c41e2ea96514177f37cb02
Author:     Michael Meeks <michael.meeks at collabora.com>
AuthorDate: Mon Jan 6 15:10:02 2020 +0000
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:07:45 2020 +0100

    Avoid taking address over the end of a vector if reading 0 bytes.
    
    Happens with some close frames eg.
    
    [ docbroker_001 ] TRC  #21: Incoming WebSocket data of 6 bytes: 88 80 4a 2c 44 f9  | ..J,D.|
    
        fin = true
        OpCode is Close (= 0x8)
        hasMask = true
        payloadLen = 0
        headerLen = 2 -> 6 after hasMask is taken into account.
    
    Change-Id: I0e212e4589c3cc63db16f7065dc90cd0bd539ada

diff --git a/net/WebSocketHandler.hpp b/net/WebSocketHandler.hpp
index 1d24fa26a..17d364d3a 100644
--- a/net/WebSocketHandler.hpp
+++ b/net/WebSocketHandler.hpp
@@ -607,6 +607,9 @@ protected:
 
     void readPayload(unsigned char *data, size_t dataLen, unsigned char* mask, std::vector<char>& payload)
     {
+        if (dataLen == 0)
+            return;
+
         if (mask)
         {
             size_t end = payload.size();
commit d17a221fb9cad2478b4c3db89d954ee951bec3d4
Author:     Michael Meeks <michael.meeks at collabora.com>
AuthorDate: Thu Jan 2 21:11:54 2020 +0000
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:07:41 2020 +0100

    watermarking: create SessionMap template to canonicalize views.
    
    Use a fully reliable uniqueness check, rather than a hash, and get
    simpler ids as a bonus. Fetch view data from the session itself
    rather than passing it in too.
    
    Change-Id: Ibcd625156b5a98eb280e35d6537b5c8c026d0197
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/86150
    Reviewed-by: Mert Tümer <mert.tumer at collabora.com>
    Tested-by: Mert Tümer <mert.tumer at collabora.com>

diff --git a/common/Session.cpp b/common/Session.cpp
index 1e4c76573..37f3a5952 100644
--- a/common/Session.cpp
+++ b/common/Session.cpp
@@ -255,23 +255,6 @@ void Session::getIOStats(uint64_t &sent, uint64_t &recv)
     }
 }
 
-void Session::setHash(const std::string& text)
- {
-    unsigned int hash = 0x811C9DC5;
-    unsigned int prime = 0x1000193;
-
-    if (!text.empty())
-    {
-       for (unsigned int i = 0; i < text.length(); ++i)
-       {
-           hash += hash ^ text[i];
-           hash *= prime;
-       }
-    }
-    _hash = abs(static_cast<int>(hash));
- }
-
-
 void Session::dumpState(std::ostream& os)
 {
     WebSocketHandler::dumpState(os);
diff --git a/common/Session.hpp b/common/Session.hpp
index d06d18a44..6a3f7cfea 100644
--- a/common/Session.hpp
+++ b/common/Session.hpp
@@ -14,7 +14,9 @@
 #include <cassert>
 #include <memory>
 #include <mutex>
+#include <map>
 #include <ostream>
+#include <type_traits>
 
 #include <Poco/Buffer.h>
 #include <Poco/Path.h>
@@ -28,6 +30,39 @@
 #include "TileCache.hpp"
 #include "WebSocketHandler.hpp"
 
+class Session;
+
+template<class T>
+class SessionMap : public std::map<std::string, std::shared_ptr<T> >
+{
+    std::map<std::string, int> _canonicalIds;
+public:
+    SessionMap() {
+        static_assert(std::is_base_of<Session, T>::value, "sessions must have base of Session");
+    }
+    /// Generate a unique key for this set of view properties
+    int getCanonicalId(const std::string &viewProps)
+    {
+        if (viewProps.empty())
+            return 0;
+        for (auto &it : _canonicalIds) {
+            if (it.first == viewProps)
+                return it.second;
+        }
+        size_t id = _canonicalIds.size() + 1;
+        _canonicalIds[viewProps] = id;
+        return id;
+    }
+    std::shared_ptr<T> findByCanonicalId(int id)
+    {
+        for (auto &it : *this) {
+            if (it.second->getCanonicalViewId() == id)
+                return it.second;
+        }
+        return std::shared_ptr<T>();
+    }
+};
+
 /// Base class of a WebSocket session.
 class Session : public WebSocketHandler
 {
@@ -121,11 +156,11 @@ public:
 
     const std::string& getJailedFilePathAnonym() const { return _jailedFilePathAnonym; }
 
-    int getHash() { return _hash; }
-
-    void setHash(const std::string& text);
-
-    void setHash(const int hash) { _hash = hash; };
+    int  getCanonicalViewId() { return _canonicalViewId; }
+    template<class T> void recalcCanonicalViewId(SessionMap<T> &map)
+    {
+        _canonicalViewId = map.getCanonicalId(_watermarkText);
+    }
 
 protected:
     Session(const std::string& name, const std::string& id, bool readonly);
@@ -218,10 +253,8 @@ private:
     /// Language for the document based on what the user has in the UI.
     std::string _lang;
 
-    /// Hash for normalizedViewId which is basically an identity for the tile to
-    /// choose what to render on and send it to its subscribers
-    /// it is the close-to-unique integer representation of a string like Watermarks etc.
-    int _hash;
+    /// the canonical id unique to the set of rendering properties of this session
+    int _canonicalViewId;
 };
 
 #endif
diff --git a/kit/Kit.cpp b/kit/Kit.cpp
index 4ad74b258..f2930d923 100644
--- a/kit/Kit.cpp
+++ b/kit/Kit.cpp
@@ -948,6 +948,20 @@ public:
             return;
         }
 
+        // Find a session matching our view / render settings.
+        const auto session = _sessions.findByCanonicalId(tileCombined.getNormalizedViewId());
+        if (!session)
+        {
+            LOG_ERR("Session is not found. Maybe exited after rendering request.");
+            return;
+        }
+
+#ifdef FIXME_RENDER_SETTINGS
+        // if necessary select a suitable rendering view eg. with 'show non-printing chars'
+        if (tileCombined.getNormalizedViewId())
+            _loKitDocument->setView(session->getViewId());
+#endif
+
         // Render the whole area
         const double area = pixmapWidth * pixmapHeight;
         auto start = std::chrono::system_clock::now();
@@ -972,16 +986,6 @@ public:
         const int pixelWidth = tileCombined.getWidth();
         const int pixelHeight = tileCombined.getHeight();
 
-        int nViewId = tileCombined.getNormalizedViewId();
-        const auto it = std::find_if(_sessions.begin(), _sessions.end(), [nViewId](const std::pair<std::string, std::shared_ptr<ChildSession>>& val){ return (val.second)->getHash() == nViewId; });
-        const auto& session = it->second;
-
-        if (it == _sessions.end())
-        {
-            LOG_ERR("Session is not found. Maybe exited after rendering request.");
-            return;
-        }
-
         std::vector<TileDesc> renderedTiles;
         std::vector<TileDesc> duplicateTiles;
         std::vector<TileBinaryHash> duplicateHashes;
@@ -1717,12 +1721,8 @@ private:
                 viewCount << " view" << (viewCount != 1 ? "s." : "."));
 
         if (session->hasWatermark())
-        {
             session->_docWatermark.reset(new Watermark(_loKitDocument, session));
-            session->setHash(session->getWatermarkText());
-        }
-        else
-            session->setHash(0);
+        session->recalcCanonicalViewId(_sessions);
 
         return _loKitDocument;
     }
@@ -2046,7 +2046,7 @@ private:
     int _editorId;
     bool _editorChangeWarning;
     std::map<int, std::unique_ptr<CallbackDescriptor>> _viewIdToCallbackDescr;
-    std::map<std::string, std::shared_ptr<ChildSession>> _sessions;
+    SessionMap<ChildSession> _sessions;
 
     std::map<int, std::chrono::steady_clock::time_point> _lastUpdatedAt;
     std::map<int, int> _speedCount;
diff --git a/wsd/ClientSession.cpp b/wsd/ClientSession.cpp
index 43bc0ecbb..beed136e5 100644
--- a/wsd/ClientSession.cpp
+++ b/wsd/ClientSession.cpp
@@ -35,8 +35,8 @@ using namespace LOOLProtocol;
 
 using Poco::Path;
 
-static std::mutex SessionMapMutex;
-static std::unordered_map<std::string, std::weak_ptr<ClientSession>> SessionMap;
+static std::mutex GlobalSessionMapMutex;
+static std::unordered_map<std::string, std::weak_ptr<ClientSession>> GlobalSessionMap;
 
 ClientSession::ClientSession(const std::string& id,
                              const std::shared_ptr<DocumentBroker>& docBroker,
@@ -73,8 +73,8 @@ ClientSession::ClientSession(const std::string& id,
 // Can't take a reference in the constructor.
 void ClientSession::construct()
 {
-    std::unique_lock<std::mutex> lock(SessionMapMutex);
-    SessionMap[getId()] = shared_from_this();
+    std::unique_lock<std::mutex> lock(GlobalSessionMapMutex);
+    GlobalSessionMap[getId()] = shared_from_this();
 }
 
 ClientSession::~ClientSession()
@@ -82,8 +82,8 @@ ClientSession::~ClientSession()
     const size_t curConnections = --LOOLWSD::NumConnections;
     LOG_INF("~ClientSession dtor [" << getName() << "], current number of connections: " << curConnections);
 
-    std::unique_lock<std::mutex> lock(SessionMapMutex);
-    SessionMap.erase(getId());
+    std::unique_lock<std::mutex> lock(GlobalSessionMapMutex);
+    GlobalSessionMap.erase(getId());
 }
 
 static const char *stateToString(ClientSession::SessionState s)
@@ -878,7 +878,7 @@ bool ClientSession::sendTile(const char * /*buffer*/, int /*length*/, const std:
     try
     {
         TileDesc tileDesc = TileDesc::parse(tokens);
-        tileDesc.setNormalizedViewId(getHash());
+        tileDesc.setNormalizedViewId(getCanonicalViewId());
         docBroker->handleTileRequest(tileDesc, shared_from_this());
     }
     catch (const std::exception& exc)
@@ -896,7 +896,7 @@ bool ClientSession::sendCombinedTiles(const char* /*buffer*/, int /*length*/, co
     try
     {
         TileCombined tileCombined = TileCombined::parse(tokens);
-        tileCombined.setNormalizedViewId(getHash());
+        tileCombined.setNormalizedViewId(getCanonicalViewId());
         docBroker->handleTileCombinedRequest(tileCombined, shared_from_this());
     }
     catch (const std::exception& exc)
@@ -1719,7 +1719,7 @@ void ClientSession::dumpState(std::ostream& os)
 void ClientSession::handleTileInvalidation(const std::string& message,
     const std::shared_ptr<DocumentBroker>& docBroker)
 {
-    docBroker->invalidateTiles(message, getHash());
+    docBroker->invalidateTiles(message, getCanonicalViewId());
 
     // Skip requesting new tiles if we don't have client visible area data yet.
     if(!_clientVisibleArea.hasSurface() ||
@@ -1744,7 +1744,7 @@ void ClientSession::handleTileInvalidation(const std::string& message,
     if( part == -1 ) // If no part is specified we use the part used by the client
         part = _clientSelectedPart;
 
-    int normalizedViewId = getHash();
+    int normalizedViewId = getCanonicalViewId();
 
     std::vector<TileDesc> invalidTiles;
     if(part == _clientSelectedPart || _isTextDocument)
diff --git a/wsd/ClientSession.hpp b/wsd/ClientSession.hpp
index 770371df0..8ee184687 100644
--- a/wsd/ClientSession.hpp
+++ b/wsd/ClientSession.hpp
@@ -261,7 +261,7 @@ private:
     /// Client is using a text document?
     bool _isTextDocument;
 
-    /// Rotating clipboard remote access identifiers - protected by SessionMapMutex
+    /// Rotating clipboard remote access identifiers - protected by GlobalSessionMapMutex
     std::string _clipboardKeys[2];
 
     /// TileID's of the sent tiles. Push by sending and pop by tileprocessed message from the client.
diff --git a/wsd/DocumentBroker.cpp b/wsd/DocumentBroker.cpp
index 7e163e769..9bf7088c6 100644
--- a/wsd/DocumentBroker.cpp
+++ b/wsd/DocumentBroker.cpp
@@ -710,10 +710,7 @@ bool DocumentBroker::load(const std::shared_ptr<ClientSession>& session, const s
     session->setUserName(username);
     session->setUserExtraInfo(userExtraInfo);
     session->setWatermarkText(watermarkText);
-    if(!watermarkText.empty())
-        session->setHash(watermarkText);
-    else
-        session->setHash(0);
+    session->recalcCanonicalViewId(_sessions);
 
     // Basic file information was stored by the above getWOPIFileInfo() or getLocalFileInfo() calls
     const StorageBase::FileInfo fileInfo = _storage->getFileInfo();
diff --git a/wsd/DocumentBroker.hpp b/wsd/DocumentBroker.hpp
index 07f967579..890e89e38 100644
--- a/wsd/DocumentBroker.hpp
+++ b/wsd/DocumentBroker.hpp
@@ -32,6 +32,7 @@
 #include "net/WebSocketHandler.hpp"
 
 #include "common/SigUtil.hpp"
+#include "common/Session.hpp"
 
 #if !MOBILEAPP
 #include "Admin.hpp"
@@ -481,7 +482,7 @@ private:
     std::chrono::system_clock::time_point _lastFileModifiedTime;
 
     /// All session of this DocBroker by ID.
-    std::map<std::string, std::shared_ptr<ClientSession> > _sessions;
+    SessionMap<ClientSession> _sessions;
 
     /// If we set the user-requested inital (on load) settings to be forced.
     std::set<std::string> _isInitialStateSet;
commit b78fabfe970c2f72761ba6e0de8e0b08100f45e8
Author:     Marco Cecchetti <marco.cecchetti at collabora.com>
AuthorDate: Wed Jan 1 20:49:33 2020 +0100
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:07:37 2020 +0100

    loleaflet: reverse insertion when entering text in formula bar
    
    This patch fixes the following issue:
    
    - Open a spreadsheet.
    - Enter a few chars in a cell, and press enter.
    - Go back to the cell, and in the formula bar, enter more text.
    
    => Characters are inserted backwards.
    
    Change-Id: I6930fab44c6cacdd4710d363ca3bf15d564b64e4
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/86100
    Reviewed-by: Marco Cecchetti <marco.cecchetti at collabora.com>
    Tested-by: Marco Cecchetti <marco.cecchetti at collabora.com>

diff --git a/loleaflet/src/control/Control.LokDialog.js b/loleaflet/src/control/Control.LokDialog.js
index 2e1e52d90..d4040aadc 100644
--- a/loleaflet/src/control/Control.LokDialog.js
+++ b/loleaflet/src/control/Control.LokDialog.js
@@ -879,9 +879,10 @@ L.Control.LokDialog = L.Control.extend({
 		}
 
 		$('#sidebar-dock-wrapper').css({display: ''});
-		this._map.fire('editorgotfocus');
-		this._map.focus();
-
+		if (this._map.getWinId() === 0) {
+			this._map.fire('editorgotfocus');
+			this._map.focus();
+		}
 	},
 
 	_onCalcInputBarClose: function(dialogId) {
@@ -1073,8 +1074,10 @@ L.Control.LokDialog = L.Control.extend({
 		this._adjustCalcInputBar(deckOffset);
 		// If we didn't have the focus, don't steal it form the editor.
 		if ($('#' + this._currentDeck.strId + '-cursor').css('display') === 'none') {
-			this._map.fire('editorgotfocus');
-			this._map.focus();
+			if (this._map.getWinId() === 0) {
+				this._map.fire('editorgotfocus');
+				this._map.focus();
+			}
 		}
 	},
 
commit a6927da73ff26b1cea9de592aba9a43644dad90a
Author:     Pedro Pinto Silva <pedro.silva at collabora.com>
AuthorDate: Fri Jan 3 15:53:31 2020 +0100
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:07:32 2020 +0100

    Mobile: mobile-wizard
    
    - Remove specific id rules and swap them with class rules
    - Decrease row's width
    
    Change-Id: I058c2bd80070df1d238eb978e8e616081a4b3d8c
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/86187
    Reviewed-by: Pedro Pinto da Silva <pedro.silva at collabora.com>
    Tested-by: Pedro Pinto da Silva <pedro.silva at collabora.com>

diff --git a/loleaflet/css/mobilewizard.css b/loleaflet/css/mobilewizard.css
index 4cb167a75..d932e5a1f 100644
--- a/loleaflet/css/mobilewizard.css
+++ b/loleaflet/css/mobilewizard.css
@@ -267,7 +267,7 @@
 	}
 
 	.ui-header.mobile-wizard {
-		width: 96%;
+		width: 92%;
 		height: 56px !important;
 		font-size: 11pt !important;
 		margin: 0px;
@@ -306,8 +306,8 @@
 	.ui-content.unospan {
 		line-height: 32px;
 		display: table;
+		padding-left: 4%;
 	}
-	#SetBorderStyle, div[id^=NumberFormat]{padding-left: 4%;}
 	.ui-content.unolabel {
 		display: table-cell;
 		vertical-align: middle;
@@ -555,9 +555,6 @@
 		font-size: 12px;
 		font-weight: bold;
 	}
-	[title=Line] > #XLineColor {
-		width: 100%;
-	}
 	#DecrementIndent + input:disabled{display: none;}
 	div#mobile-wizard-content input[type=number]{
 		height: 46px;
commit 2a31772ffb05765a6d2697f9df212afd45b0459d
Author:     Pranam Lashkari <lpranam at collabora.com>
AuthorDate: Sat Dec 28 00:21:02 2019 +0530
Commit:     Andras Timar <andras.timar at collabora.com>
CommitDate: Thu Jan 9 22:07:26 2020 +0100

    Removed extra "Insert" strings in phone wizard's Insert menu
    
    and removed 1 extra "Insert" string in browser's Insert menu
    
    Change-Id: If7f27dda00d8abee662b2624a7f0edd9c9008585
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/85875
    Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
    Reviewed-by: Andras Timar <andras.timar at collabora.com>
    Tested-by: Andras Timar <andras.timar at collabora.com>

diff --git a/loleaflet/l10n/uno/ab.json b/loleaflet/l10n/uno/ab.json
index 70e028079..f2f0592a2 100644
--- a/loleaflet/l10n/uno/ab.json
+++ b/loleaflet/l10n/uno/ab.json
@@ -161,6 +161,7 @@
 "~Rows":"Ацәаҳәақәа",
 "~Save":"Иеиқәырхатәуп",
 "~Select":"Иалкаатәуп",
+"~Shape":"Афигурақәа",
 "~Sheet":"Абӷьыц",
 "~Show":"Иаарҧштәуп",
 "~Show Sheet...":"Иаарҧштәуп абӷьыцқәа...",
diff --git a/loleaflet/l10n/uno/am.json b/loleaflet/l10n/uno/am.json
index 96d26f5d8..31d7ca905 100644
--- a/loleaflet/l10n/uno/am.json
+++ b/loleaflet/l10n/uno/am.json
@@ -332,6 +332,7 @@
 "~Select...":"~ይምረጡ...",
 "~Send to Back":"ወደ ኋላ ~መላኪያ",
 "~Sentence case":"በ ~አረፍተ ነገር ጉዳይ",
+"~Shape":"~ቅርጽ",
 "~Sheet":"~ወረቀት",
 "~Show":"~ማሳያ",
 "~Show Details":"ዝርዝሮች ~ማሳያ",
diff --git a/loleaflet/l10n/uno/ar.json b/loleaflet/l10n/uno/ar.json
index 37fc17c28..55644e34c 100644
--- a/loleaflet/l10n/uno/ar.json
+++ b/loleaflet/l10n/uno/ar.json
@@ -318,6 +318,7 @@
 "~Select":"~حدّد",
 "~Send to Back":"أر~سل إلى الخلف",
 "~Sentence case":"ح~الة الجملة",
+"~Shape":"~شكل",
 "~Sheet":"الور~قة",
 "~Show":"ا~عرض",
 "~Show Details":"أ~ظهر التفاصيل",
diff --git a/loleaflet/l10n/uno/be.json b/loleaflet/l10n/uno/be.json
index 984bf4971..afffadea1 100644
--- a/loleaflet/l10n/uno/be.json
+++ b/loleaflet/l10n/uno/be.json
@@ -315,6 +315,7 @@
 "~Select":"Пазначыць",
 "~Send to Back":"Ззаду",
 "~Sentence case":"Як у звычайным сказе",
+"~Shape":"Абрыс",
 "~Sheet":"Аркуш",
 "~Show":"Паказваць",
 "~Show Details":"З падрабязнасцямі",
diff --git a/loleaflet/l10n/uno/bg.json b/loleaflet/l10n/uno/bg.json
index ba68f3e3e..d8215da17 100644
--- a/loleaflet/l10n/uno/bg.json
+++ b/loleaflet/l10n/uno/bg.json
@@ -332,6 +332,7 @@
 "~Select...":"Избиране...",
 "~Send to Back":"Изн~асяне отзад",
 "~Sentence case":"~Изречение",
+"~Shape":"Фигура",
 "~Sheet":"~Лист",
 "~Show":"~Показване",
 "~Show Details":"~Видими детайли",
diff --git a/loleaflet/l10n/uno/br.json b/loleaflet/l10n/uno/br.json
index 6a5ef525b..898670c88 100644
--- a/loleaflet/l10n/uno/br.json
+++ b/loleaflet/l10n/uno/br.json
@@ -281,6 +281,7 @@
 "~Select":"~Diuz",
 "~Send to Back":"Pep t~ra war drek",
 "~Sentence case":"~Tirenneg ar frazenn",
+"~Shape":"~Lun",
 "~Sheet":"~Follenn",
 "~Show":"S~krammañ",
 "~Show Details":"S~krammañ ar munudoù",
diff --git a/loleaflet/l10n/uno/ca-valencia.json b/loleaflet/l10n/uno/ca-valencia.json
index ccc789fa2..4cb9b44ee 100644
--- a/loleaflet/l10n/uno/ca-valencia.json
+++ b/loleaflet/l10n/uno/ca-valencia.json
@@ -315,6 +315,7 @@
 "~Select":"~Selecciona",
 "~Send to Back":"Envia al ~fons",
 "~Sentence case":"Majú~scules a l'inici de frase",
+"~Shape":"~Forma",
 "~Sheet":"~Full",
 "~Show":"Mo~stra",
 "~Show Details":"Mo~stra els detalls",
diff --git a/loleaflet/l10n/uno/ca.json b/loleaflet/l10n/uno/ca.json
index 8d05fbb57..5ca7915eb 100644
--- a/loleaflet/l10n/uno/ca.json
+++ b/loleaflet/l10n/uno/ca.json
@@ -332,6 +332,7 @@
 "~Select...":"~Selecciona...",
 "~Send to Back":"Envia al ~fons",
 "~Sentence case":"Majú~scules a l'inici de frase",
+"~Shape":"~Forma",
 "~Sheet":"~Full",
 "~Show":"Mo~stra",
 "~Show Details":"Mo~stra els detalls",
diff --git a/loleaflet/l10n/uno/cs.json b/loleaflet/l10n/uno/cs.json
index c75f1055d..752f35916 100644
--- a/loleaflet/l10n/uno/cs.json
+++ b/loleaflet/l10n/uno/cs.json
@@ -332,6 +332,7 @@
 "~Select...":"V~ybrat...",
 "~Send to Back":"Od~sunout do pozadí",
 "~Sentence case":"~První velké",
+"~Shape":"~Tvar",
 "~Sheet":"Lis~t",
 "~Show":"Zobrazit",
 "~Show Details":"Zo~brazit podrobnosti",
diff --git a/loleaflet/l10n/uno/cy.json b/loleaflet/l10n/uno/cy.json
index 096319ad3..51d3d0a53 100644
--- a/loleaflet/l10n/uno/cy.json
+++ b/loleaflet/l10n/uno/cy.json
@@ -332,6 +332,7 @@
 "~Select...":"~Dewis...",
 "~Send to Back":"~Anfon i'r Cefn",
 "~Sentence case":"~Llythrennaubach/mawr brawddeg",
+"~Shape":"~Siapiau",
 "~Sheet":"~Dalen",
 "~Show":"D~angos",
 "~Show Details":"Dangos ~Manylion",
diff --git a/loleaflet/l10n/uno/da.json b/loleaflet/l10n/uno/da.json
index 4be38cdf4..bb0e63d94 100644
--- a/loleaflet/l10n/uno/da.json
+++ b/loleaflet/l10n/uno/da.json
@@ -332,6 +332,7 @@
 "~Select...":"V~ælg...",
 "~Send to Back":"Placer ~bagest",
 "~Sentence case":"~Sætning",
+"~Shape":"~Figur",
 "~Sheet":"~Ark",
 "~Show":"Vi~s",
 "~Show Details":"~Vis detaljer",
diff --git a/loleaflet/l10n/uno/de.json b/loleaflet/l10n/uno/de.json
index b9f66b71a..2634ceec5 100644
--- a/loleaflet/l10n/uno/de.json
+++ b/loleaflet/l10n/uno/de.json
@@ -332,6 +332,7 @@
 "~Select...":"Aus~wählen...",
 "~Send to Back":"G~anz nach hinten",
 "~Sentence case":"Sat~zanfang groß",
+"~Shape":"~Form",
 "~Sheet":"~Tabelle",
 "~Show":"An~zeigen",
 "~Show Details":"Details ~einblenden",
diff --git a/loleaflet/l10n/uno/dsb.json b/loleaflet/l10n/uno/dsb.json
index 84e34a664..a9ebe739e 100644
--- a/loleaflet/l10n/uno/dsb.json
+++ b/loleaflet/l10n/uno/dsb.json
@@ -332,6 +332,7 @@
 "~Select...":"W~ubraś...",
 "~Send to Back":"Cele ~naslědk",
 "~Sentence case":"Wjeliki ~zachopjeńk sady",
+"~Shape":"~Forma",
 "~Sheet":"~Tabela",
 "~Show":"~Pokazaś",
 "~Show Details":"Drobnostki poka~zaś",
diff --git a/loleaflet/l10n/uno/el.json b/loleaflet/l10n/uno/el.json
index 8cda17982..3b0e0a79b 100644
--- a/loleaflet/l10n/uno/el.json
+++ b/loleaflet/l10n/uno/el.json
@@ -332,6 +332,7 @@
 "~Select...":"Επιλο~γή...",
 "~Send to Back":"Μεταφορά πί~σω",
 "~Sentence case":"Κεφαλαίο ~πρότασης",
+"~Shape":"Σ~χήμα",
 "~Sheet":"~Φύλλο",
 "~Show":"Εμφάνι~ση",
 "~Show Details":"Εμ~φάνιση λεπτομερειών",
diff --git a/loleaflet/l10n/uno/en-GB.json b/loleaflet/l10n/uno/en-GB.json
index f332e6e64..6ae3baae3 100644
--- a/loleaflet/l10n/uno/en-GB.json
+++ b/loleaflet/l10n/uno/en-GB.json
@@ -332,6 +332,7 @@
 "~Select...":"~Select...",
 "~Send to Back":"~Send to Back",
 "~Sentence case":"~Sentence case",
+"~Shape":"~Shape",
 "~Sheet":"~Sheet",
 "~Show":"~Show",
 "~Show Details":"~Show Details",
diff --git a/loleaflet/l10n/uno/eo.json b/loleaflet/l10n/uno/eo.json
index 1333a6ec8..d88a58502 100644
--- a/loleaflet/l10n/uno/eo.json
+++ b/loleaflet/l10n/uno/eo.json
@@ -332,6 +332,7 @@
 "~Select...":"Elekti...",
 "~Send to Back":"Sendi fonen",
 "~Sentence case":"Fraza uskleco",
+"~Shape":"Formo",
 "~Sheet":"Folio",
 "~Show":"Vidigi",
 "~Show Details":"Montri detalojn",
diff --git a/loleaflet/l10n/uno/es.json b/loleaflet/l10n/uno/es.json
index 52d28a44f..cd9dc69a0 100644
--- a/loleaflet/l10n/uno/es.json
+++ b/loleaflet/l10n/uno/es.json
@@ -121,6 +121,8 @@
 "Insert Column After":"Insertar columna después",
 "Insert Column Before":"Insertar columna antes",
 "Insert Column Break":"Insertar salto de columna",
+"Insert Columns ~After":"Insertar columnas después",
+"Insert Columns ~Before":"Insertar columnas antes",
 "Insert Comment":"Insertar comentario",
 "Insert Co~lumns":"Insertar ~columnas",
 "Insert Co~mment":"Insertar co~mentario",
@@ -158,6 +160,7 @@
 "Lis~ts":"Lis~tas",
 "L~ine...":"~Línea...",
 "Manage...":"Gestionar…",
+"Master Slides":"Patrones de diapositivas",
 "Merge Cells":"Combinar celdas",
 "More ~Filters":"Más ~filtros",
 "Move Down":"Bajar",
@@ -330,6 +333,7 @@
 "~Select...":"~Seleccionar…",
 "~Send to Back":"Enviar al ~fondo",
 "~Sentence case":"~Oración con mayúscula inicial",
+"~Shape":"~Forma",
 "~Sheet":"H~oja",
 "~Show":"~Mostrar",
 "~Show Details":"~Mostrar detalles",
diff --git a/loleaflet/l10n/uno/et.json b/loleaflet/l10n/uno/et.json
index bcb11009c..3202646a7 100644
--- a/loleaflet/l10n/uno/et.json
+++ b/loleaflet/l10n/uno/et.json
@@ -332,6 +332,7 @@
 "~Select...":"Vali...",
 "~Send to Back":"Vii kõige taha",
 "~Sentence case":"Iga ~lause suure esitähega",
+"~Shape":"Kujundid",
 "~Sheet":"L~eht",
 "~Show":"Näitamine",
 "~Show Details":"Näita üksikasju",
diff --git a/loleaflet/l10n/uno/eu.json b/loleaflet/l10n/uno/eu.json
index c5f004ec9..0a4a8d563 100644
--- a/loleaflet/l10n/uno/eu.json
+++ b/loleaflet/l10n/uno/eu.json
@@ -332,6 +332,7 @@
 "~Select...":"~Hautatu...",
 "~Send to Back":"~Eraman atzera",
 "~Sentence case":"~Esaldia maiuskulaz/minuskulaz",
+"~Shape":"~Forma",
 "~Sheet":"~Orria",
 "~Show":"E~rakutsi",
 "~Show Details":"E~rakutsi xehetasunak",
diff --git a/loleaflet/l10n/uno/fi.json b/loleaflet/l10n/uno/fi.json
index 1744bfcba..a233c2661 100644
--- a/loleaflet/l10n/uno/fi.json
+++ b/loleaflet/l10n/uno/fi.json
@@ -327,6 +327,7 @@
 "~Select...":"~Valitse...",
 "~Send to Back":"Vie ~taakse",
 "~Sentence case":"~Ensimmäinen sana suurella alkukirjaimella",
+"~Shape":"Muoto",
 "~Sheet":"T~aulukko",
 "~Show":"~Näytä",
 "~Show Details":"~Näytä tiedot",
diff --git a/loleaflet/l10n/uno/fr.json b/loleaflet/l10n/uno/fr.json
index 250a733be..ed2cdf23d 100644
--- a/loleaflet/l10n/uno/fr.json
+++ b/loleaflet/l10n/uno/fr.json
@@ -332,6 +332,7 @@
 "~Select...":"~Sélectionner...",
 "~Send to Back":"Envoyer à l'a~rrière",
 "~Sentence case":"~Casse de phrase",
+"~Shape":"~Forme",
 "~Sheet":"~Feuille",
 "~Show":"A~fficher",
 "~Show Details":"Afficher le~s détails",
diff --git a/loleaflet/l10n/uno/fy.json b/loleaflet/l10n/uno/fy.json
index eb0bbd53e..f9de0fe51 100644
--- a/loleaflet/l10n/uno/fy.json
+++ b/loleaflet/l10n/uno/fy.json
@@ -332,6 +332,7 @@
 "~Select...":"~Selektearje...",
 "~Send to Back":"~Efteroan sette",
 "~Sentence case":"~Sin begjint mei haadletter",
+"~Shape":"~Foarm",
 "~Sheet":"~Blêd",
 "~Show":"~Sjen litte",
 "~Show Details":"~Details sjen litte",
diff --git a/loleaflet/l10n/uno/ga.json b/loleaflet/l10n/uno/ga.json
index 270579750..449064ce7 100644
--- a/loleaflet/l10n/uno/ga.json
+++ b/loleaflet/l10n/uno/ga.json
@@ -332,6 +332,7 @@
 "~Select...":"~Roghnaigh...",
 "~Send to Back":"~Cuir go dtí an Cúl",
 "~Sentence case":"Cás ~abairte",
+"~Shape":"~Cruth",
 "~Sheet":"~Bileog",
 "~Show":"~Taispeáin",
 "~Show Details":"Taispeáin ~Mionsonraí",
diff --git a/loleaflet/l10n/uno/gd.json b/loleaflet/l10n/uno/gd.json
index 5755003ed..96c8fcbe5 100644
--- a/loleaflet/l10n/uno/gd.json
+++ b/loleaflet/l10n/uno/gd.json
@@ -332,6 +332,7 @@
 "~Select...":"~Tagh…",
 "~Send to Back":"Gluai~s gun fhìor-chùlaibh",
 "~Sentence case":"Cèis an t-~seantans",
+"~Shape":"Cr~uth",
 "~Sheet":"~Siota",
 "~Show":"~Seall",
 "~Show Details":"~Seall am mion-fhiosrachadh",
diff --git a/loleaflet/l10n/uno/gl.json b/loleaflet/l10n/uno/gl.json
index 9333ecdc1..c73710c5b 100644
--- a/loleaflet/l10n/uno/gl.json
+++ b/loleaflet/l10n/uno/gl.json
@@ -332,6 +332,7 @@
 "~Select...":"~Seleccionar...",
 "~Send to Back":"Levar ~para atrás",
 "~Sentence case":"Maiú~scula inicial",
+"~Shape":"~Forma",
 "~Sheet":"~Folla",
 "~Show":"~Amosar",
 "~Show Details":"Amosar detalle~s",
diff --git a/loleaflet/l10n/uno/gug.json b/loleaflet/l10n/uno/gug.json
index e8d9fa8c2..cb87059d2 100644
--- a/loleaflet/l10n/uno/gug.json
+++ b/loleaflet/l10n/uno/gug.json
@@ -293,6 +293,7 @@
 "~Select":"~Poravo",
 "~Send to Back":"~Mondo Huguápe",
 "~Sentence case":"~Ñe'ẽjoapy Oñepyrũva Mayúscula gui",
+"~Shape":"~Forma",
 "~Sheet":"~Kuatia",
 "~Show":"~Hechauka",
 "~Show Details":"~Hechauka Detalles",
diff --git a/loleaflet/l10n/uno/hr.json b/loleaflet/l10n/uno/hr.json
index 3945bdb73..7a9edef41 100644
--- a/loleaflet/l10n/uno/hr.json
+++ b/loleaflet/l10n/uno/hr.json
@@ -327,6 +327,7 @@
 "~Select":"~Odabir",
 "~Send to Back":"~Premjesti na dno",
 "~Sentence case":"~Prvo veliko slovo u rečenici",
+"~Shape":"~Oblik",
 "~Sheet":"~List",
 "~Show":"~Pokaži",
 "~Show Details":"~Prikaži detalje",
diff --git a/loleaflet/l10n/uno/hsb.json b/loleaflet/l10n/uno/hsb.json
index 79d9852a2..e29179fd6 100644
--- a/loleaflet/l10n/uno/hsb.json
+++ b/loleaflet/l10n/uno/hsb.json
@@ -332,6 +332,7 @@
 "~Select...":"W~ubrać...",
 "~Send to Back":"Cyle do po~zadka",
 "~Sentence case":"W~ulki spočatk sady",
+"~Shape":"~Twar",
 "~Sheet":"~Tabela",
 "~Show":"~Pokazać",
 "~Show Details":"Podrobnosće po~kazać",
diff --git a/loleaflet/l10n/uno/hu.json b/loleaflet/l10n/uno/hu.json
index 77946bcd1..7abd07aa9 100644
--- a/loleaflet/l10n/uno/hu.json
+++ b/loleaflet/l10n/uno/hu.json
@@ -332,6 +332,7 @@
 "~Select...":"~Kijelölés...",
 "~Send to Back":"Há~traküldés",
 "~Sentence case":"M~ondatkezdő nagybetű",
+"~Shape":"~Alakzat",
 "~Sheet":"~Munkalap",
 "~Show":"~Megjelenítés",
 "~Show Details":"~Részletek",
diff --git a/loleaflet/l10n/uno/id.json b/loleaflet/l10n/uno/id.json
index 8795e001a..5ba193164 100644
--- a/loleaflet/l10n/uno/id.json
+++ b/loleaflet/l10n/uno/id.json
@@ -332,6 +332,7 @@
 "~Select...":"~Pilih...",
 "~Send to Back":"~Kirim ke Belakang",
 "~Sentence case":"~Kapital kalimat",
+"~Shape":"~Bentuk",
 "~Sheet":"~Lembar Kerja",
 "~Show":"Tam~pilkan",
 "~Show Details":"Tampi~lkan Detail",
diff --git a/loleaflet/l10n/uno/is.json b/loleaflet/l10n/uno/is.json
index aa1b8ea47..0cbf7e149 100644
--- a/loleaflet/l10n/uno/is.json
+++ b/loleaflet/l10n/uno/is.json
@@ -332,6 +332,7 @@
 "~Select...":"~Velja...",
 "~Send to Back":"~Setja aftast",
 "~Sentence case":"~Byrja á hástaf",
+"~Shape":"~Lögun",
 "~Sheet":"~Blað",
 "~Show":"~Sýna",
 "~Show Details":"~Birta ítarlegri upplýsingar",
diff --git a/loleaflet/l10n/uno/it.json b/loleaflet/l10n/uno/it.json
index 98ba93e76..5ea24feb2 100644
--- a/loleaflet/l10n/uno/it.json
+++ b/loleaflet/l10n/uno/it.json
@@ -332,6 +332,7 @@
 "~Select...":"~Seleziona...",
 "~Send to Back":"~Porta in fondo",
 "~Sentence case":"Maiuscole/minuscole nella frase",
+"~Shape":"~Forma",
 "~Sheet":"~Foglio",
 "~Show":"~Mostra",
 "~Show Details":"~Mostra i dettagli",
diff --git a/loleaflet/l10n/uno/ja.json b/loleaflet/l10n/uno/ja.json
index a0758feaf..a8dd7317d 100644
--- a/loleaflet/l10n/uno/ja.json
+++ b/loleaflet/l10n/uno/ja.json
@@ -331,6 +331,7 @@
 "~Select...":"選択(~S)...",
 "~Send to Back":"最背面へ移動(~S)",
 "~Sentence case":"文頭のみ大文字(~S)",
+"~Shape":"シェイプ(~S)",
 "~Sheet":"シート(~S)",
 "~Show":"表示(~S)",
 "~Show Details":"詳細を表示する(~S)",
diff --git a/loleaflet/l10n/uno/kab.json b/loleaflet/l10n/uno/kab.json
index ec268f7b4..8c59da0e4 100644
--- a/loleaflet/l10n/uno/kab.json
+++ b/loleaflet/l10n/uno/kab.json
@@ -210,6 +210,7 @@
 "~Sections...":"Tigezminyin...",
 "~Select":"~Fren",
 "~Send to Back":"A~wi ɣer deffir",
+"~Shape":"~Talɣa",
 "~Sheet":"~Ifer",
 "~Show":"Beqqeḍ",
 "~Show Details":"Beqqeḍ ifatusen",
diff --git a/loleaflet/l10n/uno/kk.json b/loleaflet/l10n/uno/kk.json
index 3b1bf8c6a..b30c14b82 100644
--- a/loleaflet/l10n/uno/kk.json
+++ b/loleaflet/l10n/uno/kk.json
@@ -332,6 +332,7 @@
 "~Select...":"~Таңдау...",
 "~Send to Back":"~Артқы көрініске",
 "~Sentence case":"Сө~йлемдерде сияқты",
+"~Shape":"~Фигура",
 "~Sheet":"~Парақ",
 "~Show":"~Көрсету",
 "~Show Details":"Көбірек ақпараты көр~сету",
diff --git a/loleaflet/l10n/uno/ko.json b/loleaflet/l10n/uno/ko.json
index 37ff8b7b3..ac7bf3ebe 100644
--- a/loleaflet/l10n/uno/ko.json
+++ b/loleaflet/l10n/uno/ko.json
@@ -327,6 +327,7 @@
 "~Select":"선택(~S)",
 "~Send to Back":"맨 뒤로(~S)",
 "~Sentence case":"문장 대/소문자(~S)",
+"~Shape":"도형(~S)",
 "~Sheet":"시트(~S)",
 "~Show":"표시(~S)",
 "~Show Details":"세부 정보 표시(~S)",
diff --git a/loleaflet/l10n/uno/lt.json b/loleaflet/l10n/uno/lt.json
index 1c218de27..3182dd69b 100644
--- a/loleaflet/l10n/uno/lt.json
+++ b/loleaflet/l10n/uno/lt.json
@@ -331,6 +331,7 @@
 "~Select...":"~Parinkti…",
 "~Send to Back":"Perkelti į pagrindą",
 "~Sentence case":"Sakinio registras",
+"~Shape":"~Figūra",
 "~Sheet":"Lakštas",
 "~Show":"Rodyti pataisas",
 "~Show Details":"Rodyti išsamiai",
diff --git a/loleaflet/l10n/uno/lv.json b/loleaflet/l10n/uno/lv.json
index 8d9f6b9cd..dbd8d18ec 100644
--- a/loleaflet/l10n/uno/lv.json
+++ b/loleaflet/l10n/uno/lv.json
@@ -332,6 +332,7 @@
 "~Select...":"Izvēlētie~s...",
 "~Send to Back":"~Novietot aizmugurē",
 "~Sentence case":"~Teikuma lielie",
+"~Shape":"~Figūra",
 "~Sheet":"Lok~sne",
 "~Show":"~Rādīt",
 "~Show Details":"Rādīt detaļa~s",
diff --git a/loleaflet/l10n/uno/nb.json b/loleaflet/l10n/uno/nb.json
index 95456deba..8e8e29706 100644
--- a/loleaflet/l10n/uno/nb.json
+++ b/loleaflet/l10n/uno/nb.json
@@ -332,6 +332,7 @@
 "~Select...":"Velg …",
 "~Send to Back":"Flytt b~akerst",
 "~Sentence case":"~Setningstørrelse",
+"~Shape":"~Form",
 "~Sheet":"~Ark",
 "~Show":"~Vis",
 "~Show Details":"~Vis detaljer",
diff --git a/loleaflet/l10n/uno/nl.json b/loleaflet/l10n/uno/nl.json
index fffd4e9dd..848b5db80 100644
--- a/loleaflet/l10n/uno/nl.json
+++ b/loleaflet/l10n/uno/nl.json
@@ -332,6 +332,7 @@
 "~Select...":"~Selecteren...",
 "~Send to Back":"~Achteraan",
 "~Sentence case":"~Zin begint met een hoofdletter",
+"~Shape":"V~orm",
 "~Sheet":"B~lad",
 "~Show":"~Weergeven",
 "~Show Details":"~Details weergeven",
diff --git a/loleaflet/l10n/uno/nn.json b/loleaflet/l10n/uno/nn.json
index 954524a1c..76ed95ae1 100644
--- a/loleaflet/l10n/uno/nn.json
+++ b/loleaflet/l10n/uno/nn.json
@@ -332,6 +332,7 @@
 "~Select...":"~Vel …",
 "~Send to Back":"Flytt b~akarst",
 "~Sentence case":"~Setningsstorleik",
+"~Shape":"~Form",
 "~Sheet":"~Ark",
 "~Show":"~Vis",
 "~Show Details":"~Vis detaljar",
diff --git a/loleaflet/l10n/uno/oc.json b/loleaflet/l10n/uno/oc.json
index 133199441..f9c44b229 100644
--- a/loleaflet/l10n/uno/oc.json
+++ b/loleaflet/l10n/uno/oc.json
@@ -322,6 +322,7 @@
 "~Select":"~Seleccionar",
 "~Send to Back":"~Mandar enrèire",
 "~Sentence case":"~Cassa de frasa",
+"~Shape":"~Formas",
 "~Sheet":"~Fuèlh",
 "~Show":"~Afichar",
 "~Show Details":"A~fichar los detalhs",
diff --git a/loleaflet/l10n/uno/pl.json b/loleaflet/l10n/uno/pl.json
index 65546fac6..38c2d0ee0 100644
--- a/loleaflet/l10n/uno/pl.json
+++ b/loleaflet/l10n/uno/pl.json
@@ -332,6 +332,7 @@
 "~Select...":"Zaznacz",
 "~Send to Back":"Prze~suń na spód",
 "~Sentence case":"~Jak w zdaniu",
+"~Shape":"K~ształt",
 "~Sheet":"Arku~sz",
 "~Show":"Pokaż",
 "~Show Details":"Pokaż ~szczegóły",
diff --git a/loleaflet/l10n/uno/pt-BR.json b/loleaflet/l10n/uno/pt-BR.json
index d5da11e11..013ec6f3c 100644
--- a/loleaflet/l10n/uno/pt-BR.json
+++ b/loleaflet/l10n/uno/pt-BR.json
@@ -160,6 +160,7 @@
 "Lis~ts":"Lis~tas",
 "L~ine...":"L~inha...",
 "Manage...":"Gerenciar...",
+"Master Slides":"Slides mestres",
 "Merge Cells":"Mesclar células",
 "More ~Filters":"Mais ~filtros",
 "Move Down":"Mover para baixo",
@@ -195,6 +196,7 @@
 "Reply Comment":"Responder à anotação",
 "Reset Data Point":"Redefinir ponto de dados",
 "Reset all Data Points":"Redefinir todos os pontos de dados",
+"Resolved Comments":"Anotações resolvidas",
 "Restart Numbering":"Reiniciar numeração",
 "Right":"À direita",
 "Right-To-Left":"Da direita para a esquerda",
@@ -332,6 +334,7 @@
 "~Select...":"~Selecionar...",
 "~Send to Back":"Enviar ~para trás",
 "~Sentence case":"Fra~se iniciando com maiúscula",
+"~Shape":"~Forma",
 "~Sheet":"~Planilha",
 "~Show":"Mo~strar",
 "~Show Details":"Mostrar detalhe~s",
diff --git a/loleaflet/l10n/uno/pt.json b/loleaflet/l10n/uno/pt.json
index ff2f843b4..a1b8a08b2 100644
--- a/loleaflet/l10n/uno/pt.json
+++ b/loleaflet/l10n/uno/pt.json
@@ -332,6 +332,7 @@
 "~Select...":"~Selecionar...",
 "~Send to Back":"~Enviar para trás",
 "~Sentence case":"Maiú~scula no início da frase",
+"~Shape":"~Forma",
 "~Sheet":"~Folha",
 "~Show":"~Mostrar",
 "~Show Details":"Mos~trar detalhes",
diff --git a/loleaflet/l10n/uno/ro.json b/loleaflet/l10n/uno/ro.json
index ec8f187a9..43475ad76 100644
--- a/loleaflet/l10n/uno/ro.json
+++ b/loleaflet/l10n/uno/ro.json
@@ -287,6 +287,7 @@
 "~Select":"~Selectare",
 "~Send to Back":"Trimite în ~spate de tot",
 "~Sentence case":"~Literă început propoziție",
+"~Shape":"~Formă",
 "~Sheet":"~Foaie",
 "~Show":"~Arată",
 "~Show Details":"~Afișează detalii",
diff --git a/loleaflet/l10n/uno/ru.json b/loleaflet/l10n/uno/ru.json

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list