vcl/inc/qt5/QtInstanceWidget.hxx |    4 +++-
 vcl/qt5/QtInstanceWidget.cxx     |   18 +++++++++++++++++-
 2 files changed, 20 insertions(+), 2 deletions(-)

New commits:
commit 8c98986b5bd5e2e841a2e1a2f78621f3d4d7b8da
Author:     Michael Weghorn <[email protected]>
AuthorDate: Sat Dec 21 00:30:51 2024 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Sat Dec 21 09:31:55 2024 +0100

    tdf#130857 qt weld: Implement QtInstanceWidget::set_busy_cursor
    
    This is basically the the Qt port of the existing
    GtkInstanceWidget::set_busy_cursor.
    
    Gets called e.g. from RemoteFilesDialog::OpenURL
    (via the weld::WaitObject ctor/dtor).
    
    Change-Id: I0b61ae33ad47190c8f2258745ab483152dde1331
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178974
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <[email protected]>

diff --git a/vcl/inc/qt5/QtInstanceWidget.hxx b/vcl/inc/qt5/QtInstanceWidget.hxx
index e60e78abbecb..17cc6d9886c2 100644
--- a/vcl/inc/qt5/QtInstanceWidget.hxx
+++ b/vcl/inc/qt5/QtInstanceWidget.hxx
@@ -25,6 +25,8 @@ class QtInstanceWidget : public QObject, public virtual 
weld::Widget
 
     QWidget* m_pWidget;
 
+    int m_nBusyCount = 0;
+
 public:
     QtInstanceWidget(QWidget* pWidget);
 
@@ -133,7 +135,7 @@ public:
 
     virtual void thaw() override;
 
-    virtual void set_busy_cursor(bool) override;
+    virtual void set_busy_cursor(bool bBusy) override;
 
     virtual std::unique_ptr<weld::Container> weld_parent() const override;
 
diff --git a/vcl/qt5/QtInstanceWidget.cxx b/vcl/qt5/QtInstanceWidget.cxx
index f2656b1df54e..8f1d5075a79c 100644
--- a/vcl/qt5/QtInstanceWidget.cxx
+++ b/vcl/qt5/QtInstanceWidget.cxx
@@ -495,7 +495,23 @@ void QtInstanceWidget::freeze(){};
 
 void QtInstanceWidget::thaw(){};
 
-void QtInstanceWidget::set_busy_cursor(bool) { assert(false && "Not 
implemented yet"); }
+void QtInstanceWidget::set_busy_cursor(bool bBusy)
+{
+    SolarMutexGuard g;
+
+    GetQtInstance().RunInMainThread([&] {
+        if (bBusy)
+            ++m_nBusyCount;
+        else
+            --m_nBusyCount;
+        assert(m_nBusyCount >= 0);
+
+        if (m_nBusyCount == 1)
+            m_pWidget->setCursor(Qt::BusyCursor);
+        else if (m_nBusyCount == 0)
+            m_pWidget->unsetCursor();
+    });
+}
 
 std::unique_ptr<weld::Container> QtInstanceWidget::weld_parent() const
 {

Reply via email to