diff --git a/kitty/dnd.c b/kitty/dnd.c index 18e46ae54..552b9a0ae 100644 --- a/kitty/dnd.c +++ b/kitty/dnd.c @@ -1101,6 +1101,8 @@ drag_get_data(Window *w, const char *mime_type, size_t *sz, int *err_code) { void drag_process_item_data(Window *w, size_t idx, int has_more, const uint8_t *payload, size_t payload_sz) { (void)w; (void)idx; (void)has_more; (void)payload; (void)payload_sz; + // call notify_drag_data_ready() after writing payload to file and + // dont forget to check the return value of notify_drag_data_ready() } #undef img #undef abrt diff --git a/kitty/glfw.c b/kitty/glfw.c index 90efff5bd..b70461f6a 100644 --- a/kitty/glfw.c +++ b/kitty/glfw.c @@ -1144,6 +1144,14 @@ drag_source_callback(GLFWwindow *window UNUSED, GLFWDragEvent *ev) { } #undef ds +int +notify_drag_data_ready(id_type os_window_id, const char *mime_type) { + OSWindow *w = os_window_for_id(os_window_id); + GLFWDragSourceItem item = {.mime_type = mime_type}; + if (w && w->handle) return glfwStartDrag(w->handle, &item, 1, NULL, -1, false); + return ENOENT; +} + static char* get_current_selection(void) { if (!global_state.boss) return NULL; diff --git a/kitty/state.h b/kitty/state.h index bf56f421a..1ac6ac4db 100644 --- a/kitty/state.h +++ b/kitty/state.h @@ -598,3 +598,4 @@ void request_drop_data(OSWindow *w, id_type wid, const char* mime); void cancel_current_drag_source(void); bool change_drag_image(int idx); int start_window_drag(Window *w); +int notify_drag_data_ready(id_type os_window_id, const char *mime_type);