capabilities.json                         |    5 --
 configure.ac                              |    2 -
 debian/changelog                          |    6 +++
 debian/control                            |    2 -
 etc/apache2/loolwsd.conf                  |    4 ++
 etc/nginx/loolwsd.conf                    |    6 +++
 loleaflet/po/ui-de.po                     |    2 -
 loleaflet/po/ui-es.po                     |    2 -
 loleaflet/po/ui-fr.po                     |    2 -
 loleaflet/po/ui-ja.po                     |    2 -
 loleaflet/po/ui-pt.po                     |    2 -
 loleaflet/src/control/Control.Scroll.js   |    2 -
 loleaflet/src/control/Parts.js            |    2 -
 loleaflet/src/layer/tile/TileLayer.js     |   55 +++++++++++++++++++-----------
 loleaflet/src/map/Map.js                  |   22 +++---------
 loleaflet/src/map/handler/Map.Keyboard.js |    8 ++++
 loleaflet/src/map/handler/Map.Scroll.js   |    2 -
 loolwsd.spec.in                           |    4 +-
 tools/Config.cpp                          |   10 +++++
 wsd/LOOLWSD.cpp                           |   28 +++------------
 20 files changed, 95 insertions(+), 73 deletions(-)

New commits:
commit 49ae58ece98c9457b1b33e9f3082e71ee0ae6125
Author:     Andras Timar <andras.ti...@collabora.com>
AuthorDate: Tue Dec 4 22:36:39 2018 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Dec 4 22:36:39 2018 +0100

    loleaflet: updated translations
    
    Change-Id: I987c2056b08174d7e0b2e3665602a97169c28809

diff --git a/loleaflet/po/ui-de.po b/loleaflet/po/ui-de.po
index b4bfd002e..39fbd8f67 100644
--- a/loleaflet/po/ui-de.po
+++ b/loleaflet/po/ui-de.po
@@ -834,4 +834,4 @@ msgstr "Hochladen..."
 
 #: src/map/handler/Map.WOPI.js:250
 msgid "Creating copy..."
-msgstr ""
+msgstr "Kopie erstellen..."
diff --git a/loleaflet/po/ui-es.po b/loleaflet/po/ui-es.po
index 359a3e8bd..cd7ede66b 100644
--- a/loleaflet/po/ui-es.po
+++ b/loleaflet/po/ui-es.po
@@ -834,4 +834,4 @@ msgstr "Cargando…"
 
 #: src/map/handler/Map.WOPI.js:250
 msgid "Creating copy..."
-msgstr ""
+msgstr "Creando una copia…"
diff --git a/loleaflet/po/ui-fr.po b/loleaflet/po/ui-fr.po
index ba5c45f80..bedc37e7e 100644
--- a/loleaflet/po/ui-fr.po
+++ b/loleaflet/po/ui-fr.po
@@ -834,4 +834,4 @@ msgstr "Chargement…"
 
 #: src/map/handler/Map.WOPI.js:250
 msgid "Creating copy..."
-msgstr ""
+msgstr "Création d'une copie..."
diff --git a/loleaflet/po/ui-ja.po b/loleaflet/po/ui-ja.po
index 0a5d8aa63..398c80394 100644
--- a/loleaflet/po/ui-ja.po
+++ b/loleaflet/po/ui-ja.po
@@ -834,4 +834,4 @@ msgstr "アップロード中..."
 
 #: src/map/handler/Map.WOPI.js:250
 msgid "Creating copy..."
-msgstr ""
+msgstr "コピーの作成..."
diff --git a/loleaflet/po/ui-pt.po b/loleaflet/po/ui-pt.po
index 12abf33e1..a9007b833 100644
--- a/loleaflet/po/ui-pt.po
+++ b/loleaflet/po/ui-pt.po
@@ -834,4 +834,4 @@ msgstr "A enviar..."
 
 #: src/map/handler/Map.WOPI.js:250
 msgid "Creating copy..."
-msgstr ""
+msgstr "Criar uma cópia..."
commit 16e6a04f4c8ae3e2f8323146d1e00a1b56906ada
Author:     Andras Timar <andras.ti...@collabora.com>
AuthorDate: Thu Nov 29 15:37:19 2018 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Dec 4 22:19:02 2018 +0100

    Bump package version to 3.4.2-1
    
    Change-Id: I6287e625e8049a9962ef64bb01d6ba0a783f24e7
    (cherry picked from commit e503dc1c82fd33f3191824f694b55fccc217e8da)

diff --git a/configure.ac b/configure.ac
index c213ed383..495767fcf 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,7 +3,7 @@
 
 AC_PREREQ([2.63])
 
-AC_INIT([loolwsd], [3.4.1], [libreoffice@lists.freedesktop.org])
+AC_INIT([loolwsd], [3.4.2], [libreoffice@lists.freedesktop.org])
 LT_INIT([shared, disable-static, dlopen])
 
 AM_INIT_AUTOMAKE([1.10 subdir-objects tar-pax -Wno-portability])
diff --git a/debian/changelog b/debian/changelog
index 5438841d7..0ed964368 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+loolwsd (3.4.2-1) unstable; urgency=medium
+
+  * see the git log: http://col.la/coolcd34
+
+ -- Andras Timar <andras.ti...@collabora.com>  Thu, 29 Nov 2018 15:30:00 +0100
+
 loolwsd (3.4.1-2) unstable; urgency=medium
 
   * see the git log: http://col.la/coolcd34
diff --git a/debian/control b/debian/control
index 4ca2f3292..2dcc6ca2e 100644
--- a/debian/control
+++ b/debian/control
@@ -8,7 +8,7 @@ Standards-Version: 3.9.7
 Package: loolwsd
 Section: web
 Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}, adduser, fontconfig, libsm6, 
libxinerama1, libxrender1, libgl1-mesa-glx, libcups2, libcurl3-gnutls, cpio, 
libcap2-bin, libexpat1, libicu55, libjpeg-turbo8, libnss3, libpng12-0, 
libpoppler58, libxcb-render0, libxcb-shm0, libxml2, libxslt1.1, 
collaboraofficebasis5.3-calc (>= 5.3.10.60), collaboraofficebasis5.3-core (>= 
5.3.10.60), collaboraofficebasis5.3-graphicfilter (>= 5.3.10.60), 
collaboraofficebasis5.3-images (>= 5.3.10.60), collaboraofficebasis5.3-impress 
(>= 5.3.10.60), collaboraofficebasis5.3-ooofonts (>= 5.3.10.60), 
collaboraofficebasis5.3-writer (>= 5.3.10.60), collaboraoffice5.3 (>= 
5.3.10.60), collaboraoffice5.3-ure (>= 5.3.10.60), 
collaboraofficebasis5.3-en-us (>= 5.3.10.60), 
collaboraofficebasis5.3-en-us-calc (>= 5.3.10.60), 
collaboraofficebasis5.3-en-us-res (>= 5.3.10.60), 
collaboraofficebasis5.3-noto-fonts (>= 5.3.10.60), collaboraofficebasis5.3-draw 
(>= 5.3.10.60), collaboraofficebasis5.3-extension-pdf-import (>= 5.3.10.60)
 , collaboraofficebasis5.3-filter-data (>= 5.3.10.60), 
collaboraofficebasis5.3-ooolinguistic (>= 5.3.10.60)
+Depends: ${shlibs:Depends}, ${misc:Depends}, adduser, fontconfig, libsm6, 
libxinerama1, libxrender1, libgl1-mesa-glx, libcups2, libcurl3-gnutls, cpio, 
libcap2-bin, libexpat1, libicu55, libjpeg-turbo8, libnss3, libpng12-0, 
libpoppler58, libxcb-render0, libxcb-shm0, libxml2, libxslt1.1, 
collaboraofficebasis5.3-calc (>= 5.3.10.61), collaboraofficebasis5.3-core (>= 
5.3.10.61), collaboraofficebasis5.3-graphicfilter (>= 5.3.10.61), 
collaboraofficebasis5.3-images (>= 5.3.10.61), collaboraofficebasis5.3-impress 
(>= 5.3.10.61), collaboraofficebasis5.3-ooofonts (>= 5.3.10.61), 
collaboraofficebasis5.3-writer (>= 5.3.10.61), collaboraoffice5.3 (>= 
5.3.10.61), collaboraoffice5.3-ure (>= 5.3.10.61), 
collaboraofficebasis5.3-en-us (>= 5.3.10.61), 
collaboraofficebasis5.3-en-us-calc (>= 5.3.10.61), 
collaboraofficebasis5.3-en-us-res (>= 5.3.10.61), 
collaboraofficebasis5.3-noto-fonts (>= 5.3.10.61), collaboraofficebasis5.3-draw 
(>= 5.3.10.61), collaboraofficebasis5.3-extension-pdf-import (>= 5.3.10.61)
 , collaboraofficebasis5.3-filter-data (>= 5.3.10.61), 
collaboraofficebasis5.3-ooolinguistic (>= 5.3.10.61)
 Conflicts: collaboraofficebasis5.3-gnome-integration, 
collaboraofficebasis5.3-kde-integration
 Description: LibreOffice Online WebSocket Daemon
  LOOLWSD is a daemon that talks to web browser clients and provides LibreOffice
diff --git a/loolwsd.spec.in b/loolwsd.spec.in
index 37b8e76da..3ef3e6919 100644
--- a/loolwsd.spec.in
+++ b/loolwsd.spec.in
@@ -38,7 +38,7 @@ BuildRequires:  libcap-progs linux-glibc-devel 
systemd-rpm-macros
 BuildRequires:  libcap-progs
 %endif
 
-Requires:       collaboraoffice5.3 >= 5.3.10.60 collaboraoffice5.3-ure >= 
5.3.10.60 collaboraofficebasis5.3-core >= 5.3.10.60 
collaboraofficebasis5.3-writer >= 5.3.10.60 collaboraofficebasis5.3-impress >= 
5.3.10.60 collaboraofficebasis5.3-graphicfilter >= 5.3.10.60 
collaboraofficebasis5.3-en-US >= 5.3.10.60 collaboraofficebasis5.3-calc >= 
5.3.10.60 collaboraofficebasis5.3-en-US-res >= 5.3.10.60 
collaboraofficebasis5.3-en-US-calc >= 5.3.10.60 
collaboraofficebasis5.3-ooofonts >= 5.3.10.60 collaboraofficebasis5.3-images >= 
5.3.10.60 collaboraofficebasis5.3-noto-fonts >= 5.3.10.60 
collaboraofficebasis5.3-draw >= 5.3.10.60 
collaboraofficebasis5.3-extension-pdf-import >= 5.3.10.60 
collaboraofficebasis5.3-filter-data >= 5.3.10.60 
collaboraofficebasis5.3-ooolinguistic >= 5.3.10.60
+Requires:       collaboraoffice5.3 >= 5.3.10.61 collaboraoffice5.3-ure >= 
5.3.10.61 collaboraofficebasis5.3-core >= 5.3.10.61 
collaboraofficebasis5.3-writer >= 5.3.10.61 collaboraofficebasis5.3-impress >= 
5.3.10.61 collaboraofficebasis5.3-graphicfilter >= 5.3.10.61 
collaboraofficebasis5.3-en-US >= 5.3.10.61 collaboraofficebasis5.3-calc >= 
5.3.10.61 collaboraofficebasis5.3-en-US-res >= 5.3.10.61 
collaboraofficebasis5.3-en-US-calc >= 5.3.10.61 
collaboraofficebasis5.3-ooofonts >= 5.3.10.61 collaboraofficebasis5.3-images >= 
5.3.10.61 collaboraofficebasis5.3-noto-fonts >= 5.3.10.61 
collaboraofficebasis5.3-draw >= 5.3.10.61 
collaboraofficebasis5.3-extension-pdf-import >= 5.3.10.61 
collaboraofficebasis5.3-filter-data >= 5.3.10.61 
collaboraofficebasis5.3-ooolinguistic >= 5.3.10.61
 Conflicts:      collaboraofficebasis5.3-kde-integration 
collaboraofficebasis5.3-gnome-integration
 Requires(post): coreutils grep sed
 %if 0%{?rhel} == 6
@@ -66,7 +66,7 @@ Requires:       libcap2 libpng12-0 %{fillup_prereq}
 %if 0%{?suse_version} >= 1300
 Requires:       systemd
 Requires:       libopenssl1_0_0 libpcre1 libz1
-Requires:       libPocoCrypto60 >= 1.9.0 libPocoFoundation60 >= 1.9.0 
libPocoJSON60 >= 1.9.0 libPocoNet60 >= 1.9.0 libPocoNetSSL60 >= 1.9.0 
libPocoUtil60 >= 1.9.0 libPocoXML60 >= 1.9.0
+Requires:       libPocoCrypto61 >= 1.9.0 libPocoFoundation61 >= 1.9.0 
libPocoJSON61 >= 1.9.0 libPocoNet61 >= 1.9.0 libPocoNetSSL61 >= 1.9.0 
libPocoUtil61 >= 1.9.0 libPocoXML61 >= 1.9.0
 # Collabora Office dependencies (unfortunately Collabora Office RPM packages 
do not have real dependencies)
 # cd /opt/collaboraoffice5.3/program ; for i in soffice.bin *.so ;do ldd $i | 
grep '=>' | sed -e "s/^.*=> //" -e "s/ [(].*$//"; done | sort | uniq | xargs 
rpm -qf --qf="%{NAME}\n" | sort | uniq | grep -v collaboraoffice
 Requires:       Mesa-libGL1 Mesa-libglapi0 cups-libs fontconfig krb5 
libavahi-client3 libavahi-common3 libavahi-glib1 libbz2-1 libcom_err2 
libdbus-1-3 libdrm2 libexpat1 libfreetype6 libkeyutils1 libpng16-16 libuuid1 
libICE6 libselinux1 libSM6 libX11-6 libX11-xcb1 libXau6 libxcb1 libxcb-dri2-0 
libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-render0 libxcb-shm0 
libxcb-sync1 libXdamage1 libXext6 libXfixes3 libXrender1 libxshmfence1 
libXxf86vm1
commit b30e2ef61ab73467ca703eed806141761401d7d0
Author:     Andras Timar <andras.ti...@collabora.com>
AuthorDate: Thu Nov 29 21:57:40 2018 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Dec 4 22:15:22 2018 +0100

    add the /hosting/capabilities endpoint to the example reverse proxy configs
    
    Change-Id: Ia4c2e4a54549af89071752c631a9ae5fed678c63
    Reviewed-on: https://gerrit.libreoffice.org/64289
    Reviewed-by: Andras Timar <andras.ti...@collabora.com>
    Tested-by: Andras Timar <andras.ti...@collabora.com>
    (cherry picked from commit d02d1983e164b322dc3f46753433bcb23c871ce6)

diff --git a/etc/apache2/loolwsd.conf b/etc/apache2/loolwsd.conf
index 10b66b47f..7ccfe0051 100644
--- a/etc/apache2/loolwsd.conf
+++ b/etc/apache2/loolwsd.conf
@@ -20,6 +20,10 @@
   ProxyPass           /hosting/discovery 
http://127.0.0.1:9980/hosting/discovery retry=0
   ProxyPassReverse    /hosting/discovery 
http://127.0.0.1:9980/hosting/discovery
 
+  # Capabilities
+  ProxyPass           /hosting/capabilities 
http://127.0.0.1:9980/hosting/capabilities retry=0
+  ProxyPassReverse    /hosting/capabilities 
http://127.0.0.1:9980/hosting/capabilities
+
   # Main websocket
   ProxyPassMatch "/lool/(.*)/ws$" ws://127.0.0.1:9980/lool/$1/ws nocanon
 
diff --git a/etc/nginx/loolwsd.conf b/etc/nginx/loolwsd.conf
index f55f8829b..e176760b9 100644
--- a/etc/nginx/loolwsd.conf
+++ b/etc/nginx/loolwsd.conf
@@ -10,6 +10,12 @@
         proxy_set_header Host $http_host;
     }
 
+    # Capabilities
+    location ^~ /hosting/capabilities {
+        proxy_pass http://localhost:9980;
+        proxy_set_header Host $http_host;
+    }
+
     # main websocket
     location ~ ^/lool/(.*)/ws$ {
         proxy_pass http://localhost:9980;
commit 077e82803816fa17c6e692f08d6f957bb45286fe
Author:     Jan Holesovsky <ke...@collabora.com>
AuthorDate: Thu Nov 29 19:15:58 2018 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Dec 4 22:15:18 2018 +0100

    capabilities: Don't rely on existence of the file, compose it completely.
    
    Change-Id: I41588afa9f26b4a2575ee8cf7d9837cc79b31b3e
    Reviewed-on: https://gerrit.libreoffice.org/64302
    Reviewed-by: Andras Timar <andras.ti...@collabora.com>
    Tested-by: Andras Timar <andras.ti...@collabora.com>
    (cherry picked from commit 0c0f71ae3842e2debfafa5d14f11569182746916)

diff --git a/capabilities.json b/capabilities.json
deleted file mode 100644
index 32ed3801f..000000000
--- a/capabilities.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "convert-to": {
-    "available": false
-  }
-}
diff --git a/wsd/LOOLWSD.cpp b/wsd/LOOLWSD.cpp
index 19fd798ae..e0536ecd2 100644
--- a/wsd/LOOLWSD.cpp
+++ b/wsd/LOOLWSD.cpp
@@ -2622,31 +2622,17 @@ private:
     {
         std::shared_ptr<StreamSocket> socket = _socket.lock();
 
-        // http://server/hosting/capabilities
-#if defined __linux && defined MOBILEAPP
-        std::string capabilitiesPath = 
Path(Application::instance().commandPath()).parent().parent().toString() + 
"capabilities.json";
-#else
-        std::string capabilitiesPath = 
Path(Application::instance().commandPath()).parent().toString() + 
"capabilities.json";
-#endif
-        if (!File(capabilitiesPath).exists())
-        {
-            capabilitiesPath = LOOLWSD::FileServerRoot + "/capabilities.json";
-        }
-        std::ifstream ifs (capabilitiesPath.c_str(), std::ifstream::in);
-
-        if(!ifs.is_open())
-            return "";
-
-        Poco::JSON::Parser parser;
-        Poco::Dynamic::Var jsonFile = parser.parse(ifs);
-        Poco::JSON::Object::Ptr features = 
jsonFile.extract<Poco::JSON::Object::Ptr>();
-        Poco::JSON::Object::Ptr convert_to = 
features->get("convert-to").extract<Poco::JSON::Object::Ptr>();
-
+        // Can the convert-to be used?
+        Poco::JSON::Object::Ptr convert_to = new Poco::JSON::Object;
         Poco::Dynamic::Var available = allowConvertTo(socket->clientAddress(), 
request);
         convert_to->set("available", available);
 
+        // Compose the content of http://server/hosting/capabilities
+        Poco::JSON::Object::Ptr capabilities = new Poco::JSON::Object;
+        capabilities->set("convert-to", convert_to);
+
         std::ostringstream ostrJSON;
-        features->stringify(ostrJSON);
+        capabilities->stringify(ostrJSON);
         return ostrJSON.str();
     }
 
commit 9ee24656fcaae1524afc006d5746dc9f18cf9e46
Author:     Tor Lillqvist <t...@collabora.com>
AuthorDate: Thu Nov 29 13:47:55 2018 +0200
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Dec 4 22:15:14 2018 +0100

    Do pass Alt + non-printing keys through with the Alt modifier intact
    
    Such commands are used for formatting functionality. (For instance,
    Alt+Left or Alt+Right to shrink or grow a column in a spreadsheet, or
    Alt+Enter to insert a paragraph just before a table in a text
    document.)
    
    All the uses of Alt in the meaning "alternate character input" on an
    Apple keyboard are with keys for printing characters, like Alt+2 = @
    on a Swedish/Finnish keyboard.
    
    Change-Id: I6cfde57f540ac92c63420c8d7344102645050dd0
    Reviewed-on: https://gerrit.libreoffice.org/64248
    Reviewed-by: Andras Timar <andras.ti...@collabora.com>
    Tested-by: Andras Timar <andras.ti...@collabora.com>
    (cherry picked from commit addf7210a741e726a1ac3621e56e3067247dd852)

diff --git a/loleaflet/src/map/handler/Map.Keyboard.js 
b/loleaflet/src/map/handler/Map.Keyboard.js
index 4e489b075..336c6b0b0 100644
--- a/loleaflet/src/map/handler/Map.Keyboard.js
+++ b/loleaflet/src/map/handler/Map.Keyboard.js
@@ -301,8 +301,10 @@ L.Map.Keyboard = L.Handler.extend({
                        inputEle.value = '';
                }
 
-               if (this.modifier == this.keyModifier.alt || this.modifier == 
this.keyModifier.shift + this.keyModifier.alt) {
+               if ((this.modifier == this.keyModifier.alt || this.modifier == 
this.keyModifier.shift + this.keyModifier.alt) &&
+                   keyCode >= 48) {
                        // Presumably a Mac or iOS client accessing a "special 
character". Just ignore the alt modifier.
+                       // But don't ignore it for Alt + non-printing keys.
                        this.modifier -= alt;
                        alt = 0;
                }
commit 0094bf97b2b2f1c3ae7a5aa2bb91446f0ebb2cb9
Author:     Andras Timar <andras.ti...@collabora.com>
AuthorDate: Tue Nov 13 14:32:37 2018 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Dec 4 22:15:10 2018 +0100

    ask for username (default to 'admin' if nothing set) with 'loolconfig 
set-admin-password'
    
    Change-Id: I04bf3d225e4149ed69bc55e14d1ced1dd3f8f7ea
    (cherry picked from commit 96760c5e4312e924cbce550bced14384dfce940b)
    Reviewed-on: https://gerrit.libreoffice.org/63330
    Reviewed-by: Michael Meeks <michael.me...@collabora.com>
    Tested-by: Michael Meeks <michael.me...@collabora.com>
    (cherry picked from commit 40cf25a8a33c55e089b53794efc170c831c18fe2)

diff --git a/tools/Config.cpp b/tools/Config.cpp
index 6134e0e94..6a147e01b 100644
--- a/tools/Config.cpp
+++ b/tools/Config.cpp
@@ -209,6 +209,15 @@ int Config::main(const std::vector<std::string>& args)
         RAND_bytes(salt, _adminConfig.pwdSaltLength);
         std::stringstream stream;
 
+        // Ask for admin username
+        std::string adminUser;
+        std::cout << "Enter admin username [admin]: ";
+        std::getline(std::cin, adminUser);
+        if (adminUser.empty())
+        {
+            adminUser = "admin";
+        }
+
         // Ask for user password
         termios oldTermios;
         tcgetattr(STDIN_FILENO, &oldTermios);
@@ -255,6 +264,7 @@ int Config::main(const std::vector<std::string>& args)
         std::stringstream pwdConfigValue("pbkdf2.sha512.", std::ios_base::in | 
std::ios_base::out | std::ios_base::ate);
         pwdConfigValue << std::to_string(_adminConfig.pwdIterations) << ".";
         pwdConfigValue << saltHash << "." << passwordHash;
+        _loolConfig.setString("admin_console.username", adminUser);
         _loolConfig.setString("admin_console.secure_password[@desc]",
                               "Salt and password hash combination generated 
using PBKDF2 with SHA512 digest.");
         _loolConfig.setString("admin_console.secure_password", 
pwdConfigValue.str());
commit f166d5e4a5adc70ea08cc4a5f26742783660caa5
Author:     Michael Meeks <michael.me...@collabora.com>
AuthorDate: Fri Nov 23 12:47:33 2018 +0000
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Dec 4 22:15:05 2018 +0100

    Show cursor, even with a selected graphic / shape.
    
    Change-Id: I18f63a5cd4bb2673827b1bc8d64e53df1a09b4f9
    Reviewed-on: https://gerrit.libreoffice.org/63960
    Reviewed-by: Andras Timar <andras.ti...@collabora.com>
    Tested-by: Andras Timar <andras.ti...@collabora.com>
    (cherry picked from commit 6b11b66625e0a4a27539b19ccadf1d0295689b4e)

diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index ebae1bbd7..106a16503 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -1490,7 +1490,7 @@ L.TileLayer = L.GridLayer.extend({
                && this._isCursorVisible        // only when LOK has told us it 
is ok
                && this._isFocused              // not when document is not 
focused
                && !this._isZooming             // not when zooming
-               && !this.isGraphicVisible()     // not when sizing / 
positioning graphics
+//             && !this.isGraphicVisible()     // not when sizing / 
positioning graphics
                && !this._isEmptyRectangle(this._visibleCursor)) {
                        this._updateCursorPos();
                }
commit 39bee53c6c17302d19718138b728f5a46a30bf31
Author:     Tor Lillqvist <t...@collabora.com>
AuthorDate: Wed Oct 24 18:37:17 2018 +0300
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Dec 4 22:15:00 2018 +0100

    tdf#120438: Don't handle a lone "alt" modifier in any special way
    
    It is likely a Mac browser client simply accessing a "special
    character" on their keyboard. (Or an iOS browser client using a
    physical keyboard.) Like alt+8 to get '[' on a Swedish/Finnish Apple
    keyboard, or alt+shift+2 to get '€' on a US English Apple keyboard.
    
    Change-Id: I94b49d64db87324ff2a5cd5f50226d3c537b68e6
    Reviewed-on: https://gerrit.libreoffice.org/62315
    Reviewed-by: Tor Lillqvist <t...@collabora.com>
    Tested-by: Tor Lillqvist <t...@collabora.com>
    (cherry picked from commit 1e97cfc2d2a8ee3e296ddfb7a331466bede4a575)
    Reviewed-on: https://gerrit.libreoffice.org/64166
    Reviewed-by: Andras Timar <andras.ti...@collabora.com>
    Tested-by: Andras Timar <andras.ti...@collabora.com>
    (cherry picked from commit 80e91e5e3935b46bb8a9c084b04a863ff90436e4)

diff --git a/loleaflet/src/map/handler/Map.Keyboard.js 
b/loleaflet/src/map/handler/Map.Keyboard.js
index f5d3282da..4e489b075 100644
--- a/loleaflet/src/map/handler/Map.Keyboard.js
+++ b/loleaflet/src/map/handler/Map.Keyboard.js
@@ -301,6 +301,12 @@ L.Map.Keyboard = L.Handler.extend({
                        inputEle.value = '';
                }
 
+               if (this.modifier == this.keyModifier.alt || this.modifier == 
this.keyModifier.shift + this.keyModifier.alt) {
+                       // Presumably a Mac or iOS client accessing a "special 
character". Just ignore the alt modifier.
+                       this.modifier -= alt;
+                       alt = 0;
+               }
+
                var unoKeyCode = this._toUNOKeyCode(keyCode);
 
                if (this.modifier) {
commit 93237e72a333608aad93e401191bd7abdf91fedf
Author:     Michael Meeks <michael.me...@collabora.com>
AuthorDate: Sat Oct 6 22:37:50 2018 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Dec 4 22:14:56 2018 +0100

    Simplify cursor visibility.
    
    Removes race conditions between kit messages and browser.
    Avoid storing old state wherever possible.
    Change-Id: I56aa57df22a4190881c8d197df8445ca542d4fc1
    
    cursor simplify.
    Don't show cursor when graphics are selected either.
    Change-Id: I0a604d73bd1818317a2b04d8bdd392d1d6472627
    
    Hide other view cursors on zoom.
    Change-Id: I9e953f841b5c526b499f9170aef9b2682011947e
    
    (cherry picked from commit 98fe14c28e94ef499f27d1b1b585a199961fcf7f)

diff --git a/loleaflet/src/control/Parts.js b/loleaflet/src/control/Parts.js
index 21c8525fd..c37636bc6 100644
--- a/loleaflet/src/control/Parts.js
+++ b/loleaflet/src/control/Parts.js
@@ -21,7 +21,7 @@ L.Map.include({
                else {
                        return;
                }
-               if (docLayer._isCursorOverlayVisible) {
+               if (docLayer.isCursorVisible()) {
                        // a click outside the slide to clear any selection
                        this._socket.sendMessage('resetselection');
                }
diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index b3f45581d..ebae1bbd7 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -75,10 +75,10 @@ L.TileLayer = L.GridLayer.extend({
                this._documentInfo = '';
                // Position and size of the visible cursor.
                this._visibleCursor = new L.LatLngBounds(new L.LatLng(0, 0), 
new L.LatLng(0, 0));
-               // Cursor overlay is visible or hidden (for blinking).
-               this._isCursorOverlayVisible = false;
-               // Cursor overlay visibility flag to store last state during 
zooming
-               this._oldCursorOverlayVisibility = false;
+               // Do we have focus - ie. should we render a cursor
+               this._isFocused = true;
+               // Are we zooming currently ? - if so, no cursor.
+               this._isZooming = false;
                // Cursor is visible or hidden (e.g. for graphic selection).
                this._isCursorVisible = true;
                // Original rectangle graphic selection in twips
@@ -531,7 +531,6 @@ L.TileLayer = L.GridLayer.extend({
        _onCursorVisibleMsg: function(textMsg) {
                var command = textMsg.match('cursorvisible: true');
                this._isCursorVisible = command ? true : false;
-               this._isCursorOverlayVisible = true;
                this._onUpdateCursor();
        },
 
@@ -745,8 +744,6 @@ L.TileLayer = L.GridLayer.extend({
                this._visibleCursor = new L.LatLngBounds(
                                                
this._twipsToLatLng(topLeftTwips, this._map.getZoom()),
                                                
this._twipsToLatLng(bottomRightTwips, this._map.getZoom()));
-               this._visibleCursorOnLostFocus = this._visibleCursor;
-               this._isCursorOverlayVisible = true;
                if ((docLayer._followEditor || docLayer._followUser) && 
this._map.lastActionByUser) {
                        this._map.fire('setFollowOff');
                }
@@ -1354,8 +1351,7 @@ L.TileLayer = L.GridLayer.extend({
        },
 
        _clearSelections: function () {
-               // hide the cursor
-               this._isCursorOverlayVisible = false;
+               // hide the cursor if not editable
                this._onUpdateCursor();
                // hide the text selection
                this._selections.clearLayers();
@@ -1432,15 +1428,16 @@ L.TileLayer = L.GridLayer.extend({
        },
 
        _onZoomStart: function () {
-               this._oldCursorOverlayVisibility = this._isCursorOverlayVisible;
-               this._isCursorOverlayVisible = false;
+               this._isZooming = true;
                this._onUpdateCursor();
+               this.updateAllViewCursors();
        },
 
 
        _onZoomEnd: function () {
-               this._isCursorOverlayVisible = this._oldCursorOverlayVisibility;
+               this._isZooming = false;
                this._onUpdateCursor();
+               this.updateAllViewCursors();
        },
 
        _updateCursorPos: function () {
@@ -1481,7 +1478,7 @@ L.TileLayer = L.GridLayer.extend({
                this.eachView(this._viewCursors, function (item) {
                        var viewCursorMarker = item.marker;
                        if (viewCursorMarker) {
-                               
viewCursorMarker.setOpacity(this._map.hasLayer(this._cursorMarker) && 
this._cursorMarker.getLatLng().equals(viewCursorMarker.getLatLng()) ? 0 : 1);
+                               
viewCursorMarker.setOpacity(this.isCursorVisible() && 
this._cursorMarker.getLatLng().equals(viewCursorMarker.getLatLng()) ? 0 : 1);
                        }
                }, this, true);
        },
@@ -1490,14 +1487,15 @@ L.TileLayer = L.GridLayer.extend({
        // the state of the document (if the falgs are set)
        _updateCursorAndOverlay: function (update) {
                if (this._map._permission === 'edit'
-               && this._isCursorVisible
-               && this._isCursorOverlayVisible
+               && this._isCursorVisible        // only when LOK has told us it 
is ok
+               && this._isFocused              // not when document is not 
focused
+               && !this._isZooming             // not when zooming
+               && !this.isGraphicVisible()     // not when sizing / 
positioning graphics
                && !this._isEmptyRectangle(this._visibleCursor)) {
                        this._updateCursorPos();
                }
                else if (this._cursorMarker) {
                        this._map.removeLayer(this._cursorMarker);
-                       this._isCursorOverlayVisible = false;
                }
        },
 
@@ -1515,8 +1513,11 @@ L.TileLayer = L.GridLayer.extend({
                var viewCursorVisible = this._viewCursors[viewId].visible;
                var viewPart = this._viewCursors[viewId].part;
 
-               if (!this._map.isViewReadOnly(viewId) && viewCursorVisible && 
!this._isEmptyRectangle(this._viewCursors[viewId].bounds) &&
-                  (this._docType === 'text' || this._selectedPart === 
viewPart)) {
+               if (!this._map.isViewReadOnly(viewId) &&
+                   viewCursorVisible &&
+                   !this._isZooming &&
+                   !this._isEmptyRectangle(this._viewCursors[viewId].bounds) &&
+                   (this._docType === 'text' || this._selectedPart === 
viewPart)) {
                        if (!viewCursorMarker) {
                                var viewCursorOptions = {
                                        color: 
L.LOUtil.rgbToHex(this._map.getViewColor(viewId)),
@@ -1532,7 +1533,7 @@ L.TileLayer = L.GridLayer.extend({
                        else {
                                viewCursorMarker.setLatLng(viewCursorPos, 
pixBounds.getSize().multiplyBy(this._map.getZoomScale(this._map.getZoom())));
                        }
-                       
viewCursorMarker.setOpacity(this._map.hasLayer(this._cursorMarker) && 
this._cursorMarker.getLatLng().equals(viewCursorMarker.getLatLng()) ? 0 : 1);
+                       viewCursorMarker.setOpacity(this.isCursorVisible() && 
this._cursorMarker.getLatLng().equals(viewCursorMarker.getLatLng()) ? 0 : 1);
                        this._viewLayerGroup.addLayer(viewCursorMarker);
                }
                else if (viewCursorMarker) {
@@ -1540,6 +1541,20 @@ L.TileLayer = L.GridLayer.extend({
                }
        },
 
+       updateAllViewCursors : function() {
+               for (var key in this._viewCursors) {
+                       this._onUpdateViewCursor(key);
+               }
+       },
+
+       isCursorVisible: function() {
+               return this._map.hasLayer(this._cursorMarker);
+       },
+
+       isGraphicVisible: function() {
+               return this._graphicMarker && 
this._map.hasLayer(this._graphicMarker);
+       },
+
        goToViewCursor: function(viewId) {
                if (viewId === this._viewId) {
                        this._onUpdateCursor();
@@ -1706,7 +1721,6 @@ L.TileLayer = L.GridLayer.extend({
                        this._graphicMarker = 
L.rectangle(this._graphicSelection, {
                                pointerEvents: 'none',
                                fill: false});
-                       this._visibleCursor = this._visibleCursorOnLostFocus = 
this._graphicMarker._bounds;
                        if (!this._graphicMarker) {
                                this._map.fire('error', {msg: 'Graphic marker 
initialization', cmd: 'marker', kind: 'failed', id: 1});
                                return;
@@ -1721,6 +1735,7 @@ L.TileLayer = L.GridLayer.extend({
                        this._map.removeLayer(this._graphicMarker);
                        this._graphicMarker.isDragged = false;
                }
+               this._updateCursorAndOverlay();
        },
 
        _onUpdateCellCursor: function (horizontalDirection, verticalDirection, 
onPgUpDn) {
diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js
index 7a078ebd2..1dffaa458 100644
--- a/loleaflet/src/map/Map.js
+++ b/loleaflet/src/map/Map.js
@@ -988,15 +988,9 @@ L.Map = L.Evented.extend({
 
                console.debug('_onLostFocus: ');
                var doclayer = this._docLayer;
-               if (!doclayer) { return; }
-
-               // save state of cursor (blinking marker) and the cursor overlay
-               doclayer._isCursorVisibleOnLostFocus = 
doclayer._isCursorVisible;
-               doclayer._isCursorOverlayVisibleOnLostFocus = 
doclayer._isCursorOverlayVisible;
-
-               // if the blinking cursor is visible, disable the overlay when 
we go out of focus
-               if (doclayer._isCursorVisible && 
doclayer._isCursorOverlayVisible) {
-                       doclayer._isCursorOverlayVisible = false;
+               if (doclayer)
+               {
+                       doclayer._isFocused = false;
                        doclayer._updateCursorAndOverlay();
                }
 
@@ -1008,16 +1002,14 @@ L.Map = L.Evented.extend({
                if (!this._loaded) { return; }
 
                var doclayer = this._docLayer;
-               if (doclayer &&
-                   typeof doclayer._isCursorOverlayVisibleOnLostFocus !== 
'undefined' &&
-                   typeof doclayer._isCursorVisibleOnLostFocus !== 
'undefined') {
+               if (doclayer)
+               {
+                       doclayer._isFocused = true;
                        // we restore the old cursor position by a small delay, 
so that if the user clicks
                        // inside the document we skip to restore it, so that 
the user does not see the cursor
                        // jumping from the old position to the new one
                        setTimeout(function () {
-                               // restore the state that was before focus was 
lost
-                               doclayer._isCursorOverlayVisible = 
doclayer._isCursorOverlayVisibleOnLostFocus;
-                               doclayer._isCursorVisible = 
doclayer._isCursorVisibleOnLostFocus;
+                               console.debug('apply focus change in timeout');
                                doclayer._updateCursorAndOverlay();
                        }, 300);
                }
commit 586db53953d3297fe17e23f2c542db130cdc0680
Author:     Michael Meeks <michael.me...@collabora.com>
AuthorDate: Mon Nov 12 22:09:07 2018 +0000
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Tue Dec 4 22:14:50 2018 +0100

    Avoid scroll-wheel jittering, and shrink the scroll increment.
    
    Hypothetically the underlying cause is that malihu's
    scrollTo:function(val,options){ calculates data based on current state,
    dispatches asynchronous changes to that state, and can thus while
    that change is in-flight can mis-calculate subsequent changes - causing
    significant jitter.
    
    Change-Id: I3c8becead04582b05e30d7dfab233e898509cd75
    (cherry picked from commit c81dca923e5a8bef50b9509a1f5d4994a1ac8acd)

diff --git a/loleaflet/src/control/Control.Scroll.js 
b/loleaflet/src/control/Control.Scroll.js
index 4973e109d..a3fe3725c 100644
--- a/loleaflet/src/control/Control.Scroll.js
+++ b/loleaflet/src/control/Control.Scroll.js
@@ -168,7 +168,7 @@ L.Control.Scroll = L.Control.extend({
                if (e.x < 0) {
                        x = '-=' + Math.abs(e.x);
                }
-               $('.scroll-container').mCustomScrollbar('scrollTo', [y, x]);
+               $('.scroll-container').mCustomScrollbar('scrollTo', [y, x], { 
timeout: 1 });
        },
 
        _onScrollVelocity: function (e) {
diff --git a/loleaflet/src/map/handler/Map.Scroll.js 
b/loleaflet/src/map/handler/Map.Scroll.js
index 9c584ecc1..2203b6596 100644
--- a/loleaflet/src/map/handler/Map.Scroll.js
+++ b/loleaflet/src/map/handler/Map.Scroll.js
@@ -53,7 +53,7 @@ L.Map.Scroll = L.Handler.extend({
        _performScroll: function () {
                var map = this._map,
                    delta = -this._delta,
-                   scrollAmount = Math.round(map.getSize().y / 4);
+                   scrollAmount = Math.round(map.getSize().y / 20);
 
                this._delta = 0;
                this._startTime = null;
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to