]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtktreedatalist.c
Support saving ICOs and CURs.
[~andy/gtk] / gtk / gtktreedatalist.c
index 403da218a640757149c1839395f72165b9535dc8..c09ac0683d75a040a4af3e680e7fbc263ea54c2f 100644 (file)
@@ -59,7 +59,7 @@ _gtk_tree_data_list_free (GtkTreeDataList *list,
       if (g_type_is_a (column_headers [i], G_TYPE_STRING))
        g_free ((gchar *) tmp->data.v_pointer);
       else if (g_type_is_a (column_headers [i], G_TYPE_OBJECT) && tmp->data.v_pointer != NULL)
-       g_object_unref (G_OBJECT (tmp->data.v_pointer));
+       g_object_unref (tmp->data.v_pointer);
       else if (g_type_is_a (column_headers [i], G_TYPE_BOXED) && tmp->data.v_pointer != NULL)
        g_boxed_free (column_headers [i], (gpointer) tmp->data.v_pointer);
 
@@ -80,6 +80,10 @@ _gtk_tree_data_list_check_type (GType type)
     G_TYPE_UCHAR,
     G_TYPE_INT,
     G_TYPE_UINT,
+    G_TYPE_LONG,
+    G_TYPE_ULONG,
+    G_TYPE_INT64,
+    G_TYPE_UINT64,
     G_TYPE_ENUM,
     G_TYPE_FLAGS,
     G_TYPE_FLOAT,
@@ -129,11 +133,23 @@ _gtk_tree_data_list_node_to_value (GtkTreeDataList *list,
     case G_TYPE_UINT:
       g_value_set_uint (value, (guint) list->data.v_uint);
       break;
+    case G_TYPE_LONG:
+      g_value_set_long (value, list->data.v_long);
+      break;
+    case G_TYPE_ULONG:
+      g_value_set_ulong (value, list->data.v_ulong);
+      break;
+    case G_TYPE_INT64:
+      g_value_set_int64 (value, list->data.v_int64);
+      break;
+    case G_TYPE_UINT64:
+      g_value_set_uint64 (value, list->data.v_uint64);
+      break;
     case G_TYPE_ENUM:
       g_value_set_enum (value, list->data.v_int);
       break;
     case G_TYPE_FLAGS:
-      g_value_set_flags (value, (int) list->data.v_int);
+      g_value_set_flags (value, list->data.v_uint);
       break;
     case G_TYPE_FLOAT:
       g_value_set_float (value, (gfloat) list->data.v_float);
@@ -177,14 +193,26 @@ _gtk_tree_data_list_value_to_node (GtkTreeDataList *list,
     case G_TYPE_INT:
       list->data.v_int = g_value_get_int (value);
       break;
+    case G_TYPE_UINT:
+      list->data.v_uint = g_value_get_uint (value);
+      break;
+    case G_TYPE_LONG:
+      list->data.v_long = g_value_get_long (value);
+      break;
+    case G_TYPE_ULONG:
+      list->data.v_ulong = g_value_get_ulong (value);
+      break;
+    case G_TYPE_INT64:
+      list->data.v_int64 = g_value_get_int64 (value);
+      break;
+    case G_TYPE_UINT64:
+      list->data.v_uint64 = g_value_get_uint64 (value);
+      break;
     case G_TYPE_ENUM:
       list->data.v_int = g_value_get_enum (value);
       break;
     case G_TYPE_FLAGS:
-      list->data.v_int = g_value_get_flags (value);
-      break;
-    case G_TYPE_UINT:
-      list->data.v_uint = g_value_get_uint (value);
+      list->data.v_uint = g_value_get_flags (value);
       break;
     case G_TYPE_POINTER:
       list->data.v_pointer = g_value_get_pointer (value);
@@ -229,11 +257,17 @@ _gtk_tree_data_list_node_copy (GtkTreeDataList *list,
 
   switch (G_TYPE_FUNDAMENTAL (type))
     {
-    case G_TYPE_UINT:
-    case G_TYPE_INT:
-    case G_TYPE_UCHAR:
-    case G_TYPE_CHAR:
     case G_TYPE_BOOLEAN:
+    case G_TYPE_CHAR:
+    case G_TYPE_UCHAR:
+    case G_TYPE_INT:
+    case G_TYPE_UINT:
+    case G_TYPE_LONG:
+    case G_TYPE_ULONG:
+    case G_TYPE_INT64:
+    case G_TYPE_UINT64:
+    case G_TYPE_ENUM:
+    case G_TYPE_FLAGS:
     case G_TYPE_POINTER:
     case G_TYPE_FLOAT:
     case G_TYPE_DOUBLE:
@@ -245,7 +279,7 @@ _gtk_tree_data_list_node_copy (GtkTreeDataList *list,
     case G_TYPE_OBJECT:
       new_list->data.v_pointer = list->data.v_pointer;
       if (new_list->data.v_pointer)
-       g_object_ref (G_OBJECT (new_list->data.v_pointer));
+       g_object_ref (new_list->data.v_pointer);
       break;
     case G_TYPE_BOXED:
       if (list->data.v_pointer)
@@ -319,20 +353,52 @@ gtk_tree_data_list_compare_func (GtkTreeModel *model,
       else
        retval = 1;
       break;
+    case G_TYPE_LONG:
+      if (g_value_get_long (&a_value) < g_value_get_long (&b_value))
+       retval = -1;
+      else if (g_value_get_long (&a_value) == g_value_get_long (&b_value))
+       retval = 0;
+      else
+       retval = 1;
+      break;
+    case G_TYPE_ULONG:
+      if (g_value_get_ulong (&a_value) < g_value_get_ulong (&b_value))
+       retval = -1;
+      else if (g_value_get_ulong (&a_value) == g_value_get_ulong (&b_value))
+       retval = 0;
+      else
+       retval = 1;
+      break;
+    case G_TYPE_INT64:
+      if (g_value_get_int64 (&a_value) < g_value_get_int64 (&b_value))
+       retval = -1;
+      else if (g_value_get_int64 (&a_value) == g_value_get_int64 (&b_value))
+       retval = 0;
+      else
+       retval = 1;
+      break;
+    case G_TYPE_UINT64:
+      if (g_value_get_uint64 (&a_value) < g_value_get_uint64 (&b_value))
+       retval = -1;
+      else if (g_value_get_uint64 (&a_value) == g_value_get_uint64 (&b_value))
+       retval = 0;
+      else
+       retval = 1;
+      break;
     case G_TYPE_ENUM:
       /* this is somewhat bogus. */
-      if (g_value_get_int (&a_value) < g_value_get_int (&b_value))
+      if (g_value_get_enum (&a_value) < g_value_get_enum (&b_value))
        retval = -1;
-      else if (g_value_get_int (&a_value) == g_value_get_int (&b_value))
+      else if (g_value_get_enum (&a_value) == g_value_get_enum (&b_value))
        retval = 0;
       else
        retval = 1;
       break;
     case G_TYPE_FLAGS:
       /* this is even more bogus. */
-      if (g_value_get_uint (&a_value) < g_value_get_uint (&b_value))
+      if (g_value_get_flags (&a_value) < g_value_get_flags (&b_value))
        retval = -1;
-      else if (g_value_get_uint (&a_value) == g_value_get_uint (&b_value))
+      else if (g_value_get_flags (&a_value) == g_value_get_flags (&b_value))
        retval = 0;
       else
        retval = 1;
@@ -409,7 +475,12 @@ _gtk_tree_data_list_header_free (GList *list)
       GtkTreeDataSortHeader *header = (GtkTreeDataSortHeader *) tmp->data;
 
       if (header->destroy)
-       (* header->destroy) (header->data);
+       {
+         GtkDestroyNotify d = header->destroy;
+
+         header->destroy = NULL;
+         d (header->data);
+       }
 
       g_free (header);
     }