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:
parent
0083654d2e
commit
eeda48d24e
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue