88 [[nodiscard]]
bool init(CliprdrClientContext* clip);
89 [[nodiscard]]
bool uninit(CliprdrClientContext* clip);
91 [[nodiscard]]
bool handleEvent(
const SDL_ClipboardEvent& ev);
95 void handleDataRequests();
96#if defined(__EMSCRIPTEN__)
99 [[nodiscard]]
static bool webOffer(
const char* utf8,
const BYTE* dib,
size_t dibSize);
102 [[nodiscard]]
bool webRequestServerText();
105 std::string _web_local;
106 std::vector<BYTE> _web_local_dib;
107 std::deque<size_t> _web_recent;
111 [[nodiscard]] UINT SendClientCapabilities();
112 void clearServerFormats();
113 [[nodiscard]] UINT SendFormatListResponse(BOOL status);
114 [[nodiscard]] UINT SendDataResponse(
const BYTE* data,
size_t size);
115 [[nodiscard]] UINT SendDataRequest(uint32_t formatID,
const std::string& mime);
117 [[nodiscard]] std::string getServerFormat(uint32_t
id);
118 [[nodiscard]] uint32_t serverIdForMime(
const std::string& mime);
120 [[nodiscard]]
bool contains(
const char** mime_types, Sint32 count);
121 [[nodiscard]]
bool ownsClipboard()
const;
123 [[nodiscard]]
static UINT MonitorReady(CliprdrClientContext* context,
126 [[nodiscard]]
static UINT ReceiveServerCapabilities(CliprdrClientContext* context,
128 [[nodiscard]]
static UINT ReceiveServerFormatList(CliprdrClientContext* context,
130 [[nodiscard]]
static UINT
131 ReceiveFormatListResponse(CliprdrClientContext* context,
133 [[nodiscard]] std::shared_ptr<BYTE> getLocalData(uint32_t formatId, uint32_t& len);
134 [[nodiscard]]
static UINT
135 ReceiveFormatDataRequest(CliprdrClientContext* context,
137 [[nodiscard]]
static UINT
138 ReceiveFormatDataResponse(CliprdrClientContext* context,
141 [[nodiscard]]
static const void* SDLCALL ClipDataCb(
void* userdata,
const char* mime_type,
143 static void SDLCALL ClipCleanCb(
void* userdata);
145 [[nodiscard]]
static bool mime_is_file(
const std::string& mime);
146 [[nodiscard]]
static bool mime_is_text(
const std::string& mime);
147 [[nodiscard]]
static bool mime_is_utf8(
const std::string& mime);
148 [[nodiscard]]
static bool mime_is_image(
const std::string& mime);
149 [[nodiscard]]
static bool mime_is_bmp(
const std::string& mime);
150 [[nodiscard]]
static bool mime_is_html(
const std::string& mime);
153 CliprdrFileContext* _file =
nullptr;
154 CliprdrClientContext* _ctx =
nullptr;
155 wLog* _log =
nullptr;
156 wClipboard* _system =
nullptr;
157 std::atomic<bool> _sync =
false;
158 HANDLE _event =
nullptr;
159 Uint64 _last_timestamp = 0;
161 std::vector<CliprdrFormat> _serverFormats;
164 std::queue<ClipRequest> _request_queue;
168 cache_entry(
size_t len, std::shared_ptr<void> p) : size(len), ptr(std::move(p))
173 std::shared_ptr<void> ptr;
175 std::map<std::string, cache_entry> _cache_data;
177 std::vector<std::string> _current_mimetypes;
180 std::deque<uint32_t> _server_requests;
181 bool _reading_server =
false;
183 std::string _mime_uuid;