88 [[nodiscard]]
bool init(CliprdrClientContext* clip);
89 [[nodiscard]]
bool uninit(CliprdrClientContext* clip);
91 [[nodiscard]]
bool handleEvent(
const SDL_ClipboardEvent& ev);
95 void handleDataRequests();
98 [[nodiscard]] UINT SendClientCapabilities();
99 void clearServerFormats();
100 [[nodiscard]] UINT SendFormatListResponse(BOOL status);
101 [[nodiscard]] UINT SendDataResponse(
const BYTE* data,
size_t size);
102 [[nodiscard]] UINT SendDataRequest(uint32_t formatID,
const std::string& mime);
104 [[nodiscard]] std::string getServerFormat(uint32_t
id);
105 [[nodiscard]] uint32_t serverIdForMime(
const std::string& mime);
107 [[nodiscard]]
bool contains(
const char** mime_types, Sint32 count);
108 [[nodiscard]]
bool ownsClipboard()
const;
110 [[nodiscard]]
static UINT MonitorReady(CliprdrClientContext* context,
113 [[nodiscard]]
static UINT ReceiveServerCapabilities(CliprdrClientContext* context,
115 [[nodiscard]]
static UINT ReceiveServerFormatList(CliprdrClientContext* context,
117 [[nodiscard]]
static UINT
118 ReceiveFormatListResponse(CliprdrClientContext* context,
120 [[nodiscard]] std::shared_ptr<BYTE> getLocalData(uint32_t formatId, uint32_t& len);
121 [[nodiscard]]
static UINT
122 ReceiveFormatDataRequest(CliprdrClientContext* context,
124 [[nodiscard]]
static UINT
125 ReceiveFormatDataResponse(CliprdrClientContext* context,
128 [[nodiscard]]
static const void* SDLCALL ClipDataCb(
void* userdata,
const char* mime_type,
130 static void SDLCALL ClipCleanCb(
void* userdata);
132 [[nodiscard]]
static bool mime_is_file(
const std::string& mime);
133 [[nodiscard]]
static bool mime_is_text(
const std::string& mime);
134 [[nodiscard]]
static bool mime_is_utf8(
const std::string& mime);
135 [[nodiscard]]
static bool mime_is_image(
const std::string& mime);
136 [[nodiscard]]
static bool mime_is_bmp(
const std::string& mime);
137 [[nodiscard]]
static bool mime_is_html(
const std::string& mime);
140 CliprdrFileContext* _file =
nullptr;
141 CliprdrClientContext* _ctx =
nullptr;
142 wLog* _log =
nullptr;
143 wClipboard* _system =
nullptr;
144 std::atomic<bool> _sync =
false;
145 HANDLE _event =
nullptr;
146 Uint64 _last_timestamp = 0;
148 std::vector<CliprdrFormat> _serverFormats;
151 std::queue<ClipRequest> _request_queue;
155 cache_entry(
size_t len, std::shared_ptr<void> p) : size(len), ptr(std::move(p))
160 std::shared_ptr<void> ptr;
162 std::map<std::string, cache_entry> _cache_data;
164 std::vector<std::string> _current_mimetypes;
167 std::deque<uint32_t> _server_requests;
168 bool _reading_server =
false;
170 std::string _mime_uuid;