Beispiel #1
0
static void xf_cliprdr_process_cb_monitor_ready_event(xfInfo* xfi)
{
	clipboardContext* cb = (clipboardContext*) xfi->clipboard_context;

	xf_cliprdr_send_format_list(xfi);
	cb->sync = TRUE;
}
Beispiel #2
0
BOOL xf_cliprdr_process_property_notify(xfInfo* xfi, XEvent* xevent)
{
	clipboardContext* cb = (clipboardContext*) xfi->clipboard_context;

	if (!cb)
		return TRUE;

	if (xevent->xproperty.atom != cb->property_atom)
		return FALSE; /* Not cliprdr-related */

	if (xevent->xproperty.window == cb->root_window)
	{
		DEBUG_X11_CLIPRDR("root window PropertyNotify");
		xf_cliprdr_send_format_list(xfi);
	}
	else if (xevent->xproperty.window == xfi->drawable &&
		xevent->xproperty.state == PropertyNewValue &&
		cb->incr_starts && cb->request_index >= 0)
	{
		DEBUG_X11_CLIPRDR("cliprdr window PropertyNotify");
		xf_cliprdr_get_requested_data(xfi,
			cb->format_mappings[cb->request_index].target_format);
	}

	return TRUE;
}
Beispiel #3
0
static void xf_cliprdr_process_cb_sync_event(xfInfo* xfi)
{
	clipboardContext* cb = (clipboardContext*) xfi->clipboard_context;

	xf_cliprdr_send_format_list(xfi);
	cb->sync = True;
}
Beispiel #4
0
static void xf_cliprdr_process_requested_data(xfInfo* xfi, boolean has_data, uint8* data, int size)
{
	uint8* outbuf;
	clipboardContext* cb = (clipboardContext*) xfi->clipboard_context;

	if (cb->incr_starts && has_data)
		return;

	if (!has_data || data == NULL)
	{
		xf_cliprdr_send_null_data_response(xfi);
		return;
	}

	switch (cb->format_mappings[cb->request_index].format_id)
	{
		case CB_FORMAT_RAW:
		case CB_FORMAT_PNG:
		case CB_FORMAT_JPEG:
		case CB_FORMAT_GIF:
			outbuf = xf_cliprdr_process_requested_raw(data, &size);
			break;

		case CB_FORMAT_UNICODETEXT:
			outbuf = xf_cliprdr_process_requested_unicodetext(data, &size);
			break;

		case CB_FORMAT_TEXT:
			outbuf = xf_cliprdr_process_requested_text(data, &size);
			break;

		case CB_FORMAT_DIB:
			outbuf = xf_cliprdr_process_requested_dib(data, &size);
			break;

		case CB_FORMAT_HTML:
			outbuf = xf_cliprdr_process_requested_html(data, &size);
			break;

		default:
			outbuf = NULL;
			break;
	}

	if (outbuf)
	{
		xf_cliprdr_send_data_response(xfi, outbuf, size);
	}
	else
	{
		xf_cliprdr_send_null_data_response(xfi);
	}

	/* Resend the format list, otherwise the server won't request again for the next paste */
	xf_cliprdr_send_format_list(xfi);
}
Beispiel #5
0
void xf_cliprdr_check_owner(xfInfo* xfi)
{
	Window owner;
	clipboardContext* cb = (clipboardContext*) xfi->clipboard_context;

	if (cb->sync)
	{
		owner = XGetSelectionOwner(xfi->display, cb->clipboard_atom);
		if (cb->owner != owner)
		{
			cb->owner = owner;
			xf_cliprdr_send_format_list(xfi);
		}
	}
}