Fix clipboard free mismatch: XFree -> wfree

x11_clipboard_fetch now returns wmalloc copy (XFree internally).
Callers use wfree uniformly on both backends. Prevents X11 regression
where XFree was called on wmalloc memory or vice versa.
This commit is contained in:
Window Maker 2026-05-23 15:04:15 +02:00
parent 0083654d2e
commit eeda48d24e
3 changed files with 15 additions and 6 deletions

View File

@ -2382,7 +2382,7 @@ static void pasteText(WMView * view, Atom selection, Atom target, Time timestamp
updateCursorPosition(tPtr);
paintText(tPtr);
XFree(text);
wfree(text);
}
}
@ -2546,7 +2546,7 @@ static void handleActionEvents(WMEvent * event, void *data)
} else
insertTextInteractively(tPtr, text, n);
XFree(text);
wfree(text);
#if 0
NOTIFY(tPtr, didChange, WMTextDidChangeNotification,
(void *)WMInsertTextEvent);

View File

@ -1354,7 +1354,7 @@ static void pasteText(WMView * view, Atom selection, Atom target, Time timestamp
if (str != NULL) {
str[n] = 0;
WMInsertTextFieldText(tPtr, str, tPtr->cursorPosition);
XFree(str);
wfree(str);
NOTIFY(tPtr, didChange, WMTextDidChangeNotification, (void *)WMInsertTextEvent);
}
}
@ -1477,7 +1477,7 @@ static void handleTextFieldActionEvents(WMEvent * event, void *data)
if (text) {
text[n] = 0;
WMInsertTextFieldText(tPtr, text, tPtr->cursorPosition);
XFree(text);
wfree(text);
NOTIFY(tPtr, didChange, WMTextDidChangeNotification,
(void *)WMInsertTextEvent);
}

View File

@ -216,10 +216,19 @@ static char *x11_clipboard_fetch(void *vctx, int *len_out)
{
W_Screen *scr = (W_Screen *)vctx;
int n = 0;
char *text = XFetchBuffer(scr->display, &n, 0);
char *xtext = XFetchBuffer(scr->display, &n, 0);
if (!xtext || n <= 0) {
if (len_out)
*len_out = 0;
return NULL;
}
char *copy = wmalloc(n + 1);
memcpy(copy, xtext, n);
copy[n] = '\0';
XFree(xtext);
if (len_out)
*len_out = n;
return text;
return copy;
}
static void x11_flush(void *vctx)