[Libreoffice-commits] core.git: Branch 'feature/jsdialogs' - 2 commits - cui/source cui/uiconfig include/vcl solenv/sanitizers vcl/jsdialog vcl/source

Szymon KÅ‚os (via logerrit) logerrit at kemper.freedesktop.org
Wed Apr 1 09:47:06 UTC 2020


Rebased ref, commits from common ancestor:
commit 3797cfec7f04f46110d26ca13dbfc7e50ddedc25
Author:     Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Tue Mar 31 15:42:28 2020 +0200
Commit:     Szymon Kłos <szymon.klos at collabora.com>
CommitDate: Wed Apr 1 11:46:16 2020 +0200

    jsdialog: use Idle timer to send updates
    
    Change-Id: Ib4f18bab1279c622b576dca53169b40c4a2526bc

diff --git a/include/vcl/jsdialog/jsdialogbuilder.hxx b/include/vcl/jsdialog/jsdialogbuilder.hxx
index d01d878828c2..4a9b4e1d6fbc 100644
--- a/include/vcl/jsdialog/jsdialogbuilder.hxx
+++ b/include/vcl/jsdialog/jsdialogbuilder.hxx
@@ -14,12 +14,24 @@
 
 typedef std::map<OString, weld::Widget*> WidgetMap;
 
+class JSDialogNotifyIdle : public Idle
+{
+    VclPtr<vcl::Window> m_aWindow;
+    std::string m_LastNotificationMessage;
+
+public:
+    JSDialogNotifyIdle(VclPtr<vcl::Window> aWindow);
+
+    void Invoke() override;
+};
+
 class VCL_DLLPUBLIC JSDialogSender
 {
-    VclPtr<vcl::Window> m_aOwnedToplevel;
+    std::unique_ptr<JSDialogNotifyIdle> mpIdleNotify;
+
 public:
     JSDialogSender(VclPtr<vcl::Window> aOwnedToplevel)
-    : m_aOwnedToplevel(aOwnedToplevel)
+    : mpIdleNotify(new JSDialogNotifyIdle(aOwnedToplevel))
     {}
 
     void notifyDialogState();
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index 7db752b77045..bfc58fa09076 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -7,23 +7,47 @@
 
 using namespace weld;
 
-void JSDialogSender::notifyDialogState()
+JSDialogNotifyIdle::JSDialogNotifyIdle(VclPtr<vcl::Window> aWindow)
+: Idle("JSDialog notify")
+, m_aWindow(aWindow)
+, m_LastNotificationMessage()
 {
-    if (!m_aOwnedToplevel)
-        return;
+    SetPriority(TaskPriority::POST_PAINT);
+}
 
-    const vcl::ILibreOfficeKitNotifier* pNotifier = m_aOwnedToplevel->GetLOKNotifier();
-    if (pNotifier)
+void JSDialogNotifyIdle::Invoke()
+{
+    try
     {
-        std::stringstream aStream;
-        boost::property_tree::ptree aTree = m_aOwnedToplevel->DumpAsPropertyTree();
-        aTree.put("id", m_aOwnedToplevel->GetLOKWindowId());
-        boost::property_tree::write_json(aStream, aTree);
-        const std::string message = aStream.str();
-        pNotifier->libreOfficeKitViewCallback(LOK_CALLBACK_JSDIALOG, message.c_str());
+        if (!m_aWindow)
+            return;
+
+        const vcl::ILibreOfficeKitNotifier* pNotifier = m_aWindow->GetLOKNotifier();
+        if (pNotifier)
+        {
+            std::stringstream aStream;
+            boost::property_tree::ptree aTree = m_aWindow->DumpAsPropertyTree();
+            aTree.put("id", m_aWindow->GetLOKWindowId());
+            boost::property_tree::write_json(aStream, aTree);
+            const std::string message = aStream.str();
+            if (message != m_LastNotificationMessage)
+            {
+                m_LastNotificationMessage = message;
+                pNotifier->libreOfficeKitViewCallback(LOK_CALLBACK_JSDIALOG, message.c_str());
+            }
+        }
+    }
+    catch (boost::property_tree::json_parser::json_parser_error& rError)
+    {
+        SAL_WARN("vcl.jsdialog", rError.message());
     }
 }
 
+void JSDialogSender::notifyDialogState()
+{
+    mpIdleNotify->Start();
+}
+
 JSInstanceBuilder::JSInstanceBuilder(weld::Widget* pParent, const OUString& rUIRoot, const OUString& rUIFile)
         : SalInstanceBuilder(
             dynamic_cast<SalInstanceWidget*>(pParent) ?
commit 77760691b4cfaa4a869ceb3f021b1fcfadf3ea1c
Author:     Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Thu Mar 26 11:49:24 2020 +0100
Commit:     Szymon Kłos <szymon.klos at collabora.com>
CommitDate: Wed Apr 1 11:43:23 2020 +0200

    jsdialog: mobile version of spell dialog
    
    Change-Id: I611b09a8ffb6eb1972ba8702a7a76c9e6ab25fb4

diff --git a/cui/source/dialogs/SpellDialog.cxx b/cui/source/dialogs/SpellDialog.cxx
index 68ef370f65e7..416f2118b522 100644
--- a/cui/source/dialogs/SpellDialog.cxx
+++ b/cui/source/dialogs/SpellDialog.cxx
@@ -60,6 +60,8 @@
 #include <svtools/langtab.hxx>
 #include <cppuhelper/exc_hlp.hxx>
 #include <sal/log.hxx>
+#include <comphelper/lok.hxx>
+#include <sfx2/lokhelper.hxx>
 
 using namespace ::com::sun::star;
 using namespace ::com::sun::star::uno;
@@ -192,9 +194,23 @@ SpellDialog::SpellDialog(SpellDialogChildWindow* pChildWindow,
     , m_xOptionsPB(m_xBuilder->weld_button("options"))
     , m_xUndoPB(m_xBuilder->weld_button("undo"))
     , m_xClosePB(m_xBuilder->weld_button("close"))
+    , m_xHelpPB(m_xBuilder->weld_button("help"))
     , m_xToolbar(m_xBuilder->weld_toolbar("toolbar"))
     , m_xSentenceEDWeld(new weld::CustomWeld(*m_xBuilder, "sentence", *m_xSentenceED))
+    , m_xMobileError(m_xBuilder->weld_label("mobile-spell-error"))
 {
+    m_xSentenceED->SetMobileErrorLabel(m_xMobileError);
+
+    if (comphelper::LibreOfficeKit::isActive()
+        && comphelper::LibreOfficeKit::isMobile(SfxLokHelper::getView()))
+    {
+        m_xClosePB->hide();
+        m_xHelpPB->hide();
+        m_xOptionsPB->hide();
+        m_xSentenceEDWeld->hide();
+        m_xMobileError->set_visible(true);
+    }
+
     m_xSentenceED->SetSpellDialog(this);
     m_xSentenceED->Init(m_xToolbar.get());
 
@@ -1667,6 +1683,8 @@ bool SentenceEditWindow_Impl::MarkNextError( bool bIgnoreCurrentError, const css
         if (pEECharAttrib)
         {
             ExtractErrorDescription(*pEECharAttrib, aSpellErrorDescription);
+            if (m_xMobileError)
+                m_xMobileError->set_label(aSpellErrorDescription.sErrorText);
 
             bGrammarError = aSpellErrorDescription.bIsGrammarError;
             m_nErrorStart = pEECharAttrib->nStart;
diff --git a/cui/source/inc/SpellDialog.hxx b/cui/source/inc/SpellDialog.hxx
index 30d8627084cb..92d4a9ed6391 100644
--- a/cui/source/inc/SpellDialog.hxx
+++ b/cui/source/inc/SpellDialog.hxx
@@ -65,6 +65,7 @@ class SentenceEditWindow_Impl : public weld::CustomWidgetController
 private:
     std::unique_ptr<EditEngine> m_xEditEngine;
     std::unique_ptr<EditView> m_xEdView;
+    std::shared_ptr<weld::Label> m_xMobileError;
 
     std::set<sal_Int32> m_aIgnoreErrorsAt;
     SpellDialog*        m_pSpellDialog;
@@ -155,6 +156,8 @@ public:
     void            MoveErrorEnd(long nOffset);
 
     void            ResetIgnoreErrorsAt()   { m_aIgnoreErrorsAt.clear(); }
+
+    void            SetMobileErrorLabel(std::shared_ptr<weld::Label> xMobileError) { m_xMobileError = xMobileError; }
 };
 
 // class SvxSpellDialog ---------------------------------------------
@@ -206,8 +209,10 @@ private:
     std::unique_ptr<weld::Button> m_xOptionsPB;
     std::unique_ptr<weld::Button> m_xUndoPB;
     std::unique_ptr<weld::Button> m_xClosePB;
+    std::unique_ptr<weld::Button> m_xHelpPB;
     std::unique_ptr<weld::Toolbar> m_xToolbar;
     std::unique_ptr<weld::CustomWeld> m_xSentenceEDWeld;
+    std::shared_ptr<weld::Label> m_xMobileError;
 
     DECL_LINK(ChangeHdl, weld::Button&, void);
     DECL_LINK(DoubleClickChangeHdl, weld::TreeView&, void);
diff --git a/cui/uiconfig/ui/spellingdialog.ui b/cui/uiconfig/ui/spellingdialog.ui
index ccc6a30e7a46..f80e6ec80d82 100644
--- a/cui/uiconfig/ui/spellingdialog.ui
+++ b/cui/uiconfig/ui/spellingdialog.ui
@@ -81,6 +81,7 @@
                 <property name="receives_default">True</property>
                 <property name="use_underline">True</property>
                 <property name="use_stock">True</property>
+                <property name="sensitive">False</property>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -425,6 +426,16 @@
                 <property name="top_attach">2</property>
               </packing>
             </child>
+            <child>
+              <object class="GtkLabel" id="mobile-spell-error">
+                <property name="visible">False</property>
+                <property name="can_focus">False</property>
+              </object>
+              <packing>
+                <property name="left_attach">2</property>
+                <property name="top_attach">2</property>
+              </packing>
+            </child>
             <child>
               <object class="GtkScrolledWindow">
                 <property name="visible">True</property>
diff --git a/solenv/sanitizers/ui/cui.suppr b/solenv/sanitizers/ui/cui.suppr
index 59f22233ff39..549954c47a90 100644
--- a/solenv/sanitizers/ui/cui.suppr
+++ b/solenv/sanitizers/ui/cui.suppr
@@ -460,6 +460,7 @@ cui/uiconfig/ui/spellingdialog.ui://GtkLabel[@id='explain'] orphan-label
 cui/uiconfig/ui/spellingdialog.ui://GtkLabel[@id='resumeft'] orphan-label
 cui/uiconfig/ui/spellingdialog.ui://GtkLabel[@id='nosuggestionsft'] orphan-label
 cui/uiconfig/ui/spellingdialog.ui://GtkLabel[@id='alttitleft'] orphan-label
+cui/uiconfig/ui/spellingdialog.ui://GtkLabel[@id='mobile-spell-error'] orphan-label
 cui/uiconfig/ui/storedwebconnectiondialog.ui://GtkLabel[@id='label1'] orphan-label
 cui/uiconfig/ui/storedwebconnectiondialog.ui://GtkLabel[@id='website'] orphan-label
 cui/uiconfig/ui/storedwebconnectiondialog.ui://GtkLabel[@id='username'] orphan-label
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index efd46f9adec0..d9786bc4d70b 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -154,6 +154,7 @@ weld::Builder* Application::CreateBuilder(weld::Widget* pParent, const OUString
             rUIFile == "modules/scalc/ui/validationcriteriapage.ui" ||
             rUIFile == "modules/scalc/ui/validationhelptabpage-mobile.ui" ||
             rUIFile == "modules/scalc/ui/erroralerttabpage-mobile.ui" ||
+            rUIFile == "cui/ui/spellingdialog.ui" ||
             rUIFile == "modules/swriter/ui/watermarkdialog.ui")
             bUseJSBuilder = true;
     }


More information about the Libreoffice-commits mailing list