kit/ChildSession.cpp | 24 +++++++++++++++++++++++- kit/ChildSession.hpp | 1 + loleaflet/src/layer/FormFieldButtonLayer.js | 22 ++++++++++++++++++---- loleaflet/src/layer/tile/TileLayer.js | 1 - wsd/ClientSession.cpp | 7 ++++++- 5 files changed, 48 insertions(+), 7 deletions(-)
New commits: commit a41ca9fc3d18ea4445c9de1183861a7d5e2958b9 Author: Tamás Zolnai <tamas.zol...@collabora.com> AuthorDate: Wed May 6 13:59:03 2020 +0200 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Sun May 10 17:17:22 2020 +0200 MSForms: send item selection event to core. Change-Id: I10fceb66a4f8cd777c43411ddace3456a315b5a2 (cherry picked from commit 75dc61da7e6305a2f6b6e8e9a45e016ae1fc2e7d) Reviewed-on: https://gerrit.libreoffice.org/c/online/+/93887 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Andras Timar <andras.ti...@collabora.com> diff --git a/kit/ChildSession.cpp b/kit/ChildSession.cpp index e70cfde2e..ba8bdf8ee 100644 --- a/kit/ChildSession.cpp +++ b/kit/ChildSession.cpp @@ -301,7 +301,8 @@ bool ChildSession::_handleInput(const char *buffer, int length) tokens.equals(0, "rendershapeselection") || tokens.equals(0, "removetextcontext") || tokens.equals(0, "dialogevent") || - tokens.equals(0, "completefunction")); + tokens.equals(0, "completefunction")|| + tokens.equals(0, "formfieldevent")); if (tokens.equals(0, "clientzoom")) { @@ -446,6 +447,10 @@ bool ChildSession::_handleInput(const char *buffer, int length) { return completeFunction(buffer, length, tokens); } + else if (tokens.equals(0, "formfieldevent")) + { + return formFieldEvent(buffer, length, tokens); + } else { assert(false && "Unknown command token."); @@ -1426,6 +1431,23 @@ bool ChildSession::dialogEvent(const char* /*buffer*/, int /*length*/, const Str return true; } +bool ChildSession::formFieldEvent(const char* buffer, int length, const StringVector& /*tokens*/) +{ + std::string sFirstLine = getFirstLine(buffer, length); + std::string sArguments = sFirstLine.substr(std::string("formfieldevent ").size()); + + if (sArguments.empty()) + { + sendTextFrameAndLogError("error: cmd=formfieldevent kind=syntax"); + return false; + } + + getLOKitDocument()->setView(_viewId); + getLOKitDocument()->sendFormFieldEvent(sArguments.c_str()); + + return true; +} + bool ChildSession::completeFunction(const char* /*buffer*/, int /*length*/, const StringVector& tokens) { std::string functionName; diff --git a/kit/ChildSession.hpp b/kit/ChildSession.hpp index fad3061aa..4c4dbb2ec 100644 --- a/kit/ChildSession.hpp +++ b/kit/ChildSession.hpp @@ -291,6 +291,7 @@ private: bool removeTextContext(const char* /*buffer*/, int /*length*/, const StringVector& tokens); void rememberEventsForInactiveUser(const int type, const std::string& payload); + bool formFieldEvent(const char* buffer, int length, const StringVector& tokens); virtual void disconnect() override; virtual bool _handleInput(const char* buffer, int length) override; diff --git a/loleaflet/src/layer/FormFieldButtonLayer.js b/loleaflet/src/layer/FormFieldButtonLayer.js index 4cd837ffe..33c6b561c 100644 --- a/loleaflet/src/layer/FormFieldButtonLayer.js +++ b/loleaflet/src/layer/FormFieldButtonLayer.js @@ -15,6 +15,7 @@ L.FormFieldButton = L.Layer.extend({ }, onAdd: function (map) { + this.map = map; this._clearButton(); this._buildFormButton(map); }, @@ -102,7 +103,10 @@ L.FormFieldButton = L.Layer.extend({ for (var i = 0; i < itemList.length; ++i) { var option = L.DomUtil.create('div', 'drop-down-field-list-item', dropDownList); option.innerHTML = itemList[i]; + option.addEventListener('click', this._onListItemSelect); + option.map = this.map; + // Stop propagation to the main document option.addEventListener('mouseup', function(event) {event.stopPropagation();}); option.addEventListener('mousedown', function(event) {event.stopPropagation();}); @@ -116,17 +120,27 @@ L.FormFieldButton = L.Layer.extend({ this._clearButton(); }, - _onClickDropDown: function() { + _onClickDropDown: function(event) { $('.drop-down-field-list').show(); + event.stopPropagation(); }, _onListItemSelect: function(event) { + $('.drop-down-field-list').hide(); $('.drop-down-field-list-item.selected').removeClass('selected'); event.target.classList.add('selected'); - // TODO: send back - $('.drop-down-field-list').hide(); + event.stopPropagation(); - console.warn(event.target.textContent); + + // Find item index + var index = $(event.target).index(); + + var message = 'formfieldevent {\"type\": \"drop-down\",' + + '\"cmd\": \"selected\",' + + '\"data\":\"' + index.toString() + '\"}'; + + // Apply selection in the document. + this.map._socket.sendMessage(message); }, _clearButton: function() { diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js index 6deb6808f..ded1b572c 100644 --- a/loleaflet/src/layer/tile/TileLayer.js +++ b/loleaflet/src/layer/tile/TileLayer.js @@ -728,7 +728,6 @@ L.TileLayer = L.GridLayer.extend({ } else if (textMsg.startsWith('formfieldbutton:')) { this._onFormFieldButtonMsg(textMsg); - console.error(textMsg); } }, diff --git a/wsd/ClientSession.cpp b/wsd/ClientSession.cpp index 64ae23deb..e985b2a7a 100644 --- a/wsd/ClientSession.cpp +++ b/wsd/ClientSession.cpp @@ -440,7 +440,8 @@ bool ClientSession::_handleInput(const char *buffer, int length) tokens[0] != "resizewindow" && tokens[0] != "removetextcontext" && tokens[0] != "dialogevent" && - tokens[0] != "completefunction") + tokens[0] != "completefunction" && + tokens[0] != "formfieldevent") { LOG_ERR("Session [" << getId() << "] got unknown command [" << tokens[0] << "]."); sendTextFrameAndLogError("error: cmd=" + tokens[0] + " kind=unknown"); @@ -722,6 +723,10 @@ bool ClientSession::_handleInput(const char *buffer, int length) { return forwardToChild(std::string(buffer, length), docBroker); } + else if (tokens.equals(0, "formfieldevent")) + { + return forwardToChild(firstLine, docBroker); + } else { if (tokens.equals(0, "key")) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits