From 9778322d99ede0ab51b74f9513076295dc0a8d7c Mon Sep 17 00:00:00 2001 From: Eladash Date: Fri, 21 Apr 2023 19:07:25 +0300 Subject: [PATCH] UI: Focus to game searchbar on load Make return key press focus to game list's first entry. --- rpcs3/rpcs3qt/game_list.cpp | 10 ++++++++++ rpcs3/rpcs3qt/game_list.h | 3 +++ rpcs3/rpcs3qt/game_list_frame.cpp | 22 ++++++++++++++++++++++ rpcs3/rpcs3qt/game_list_frame.h | 1 + rpcs3/rpcs3qt/main_window.cpp | 4 ++++ 5 files changed, 40 insertions(+) diff --git a/rpcs3/rpcs3qt/game_list.cpp b/rpcs3/rpcs3qt/game_list.cpp index 030023225d..86bc2f5431 100644 --- a/rpcs3/rpcs3qt/game_list.cpp +++ b/rpcs3/rpcs3qt/game_list.cpp @@ -45,3 +45,13 @@ void game_list::leaveEvent(QEvent */*event*/) m_last_hover_item = nullptr; } } + +void game_list::FocusAndSelectFirstEntryIfNoneIs() +{ + if (QTableWidgetItem* item = itemAt(0, 0); item && selectedIndexes().isEmpty()) + { + setCurrentItem(item); + } + + setFocus(); +} diff --git a/rpcs3/rpcs3qt/game_list.h b/rpcs3/rpcs3qt/game_list.h index 8fce6d2088..b3bf0376de 100644 --- a/rpcs3/rpcs3qt/game_list.h +++ b/rpcs3/rpcs3qt/game_list.h @@ -35,6 +35,9 @@ class game_list : public QTableWidget public: void clear_list(); // Use this instead of clearContents +public Q_SLOTS: + void FocusAndSelectFirstEntryIfNoneIs(); + protected: movie_item* m_last_hover_item = nullptr; diff --git a/rpcs3/rpcs3qt/game_list_frame.cpp b/rpcs3/rpcs3qt/game_list_frame.cpp index ef6de68c46..cb77c93148 100644 --- a/rpcs3/rpcs3qt/game_list_frame.cpp +++ b/rpcs3/rpcs3qt/game_list_frame.cpp @@ -2422,6 +2422,28 @@ void game_list_frame::SetSearchText(const QString& text) Refresh(); } +void game_list_frame::FocusAndSelectFirstEntryIfNoneIs() +{ + if (m_is_list_layout) + { + if (!m_game_list) + { + return; + } + + m_game_list->FocusAndSelectFirstEntryIfNoneIs(); + } + else + { + if (!m_game_grid) + { + return; + } + + m_game_grid->FocusAndSelectFirstEntryIfNoneIs(); + } +} + void game_list_frame::closeEvent(QCloseEvent *event) { QDockWidget::closeEvent(event); diff --git a/rpcs3/rpcs3qt/game_list_frame.h b/rpcs3/rpcs3qt/game_list_frame.h index 994053b752..9fa47e1315 100644 --- a/rpcs3/rpcs3qt/game_list_frame.h +++ b/rpcs3/rpcs3qt/game_list_frame.h @@ -77,6 +77,7 @@ public Q_SLOTS: void SetShowCompatibilityInGrid(bool show); void SetShowCustomIcons(bool show); void SetPlayHoverGifs(bool play); + void FocusAndSelectFirstEntryIfNoneIs(); private Q_SLOTS: void OnRefreshFinished(); diff --git a/rpcs3/rpcs3qt/main_window.cpp b/rpcs3/rpcs3qt/main_window.cpp index f998f1158d..14be8ffa7c 100644 --- a/rpcs3/rpcs3qt/main_window.cpp +++ b/rpcs3/rpcs3qt/main_window.cpp @@ -276,6 +276,9 @@ bool main_window::Init([[maybe_unused]] bool with_cli_boot) // Disable vsh if not present. ui->bootVSHAct->setEnabled(fs::is_file(g_cfg_vfs.get_dev_flash() + "vsh/module/vsh.self")); + // Focus to search bar by default + ui->mw_searchbar->setFocus(); + return true; } @@ -2784,6 +2787,7 @@ void main_window::CreateConnects() }); connect(ui->mw_searchbar, &QLineEdit::textChanged, m_game_list_frame, &game_list_frame::SetSearchText); + connect(ui->mw_searchbar, &QLineEdit::returnPressed, m_game_list_frame, &game_list_frame::FocusAndSelectFirstEntryIfNoneIs); } void main_window::CreateDockWindows()