diff options
| -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(); | 
