summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorHavoc Pennington <hp@redhat.com>2001-01-01 19:01:54 +0000
committerHavoc Pennington <hp@src.gnome.org>2001-01-01 19:01:54 +0000
commit66f87948e233899c8bb67979df74a9e728b7635c (patch)
tree19cd6883960c3c95160e0b5a21cfacab38fa5fbf /gtk
parente5d534b3fd7fe105f21dcbadcec8c6bce01ca0da (diff)
downloadgtk+-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.c18
-rw-r--r--gtk/gtkcellrendererpixbuf.c6
-rw-r--r--gtk/gtkcellrenderertext.c5
-rw-r--r--gtk/gtkcellrenderertextpixbuf.c13
-rw-r--r--gtk/gtktreedatalist.c2
-rw-r--r--gtk/gtktreemodel.c20
-rw-r--r--gtk/gtktreemodel.h11
-rw-r--r--gtk/gtktreemodelsort.c16
-rw-r--r--gtk/gtktreemodelsort.h17
-rw-r--r--gtk/gtktreeprivate.h4
-rw-r--r--gtk/gtktreeselection.c113
-rw-r--r--gtk/gtktreeselection.h9
-rw-r--r--gtk/gtktreeview.c12
-rw-r--r--gtk/gtktreeviewcolumn.c32
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;
}