mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-26 18:22:09 +02:00
Fix leak of Wayland callback structure when doing a copy
This commit is contained in:
13
glfw/wl_window.c
vendored
13
glfw/wl_window.c
vendored
@@ -1787,16 +1787,14 @@ const static struct wl_data_device_listener data_device_listener = {
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
copy_callback_done(void *data, struct wl_callback *callback, uint32_t serial) {
|
copy_callback_done(void *data, struct wl_callback *callback, uint32_t serial) {
|
||||||
if (!_glfw.wl.dataDevice) return;
|
if (_glfw.wl.dataDevice) {
|
||||||
if (data == (void*)_glfw.wl.dataSourceForClipboard) {
|
if (data == (void*)_glfw.wl.dataSourceForClipboard) {
|
||||||
wl_data_device_set_selection(_glfw.wl.dataDevice, data, serial);
|
wl_data_device_set_selection(_glfw.wl.dataDevice, data, serial);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
wl_callback_destroy(callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
const static struct wl_callback_listener copy_callback_listener = {
|
|
||||||
.done = copy_callback_done
|
|
||||||
};
|
|
||||||
|
|
||||||
void _glfwSetupWaylandDataDevice() {
|
void _glfwSetupWaylandDataDevice() {
|
||||||
_glfw.wl.dataDevice = wl_data_device_manager_get_data_device(_glfw.wl.dataDeviceManager, _glfw.wl.seat);
|
_glfw.wl.dataDevice = wl_data_device_manager_get_data_device(_glfw.wl.dataDeviceManager, _glfw.wl.seat);
|
||||||
if (_glfw.wl.dataDevice) wl_data_device_add_listener(_glfw.wl.dataDevice, &data_device_listener, NULL);
|
if (_glfw.wl.dataDevice) wl_data_device_add_listener(_glfw.wl.dataDevice, &data_device_listener, NULL);
|
||||||
@@ -1850,6 +1848,7 @@ void _glfwPlatformSetClipboardString(const char* string)
|
|||||||
wl_data_source_offer(_glfw.wl.dataSourceForClipboard, "STRING");
|
wl_data_source_offer(_glfw.wl.dataSourceForClipboard, "STRING");
|
||||||
wl_data_source_offer(_glfw.wl.dataSourceForClipboard, "UTF8_STRING");
|
wl_data_source_offer(_glfw.wl.dataSourceForClipboard, "UTF8_STRING");
|
||||||
struct wl_callback *callback = wl_display_sync(_glfw.wl.display);
|
struct wl_callback *callback = wl_display_sync(_glfw.wl.display);
|
||||||
|
const static struct wl_callback_listener copy_callback_listener = {.done = copy_callback_done };
|
||||||
wl_callback_add_listener(callback, ©_callback_listener, _glfw.wl.dataSourceForClipboard);
|
wl_callback_add_listener(callback, ©_callback_listener, _glfw.wl.dataSourceForClipboard);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user