summaryrefslogtreecommitdiff
path: root/src/protocols/DataDeviceWlr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/protocols/DataDeviceWlr.cpp')
-rw-r--r--src/protocols/DataDeviceWlr.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/protocols/DataDeviceWlr.cpp b/src/protocols/DataDeviceWlr.cpp
index d29106e0..262bc109 100644
--- a/src/protocols/DataDeviceWlr.cpp
+++ b/src/protocols/DataDeviceWlr.cpp
@@ -1,6 +1,8 @@
#include "DataDeviceWlr.hpp"
#include <algorithm>
+#include <hyprutils/os/FileDescriptor.hpp>
#include "../managers/SeatManager.hpp"
+#include "../managers/permissions/DynamicPermissionManager.hpp"
#include "core/Seat.hpp"
using namespace Hyprutils::OS;
@@ -23,6 +25,16 @@ CWLRDataOffer::CWLRDataOffer(SP<CZwlrDataControlOfferV1> resource_, SP<IDataSour
return;
}
+ const auto CLIENT = r->client();
+ const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(CLIENT, PERMISSION_TYPE_CLIPBOARD_READ);
+ if (PERM == PERMISSION_RULE_ALLOW_MODE_DENY) {
+ LOGM(Log::LOG, "Clipboard read denied by permission manager for client {:x}", (uintptr_t)CLIENT);
+ return;
+ } else if (PERM == PERMISSION_RULE_ALLOW_MODE_PENDING) {
+ LOGM(Log::LOG, "Clipboard read permission pending for client {:x}", (uintptr_t)CLIENT);
+ return;
+ }
+
LOGM(Log::DEBUG, "Offer {:x} asks to send data from source {:x}", (uintptr_t)this, (uintptr_t)m_source.get());
m_source->send(mime, std::move(sendFd));
@@ -118,6 +130,16 @@ CWLRDataDevice::CWLRDataDevice(SP<CZwlrDataControlDeviceV1> resource_) : m_resou
return;
}
+ const auto CLIENT = r->client();
+ const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(CLIENT, PERMISSION_TYPE_CLIPBOARD_WRITE);
+ if (PERM == PERMISSION_RULE_ALLOW_MODE_DENY) {
+ LOGM(Log::LOG, "Clipboard write denied by permission manager for client {:x}", (uintptr_t)CLIENT);
+ return;
+ } else if (PERM == PERMISSION_RULE_ALLOW_MODE_PENDING) {
+ LOGM(Log::LOG, "Clipboard write permission pending for client {:x}", (uintptr_t)CLIENT);
+ return;
+ }
+
if (source && source->used())
LOGM(Log::WARN, "setSelection on a used resource. By protocol, this is a violation, but firefox et al insist on doing this.");
@@ -135,6 +157,16 @@ CWLRDataDevice::CWLRDataDevice(SP<CZwlrDataControlDeviceV1> resource_) : m_resou
return;
}
+ const auto CLIENT = r->client();
+ const auto PERM = g_pDynamicPermissionManager->clientPermissionMode(CLIENT, PERMISSION_TYPE_CLIPBOARD_WRITE);
+ if (PERM == PERMISSION_RULE_ALLOW_MODE_DENY) {
+ LOGM(Log::LOG, "Clipboard write denied by permission manager for client {:x}", (uintptr_t)CLIENT);
+ return;
+ } else if (PERM == PERMISSION_RULE_ALLOW_MODE_PENDING) {
+ LOGM(Log::LOG, "Clipboard write permission pending for client {:x}", (uintptr_t)CLIENT);
+ return;
+ }
+
if (source && source->used())
LOGM(Log::WARN, "setSelection on a used resource. By protocol, this is a violation, but firefox et al insist on doing this.");