diff --git a/src/Editor/ResourceBrowser/CResourceBrowser.cpp b/src/Editor/ResourceBrowser/CResourceBrowser.cpp index 6006b0c9..b18b3caa 100644 --- a/src/Editor/ResourceBrowser/CResourceBrowser.cpp +++ b/src/Editor/ResourceBrowser/CResourceBrowser.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -518,6 +519,38 @@ bool CResourceBrowser::eventFilter(QObject *pWatched, QEvent *pEvent) return false; } +void CResourceBrowser::keyPressEvent(QKeyEvent* event) +{ + // If we don't have focus for one reason or another, then + // don't do anything. It's unintuitive to listen on key + // inputs when a control isn't in focus. + const auto* resource_view = mpUI->ResourceTableView; + if (!resource_view->hasFocus()) + { + event->ignore(); + return; + } + + // We only want to handle directory drilldown and returning if only one item is selected. + const auto indexes = resource_view->selectionModel()->selectedIndexes(); + if (indexes.empty() || indexes.size() > 1) + { + event->ignore(); + return; + } + + const auto key = event->key(); + if (key == Qt::Key_Return || key == Qt::Key_Enter) + { + OnDoubleClickTable(indexes.front()); + } + else + { + // Pass down for any alternative handling + event->ignore(); + } +} + void CResourceBrowser::RefreshResources() { // Fill resource table diff --git a/src/Editor/ResourceBrowser/CResourceBrowser.h b/src/Editor/ResourceBrowser/CResourceBrowser.h index 35656ff8..55eb2919 100644 --- a/src/Editor/ResourceBrowser/CResourceBrowser.h +++ b/src/Editor/ResourceBrowser/CResourceBrowser.h @@ -81,6 +81,7 @@ public: // Interface bool eventFilter(QObject* pWatched, QEvent* pEvent) override; + void keyPressEvent(QKeyEvent* event) override; // Accessors CResourceStore* CurrentStore() const { return mpStore; }