vcl/inc/jsdialog/jsdialogbuilder.hxx |   26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)

New commits:
commit 634180af365781e8158e4a438dcdfc48e6af27a8
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Wed May 7 08:36:09 2025 +0000
Commit:     Caolán McNamara <caolan.mcnam...@collabora.com>
CommitDate: Sat May 24 20:29:52 2025 +0200

    jsdialog: allow stacking freeze on widgets
    
    followup for:
    
    commit a01e6603d5b0356757fd647f90c69a395f376ba5
    clear while frozen if we will need to freeze anyway
    
    commit 61bc7ce2aa02eb621de8e4c879646767af3d28ce
    Navigator: freeze/thaw collapse
    
    Change-Id: I43b7f29e17c8625da2bea09b917061ed6401dcd9
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/185013
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com>
    Tested-by: Caolán McNamara <caolan.mcnam...@collabora.com>
    (cherry picked from commit a865c65727e2a552ba0475656b79fd71773f1142)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/185737
    Tested-by: Jenkins

diff --git a/vcl/inc/jsdialog/jsdialogbuilder.hxx 
b/vcl/inc/jsdialog/jsdialogbuilder.hxx
index 89db0cb8c508..ad1b93884668 100644
--- a/vcl/inc/jsdialog/jsdialogbuilder.hxx
+++ b/vcl/inc/jsdialog/jsdialogbuilder.hxx
@@ -262,7 +262,7 @@ class JSWidget : public BaseInstanceClass, public 
BaseJSWidget
 {
 protected:
     rtl::Reference<JSDropTarget> m_xDropTarget;
-    bool m_bIsFreezed;
+    sal_Int8 m_nFreezeCounter;
 
     JSDialogSender* m_pSender;
 
@@ -270,7 +270,7 @@ public:
     JSWidget(JSDialogSender* pSender, VclClass* pObject, SalInstanceBuilder* 
pBuilder,
              bool bTakeOwnership)
         : BaseInstanceClass(pObject, pBuilder, bTakeOwnership)
-        , m_bIsFreezed(false)
+        , m_nFreezeCounter(0)
         , m_pSender(pSender)
     {
     }
@@ -278,7 +278,7 @@ public:
     JSWidget(JSDialogSender* pSender, VclClass* pObject, SalInstanceBuilder* 
pBuilder,
              bool bTakeOwnership, bool bUserManagedScrolling)
         : BaseInstanceClass(pObject, pBuilder, bTakeOwnership, 
bUserManagedScrolling)
-        , m_bIsFreezed(false)
+        , m_nFreezeCounter(0)
         , m_pSender(pSender)
     {
     }
@@ -288,7 +288,7 @@ public:
              bool bTakeOwnership)
         : BaseInstanceClass(pObject, pBuilder, rAlly, 
std::move(pUITestFactoryFunction), pUserData,
                             bTakeOwnership)
-        , m_bIsFreezed(false)
+        , m_nFreezeCounter(0)
         , m_pSender(pSender)
     {
     }
@@ -344,14 +344,16 @@ public:
     virtual void freeze() override
     {
         BaseInstanceClass::freeze();
-        m_bIsFreezed = true;
+        m_nFreezeCounter++;
     }
 
     virtual void thaw() override
     {
         BaseInstanceClass::thaw();
-        m_bIsFreezed = false;
-        sendUpdate();
+        assert(m_nFreezeCounter > 0);
+        m_nFreezeCounter--;
+        if (m_nFreezeCounter == 0)
+            sendUpdate();
     }
 
     virtual void grab_focus() override
@@ -370,32 +372,32 @@ public:
 
     virtual void sendUpdate(bool bForce = false) override
     {
-        if (!m_bIsFreezed && m_pSender)
+        if (!m_nFreezeCounter && m_pSender)
             m_pSender->sendUpdate(BaseInstanceClass::m_xWidget, bForce);
     }
 
     virtual void sendFullUpdate(bool bForce = false) override
     {
-        if ((!m_bIsFreezed || bForce) && m_pSender)
+        if ((!m_nFreezeCounter || bForce) && m_pSender)
             m_pSender->sendFullUpdate(bForce);
     }
 
     virtual void sendAction(std::unique_ptr<jsdialog::ActionDataMap> pData) 
override
     {
-        if (!m_bIsFreezed && m_pSender && pData)
+        if (!m_nFreezeCounter && m_pSender && pData)
             m_pSender->sendAction(BaseInstanceClass::m_xWidget, 
std::move(pData));
     }
 
     virtual void sendPopup(vcl::Window* pPopup, const OUString& rParentId,
                            const OUString& rCloseId) override
     {
-        if (!m_bIsFreezed && m_pSender)
+        if (!m_nFreezeCounter && m_pSender)
             m_pSender->sendPopup(pPopup, rParentId, rCloseId);
     }
 
     virtual void sendClosePopup(vcl::LOKWindowId nWindowId) override
     {
-        if (!m_bIsFreezed && m_pSender)
+        if (!m_nFreezeCounter && m_pSender)
             m_pSender->sendClosePopup(nWindowId);
     }
 

Reply via email to