From b4376b08f0177de1b2f3d631dc131eedcbd19d37 Mon Sep 17 00:00:00 2001 From: Po Lu Date: Sat, 8 Mar 2025 20:42:49 +0800 Subject: [PATCH] Don't lose drag-and-drop data intended for XTerm-like programs * src/xselect.c (x_own_selection): If special values exist for drag-and-drop to unsupported programs, retain them till the selection is cleared. (cherry picked from commit b0b7ad24e6efca04a373a4f2845a483984e3f1ea) --- src/xselect.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/xselect.c b/src/xselect.c index 5e494a2ca22..5497a98e61d 100644 --- a/src/xselect.c +++ b/src/xselect.c @@ -299,10 +299,17 @@ x_own_selection (Lisp_Object selection_name, Lisp_Object selection_value, Lisp_Object selection_data; Lisp_Object prev_value; + prev_value = LOCAL_SELECTION (selection_name, dpyinfo); + + /* If the previous value contains alternative data for responding to + programs that do not understand a specialized drag-and-drop + protocol and DND_DATA is unset, transfer it to the new value. */ + if (NILP (dnd_data) && !NILP (prev_value)) + dnd_data = XCAR (XCDR (XCDR (XCDR (XCDR (prev_value))))); + selection_data = list5 (selection_name, selection_value, INT_TO_INTEGER (timestamp), frame, dnd_data); - prev_value = LOCAL_SELECTION (selection_name, dpyinfo); tset_selection_alist (dpyinfo->terminal, -- 2.39.5