From bc1293925a271976f0646c6741e402db1f48d2fd Mon Sep 17 00:00:00 2001 From: Aayush Date: Sat, 24 Dec 2022 19:49:32 +0100 Subject: [PATCH] Hackstudio: Use `GUI::TextEditor' actions for cut/copy/paste buttons This fixes a bug where hackstudio's language server will crash upon clicking the 'cut' button when no text is selected. This was because the actions were not disabled on empty selection. We now disable the actions depending on if there is empty selection inside current tab. We update the cut/copy/paste buttons' actions when changing tabs. --- Userland/DevTools/HackStudio/HackStudioWidget.cpp | 14 +++++++++++--- Userland/DevTools/HackStudio/HackStudioWidget.h | 6 ++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/Userland/DevTools/HackStudio/HackStudioWidget.cpp b/Userland/DevTools/HackStudio/HackStudioWidget.cpp index 132f41231a..cfb045a53d 100644 --- a/Userland/DevTools/HackStudio/HackStudioWidget.cpp +++ b/Userland/DevTools/HackStudio/HackStudioWidget.cpp @@ -1171,6 +1171,7 @@ void HackStudioWidget::set_current_editor_wrapper(RefPtr editor_w update_window_title(); update_current_editor_title(); update_tree_view(); + update_toolbar_actions(); set_current_editor_tab_widget(static_cast(m_current_editor_wrapper->parent())); m_current_editor_tab_widget->set_active_widget(editor_wrapper); update_statusbar(); @@ -1263,9 +1264,9 @@ void HackStudioWidget::create_toolbar(GUI::Widget& parent) toolbar.add_action(*m_delete_action); toolbar.add_separator(); - toolbar.add_action(GUI::CommonActions::make_cut_action([this](auto&) { current_editor().cut_action().activate(); }, m_editors_splitter)); - toolbar.add_action(GUI::CommonActions::make_copy_action([this](auto&) { current_editor().copy_action().activate(); }, m_editors_splitter)); - toolbar.add_action(GUI::CommonActions::make_paste_action([this](auto&) { current_editor().paste_action().activate(); }, m_editors_splitter)); + m_cut_button = toolbar.add_action(current_editor().cut_action()); + m_copy_button = toolbar.add_action(current_editor().copy_action()); + m_paste_button = toolbar.add_action(current_editor().paste_action()); toolbar.add_separator(); toolbar.add_action(GUI::CommonActions::make_undo_action([this](auto&) { current_editor().undo_action().activate(); }, m_editors_splitter)); toolbar.add_action(GUI::CommonActions::make_redo_action([this](auto&) { current_editor().redo_action().activate(); }, m_editors_splitter)); @@ -1653,6 +1654,13 @@ void HackStudioWidget::update_tree_view() } } +void HackStudioWidget::update_toolbar_actions() +{ + m_copy_button->set_action(current_editor().copy_action()); + m_paste_button->set_action(current_editor().paste_action()); + m_cut_button->set_action(current_editor().cut_action()); +} + void HackStudioWidget::update_window_title() { window()->set_title(DeprecatedString::formatted("{} - {} - Hack Studio", m_current_editor_wrapper->filename_title(), m_project->name())); diff --git a/Userland/DevTools/HackStudio/HackStudioWidget.h b/Userland/DevTools/HackStudio/HackStudioWidget.h index 290e11de31..670bc2f680 100644 --- a/Userland/DevTools/HackStudio/HackStudioWidget.h +++ b/Userland/DevTools/HackStudio/HackStudioWidget.h @@ -16,6 +16,7 @@ #include "GMLPreviewWidget.h" #include "Git/DiffViewer.h" #include "Git/GitWidget.h" +#include "LibGUI/Button.h" #include "Locator.h" #include "Project.h" #include "ProjectBuilder.h" @@ -163,6 +164,7 @@ private: void update_gml_preview(); void update_tree_view(); + void update_toolbar_actions(); void on_cursor_change(); void file_renamed(DeprecatedString const& old_name, DeprecatedString const& new_name); @@ -257,6 +259,10 @@ private: RefPtr m_wrap_anywhere_action; RefPtr m_wrap_at_words_action; + RefPtr m_cut_button; + RefPtr m_paste_button; + RefPtr m_copy_button; + Mode m_mode { Mode::Code }; OwnPtr m_coredump_inspector; OwnPtr m_project_builder;