[client,x11] fixed clipboard data cache
This commit is contained in:
parent
f7682a5e79
commit
cc65f5db31
@ -145,6 +145,7 @@ static const char* mime_mate_copied_files = "x-special/mate-copied-files";
|
|||||||
static const char* type_FileGroupDescriptorW = "FileGroupDescriptorW";
|
static const char* type_FileGroupDescriptorW = "FileGroupDescriptorW";
|
||||||
static const char* type_HtmlFormat = "HTML Format";
|
static const char* type_HtmlFormat = "HTML Format";
|
||||||
|
|
||||||
|
static void xf_cliprdr_clear_cached_data(xfClipboard* clipboard);
|
||||||
static UINT xf_cliprdr_send_client_format_list(xfClipboard* clipboard, BOOL force);
|
static UINT xf_cliprdr_send_client_format_list(xfClipboard* clipboard, BOOL force);
|
||||||
static void xf_cliprdr_set_selection_owner(xfContext* xfc, xfClipboard* clipboard, Time timestamp);
|
static void xf_cliprdr_set_selection_owner(xfContext* xfc, xfClipboard* clipboard, Time timestamp);
|
||||||
|
|
||||||
@ -770,7 +771,8 @@ static UINT xf_cliprdr_send_format_list(xfClipboard* clipboard, const CLIPRDR_FO
|
|||||||
xf_clipboard_copy_formats(clipboard, formats, numFormats);
|
xf_clipboard_copy_formats(clipboard, formats, numFormats);
|
||||||
/* Ensure all pending requests are answered. */
|
/* Ensure all pending requests are answered. */
|
||||||
xf_cliprdr_send_data_response(clipboard, NULL, NULL, 0);
|
xf_cliprdr_send_data_response(clipboard, NULL, NULL, 0);
|
||||||
cliprdr_file_context_clear(clipboard->file);
|
|
||||||
|
xf_cliprdr_clear_cached_data(clipboard);
|
||||||
|
|
||||||
WINPR_ASSERT(clipboard->context);
|
WINPR_ASSERT(clipboard->context);
|
||||||
WINPR_ASSERT(clipboard->context->ClientFormatList);
|
WINPR_ASSERT(clipboard->context->ClientFormatList);
|
||||||
@ -1147,10 +1149,14 @@ static BOOL xf_cliprdr_process_selection_notify(xfClipboard* clipboard,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void xf_cliprdr_clear_cached_data(xfClipboard* clipboard)
|
void xf_cliprdr_clear_cached_data(xfClipboard* clipboard)
|
||||||
{
|
{
|
||||||
WINPR_ASSERT(clipboard);
|
WINPR_ASSERT(clipboard);
|
||||||
|
|
||||||
|
ClipboardLock(clipboard->system);
|
||||||
|
ClipboardEmpty(clipboard->system);
|
||||||
|
cliprdr_file_context_clear(clipboard->file);
|
||||||
|
|
||||||
if (clipboard->data)
|
if (clipboard->data)
|
||||||
{
|
{
|
||||||
free(clipboard->data);
|
free(clipboard->data);
|
||||||
@ -1167,6 +1173,7 @@ static void xf_cliprdr_clear_cached_data(xfClipboard* clipboard)
|
|||||||
|
|
||||||
clipboard->data_raw_length = 0;
|
clipboard->data_raw_length = 0;
|
||||||
cliprdr_file_context_clear(clipboard->file);
|
cliprdr_file_context_clear(clipboard->file);
|
||||||
|
ClipboardUnlock(clipboard->system);
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL xf_cliprdr_process_selection_request(xfClipboard* clipboard,
|
static BOOL xf_cliprdr_process_selection_request(xfClipboard* clipboard,
|
||||||
@ -1251,7 +1258,7 @@ static BOOL xf_cliprdr_process_selection_request(xfClipboard* clipboard,
|
|||||||
|
|
||||||
/* We can compare format names by pointer value here as they are both
|
/* We can compare format names by pointer value here as they are both
|
||||||
* taken from the same clipboard->serverFormats array */
|
* taken from the same clipboard->serverFormats array */
|
||||||
matchingFormat = cformat && (formatId == cformat->formatToRequest);
|
matchingFormat = format && (formatId == format->formatId);
|
||||||
|
|
||||||
if (matchingFormat && (clipboard->data != 0) && !rawTransfer)
|
if (matchingFormat && (clipboard->data != 0) && !rawTransfer)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user