summaryrefslogtreecommitdiff
path: root/gtk/gtktree.c
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2001-03-02 17:06:14 +0000
committerOwen Taylor <otaylor@src.gnome.org>2001-03-02 17:06:14 +0000
commitb0052ec843ab9acc77408d256a5a43d4332f0a70 (patch)
tree67c0811f584c99b50fbb1de86f3c29d04bb14628 /gtk/gtktree.c
parentef08542c4fe38632c04999a8f577236b66218bdf (diff)
downloadgdk-pixbuf-b0052ec843ab9acc77408d256a5a43d4332f0a70.tar.gz
Patch from ChiDeok Hwang to move call to sync_selection() up a few lines
Wed Feb 28 19:10:43 2001 Owen Taylor <otaylor@redhat.com> * gtk/gtkclist.c (real_remove_row): Patch from ChiDeok Hwang to move call to sync_selection() up a few lines to before the row list is modified, to fix crash when removing rows in the undo_selection list. (Test case provided by Daniel Elstner: http://mail.gnome.org/archives/gtk-list/2001-February/msg00359.html) Fri Feb 23 15:06:48 2001 Owen Taylor <otaylor@redhat.com> * gtk/gtktree.c (gtk_tree_class_init): Do the setting of tree->root_tree in parent_set rather than _map(), fixing #50892 in a bit better manner. Thu Feb 22 17:07:58 2001 Owen Taylor <otaylor@redhat.com> * gtk/gtkmenu.c (gtk_menu_popup): Don't flip cursor. (#50934) Tue Feb 2 11:22:33 2001 Jody Goldberg <jgoldberg@home.com> * gtk/gtkstyle.c : Remove duplicate fwd decl for gtk_default_draw_shadow. ue Feb 20 11:40:58 2001 Owen Taylor <otaylor@redhat.com> * gdk/gdkimage.c (gdk_image_new): Remove excess warning, make warnings more verbose, treat a error in shmat as permanent, and don't try again. (#51163, Ed Randall.) Mon Feb 19 20:15:28 2001 Owen Taylor <otaylor@redhat.com> * gtk/gtkrange.c (gtk_range_timer_1st_time): Add an initial delay for the first click before starting to scroll. (based on #51026, gtk-enf-990512-0.patch, Eric Fisher) * gtk/gtktext.c: GtkText should have I-beam cursor. (based on gtk-enf-990513-1.patch, Eric Fisher.) Mon Feb 19 16:42:19 2001 Owen Taylor <otaylor@redhat.com> * gtk/gtklayout.c (gtk_layout_allocate_child): Tiny cleanup to remove some references to unused ->xoffset, ->yoffset. Mon Feb 19 14:20:36 2001 Owen Taylor <otaylor@redhat.com> * gdk/gdkrgb.c (gdk_rgb_convert_555_br): Fix incorrect mask. (#51039, fix from Martin Maierhofer) Fri Feb 16 20:09:42 2001 Owen Taylor <otaylor@redhat.com> * gtk/gtkctree.c (gtk_ctree_class_init): Add bindings for unshifted + and shifted = for non-us keyboards. Make <Control>+ and <Control>- work as well as <Control>KP_Plus, <Control>KP_Minus for recursive open/close. (#2682, René Seindal) Fri Feb 16 18:50:59 2001 Owen Taylor <otaylor@redhat.com> * gtk/gtkmenushell.c (gtk_real_menu_shell_cancel): Unset the active menu item before deactivating the menu, so gtk_menu_popdown doesn't change the history. (#50964) Fri Feb 16 15:55:22 2001 Owen Taylor <otaylor@redhat.com> * gtk/gtktreeitem.c (gtk_tree_item_draw_lines): draw lines with text_gc rather than black_gc. (Patch from Vlad Harchev <hvv hippo ru>, #50926)
Diffstat (limited to 'gtk/gtktree.c')
-rw-r--r--gtk/gtktree.c83
1 files changed, 64 insertions, 19 deletions
diff --git a/gtk/gtktree.c b/gtk/gtktree.c
index 1102a98eb..a8183ad52 100644
--- a/gtk/gtktree.c
+++ b/gtk/gtktree.c
@@ -43,6 +43,8 @@ static void gtk_tree_class_init (GtkTreeClass *klass);
static void gtk_tree_init (GtkTree *tree);
static void gtk_tree_destroy (GtkObject *object);
static void gtk_tree_map (GtkWidget *widget);
+static void gtk_tree_parent_set (GtkWidget *widget,
+ GtkWidget *previous_parent);
static void gtk_tree_unmap (GtkWidget *widget);
static void gtk_tree_realize (GtkWidget *widget);
static gint gtk_tree_expose (GtkWidget *widget,
@@ -117,6 +119,7 @@ gtk_tree_class_init (GtkTreeClass *class)
widget_class->map = gtk_tree_map;
widget_class->unmap = gtk_tree_unmap;
+ widget_class->parent_set = gtk_tree_parent_set;
widget_class->realize = gtk_tree_realize;
widget_class->expose_event = gtk_tree_expose;
widget_class->motion_notify_event = gtk_tree_motion_notify;
@@ -170,7 +173,7 @@ static void
gtk_tree_init (GtkTree *tree)
{
tree->children = NULL;
- tree->root_tree = NULL;
+ tree->root_tree = tree;
tree->selection = NULL;
tree->tree_owner = NULL;
tree->selection_mode = GTK_SELECTION_SINGLE;
@@ -503,21 +506,44 @@ gtk_tree_forall (GtkContainer *container,
}
static void
-gtk_tree_map (GtkWidget *widget)
+gtk_tree_unselect_all (GtkTree *tree)
{
- GtkTree *tree;
+ GList *tmp_list, *selection;
+ GtkWidget *tmp_item;
+
+ selection = tree->selection;
+ tree->selection = NULL;
+
+ tmp_list = selection;
+ while (tmp_list)
+ {
+ tmp_item = selection->data;
+
+ if (tmp_item->parent &&
+ GTK_IS_TREE (tmp_item->parent) &&
+ GTK_TREE (tmp_item->parent)->root_tree == tree)
+ gtk_tree_item_deselect (GTK_TREE_ITEM (tmp_item));
+
+ gtk_widget_unref (tmp_item);
+
+ tmp_list = tmp_list->next;
+ }
+
+ g_list_free (selection);
+}
+
+static void
+gtk_tree_parent_set (GtkWidget *widget,
+ GtkWidget *previous_parent)
+{
+ GtkTree *tree = GTK_TREE (widget);
GtkWidget *child;
GList *children;
-
- g_return_if_fail (widget != NULL);
- g_return_if_fail (GTK_IS_TREE (widget));
-
- GTK_WIDGET_SET_FLAGS (widget, GTK_MAPPED);
- tree = GTK_TREE (widget);
-
- if(GTK_IS_TREE(widget->parent))
+ if (widget->parent && GTK_IS_TREE (widget->parent))
{
+ gtk_tree_unselect_all (tree);
+
/* set root tree for this tree */
tree->root_tree = GTK_TREE(widget->parent)->root_tree;
@@ -527,9 +553,34 @@ gtk_tree_map (GtkWidget *widget)
tree->indent_value;
tree->view_mode = GTK_TREE(GTK_WIDGET(tree)->parent)->view_mode;
tree->view_line = GTK_TREE(GTK_WIDGET(tree)->parent)->view_line;
- }
+ }
else
- tree->root_tree = tree;
+ {
+ tree->root_tree = tree;
+
+ tree->level = 0;
+ tree->current_indent = 0;
+ }
+
+ children = tree->children;
+ while (children)
+ {
+ child = children->data;
+ children = children->next;
+
+ if (GTK_TREE_ITEM (child)->subtree)
+ gtk_tree_parent_set (GTK_TREE_ITEM (child)->subtree, child);
+ }
+}
+
+static void
+gtk_tree_map (GtkWidget *widget)
+{
+ GtkTree *tree = GTK_TREE (widget);
+ GtkWidget *child;
+ GList *children;
+
+ GTK_WIDGET_SET_FLAGS (widget, GTK_MAPPED);
children = tree->children;
while (children)
@@ -1019,12 +1070,6 @@ gtk_real_tree_select_child (GtkTree *tree,
g_return_if_fail (child != NULL);
g_return_if_fail (GTK_IS_TREE_ITEM (child));
- if (!tree->root_tree)
- {
- g_warning (G_STRLOC ": unable to select a child in a tree prior to realization");
- return;
- }
-
root_selection = tree->root_tree->selection;
switch (tree->root_tree->selection_mode)