X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtktreedatalist.c;h=c09ac0683d75a040a4af3e680e7fbc263ea54c2f;hb=44f044e6cd364ae6af36082663b60be64830faaa;hp=403da218a640757149c1839395f72165b9535dc8;hpb=9f35f366612f82ba48796e0e208eb5e78138a68c;p=~andy%2Fgtk diff --git a/gtk/gtktreedatalist.c b/gtk/gtktreedatalist.c index 403da218a..c09ac0683 100644 --- a/gtk/gtktreedatalist.c +++ b/gtk/gtktreedatalist.c @@ -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); }