]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/treeentry_gtk.c
Fix for #15224: wxRichTextTable: Setting a cell's text colour affects subsequent...
[wxWidgets.git] / src / gtk / treeentry_gtk.c
index a9aed08458f0b6fadf729e5aa18a649b3c682d88..96b5747e86e8251f204ef24ad6824012d4522d00 100644 (file)
@@ -2,16 +2,18 @@
 // Name:        src/gtk/treeentry_gtk.c
 // Purpose:     GtkTreeEntry implementation
 // Author:      Ryan Norton
-// Id:          $Id$
 // Copyright:   (c) 2006 Ryan Norton
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////// */
 
 #ifdef __VMS
 #include <types.h>
+typedef pid_t GPid;
+#define G_GNUC_INTERNAL 
+#define GSEAL(x) x
 #endif
 
-#include "wx/gtk/treeentry_gtk.h"
+#include "wx/gtk/private/treeentry_gtk.h"
 
 /*
         GtkTreeEntry
 */
 
 /* forwards */
-static void gtk_tree_entry_class_init(GtkTreeEntryClass* klass);
-static void gtk_tree_entry_init (GTypeInstance* instance, gpointer g_class);
-static void gtk_tree_entry_string_transform_func(const GValue *src_value,
+static void wx_tree_entry_class_init(void* g_class, void* class_data);
+static void wx_tree_entry_string_transform_func(const GValue *src_value,
                                                  GValue *dest_value);
-static void gtk_tree_entry_dispose(GObject* obj);
+static void wx_tree_entry_dispose(GObject* obj);
 
+static GObjectClass* parent_class;
 
 /* public */
-GtkTreeEntry*
-gtk_tree_entry_new()
+wxTreeEntry*
+wx_tree_entry_new()
 {
-    return GTK_TREE_ENTRY(g_object_new(GTK_TYPE_TREE_ENTRY, NULL));
+    return WX_TREE_ENTRY(g_object_new(WX_TYPE_TREE_ENTRY, NULL));
 }
 
 GType
-gtk_tree_entry_get_type ()
+wx_tree_entry_get_type()
 {
     static GType tree_entry_type = 0;
 
@@ -52,48 +54,53 @@ gtk_tree_entry_get_type ()
     {
         const GTypeInfo tree_entry_info =
         {
-            sizeof (GtkTreeEntryClass),
+            sizeof(GObjectClass),
             NULL,           /* base_init */
             NULL,           /* base_finalize */
-            (GClassInitFunc) gtk_tree_entry_class_init,  /* class_init */
+            wx_tree_entry_class_init,
             NULL,           /* class_finalize */
             NULL,           /* class_data */
-            sizeof (GtkTreeEntry),
+            sizeof(wxTreeEntry),
             16,             /* n_preallocs */
-            (GInstanceInitFunc) gtk_tree_entry_init, /*instance_init*/
+            NULL,           /* instance_init */
             NULL            /* value_table */
         };
-        tree_entry_type = g_type_register_static (G_TYPE_OBJECT, "GtkTreeEntry",
+        tree_entry_type = g_type_register_static (G_TYPE_OBJECT, "wxTreeEntry",
                                                   &tree_entry_info,
                                                   (GTypeFlags)0);
         g_value_register_transform_func(tree_entry_type, G_TYPE_STRING,
-                                        gtk_tree_entry_string_transform_func);
+                                        wx_tree_entry_string_transform_func);
     }
 
     return tree_entry_type;
 }
 
-gchar*     gtk_tree_entry_get_collate_key (GtkTreeEntry* entry)
+char* wx_tree_entry_get_collate_key(wxTreeEntry* entry)
 {
+    if (entry->collate_key == NULL)
+    {
+        char* temp = g_utf8_casefold(entry->label, -1);
+        entry->collate_key = g_utf8_collate_key(temp, -1);
+        g_free(temp);
+    }
     return entry->collate_key;
 }
 
-gchar*     gtk_tree_entry_get_label     (GtkTreeEntry* entry)
+char* wx_tree_entry_get_label(wxTreeEntry* entry)
 {
-    g_assert(GTK_IS_TREE_ENTRY(entry));
+    g_assert(WX_IS_TREE_ENTRY(entry));
     return entry->label;
 }
 
-gpointer   gtk_tree_entry_get_userdata  (GtkTreeEntry* entry)
+void* wx_tree_entry_get_userdata(wxTreeEntry* entry)
 {
-    g_assert(GTK_IS_TREE_ENTRY(entry));
+    g_assert(WX_IS_TREE_ENTRY(entry));
     return entry->userdata;
 }
 
-void     gtk_tree_entry_set_label       (GtkTreeEntry* entry, const gchar* label)
+void wx_tree_entry_set_label(wxTreeEntry* entry, const char* label)
 {
-    g_assert(GTK_IS_TREE_ENTRY(entry));
-    gchar *temp;
+    g_assert(WX_IS_TREE_ENTRY(entry));
 
     /* free previous if it exists */
     if(entry->label)
@@ -103,67 +110,53 @@ void     gtk_tree_entry_set_label       (GtkTreeEntry* entry, const gchar* label
     }
 
     entry->label = g_strdup(label);
-    temp = g_utf8_casefold(label, -1); /* -1 == null terminated */
-    entry->collate_key = g_utf8_collate_key(temp, -1); /* -1 == null terminated */
-    g_free( temp );
+    entry->collate_key = NULL;
 }
 
-void   gtk_tree_entry_set_userdata      (GtkTreeEntry* entry, gpointer userdata)
+void wx_tree_entry_set_userdata(wxTreeEntry* entry, void* userdata)
 {
-    g_assert(GTK_IS_TREE_ENTRY(entry));
+    g_assert(WX_IS_TREE_ENTRY(entry));
     entry->userdata = userdata;
 }
 
-void   gtk_tree_entry_set_destroy_func  (GtkTreeEntry* entry,
-                                         GtkTreeEntryDestroy destroy_func,
+void wx_tree_entry_set_destroy_func(wxTreeEntry* entry,
+                                         wxTreeEntryDestroy destroy_func,
                                          gpointer destroy_func_data)
 {
-    g_assert(GTK_IS_TREE_ENTRY(entry));
+    g_assert(WX_IS_TREE_ENTRY(entry));
     entry->destroy_func = destroy_func;
     entry->destroy_func_data = destroy_func_data;
 }
 
 /* private */
-static void gtk_tree_entry_class_init(GtkTreeEntryClass* klass)
+static void wx_tree_entry_class_init(void* g_class, void* class_data)
 {
-    GObjectClass* gobject_class = G_OBJECT_CLASS(klass);
-    gobject_class->dispose = gtk_tree_entry_dispose;
+    GObjectClass* gobject_class = G_OBJECT_CLASS(g_class);
+    gobject_class->dispose = wx_tree_entry_dispose;
+    parent_class = G_OBJECT_CLASS(g_type_class_peek_parent(g_class));
 }
 
-static void gtk_tree_entry_init (GTypeInstance* instance, gpointer g_class)
-{
-    GtkTreeEntry* entry = (GtkTreeEntry*) instance;
-
-    /* clear */
-    entry->label = NULL;
-    entry->collate_key = NULL;
-    entry->userdata = NULL;
-    entry->destroy_func_data = NULL;
-    entry->destroy_func = NULL;
-}
-
-static void gtk_tree_entry_string_transform_func(const GValue *src_value,
+static void wx_tree_entry_string_transform_func(const GValue *src_value,
                                                  GValue *dest_value)
 {
-    GtkTreeEntry *entry;
+    wxTreeEntry* entry;
+    void* src_ptr = g_value_peek_pointer(src_value);
 
     /* Make sure src is a treeentry and dest can hold a string */
-    g_assert(GTK_IS_TREE_ENTRY(src_value->data[0].v_pointer));
+    g_assert(WX_IS_TREE_ENTRY(src_ptr));
     g_assert(G_VALUE_HOLDS(dest_value, G_TYPE_STRING));
 
-    /* TODO: Use strdup here or just pass it? */
-    entry = GTK_TREE_ENTRY(src_value->data[0].v_pointer);
-
+    entry = WX_TREE_ENTRY(src_ptr);
     g_value_set_string(dest_value, entry->label);
 }
 
-static void gtk_tree_entry_dispose(GObject* obj)
+static void wx_tree_entry_dispose(GObject* obj)
 {
-    GtkTreeEntry *entry;
+    wxTreeEntry* entry;
 
-    g_assert(GTK_IS_TREE_ENTRY(obj));
+    g_assert(WX_IS_TREE_ENTRY(obj));
 
-    entry = GTK_TREE_ENTRY(obj);
+    entry = WX_TREE_ENTRY(obj);
 
     /* free label if it exists */
     if(entry->label)
@@ -184,4 +177,6 @@ static void gtk_tree_entry_dispose(GObject* obj)
 
     /* clear userdata */
     entry->userdata = NULL;
+
+    parent_class->dispose(obj);
 }