diff options
author | Owen Taylor <otaylor@redhat.com> | 2001-03-02 17:06:14 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2001-03-02 17:06:14 +0000 |
commit | b0052ec843ab9acc77408d256a5a43d4332f0a70 (patch) | |
tree | 67c0811f584c99b50fbb1de86f3c29d04bb14628 /gtk/gtktree.c | |
parent | ef08542c4fe38632c04999a8f577236b66218bdf (diff) | |
download | gtk+-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.c | 83 |
1 files changed, 64 insertions, 19 deletions
diff --git a/gtk/gtktree.c b/gtk/gtktree.c index 1102a98eba..a8183ad525 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) |