mirror of
https://github.com/SerenityOS/serenity
synced 2024-10-15 12:23:15 +00:00
ClipboardHistory: Listen for configuration changes
Resize the clipboard history size dynamically by listening for config changes. This is currently not ideal since we don't have the callbacks for `Config::Listener::config_i32_did_change`, so for now we are just taking the string and attempting to convert it to an int.
This commit is contained in:
parent
b1a3bb638b
commit
441e601689
|
@ -6,9 +6,9 @@
|
|||
*/
|
||||
|
||||
#include "ClipboardHistoryModel.h"
|
||||
#include <LibConfig/Client.h>
|
||||
#include <AK/NumberFormat.h>
|
||||
#include <AK/StringBuilder.h>
|
||||
#include <LibConfig/Client.h>
|
||||
|
||||
NonnullRefPtr<ClipboardHistoryModel> 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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,11 +8,13 @@
|
|||
#pragma once
|
||||
|
||||
#include <AK/Vector.h>
|
||||
#include <LibConfig/Listener.h>
|
||||
#include <LibGUI/Clipboard.h>
|
||||
#include <LibGUI/Model.h>
|
||||
|
||||
class ClipboardHistoryModel final : public GUI::Model
|
||||
, public GUI::Clipboard::ClipboardClient {
|
||||
, public GUI::Clipboard::ClipboardClient
|
||||
, public Config::Listener {
|
||||
public:
|
||||
static NonnullRefPtr<ClipboardHistoryModel> 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);
|
||||
|
|
|
@ -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");
|
||||
|
|
Loading…
Reference in a new issue