[Libreoffice-commits] core.git: 2 commits - desktop/source include/tools tools/source vcl/inc vcl/jsdialog
Szymon KÅos (via logerrit)
logerrit at kemper.freedesktop.org
Tue Dec 8 10:23:18 UTC 2020
desktop/source/lib/init.cxx | 1
include/tools/json_writer.hxx | 2
tools/source/misc/json_writer.cxx | 2
vcl/inc/jsdialog/jsdialogbuilder.hxx | 9 +++
vcl/jsdialog/jsdialogbuilder.cxx | 82 ++++++++++++++++++++++++-----------
5 files changed, 68 insertions(+), 28 deletions(-)
New commits:
commit 84a3f79fffbb32ee5e083cdb4bd58cb6aa20a381
Author: Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Thu Dec 3 14:09:43 2020 +0100
Commit: Szymon Kłos <szymon.klos at collabora.com>
CommitDate: Tue Dec 8 11:22:44 2020 +0100
jsdialog: don't skip commands
api was extended and now we send no only
the latest state of a current window (may be skipped),
but also commands like: close window <ID>.
Make sure commands will not be skipped when new dialog
appears.
Change-Id: I17fa0f09d7ef78cbbcbf8786182dfeb92e6021ad
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107165
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Szymon Kłos <szymon.klos at collabora.com>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107350
Tested-by: Jenkins
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index 66a32dafbc97..e1e8ac652d3f 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -1524,7 +1524,6 @@ void CallbackFlushHandler::queue(const int type, const char* data)
case LOK_CALLBACK_TEXT_VIEW_SELECTION:
case LOK_CALLBACK_VIEW_CURSOR_VISIBLE:
case LOK_CALLBACK_CALC_FUNCTION_LIST:
- case LOK_CALLBACK_JSDIALOG:
{
// deleting the duplicate of visible cursor message can cause hyperlink popup not to show up on second/or more click on the same place.
// If the hyperlink is not empty we can bypass that to show the popup
commit 913fa080fa8ed17228dc87fe885ec47df917ade6
Author: Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Thu Dec 3 11:16:08 2020 +0100
Commit: Szymon Kłos <szymon.klos at collabora.com>
CommitDate: Tue Dec 8 11:22:31 2020 +0100
jsdialog: send close on dialog response
Change-Id: I730d99cc9aa519f07d6b1c436d749f2c0b044bfd
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107151
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Szymon Kłos <szymon.klos at collabora.com>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107349
Tested-by: Szymon Kłos <szymon.klos at collabora.com>
diff --git a/include/tools/json_writer.hxx b/include/tools/json_writer.hxx
index 440fedccf45e..2e50670c5b26 100644
--- a/include/tools/json_writer.hxx
+++ b/include/tools/json_writer.hxx
@@ -76,7 +76,7 @@ public:
std::string extractAsStdString();
/** returns true if the current JSON data matches the string */
- bool isDataEquals(const std::string&);
+ bool isDataEquals(const std::string&) const;
private:
void endNode();
diff --git a/tools/source/misc/json_writer.cxx b/tools/source/misc/json_writer.cxx
index a0e0280b840e..1246f0578fca 100644
--- a/tools/source/misc/json_writer.cxx
+++ b/tools/source/misc/json_writer.cxx
@@ -422,7 +422,7 @@ std::string JsonWriter::extractAsStdString()
return ret;
}
-bool JsonWriter::isDataEquals(const std::string& s)
+bool JsonWriter::isDataEquals(const std::string& s) const
{
return s.length() == static_cast<size_t>(mPos - mpBuffer)
&& memcmp(s.data(), mpBuffer, s.length()) == 0;
diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index ab7c038648d3..d3c6e7b26d48 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -23,6 +23,7 @@
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/datatransfer/dnd/XDropTarget.hpp>
#include <cppuhelper/compbase.hxx>
+#include <boost/property_tree/ptree_fwd.hpp>
class ToolBox;
class ComboBox;
@@ -47,6 +48,12 @@ public:
void Invoke() override;
void ForceUpdate();
+ void sendClose();
+
+private:
+ void send(std::unique_ptr<tools::JsonWriter> aJsonWriter);
+ std::unique_ptr<tools::JsonWriter> dumpStatus() const;
+ std::unique_ptr<tools::JsonWriter> generateCloseMessage() const;
};
class JSDialogSender
@@ -61,6 +68,7 @@ public:
}
void notifyDialogState(bool bForce = false);
+ void sendClose();
};
class JSDropTarget final
@@ -216,6 +224,7 @@ public:
virtual void collapse(weld::Widget* pEdit, weld::Widget* pButton) override;
virtual void undo_collapse() override;
+ virtual void response(int response) override;
};
class JSLabel : public JSWidget<SalInstanceLabel, FixedText>
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 3c663bac10e0..08e66eedb6f5 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -40,7 +40,7 @@ JSDialogNotifyIdle::JSDialogNotifyIdle(VclPtr<vcl::Window> aNotifierWindow,
void JSDialogNotifyIdle::ForceUpdate() { m_bForce = true; }
-void JSDialogNotifyIdle::Invoke()
+void JSDialogNotifyIdle::send(std::unique_ptr<tools::JsonWriter> aJsonWriter)
{
if (!m_aNotifierWindow)
return;
@@ -48,39 +48,63 @@ void JSDialogNotifyIdle::Invoke()
const vcl::ILibreOfficeKitNotifier* pNotifier = m_aNotifierWindow->GetLOKNotifier();
if (pNotifier)
{
- tools::JsonWriter aJsonWriter;
- m_aContentWindow->DumpAsPropertyTree(aJsonWriter);
- aJsonWriter.put("id", m_aNotifierWindow->GetLOKWindowId());
- aJsonWriter.put("jsontype", m_sTypeOfJSON);
+ if (m_bForce || !aJsonWriter->isDataEquals(m_LastNotificationMessage))
+ {
+ m_bForce = false;
+ m_LastNotificationMessage = aJsonWriter->extractAsStdString();
+ pNotifier->libreOfficeKitViewCallback(LOK_CALLBACK_JSDIALOG,
+ m_LastNotificationMessage.c_str());
+ }
+ }
+}
+
+std::unique_ptr<tools::JsonWriter> JSDialogNotifyIdle::dumpStatus() const
+{
+ std::unique_ptr<tools::JsonWriter> aJsonWriter(new tools::JsonWriter());
+
+ if (!m_aContentWindow || !m_aNotifierWindow)
+ return aJsonWriter;
- if (m_sTypeOfJSON == "autofilter")
+ m_aContentWindow->DumpAsPropertyTree(*aJsonWriter);
+ aJsonWriter->put("id", m_aNotifierWindow->GetLOKWindowId());
+ aJsonWriter->put("jsontype", m_sTypeOfJSON);
+
+ if (m_sTypeOfJSON == "autofilter")
+ {
+ vcl::Window* pWindow = m_aContentWindow.get();
+ DockingWindow* pDockingWIndow = dynamic_cast<DockingWindow*>(pWindow);
+ while (pWindow && !pDockingWIndow)
{
- vcl::Window* pWindow = m_aContentWindow.get();
- DockingWindow* pDockingWIndow = dynamic_cast<DockingWindow*>(pWindow);
- while (pWindow && !pDockingWIndow)
- {
- pWindow = pWindow->GetParent();
- pDockingWIndow = dynamic_cast<DockingWindow*>(pWindow);
- }
-
- if (pDockingWIndow)
- {
- Point aPos = pDockingWIndow->GetFloatingPos();
- aJsonWriter.put("posx", aPos.getX());
- aJsonWriter.put("posy", aPos.getY());
- }
+ pWindow = pWindow->GetParent();
+ pDockingWIndow = dynamic_cast<DockingWindow*>(pWindow);
}
- if (m_bForce || !aJsonWriter.isDataEquals(m_LastNotificationMessage))
+ if (pDockingWIndow)
{
- m_bForce = false;
- m_LastNotificationMessage = aJsonWriter.extractAsStdString();
- pNotifier->libreOfficeKitViewCallback(LOK_CALLBACK_JSDIALOG,
- m_LastNotificationMessage.c_str());
+ Point aPos = pDockingWIndow->GetFloatingPos();
+ aJsonWriter->put("posx", aPos.getX());
+ aJsonWriter->put("posy", aPos.getY());
}
}
+
+ return aJsonWriter;
+}
+
+std::unique_ptr<tools::JsonWriter> JSDialogNotifyIdle::generateCloseMessage() const
+{
+ std::unique_ptr<tools::JsonWriter> aJsonWriter(new tools::JsonWriter());
+ if (m_aNotifierWindow)
+ aJsonWriter->put("id", m_aNotifierWindow->GetLOKWindowId());
+ aJsonWriter->put("jsontype", m_sTypeOfJSON);
+ aJsonWriter->put("action", "close");
+
+ return aJsonWriter;
}
+void JSDialogNotifyIdle::Invoke() { send(dumpStatus()); }
+
+void JSDialogNotifyIdle::sendClose() { send(generateCloseMessage()); }
+
void JSDialogSender::notifyDialogState(bool bForce)
{
if (bForce)
@@ -88,6 +112,8 @@ void JSDialogSender::notifyDialogState(bool bForce)
mpIdleNotify->Start();
}
+void JSDialogSender::sendClose() { mpIdleNotify->sendClose(); }
+
namespace
{
vcl::Window* extract_sal_widget(weld::Widget* pParent)
@@ -611,6 +637,12 @@ void JSDialog::undo_collapse()
notifyDialogState();
}
+void JSDialog::response(int response)
+{
+ sendClose();
+ SalInstanceDialog::response(response);
+}
+
JSLabel::JSLabel(VclPtr<vcl::Window> aNotifierWindow, VclPtr<vcl::Window> aContentWindow,
FixedText* pLabel, SalInstanceBuilder* pBuilder, bool bTakeOwnership,
std::string sTypeOfJSON)
More information about the Libreoffice-commits
mailing list