From c98c8542ca25d277e56160a43cd258e05606f357 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 3 May 2026 07:57:06 +0000 Subject: [PATCH 1/2] Fix two bugs in remote DnD drag: missing idx_in_uri_list and stale data_capacity Agent-Logs-Url: https://github.com/kovidgoyal/kitty/sessions/fdd92dca-f2f9-4bb6-9d85-b5daeaa501f7 Co-authored-by: kovidgoyal <1308621+kovidgoyal@users.noreply.github.com> --- kittens/dnd/drag.go | 2 +- kitty/dnd.c | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/kittens/dnd/drag.go b/kittens/dnd/drag.go index 1732dbc59..12fd613a0 100644 --- a/kittens/dnd/drag.go +++ b/kittens/dnd/drag.go @@ -347,7 +347,7 @@ func (dnd *dnd) start_remote_data_send(ds *drag_source) (err error) { return err } } else { - f := remote_data_item{idx_in_parent: i, metadata: x.metadata, path: x.path} + f := remote_data_item{idx_in_parent: i, idx_in_uri_list: i, metadata: x.metadata, path: x.path} dnd.drag_status.remote_items = append(dnd.drag_status.remote_items, &f) } } diff --git a/kitty/dnd.c b/kitty/dnd.c index a77a8a8a1..9c3ce866a 100644 --- a/kitty/dnd.c +++ b/kitty/dnd.c @@ -1735,13 +1735,18 @@ finish_remote_data(Window *w, size_t item_idx) { ds.items[item_idx].requested_remote_files = false; if (safe_ftruncate(fd, 0) != 0) abrt(errno); if (lseek(fd, 0, SEEK_SET) == -1) abrt(errno); + size_t new_size = 0; for (size_t i = 0; i < ds.items[item_idx].num_uris; i++) { int ret = write_all(fd, ds.items[item_idx].uri_list[i], strlen(ds.items[item_idx].uri_list[i])); + new_size += strlen(ds.items[item_idx].uri_list[i]); free((char*)ds.items[item_idx].uri_list[i]); ds.items[item_idx].uri_list[i] = NULL; if (ret) abrt(ret); if ((ret = write_all(fd, "\r\n", 2))) abrt(ret); + new_size += 2; } free(ds.items[item_idx].uri_list); ds.items[item_idx].uri_list = NULL; ds.items[item_idx].num_uris = 0; + ds.items[item_idx].data_capacity = new_size; + ds.items[item_idx].data_size = 0; int ret = dnd_is_test_mode() ? 0 : notify_drag_data_ready(global_state.drag_source.from_os_window, ds.items[item_idx].mime_type); if (ret) abrt(ret); } From 392b6882c3ad4e5524df629f0e8246db42b84bd4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 3 May 2026 08:00:38 +0000 Subject: [PATCH 2/2] Add comment explaining data_capacity/data_size reset in finish_remote_data Agent-Logs-Url: https://github.com/kovidgoyal/kitty/sessions/fdd92dca-f2f9-4bb6-9d85-b5daeaa501f7 Co-authored-by: kovidgoyal <1308621+kovidgoyal@users.noreply.github.com> --- kitty/dnd.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kitty/dnd.c b/kitty/dnd.c index 9c3ce866a..eb6dab52e 100644 --- a/kitty/dnd.c +++ b/kitty/dnd.c @@ -1745,6 +1745,8 @@ finish_remote_data(Window *w, size_t item_idx) { new_size += 2; } free(ds.items[item_idx].uri_list); ds.items[item_idx].uri_list = NULL; ds.items[item_idx].num_uris = 0; + // The fd has been completely rewritten with updated (cached) URIs; update the read tracking + // fields so drag_get_data returns the full new content starting from the beginning. ds.items[item_idx].data_capacity = new_size; ds.items[item_idx].data_size = 0; int ret = dnd_is_test_mode() ? 0 : notify_drag_data_ready(global_state.drag_source.from_os_window, ds.items[item_idx].mime_type);