common/Session.cpp           |    5 +++++
 common/Session.hpp           |    5 +++++
 kit/Kit.cpp                  |    4 ++++
 loleaflet/js/global.js       |   17 +++++++++++++++++
 loleaflet/src/core/Socket.js |    4 ++++
 loleaflet/src/map/Map.js     |    6 ++----
 wsd/ClientSession.cpp        |    5 +++++
 wsd/protocol.txt             |    5 ++++-
 8 files changed, 46 insertions(+), 5 deletions(-)

New commits:
commit 255d24ba8fc8669b4197887e69bd4406af4cba14
Author:     Marco Cecchetti <marco.cecche...@collabora.com>
AuthorDate: Mon Apr 20 21:26:21 2020 +0200
Commit:     Marco Cecchetti <marco.cecche...@collabora.com>
CommitDate: Wed Apr 29 13:18:49 2020 +0200

    forward the device form factor of the client on a new view request
    
    This patch allows the lok core to know about the device form facor of
    the client requesting the creation of a new view, immediately instead
    of a later time.
    When a request for a new view is sent a 'deviceFormFactor' parameter
    is appended to the message.
    This parameter can have one of the following values: 'desktop',
    'tablet','mobile' and is forwarded to the lok core.
    
    Change-Id: I21739ddb8c43c960164b3c625e4cf0a80f4616a4
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/92691
    Tested-by: Marco Cecchetti <marco.cecche...@collabora.com>
    Reviewed-by: Marco Cecchetti <marco.cecche...@collabora.com>

diff --git a/common/Session.cpp b/common/Session.cpp
index e7f551979..ef8deea25 100644
--- a/common/Session.cpp
+++ b/common/Session.cpp
@@ -184,6 +184,11 @@ void Session::parseDocOptions(const StringVector& tokens, 
int& part, std::string
             doctemplate = value;
             ++offset;
         }
+        else if (name == "deviceFormFactor")
+        {
+            _deviceFormFactor = value;
+            ++offset;
+        }
     }
 
     Util::mapAnonymized(_userId, _userIdAnonym);
diff --git a/common/Session.hpp b/common/Session.hpp
index 3e5f4c89b..402223963 100644
--- a/common/Session.hpp
+++ b/common/Session.hpp
@@ -197,6 +197,8 @@ public:
         _canonicalViewId = map.getCanonicalId(_watermarkText);
     }
 
+    const std::string& getDeviceFormFactor() const { return _deviceFormFactor; 
}
+
 protected:
     Session(const std::shared_ptr<ProtocolHandlerInterface> &handler,
             const std::string& name, const std::string& id, bool readonly);
@@ -288,6 +290,9 @@ private:
 
     /// the canonical id unique to the set of rendering properties of this 
session
     int _canonicalViewId;
+
+    /// The form factor of the device where the client is running: desktop, 
tablet, mobile.
+    std::string _deviceFormFactor;
 };
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/kit/Kit.cpp b/kit/Kit.cpp
index b5409ca68..52cd43f8c 100644
--- a/kit/Kit.cpp
+++ b/kit/Kit.cpp
@@ -1675,11 +1675,15 @@ private:
         const std::string& docPassword = session->getDocPassword();
         const bool haveDocPassword = session->getHaveDocPassword();
         const std::string& lang = session->getLang();
+        const std::string& deviceFormFactor = session->getDeviceFormFactor();
 
         std::string options;
         if (!lang.empty())
             options = "Language=" + lang;
 
+        if (!deviceFormFactor.empty())
+            options += ",DeviceFormFactor=" + deviceFormFactor;
+
         if (!_loKitDocument)
         {
             // This is the first time we are loading the document
diff --git a/loleaflet/js/global.js b/loleaflet/js/global.js
index c2935ab96..07ae23ad9 100644
--- a/loleaflet/js/global.js
+++ b/loleaflet/js/global.js
@@ -158,9 +158,21 @@
                },
                isDesktop: function() {
                        return !L.Browser.mobile;
+               },
+               getDeviceFormFactor: function() {
+                       if (window.mode.isMobile())
+                               return 'mobile';
+                       else if (window.mode.isTablet())
+                               return 'tablet';
+                       else if (window.mode.isDesktop())
+                               return 'desktop';
+                       else
+                               return null;
                }
        };
 
+       global.deviceFormFactor = window.mode.getDeviceFormFactor();
+
        document.addEventListener('contextmenu', function(e) {
                if (e.preventDefault) {
                        e.preventDefault();
@@ -548,6 +560,11 @@
                                        }
                                        // renderingOptions?
                                }
+
+                               if (window.deviceFormFactor) {
+                                       msg += ' deviceFormFactor=' + 
window.deviceFormFactor;
+                               }
+
                                global.socket.send(msg);
                        }
                };
diff --git a/loleaflet/src/core/Socket.js b/loleaflet/src/core/Socket.js
index fdd0b2db6..f6ba2a5c1 100644
--- a/loleaflet/src/core/Socket.js
+++ b/loleaflet/src/core/Socket.js
@@ -187,12 +187,16 @@ L.Socket = L.Class.extend({
                if (String.locale) {
                        msg += ' lang=' + String.locale;
                }
+               if (window.deviceFormFactor) {
+                       msg += ' deviceFormFactor=' + window.deviceFormFactor;
+               }
                if (this._map.options.renderingOptions) {
                        var options = {
                                'rendering': this._map.options.renderingOptions
                        };
                        msg += ' options=' + JSON.stringify(options);
                }
+
                this._doSend(msg);
                for (var i = 0; i < this._msgQueue.length; i++) {
                        this._doSend(this._msgQueue[i]);
diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js
index bebb1af99..bf331537e 100644
--- a/loleaflet/src/map/Map.js
+++ b/loleaflet/src/map/Map.js
@@ -215,14 +215,12 @@ L.Map = L.Evented.extend({
                                
L.DomUtil.remove(L.DomUtil.get('presentation-controls-wrapper'));
                        }
 
-                       // We need core's knowledge of whether it is a mobile 
phone or not (which is
-                       // what .uno:LOKSetMobile does) to be in sync with the 
test in
-                       // _onJSDialogMsg in TileLayer.js.
+                       // We need core's knowledge of whether it is a mobile 
phone
+                       // or not to be in sync with the test in _onJSDialogMsg 
in TileLayer.js.
                        if (window.mode.isMobile())
                        {
                                this._size = new L.Point(0,0);
                                this._onResize();
-                               this._socket.sendMessage('uno 
.uno:LOKSetMobile');
                        }
                });
                this.on('updatetoolbarcommandvalues', function(e) {
diff --git a/wsd/ClientSession.cpp b/wsd/ClientSession.cpp
index a73749352..c31db7317 100644
--- a/wsd/ClientSession.cpp
+++ b/wsd/ClientSession.cpp
@@ -820,6 +820,11 @@ bool ClientSession::loadDocument(const char* /*buffer*/, 
int /*length*/,
             oss << " lang=" << getLang();
         }
 
+        if (!getDeviceFormFactor().empty())
+        {
+            oss << " deviceFormFactor=" << getDeviceFormFactor();
+        }
+
         if (!getWatermarkText().empty())
         {
             std::string encodedWatermarkText;
diff --git a/wsd/protocol.txt b/wsd/protocol.txt
index 8e8eaa847..9b1f43e03 100644
--- a/wsd/protocol.txt
+++ b/wsd/protocol.txt
@@ -90,7 +90,7 @@ load <pathname>
 
     Deprecated.
 
-load [part=<partNumber>] url=<url> [timestamp=<time>] [lang=<locale>] 
[options=<options>]
+load [part=<partNumber>] url=<url> [timestamp=<time>] [lang=<locale>] 
[deviceFormFactor=<device type>] [options=<options>]
 
     part is an optional parameter. <partNumber> is a number.
 
@@ -100,6 +100,9 @@ load [part=<partNumber>] url=<url> [timestamp=<time>] 
[lang=<locale>] [options=<
     lang specifies the locale to which we should switch before loading the
     document
 
+    deviceFormFactor specifies the form factor of the device the client is 
running on
+    it can be one of the following: 'desktop', 'tablet', 'mobile'
+
     options are the whole rest of the line, not URL-encoded, and must be valid 
JSON.
 
 loolclient <major.minor[-patch]>
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to