summaryrefslogtreecommitdiff
path: root/src/protocols/core/DataDevice.cpp
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2024-05-15 16:25:56 +0100
committerVaxry <vaxry@vaxry.net>2024-05-15 16:26:02 +0100
commit3381e2b55b9eaf8d30344c301aacfc664519688b (patch)
tree4d3c436aba7b7268fa9592e0f2cecf6a35a0411a /src/protocols/core/DataDevice.cpp
parent7fbe05a250fb81b4a9cd531460b72b038f37e88f (diff)
datadevice: guard surface in dnd for null
fixes #6076
Diffstat (limited to 'src/protocols/core/DataDevice.cpp')
-rw-r--r--src/protocols/core/DataDevice.cpp36
1 files changed, 19 insertions, 17 deletions
diff --git a/src/protocols/core/DataDevice.cpp b/src/protocols/core/DataDevice.cpp
index 2b9503b1..354259fe 100644
--- a/src/protocols/core/DataDevice.cpp
+++ b/src/protocols/core/DataDevice.cpp
@@ -233,7 +233,7 @@ CWLDataDeviceResource::CWLDataDeviceResource(SP<CWlDataDevice> resource_) : reso
source->dnd = true;
- PROTO::data->initiateDrag(source, wlr_surface_from_resource(icon), wlr_surface_from_resource(origin));
+ PROTO::data->initiateDrag(source, icon ? wlr_surface_from_resource(icon) : nullptr, wlr_surface_from_resource(origin));
});
}
@@ -471,22 +471,24 @@ void CWLDataDeviceProtocol::initiateDrag(WP<CWLDataSourceResource> currentSource
dnd.currentSource = currentSource;
dnd.originSurface = origin;
dnd.dndSurface = dragSurface;
- dnd.hyprListener_dndSurfaceDestroy.initCallback(
- &dragSurface->events.destroy, [this](void* owner, void* data) { abortDrag(); }, nullptr, "CWLDataDeviceProtocol::drag");
- dnd.hyprListener_dndSurfaceCommit.initCallback(
- &dragSurface->events.commit,
- [this](void* owner, void* data) {
- if (dnd.dndSurface->pending.buffer_width > 0 && dnd.dndSurface->pending.buffer_height > 0 && !dnd.dndSurface->mapped) {
- wlr_surface_map(dnd.dndSurface);
- return;
- }
-
- if (dnd.dndSurface->pending.buffer_width <= 0 && dnd.dndSurface->pending.buffer_height <= 0 && dnd.dndSurface->mapped) {
- wlr_surface_unmap(dnd.dndSurface);
- return;
- }
- },
- nullptr, "CWLDataDeviceProtocol::drag");
+ if (dragSurface) {
+ dnd.hyprListener_dndSurfaceDestroy.initCallback(
+ &dragSurface->events.destroy, [this](void* owner, void* data) { abortDrag(); }, nullptr, "CWLDataDeviceProtocol::drag");
+ dnd.hyprListener_dndSurfaceCommit.initCallback(
+ &dragSurface->events.commit,
+ [this](void* owner, void* data) {
+ if (dnd.dndSurface->pending.buffer_width > 0 && dnd.dndSurface->pending.buffer_height > 0 && !dnd.dndSurface->mapped) {
+ wlr_surface_map(dnd.dndSurface);
+ return;
+ }
+
+ if (dnd.dndSurface->pending.buffer_width <= 0 && dnd.dndSurface->pending.buffer_height <= 0 && dnd.dndSurface->mapped) {
+ wlr_surface_unmap(dnd.dndSurface);
+ return;
+ }
+ },
+ nullptr, "CWLDataDeviceProtocol::drag");
+ }
dnd.mouseButton = g_pHookSystem->hookDynamic("mouseButton", [this](void* self, SCallbackInfo& info, std::any e) {
auto E = std::any_cast<IPointer::SButtonEvent>(e);