From 4c54f2a07cd3f2359c7957cf9db493b7ded627c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Mon, 28 Mar 2022 22:32:52 +0200 Subject: [PATCH] Fix clicking on the folders treeview when it shown results from search This was a bug introduced when support for folder navigation using the keyboard was added. --- .../yacreader_navigation_controller.cpp | 1 + custom_widgets/yacreader_treeview.cpp | 18 ++++++++++++++++-- custom_widgets/yacreader_treeview.h | 2 ++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/YACReaderLibrary/yacreader_navigation_controller.cpp b/YACReaderLibrary/yacreader_navigation_controller.cpp index ab2e5c43..783dedef 100644 --- a/YACReaderLibrary/yacreader_navigation_controller.cpp +++ b/YACReaderLibrary/yacreader_navigation_controller.cpp @@ -263,6 +263,7 @@ void YACReaderNavigationController::loadPreviousStatus() void YACReaderNavigationController::setupConnections() { connect(libraryWindow->foldersView, &YACReaderTreeView::currentIndexChanged, this, &YACReaderNavigationController::selectedFolder); + connect(libraryWindow->foldersView, &YACReaderTreeView::clicked, this, &YACReaderNavigationController::selectedFolder); connect(libraryWindow->listsView, &QAbstractItemView::clicked, this, &YACReaderNavigationController::selectedList); connect(libraryWindow->historyController, &YACReaderHistoryController::modelIndexSelected, this, &YACReaderNavigationController::selectedIndexFromHistory); connect(comicsViewsManager->emptyFolderWidget, &EmptyFolderWidget::subfolderSelected, this, &YACReaderNavigationController::selectSubfolder); diff --git a/custom_widgets/yacreader_treeview.cpp b/custom_widgets/yacreader_treeview.cpp index c6197c56..67df09dc 100644 --- a/custom_widgets/yacreader_treeview.cpp +++ b/custom_widgets/yacreader_treeview.cpp @@ -1,7 +1,7 @@ #include "yacreader_treeview.h" YACReaderTreeView::YACReaderTreeView(QWidget *parent) - : QTreeView(parent) + : QTreeView(parent), clicking(false) { setAcceptDrops(true); setDragDropMode(QAbstractItemView::DropOnly); @@ -54,6 +54,8 @@ YACReaderTreeView::YACReaderTreeView(QWidget *parent) void YACReaderTreeView::mousePressEvent(QMouseEvent *event) { + clicking = true; + QTreeView::mousePressEvent(event); QModelIndex destinationIndex = indexAt(event->pos()); @@ -63,6 +65,13 @@ void YACReaderTreeView::mousePressEvent(QMouseEvent *event) } } +void YACReaderTreeView::mouseReleaseEvent(QMouseEvent *event) +{ + QTreeView::mouseReleaseEvent(event); + + clicking = false; +} + void YACReaderTreeView::expandCurrent() { QModelIndex index = indexAt(expandPos); @@ -112,5 +121,10 @@ void YACReaderTreeView::currentChanged(const QModelIndex ¤t, const QModelI { QTreeView::currentChanged(current, previous); - emit currentIndexChanged(current); + // This is a custom signal emitted to ensure that we know when an item in the tree view is selected (e.g. when keyboard navigation is used) + // By default Qt calls currentChanged while the left mouse button is pressed down an you move the mouse around, + // this causes troubles when the tree view is showing a filtered model and the model changes under the mouse cursor (e.g. after clicking on an item when the view is showing search results) + // so this view filters `currentIndexChanged` calls when the mouse is being pressed down. + if (!clicking) + emit currentIndexChanged(current); } diff --git a/custom_widgets/yacreader_treeview.h b/custom_widgets/yacreader_treeview.h index 67734c3a..52385f05 100644 --- a/custom_widgets/yacreader_treeview.h +++ b/custom_widgets/yacreader_treeview.h @@ -9,6 +9,7 @@ class YACReaderTreeView : public QTreeView public: explicit YACReaderTreeView(QWidget *parent = 0); void mousePressEvent(QMouseEvent *event) override; + void mouseReleaseEvent(QMouseEvent *event) override; signals: void currentIndexChanged(const QModelIndex &); protected slots: @@ -28,6 +29,7 @@ protected: QTimer expandTimer; QTimer t; QPoint expandPos; + boolean clicking; }; #endif // YACREADER_TREEVIEW_H