diff --git a/ChangeLog b/ChangeLog index 06c9315b..33822134 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-08-26 Soren Sandmann + + * treeviewutils.c (process_iter): Reformat and fix various minor + issues. + 2007-08-25 Soren Sandmann * treeviewutils.c (tree_view_set_model_with_default_sort): Work diff --git a/treeviewutils.c b/treeviewutils.c index bab888e8..786cc05d 100644 --- a/treeviewutils.c +++ b/treeviewutils.c @@ -1,5 +1,3 @@ -/* -*- mode: C; c-file-style: "linux" -*- */ - /* MemProf -- memory profiler and leak detector * Copyright 2002, Soeren Sandmann (sandmann@daimi.au.dk) * Copyright 2003, 2004, Red Hat, Inc. @@ -29,8 +27,8 @@ static void on_column_clicked (GtkTreeViewColumn *column, gpointer data); typedef struct { - int model_column; - GtkSortType default_order; + int model_column; + GtkSortType default_order; } SortInfo; static void @@ -39,43 +37,43 @@ set_sort_info (GtkTreeView *view, int model_column, GtkSortType default_order) { - SortInfo *info; - - info = g_new0 (SortInfo, 1); - info->model_column = model_column; - info->default_order = default_order; - - gtk_tree_view_column_set_clickable (column, TRUE); - - g_object_set_data (G_OBJECT (column), "column_info", info); - g_signal_connect (column, "clicked", G_CALLBACK (on_column_clicked), view); + SortInfo *info; + + info = g_new0 (SortInfo, 1); + info->model_column = model_column; + info->default_order = default_order; + + gtk_tree_view_column_set_clickable (column, TRUE); + + g_object_set_data (G_OBJECT (column), "column_info", info); + g_signal_connect (column, "clicked", G_CALLBACK (on_column_clicked), view); } static SortInfo * get_sort_info (GtkTreeViewColumn *column) { - return g_object_get_data (G_OBJECT (column), "column_info"); + return g_object_get_data (G_OBJECT (column), "column_info"); } static GtkTreeViewColumn * find_column_by_model_column (GtkTreeView *view, int model_column) { - GList *columns = gtk_tree_view_get_columns (view); - GList *list; - GtkTreeViewColumn *result = NULL; - - for (list = columns; list != NULL; list = list->next) - { - GtkTreeViewColumn *column = list->data; - SortInfo *info = get_sort_info (column); - - if (info->model_column == model_column) - result = column; - } - - g_list_free (columns); + GList *columns = gtk_tree_view_get_columns (view); + GList *list; + GtkTreeViewColumn *result = NULL; + + for (list = columns; list != NULL; list = list->next) + { + GtkTreeViewColumn *column = list->data; + SortInfo *info = get_sort_info (column); - return result; + if (info->model_column == model_column) + result = column; + } + + g_list_free (columns); + + return result; } void @@ -83,75 +81,75 @@ tree_view_set_sort_column (GtkTreeView *view, int model_column, int sort_type) { - GList *columns, *list; - GtkTreeSortable *sortable; - GtkTreeViewColumn *column = find_column_by_model_column (view, model_column); - SortInfo *info = get_sort_info (column); + GList *columns, *list; + GtkTreeSortable *sortable; + GtkTreeViewColumn *column = find_column_by_model_column (view, model_column); + SortInfo *info = get_sort_info (column); + + /* For each column in the view, unset the sort indicator */ + columns = gtk_tree_view_get_columns (view); + for (list = columns; list != NULL; list = list->next) + { + GtkTreeViewColumn *col = GTK_TREE_VIEW_COLUMN (list->data); - /* For each column in the view, unset the sort indicator */ - columns = gtk_tree_view_get_columns (view); - for (list = columns; list != NULL; list = list->next) - { - GtkTreeViewColumn *col = GTK_TREE_VIEW_COLUMN (list->data); - - gtk_tree_view_column_set_sort_indicator (col, FALSE); - } - - /* Set the sort indicator for this column */ - gtk_tree_view_column_set_sort_indicator (column, TRUE); - gtk_tree_view_column_set_sort_order (column, sort_type); - - /* And sort the column */ - sortable = GTK_TREE_SORTABLE (gtk_tree_view_get_model (view)); - - gtk_tree_sortable_set_sort_column_id (sortable, - info->model_column, - sort_type); + gtk_tree_view_column_set_sort_indicator (col, FALSE); + } + + /* Set the sort indicator for this column */ + gtk_tree_view_column_set_sort_indicator (column, TRUE); + gtk_tree_view_column_set_sort_order (column, sort_type); + + /* And sort the column */ + sortable = GTK_TREE_SORTABLE (gtk_tree_view_get_model (view)); + + gtk_tree_sortable_set_sort_column_id (sortable, + info->model_column, + sort_type); } static void on_column_clicked (GtkTreeViewColumn *column, gpointer data) { - GtkTreeView *view = data; - GtkSortType sort_type; - SortInfo *info = get_sort_info (column); - - /* Find out what our current sort indicator is. If it is NONE, then - * select the default for the column, otherwise, select the opposite - */ - if (!gtk_tree_view_column_get_sort_indicator (column)) - { - sort_type = info->default_order; - } + GtkTreeView *view = data; + GtkSortType sort_type; + SortInfo *info = get_sort_info (column); + + /* Find out what our current sort indicator is. If it is NONE, then + * select the default for the column, otherwise, select the opposite + */ + if (!gtk_tree_view_column_get_sort_indicator (column)) + { + sort_type = info->default_order; + } + else + { + if (gtk_tree_view_column_get_sort_order (column) == GTK_SORT_ASCENDING) + sort_type = GTK_SORT_DESCENDING; else - { - if (gtk_tree_view_column_get_sort_order (column) == GTK_SORT_ASCENDING) - sort_type = GTK_SORT_DESCENDING; - else - sort_type = GTK_SORT_ASCENDING; - } - - tree_view_set_sort_column (view, info->model_column, sort_type); + sort_type = GTK_SORT_ASCENDING; + } + + tree_view_set_sort_column (view, info->model_column, sort_type); } GtkTreeViewColumn * add_plain_text_column (GtkTreeView *view, const gchar *title, gint model_column) { - GtkCellRenderer *renderer; - GtkTreeViewColumn *column; - - renderer = gtk_cell_renderer_text_new (); - g_object_set (renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL); - column = gtk_tree_view_column_new_with_attributes (title, renderer, - "text", model_column, - NULL); - gtk_tree_view_column_set_resizable (column, TRUE); - gtk_tree_view_append_column (view, column); - - set_sort_info (view, column, model_column, GTK_SORT_ASCENDING); - - return column; + GtkCellRenderer *renderer; + GtkTreeViewColumn *column; + + renderer = gtk_cell_renderer_text_new (); + g_object_set (renderer, "ellipsize", PANGO_ELLIPSIZE_END, NULL); + column = gtk_tree_view_column_new_with_attributes (title, renderer, + "text", model_column, + NULL); + gtk_tree_view_column_set_resizable (column, TRUE); + gtk_tree_view_append_column (view, column); + + set_sort_info (view, column, model_column, GTK_SORT_ASCENDING); + + return column; } static void @@ -159,19 +157,19 @@ pointer_to_text (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data) { - gpointer p; - gchar *text; - int column = GPOINTER_TO_INT (data); - - gtk_tree_model_get (tree_model, iter, column, &p, -1); - text = g_strdup_printf ("%p", p); - g_object_set (cell, "text", text, NULL); - g_free (text); + gpointer p; + gchar *text; + int column = GPOINTER_TO_INT (data); + + gtk_tree_model_get (tree_model, iter, column, &p, -1); + text = g_strdup_printf ("%p", p); + g_object_set (cell, "text", text, NULL); + g_free (text); } typedef struct { - int column; - char *format; + int column; + char *format; } ColumnInfo; static void @@ -179,107 +177,109 @@ double_to_text (GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data) { - gdouble d; - gchar *text; - ColumnInfo *info = data; - - gtk_tree_model_get (tree_model, iter, info->column, &d, -1); - - text = g_strdup_printf (info->format, d); - - g_object_set (cell, "text", text, NULL); - g_free (text); + gdouble d; + gchar *text; + ColumnInfo *info = data; + + gtk_tree_model_get (tree_model, iter, info->column, &d, -1); + + text = g_strdup_printf (info->format, d); + + g_object_set (cell, "text", text, NULL); + g_free (text); } static void free_column_info (void *data) { - ColumnInfo *info = data; - g_free (info->format); - g_free (info); + ColumnInfo *info = data; + g_free (info->format); + g_free (info); } GtkTreeViewColumn * -add_double_format_column (GtkTreeView *view, const gchar *title, gint model_column, const char *format) +add_double_format_column (GtkTreeView *view, + const gchar *title, + gint model_column, + const char *format) { - GtkCellRenderer *renderer; - GtkTreeViewColumn *column; - ColumnInfo *column_info = g_new (ColumnInfo, 1); - - renderer = gtk_cell_renderer_text_new (); - g_object_set (renderer, "xalign", 1.0, NULL); - - column = gtk_tree_view_column_new (); - gtk_tree_view_column_set_title (column, title); - gtk_tree_view_column_pack_start (column, renderer, TRUE); - gtk_tree_view_column_set_resizable (column, FALSE); - - column_info->column = model_column; - column_info->format = g_strdup (format); - - gtk_tree_view_column_set_cell_data_func (column, renderer, - double_to_text, column_info, free_column_info); - - gtk_tree_view_append_column (view, column); - - set_sort_info (view, column, model_column, GTK_SORT_DESCENDING); - - return column; + GtkCellRenderer *renderer; + GtkTreeViewColumn *column; + ColumnInfo *column_info = g_new (ColumnInfo, 1); + + renderer = gtk_cell_renderer_text_new (); + g_object_set (renderer, "xalign", 1.0, NULL); + + column = gtk_tree_view_column_new (); + gtk_tree_view_column_set_title (column, title); + gtk_tree_view_column_pack_start (column, renderer, TRUE); + gtk_tree_view_column_set_resizable (column, FALSE); + + column_info->column = model_column; + column_info->format = g_strdup (format); + + gtk_tree_view_column_set_cell_data_func ( + column, renderer, double_to_text, column_info, free_column_info); + + gtk_tree_view_append_column (view, column); + + set_sort_info (view, column, model_column, GTK_SORT_DESCENDING); + + return column; } GtkTreeViewColumn * add_pointer_column (GtkTreeView *view, const gchar *title, gint model_column) { - GtkCellRenderer *renderer; - GtkTreeViewColumn *column; - - renderer = gtk_cell_renderer_text_new (); - - column = gtk_tree_view_column_new (); - if (title) - gtk_tree_view_column_set_title (column, title); - gtk_tree_view_column_pack_start (column, renderer, TRUE); - gtk_tree_view_column_set_resizable (column, TRUE); - gtk_tree_view_column_set_cell_data_func (column, renderer, - pointer_to_text, GINT_TO_POINTER (model_column), NULL); - - gtk_tree_view_append_column (view, column); - - return column; + GtkCellRenderer *renderer; + GtkTreeViewColumn *column; + + renderer = gtk_cell_renderer_text_new (); + + column = gtk_tree_view_column_new (); + if (title) + gtk_tree_view_column_set_title (column, title); + gtk_tree_view_column_pack_start (column, renderer, TRUE); + gtk_tree_view_column_set_resizable (column, TRUE); + gtk_tree_view_column_set_cell_data_func ( + column, renderer, pointer_to_text, GINT_TO_POINTER (model_column), NULL); + + gtk_tree_view_append_column (view, column); + + return column; } void -tree_view_set_model_with_default_sort (GtkTreeView *view, +tree_view_set_model_with_default_sort (GtkTreeView *view, GtkTreeModel *model, - int model_column, - GtkSortType default_sort) + int model_column, + GtkSortType default_sort) { - gboolean was_sorted = FALSE; - int old_column; - GtkSortType old_type; - GtkTreeSortable *old_model; - GtkAdjustment *adjustment; - - old_model = GTK_TREE_SORTABLE (gtk_tree_view_get_model (view)); - - if (old_model) - { - was_sorted = gtk_tree_sortable_get_sort_column_id ( - GTK_TREE_SORTABLE (gtk_tree_view_get_model (view)), - &old_column, &old_type); - } - - gtk_tree_view_set_model (view, model); - - if (was_sorted) - tree_view_set_sort_column (view, old_column, old_type); - else - tree_view_set_sort_column (view, model_column, default_sort); - - /* Workaround for GTK+ crack, see bug 405625 */ - adjustment = gtk_tree_view_get_vadjustment (view); - if (adjustment) - gtk_adjustment_set_value (adjustment, 0); + gboolean was_sorted = FALSE; + int old_column; + GtkSortType old_type; + GtkTreeSortable *old_model; + GtkAdjustment *adjustment; + + old_model = GTK_TREE_SORTABLE (gtk_tree_view_get_model (view)); + + if (old_model) + { + was_sorted = gtk_tree_sortable_get_sort_column_id ( + GTK_TREE_SORTABLE (old_model), &old_column, &old_type); + } + + gtk_tree_view_set_model (view, model); + + if (was_sorted) + tree_view_set_sort_column (view, old_column, old_type); + else + tree_view_set_sort_column (view, model_column, default_sort); + + /* Workaround for GTK+ crack, see bug 405625 */ + adjustment = gtk_tree_view_get_vadjustment (view); + if (adjustment) + gtk_adjustment_set_value (adjustment, 0); } static void @@ -288,23 +288,27 @@ process_iter (GtkTreeView *view, VisibleCallback callback, gpointer data) { - GtkTreeModel *model = gtk_tree_view_get_model (view); - GtkTreePath *path; - GtkTreeIter child; - - path = gtk_tree_model_get_path (model, iter); - - callback (view, path, iter, data); - - if (gtk_tree_view_row_expanded (view, path)) { - if (gtk_tree_model_iter_children (model, &child, iter)) { - do { - process_iter (view, &child, callback, data); - } while (gtk_tree_model_iter_next (model, &child)); - } + GtkTreeModel *model = gtk_tree_view_get_model (view); + GtkTreePath *path; + GtkTreeIter child; + + path = gtk_tree_model_get_path (model, iter); + + callback (view, path, iter, data); + + if (gtk_tree_view_row_expanded (view, path)) + { + if (gtk_tree_model_iter_children (model, &child, iter)) + { + do + { + process_iter (view, &child, callback, data); + } + while (gtk_tree_model_iter_next (model, &child)); } - - gtk_tree_path_free (path); + } + + gtk_tree_path_free (path); } void @@ -312,9 +316,9 @@ tree_view_foreach_visible (GtkTreeView *view, VisibleCallback callback, gpointer data) { - GtkTreeModel *model = gtk_tree_view_get_model (view); - GtkTreeIter iter; - - if (model && gtk_tree_model_get_iter_first (model, &iter)) - process_iter (view, &iter, callback, data); + GtkTreeModel *model = gtk_tree_view_get_model (view); + GtkTreeIter iter; + + if (model && gtk_tree_model_get_iter_first (model, &iter)) + process_iter (view, &iter, callback, data); }