]> Pileus Git - ~andy/gtk/commitdiff
Add these from the win32 backend.
authorAnders Carlsson <andersca@imendio.com>
Tue, 21 Feb 2006 08:32:28 +0000 (08:32 +0000)
committerAnders Carlsson <andersca@src.gnome.org>
Tue, 21 Feb 2006 08:32:28 +0000 (08:32 +0000)
2006-02-21  Anders Carlsson  <andersca@imendio.com>

        * gdk/quartz/gdkselection-quartz.c:
        (make_list):
        (gdk_text_property_to_utf8_list_for_display):
        Add these from the win32 backend.

ChangeLog
ChangeLog.pre-2-10
gdk/quartz/gdkselection-quartz.c

index 30487f4ec31bceb1257ae0ee17b94a86e6c32b3c..01857f23f4c3a4c20923f9e13b1bbda67909c2e4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2006-02-21  Anders Carlsson  <andersca@imendio.com>
+
+        * gdk/quartz/gdkselection-quartz.c:
+        (make_list):
+        (gdk_text_property_to_utf8_list_for_display):
+       Add these from the win32 backend.
+
 2006-02-20  Matthias Clasen  <mclasen@redhat.com>
 
        * gtk/gtknotebook.c: Properly update internal state
index 30487f4ec31bceb1257ae0ee17b94a86e6c32b3c..01857f23f4c3a4c20923f9e13b1bbda67909c2e4 100644 (file)
@@ -1,3 +1,10 @@
+2006-02-21  Anders Carlsson  <andersca@imendio.com>
+
+        * gdk/quartz/gdkselection-quartz.c:
+        (make_list):
+        (gdk_text_property_to_utf8_list_for_display):
+       Add these from the win32 backend.
+
 2006-02-20  Matthias Clasen  <mclasen@redhat.com>
 
        * gtk/gtknotebook.c: Properly update internal state
index 375c36672f642f336c92afd12488d92f4ce8e507..ddc4f08b1d36611f789172357a0c4bc2cf1ce507 100644 (file)
@@ -1,5 +1,7 @@
 /* gdkselection-quartz.c
  *
+ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
+ * Copyright (C) 1998-2002 Tor Lillqvist
  * Copyright (C) 2005 Imendio AB
  *
  * This library is free software; you can redistribute it and/or
@@ -119,6 +121,75 @@ gdk_utf8_to_compound_text_for_display (GdkDisplay  *display,
   return 0;
 }
 
+static gint
+make_list (const gchar  *text,
+          gint          length,
+          gboolean      latin1,
+          gchar      ***list)
+{
+  GSList *strings = NULL;
+  gint n_strings = 0;
+  gint i;
+  const gchar *p = text;
+  const gchar *q;
+  GSList *tmp_list;
+  GError *error = NULL;
+
+  while (p < text + length)
+    {
+      gchar *str;
+      
+      q = p;
+      while (*q && q < text + length)
+       q++;
+
+      if (latin1)
+       {
+         str = g_convert (p, q - p,
+                          "UTF-8", "ISO-8859-1",
+                          NULL, NULL, &error);
+
+         if (!str)
+           {
+             g_warning ("Error converting selection from STRING: %s",
+                        error->message);
+             g_error_free (error);
+           }
+       }
+      else
+       str = g_strndup (p, q - p);
+
+      if (str)
+       {
+         strings = g_slist_prepend (strings, str);
+         n_strings++;
+       }
+
+      p = q + 1;
+    }
+
+  if (list)
+    *list = g_new (gchar *, n_strings + 1);
+
+  (*list)[n_strings] = NULL;
+  
+  i = n_strings;
+  tmp_list = strings;
+  while (tmp_list)
+    {
+      if (list)
+       (*list)[--i] = tmp_list->data;
+      else
+       g_free (tmp_list->data);
+
+      tmp_list = tmp_list->next;
+    }
+
+  g_slist_free (strings);
+
+  return n_strings;
+}
+
 gint 
 gdk_text_property_to_utf8_list_for_display (GdkDisplay    *display,
                                            GdkAtom        encoding,
@@ -127,6 +198,27 @@ gdk_text_property_to_utf8_list_for_display (GdkDisplay    *display,
                                            gint           length,
                                            gchar       ***list)
 {
-  /* FIXME: Implement */
-  return 0;
+  g_return_val_if_fail (text != NULL, 0);
+  g_return_val_if_fail (length >= 0, 0);
+
+  if (encoding == GDK_TARGET_STRING)
+    {
+      return make_list ((gchar *)text, length, TRUE, list);
+    }
+  else if (encoding == gdk_atom_intern_static_string ("UTF8_STRING"))
+    {
+      return make_list ((gchar *)text, length, FALSE, list);
+    }
+  else
+    {
+      gchar *enc_name = gdk_atom_name (encoding);
+
+      g_warning ("gdk_text_property_to_utf8_list_for_display: encoding %s not handled\n", enc_name);
+      g_free (enc_name);
+
+      if (list)
+       *list = NULL;
+
+      return 0;
+    }
 }