diff options
author | Neil <nyamatongwe@gmail.com> | 2020-07-08 19:28:56 +1000 |
---|---|---|
committer | Neil <nyamatongwe@gmail.com> | 2020-07-08 19:28:56 +1000 |
commit | 2a04e668c7069e63dd350d4eeb8de54507f1d69d (patch) | |
tree | ba8ff3aa26619e46c5eeef7bb001a85102de79a8 | |
parent | e61f9b0223df0f2c63158b5542c59f43381bfa99 (diff) | |
download | scintilla-mirror-2a04e668c7069e63dd350d4eeb8de54507f1d69d.tar.gz |
Use correct signature to override QListWidget::selectionChanged and use this to
call ListNotify on delegate. This avoids need to override mouseReleaseEvent.
As currentRow() is not updated for selectionChanged, use selectedRows to find
selection.
Fixes a compiler warning.
-rw-r--r-- | qt/ScintillaEditBase/PlatQt.cpp | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/qt/ScintillaEditBase/PlatQt.cpp b/qt/ScintillaEditBase/PlatQt.cpp index 851571b5e..8f572981c 100644 --- a/qt/ScintillaEditBase/PlatQt.cpp +++ b/qt/ScintillaEditBase/PlatQt.cpp @@ -760,10 +760,11 @@ public: virtual ~ListWidget(); void setDelegate(IListBoxDelegate *lbDelegate); - void selectionChanged(); + + int currentSelection(); protected: - void mouseReleaseEvent(QMouseEvent * event) override; + void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected) override; void mouseDoubleClickEvent(QMouseEvent *event) override; QStyleOptionViewItem viewOptions() const override; @@ -799,7 +800,7 @@ public: void SetDelegate(IListBoxDelegate *lbDelegate) override; void SetList(const char *list, char separator, char typesep) override; - ListWidget *GetWidget() const; + ListWidget *GetWidget() const noexcept; private: bool unicodeMode; int visibleRows; @@ -943,12 +944,11 @@ void ListBoxImpl::Select(int n) } } list->setCurrentRow(n); - list->selectionChanged(); } int ListBoxImpl::GetSelection() { ListWidget *list = GetWidget(); - return list->currentRow(); + return list->currentSelection(); } int ListBoxImpl::Find(const char *prefix) { @@ -1038,7 +1038,7 @@ void ListBoxImpl::SetList(const char *list, char separator, char typesep) Append(startword, numword?atoi(numword + 1):-1); } } -ListWidget *ListBoxImpl::GetWidget() const +ListWidget *ListBoxImpl::GetWidget() const noexcept { return static_cast<ListWidget *>(wid); } @@ -1060,13 +1060,25 @@ void ListWidget::setDelegate(IListBoxDelegate *lbDelegate) delegate = lbDelegate; } -void ListWidget::selectionChanged() { +void ListWidget::selectionChanged(const QItemSelection &selected, const QItemSelection &deselected) { + QListWidget::selectionChanged(selected, deselected); if (delegate) { - ListBoxEvent event(ListBoxEvent::EventType::selectionChange); - delegate->ListNotify(&event); + const int selection = currentSelection(); + if (selection >= 0) { + ListBoxEvent event(ListBoxEvent::EventType::selectionChange); + delegate->ListNotify(&event); + } } } +int ListWidget::currentSelection() { + const QModelIndexList indices = selectionModel()->selectedRows(); + foreach (const QModelIndex ind, indices) { + return ind.row(); + } + return -1; +} + void ListWidget::mouseDoubleClickEvent(QMouseEvent * /* event */) { if (delegate) { @@ -1075,11 +1087,6 @@ void ListWidget::mouseDoubleClickEvent(QMouseEvent * /* event */) } } -void ListWidget::mouseReleaseEvent(QMouseEvent * /* event */) -{ - selectionChanged(); -} - QStyleOptionViewItem ListWidget::viewOptions() const { QStyleOptionViewItem result = QListWidget::viewOptions(); |