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;
