From 2d460b504f8fb95e23dbdc3c388ed892e0d37854 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Wed, 23 Oct 2019 21:02:02 +0200 Subject: [PATCH] HackStudio: Make the "find in files" widget more keyboard-accessible Have Ctrl+Shift+F open the find-in-files widget and focus the text box so you can start entering text right away. Also make it do a search when you press the return key. --- DevTools/HackStudio/main.cpp | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/DevTools/HackStudio/main.cpp b/DevTools/HackStudio/main.cpp index f0452d57d0..729d4e2c6b 100644 --- a/DevTools/HackStudio/main.cpp +++ b/DevTools/HackStudio/main.cpp @@ -27,6 +27,7 @@ OwnPtr g_project; RefPtr g_window; RefPtr g_project_list_view; RefPtr g_text_editor; +RefPtr g_find_in_files_textbox; static void build(TerminalWrapper&); static void run(TerminalWrapper&); @@ -74,7 +75,8 @@ int main(int argc, char** argv) auto tab_widget = GTabWidget::construct(inner_splitter); - tab_widget->add_widget("Find in files", build_find_in_files_widget()); + auto find_in_files_widget = build_find_in_files_widget(); + tab_widget->add_widget("Find in files", find_in_files_widget); auto terminal_wrapper = TerminalWrapper::construct(nullptr); tab_widget->add_widget("Console", terminal_wrapper); @@ -111,6 +113,14 @@ int main(int argc, char** argv) })); menubar->add_menu(move(app_menu)); + auto edit_menu = make("Edit"); + edit_menu->add_action(GAction::create("Find in files...", { Mod_Ctrl | Mod_Shift, Key_F }, [&](auto&) { + tab_widget->set_active_widget(find_in_files_widget); + g_find_in_files_textbox->select_all(); + g_find_in_files_textbox->set_focus(true); + })); + menubar->add_menu(move(edit_menu)); + auto build_menu = make("Build"); build_menu->add_action(GAction::create("Build", { Mod_Ctrl, Key_B }, [&](auto&) { build(terminal_wrapper); @@ -191,9 +201,9 @@ NonnullRefPtr build_find_in_files_widget() { auto widget = GWidget::construct(); widget->set_layout(make(Orientation::Vertical)); - auto textbox = GTextBox::construct(widget); - textbox->set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); - textbox->set_preferred_size(0, 20); + g_find_in_files_textbox = GTextBox::construct(widget); + g_find_in_files_textbox->set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); + g_find_in_files_textbox->set_preferred_size(0, 20); auto button = GButton::construct("Find in files", widget); button->set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); button->set_preferred_size(0, 20); @@ -212,10 +222,13 @@ NonnullRefPtr build_find_in_files_widget() g_text_editor->set_focus(true); }; - button->on_click = [textbox, result_view = result_view.ptr()](auto&) { - auto results_model = find_in_files(textbox->text()); + button->on_click = [result_view = result_view.ptr()](auto&) { + auto results_model = find_in_files(g_find_in_files_textbox->text()); result_view->set_model(results_model); }; + g_find_in_files_textbox->on_return_pressed = [button = button.ptr()] { + button->click(); + }; return widget; }