diff options
author | Havoc Pennington <hp@redhat.com> | 2001-01-01 19:01:54 +0000 |
---|---|---|
committer | Havoc Pennington <hp@src.gnome.org> | 2001-01-01 19:01:54 +0000 |
commit | 66f87948e233899c8bb67979df74a9e728b7635c (patch) | |
tree | 19cd6883960c3c95160e0b5a21cfacab38fa5fbf /gtk | |
parent | e5d534b3fd7fe105f21dcbadcec8c6bce01ca0da (diff) | |
download | gtk+-66f87948e233899c8bb67979df74a9e728b7635c.tar.gz |
Adapt to GtkTreeSelection changes
2001-01-01 Havoc Pennington <hp@redhat.com>
* gtk/gtktreeview.c: Adapt to GtkTreeSelection changes
* gtk/gtktreeselection.c (_gtk_tree_selection_set_tree_view):
don't fill in tree_view->priv->selection, kind of an unexpected
side effect
* gtk/gtkcellrenderertext.c: Remove definition of _ and include
gtkintl.h
* gtk/gtkcellrenderer.c: Remove definition of _ and include
gtkintl.h
(gtk_cell_renderer_get_property): remove calls to g_value_init
* gtk/gtkcellrendererpixbuf.c: Remove definition of _ and include
gtkintl.h
* gtk/gtkcellrenderertextpixbuf.c: Remove definition of _ macro
and include gtkintl.h
(gtk_cell_renderer_text_pixbuf_class_init): remove spaces from
property names
* gtk/gtktreeselection.c (_gtk_tree_selection_new): rename, return
GtkTreeSelection
(_gtk_tree_selection_new_from_with_view): rename, return
GtkTreeSelection
(_gtk_tree_selection_set_tree_view): rename with uscore
(gtk_tree_selection_get_selected): fill in the "model" out param
first, so it gets filled in even if we return at the top of the
function
(gtk_tree_selection_real_select_all): add a comment and an else{}
to clarify this a bit
(gtk_tree_selection_real_unselect_all): add the same else{}
* gtk/gtktreeselection.h: Rename new, new_with_tree_view, and
set_tree_view to have underscore prefixes, move them to the
private header, fix return type of new_with_tree_view
(struct _GtkTreeSelection): mark struct
fields private
* gtk/gtktreemodel.c (gtk_tree_model_get_flags): return
GtkTreeModelFlags, not a guint
(gtk_tree_path_prev): return gboolean not gint
(gtk_tree_path_up): return gboolean not gint
* gtk/gtktreemodel.h (struct _GtkTreeModelIface): make get_flags
return GtkTreeModelFlags, not a guint
* gtk/gtktreemodelsort.c (gtk_tree_model_sort_finalize): check
that child model is non-null before unrefing it
(g_value_int_compare_func): make this a qsort compare func, not
a boolean predicate
* gtk/gtktreemodelsort.h: rename gtk_tree_model_set_sort_column,
(add -umn to the end), and mark it unimplemented
(gtk_tree_model_sort_resort): remove, this wasn't implemented, and
I don't see what it's for - doesn't the model always sort itself?
(gtk_tree_model_sort_set_compare): this had the wrong signature
* gtk/gtktreeviewcolumn.c (gtk_tree_view_column_set_attributes):
Fix the docs to say that it destructively replaces existing
attributes (previously said that it added attributes).
(gtk_tree_view_column_set_visible): canonicalize bool before
equality testing. Also, check for realization before
hiding/showing the tree_column->window; if this window could exist
before realization, then it's busted and needs fixing, we can't
create GDK resources pre-realization. Also, remove
superfluous queue_resize(), since set_size() does that for us.
(gtk_tree_view_column_set_col_type): check realization before
using tree_column->window
* gtk/gtktreedatalist.c: fix filename in copyright notice
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/gtkcellrenderer.c | 18 | ||||
-rw-r--r-- | gtk/gtkcellrendererpixbuf.c | 6 | ||||
-rw-r--r-- | gtk/gtkcellrenderertext.c | 5 | ||||
-rw-r--r-- | gtk/gtkcellrenderertextpixbuf.c | 13 | ||||
-rw-r--r-- | gtk/gtktreedatalist.c | 2 | ||||
-rw-r--r-- | gtk/gtktreemodel.c | 20 | ||||
-rw-r--r-- | gtk/gtktreemodel.h | 11 | ||||
-rw-r--r-- | gtk/gtktreemodelsort.c | 16 | ||||
-rw-r--r-- | gtk/gtktreemodelsort.h | 17 | ||||
-rw-r--r-- | gtk/gtktreeprivate.h | 4 | ||||
-rw-r--r-- | gtk/gtktreeselection.c | 113 | ||||
-rw-r--r-- | gtk/gtktreeselection.h | 9 | ||||
-rw-r--r-- | gtk/gtktreeview.c | 12 | ||||
-rw-r--r-- | gtk/gtktreeviewcolumn.c | 32 |
14 files changed, 154 insertions, 124 deletions
diff --git a/gtk/gtkcellrenderer.c b/gtk/gtkcellrenderer.c index adb255e672..c9d607874e 100644 --- a/gtk/gtkcellrenderer.c +++ b/gtk/gtkcellrenderer.c @@ -18,10 +18,7 @@ */ #include "gtkcellrenderer.h" - -#ifndef _ -#define _(x) x -#endif +#include "gtkintl.h" static void gtk_cell_renderer_init (GtkCellRenderer *cell); static void gtk_cell_renderer_class_init (GtkCellRendererClass *class); @@ -150,19 +147,15 @@ gtk_cell_renderer_get_property (GObject *object, switch (param_id) { case PROP_XALIGN: - g_value_init (value, G_TYPE_FLOAT); g_value_set_float (value, cell->xalign); break; case PROP_YALIGN: - g_value_init (value, G_TYPE_FLOAT); g_value_set_float (value, cell->yalign); break; case PROP_XPAD: - g_value_init (value, G_TYPE_INT); g_value_set_float (value, cell->xpad); break; case PROP_YPAD: - g_value_init (value, G_TYPE_INT); g_value_set_float (value, cell->ypad); break; default: @@ -208,7 +201,8 @@ gtk_cell_renderer_get_size (GtkCellRenderer *cell, gint *height) { /* It's actually okay to pass in a NULL cell, as we run into that - * a lot */ + * a lot + */ if (cell == NULL) return; g_return_if_fail (GTK_IS_CELL_RENDERER (cell)); @@ -227,7 +221,8 @@ gtk_cell_renderer_render (GtkCellRenderer *cell, guint flags) { /* It's actually okay to pass in a NULL cell, as we run into that - * a lot */ + * a lot + */ if (cell == NULL) return; g_return_if_fail (GTK_IS_CELL_RENDERER (cell)); @@ -252,7 +247,8 @@ gtk_cell_renderer_event (GtkCellRenderer *cell, guint flags) { /* It's actually okay to pass in a NULL cell, as we run into that - * a lot */ + * a lot + */ if (cell == NULL) return FALSE; g_return_val_if_fail (GTK_IS_CELL_RENDERER (cell), FALSE); diff --git a/gtk/gtkcellrendererpixbuf.c b/gtk/gtkcellrendererpixbuf.c index 4e1b9f58a0..fa21e59e8c 100644 --- a/gtk/gtkcellrendererpixbuf.c +++ b/gtk/gtkcellrendererpixbuf.c @@ -19,11 +19,7 @@ #include <stdlib.h> #include "gtkcellrendererpixbuf.h" - -#ifndef _ -#define _(x) x -#endif - +#include "gtkintl.h" static void gtk_cell_renderer_pixbuf_get_property (GObject *object, guint param_id, diff --git a/gtk/gtkcellrenderertext.c b/gtk/gtkcellrenderertext.c index f9f81ba3a8..7155010110 100644 --- a/gtk/gtkcellrenderertext.c +++ b/gtk/gtkcellrenderertext.c @@ -19,10 +19,7 @@ #include <stdlib.h> #include "gtkcellrenderertext.h" - -#ifndef _ -#define _(x) x -#endif +#include "gtkintl.h" static void gtk_cell_renderer_text_init (GtkCellRendererText *celltext); static void gtk_cell_renderer_text_class_init (GtkCellRendererTextClass *class); diff --git a/gtk/gtkcellrenderertextpixbuf.c b/gtk/gtkcellrenderertextpixbuf.c index e9563d1d6e..712754fcfd 100644 --- a/gtk/gtkcellrenderertextpixbuf.c +++ b/gtk/gtkcellrenderertextpixbuf.c @@ -19,10 +19,7 @@ #include <stdlib.h> #include "gtkcellrenderertextpixbuf.h" - -#ifndef _ -#define _(x) x -#endif +#include "gtkintl.h" enum { PROP_ZERO, @@ -132,7 +129,7 @@ gtk_cell_renderer_text_pixbuf_class_init (GtkCellRendererTextPixbufClass *class) g_object_class_install_property (object_class, PROP_PIXBUF_XALIGN, - g_param_spec_float ("pixbuf xalign", + g_param_spec_float ("pixbuf_xalign", _("pixbuf xalign"), _("The x-align of the pixbuf."), 0.0, @@ -143,7 +140,7 @@ gtk_cell_renderer_text_pixbuf_class_init (GtkCellRendererTextPixbufClass *class) g_object_class_install_property (object_class, PROP_PIXBUF_YALIGN, - g_param_spec_float ("pixbuf yalign", + g_param_spec_float ("pixbuf_yalign", _("pixbuf yalign"), _("The y-align of the pixbuf."), 0.0, @@ -154,7 +151,7 @@ gtk_cell_renderer_text_pixbuf_class_init (GtkCellRendererTextPixbufClass *class) g_object_class_install_property (object_class, PROP_PIXBUF_XPAD, - g_param_spec_uint ("pixbuf xpad", + g_param_spec_uint ("pixbuf_xpad", _("pixbuf xpad"), _("The xpad of the pixbuf."), 0, @@ -165,7 +162,7 @@ gtk_cell_renderer_text_pixbuf_class_init (GtkCellRendererTextPixbufClass *class) g_object_class_install_property (object_class, PROP_PIXBUF_YPAD, - g_param_spec_uint ("pixbuf ypad", + g_param_spec_uint ("pixbuf_ypad", _("pixbuf ypad"), _("The ypad of the pixbuf."), 0, diff --git a/gtk/gtktreedatalist.c b/gtk/gtktreedatalist.c index f2fe36e4e5..1e9b7f570c 100644 --- a/gtk/gtktreedatalist.c +++ b/gtk/gtktreedatalist.c @@ -1,4 +1,4 @@ -/* gtktreedatalist.h +/* gtktreedatalist.c * Copyright (C) 2000 Red Hat, Inc., Jonathan Blandford <jrb@redhat.com> * * This library is free software; you can redistribute it and/or diff --git a/gtk/gtktreemodel.c b/gtk/gtktreemodel.c index 1b71a004cf..b3bbaca07d 100644 --- a/gtk/gtktreemodel.c +++ b/gtk/gtktreemodel.c @@ -77,9 +77,11 @@ gtk_tree_path_new (void) * gtk_tree_path_new_from_string: * @path: The string representation of a path. * - * Creates a new #GtkTreePath initialized to @path. @path is expected to be a - * colon separated list of numbers. For example, the string "10:4:0" would - * create a path of depth 3. + * Creates a new #GtkTreePath initialized to @path. @path is expected + * to be a colon separated list of numbers. For example, the string + * "10:4:0" would create a path of depth 3 pointing to the 11th child + * of the root node, the 5th child of that 11th child, and the 1st + * child of that 5th child. * * Return value: A newly created #GtkTreePath. **/ @@ -343,7 +345,7 @@ gtk_tree_path_next (GtkTreePath *path) * * Return value: TRUE if @path has a previous node, and the move was made. **/ -gint +gboolean gtk_tree_path_prev (GtkTreePath *path) { g_return_val_if_fail (path != NULL, FALSE); @@ -364,7 +366,7 @@ gtk_tree_path_prev (GtkTreePath *path) * * Return value: TRUE if @path has a parent, and the move was made. **/ -gint +gboolean gtk_tree_path_up (GtkTreePath *path) { g_return_val_if_fail (path != NULL, FALSE); @@ -398,7 +400,7 @@ gtk_tree_path_down (GtkTreePath *path) * * Creates a dynamically allocated tree iterator as a copy of @iter. This * function is not intended for use in applications, because you can just copy - * the structs by value (<literal>GtkTreeIter new_iter = iter;</literal>). You + * the structs by value (GtkTreeIter new_iter = iter;). You * must free this iter with gtk_tree_iter_free (). * * Return value: a newly allocated copy of @iter. @@ -436,13 +438,13 @@ gtk_tree_iter_free (GtkTreeIter *iter) * gtk_tree_model_get_flags: * @tree_model: A #GtkTreeModel. * - * Returns a list of flags supported by this interface. The flags are a bitwise + * Returns a set of flags supported by this interface. The flags are a bitwise * combination of #GtkTreeModelFlags. It is expected that the flags supported * do not change for an interface. * * Return value: The flags supported by this interface. **/ -guint +GtkTreeModelFlags gtk_tree_model_get_flags (GtkTreeModel *tree_model) { g_return_val_if_fail (tree_model != NULL, 0); @@ -733,6 +735,7 @@ gtk_tree_model_iter_parent (GtkTreeModel *tree_model, return (* GTK_TREE_MODEL_GET_IFACE (tree_model)->iter_parent) (tree_model, iter, child); } +/* FIXME explain what the method is supposed to do! */ /** * gtk_tree_model_ref_iter: * @tree_model: A #GtkTreeModel. @@ -753,6 +756,7 @@ gtk_tree_model_ref_iter (GtkTreeModel *tree_model, (* GTK_TREE_MODEL_GET_IFACE (tree_model)->ref_iter) (tree_model, iter); } +/* FIXME explain what the method is supposed to do! */ /** * gtk_tree_model_unref_iter: * @tree_model: A #GtkTreeModel. diff --git a/gtk/gtktreemodel.h b/gtk/gtktreemodel.h index 09495d1ec7..ea2e4a7037 100644 --- a/gtk/gtktreemodel.h +++ b/gtk/gtktreemodel.h @@ -76,7 +76,8 @@ struct _GtkTreeModelIface gint *new_order); /* VTable - not signals */ - guint (* get_flags) (GtkTreeModel *tree_model); + GtkTreeModelFlags (* get_flags) (GtkTreeModel *tree_model); + gint (* get_n_columns) (GtkTreeModel *tree_model); GType (* get_column_type) (GtkTreeModel *tree_model, gint index); @@ -128,8 +129,8 @@ GtkTreePath *gtk_tree_path_copy (GtkTreePath *path); gint gtk_tree_path_compare (const GtkTreePath *a, const GtkTreePath *b); void gtk_tree_path_next (GtkTreePath *path); -gint gtk_tree_path_prev (GtkTreePath *path); -gint gtk_tree_path_up (GtkTreePath *path); +gboolean gtk_tree_path_prev (GtkTreePath *path); +gboolean gtk_tree_path_up (GtkTreePath *path); void gtk_tree_path_down (GtkTreePath *path); @@ -138,8 +139,8 @@ GtkTreeIter *gtk_tree_iter_copy (GtkTreeIter *iter); void gtk_tree_iter_free (GtkTreeIter *iter); /* GtkTreeModel stuff */ -GtkType gtk_tree_model_get_type (void) G_GNUC_CONST; -guint gtk_tree_model_get_flags (GtkTreeModel *tree_model); +GtkType gtk_tree_model_get_type (void) G_GNUC_CONST; +GtkTreeModelFlags gtk_tree_model_get_flags (GtkTreeModel *tree_model); /* Column information */ gint gtk_tree_model_get_n_columns (GtkTreeModel *tree_model); diff --git a/gtk/gtktreemodelsort.c b/gtk/gtktreemodelsort.c index 617aa48fb2..6b5b330a9d 100644 --- a/gtk/gtktreemodelsort.c +++ b/gtk/gtktreemodelsort.c @@ -352,7 +352,11 @@ gtk_tree_model_sort_finalize (GObject *object) if (tree_model_sort->root) gtk_tree_model_sort_free_level (tree_model_sort->root); - g_object_unref (G_OBJECT (tree_model_sort->child_model)); + if (tree_model_sort->child_model) + { + g_object_unref (G_OBJECT (tree_model_sort->child_model)); + tree_model_sort->child_model = NULL; + } } static void @@ -1135,7 +1139,15 @@ static gint g_value_int_compare_func (const GValue *a, const GValue *b) { - return g_value_get_int (a) < g_value_get_int (b); + gint a_int = g_value_get_int (a); + gint b_int = g_value_get_int (b); + + if (a_int < b_int) + return -1; + else if (a_int > b_int) + return 1; + else + return 0; } diff --git a/gtk/gtktreemodelsort.h b/gtk/gtktreemodelsort.h index 715b2dd297..66a3453775 100644 --- a/gtk/gtktreemodelsort.h +++ b/gtk/gtktreemodelsort.h @@ -78,16 +78,17 @@ GtkTreeModel *gtk_tree_model_sort_new_with_model (GtkTreeModel *child_model gint sort_col); void gtk_tree_model_sort_set_model (GtkTreeModelSort *tree_model_sort, GtkTreeModel *model); -void gtk_tree_model_sort_set_sort_col (GtkTreeModelSort *tree_model_sort, - gint sort_col); -void gtk_tree_model_sort_set_compare (GtkTreeModelSort *tree_model_sort, - GValueCompareFunc *func); -void gtk_tree_model_sort_resort (GtkTreeModelSort *tree_model_sort); GtkTreePath *gtk_tree_model_sort_convert_path (GtkTreeModelSort *tree_model_sort, GtkTreePath *child_path); -void gtk_tree_model_sort_convert_iter (GtkTreeModelSort *tree_model_sort, - GtkTreeIter *sort_iter, - GtkTreeIter *child_iter); + +/* not implemented */ +void gtk_tree_model_sort_set_sort_column (GtkTreeModelSort *tree_model_sort, + gint sort_col); +void gtk_tree_model_sort_set_compare (GtkTreeModelSort *tree_model_sort, + GValueCompareFunc func); +void gtk_tree_model_sort_convert_iter (GtkTreeModelSort *tree_model_sort, + GtkTreeIter *sort_iter, + GtkTreeIter *child_iter); #ifdef __cplusplus } diff --git a/gtk/gtktreeprivate.h b/gtk/gtktreeprivate.h index a7b932bebc..ba3efb4d5e 100644 --- a/gtk/gtktreeprivate.h +++ b/gtk/gtktreeprivate.h @@ -182,6 +182,10 @@ void _gtk_tree_view_set_size (GtkTreeView *tree_v gint height); +GtkTreeSelection* _gtk_tree_selection_new (void); +GtkTreeSelection* _gtk_tree_selection_new_with_tree_view (GtkTreeView *tree_view); +void _gtk_tree_selection_set_tree_view (GtkTreeSelection *selection, + GtkTreeView *tree_view); #ifdef __cplusplus } diff --git a/gtk/gtktreeselection.c b/gtk/gtktreeselection.c index 4487f3dc01..cb83222dfd 100644 --- a/gtk/gtktreeselection.c +++ b/gtk/gtktreeselection.c @@ -31,7 +31,8 @@ static gint gtk_tree_selection_real_select_node (GtkTreeSelection *selecti GtkRBNode *node, gboolean select); -enum { +enum +{ SELECTION_CHANGED, LAST_SIGNAL }; @@ -91,25 +92,25 @@ gtk_tree_selection_init (GtkTreeSelection *selection) } /** - * gtk_tree_selection_new: + * _gtk_tree_selection_new: * * Creates a new #GtkTreeSelection object. This function should not be invoked, * as each #GtkTreeView will create it's own #GtkTreeSelection. * * Return value: A newly created #GtkTreeSelection object. **/ -GtkObject * -gtk_tree_selection_new (void) +GtkTreeSelection* +_gtk_tree_selection_new (void) { - GtkObject *selection; + GtkTreeSelection *selection; - selection = GTK_OBJECT (gtk_type_new (GTK_TYPE_TREE_SELECTION)); + selection = GTK_TREE_SELECTION (gtk_type_new (GTK_TYPE_TREE_SELECTION)); return selection; } /** - * gtk_tree_selection_new_with_tree_view: + * _gtk_tree_selection_new_with_tree_view: * @tree_view: The #GtkTreeView. * * Creates a new #GtkTreeSelection object. This function should not be invoked, @@ -117,22 +118,22 @@ gtk_tree_selection_new (void) * * Return value: A newly created #GtkTreeSelection object. **/ -GtkObject * -gtk_tree_selection_new_with_tree_view (GtkTreeView *tree_view) +GtkTreeSelection* +_gtk_tree_selection_new_with_tree_view (GtkTreeView *tree_view) { - GtkObject *selection; + GtkTreeSelection *selection; g_return_val_if_fail (tree_view != NULL, NULL); g_return_val_if_fail (GTK_IS_TREE_VIEW (tree_view), NULL); - selection = gtk_tree_selection_new (); - gtk_tree_selection_set_tree_view (GTK_TREE_SELECTION (selection), tree_view); + selection = _gtk_tree_selection_new (); + _gtk_tree_selection_set_tree_view (selection, tree_view); return selection; } /** - * gtk_tree_selection_set_tree_view: + * _gtk_tree_selection_set_tree_view: * @selection: A #GtkTreeSelection. * @tree_view: The #GtkTreeView. * @@ -140,8 +141,8 @@ gtk_tree_selection_new_with_tree_view (GtkTreeView *tree_view) * it is used internally by #GtkTreeView. **/ void -gtk_tree_selection_set_tree_view (GtkTreeSelection *selection, - GtkTreeView *tree_view) +_gtk_tree_selection_set_tree_view (GtkTreeSelection *selection, + GtkTreeView *tree_view) { g_return_if_fail (selection != NULL); g_return_if_fail (GTK_IS_TREE_SELECTION (selection)); @@ -149,9 +150,9 @@ gtk_tree_selection_set_tree_view (GtkTreeSelection *selection, g_return_if_fail (GTK_IS_TREE_VIEW (tree_view)); selection->tree_view = tree_view; - tree_view->priv->selection = selection; } +/* FIXME explain what the anchor is */ /** * gtk_tree_selection_set_type: * @selection: A #GtkTreeSelection. @@ -191,6 +192,8 @@ gtk_tree_selection_set_type (GtkTreeSelection *selection, * all. */ gtk_tree_selection_unselect_all (selection); + + /* FIXME are we properly emitting the selection_changed signal here? */ if (node && selected) GTK_RBNODE_SET_FLAG (node, GTK_RBNODE_IS_SELECTED); } @@ -260,6 +263,9 @@ gtk_tree_selection_get_selected (GtkTreeSelection *selection, g_return_val_if_fail (selection != NULL, FALSE); g_return_val_if_fail (GTK_IS_TREE_SELECTION (selection), FALSE); + if (model) + *model = selection->tree_view->priv->model; + if (selection->tree_view->priv->anchor == NULL) return FALSE; else if (iter == NULL) @@ -277,9 +283,6 @@ gtk_tree_selection_get_selected (GtkTreeSelection *selection, */ return FALSE; - if (model) - *model = selection->tree_view->priv->model; - return gtk_tree_model_get_iter (selection->tree_view->priv->model, iter, selection->tree_view->priv->anchor); @@ -555,6 +558,8 @@ gtk_tree_selection_real_select_all (GtkTreeSelection *selection) GtkRBTree *tree; GtkRBNode *node; gint dirty; + + /* Just select the last row */ dirty = gtk_tree_selection_real_unselect_all (selection); @@ -578,23 +583,27 @@ gtk_tree_selection_real_select_all (GtkTreeSelection *selection) return dirty; } - - tuple = g_new (struct _TempTuple, 1); - tuple->selection = selection; - tuple->dirty = FALSE; - - _gtk_rbtree_traverse (selection->tree_view->priv->tree, - selection->tree_view->priv->tree->root, - G_PRE_ORDER, - select_all_helper, - tuple); - if (tuple->dirty) + else { + /* Mark all nodes selected */ + + tuple = g_new (struct _TempTuple, 1); + tuple->selection = selection; + tuple->dirty = FALSE; + + _gtk_rbtree_traverse (selection->tree_view->priv->tree, + selection->tree_view->priv->tree->root, + G_PRE_ORDER, + select_all_helper, + tuple); + if (tuple->dirty) + { + g_free (tuple); + return TRUE; + } g_free (tuple); - return TRUE; + return FALSE; } - g_free (tuple); - return FALSE; } /** @@ -658,24 +667,26 @@ gtk_tree_selection_real_unselect_all (GtkTreeSelection *selection) } return FALSE; } - - tuple = g_new (struct _TempTuple, 1); - tuple->selection = selection; - tuple->dirty = FALSE; - - _gtk_rbtree_traverse (selection->tree_view->priv->tree, - selection->tree_view->priv->tree->root, - G_PRE_ORDER, - unselect_all_helper, - tuple); - - if (tuple->dirty) - { + else + { + tuple = g_new (struct _TempTuple, 1); + tuple->selection = selection; + tuple->dirty = FALSE; + + _gtk_rbtree_traverse (selection->tree_view->priv->tree, + selection->tree_view->priv->tree->root, + G_PRE_ORDER, + unselect_all_helper, + tuple); + + if (tuple->dirty) + { + g_free (tuple); + return TRUE; + } g_free (tuple); - return TRUE; + return FALSE; } - g_free (tuple); - return FALSE; } /** @@ -774,6 +785,7 @@ gtk_tree_selection_real_select_range (GtkTreeSelection *selection, start_node = start_tree->parent_node; start_tree = start_tree->parent_tree; if (start_tree == NULL) + /* FIXME should this really be silent, or should it g_warning? */ /* we've run out of tree */ /* This means we never found end node!! */ break; @@ -872,6 +884,9 @@ _gtk_tree_selection_internal_select_node (GtkTreeSelection *selection, /* FIXME: user_func can screw up GTK_TREE_SELECTION_SINGLE. If it prevents * unselection of a node, it can keep more then one node selected. */ +/* Perhaps the correct solution is to prevent selecting the new node, if + * we fail to unselect the old node. + */ static gint gtk_tree_selection_real_select_node (GtkTreeSelection *selection, GtkRBTree *tree, diff --git a/gtk/gtktreeselection.h b/gtk/gtktreeselection.h index e6cc4aa430..34e8f30009 100644 --- a/gtk/gtktreeselection.h +++ b/gtk/gtktreeselection.h @@ -52,6 +52,8 @@ struct _GtkTreeSelection { GtkObject parent; + /*< private >*/ + GtkTreeView *tree_view; GtkTreeSelectionType type; GtkTreeSelectionFunc user_func; @@ -67,8 +69,7 @@ struct _GtkTreeSelectionClass GtkType gtk_tree_selection_get_type (void); -/* FIXME return a GtkTreeSelection */ -GtkObject *gtk_tree_selection_new (void); + void gtk_tree_selection_set_type (GtkTreeSelection *selection, GtkTreeSelectionType type); void gtk_tree_selection_set_select_function (GtkTreeSelection *selection, @@ -104,10 +105,6 @@ void gtk_tree_selection_select_range (GtkTreeSelection /*< private >*/ /* FIXME underscores, return GtkTreeSelection, rename from_tree_view */ -GtkObject *gtk_tree_selection_new_with_tree_view (GtkTreeView *tree_view); -void gtk_tree_selection_set_tree_view (GtkTreeSelection *selection, - GtkTreeView *tree_view); - #ifdef __cplusplus } diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c index fbb23e53e3..755572afae 100644 --- a/gtk/gtktreeview.c +++ b/gtk/gtktreeview.c @@ -1227,7 +1227,8 @@ gtk_tree_view_button_press (GtkWidget *widget, } /* Handle the selection */ if (tree_view->priv->selection == NULL) - gtk_tree_selection_new_with_tree_view (tree_view); + tree_view->priv->selection = + _gtk_tree_selection_new_with_tree_view (tree_view); _gtk_tree_selection_internal_select_node (tree_view->priv->selection, node, @@ -1676,7 +1677,8 @@ gtk_tree_view_focus (GtkContainer *container, gtk_widget_grab_focus (GTK_WIDGET (container)); if (tree_view->priv->selection == NULL) - gtk_tree_selection_new_with_tree_view (tree_view); + tree_view->priv->selection = + _gtk_tree_selection_new_with_tree_view (tree_view); /* if there is no keyboard focus yet, we select the first node */ @@ -1707,7 +1709,8 @@ gtk_tree_view_focus (GtkContainer *container, gtk_widget_grab_focus (GTK_WIDGET (container)); if (tree_view->priv->selection == NULL) - gtk_tree_selection_new_with_tree_view (tree_view); + tree_view->priv->selection = + _gtk_tree_selection_new_with_tree_view (tree_view); if (tree_view->priv->cursor == NULL) tree_view->priv->cursor = gtk_tree_path_new_root (); @@ -3035,7 +3038,8 @@ gtk_tree_view_get_selection (GtkTreeView *tree_view) g_return_val_if_fail (GTK_IS_TREE_VIEW (tree_view), NULL); if (tree_view->priv->selection == NULL) - gtk_tree_selection_new_with_tree_view (tree_view); + tree_view->priv->selection = + _gtk_tree_selection_new_with_tree_view (tree_view); return tree_view->priv->selection; } diff --git a/gtk/gtktreeviewcolumn.c b/gtk/gtktreeviewcolumn.c index 11cd719395..9d1676118e 100644 --- a/gtk/gtktreeviewcolumn.c +++ b/gtk/gtktreeviewcolumn.c @@ -275,11 +275,12 @@ gtk_tree_view_column_set_attributesv (GtkTreeViewColumn *tree_column, /** * gtk_tree_view_column_set_attributes: * @tree_column: A #GtkTreeViewColumn. - * @Varargs: A NULL terminated listing of attributes to add. + * @Varargs: A NULL terminated listing of attributes. * - * Adds the attributes in the list the the @tree_column. The attributes should - * be in attribute/column order, as in @gtk_tree_view_column_add_attribute. If - * the list is empty, then all attributes are removed. + * Sets the attributes in the list as the attributes of @tree_column. + * The attributes should be in attribute/column order, as in + * @gtk_tree_view_column_add_attribute. All existing attributes + * are removed, and replaced with the new attributes. **/ void gtk_tree_view_column_set_attributes (GtkTreeViewColumn *tree_column, @@ -357,6 +358,8 @@ gtk_tree_view_column_set_visible (GtkTreeViewColumn *tree_column, g_return_if_fail (tree_column != NULL); g_return_if_fail (GTK_IS_TREE_VIEW_COLUMN (tree_column)); + visible = !! visible; + if (tree_column->visible == visible) return; @@ -365,19 +368,18 @@ gtk_tree_view_column_set_visible (GtkTreeViewColumn *tree_column, if (visible) { gtk_widget_show (tree_column->button); - gdk_window_show (tree_column->window); + if (GTK_WIDGET_REALIZED (tree_column->tree_view)) + gdk_window_show (tree_column->window); } else { gtk_widget_hide (tree_column->button); - gdk_window_hide (tree_column->window); + if (GTK_WIDGET_REALIZED (tree_column->tree_view)) + gdk_window_hide (tree_column->window); } if (GTK_WIDGET_REALIZED (tree_column->tree_view)) - { - _gtk_tree_view_set_size (GTK_TREE_VIEW (tree_column->tree_view), -1, -1); - gtk_widget_queue_resize (tree_column->tree_view); - } + _gtk_tree_view_set_size (GTK_TREE_VIEW (tree_column->tree_view), -1, -1); } /** @@ -421,11 +423,15 @@ gtk_tree_view_column_set_col_type (GtkTreeViewColumn *tree_column, case GTK_TREE_VIEW_COLUMN_AUTOSIZE: tree_column->dirty = TRUE; case GTK_TREE_VIEW_COLUMN_FIXED: - gdk_window_hide (tree_column->window); + if (GTK_WIDGET_REALIZED (tree_column->tree_view)) + gdk_window_hide (tree_column->window); break; default: - gdk_window_show (tree_column->window); - gdk_window_raise (tree_column->window); + if (GTK_WIDGET_REALIZED (tree_column->tree_view)) + { + gdk_window_show (tree_column->window); + gdk_window_raise (tree_column->window); + } break; } |