summaryrefslogtreecommitdiffstats
path: root/src/qt-compositor/wayland_wrapper/wlshmbuffer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qt-compositor/wayland_wrapper/wlshmbuffer.cpp')
-rw-r--r--src/qt-compositor/wayland_wrapper/wlshmbuffer.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/qt-compositor/wayland_wrapper/wlshmbuffer.cpp b/src/qt-compositor/wayland_wrapper/wlshmbuffer.cpp
index e3fb4bd..2ecb2b0 100644
--- a/src/qt-compositor/wayland_wrapper/wlshmbuffer.cpp
+++ b/src/qt-compositor/wayland_wrapper/wlshmbuffer.cpp
@@ -93,9 +93,12 @@ void ShmBuffer::damage()
}
+static ShmHandler *handlerInstance;
+
ShmHandler::ShmHandler(Display *display)
: m_display(display)
{
+ handlerInstance = this;
m_shm = wl_shm_init(m_display->handle(),&shm_callbacks);
}
@@ -133,7 +136,16 @@ void ShmHandler::buffer_damaged_callback(struct wl_buffer *buffer,
void ShmHandler::buffer_destroyed_callback(struct wl_buffer *buffer)
{
- delete static_cast<ShmBuffer *>(buffer->user_data);
+ ShmBuffer *shmbuf = static_cast<ShmBuffer *>(buffer->user_data);
+ for (int i = 0; i < handlerInstance->m_extraCallbacks.count(); ++i)
+ handlerInstance->m_extraCallbacks.at(i)(shmbuf);
+ delete shmbuf;
+}
+
+void ShmHandler::addDestroyCallback(DestroyCallback callback)
+{
+ if (!m_extraCallbacks.contains(callback))
+ m_extraCallbacks.append(callback);
}
}