-
Notifications
You must be signed in to change notification settings - Fork 174
Expand file tree
/
Copy pathclipboard.h
More file actions
168 lines (146 loc) · 5.82 KB
/
Copy pathclipboard.h
File metadata and controls
168 lines (146 loc) · 5.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
/*
* SPDX-FileCopyrightText: 2017-2017 CSSlayer <wengxt@gmail.com>
*
* SPDX-License-Identifier: LGPL-2.1-or-later
*
*/
#ifndef _FCITX_MODULES_CLIPBOARD_CLIPBOARD_H_
#define _FCITX_MODULES_CLIPBOARD_CLIPBOARD_H_
#include <cstddef>
#include <memory>
#include <string>
#include <unordered_map>
#include <vector>
#include "fcitx-config/configuration.h"
#include "fcitx-config/iniparser.h"
#include "fcitx-config/option.h"
#include "fcitx-config/rawconfig.h"
#include "fcitx-utils/eventloopinterface.h"
#include "fcitx-utils/handlertable.h"
#include "fcitx-utils/i18n.h"
#include "fcitx-utils/key.h"
#include "fcitx-utils/log.h"
#include "fcitx-utils/misc.h"
#include "fcitx-utils/misc_p.h"
#include "fcitx/addoninstance.h"
#include "fcitx/addonmanager.h"
#include "fcitx/inputcontextproperty.h"
#include "fcitx/instance.h"
#include "clipboard_public.h"
#include "clipboardentry.h"
#ifdef ENABLE_X11
#include "xcb_public.h"
#include "xcbclipboard.h"
#endif
#ifdef WAYLAND_FOUND
#include "wayland_public.h"
#include "waylandclipboard.h"
#endif
namespace fcitx {
constexpr size_t MAX_CLIPBOARD_SIZE = 4000;
constexpr char PASSWORD_MIME_TYPE[] = "x-kde-passwordManagerHint";
FCITX_CONFIGURATION(
ClipboardConfig, KeyListOption triggerKey{this,
"TriggerKey",
_("Trigger Key"),
{Key("Control+semicolon")},
KeyListConstrain()};
KeyListOption pastePrimaryKey{
this, "PastePrimaryKey", _("Paste Primary"), {}, KeyListConstrain()};
Option<int, IntConstrain> numOfEntries{
this, "Number of entries", _("Number of entries"), 5, IntConstrain(3)};
ConditionalHidden<isAndroid(),
OptionWithAnnotation<bool, ToolTipAnnotation>>
ignorePasswordFromPasswordManager{
this,
"IgnorePasswordFromPasswordManager",
_("Do not show password from password managers"),
false,
{},
{},
{_("When copying password from a password manager, if the password "
"manager supports marking the clipboard content as password, "
"this clipboard update will be ignored.")}};
ConditionalHidden<isAndroid(), Option<bool>> showPassword{
this, "ShowPassword", _("Display passwords as plain text"), false};
ConditionalHidden<
isAndroid(),
Option<int, IntConstrain, DefaultMarshaller<int>, ToolTipAnnotation>>
clearPasswordAfter{this,
"ClearPasswordAfter",
_("Seconds before clearing password"),
30,
IntConstrain(0, 300),
{},
{_("0 means never clear password.")}};);
class ClipboardState;
class Clipboard final : public AddonInstance {
static constexpr char configFile[] = "conf/clipboard.conf";
public:
Clipboard(Instance *instance);
~Clipboard();
Instance *instance() { return instance_; }
void trigger(InputContext *inputContext);
void updateUI(InputContext *inputContext);
auto &factory() { return factory_; }
void reloadConfig() override;
const Configuration *getConfig() const override { return &config_; }
void setConfig(const RawConfig &config) override {
config_.load(config, true);
safeSaveAsIni(config_, configFile);
}
std::string primary(const InputContext *ic) const;
std::string clipboard(const InputContext *ic) const;
void setPrimary(const std::string &name, const std::string &str);
void setClipboard(const std::string &name, const std::string &str);
void setPrimaryV2(const std::string &name, const std::string &str,
bool password);
void setClipboardV2(const std::string &name, const std::string &str,
bool password);
const auto &config() const { return config_; }
#ifdef ENABLE_X11
FCITX_ADDON_DEPENDENCY_LOADER(xcb, instance_->addonManager());
#endif
private:
FCITX_ADDON_EXPORT_FUNCTION(Clipboard, primary);
FCITX_ADDON_EXPORT_FUNCTION(Clipboard, clipboard);
FCITX_ADDON_EXPORT_FUNCTION(Clipboard, setPrimary);
FCITX_ADDON_EXPORT_FUNCTION(Clipboard, setClipboard);
FCITX_ADDON_EXPORT_FUNCTION(Clipboard, setPrimaryV2);
FCITX_ADDON_EXPORT_FUNCTION(Clipboard, setClipboardV2);
#ifdef WAYLAND_FOUND
FCITX_ADDON_DEPENDENCY_LOADER(wayland, instance_->addonManager());
#endif
void refreshPasswordTimer();
void setPrimaryEntry(const std::string &name, ClipboardEntry entry);
void setClipboardEntry(const std::string &name,
const ClipboardEntry &entry);
Instance *instance_;
std::vector<std::unique_ptr<fcitx::HandlerTableEntry<fcitx::EventHandler>>>
eventHandlers_;
KeyList selectionKeys_;
ClipboardConfig config_;
FactoryFor<ClipboardState> factory_;
#ifdef ENABLE_X11
std::unique_ptr<HandlerTableEntry<XCBConnectionCreated>>
xcbCreatedCallback_;
std::unique_ptr<HandlerTableEntry<XCBConnectionClosed>> xcbClosedCallback_;
std::unordered_map<std::string, std::unique_ptr<XcbClipboard>>
xcbClipboards_;
#endif
#ifdef WAYLAND_FOUND
std::unique_ptr<HandlerTableEntry<WaylandConnectionCreated>>
waylandCreatedCallback_;
std::unique_ptr<HandlerTableEntry<WaylandConnectionClosed>>
waylandClosedCallback_;
std::unordered_map<std::string, std::unique_ptr<WaylandClipboard>>
waylandClipboards_;
#endif
OrderedSet<ClipboardEntry> history_;
ClipboardEntry primary_;
std::unique_ptr<EventSourceTime> clearPasswordTimer_;
};
FCITX_DECLARE_LOG_CATEGORY(clipboard_log);
#define FCITX_CLIPBOARD_DEBUG() FCITX_LOGC(::fcitx::clipboard_log, Debug)
} // namespace fcitx
#endif // _FCITX_MODULES_CLIPBOARD_CLIPBOARD_H_