diff options
Diffstat (limited to 'network/remmina/patches/20120503.patch')
-rw-r--r-- | network/remmina/patches/20120503.patch | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/network/remmina/patches/20120503.patch b/network/remmina/patches/20120503.patch new file mode 100644 index 0000000000..ad31d512b5 --- /dev/null +++ b/network/remmina/patches/20120503.patch @@ -0,0 +1,180 @@ +From 84327f81995b4efe56503b94216e35eb9e99f243 Mon Sep 17 00:00:00 2001 +From: Jean-Louis Dupond <jean-louis@dupond.be> +Date: Thu, 3 May 2012 15:25:02 +0200 +Subject: [PATCH] Some more clipboard fixes + +--- + remmina-plugins/rdp/rdp_cliprdr.c | 68 ++++++++++++++++++++++--------------- + remmina-plugins/rdp/rdp_plugin.c | 9 +++-- + remmina-plugins/rdp/rdp_plugin.h | 2 +- + 3 files changed, 48 insertions(+), 31 deletions(-) + +diff --git a/remmina-plugins/rdp/rdp_cliprdr.c b/remmina-plugins/rdp/rdp_cliprdr.c +index b9b37ad..1424ac9 100644 +--- a/remmina-plugins/rdp/rdp_cliprdr.c ++++ b/remmina-plugins/rdp/rdp_cliprdr.c +@@ -204,7 +204,7 @@ uint8* remmina_rdp_cliprdr_get_data(RemminaProtocolWidget* gp, uint32 format, in + g_printf("GetData: Requested Format: %#X\n", format); + rfContext* rfi = GET_DATA(gp); + GtkClipboard* clipboard; +- uint8* inbuf = NULL; ++ uint8* inbuf = (uint8*)""; + uint8* outbuf = NULL; + GdkPixbuf *image = NULL; + +@@ -225,6 +225,8 @@ uint8* remmina_rdp_cliprdr_get_data(RemminaProtocolWidget* gp, uint32 format, in + + if (format == CB_FORMAT_TEXT || format == CB_FORMAT_HTML || format == CB_FORMAT_UNICODETEXT) + { ++ if (inbuf == NULL) ++ inbuf = (uint8*)""; + inbuf = lf2crlf(inbuf, size); + if (format == CB_FORMAT_TEXT) + { +@@ -243,6 +245,7 @@ uint8* remmina_rdp_cliprdr_get_data(RemminaProtocolWidget* gp, uint32 format, in + uniconv = freerdp_uniconv_new(); + outbuf = (uint8*) freerdp_uniconv_out(uniconv, (char*) inbuf, &out_size); + freerdp_uniconv_free(uniconv); ++ g_free(inbuf); + *size = out_size + 2; + } + } +@@ -253,11 +256,13 @@ uint8* remmina_rdp_cliprdr_get_data(RemminaProtocolWidget* gp, uint32 format, in + if (format == CB_FORMAT_PNG) + { + gdk_pixbuf_save_to_buffer(image, &data, &buffersize, "png", NULL, NULL); ++ outbuf = (uint8*) xmalloc(buffersize); + memcpy(outbuf, data, buffersize); + } + if (format == CB_FORMAT_JPEG) + { + gdk_pixbuf_save_to_buffer(image, &data, &buffersize, "jpeg", NULL, NULL); ++ outbuf = (uint8*) xmalloc(buffersize); + memcpy(outbuf, data, buffersize); + } + if (format == CB_FORMAT_DIB) +@@ -268,13 +273,9 @@ uint8* remmina_rdp_cliprdr_get_data(RemminaProtocolWidget* gp, uint32 format, in + outbuf = (uint8*) xmalloc(*size); + memcpy(outbuf, data + 14, *size); + } ++ g_object_unref(image); + } + +- if (inbuf) +- g_free(inbuf); +- if (G_IS_OBJECT(image)) +- g_object_unref(image); +- + if (!outbuf) + outbuf = (uint8*)""; + +@@ -357,7 +358,10 @@ void remmina_rdp_cliprdr_parse_response_event(RemminaProtocolWidget* gp, RDP_EVE + if (clipboard) + { + if (text || img) +- rfi->clipboard_wait = TRUE; ++ { ++ rfi->clipboard_wait = 2; ++ g_printf("Setting Clipboard Wait\n"); ++ } + if (text) + { + gtk_clipboard_set_text(clipboard, (gchar*)data, size); +@@ -404,31 +408,39 @@ void remmina_handle_channel_event(RemminaProtocolWidget* gp, RDP_EVENT* event) + for (i = 0; i < format_list_event->num_formats; i++) + { + g_printf("Format: 0x%X\n", format_list_event->formats[i]); +- if (format_list_event->formats[i] == CB_FORMAT_UNICODETEXT) +- { +- format = CB_FORMAT_UNICODETEXT; +- break; +- } +- if (format_list_event->formats[i] == CB_FORMAT_DIB) +- { +- format = CB_FORMAT_DIB; +- break; +- } +- if (format_list_event->formats[i] == CB_FORMAT_JPEG) ++ } ++ ++ for (i = 0; i < format_list_event->num_formats; i++) ++ { ++ g_printf("Format: 0x%X\n", format_list_event->formats[i]); ++ if (format_list_event->formats[i] > format) + { +- format = CB_FORMAT_JPEG; +- break; ++ g_printf("Format 0x%X is bigger!\n", format_list_event->formats[i]); ++ if (format_list_event->formats[i] == CB_FORMAT_UNICODETEXT) ++ { ++ format = CB_FORMAT_UNICODETEXT; ++ } ++ if (format_list_event->formats[i] == CB_FORMAT_DIB) ++ { ++ format = CB_FORMAT_DIB; ++ } ++ if (format_list_event->formats[i] == CB_FORMAT_JPEG) ++ { ++ format = CB_FORMAT_JPEG; ++ } ++ if (format_list_event->formats[i] == CB_FORMAT_PNG) ++ { ++ format = CB_FORMAT_PNG; ++ } ++ if (format_list_event->formats[i] == CB_FORMAT_TEXT) ++ { ++ format = CB_FORMAT_TEXT; ++ } + } +- if (format_list_event->formats[i] == CB_FORMAT_PNG) ++ else + { +- format = CB_FORMAT_PNG; +- break; ++ g_printf("Format 0x%X is smaller!\n", format_list_event->formats[i]); + } +- if (format_list_event->formats[i] == CB_FORMAT_TEXT) +- { +- format = CB_FORMAT_TEXT; +- break; +- } + } + rfi->requested_format = format; + +diff --git a/remmina-plugins/rdp/rdp_plugin.c b/remmina-plugins/rdp/rdp_plugin.c +index fd0fe08..3c7fc0a 100644 +--- a/remmina-plugins/rdp/rdp_plugin.c ++++ b/remmina-plugins/rdp/rdp_plugin.c +@@ -131,9 +131,14 @@ boolean rf_check_fds(RemminaProtocolWidget* gp) + event->mouse_event.x, event->mouse_event.y); + break; + case REMMINA_RDP_EVENT_TYPE_CLIPBOARD: +- if (!rfi->clipboard_wait) ++ if (rfi->clipboard_wait <= 0) ++ { + remmina_rdp_cliprdr_send_format_list_event(gp); +- rfi->clipboard_wait = FALSE; ++ g_printf("Clipboard Wait ON\n"); ++ rfi->clipboard_wait = 0; ++ } ++ g_printf("Setting Clipboard Wait To FALSE\n"); ++ rfi->clipboard_wait--; + break; + } + +diff --git a/remmina-plugins/rdp/rdp_plugin.h b/remmina-plugins/rdp/rdp_plugin.h +index 1931384..ff66906 100644 +--- a/remmina-plugins/rdp/rdp_plugin.h ++++ b/remmina-plugins/rdp/rdp_plugin.h +@@ -134,7 +134,7 @@ struct rf_context + GAsyncQueue* event_queue; + gint event_pipe[2]; + +- gboolean clipboard_wait; ++ gint clipboard_wait; + uint32 requested_format; + }; + +-- +1.7.10 + |