diff options
| author | Mikaël Capelle <capelle.mikael@gmail.com> | 2021-01-07 22:25:07 +0100 |
|---|---|---|
| committer | Mikaël Capelle <capelle.mikael@gmail.com> | 2021-01-10 10:27:30 +0100 |
| commit | abd82f88db694557a9eac0706f6831f150123c7b (patch) | |
| tree | ec71cd2b016dfb820b3beb37cde3fe2888fc22f3 /src | |
| parent | c06d28e3a388d53543897c7fcafe3ed3507dce78 (diff) | |
Fix Alt+Click for selecting children of separators.
Diffstat (limited to 'src')
| -rw-r--r-- | src/modlistview.cpp | 45 | ||||
| -rw-r--r-- | src/modlistview.h | 1 |
2 files changed, 46 insertions, 0 deletions
diff --git a/src/modlistview.cpp b/src/modlistview.cpp index 91d522a6..53070d08 100644 --- a/src/modlistview.cpp +++ b/src/modlistview.cpp @@ -1333,10 +1333,19 @@ void ModListView::timerEvent(QTimerEvent* event) void ModListView::mousePressEvent(QMouseEvent* event)
{
+ // disable edit if Alt is pressed
+ auto triggers = editTriggers();
+ if (event->modifiers() & Qt::AltModifier) {
+ setEditTriggers(NoEditTriggers);
+ }
+
// we call the parent class first so that we can use the actual
// selection state of the item after
QTreeView::mousePressEvent(event);
+ // restore triggers
+ setEditTriggers(triggers);
+
const auto index = indexAt(event->pos());
if (event->isAccepted()
@@ -1353,6 +1362,42 @@ void ModListView::mousePressEvent(QMouseEvent* event) }
}
+void ModListView::mouseReleaseEvent(QMouseEvent* event)
+{
+ // this is a duplicate of mousePressEvent because for some reason
+ // the selection is not always triggered in mousePressEvent and only
+ // doing it here create a small lag between the selection of the
+ // separator and the children
+
+ // disable edit if Alt is pressed
+ auto triggers = editTriggers();
+ if (event->modifiers() & Qt::AltModifier) {
+ setEditTriggers(NoEditTriggers);
+ }
+
+ // we call the parent class first so that we can use the actual
+ // selection state of the item after
+ QTreeView::mouseReleaseEvent(event);
+
+ const auto index = indexAt(event->pos());
+
+ // restore triggers
+ setEditTriggers(triggers);
+
+ if (event->isAccepted()
+ && hasCollapsibleSeparators()
+ && index.isValid() && model()->hasChildren(indexAt(event->pos()))
+ && (event->modifiers() & Qt::AltModifier)) {
+
+ const auto flag = selectionModel()->isSelected(index) ?
+ QItemSelectionModel::Select : QItemSelectionModel::Deselect;
+ const QItemSelection selection(
+ model()->index(0, index.column(), index),
+ model()->index(model()->rowCount(index) - 1, index.column(), index));
+ selectionModel()->select(selection, flag | QItemSelectionModel::Rows);
+ }
+}
+
bool ModListView::event(QEvent* event)
{
if (event->type() == QEvent::KeyPress
diff --git a/src/modlistview.h b/src/modlistview.h index 6301a5da..3b64e01b 100644 --- a/src/modlistview.h +++ b/src/modlistview.h @@ -165,6 +165,7 @@ protected: void dragMoveEvent(QDragMoveEvent* event) override;
void dropEvent(QDropEvent* event) override;
void mousePressEvent(QMouseEvent* event) override;
+ void mouseReleaseEvent(QMouseEvent* event) override;
bool event(QEvent* event) override;
protected slots:
|
