diff --git a/Userland/Applets/ClipboardHistory/ClipboardHistoryModel.cpp b/Userland/Applets/ClipboardHistory/ClipboardHistoryModel.cpp index 93d3606298..ecb6f5453c 100644 --- a/Userland/Applets/ClipboardHistory/ClipboardHistoryModel.cpp +++ b/Userland/Applets/ClipboardHistory/ClipboardHistoryModel.cpp @@ -136,6 +136,12 @@ void ClipboardHistoryModel::remove_item(int index) invalidate(); } +void ClipboardHistoryModel::clear() +{ + m_history_items.clear(); + invalidate(); +} + void ClipboardHistoryModel::config_string_did_change(DeprecatedString const& domain, DeprecatedString const& group, DeprecatedString const& key, DeprecatedString const& value_string) { if (domain != "ClipboardHistory" || group != "ClipboardHistory") diff --git a/Userland/Applets/ClipboardHistory/ClipboardHistoryModel.h b/Userland/Applets/ClipboardHistory/ClipboardHistoryModel.h index 8597f92809..0a28dd1ab1 100644 --- a/Userland/Applets/ClipboardHistory/ClipboardHistoryModel.h +++ b/Userland/Applets/ClipboardHistory/ClipboardHistoryModel.h @@ -38,6 +38,7 @@ public: ClipboardItem const& item_at(int index) const { return m_history_items[index]; } void add_item(const GUI::Clipboard::DataAndType& item); void remove_item(int index); + void clear(); bool is_empty() { return m_history_items.is_empty(); } // ^GUI::Model diff --git a/Userland/Applets/ClipboardHistory/main.cpp b/Userland/Applets/ClipboardHistory/main.cpp index d9b8728f3a..2add7e8011 100644 --- a/Userland/Applets/ClipboardHistory/main.cpp +++ b/Userland/Applets/ClipboardHistory/main.cpp @@ -67,12 +67,20 @@ ErrorOr serenity_main(Main::Arguments arguments) }); }); + auto clear_action = GUI::Action::create("Clear history", TRY(Gfx::Bitmap::try_load_from_file("/res/icons/16x16/trash-can.png"sv)), [&](const GUI::Action&) { + model->clear(); + GUI::Clipboard::the().clear(); + }); + auto entry_context_menu = TRY(GUI::Menu::try_create()); TRY(entry_context_menu->try_add_action(delete_action)); TRY(entry_context_menu->try_add_action(debug_dump_action)); + entry_context_menu->add_separator(); + TRY(entry_context_menu->try_add_action(clear_action)); table_view->on_context_menu_request = [&](GUI::ModelIndex const&, GUI::ContextMenuEvent const& event) { delete_action->set_enabled(!table_view->selection().is_empty()); debug_dump_action->set_enabled(!table_view->selection().is_empty()); + clear_action->set_enabled(!model->is_empty()); entry_context_menu->popup(event.screen_position()); };