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; }
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; }
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; }
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); }
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); } } }