diff --git a/Userland/Applications/Spreadsheet/SpreadsheetWidget.cpp b/Userland/Applications/Spreadsheet/SpreadsheetWidget.cpp index 6b0af1f5a7..470ad77892 100644 --- a/Userland/Applications/Spreadsheet/SpreadsheetWidget.cpp +++ b/Userland/Applications/Spreadsheet/SpreadsheetWidget.cpp @@ -245,6 +245,7 @@ SpreadsheetWidget::SpreadsheetWidget(GUI::Window& parent_window, NonnullRefPtrVe m_cut_action->set_enabled(false); m_copy_action->set_enabled(false); + m_paste_action->set_enabled(false); m_tab_widget->on_change = [this](auto& selected_widget) { // for keyboard shortcuts and command palette @@ -269,6 +270,12 @@ void SpreadsheetWidget::resize_event(GUI::ResizeEvent& event) m_inline_documentation_window->set_rect(m_cell_value_editor->screen_relative_rect().translated(0, m_cell_value_editor->height() + 7).inflated(6, 6)); } +void SpreadsheetWidget::clipboard_content_did_change(String const& mime_type) +{ + if (auto* sheet = current_worksheet_if_available()) + m_paste_action->set_enabled(!sheet->selected_cells().is_empty() && mime_type.starts_with("text/")); +} + void SpreadsheetWidget::setup_tabs(NonnullRefPtrVector new_sheets) { for (auto& sheet : new_sheets) { @@ -286,6 +293,7 @@ void SpreadsheetWidget::setup_tabs(NonnullRefPtrVector new_sheets) VERIFY(!selection.is_empty()); m_cut_action->set_enabled(true); m_copy_action->set_enabled(true); + m_paste_action->set_enabled(GUI::Clipboard::the().fetch_mime_type().starts_with("text/")); m_current_cell_label->set_enabled(true); m_cell_value_editor->set_enabled(true); @@ -353,6 +361,7 @@ void SpreadsheetWidget::setup_tabs(NonnullRefPtrVector new_sheets) m_cut_action->set_enabled(false); m_copy_action->set_enabled(false); + m_paste_action->set_enabled(false); static_cast(const_cast(m_cell_value_editor->syntax_highlighter()))->set_cell(nullptr); }; diff --git a/Userland/Applications/Spreadsheet/SpreadsheetWidget.h b/Userland/Applications/Spreadsheet/SpreadsheetWidget.h index ef1c5dcfa0..ef9aa1442b 100644 --- a/Userland/Applications/Spreadsheet/SpreadsheetWidget.h +++ b/Userland/Applications/Spreadsheet/SpreadsheetWidget.h @@ -9,12 +9,15 @@ #include "SpreadsheetView.h" #include "Workbook.h" #include +#include #include #include namespace Spreadsheet { -class SpreadsheetWidget final : public GUI::Widget { +class SpreadsheetWidget final + : public GUI::Widget + , public GUI::Clipboard::ClipboardClient { C_OBJECT(SpreadsheetWidget); public: @@ -49,8 +52,12 @@ public: auto& undo_stack() { return m_undo_stack; } private: + // ^GUI::Widget virtual void resize_event(GUI::ResizeEvent&) override; + // ^GUI::Clipboard::ClipboardClient + virtual void clipboard_content_did_change(String const& mime_type) override; + explicit SpreadsheetWidget(GUI::Window& window, NonnullRefPtrVector&& sheets = {}, bool should_add_sheet_if_empty = true); void setup_tabs(NonnullRefPtrVector new_sheets);