Deskflow 1.25.0.83
Keyboard and mouse sharing utility
Loading...
Searching...
No Matches
WlClipboard.h
Go to the documentation of this file.
1/*
2 * Deskflow -- mouse and keyboard sharing utility
3 * SPDX-FileCopyrightText: (C) 2025 Deskflow Developers
4 * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
5 */
6
7#pragma once
8
10#include "deskflow/IClipboard.h"
11
12#include <atomic>
13#include <fcntl.h>
14#include <memory>
15#include <mutex>
16#include <string>
17#include <thread>
18
19#include <QObject>
20#include <QString>
21
22class QProcess;
24
28class WlClipboard : public QObject, public IClipboard
29{
30 Q_OBJECT
31public:
32 explicit WlClipboard(ClipboardID id);
33 WlClipboard(WlClipboard const &) = delete;
35 ~WlClipboard() override;
36
37 WlClipboard &operator=(WlClipboard const &) = delete;
39
41 ClipboardID getID() const;
42
44 static bool isAvailable();
45
47 static bool isEnabled();
48
50 void startMonitoring();
51
53 void stopMonitoring();
54
56 bool hasChanged() const;
57
59 void resetChanged();
60
61 // IClipboard overrides
62 bool empty() override;
63 void add(Format format, const std::string &data) override;
64 bool open(Time time) const override;
65 void close() const override;
66 Time getTime() const override;
67 bool has(Format format) const override;
68 std::string get(Format format) const override;
69
70private:
72 QString formatToMimeType(Format format) const;
73
75 Format mimeTypeToFormat(const QString &mimeType) const;
76
78 QStringList getAvailableMimeTypes() const;
79
81 void monitorClipboard();
82
84 Time getCurrentTime() const;
85
87 bool isOwned() const;
88
90 void updateOwnership(bool owned);
91
93 void invalidateCache();
94
95private:
96 ClipboardID m_id;
97 mutable bool m_open = false;
98 mutable Time m_time = 0;
99 mutable Time m_cachedTime = 0;
100 mutable bool m_owned = false;
101 mutable std::atomic<bool> m_hasChanged = false;
102
103 // Cached clipboard data
104 mutable std::mutex m_cacheMutex;
105 mutable bool m_cached = false;
106 mutable std::string m_cachedData[static_cast<int>(Format::TotalFormats)];
107 mutable bool m_cachedAvailable[static_cast<int>(Format::TotalFormats)];
108
109 // Background monitoring
110 std::unique_ptr<std::thread> m_monitorThread;
111 std::atomic<bool> m_monitoring = false;
112 std::atomic<bool> m_stopMonitoring = false;
113
114 // Clipboard selection type (true = clipboard, false = primary)
115 bool m_useClipboard;
116
117 // Hold a ref to running wl-copy processes
118 QList<QProcess *> m_runningWlCopies;
119};
static int void FAR * data
Definition ArchNetworkWinsock.cpp:35
uint8_t ClipboardID
Clipboard ID.
Definition ClipboardTypes.h:16
Clipboard interface.
Definition IClipboard.h:19
Format
Clipboard formats.
Definition IClipboard.h:50
@ TotalFormats
The number of clipboard formats supported.
Definition IClipboard.h:54
uint32_t Time
Timestamp type.
Definition IClipboard.h:28
bool has(Format format) const override
Check for data.
Definition WlClipboard.cpp:206
WlClipboard(WlClipboard &&)=delete
std::string get(Format format) const override
Get data.
Definition WlClipboard.cpp:252
void stopMonitoring()
Stop monitoring clipboard changes.
Definition WlClipboard.cpp:92
WlClipboard(WlClipboard const &)=delete
ClipboardID getID() const
Get clipboard ID.
Definition WlClipboard.cpp:67
Time getTime() const override
Get time.
Definition WlClipboard.cpp:201
bool empty() override
Empty clipboard.
Definition WlClipboard.cpp:112
static bool isAvailable()
Check if wl-clipboard tools are available.
Definition WlClipboard.cpp:72
~WlClipboard() override
Definition WlClipboard.cpp:57
bool open(Time time) const override
Open clipboard.
Definition WlClipboard.cpp:176
void startMonitoring()
Start monitoring clipboard changes.
Definition WlClipboard.cpp:82
static bool isEnabled()
Check if WlClipboard is enabled.
Definition WlClipboard.cpp:77
WlClipboard & operator=(WlClipboard const &)=delete
void resetChanged()
Reset the changed flag and clear cache.
Definition WlClipboard.cpp:389
void close() const override
Close clipboard.
Definition WlClipboard.cpp:189
WlClipboard & operator=(WlClipboard &&)=delete
WlClipboard(ClipboardID id)
Definition WlClipboard.cpp:49
bool hasChanged() const
Check if clipboard has changed.
Definition WlClipboard.cpp:107
void add(Format format, const std::string &data) override
Add data.
Definition WlClipboard.cpp:140