summaryrefslogtreecommitdiff
path: root/network/remmina/patches/20120503.patch
diff options
context:
space:
mode:
Diffstat (limited to 'network/remmina/patches/20120503.patch')
-rw-r--r--network/remmina/patches/20120503.patch180
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
+