diff --git a/ChangeLog b/ChangeLog index d993737229..0ac9df4822 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +Sun Jan 21 09:58:00 2001 Jonathan Blandford + + * 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 * gtk/gtktextlayout.c (gtk_text_layout_get_line_display): @@ -1106,6 +1119,7 @@ Tue Jan 2 16:23:05 2001 Owen Taylor 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 * gtk/gtktextview.c (gtk_text_view_delete_from_cursor): do @@ -1600,6 +1614,7 @@ Mon Dec 11 10:02:26 2000 Owen Taylor * gtk/gtkcolorsel.h (GTK_COLOR_SELECTION_GET_CLASS): fix typo, reported by Jeff Franks +>>>>>>> 1.1623 2000-12-08 Alexander Larsson * gdk/linux-fb/gdkmouse-fb.c (gdk_fb_mouse_ms_open): diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index d993737229..0ac9df4822 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,16 @@ +Sun Jan 21 09:58:00 2001 Jonathan Blandford + + * 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 * gtk/gtktextlayout.c (gtk_text_layout_get_line_display): @@ -1106,6 +1119,7 @@ Tue Jan 2 16:23:05 2001 Owen Taylor 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 * gtk/gtktextview.c (gtk_text_view_delete_from_cursor): do @@ -1600,6 +1614,7 @@ Mon Dec 11 10:02:26 2000 Owen Taylor * gtk/gtkcolorsel.h (GTK_COLOR_SELECTION_GET_CLASS): fix typo, reported by Jeff Franks +>>>>>>> 1.1623 2000-12-08 Alexander Larsson * gdk/linux-fb/gdkmouse-fb.c (gdk_fb_mouse_ms_open): diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index d993737229..0ac9df4822 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,16 @@ +Sun Jan 21 09:58:00 2001 Jonathan Blandford + + * 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 * gtk/gtktextlayout.c (gtk_text_layout_get_line_display): @@ -1106,6 +1119,7 @@ Tue Jan 2 16:23:05 2001 Owen Taylor 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 * gtk/gtktextview.c (gtk_text_view_delete_from_cursor): do @@ -1600,6 +1614,7 @@ Mon Dec 11 10:02:26 2000 Owen Taylor * gtk/gtkcolorsel.h (GTK_COLOR_SELECTION_GET_CLASS): fix typo, reported by Jeff Franks +>>>>>>> 1.1623 2000-12-08 Alexander Larsson * gdk/linux-fb/gdkmouse-fb.c (gdk_fb_mouse_ms_open): diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index d993737229..0ac9df4822 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,16 @@ +Sun Jan 21 09:58:00 2001 Jonathan Blandford + + * 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 * gtk/gtktextlayout.c (gtk_text_layout_get_line_display): @@ -1106,6 +1119,7 @@ Tue Jan 2 16:23:05 2001 Owen Taylor 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 * gtk/gtktextview.c (gtk_text_view_delete_from_cursor): do @@ -1600,6 +1614,7 @@ Mon Dec 11 10:02:26 2000 Owen Taylor * gtk/gtkcolorsel.h (GTK_COLOR_SELECTION_GET_CLASS): fix typo, reported by Jeff Franks +>>>>>>> 1.1623 2000-12-08 Alexander Larsson * gdk/linux-fb/gdkmouse-fb.c (gdk_fb_mouse_ms_open): diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index d993737229..0ac9df4822 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,16 @@ +Sun Jan 21 09:58:00 2001 Jonathan Blandford + + * 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 * gtk/gtktextlayout.c (gtk_text_layout_get_line_display): @@ -1106,6 +1119,7 @@ Tue Jan 2 16:23:05 2001 Owen Taylor 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 * gtk/gtktextview.c (gtk_text_view_delete_from_cursor): do @@ -1600,6 +1614,7 @@ Mon Dec 11 10:02:26 2000 Owen Taylor * gtk/gtkcolorsel.h (GTK_COLOR_SELECTION_GET_CLASS): fix typo, reported by Jeff Franks +>>>>>>> 1.1623 2000-12-08 Alexander Larsson * gdk/linux-fb/gdkmouse-fb.c (gdk_fb_mouse_ms_open): diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index d993737229..0ac9df4822 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,16 @@ +Sun Jan 21 09:58:00 2001 Jonathan Blandford + + * 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 * gtk/gtktextlayout.c (gtk_text_layout_get_line_display): @@ -1106,6 +1119,7 @@ Tue Jan 2 16:23:05 2001 Owen Taylor 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 * gtk/gtktextview.c (gtk_text_view_delete_from_cursor): do @@ -1600,6 +1614,7 @@ Mon Dec 11 10:02:26 2000 Owen Taylor * gtk/gtkcolorsel.h (GTK_COLOR_SELECTION_GET_CLASS): fix typo, reported by Jeff Franks +>>>>>>> 1.1623 2000-12-08 Alexander Larsson * gdk/linux-fb/gdkmouse-fb.c (gdk_fb_mouse_ms_open): diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index d993737229..0ac9df4822 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,16 @@ +Sun Jan 21 09:58:00 2001 Jonathan Blandford + + * 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 * gtk/gtktextlayout.c (gtk_text_layout_get_line_display): @@ -1106,6 +1119,7 @@ Tue Jan 2 16:23:05 2001 Owen Taylor 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 * gtk/gtktextview.c (gtk_text_view_delete_from_cursor): do @@ -1600,6 +1614,7 @@ Mon Dec 11 10:02:26 2000 Owen Taylor * gtk/gtkcolorsel.h (GTK_COLOR_SELECTION_GET_CLASS): fix typo, reported by Jeff Franks +>>>>>>> 1.1623 2000-12-08 Alexander Larsson * gdk/linux-fb/gdkmouse-fb.c (gdk_fb_mouse_ms_open): diff --git a/gtk/gtktreeprivate.h b/gtk/gtktreeprivate.h index 5debb33f66..0a09ee0d60 100644 --- a/gtk/gtktreeprivate.h +++ b/gtk/gtktreeprivate.h @@ -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__ diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c index 4836b0e28f..78d093c56c 100644 --- a/gtk/gtktreeview.c +++ b/gtk/gtktreeview.c @@ -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->yy; @@ -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; }