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