diff --git a/Userland/Applets/ClipboardHistory/ClipboardHistoryModel.cpp b/Userland/Applets/ClipboardHistory/ClipboardHistoryModel.cpp index c81878e81c..1fed645cc5 100644 --- a/Userland/Applets/ClipboardHistory/ClipboardHistoryModel.cpp +++ b/Userland/Applets/ClipboardHistory/ClipboardHistoryModel.cpp @@ -6,9 +6,9 @@ */ #include "ClipboardHistoryModel.h" -#include #include #include +#include NonnullRefPtr ClipboardHistoryModel::create() { @@ -121,3 +121,23 @@ void ClipboardHistoryModel::remove_item(int index) { m_history_items.remove(index); } + +void ClipboardHistoryModel::config_string_did_change(String const& domain, String const& group, String const& key, String const& value_string) +{ + if (domain != "ClipboardHistory" || group != "ClipboardHistory") + return; + + // FIXME: Once we can get notified for `i32` changes, we can use that instead of this hack. + if (key == "NumHistoryItems") { + auto value_or_error = value_string.to_int(); + if (!value_or_error.has_value()) + return; + auto value = value_or_error.value(); + if (value < (int)m_history_items.size()) { + m_history_items.remove(value, m_history_items.size() - value); + invalidate(); + } + m_history_limit = value; + return; + } +} diff --git a/Userland/Applets/ClipboardHistory/ClipboardHistoryModel.h b/Userland/Applets/ClipboardHistory/ClipboardHistoryModel.h index d7dd33cfb1..459adbdb97 100644 --- a/Userland/Applets/ClipboardHistory/ClipboardHistoryModel.h +++ b/Userland/Applets/ClipboardHistory/ClipboardHistoryModel.h @@ -8,11 +8,13 @@ #pragma once #include +#include #include #include class ClipboardHistoryModel final : public GUI::Model - , public GUI::Clipboard::ClipboardClient { + , public GUI::Clipboard::ClipboardClient + , public Config::Listener { public: static NonnullRefPtr create(); @@ -28,6 +30,9 @@ public: const GUI::Clipboard::DataAndType& item_at(int index) const { return m_history_items[index]; } void remove_item(int index); + // ^Config::Listener + virtual void config_string_did_change(String const& domain, String const& group, String const& key, String const& value) override; + private: ClipboardHistoryModel(); void add_item(const GUI::Clipboard::DataAndType& item); diff --git a/Userland/Applets/ClipboardHistory/main.cpp b/Userland/Applets/ClipboardHistory/main.cpp index 1ffdf6c0a5..6ac3d4d1bc 100644 --- a/Userland/Applets/ClipboardHistory/main.cpp +++ b/Userland/Applets/ClipboardHistory/main.cpp @@ -25,6 +25,7 @@ int main(int argc, char* argv[]) auto app = GUI::Application::construct(argc, argv); Config::pledge_domains("ClipboardHistory"); + Config::monitor_domain("ClipboardHistory"); if (pledge("stdio recvfd sendfd rpath", nullptr) < 0) { perror("pledge");