[Spice-devel] [PATCH] vdagent: remove windows-specific bitmap cut & paste support

Hans de Goede hdegoede at redhat.com
Wed Oct 6 07:46:59 PDT 2010


ack.

On 10/06/2010 04:41 PM, Arnon Gilboa wrote:
> will wait until png comes in
> ---
>   vdagent/vdagent.cpp |   44 ++++++++++++++++++--------------------------
>   1 files changed, 18 insertions(+), 26 deletions(-)
>
> diff --git a/vdagent/vdagent.cpp b/vdagent/vdagent.cpp
> index c65259d..bf48e17 100644
> --- a/vdagent/vdagent.cpp
> +++ b/vdagent/vdagent.cpp
> @@ -33,7 +33,6 @@ typedef struct VDClipboardFormat {
>
>   VDClipboardFormat supported_clipboard_formats[] = {
>       {CF_UNICODETEXT, VD_AGENT_CLIPBOARD_UTF8_TEXT},
> -    {CF_DIB, VD_AGENT_CLIPBOARD_BITMAP},
>       {0, 0}};
>
>   class VDAgent {
> @@ -492,6 +491,7 @@ bool VDAgent::handle_mon_config(VDAgentMonitorsConfig* mon_config, uint32_t port
>       return true;
>   }
>
> +//FIXME: handle clipboard->type == VD_AGENT_CLIPBOARD_NONE
>   bool VDAgent::handle_clipboard(VDAgentClipboard* clipboard, uint32_t size)
>   {
>       HGLOBAL clip_data;
> @@ -502,8 +502,8 @@ bool VDAgent::handle_clipboard(VDAgentClipboard* clipboard, uint32_t size)
>       bool ret = false;
>
>       // Get the required clipboard size
> -    switch (format = get_clipboard_format(clipboard->type)) {
> -    case CF_UNICODETEXT:
> +    switch (clipboard->type) {
> +    case VD_AGENT_CLIPBOARD_UTF8_TEXT:
>           // Received utf8 string is not null-terminated
>           if (!(clip_len = MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)clipboard->data, size, NULL, 0))) {
>               return false;
> @@ -511,9 +511,6 @@ bool VDAgent::handle_clipboard(VDAgentClipboard* clipboard, uint32_t size)
>           clip_len++;
>           clip_size = clip_len * sizeof(WCHAR);
>           break;
> -    case CF_DIB:
> -        clip_size = size;
> -        break;
>       default:
>           vd_printf("Unsupported clipboard type %u", clipboard->type);
>           return false;
> @@ -527,21 +524,18 @@ bool VDAgent::handle_clipboard(VDAgentClipboard* clipboard, uint32_t size)
>           return false;
>       }
>       // Translate data and set clipboard content
> -    switch (format) {
> -    case CF_UNICODETEXT:
> +    switch (clipboard->type) {
> +    case VD_AGENT_CLIPBOARD_UTF8_TEXT:
>           ret = !!MultiByteToWideChar(CP_UTF8, 0, (LPCSTR)clipboard->data, size, (LPWSTR)clip_buf,
>                                       clip_len);
>           ((LPWSTR)clip_buf)[clip_len - 1] = L'\0';
>           break;
> -    case CF_DIB:
> -        memcpy(clip_buf, clipboard->data, size);
> -        ret = true;
> -        break;
>       }
>       GlobalUnlock(clip_data);
>       if (!ret) {
>           return false;
>       }
> +    format = get_clipboard_format(clipboard->type);
>       if (SetClipboardData(format, clip_data)) {
>           SetEvent(_clipboard_event);
>           return true;
> @@ -806,8 +800,10 @@ bool VDAgent::on_clipboard_grab()
>           vd_printf("Unsupported clipboard format");
>           return false;
>       }
> -    VDAgentClipboardGrab grab = {type};
> -    return write_message(VD_AGENT_CLIPBOARD_GRAB, sizeof(grab),&grab);
> +
> +    //FIXME: use all available types rather than just the first one
> +    uint32_t grab_types[] = {type};
> +    return write_message(VD_AGENT_CLIPBOARD_GRAB, sizeof(grab_types),&grab_types);
>   }
>
>   // In delayed rendering, Windows requires us to SetClipboardData before we return from
> @@ -838,10 +834,11 @@ bool VDAgent::on_clipboard_request(UINT format)
>
>   bool VDAgent::handle_clipboard_grab(VDAgentClipboardGrab* clipboard_grab)
>   {
> -    uint32_t format = get_clipboard_format(clipboard_grab->type);
> +    //FIXME: use all types rather than just the first one
> +    uint32_t format = get_clipboard_format(clipboard_grab->types[0]);
>
>       if (!format) {
> -        vd_printf("Unsupported clipboard type %u", clipboard_grab->type);
> +        vd_printf("Unsupported clipboard type %u", clipboard_grab->types[0]);
>           return false;
>       }
>       if (!OpenClipboard(_hwnd)) {
> @@ -854,6 +851,7 @@ bool VDAgent::handle_clipboard_grab(VDAgentClipboardGrab* clipboard_grab)
>       return true;
>   }
>
> +//FIXME: when req type not supported, send (VD_AGENT_CLIPBOARD_NONE, NULL, 0)
>   bool VDAgent::handle_clipboard_request(VDAgentClipboardRequest* clipboard_request)
>   {
>       UINT format;
> @@ -877,14 +875,11 @@ bool VDAgent::handle_clipboard_request(VDAgentClipboardRequest* clipboard_reques
>           CloseClipboard();
>           return false;
>       }
> -    switch (format) {
> -    case CF_UNICODETEXT:
> +    switch (clipboard_request->type) {
> +    case VD_AGENT_CLIPBOARD_UTF8_TEXT:
>           len = wcslen((wchar_t*)clip_buf);
>           clip_size = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)clip_buf, (int)len, NULL, 0, NULL, NULL);
>           break;
> -    case CF_DIB:
> -        clip_size = (int)GlobalSize(clip_data);
> -        break;
>       }
>
>       if (!clip_size) {
> @@ -902,14 +897,11 @@ bool VDAgent::handle_clipboard_request(VDAgentClipboardRequest* clipboard_reques
>       VDAgentClipboard* clipboard = (VDAgentClipboard*)_out_msg->data;
>       clipboard->type = clipboard_request->type;
>
> -    switch (format) {
> -    case CF_UNICODETEXT:
> +    switch (clipboard_request->type) {
> +    case VD_AGENT_CLIPBOARD_UTF8_TEXT:
>           WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)clip_buf, (int)len, (LPSTR)clipboard->data,
>                               clip_size, NULL, NULL);
>           break;
> -    case CF_DIB:
> -        memcpy(clipboard->data, clip_buf, clip_size);
> -        break;
>       }
>
>       GlobalUnlock(clip_data);


More information about the Spice-devel mailing list