[gtk+/wayland-selections: 5/15] wayland: implement text_property_to_utf8_list()



commit 7d67a5b328a239c423b9db1a7aa77ed09636e80e
Author: Carlos Garnacho <carlosg gnome org>
Date:   Thu Aug 21 19:50:21 2014 +0200

    wayland: implement text_property_to_utf8_list()
    
    Of some sort, this is enough to get text transfers on wayland, anything but
    utf8 as plain/text should be pretty rare.

 gdk/wayland/gdkselection-wayland.c |   31 ++++++++++++++++++++++++++++++-
 1 files changed, 30 insertions(+), 1 deletions(-)
---
diff --git a/gdk/wayland/gdkselection-wayland.c b/gdk/wayland/gdkselection-wayland.c
index 3970275..6b1b44f 100644
--- a/gdk/wayland/gdkselection-wayland.c
+++ b/gdk/wayland/gdkselection-wayland.c
@@ -77,7 +77,36 @@ _gdk_wayland_display_text_property_to_utf8_list (GdkDisplay    *display,
                                                 gint           length,
                                                 gchar       ***list)
 {
-  return 0;
+  GPtrArray *array;
+  const gchar *ptr;
+  gsize chunk_len;
+  gchar *copy;
+  guint nitems;
+
+  ptr = (const gchar *) text;
+  array = g_ptr_array_new ();
+
+  while (ptr < (const gchar *) &text[length])
+    {
+      /* FIXME: Assuming it's all UTF8 */
+      chunk_len = strlen (ptr);
+      if (g_utf8_validate (ptr, chunk_len, NULL))
+        {
+          copy = g_strndup (ptr, chunk_len);
+          g_ptr_array_add (array, copy);
+        }
+
+      ptr = &ptr[chunk_len + 1];
+    }
+
+  nitems = array->len;
+
+  if (list)
+    *list = (gchar **) g_ptr_array_free (array, FALSE);
+  else
+    g_ptr_array_free (array, TRUE);
+
+  return nitems;
 }
 
 gchar *


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]