vcl/inc/qt5/QtInstanceCheckButton.hxx |    3 +++
 vcl/inc/qt5/QtInstanceComboBox.hxx    |    2 +-
 vcl/inc/qt5/QtInstanceEntry.hxx       |    2 ++
 vcl/qt5/QtInstanceCheckButton.cxx     |    8 +++++++-
 vcl/qt5/QtInstanceComboBox.cxx        |   16 ++++++++++++----
 vcl/qt5/QtInstanceEntry.cxx           |   18 +++++++++++-------
 6 files changed, 36 insertions(+), 13 deletions(-)

New commits:
commit 5614c39745e43ed105b2308dc4f4107fbf5f0fe3
Author:     Michael Weghorn <[email protected]>
AuthorDate: Wed Dec 4 22:44:55 2024 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Thu Dec 5 09:27:32 2024 +0100

    tdf#130857 qt weld: Signal combobox text change
    
    As the comment for weld::ComboBox::connect_changed
    (in vcl/include/weld.hxx) says:
    
        /* m_aChangeHdl is called when the active item is changed. The can be 
due
           to the user selecting a different item from the list or while typing
           into the entry of a combo box with an entry.
    
           Use changed_by_direct_pick() to discover whether an item was 
actually explicitly
           selected, e.g. from the menu.
         */
        void connect_changed(const Link<ComboBox&, void>& rLink) { m_aChangeHdl 
= rLink; }
    
    QComboBox::currentIndexChanged is not emitted while
    typing in an editable combobox, so connect to the
    QComboBox::editTextChanged signal in addition.
    
    Also, hold the SolarMutex when calling the signal handler.
    
    QtInstanceComboBox::changed_by_direct_pick isn't implemented
    yet, but would trigger an assert when called, so this doesn't
    go unnoticed at least.
    
    Witht this commit in change, typing in the "Find"
    combobox in the "Find and Replace" dialog in a WIP
    branch declaring support for that dialog now results
    in the buttons getting enabled or disabled as expected
    (disabled when text is empty, enabled when non-empty).
    
    Change-Id: I9b89b3a3c8b5ed7ebdeda7b486bdbf2f7e54fd86
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177831
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <[email protected]>

diff --git a/vcl/inc/qt5/QtInstanceComboBox.hxx 
b/vcl/inc/qt5/QtInstanceComboBox.hxx
index 26e47f6e71c6..d21c61a3f086 100644
--- a/vcl/inc/qt5/QtInstanceComboBox.hxx
+++ b/vcl/inc/qt5/QtInstanceComboBox.hxx
@@ -87,7 +87,7 @@ private:
     void sortItems();
 
 private slots:
-    void handleCurrentIndexChanged();
+    void signalChanged();
 };
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
diff --git a/vcl/qt5/QtInstanceComboBox.cxx b/vcl/qt5/QtInstanceComboBox.cxx
index 77e099b7c52a..b573edad0126 100644
--- a/vcl/qt5/QtInstanceComboBox.cxx
+++ b/vcl/qt5/QtInstanceComboBox.cxx
@@ -25,7 +25,9 @@ QtInstanceComboBox::QtInstanceComboBox(QComboBox* pComboBox)
     assert(pComboBox);
 
     QObject::connect(m_pComboBox, 
QOverload<int>::of(&QComboBox::currentIndexChanged), this,
-                     &QtInstanceComboBox::handleCurrentIndexChanged);
+                     &QtInstanceComboBox::signalChanged);
+    QObject::connect(m_pComboBox, &QComboBox::editTextChanged, this,
+                     &QtInstanceComboBox::signalChanged);
 }
 
 void QtInstanceComboBox::insert(int nPos, const OUString& rStr, const 
OUString* pId,
@@ -368,6 +370,10 @@ void QtInstanceComboBox::set_max_drop_down_rows(int) { 
assert(false && "Not impl
 
 void QtInstanceComboBox::sortItems() { m_pComboBox->model()->sort(0, 
Qt::AscendingOrder); }
 
-void QtInstanceComboBox::handleCurrentIndexChanged() { signal_changed(); }
+void QtInstanceComboBox::signalChanged()
+{
+    SolarMutexGuard g;
+    signal_changed();
+}
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
commit abfb229bbe90367f218c0a03d8ecb11b5c14488c
Author:     Michael Weghorn <[email protected]>
AuthorDate: Wed Dec 4 22:17:37 2024 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Thu Dec 5 09:27:26 2024 +0100

    tdf#130857 qt weld: Hold SolarMutex when signalling checkbox toggle
    
    Not doing so would e.g. trigger an assert when
    toggling the "Match case" checkbox in the "Find and Replace"
    dialog in a WIP branch where support for that dialog with
    native widgets is declared.
    
    Change-Id: I5dc95e81e81bceaf258ecba6e55dfa280dfdd572
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177830
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <[email protected]>

diff --git a/vcl/inc/qt5/QtInstanceCheckButton.hxx 
b/vcl/inc/qt5/QtInstanceCheckButton.hxx
index a13c883ac310..7a3a56137ce7 100644
--- a/vcl/inc/qt5/QtInstanceCheckButton.hxx
+++ b/vcl/inc/qt5/QtInstanceCheckButton.hxx
@@ -35,6 +35,9 @@ public:
     virtual void set_label(const OUString& rText) override;
     virtual OUString get_label() const override;
     virtual void set_label_wrap(bool bWrap) override;
+
+private Q_SLOTS:
+    void handleToggled();
 };
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
diff --git a/vcl/qt5/QtInstanceCheckButton.cxx 
b/vcl/qt5/QtInstanceCheckButton.cxx
index 835dcd356196..1a5e63408de7 100644
--- a/vcl/qt5/QtInstanceCheckButton.cxx
+++ b/vcl/qt5/QtInstanceCheckButton.cxx
@@ -17,7 +17,7 @@ QtInstanceCheckButton::QtInstanceCheckButton(QCheckBox* 
pCheckBox)
     , m_pCheckBox(pCheckBox)
 {
     assert(m_pCheckBox);
-    connect(m_pCheckBox, &QCheckBox::toggled, this, [&] { signal_toggled(); });
+    connect(m_pCheckBox, &QCheckBox::toggled, this, 
&QtInstanceCheckButton::handleToggled);
 }
 
 void QtInstanceCheckButton::set_active(bool bActive)
@@ -73,4 +73,10 @@ void 
QtInstanceCheckButton::QtInstanceCheckButton::set_label_wrap(bool /*bWrap*/
     assert(false && "Not implemented yet");
 }
 
+void QtInstanceCheckButton::handleToggled()
+{
+    SolarMutexGuard g;
+    signal_toggled();
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
commit e6bf5124be8b898649b6221d23960aacb7602d0e
Author:     Michael Weghorn <[email protected]>
AuthorDate: Wed Dec 4 22:09:12 2024 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Thu Dec 5 09:27:20 2024 +0100

    tdf#130857 qt weld: Implement QtInstanceComboBox::set_entry_message_type
    
    Reuse the logic previously implemented in
    QtInstanceEntry::set_message_type by moving it to a
    static helper method that takes a QLineEdit* param,
    and for QtInstanceComboBox::set_entry_message_type,
    pass the combo box's line edit.
    
    Change-Id: I8e81c9473da294d2a8c863ed143d735c30ade2a2
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177829
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <[email protected]>

diff --git a/vcl/inc/qt5/QtInstanceEntry.hxx b/vcl/inc/qt5/QtInstanceEntry.hxx
index 73a4e3fec9a3..987df275c31b 100644
--- a/vcl/inc/qt5/QtInstanceEntry.hxx
+++ b/vcl/inc/qt5/QtInstanceEntry.hxx
@@ -49,6 +49,8 @@ public:
 
     virtual void set_alignment(TxtAlign eXAlign) override;
 
+    static void setMessageType(QLineEdit& rLineEdit, weld::EntryMessageType 
eType);
+
 protected Q_SLOTS:
     void handleTextChanged();
 };
diff --git a/vcl/qt5/QtInstanceComboBox.cxx b/vcl/qt5/QtInstanceComboBox.cxx
index 79563be87659..77e099b7c52a 100644
--- a/vcl/qt5/QtInstanceComboBox.cxx
+++ b/vcl/qt5/QtInstanceComboBox.cxx
@@ -10,6 +10,8 @@
 #include <QtInstanceComboBox.hxx>
 #include <QtInstanceComboBox.moc>
 
+#include <QtInstanceEntry.hxx>
+
 #include <vcl/qt/QtUtils.hxx>
 
 #include <QtWidgets/QCompleter>
@@ -219,9 +221,9 @@ bool QtInstanceComboBox::has_entry() const
     return bEditable;
 }
 
-void QtInstanceComboBox::set_entry_message_type(weld::EntryMessageType)
+void QtInstanceComboBox::set_entry_message_type(weld::EntryMessageType eType)
 {
-    assert(false && "Not implemented yet");
+    QtInstanceEntry::setMessageType(*m_pComboBox->lineEdit(), eType);
 }
 
 void QtInstanceComboBox::set_entry_text(const OUString& rStr)
diff --git a/vcl/qt5/QtInstanceEntry.cxx b/vcl/qt5/QtInstanceEntry.cxx
index 49da357f6d8c..88f7a181f9f0 100644
--- a/vcl/qt5/QtInstanceEntry.cxx
+++ b/vcl/qt5/QtInstanceEntry.cxx
@@ -120,13 +120,13 @@ bool QtInstanceEntry::get_editable() const
     return bEditable;
 }
 
-void QtInstanceEntry::set_message_type(weld::EntryMessageType eType)
+void QtInstanceEntry::setMessageType(QLineEdit& rLineEdit, 
weld::EntryMessageType eType)
 {
     SolarMutexGuard g;
 
     GetQtInstance().RunInMainThread([&] {
-        for (QAction* pAction : m_pLineEdit->actions())
-            m_pLineEdit->removeAction(pAction);
+        for (QAction* pAction : rLineEdit.actions())
+            rLineEdit.removeAction(pAction);
 
         switch (eType)
         {
@@ -134,12 +134,11 @@ void 
QtInstanceEntry::set_message_type(weld::EntryMessageType eType)
                 // don't do anything special
                 return;
             case weld::EntryMessageType::Warning:
-                m_pLineEdit->addAction(QIcon::fromTheme("dialog-warning"),
-                                       QLineEdit::TrailingPosition);
+                rLineEdit.addAction(QIcon::fromTheme("dialog-warning"),
+                                    QLineEdit::TrailingPosition);
                 return;
             case weld::EntryMessageType::Error:
-                m_pLineEdit->addAction(QIcon::fromTheme("dialog-error"),
-                                       QLineEdit::TrailingPosition);
+                rLineEdit.addAction(QIcon::fromTheme("dialog-error"), 
QLineEdit::TrailingPosition);
                 return;
             default:
                 assert(false && "Unknown EntryMessageType");
@@ -148,6 +147,11 @@ void 
QtInstanceEntry::set_message_type(weld::EntryMessageType eType)
     });
 }
 
+void QtInstanceEntry::set_message_type(weld::EntryMessageType eType)
+{
+    setMessageType(*m_pLineEdit, eType);
+}
+
 void QtInstanceEntry::set_placeholder_text(const OUString& rText)
 {
     SolarMutexGuard g;

Reply via email to