]> Pileus Git - ~andy/gtk/commitdiff
Make fail when not realized. (gtk_tree_view_scroll_to_cell): Make work
authorJonathan Blandford <jrb@redhat.com>
Sun, 21 Jan 2001 18:45:20 +0000 (18:45 +0000)
committerJonathan Blandford <jrb@src.gnome.org>
Sun, 21 Jan 2001 18:45:20 +0000 (18:45 +0000)
Sun Jan 21 09:58:00 2001  Jonathan Blandford  <jrb@redhat.com>

* gtk/gtktreeview.c (gtk_tree_view_scroll_to_point): Make fail
when not realized.
(gtk_tree_view_scroll_to_cell): Make work when not realized.
(gtk_tree_view_realize): add scroll_to support
(gtk_tree_view_finalize): add a finalize method.  Populate.
(gtk_tree_view_insert_column): ref and sink the column.
(gtk_tree_view_append_column): ref and sink the column.
(gtk_tree_view_queue_draw_node): New function to handle redrawing
individual nodes.  Should make the code much more efficient, if
actually used.

gtk_tree_view_queue_draw_node isn't actually used yet, but it should start
making Owen less grumpy.

ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtktreeprivate.h
gtk/gtktreeview.c

index d99373722917b20225e0646fd391ca0ee5aad147..0ac9df4822c60bc2753d32edbe5d94f0611a3833 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+Sun Jan 21 09:58:00 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreeview.c (gtk_tree_view_scroll_to_point): Make fail
+       when not realized.
+       (gtk_tree_view_scroll_to_cell): Make work when not realized.
+       (gtk_tree_view_realize): add scroll_to support
+       (gtk_tree_view_finalize): add a finalize method.  Populate.
+       (gtk_tree_view_insert_column): ref and sink the column.
+       (gtk_tree_view_append_column): ref and sink the column.
+       (gtk_tree_view_queue_draw_node): New function to handle redrawing
+       individual nodes.  Should make the code much more efficient, if
+       actually used.
+
 2001-01-19  Havoc Pennington  <hp@redhat.com>
 
        * gtk/gtktextlayout.c (gtk_text_layout_get_line_display):
@@ -1106,6 +1119,7 @@ Tue Jan  2 16:23:05 2001  Owen Taylor  <otaylor@redhat.com>
        Attach the style to the window so that the style it is not
        leaked when unrealizing the window.
 
+>>>>>>> 1.1626
 2000-12-18  Havoc Pennington  <hp@redhat.com>
 
        * gtk/gtktextview.c (gtk_text_view_delete_from_cursor): do
@@ -1600,6 +1614,7 @@ Mon Dec 11 10:02:26 2000  Owen Taylor  <otaylor@redhat.com>
        * gtk/gtkcolorsel.h (GTK_COLOR_SELECTION_GET_CLASS): fix typo,
        reported by Jeff Franks
 
+>>>>>>> 1.1623
 2000-12-08  Alexander Larsson  <alla@lysator.liu.se>
 
        * gdk/linux-fb/gdkmouse-fb.c (gdk_fb_mouse_ms_open):
index d99373722917b20225e0646fd391ca0ee5aad147..0ac9df4822c60bc2753d32edbe5d94f0611a3833 100644 (file)
@@ -1,3 +1,16 @@
+Sun Jan 21 09:58:00 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreeview.c (gtk_tree_view_scroll_to_point): Make fail
+       when not realized.
+       (gtk_tree_view_scroll_to_cell): Make work when not realized.
+       (gtk_tree_view_realize): add scroll_to support
+       (gtk_tree_view_finalize): add a finalize method.  Populate.
+       (gtk_tree_view_insert_column): ref and sink the column.
+       (gtk_tree_view_append_column): ref and sink the column.
+       (gtk_tree_view_queue_draw_node): New function to handle redrawing
+       individual nodes.  Should make the code much more efficient, if
+       actually used.
+
 2001-01-19  Havoc Pennington  <hp@redhat.com>
 
        * gtk/gtktextlayout.c (gtk_text_layout_get_line_display):
@@ -1106,6 +1119,7 @@ Tue Jan  2 16:23:05 2001  Owen Taylor  <otaylor@redhat.com>
        Attach the style to the window so that the style it is not
        leaked when unrealizing the window.
 
+>>>>>>> 1.1626
 2000-12-18  Havoc Pennington  <hp@redhat.com>
 
        * gtk/gtktextview.c (gtk_text_view_delete_from_cursor): do
@@ -1600,6 +1614,7 @@ Mon Dec 11 10:02:26 2000  Owen Taylor  <otaylor@redhat.com>
        * gtk/gtkcolorsel.h (GTK_COLOR_SELECTION_GET_CLASS): fix typo,
        reported by Jeff Franks
 
+>>>>>>> 1.1623
 2000-12-08  Alexander Larsson  <alla@lysator.liu.se>
 
        * gdk/linux-fb/gdkmouse-fb.c (gdk_fb_mouse_ms_open):
index d99373722917b20225e0646fd391ca0ee5aad147..0ac9df4822c60bc2753d32edbe5d94f0611a3833 100644 (file)
@@ -1,3 +1,16 @@
+Sun Jan 21 09:58:00 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreeview.c (gtk_tree_view_scroll_to_point): Make fail
+       when not realized.
+       (gtk_tree_view_scroll_to_cell): Make work when not realized.
+       (gtk_tree_view_realize): add scroll_to support
+       (gtk_tree_view_finalize): add a finalize method.  Populate.
+       (gtk_tree_view_insert_column): ref and sink the column.
+       (gtk_tree_view_append_column): ref and sink the column.
+       (gtk_tree_view_queue_draw_node): New function to handle redrawing
+       individual nodes.  Should make the code much more efficient, if
+       actually used.
+
 2001-01-19  Havoc Pennington  <hp@redhat.com>
 
        * gtk/gtktextlayout.c (gtk_text_layout_get_line_display):
@@ -1106,6 +1119,7 @@ Tue Jan  2 16:23:05 2001  Owen Taylor  <otaylor@redhat.com>
        Attach the style to the window so that the style it is not
        leaked when unrealizing the window.
 
+>>>>>>> 1.1626
 2000-12-18  Havoc Pennington  <hp@redhat.com>
 
        * gtk/gtktextview.c (gtk_text_view_delete_from_cursor): do
@@ -1600,6 +1614,7 @@ Mon Dec 11 10:02:26 2000  Owen Taylor  <otaylor@redhat.com>
        * gtk/gtkcolorsel.h (GTK_COLOR_SELECTION_GET_CLASS): fix typo,
        reported by Jeff Franks
 
+>>>>>>> 1.1623
 2000-12-08  Alexander Larsson  <alla@lysator.liu.se>
 
        * gdk/linux-fb/gdkmouse-fb.c (gdk_fb_mouse_ms_open):
index d99373722917b20225e0646fd391ca0ee5aad147..0ac9df4822c60bc2753d32edbe5d94f0611a3833 100644 (file)
@@ -1,3 +1,16 @@
+Sun Jan 21 09:58:00 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreeview.c (gtk_tree_view_scroll_to_point): Make fail
+       when not realized.
+       (gtk_tree_view_scroll_to_cell): Make work when not realized.
+       (gtk_tree_view_realize): add scroll_to support
+       (gtk_tree_view_finalize): add a finalize method.  Populate.
+       (gtk_tree_view_insert_column): ref and sink the column.
+       (gtk_tree_view_append_column): ref and sink the column.
+       (gtk_tree_view_queue_draw_node): New function to handle redrawing
+       individual nodes.  Should make the code much more efficient, if
+       actually used.
+
 2001-01-19  Havoc Pennington  <hp@redhat.com>
 
        * gtk/gtktextlayout.c (gtk_text_layout_get_line_display):
@@ -1106,6 +1119,7 @@ Tue Jan  2 16:23:05 2001  Owen Taylor  <otaylor@redhat.com>
        Attach the style to the window so that the style it is not
        leaked when unrealizing the window.
 
+>>>>>>> 1.1626
 2000-12-18  Havoc Pennington  <hp@redhat.com>
 
        * gtk/gtktextview.c (gtk_text_view_delete_from_cursor): do
@@ -1600,6 +1614,7 @@ Mon Dec 11 10:02:26 2000  Owen Taylor  <otaylor@redhat.com>
        * gtk/gtkcolorsel.h (GTK_COLOR_SELECTION_GET_CLASS): fix typo,
        reported by Jeff Franks
 
+>>>>>>> 1.1623
 2000-12-08  Alexander Larsson  <alla@lysator.liu.se>
 
        * gdk/linux-fb/gdkmouse-fb.c (gdk_fb_mouse_ms_open):
index d99373722917b20225e0646fd391ca0ee5aad147..0ac9df4822c60bc2753d32edbe5d94f0611a3833 100644 (file)
@@ -1,3 +1,16 @@
+Sun Jan 21 09:58:00 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreeview.c (gtk_tree_view_scroll_to_point): Make fail
+       when not realized.
+       (gtk_tree_view_scroll_to_cell): Make work when not realized.
+       (gtk_tree_view_realize): add scroll_to support
+       (gtk_tree_view_finalize): add a finalize method.  Populate.
+       (gtk_tree_view_insert_column): ref and sink the column.
+       (gtk_tree_view_append_column): ref and sink the column.
+       (gtk_tree_view_queue_draw_node): New function to handle redrawing
+       individual nodes.  Should make the code much more efficient, if
+       actually used.
+
 2001-01-19  Havoc Pennington  <hp@redhat.com>
 
        * gtk/gtktextlayout.c (gtk_text_layout_get_line_display):
@@ -1106,6 +1119,7 @@ Tue Jan  2 16:23:05 2001  Owen Taylor  <otaylor@redhat.com>
        Attach the style to the window so that the style it is not
        leaked when unrealizing the window.
 
+>>>>>>> 1.1626
 2000-12-18  Havoc Pennington  <hp@redhat.com>
 
        * gtk/gtktextview.c (gtk_text_view_delete_from_cursor): do
@@ -1600,6 +1614,7 @@ Mon Dec 11 10:02:26 2000  Owen Taylor  <otaylor@redhat.com>
        * gtk/gtkcolorsel.h (GTK_COLOR_SELECTION_GET_CLASS): fix typo,
        reported by Jeff Franks
 
+>>>>>>> 1.1623
 2000-12-08  Alexander Larsson  <alla@lysator.liu.se>
 
        * gdk/linux-fb/gdkmouse-fb.c (gdk_fb_mouse_ms_open):
index d99373722917b20225e0646fd391ca0ee5aad147..0ac9df4822c60bc2753d32edbe5d94f0611a3833 100644 (file)
@@ -1,3 +1,16 @@
+Sun Jan 21 09:58:00 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreeview.c (gtk_tree_view_scroll_to_point): Make fail
+       when not realized.
+       (gtk_tree_view_scroll_to_cell): Make work when not realized.
+       (gtk_tree_view_realize): add scroll_to support
+       (gtk_tree_view_finalize): add a finalize method.  Populate.
+       (gtk_tree_view_insert_column): ref and sink the column.
+       (gtk_tree_view_append_column): ref and sink the column.
+       (gtk_tree_view_queue_draw_node): New function to handle redrawing
+       individual nodes.  Should make the code much more efficient, if
+       actually used.
+
 2001-01-19  Havoc Pennington  <hp@redhat.com>
 
        * gtk/gtktextlayout.c (gtk_text_layout_get_line_display):
@@ -1106,6 +1119,7 @@ Tue Jan  2 16:23:05 2001  Owen Taylor  <otaylor@redhat.com>
        Attach the style to the window so that the style it is not
        leaked when unrealizing the window.
 
+>>>>>>> 1.1626
 2000-12-18  Havoc Pennington  <hp@redhat.com>
 
        * gtk/gtktextview.c (gtk_text_view_delete_from_cursor): do
@@ -1600,6 +1614,7 @@ Mon Dec 11 10:02:26 2000  Owen Taylor  <otaylor@redhat.com>
        * gtk/gtkcolorsel.h (GTK_COLOR_SELECTION_GET_CLASS): fix typo,
        reported by Jeff Franks
 
+>>>>>>> 1.1623
 2000-12-08  Alexander Larsson  <alla@lysator.liu.se>
 
        * gdk/linux-fb/gdkmouse-fb.c (gdk_fb_mouse_ms_open):
index d99373722917b20225e0646fd391ca0ee5aad147..0ac9df4822c60bc2753d32edbe5d94f0611a3833 100644 (file)
@@ -1,3 +1,16 @@
+Sun Jan 21 09:58:00 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreeview.c (gtk_tree_view_scroll_to_point): Make fail
+       when not realized.
+       (gtk_tree_view_scroll_to_cell): Make work when not realized.
+       (gtk_tree_view_realize): add scroll_to support
+       (gtk_tree_view_finalize): add a finalize method.  Populate.
+       (gtk_tree_view_insert_column): ref and sink the column.
+       (gtk_tree_view_append_column): ref and sink the column.
+       (gtk_tree_view_queue_draw_node): New function to handle redrawing
+       individual nodes.  Should make the code much more efficient, if
+       actually used.
+
 2001-01-19  Havoc Pennington  <hp@redhat.com>
 
        * gtk/gtktextlayout.c (gtk_text_layout_get_line_display):
@@ -1106,6 +1119,7 @@ Tue Jan  2 16:23:05 2001  Owen Taylor  <otaylor@redhat.com>
        Attach the style to the window so that the style it is not
        leaked when unrealizing the window.
 
+>>>>>>> 1.1626
 2000-12-18  Havoc Pennington  <hp@redhat.com>
 
        * gtk/gtktextview.c (gtk_text_view_delete_from_cursor): do
@@ -1600,6 +1614,7 @@ Mon Dec 11 10:02:26 2000  Owen Taylor  <otaylor@redhat.com>
        * gtk/gtkcolorsel.h (GTK_COLOR_SELECTION_GET_CLASS): fix typo,
        reported by Jeff Franks
 
+>>>>>>> 1.1623
 2000-12-08  Alexander Larsson  <alla@lysator.liu.se>
 
        * gdk/linux-fb/gdkmouse-fb.c (gdk_fb_mouse_ms_open):
index 5debb33f66dbadd2a999e4f462f7ee8d9d82d28a..0a09ee0d603b5749d0e5b0d64ade805734c4833e 100644 (file)
@@ -104,6 +104,12 @@ struct _GtkTreeViewPrivate
   gint pressed_button;
   gint press_start_x;
   gint press_start_y;
+
+  /* Scroll-to functionality when unrealized */
+  GtkTreePath *scroll_to_path;
+  GtkTreeViewColumn *scroll_to_column;
+  gfloat scroll_to_row_align;
+  gfloat scroll_to_col_align;
 };
 
 #ifdef __GNUC__
index 4836b0e28f3917aff7acff08b587461fae56bce3..78d093c56c7724af81a42fb4fdea36ef1c3266ed 100644 (file)
@@ -52,6 +52,9 @@ struct _GtkTreeViewChild
 static void     gtk_tree_view_init                 (GtkTreeView      *tree_view);
 static void     gtk_tree_view_class_init           (GtkTreeViewClass *klass);
 
+/* object signals */
+static void     gtk_tree_view_finalize             (GObject          *object);
+
 /* widget signals */
 static void     gtk_tree_view_setup_model          (GtkTreeView      *tree_view);
 static void     gtk_tree_view_realize              (GtkWidget        *widget);
@@ -145,6 +148,10 @@ static void     gtk_tree_view_deleted              (GtkTreeModel     *model,
                                                    gpointer          data);
 
 /* Internal functions */
+static void     gtk_tree_view_queue_draw_node      (GtkTreeView      *tree_view,
+                                                   GtkRBTree        *tree,
+                                                   GtkRBNode        *node,
+                                                   GdkRectangle     *clip_rect);
 static void     gtk_tree_view_draw_arrow           (GtkTreeView      *tree_view,
                                                     GtkRBTree        *tree,
                                                    GtkRBNode        *node,
@@ -225,15 +232,20 @@ gtk_tree_view_get_type (void)
 static void
 gtk_tree_view_class_init (GtkTreeViewClass *class)
 {
+  GObjectClass *o_class;
   GtkObjectClass *object_class;
   GtkWidgetClass *widget_class;
   GtkContainerClass *container_class;
 
-  object_class = (GtkObjectClass*) class;
-  widget_class = (GtkWidgetClass*) class;
-  container_class = (GtkContainerClass*) class;
+  o_class = (GObjectClass *) class;
+  object_class = (GtkObjectClass *) class;
+  widget_class = (GtkWidgetClass *) class;
+  container_class = (GtkContainerClass *) class;
+
   parent_class = g_type_class_peek_parent (class);
 
+  o_class->finalize = gtk_tree_view_finalize;
+
   widget_class->realize = gtk_tree_view_realize;
   widget_class->unrealize = gtk_tree_view_unrealize;
   widget_class->map = gtk_tree_view_map;
@@ -304,6 +316,29 @@ gtk_tree_view_init (GtkTreeView *tree_view)
   _gtk_tree_view_set_size (tree_view, 0, 0);
 }
 
+
+/* Object methods
+ */
+
+static void
+gtk_tree_view_finalize (GObject *object)
+{
+  GtkTreeView *tree_view = (GtkTreeView *) object;
+
+  if (tree_view->priv->tree)
+    _gtk_rbtree_free (tree_view->priv->tree);
+
+  if (tree_view->priv->scroll_to_path != NULL)
+    gtk_tree_path_free (tree_view->priv->scroll_to_path);
+
+  if (tree_view->priv->drag_dest_row)
+    gtk_tree_path_free (tree_view->priv->drag_dest_row);
+  
+  g_free (tree_view->priv);
+  if (G_OBJECT_CLASS (parent_class)->finalize)
+    (* G_OBJECT_CLASS (parent_class)->finalize) (object);
+}
+
 /* Widget methods
  */
 
@@ -457,6 +492,22 @@ gtk_tree_view_realize (GtkWidget *widget)
     }
   gtk_tree_view_realize_buttons (GTK_TREE_VIEW (widget));
   _gtk_tree_view_set_size (GTK_TREE_VIEW (widget), -1, -1);
+
+  if (tree_view->priv->scroll_to_path != NULL ||
+      tree_view->priv->scroll_to_column != NULL)
+    {
+      gtk_tree_view_scroll_to_cell (tree_view,
+                                   tree_view->priv->scroll_to_path,
+                                   tree_view->priv->scroll_to_column,
+                                   tree_view->priv->scroll_to_row_align,
+                                   tree_view->priv->scroll_to_col_align);
+      if (tree_view->priv->scroll_to_path)
+       {
+         gtk_tree_path_free (tree_view->priv->scroll_to_path);
+         tree_view->priv->scroll_to_path = NULL;
+       }
+      tree_view->priv->scroll_to_column = NULL;
+    }
 }
 
 static void
@@ -491,6 +542,7 @@ gtk_tree_view_unrealize (GtkWidget *widget)
   gdk_window_destroy (tree_view->priv->header_window);
   tree_view->priv->header_window = NULL;
 
+  gdk_cursor_destroy (tree_view->priv->cursor_drag);
   gdk_gc_destroy (tree_view->priv->xor_gc);  
   
   /* GtkWidget::unrealize destroys children and widget->window */
@@ -1261,23 +1313,19 @@ do_prelight (GtkTreeView *tree_view,
 
   GTK_RBNODE_SET_FLAG (node, GTK_RBNODE_IS_PRELIT);
 
-  /* FIXME */
   gtk_widget_queue_draw (GTK_WIDGET (tree_view));
 }
 
 static gboolean
-gtk_tree_view_motion (GtkWidget *widget,
-                     GdkEventMotion  *event)
+gtk_tree_view_motion (GtkWidget      *widget,
+                     GdkEventMotion *event)
 {
   GtkTreeView *tree_view;
   GtkRBTree *tree;
   GtkRBNode *node;
   gint new_y;
   
-  g_return_val_if_fail (widget != NULL, FALSE);
-  g_return_val_if_fail (GTK_IS_TREE_VIEW (widget), FALSE);
-
-  tree_view = GTK_TREE_VIEW (widget);
+  tree_view = (GtkTreeView *) widget;
   
   if (GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_IN_COLUMN_RESIZE))
     {
@@ -1307,9 +1355,8 @@ gtk_tree_view_motion (GtkWidget *widget,
   if (tree_view->priv->tree == NULL)
     return FALSE;
 
-  gtk_tree_view_maybe_begin_dragging_row (tree_view,
-                                          event);
-  
+  gtk_tree_view_maybe_begin_dragging_row (tree_view, event);
+
   do_unprelight (tree_view, event->x, event->y);  
   
   new_y = ((gint)event->y<TREE_VIEW_HEADER_HEIGHT (tree_view))?TREE_VIEW_HEADER_HEIGHT (tree_view):(gint)event->y;
@@ -1980,9 +2027,9 @@ gtk_tree_view_focus (GtkContainer     *container,
           */
          if (tree_view->priv->cursor == NULL)
            tree_view->priv->cursor = gtk_tree_path_new_root ();
-         if (tree_view->priv->cursor)
-           gtk_tree_selection_select_path (tree_view->priv->selection,
-                                           tree_view->priv->cursor);
+
+         gtk_tree_selection_select_path (tree_view->priv->selection,
+                                         tree_view->priv->cursor);
           /* FIXME make this more efficient */
          gtk_widget_queue_draw (GTK_WIDGET (tree_view));
          return TRUE;
@@ -2011,9 +2058,8 @@ gtk_tree_view_focus (GtkContainer     *container,
       if (tree_view->priv->cursor == NULL)
        tree_view->priv->cursor = gtk_tree_path_new_root ();
 
-      if (tree_view->priv->cursor)
-       gtk_tree_selection_select_path (tree_view->priv->selection,
-                                       tree_view->priv->cursor);
+      gtk_tree_selection_select_path (tree_view->priv->selection,
+                                     tree_view->priv->cursor);
       /* FIXME make this more efficient */
       gtk_widget_queue_draw (GTK_WIDGET (tree_view));
       return TRUE;
@@ -2028,9 +2074,8 @@ gtk_tree_view_focus (GtkContainer     *container,
        */
       tree_view->priv->cursor = gtk_tree_path_new_root ();
 
-      if (tree_view->priv->cursor)
-       gtk_tree_selection_select_path (tree_view->priv->selection,
-                                       tree_view->priv->cursor);
+      gtk_tree_selection_select_path (tree_view->priv->selection,
+                                     tree_view->priv->cursor);
       gtk_adjustment_set_value (GTK_ADJUSTMENT (tree_view->priv->vadjustment),
                                0.0);
       /* FIXME make this more efficient */
@@ -3021,6 +3066,36 @@ gtk_tree_view_get_arrow_range (GtkTreeView *tree_view,
     }
 }
 
+static void
+gtk_tree_view_queue_draw_node (GtkTreeView  *tree_view,
+                              GtkRBTree    *tree,
+                              GtkRBNode    *node,
+                              GdkRectangle *clip_rect)
+{
+  GdkRectangle rect;
+
+  rect.x = 0;
+  rect.width = tree_view->priv->width;
+  rect.y = _gtk_rbtree_node_find_offset (tree, node) +
+    TREE_VIEW_VERTICAL_SEPARATOR/2 +
+    TREE_VIEW_HEADER_HEIGHT (tree_view);
+  rect.height = GTK_RBNODE_GET_HEIGHT (node) + TREE_VIEW_VERTICAL_SEPARATOR;
+  if (clip_rect)
+    {
+      GdkRectangle new_rect;
+       gdk_rectangle_intersect (clip_rect, &rect, &new_rect);
+       gtk_widget_queue_draw_area (GTK_WIDGET (tree_view),
+                                  new_rect.x, new_rect.y,
+                                  new_rect.width, new_rect.height);
+    }
+  else
+    {
+       gtk_widget_queue_draw_area (GTK_WIDGET (tree_view),
+                                  rect.x, rect.y,
+                                  rect.width, rect.height);
+    }
+}
+
 /* x and y are the mouse position
  */
 static void
@@ -3680,8 +3755,8 @@ gtk_tree_view_append_column (GtkTreeView       *tree_view,
   g_return_val_if_fail (column->tree_view == NULL, -1);
 
   g_object_ref (G_OBJECT (column));
-  tree_view->priv->columns = g_list_append (tree_view->priv->columns,
-                                            column);
+  gtk_object_sink (GTK_OBJECT (column));
+  tree_view->priv->columns = g_list_append (tree_view->priv->columns, column);
   column->tree_view = GTK_WIDGET (tree_view);
 
   tree_view->priv->n_columns++;
@@ -3745,6 +3820,7 @@ gtk_tree_view_insert_column (GtkTreeView       *tree_view,
   g_return_val_if_fail (column->tree_view == NULL, -1);
 
   g_object_ref (G_OBJECT (column));
+  gtk_object_sink (GTK_OBJECT (column));
   tree_view->priv->columns = g_list_insert (tree_view->priv->columns,
                                            column, position);
   column->tree_view = GTK_WIDGET (tree_view);
@@ -3813,7 +3889,9 @@ gtk_tree_view_get_expander_column (GtkTreeView *tree_view)
  * 
  * Scrolls the tree view such that the top-left corner of the visible
  * area is @tree_x, @tree_y, where @tree_x and @tree_y are specified
- * in tree window coordinates.
+ * in tree window coordinates.  The @tree_view must be realized before
+ * this function is called.  If it isn't, you probably want ot be
+ * using gtk_tree_view_scroll_to_cell.
  **/
 void
 gtk_tree_view_scroll_to_point (GtkTreeView *tree_view,
@@ -3824,7 +3902,8 @@ gtk_tree_view_scroll_to_point (GtkTreeView *tree_view,
   GtkAdjustment *vadj;
 
   g_return_if_fail (GTK_IS_TREE_VIEW (tree_view));
-  
+  g_return_if_fail (GTK_WIDGET_REALIZED (tree_view));
+
   hadj = tree_view->priv->hadjustment;
   vadj = tree_view->priv->vadjustment;
 
@@ -3869,10 +3948,23 @@ gtk_tree_view_scroll_to_cell (GtkTreeView       *tree_view,
   g_return_if_fail (row_align <= 1.0);
   g_return_if_fail (col_align >= 0.0);
   g_return_if_fail (col_align <= 1.0);
-  
+  g_return_if_fail (path != NULL || column != NULL);
+
   row_align = CLAMP (row_align, 0.0, 1.0);
   col_align = CLAMP (col_align, 0.0, 1.0);
 
+  if (! GTK_WIDGET_REALIZED (tree_view))
+    {
+      if (path)
+       tree_view->priv->scroll_to_path = gtk_tree_path_copy (path);
+      if (column)
+       tree_view->priv->scroll_to_column = column;
+      tree_view->priv->scroll_to_row_align = row_align;
+      tree_view->priv->scroll_to_col_align = col_align;
+
+      return;
+    }
+
   gtk_tree_view_get_cell_rect (tree_view, path, column, &cell_rect);
   gtk_tree_view_get_visible_rect (tree_view, &vis_rect);
 
@@ -4793,7 +4885,7 @@ gtk_selection_data_set_tree_row (GtkSelectionData *selection_data,
                                  GtkTreePath      *path)
 {
 
-
+  return FALSE;
 }
 
 gboolean
@@ -4801,8 +4893,7 @@ gtk_selection_data_get_tree_row (GtkSelectionData *selection_data,
                                  GtkTreeView     **tree_view,
                                  GtkTreePath     **path)
 {
-
-
+  return FALSE;
 }