kit/ChildSession.cpp                       |   21 ----------
 loleaflet/src/control/Control.LokDialog.js |   59 ++++++++++++++++++-----------
 loleaflet/src/layer/tile/TileLayer.js      |    4 -
 3 files changed, 42 insertions(+), 42 deletions(-)

New commits:
commit a91f022e426ff34fba032142659fb43fbde65ee9
Author: Pranav Kant <pran...@collabora.co.uk>
Date:   Wed Nov 29 00:59:33 2017 +0530

    lokdialog: Remove getDialogInfo call; ncorrect dialog size handling
    
    Change-Id: Ieff59baa984982bd8126102dafc5a97f673a4150

diff --git a/kit/ChildSession.cpp b/kit/ChildSession.cpp
index 3c1083c7..b540febe 100644
--- a/kit/ChildSession.cpp
+++ b/kit/ChildSession.cpp
@@ -947,7 +947,6 @@ bool ChildSession::renderDialog(const char* /*buffer*/, int 
/*length*/, const st
     size_t pixmapDataSize = 4 * bufferWidth * bufferHeight;
     std::vector<unsigned char> pixmap(pixmapDataSize);
     int width = bufferWidth, height = bufferHeight;
-    char* pDialogTitle = nullptr;
     std::string response;
     if (isChild)
     {
@@ -966,30 +965,14 @@ bool ChildSession::renderDialog(const char* /*buffer*/, 
int /*length*/, const st
         Timestamp timestamp;
         getLOKitDocument()->paintDialog(dialogId, pixmap.data(), startX, 
startY, width, height);
 
-        int dialogWidth = 0;
-        int dialogHeight = 0;
-        getLOKitDocument()->getDialogInfo(dialogId, &pDialogTitle, 
dialogWidth, dialogHeight);
-
-        std::string encodedDialogTitle;
-        if (pDialogTitle)
-        {
-            std::string aDialogTitle(pDialogTitle);
-            URI::encode(aDialogTitle, "", encodedDialogTitle);
-            free(pDialogTitle);
-        }
-
-        // rendered width, height cannot be less than the dialog width, height
-        width = std::min(width, dialogWidth);
-        height = std::min(height, dialogHeight);
         const double area = width * height;
-
         LOG_TRC("paintDialog for " << dialogId << " returned " << width << "X" 
<< height
                 << "@(" << startX << "," << startY << ")"
                 << "and rendered in " << (timestamp.elapsed()/1000.)
                 << "ms (" << area / (timestamp.elapsed()) << " MP/s).");
 
-        response = "dialogpaint: id=" + tokens[1] + " title=" + 
encodedDialogTitle +
-            " dialogwidth=" + std::to_string(dialogWidth) + " dialogheight=" + 
std::to_string(dialogHeight);
+        response = "dialogpaint: id=" + tokens[1] +
+            " width=" + std::to_string(width) + " height=" + 
std::to_string(height);
 
         if (!paintRectangle.empty())
             response += " rectangle=" + paintRectangle;
diff --git a/loleaflet/src/control/Control.LokDialog.js 
b/loleaflet/src/control/Control.LokDialog.js
index 853972a8..c6a67444 100644
--- a/loleaflet/src/control/Control.LokDialog.js
+++ b/loleaflet/src/control/Control.LokDialog.js
@@ -63,17 +63,25 @@ L.Control.LokDialog = L.Control.extend({
                this._map._socket.sendMessage(dialogCmd + ' ' + dialogId + 
(rectangle ? ' rectangle=' + rectangle : ''));
        },
 
+       _isRectangleValid: function(rect) {
+               rect = rect.split(',');
+               if (parseInt(rect[0]) < 0 || parseInt(rect[1]) < 0 || 
parseInt(rect[2]) < 0 || parseInt(rect[3]) < 0)
+                       return false;
+               return true;
+       },
+
        _onDialogMsg: function(e) {
                e.dialogId = this.dialogIdPrefix + e.dialogId;
                if (e.action === 'created') {
                        this._width = parseInt(e.size.split(',')[0]);
                        this._height = parseInt(e.size.split(',')[1]);
-
                        this._launchDialog(e.dialogId);
                        this._sendDialogCommand(e.dialogId, 
this._createRectStr());
                } else if (e.action === 'invalidate') {
-                       // ignore any invalidate callbacks when we have closed 
the dialog
                        if (this._isOpen(e.dialogId)) {
+                               if (!this._isRectangleValid(e.rectangle))
+                                       return;
+
                                if (!e.rectangle)
                                        e.rectangle = '0,0,' + this._width + 
',' + this._height;
                                this._sendDialogCommand(e.dialogId, 
e.rectangle);
@@ -82,6 +90,11 @@ L.Control.LokDialog = L.Control.extend({
                        this._width = parseInt(e.size.split(',')[0]);
                        this._height = parseInt(e.size.split(',')[1]);
 
+                       // FIXME: we don't really have to destroy and launch 
the dialog again but do it for
+                       // now because the size sent to us previously in 
'created' cb is not correct
+                       $('#' + e.dialogId).remove();
+                       this._launchDialog(e.dialogId);
+                       $('#' + e.dialogId).dialog('option', 'title', 
this._title);
                        this._sendDialogCommand(e.dialogId, 
this._createRectStr());
                } else if (e.action === 'cursor_invalidate') {
                        if (this._isOpen(e.dialogId) && !!e.rectangle) {
@@ -94,6 +107,9 @@ L.Control.LokDialog = L.Control.extend({
                                // set the position of the lokdialog-cursor
                                $(this._dialogs[e.dialogId].cursor).css({left: 
x, top: y});
                        }
+               } else if (e.action === 'title_changed') {
+                       this._title = e.title;
+                       $('#' + e.dialogId).dialog('option', 'title', e.title);
                } else if (e.action === 'cursor_visible') {
                        var visible = e.visible === 'true';
                        if (visible)
@@ -228,7 +244,6 @@ L.Control.LokDialog = L.Control.extend({
                if (!this._isOpen(dialogId))
                        return;
 
-               $('#' + dialogId).dialog('option', 'title', 
decodeURIComponent(title));
                var img = new Image();
                var canvas = document.getElementById(dialogId + '-canvas');
                var ctx = canvas.getContext('2d');
@@ -246,31 +261,33 @@ L.Control.LokDialog = L.Control.extend({
                img.src = imgData;
        },
 
-       _isSameSize: function(dialogId, newWidth, newHeight) {
-               var ret = false;
-               if (this._isOpen(dialogId))
-               {
-                       var oldWidth = $('#' + dialogId + '-canvas').width();
-                       var oldHeight = $('#' + dialogId + '-canvas').height();
-                       if (oldWidth == newWidth && oldHeight == newHeight)
-                               ret = true;
-               }
-
-               return ret;
-       },
-
        // Binary dialog msg recvd from core
        _onDialogPaint: function (e) {
                var dialogId = this.dialogIdPrefix + e.id;
                if (!this._isOpen(dialogId))
                        return;
 
-               if (!this._isSameSize(dialogId, e.dialogWidth, e.dialogHeight)) 
{
-                       var canvas = document.getElementById(dialogId + 
'-canvas');
-                       canvas.width = e.dialogWidth;
-                       canvas.height = e.dialogHeight;
+               // FIXME: as a precaution, if we get larger width or height 
here than what we got in 'created'
+               // callback, then adjust the dialog canvas size
+               var changed = false;
+               var canvas = document.getElementById(dialogId + '-canvas');
+               if (e.width > this._width) {
+                       changed = true;
+                       this._width = e.width;
+                       canvas.width = e.width;
+                       $('#' + dialogId).dialog('option', 'width', e.width);
+               }
+
+               if (e.height > this._height) {
+                       changed = true;
+                       this._height = e.height;
+                       canvas.height = e.height;
+                       $('#' + dialogId).dialog('option', 'height', e.height);
+               }
 
-                       $('#' + dialogId).dialog('option', 'width', 
e.dialogWidth);
+               if (changed) {
+                       this._sendDialogCommand(dialogId, 
this._createRectStr());
+                       return;
                }
 
                this._paintDialog(dialogId, e.title, e.rectangle, e.dialog);
diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index 5f0ba440..d704368e 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -1212,8 +1212,8 @@ L.TileLayer = L.GridLayer.extend({
                        dialog: img,
                        title: command.title,
                        // TODO: add id too
-                       dialogWidth: command.dialogwidth,
-                       dialogHeight: command.dialogheight,
+                       width: command.width,
+                       height: command.height,
                        rectangle: command.rectangle
                });
        },
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to