vcl/inc/jsdialog/jsdialogbuilder.hxx |    2 ++
 vcl/jsdialog/jsdialogbuilder.cxx     |   12 ++++++++++++
 2 files changed, 14 insertions(+)

New commits:
commit 516087c8d4380ef7ea0d9d9d3f60ca71ed7bfd87
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Sat Mar 4 15:14:49 2023 +0100
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Tue Mar 7 09:12:05 2023 +0000

    jsdialog: send full update when showing BuilderPage
    
    BuilderPage when created welds only container.
    Detect that case when full update wasn't sent
    in weld_dialog or weld_assistant so we show new
    tab pages.
    
    Fixes problem in Characters -> Higlight -> Color
    
    Change-Id: Iab38493a12feb4fc5e8b258125987856485275a4
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/148246
    Tested-by: Szymon Kłos <szymon.k...@collabora.com>
    Reviewed-by: Szymon Kłos <szymon.k...@collabora.com>

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index b7b0e941f2e0..f9dea1a3987d 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -221,6 +221,8 @@ class JSInstanceBuilder final : public SalInstanceBuilder, 
public JSDialogSender
     std::string m_sTypeOfJSON;
     bool m_bHasTopLevelDialog;
     bool m_bIsNotebookbar;
+    /// used to detect when we have to send Full Update in container handler
+    bool m_bSentInitialUpdate;
     /// When LOKNotifier is set by jsdialogs code we need to release it
     VclPtr<vcl::Window> m_aWindowToRelease;
 
diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx
index cc1ca91262c8..db2481897fa3 100644
--- a/vcl/jsdialog/jsdialogbuilder.cxx
+++ b/vcl/jsdialog/jsdialogbuilder.cxx
@@ -509,6 +509,7 @@ JSInstanceBuilder::JSInstanceBuilder(weld::Widget* pParent, 
const OUString& rUIR
     , m_sTypeOfJSON("dialog")
     , m_bHasTopLevelDialog(false)
     , m_bIsNotebookbar(false)
+    , m_bSentInitialUpdate(false)
     , m_aWindowToRelease(nullptr)
 {
     // when it is a popup we initialize sender in weld_popover
@@ -541,6 +542,7 @@ JSInstanceBuilder::JSInstanceBuilder(weld::Widget* pParent, 
const OUString& rUIR
     , m_sTypeOfJSON("sidebar")
     , m_bHasTopLevelDialog(false)
     , m_bIsNotebookbar(false)
+    , m_bSentInitialUpdate(false)
     , m_aWindowToRelease(nullptr)
 {
     vcl::Window* pRoot = m_xBuilder->get_widget_root();
@@ -583,6 +585,7 @@ JSInstanceBuilder::JSInstanceBuilder(vcl::Window* pParent, 
const OUString& rUIRo
     , m_sTypeOfJSON("notebookbar")
     , m_bHasTopLevelDialog(false)
     , m_bIsNotebookbar(false)
+    , m_bSentInitialUpdate(false)
     , m_aWindowToRelease(nullptr)
 {
     vcl::Window* pRoot = m_xBuilder->get_widget_root();
@@ -612,6 +615,7 @@ JSInstanceBuilder::JSInstanceBuilder(vcl::Window* pParent, 
const OUString& rUIRo
     , m_sTypeOfJSON("formulabar")
     , m_bHasTopLevelDialog(false)
     , m_bIsNotebookbar(false)
+    , m_bSentInitialUpdate(false)
     , m_aWindowToRelease(nullptr)
 {
     vcl::Window* pRoot = m_xBuilder->get_widget_root();
@@ -839,6 +843,7 @@ std::unique_ptr<weld::Dialog> 
JSInstanceBuilder::weld_dialog(const OString& id)
 
         initializeSender(GetNotifierWindow(), GetContentWindow(), 
GetTypeOfJSON());
         sendFullUpdate();
+        m_bSentInitialUpdate = true;
     }
 
     return pRet;
@@ -867,6 +872,7 @@ std::unique_ptr<weld::Assistant> 
JSInstanceBuilder::weld_assistant(const OString
 
         initializeSender(GetNotifierWindow(), GetContentWindow(), 
GetTypeOfJSON());
         sendFullUpdate();
+        m_bSentInitialUpdate = true;
     }
 
     return pRet;
@@ -908,6 +914,12 @@ std::unique_ptr<weld::Container> 
JSInstanceBuilder::weld_container(const OString
     if (pWeldWidget)
         RememberWidget(id, pWeldWidget.get());
 
+    if (!m_bSentInitialUpdate)
+    {
+        m_bSentInitialUpdate = true;
+        sendFullUpdate();
+    }
+
     return pWeldWidget;
 }
 

Reply via email to