diff options
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/gtktreeview.c | 690 |
1 files changed, 356 insertions, 334 deletions
diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c index 70b58bd48..e6d119f8e 100644 --- a/gtk/gtktreeview.c +++ b/gtk/gtktreeview.c @@ -77,16 +77,17 @@ static void gtk_tree_view_class_init (GtkTreeViewClass *klass); static void gtk_tree_view_set_property (GObject *object, guint prop_id, const GValue *value, - GParamSpec *pspec, - const gchar *trailer); + GParamSpec *pspec); static void gtk_tree_view_get_property (GObject *object, guint prop_id, GValue *value, - GParamSpec *pspec, - const gchar *trailer); -/* object signals */ + GParamSpec *pspec); +/* o signals */ static void gtk_tree_view_finalize (GObject *object); +/* object signals */ +static void gtk_tree_view_destroy (GtkObject *object); + /* widget signals */ static void gtk_tree_view_setup_model (GtkTreeView *tree_view); static void gtk_tree_view_realize (GtkWidget *widget); @@ -287,6 +288,8 @@ gtk_tree_view_class_init (GtkTreeViewClass *class) o_class->set_property = gtk_tree_view_set_property; o_class->get_property = gtk_tree_view_get_property; + object_class->destroy = gtk_tree_view_destroy; + widget_class->realize = gtk_tree_view_realize; widget_class->unrealize = gtk_tree_view_unrealize; widget_class->map = gtk_tree_view_map; @@ -310,7 +313,7 @@ gtk_tree_view_class_init (GtkTreeViewClass *class) widget_class->drag_motion = gtk_tree_view_drag_motion; widget_class->drag_drop = gtk_tree_view_drag_drop; widget_class->drag_data_received = gtk_tree_view_drag_data_received; - + container_class->forall = gtk_tree_view_forall; container_class->remove = gtk_tree_view_remove; container_class->focus = gtk_tree_view_focus; @@ -324,7 +327,7 @@ gtk_tree_view_class_init (GtkTreeViewClass *class) _("The model for the tree view"), GTK_TYPE_TREE_MODEL, G_PARAM_READWRITE)); - + g_object_class_install_property (o_class, PROP_HADJUSTMENT, g_param_spec_object ("hadjustment", @@ -410,7 +413,7 @@ gtk_tree_view_init (GtkTreeView *tree_view) tree_view->priv->pressed_button = -1; tree_view->priv->press_start_x = -1; tree_view->priv->press_start_y = -1; - + gtk_tree_view_set_adjustments (tree_view, NULL, NULL); _gtk_tree_view_update_size (tree_view); } @@ -432,12 +435,33 @@ gtk_tree_view_finalize (GObject *object) if (tree_view->priv->drag_dest_row) gtk_tree_row_reference_free (tree_view->priv->drag_dest_row); - + + if (tree_view->priv->anchor) + gtk_tree_row_reference_free (tree_view->priv->anchor); + + if (tree_view->priv->cursor) + gtk_tree_row_reference_free (tree_view->priv->cursor); + g_free (tree_view->priv); if (G_OBJECT_CLASS (parent_class)->finalize) (* G_OBJECT_CLASS (parent_class)->finalize) (object); } +static void +gtk_tree_view_destroy (GtkObject *object) +{ + GtkTreeView *tree_view = (GtkTreeView *) object; + GList *list; + + gtk_tree_view_unref_tree (tree_view, tree_view->priv->tree); + + for (list = tree_view->priv->columns; list; list = list->next) + g_object_unref (G_OBJECT (list->data)); + + _gtk_tree_selection_set_tree_view (tree_view->priv->selection, NULL); + g_object_unref (tree_view->priv->selection); +} + /* Property handlers */ @@ -445,8 +469,7 @@ static void gtk_tree_view_set_property (GObject *object, guint prop_id, const GValue *value, - GParamSpec *pspec, - const gchar *trailer) + GParamSpec *pspec) { GtkTreeView *tree_view; @@ -484,13 +507,12 @@ static void gtk_tree_view_get_property (GObject *object, guint prop_id, GValue *value, - GParamSpec *pspec, - const gchar *trailer) + GParamSpec *pspec) { GtkTreeView *tree_view; tree_view = GTK_TREE_VIEW (object); - + switch (prop_id) { case PROP_MODEL: @@ -674,10 +696,10 @@ gtk_tree_view_unrealize (GtkWidget *widget) tree_view->priv->header_window = NULL; gdk_cursor_destroy (tree_view->priv->cursor_drag); - gdk_gc_destroy (tree_view->priv->xor_gc); - + gdk_gc_destroy (tree_view->priv->xor_gc); + /* GtkWidget::unrealize destroys children and widget->window */ - + if (GTK_WIDGET_CLASS (parent_class)->unrealize) (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget); } @@ -688,11 +710,11 @@ gtk_tree_view_map_buttons (GtkTreeView *tree_view) GList *list; g_return_if_fail (GTK_WIDGET_MAPPED (tree_view)); - + if (GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_HEADERS_VISIBLE)) { GtkTreeViewColumn *column; - + for (list = tree_view->priv->columns; list; list = list->next) { column = list->data; @@ -745,7 +767,7 @@ gtk_tree_view_map (GtkWidget *widget) gdk_window_show (tree_view->priv->bin_window); gtk_tree_view_map_buttons (tree_view); - + gdk_window_show (widget->window); } @@ -753,7 +775,7 @@ static void gtk_tree_view_size_request_buttons (GtkTreeView *tree_view) { GList *list; - + tree_view->priv->header_height = 1; if (GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_MODEL_SETUP)) @@ -762,11 +784,11 @@ gtk_tree_view_size_request_buttons (GtkTreeView *tree_view) { GtkRequisition requisition; GtkTreeViewColumn *column; - + column = list->data; - + gtk_widget_size_request (column->button, &requisition); - + gtk_tree_view_column_set_width (column, MAX (column->width, requisition.width)); tree_view->priv->header_height = MAX (tree_view->priv->header_height, requisition.height); } @@ -812,7 +834,7 @@ gtk_tree_view_size_allocate_buttons (GtkWidget *widget) GtkTreeViewColumn *column; GtkAllocation allocation; gint width = 0; - + tree_view = GTK_TREE_VIEW (widget); allocation.y = 0; @@ -851,9 +873,9 @@ gtk_tree_view_size_allocate (GtkWidget *widget, widget->allocation = *allocation; tree_view = GTK_TREE_VIEW (widget); - + gtk_tree_view_check_dirty (tree_view); - + tmp_list = tree_view->priv->children; while (tmp_list) @@ -891,7 +913,7 @@ gtk_tree_view_size_allocate (GtkWidget *widget, _gtk_tree_view_update_col_width (tree_view); } - + gtk_tree_view_size_allocate_buttons (widget); tree_view->priv->hadjustment->page_size = allocation->width; @@ -924,7 +946,7 @@ gtk_tree_view_draw_node_focus_rect (GtkWidget *widget, GtkRBTree *tree = NULL; GtkRBNode *node = NULL; gint bin_window_width = 0; - + g_return_if_fail (widget != NULL); g_return_if_fail (GTK_IS_TREE_VIEW (widget)); @@ -937,7 +959,7 @@ gtk_tree_view_draw_node_focus_rect (GtkWidget *widget, gdk_drawable_get_size (tree_view->priv->bin_window, &bin_window_width, NULL); - + /* FIXME need a style function appropriate for this */ gdk_draw_rectangle (tree_view->priv->bin_window, widget->style->fg_gc[GTK_STATE_NORMAL], @@ -966,7 +988,7 @@ gtk_tree_view_create_row_drag_icon (GtkTreeView *tree_view, gint x = 1, y = 1; GdkDrawable *drawable; gint bin_window_width; - + widget = GTK_WIDGET (tree_view); depth = gtk_tree_path_get_depth (path); @@ -978,12 +1000,12 @@ gtk_tree_view_create_row_drag_icon (GtkTreeView *tree_view, if (tree == NULL) return NULL; - + if (!gtk_tree_model_get_iter (tree_view->priv->model, &iter, path)) return NULL; - + cell_offset = x; background_area.y = y; @@ -991,7 +1013,7 @@ gtk_tree_view_create_row_drag_icon (GtkTreeView *tree_view, gdk_drawable_get_size (tree_view->priv->bin_window, &bin_window_width, NULL); - + drawable = gdk_pixmap_new (tree_view->priv->bin_window, bin_window_width + 2, background_area.height + 2, @@ -1010,12 +1032,12 @@ gtk_tree_view_create_row_drag_icon (GtkTreeView *tree_view, 0, 0, bin_window_width + 1, background_area.height + 1); - + for (i = 0, list = tree_view->priv->columns; i < tree_view->priv->n_columns; i++, list = list->next) { GtkTreeViewColumn *column = list->data; GdkRectangle cell_area; - + if (!column->visible) continue; @@ -1031,7 +1053,7 @@ gtk_tree_view_create_row_drag_icon (GtkTreeView *tree_view, cell_area.y += TREE_VIEW_VERTICAL_SEPARATOR / 2; cell_area.height -= TREE_VIEW_VERTICAL_SEPARATOR; - + if (i == tree_view->priv->expander_column && TREE_VIEW_DRAW_EXPANDERS(tree_view)) { @@ -1046,7 +1068,7 @@ gtk_tree_view_create_row_drag_icon (GtkTreeView *tree_view, &cell_area, NULL, 0); - + cell_offset += column->displayed_width; } @@ -1091,7 +1113,7 @@ gtk_tree_view_bin_expose (GtkWidget *widget, if (tree_view->priv->tree == NULL) return TRUE; - + gtk_tree_view_check_dirty (GTK_TREE_VIEW (widget)); /* we want to account for a potential HEADER offset. * That is, if the header exists, we want to offset our event by its @@ -1100,7 +1122,7 @@ gtk_tree_view_bin_expose (GtkWidget *widget, new_y = (event->area.y<TREE_VIEW_HEADER_HEIGHT (tree_view))?TREE_VIEW_HEADER_HEIGHT (tree_view):event->area.y; /* y_offset is the */ - + y_offset = -_gtk_rbtree_find_offset (tree_view->priv->tree, TREE_WINDOW_Y_TO_RBTREE_Y (tree_view, new_y), &tree, @@ -1120,7 +1142,7 @@ gtk_tree_view_bin_expose (GtkWidget *widget, cursor_path = NULL; drag_dest_path = NULL; - + if (tree_view->priv->cursor) cursor_path = gtk_tree_row_reference_get_path (tree_view->priv->cursor); @@ -1158,13 +1180,13 @@ gtk_tree_view_bin_expose (GtkWidget *widget, else */ gboolean parity; - + max_height = BACKGROUND_HEIGHT (node); x_offset = -event->area.x; cell_offset = 0; highlight_x = 0; /* should match x coord of first cell */ - + background_area.y = y_offset + event->area.y; background_area.height = max_height; flags = 0; @@ -1173,15 +1195,15 @@ gtk_tree_view_bin_expose (GtkWidget *widget, flags |= GTK_CELL_RENDERER_PRELIT; parity = _gtk_rbtree_node_find_parity (tree, node); - + if (GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_SELECTED)) flags |= GTK_CELL_RENDERER_SELECTED; - + for (i = 0, list = tree_view->priv->columns; i < tree_view->priv->n_columns; i++, list = list->next) { GtkTreeViewColumn *column = list->data; const gchar *detail = NULL; - + if (!column->visible) continue; @@ -1267,7 +1289,7 @@ gtk_tree_view_bin_expose (GtkWidget *widget, background_area.y, background_area.width, background_area.height); - + if (i == tree_view->priv->expander_column && TREE_VIEW_DRAW_EXPANDERS(tree_view)) { @@ -1328,11 +1350,11 @@ gtk_tree_view_bin_expose (GtkWidget *widget, case GTK_TREE_VIEW_DROP_BEFORE: highlight_y = background_area.y - TREE_VIEW_VERTICAL_SEPARATOR/2; break; - + case GTK_TREE_VIEW_DROP_AFTER: highlight_y = background_area.y + background_area.height + TREE_VIEW_VERTICAL_SEPARATOR/2; break; - + case GTK_TREE_VIEW_DROP_INTO_OR_BEFORE: case GTK_TREE_VIEW_DROP_INTO_OR_AFTER: gtk_tree_view_draw_node_focus_rect (widget, @@ -1350,7 +1372,7 @@ gtk_tree_view_bin_expose (GtkWidget *widget, highlight_y); } } - + y_offset += max_height; if (node->children) { @@ -1361,7 +1383,7 @@ gtk_tree_view_bin_expose (GtkWidget *widget, node = tree->root; g_assert (node != tree->nil); - + while (node->left != tree->nil) node = node->left; has_child = gtk_tree_model_iter_children (tree_view->priv->model, @@ -1412,13 +1434,13 @@ gtk_tree_view_bin_expose (GtkWidget *widget, } } while (y_offset < event->area.height); - + if (cursor_path) gtk_tree_path_free (cursor_path); if (drag_dest_path) gtk_tree_path_free (drag_dest_path); - + return TRUE; } @@ -1452,12 +1474,12 @@ coords_are_over_arrow (GtkTreeView *tree_view, if (!GTK_WIDGET_REALIZED (tree_view)) return FALSE; - + if ((node->flags & GTK_RBNODE_IS_PARENT) == 0) return FALSE; - + arrow.y = BACKGROUND_FIRST_PIXEL (tree_view, tree, node); - + arrow.height = BACKGROUND_HEIGHT (node); gtk_tree_view_get_arrow_xrange (tree_view, &arrow.x, &x2); @@ -1467,7 +1489,7 @@ coords_are_over_arrow (GtkTreeView *tree_view, return (x >= arrow.x && x < (arrow.x + arrow.height) && y >= arrow.y && - y < (arrow.y + arrow.height)); + y < (arrow.y + arrow.height)); } static void @@ -1478,9 +1500,9 @@ do_unprelight (GtkTreeView *tree_view, { if (tree_view->priv->prelight_node == NULL) return; - + GTK_RBNODE_UNSET_FLAG (tree_view->priv->prelight_node, GTK_RBNODE_IS_PRELIT); - + if (GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_ARROW_PRELIT) && !coords_are_over_arrow (tree_view, tree_view->priv->prelight_tree, @@ -1490,15 +1512,15 @@ do_unprelight (GtkTreeView *tree_view, /* We need to unprelight the old arrow. */ { GTK_TREE_VIEW_UNSET_FLAG (tree_view, GTK_TREE_VIEW_ARROW_PRELIT); - + gtk_tree_view_draw_arrow (tree_view, tree_view->priv->prelight_tree, tree_view->priv->prelight_node, x, - y); + y); } - + tree_view->priv->prelight_node = NULL; tree_view->priv->prelight_tree = NULL; } @@ -1536,9 +1558,9 @@ gtk_tree_view_motion (GtkWidget *widget, gint new_y; GtkRBTree *old_prelight_tree; GtkRBNode *old_prelight_node; - + tree_view = (GtkTreeView *) widget; - + if (GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_IN_COLUMN_RESIZE)) { gint x; @@ -1571,9 +1593,9 @@ gtk_tree_view_motion (GtkWidget *widget, old_prelight_tree = tree_view->priv->prelight_tree; old_prelight_node = tree_view->priv->prelight_node; - - do_unprelight (tree_view, event->x, event->y); - + + 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; _gtk_rbtree_find_offset (tree_view->priv->tree, @@ -1606,7 +1628,7 @@ gtk_tree_view_motion (GtkWidget *widget, tree_view->priv->prelight_node, NULL); } - + return TRUE; } @@ -1645,7 +1667,7 @@ gtk_tree_view_enter_notify (GtkWidget *widget, TREE_WINDOW_Y_TO_RBTREE_Y (tree_view, new_y), &tree, &node); - + if (node == NULL) return FALSE; @@ -1656,7 +1678,7 @@ gtk_tree_view_enter_notify (GtkWidget *widget, tree_view->priv->prelight_tree, tree_view->priv->prelight_node, NULL); - + return TRUE; } @@ -1676,7 +1698,7 @@ gtk_tree_view_leave_notify (GtkWidget *widget, tree_view->priv->prelight_tree, tree_view->priv->prelight_node, NULL); - + ensure_unprelighted (tree_view); return TRUE; @@ -1818,8 +1840,8 @@ gtk_tree_view_button_press (GtkWidget *widget, tree_view->priv->pressed_button = event->button; tree_view->priv->press_start_x = event->x; tree_view->priv->press_start_y = event->y; - } - + } + /* Handle the selection */ if (tree_view->priv->selection == NULL) tree_view->priv->selection = @@ -1882,7 +1904,7 @@ gtk_tree_view_button_release (GtkWidget *widget, if (tree_view->priv->pressed_button == event->button) tree_view->priv->pressed_button = -1; - + if (GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_IN_COLUMN_RESIZE)) { gpointer drag_data; @@ -1931,7 +1953,7 @@ gtk_tree_view_button_release (GtkWidget *widget, tree_view->priv->button_pressed_node->children->parent_tree = tree_view->priv->button_pressed_tree; tree_view->priv->button_pressed_node->children->parent_node = tree_view->priv->button_pressed_node; gtk_tree_model_get_iter (tree_view->priv->model, &iter, path); - + if (gtk_tree_model_iter_children (tree_view->priv->model, &child, &iter)) gtk_tree_view_build_tree (tree_view, tree_view->priv->button_pressed_node->children, @@ -1974,7 +1996,7 @@ gtk_tree_view_draw_focus (GtkWidget *widget) { GtkTreeView *tree_view; GtkTreePath *cursor_path; - + g_return_if_fail (widget != NULL); g_return_if_fail (GTK_IS_TREE_VIEW (widget)); @@ -1989,7 +2011,7 @@ gtk_tree_view_draw_focus (GtkWidget *widget) cursor_path = gtk_tree_row_reference_get_path (tree_view->priv->cursor); if (cursor_path == NULL) return; - + gtk_tree_view_draw_node_focus_rect (widget, cursor_path); } @@ -2233,7 +2255,7 @@ gtk_tree_view_focus (GtkContainer *container, GtkRBTree *cursor_tree; GtkRBNode *cursor_node; GtkTreePath *cursor_path; - + g_return_val_if_fail (container != NULL, FALSE); g_return_val_if_fail (GTK_IS_TREE_VIEW (container), FALSE); g_return_val_if_fail (GTK_WIDGET_VISIBLE (container), FALSE); @@ -2276,26 +2298,26 @@ gtk_tree_view_focus (GtkContainer *container, if (tree_view->priv->cursor) cursor_path = gtk_tree_row_reference_get_path (tree_view->priv->cursor); - + if (cursor_path == NULL) { GtkTreePath *tmp_path = gtk_tree_path_new_root (); if (tree_view->priv->cursor) gtk_tree_row_reference_free (tree_view->priv->cursor); - + tree_view->priv->cursor = gtk_tree_row_reference_new_proxy (G_OBJECT (tree_view), tree_view->priv->model, tmp_path); cursor_path = tmp_path; } - + gtk_tree_selection_select_path (tree_view->priv->selection, cursor_path); - gtk_tree_view_queue_draw_path (tree_view, cursor_path, NULL); + gtk_tree_view_queue_draw_path (tree_view, cursor_path, NULL); gtk_tree_path_free (cursor_path); - + return TRUE; } } @@ -2322,25 +2344,25 @@ gtk_tree_view_focus (GtkContainer *container, cursor_path = NULL; if (tree_view->priv->cursor) cursor_path = gtk_tree_row_reference_get_path (tree_view->priv->cursor); - + if (cursor_path == NULL) { GtkTreePath *tmp_path = gtk_tree_path_new_root (); - + if (tree_view->priv->cursor) gtk_tree_row_reference_free (tree_view->priv->cursor); - + tree_view->priv->cursor = gtk_tree_row_reference_new_proxy (G_OBJECT (tree_view), tree_view->priv->model, tmp_path); cursor_path = tmp_path; - } + } gtk_tree_selection_select_path (tree_view->priv->selection, cursor_path); gtk_tree_view_queue_draw_path (tree_view, cursor_path, NULL); - gtk_tree_path_free (cursor_path); + gtk_tree_path_free (cursor_path); return TRUE; } @@ -2352,25 +2374,25 @@ gtk_tree_view_focus (GtkContainer *container, /* Case 3. We have focus already, but no cursor. We pick the first one * and run with it. */ - + if (cursor_path == NULL) { GtkTreePath *tmp_path = gtk_tree_path_new_root (); - + if (tree_view->priv->cursor) gtk_tree_row_reference_free (tree_view->priv->cursor); - + tree_view->priv->cursor = gtk_tree_row_reference_new_proxy (G_OBJECT (tree_view), tree_view->priv->model, tmp_path); cursor_path = tmp_path; - + gtk_tree_selection_select_path (tree_view->priv->selection, cursor_path); - + gtk_tree_view_queue_draw_path (tree_view, cursor_path, NULL); - - gtk_tree_path_free (cursor_path); - + + gtk_tree_path_free (cursor_path); + return TRUE; } @@ -2384,7 +2406,7 @@ gtk_tree_view_focus (GtkContainer *container, gtk_widget_grab_focus (GTK_WIDGET (tree_view)); gtk_tree_path_free (cursor_path); - + return TRUE; } if (direction == GTK_DIR_RIGHT) @@ -2396,7 +2418,7 @@ gtk_tree_view_focus (GtkContainer *container, gtk_widget_grab_focus (GTK_WIDGET (tree_view)); gtk_tree_path_free (cursor_path); - + return TRUE; } @@ -2409,7 +2431,7 @@ gtk_tree_view_focus (GtkContainer *container, /* undraw the old row */ gtk_tree_view_queue_draw_path (tree_view, cursor_path, NULL); - + gtk_tree_path_free (cursor_path); cursor_path = NULL; @@ -2418,7 +2440,7 @@ gtk_tree_view_focus (GtkContainer *container, gtk_tree_row_reference_free (tree_view->priv->cursor); tree_view->priv->cursor = NULL; } - + switch (direction) { case GTK_DIR_TAB_BACKWARD: @@ -2449,7 +2471,7 @@ gtk_tree_view_focus (GtkContainer *container, if (event) gdk_event_free (event); - + cursor_path = _gtk_tree_view_find_path (tree_view, cursor_tree, cursor_node); @@ -2467,10 +2489,10 @@ gtk_tree_view_focus (GtkContainer *container, /* draw the newly-selected row */ gtk_tree_view_queue_draw_path (tree_view, cursor_path, NULL); - + gtk_tree_path_free (cursor_path); } - + gtk_tree_view_clamp_node_visible (tree_view, cursor_tree, cursor_node); gtk_widget_grab_focus (GTK_WIDGET (tree_view)); @@ -2526,7 +2548,7 @@ gtk_tree_view_remove (GtkContainer *container, while (tmp_list) { GtkTreeViewColumn *column; - column = tmp_list->data; + column = tmp_list->data; if (column->button == widget) { gtk_widget_unparent (widget); @@ -2567,8 +2589,8 @@ gtk_tree_view_forall (GtkContainer *container, for (tmp_list = tree_view->priv->columns; tmp_list; tmp_list = tmp_list->next) { - column = tmp_list->data; - + column = tmp_list->data; + if (column->button) (* callback) (column->button, callback_data); } @@ -2609,7 +2631,7 @@ gtk_tree_view_changed (GtkTreeModel *model, if (tree == NULL) goto done; - + dirty_marked = gtk_tree_view_discover_dirty_iter (tree_view, iter, gtk_tree_path_get_depth (path), @@ -2658,7 +2680,7 @@ gtk_tree_view_inserted (GtkTreeModel *model, } else if (iter == NULL) gtk_tree_model_get_iter (model, iter, path); - + /* Update all row-references */ gtk_tree_row_reference_inserted (G_OBJECT (data), path); @@ -2763,7 +2785,7 @@ gtk_tree_view_has_child_toggled (GtkTreeModel *model, if (tree == NULL) goto done; - + has_child = gtk_tree_model_iter_has_child (model, &real_iter); /* Sanity check. */ @@ -2810,7 +2832,7 @@ gtk_tree_view_deleted (GtkTreeModel *model, GtkRBTree *tree; GtkRBNode *node; GList *list; - + g_return_if_fail (path != NULL); if (_gtk_tree_view_find_node (tree_view, path, &tree, &node)) @@ -2831,7 +2853,7 @@ gtk_tree_view_deleted (GtkTreeModel *model, * row was deleted. If it has, then anchor_path == NULL indicates the * the anchor row was deleted. */ - + anchor_path = gtk_tree_row_reference_get_path (tree_view->priv->anchor); if (anchor_path == NULL || @@ -2856,17 +2878,17 @@ gtk_tree_view_deleted (GtkTreeModel *model, ensure_unprelighted (tree_view); g_assert (tree_view->priv->prelight_node == NULL); - + if ((tree->root->count == 1) && (tree_view->priv->tree != tree)) { _gtk_rbtree_remove (tree); } else - { + { _gtk_rbtree_remove_node (tree, node); } - + _gtk_tree_view_update_size (GTK_TREE_VIEW (data)); } @@ -2884,7 +2906,7 @@ gtk_tree_view_insert_iter_height (GtkTreeView *tree_view, gint i; i = 0; - + /* do stuff with node */ for (list = tree_view->priv->columns; list; list = list->next) { @@ -3137,11 +3159,11 @@ gtk_tree_view_check_dirty (GtkTreeView *tree_view) GList *list; GtkTreeViewColumn *column; GtkTreeIter iter; - + if (!GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_MODEL_SETUP) && tree_view->priv->model) gtk_tree_view_setup_model (tree_view); - + for (list = tree_view->priv->columns; list; list = list->next) { column = list->data; @@ -3154,7 +3176,7 @@ gtk_tree_view_check_dirty (GtkTreeView *tree_view) if (column->button) w = MAX (w, column->button->requisition.width); - + gtk_tree_view_column_set_width (column, w); } } @@ -3165,16 +3187,16 @@ gtk_tree_view_check_dirty (GtkTreeView *tree_view) if (tree_view->priv->model == NULL) return; - + path = gtk_tree_path_new_root (); if (gtk_tree_model_get_iter (tree_view->priv->model, &iter, path)) { gtk_tree_view_calc_size (tree_view, tree_view->priv->tree, &iter, 1); _gtk_tree_view_update_size (tree_view); } - + gtk_tree_path_free (path); - + for (list = tree_view->priv->columns; list; list = list->next) { column = list->data; @@ -3196,11 +3218,11 @@ gtk_tree_view_create_buttons (GtkTreeView *tree_view) /* FIXME this has to be merged with update_button_contents() in * gtktreeviewcolumn.c */ - + for (list = tree_view->priv->columns, i = 0; list; list = list->next, i++) { column = list->data; - + if (column->button != NULL) continue; @@ -3212,7 +3234,7 @@ gtk_tree_view_create_buttons (GtkTreeView *tree_view) column->arrow = arrow; column->alignment = alignment; - + if (column->child) label = column->child; else @@ -3225,9 +3247,9 @@ gtk_tree_view_create_buttons (GtkTreeView *tree_view) gtk_box_pack_end (GTK_BOX (hbox), arrow, FALSE, FALSE, 0); else gtk_box_pack_start (GTK_BOX (hbox), arrow, FALSE, FALSE, 0); - + gtk_box_pack_start (GTK_BOX (hbox), alignment, TRUE, TRUE, 0); - + gtk_container_add (GTK_CONTAINER (alignment), label); gtk_container_add (GTK_CONTAINER (column->button), hbox); @@ -3237,12 +3259,12 @@ gtk_tree_view_create_buttons (GtkTreeView *tree_view) } gtk_tree_view_size_request_buttons (tree_view); - + if (GTK_WIDGET_REALIZED (tree_view)) gtk_tree_view_realize_buttons (tree_view); if (GTK_WIDGET_MAPPED (tree_view)) - gtk_tree_view_map_buttons (tree_view); + gtk_tree_view_map_buttons (tree_view); } #endif @@ -3417,7 +3439,7 @@ gtk_tree_view_queue_draw_node (GtkTreeView *tree_view, if (!GTK_WIDGET_REALIZED (tree_view)) return; - + rect.x = 0; rect.width = tree_view->priv->width; @@ -3445,7 +3467,7 @@ gtk_tree_view_queue_draw_path (GtkTreeView *tree_view, { GtkRBTree *tree = NULL; GtkRBNode *node = NULL; - + _gtk_tree_view_find_node (tree_view, path, &tree, &node); if (tree) @@ -3465,14 +3487,14 @@ gtk_tree_view_draw_arrow (GtkTreeView *tree_view, GtkStateType state; GtkWidget *widget; gint x_offset = 0; - + if (! GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_PARENT)) return; widget = GTK_WIDGET (tree_view); gtk_tree_view_get_arrow_xrange (tree_view, &x_offset, NULL); - + area.x = x_offset; area.y = CELL_FIRST_PIXEL (tree_view, tree, node); area.width = tree_view->priv->tab_offset - 2; @@ -3591,7 +3613,7 @@ _gtk_tree_view_update_size (GtkTreeView *tree_view) _gtk_tree_view_update_col_width (tree_view); } - + gtk_widget_queue_resize (GTK_WIDGET (tree_view)); } @@ -3654,9 +3676,9 @@ gtk_tree_view_adjustment_changed (GtkAdjustment *adjustment, /** * gtk_tree_view_new: - * + * * Creates a new #GtkTreeView widget. - * + * * Return value: A newly created #GtkTreeView widget. **/ GtkWidget * @@ -3672,9 +3694,9 @@ gtk_tree_view_new (void) /** * gtk_tree_view_new_with_model: * @model: the model. - * + * * Creates a new #GtkTreeView widget with the model initialized to @model. - * + * * Return value: A newly created #GtkTreeView widget. **/ GtkWidget * @@ -3691,10 +3713,10 @@ gtk_tree_view_new_with_model (GtkTreeModel *model) /** * gtk_tree_view_get_model: * @tree_view: a #GtkTreeView - * + * * Returns the model the the #GtkTreeView is based on. Returns NULL if the * model is unset. - * + * * Return value: A #GtkTreeModel, or NULL if none is currently being used. **/ GtkTreeModel * @@ -3713,7 +3735,7 @@ gtk_tree_view_setup_model (GtkTreeView *tree_view) GtkTreeIter iter; tree_view->priv->tree = _gtk_rbtree_new (); - + g_signal_connectc (tree_view->priv->model, "changed", gtk_tree_view_changed, @@ -3734,7 +3756,7 @@ gtk_tree_view_setup_model (GtkTreeView *tree_view) gtk_tree_view_deleted, tree_view, FALSE); - + if (tree_view->priv->columns == NULL) return; @@ -3744,7 +3766,7 @@ gtk_tree_view_setup_model (GtkTreeView *tree_view) { gtk_tree_view_build_tree (tree_view, tree_view->priv->tree, &iter, 1, FALSE, GTK_WIDGET_REALIZED (tree_view)); } - + gtk_tree_path_free (path); // gtk_tree_view_create_buttons (tree_view); @@ -3756,7 +3778,7 @@ gtk_tree_view_setup_model (GtkTreeView *tree_view) * gtk_tree_view_set_model: * @tree_view: A #GtkTreeNode. * @model: The model. - * + * * Sets the model for a #GtkTreeView. If the @tree_view already has a model * set, it will remove it before setting the new model. If @model is NULL, then * it will unset the old model. @@ -3793,7 +3815,7 @@ gtk_tree_view_set_model (GtkTreeView *tree_view, if (tree_view->priv->drag_dest_row) gtk_tree_row_reference_free (tree_view->priv->drag_dest_row); - + GTK_TREE_VIEW_UNSET_FLAG (tree_view, GTK_TREE_VIEW_MODEL_SETUP); } @@ -3817,9 +3839,9 @@ gtk_tree_view_set_model (GtkTreeView *tree_view, /** * gtk_tree_view_get_selection: * @tree_view: A #GtkTreeView. - * + * * Gets the #GtkTreeSelection associated with @tree_view. - * + * * Return value: A #GtkTreeSelection object. **/ GtkTreeSelection * @@ -3838,9 +3860,9 @@ gtk_tree_view_get_selection (GtkTreeView *tree_view) /** * gtk_tree_view_get_hadjustment: * @tree_view: A #GtkTreeView - * + * * Gets the #GtkAdjustment currently being used for the horizontal aspect. - * + * * Return value: A #GtkAdjustment object, or NULL if none is currently being * used. **/ @@ -3852,7 +3874,7 @@ gtk_tree_view_get_hadjustment (GtkTreeView *tree_view) if (tree_view->priv->hadjustment == NULL) gtk_tree_view_set_hadjustment (tree_view, NULL); - + return tree_view->priv->hadjustment; } @@ -3860,7 +3882,7 @@ gtk_tree_view_get_hadjustment (GtkTreeView *tree_view) * gtk_tree_view_set_hadjustment: * @tree_view: A #GtkTreeView * @adjustment: The #GtkAdjustment to set, or NULL - * + * * Sets the #GtkAdjustment for the current horizontal aspect. **/ void @@ -3880,9 +3902,9 @@ gtk_tree_view_set_hadjustment (GtkTreeView *tree_view, /** * gtk_tree_view_get_vadjustment: * @tree_view: A #GtkTreeView - * + * * Gets the #GtkAdjustment currently being used for the vertical aspect. - * + * * Return value: A #GtkAdjustment object, or NULL if none is currently being * used. **/ @@ -3894,7 +3916,7 @@ gtk_tree_view_get_vadjustment (GtkTreeView *tree_view) if (tree_view->priv->vadjustment == NULL) gtk_tree_view_set_vadjustment (tree_view, NULL); - + return tree_view->priv->vadjustment; } @@ -3902,7 +3924,7 @@ gtk_tree_view_get_vadjustment (GtkTreeView *tree_view) * gtk_tree_view_set_vadjustment: * @tree_view: A #GtkTreeView * @adjustment: The #GtkAdjustment to set, or NULL - * + * * Sets the #GtkAdjustment for the current vertical aspect. **/ void @@ -3924,7 +3946,7 @@ gtk_tree_view_set_vadjustment (GtkTreeView *tree_view, * @tree_view: A #GtkTreeView * @hadj: The horizontal #GtkAdjustment to set, or NULL * @vadj: The vertical #GtkAdjustment to set, or NULL - * + * * Sets the horizonal and or vertical #GtkAdjustment. **/ static void @@ -3992,9 +4014,9 @@ gtk_tree_view_set_adjustments (GtkTreeView *tree_view, /** * gtk_tree_view_get_headers_visible: * @tree_view: A #GtkTreeView. - * + * * Returns TRUE if the headers on the @tree_view are visible. - * + * * Return value: Whether the headers are visible or not. **/ gboolean @@ -4010,7 +4032,7 @@ gtk_tree_view_get_headers_visible (GtkTreeView *tree_view) * gtk_tree_view_set_headers_visible: * @tree_view: A #GtkTreeView. * @headers_visible: TRUE if the headers are visible - * + * * Sets the the visibility state of the headers. **/ void @@ -4025,7 +4047,7 @@ gtk_tree_view_set_headers_visible (GtkTreeView *tree_view, g_return_if_fail (GTK_IS_TREE_VIEW (tree_view)); headers_visible = !! headers_visible; - + if (GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_HEADERS_VISIBLE) == headers_visible) return; @@ -4040,7 +4062,7 @@ gtk_tree_view_set_headers_visible (GtkTreeView *tree_view, if (headers_visible) { gdk_window_move_resize (tree_view->priv->bin_window, x, y, tree_view->priv->width, tree_view->priv->height + TREE_VIEW_HEADER_HEIGHT (tree_view)); - + if (GTK_WIDGET_MAPPED (tree_view)) gtk_tree_view_map_buttons (tree_view); } @@ -4072,7 +4094,7 @@ gtk_tree_view_set_headers_visible (GtkTreeView *tree_view, /** * gtk_tree_view_columns_autosize: * @tree_view: A #GtkTreeView. - * + * * Resizes all columns to their optimal width. **/ void @@ -4102,7 +4124,7 @@ gtk_tree_view_columns_autosize (GtkTreeView *tree_view) * gtk_tree_view_set_headers_clickable: * @tree_view: A #GtkTreeView. * @setting: TRUE if the columns are clickable. - * + * * Allow the column title buttons to be clicked. **/ void @@ -4125,9 +4147,9 @@ gtk_tree_view_set_headers_clickable (GtkTreeView *tree_view, * gtk_tree_view_append_column: * @tree_view: A #GtkTreeView. * @column: The #GtkTreeViewColumn to add. - * + * * Appends @column to the list of columns. - * + * * Return value: The number of columns in @tree_view after appending. **/ gint @@ -4148,9 +4170,9 @@ gtk_tree_view_append_column (GtkTreeView *tree_view, * gtk_tree_view_remove_column: * @tree_view: A #GtkTreeView. * @column: The #GtkTreeViewColumn to remove. - * + * * Removes @column from @tree_view. - * + * * Return value: The number of columns in @tree_view after removing. **/ gint @@ -4189,7 +4211,7 @@ gtk_tree_view_remove_column (GtkTreeView *tree_view, gtk_widget_queue_resize (GTK_WIDGET (tree_view)); } - + return tree_view->priv->n_columns; } @@ -4198,10 +4220,10 @@ gtk_tree_view_remove_column (GtkTreeView *tree_view, * @tree_view: A #GtkTreeView. * @column: The #GtkTreeViewColumn to be inserted. * @position: The position to insert @column in. - * + * * This inserts the @column into the @tree_view at @position. If @position is * -1, then the column is inserted at the end. - * + * * Return value: The number of columns in @tree_view after insertion. **/ gint @@ -4255,11 +4277,11 @@ gtk_tree_view_insert_column (GtkTreeView *tree_view, * @title: The title to set the header to. * @cell: The #GtkCellRenderer. * @Varargs: A NULL terminated list of attributes. - * + * * Creates a new #GtkTreeViewColumn and inserts it into the @tree_view at * @position. If @position is -1, then the newly created column is inserted at * the end. The column is initialized with the attributes given. - * + * * Return value: The number of columns in @tree_view after insertion. **/ gint @@ -4285,7 +4307,7 @@ gtk_tree_view_insert_column_with_attributes (GtkTreeView *tree_view, va_start (args, cell); attribute = va_arg (args, gchar *); - + while (attribute != NULL) { column_id = va_arg (args, gint); @@ -4305,9 +4327,9 @@ gtk_tree_view_insert_column_with_attributes (GtkTreeView *tree_view, * gtk_tree_view_get_column: * @tree_view: A #GtkTreeView. * @n: The position of the column, counting from 0. - * + * * Gets the #GtkTreeViewColumn at the given position in the #tree_view. - * + * * Return value: The #GtkTreeViewColumn, or NULL if the position is outside the * range of columns. **/ @@ -4321,7 +4343,7 @@ gtk_tree_view_get_column (GtkTreeView *tree_view, if (n < 0 || n >= tree_view->priv->n_columns) return NULL; - + if (tree_view->priv->columns == NULL) return NULL; @@ -4355,7 +4377,7 @@ gtk_tree_view_get_expander_column (GtkTreeView *tree_view) * @tree_view: a #GtkTreeView * @tree_x: X coordinate of new top-left pixel of visible area * @tree_y: Y coordinate of new top-left pixel of visible area - * + * * 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. The @tree_view must be realized before @@ -4377,7 +4399,7 @@ gtk_tree_view_scroll_to_point (GtkTreeView *tree_view, vadj = tree_view->priv->vadjustment; gtk_adjustment_set_value (hadj, CLAMP (tree_x, hadj->lower, hadj->upper)); - gtk_adjustment_set_value (vadj, CLAMP (tree_y, vadj->lower, vadj->upper)); + gtk_adjustment_set_value (vadj, CLAMP (tree_y, vadj->lower, vadj->upper)); } /** @@ -4387,7 +4409,7 @@ gtk_tree_view_scroll_to_point (GtkTreeView *tree_view, * @column: The #GtkTreeViewColumn to move horizontally to. * @row_align: The vertical alignment of the row specified by @path. * @col_align: The horizontal alignment of the column specified by @column. - * + * * Moves the alignments of @tree_view to the position specified by * @column and @path. If @column is NULL, then no horizontal * scrolling occurs. Likewise, if @path is NULL no vertical scrolling @@ -4406,11 +4428,11 @@ gtk_tree_view_scroll_to_cell (GtkTreeView *tree_view, GdkRectangle cell_rect; GdkRectangle vis_rect; gint dest_x, dest_y; - + /* FIXME work on unmapped/unrealized trees? maybe implement when * we do incremental reflow for trees */ - + g_return_if_fail (tree_view != NULL); g_return_if_fail (GTK_IS_TREE_VIEW (tree_view)); g_return_if_fail (row_align >= 0.0); @@ -4439,7 +4461,7 @@ gtk_tree_view_scroll_to_cell (GtkTreeView *tree_view, dest_x = vis_rect.x; dest_y = vis_rect.y; - + if (path) { dest_x = cell_rect.x + @@ -4467,7 +4489,7 @@ gtk_tree_view_scroll_to_cell (GtkTreeView *tree_view, * @column: A pointer to a #GtkTreeViewColumn pointer to be filled in, or %NULL * @cell_x: A pointer where the X coordinate relative to the cell can be placed, or %NULL * @cell_y: A pointer where the Y coordinate relative to the cell can be placed, or %NULL - * + * * Finds the path at the point (@x, @y) relative to @window. If * @window is NULL, then the point is found relative to the widget * coordinates. This function is expected to be called after an @@ -4478,7 +4500,7 @@ gtk_tree_view_scroll_to_cell (GtkTreeView *tree_view, * then it will be filled with the column at that point. @cell_x and * @cell_y return the coordinates relative to the cell background * (i.e. the background_area passed to gtk_cell_renderer_render()). - * + * * Return value: TRUE if a row exists at that coordinate. **/ gboolean @@ -4494,7 +4516,7 @@ gtk_tree_view_get_path_at_pos (GtkTreeView *tree_view, GtkRBTree *tree; GtkRBNode *node; gint y_offset; - + g_return_val_if_fail (tree_view != NULL, FALSE); g_return_val_if_fail (tree_view->priv->tree != NULL, FALSE); g_return_val_if_fail (tree_view->priv->bin_window != NULL, FALSE); @@ -4512,7 +4534,7 @@ gtk_tree_view_get_path_at_pos (GtkTreeView *tree_view, if (x < 0 || y < 0) return FALSE; - + if (column || cell_x) { GtkTreeViewColumn *tmp_column; @@ -4520,7 +4542,7 @@ gtk_tree_view_get_path_at_pos (GtkTreeView *tree_view, GList *list; gint remaining_x = x; gboolean found = FALSE; - + for (list = tree_view->priv->columns; list; list = list->next) { tmp_column = list->data; @@ -4532,13 +4554,13 @@ gtk_tree_view_get_path_at_pos (GtkTreeView *tree_view, if (remaining_x <= tmp_column->width) { found = TRUE; - + if (column) *column = tmp_column; if (cell_x) *cell_x = remaining_x; - + break; } remaining_x -= tmp_column->width; @@ -4569,13 +4591,13 @@ gtk_tree_view_get_path_at_pos (GtkTreeView *tree_view, TREE_WINDOW_Y_TO_RBTREE_Y (tree_view, y + tree_view->priv->vadjustment->value), &tree, &node); } - + if (tree == NULL) return FALSE; if (cell_y) *cell_y = y_offset; - + if (path) *path = _gtk_tree_view_find_path (tree_view, tree, node); @@ -4593,7 +4615,7 @@ gtk_tree_view_get_background_xrange (GtkTreeView *tree_view, GtkTreeViewColumn *tmp_column = NULL; gint total_width; GList *list; - + if (x1) *x1 = 0; @@ -4604,23 +4626,23 @@ gtk_tree_view_get_background_xrange (GtkTreeView *tree_view, for (list = tree_view->priv->columns; list; list = list->next) { tmp_column = list->data; - + if (tmp_column == column) break; - + if (tmp_column->visible) total_width += tmp_column->width; } - + if (tmp_column != column) { g_warning (G_STRLOC": passed-in column isn't in the tree"); return; } - + if (x1) *x1 = total_width; - + if (x2) { if (column->visible) @@ -4641,7 +4663,7 @@ gtk_tree_view_get_cell_xrange (GtkTreeView *tree_view, gint total_width; GList *list; gint i; - + if (x1) *x1 = 0; @@ -4653,16 +4675,16 @@ gtk_tree_view_get_cell_xrange (GtkTreeView *tree_view, for (list = tree_view->priv->columns; list; list = list->next) { tmp_column = list->data; - + if (tmp_column == column) break; - + if (tmp_column->visible) total_width += tmp_column->width; ++i; } - + if (tmp_column != column) { g_warning (G_STRLOC": passed-in column isn't in the tree"); @@ -4675,10 +4697,10 @@ gtk_tree_view_get_cell_xrange (GtkTreeView *tree_view, if (i == tree_view->priv->expander_column) total_width += tree_view->priv->tab_offset * _gtk_rbtree_get_depth (tree); - + if (x1) *x1 = total_width; - + if (x2) { if (column->visible) @@ -4698,7 +4720,7 @@ gtk_tree_view_get_arrow_xrange (GtkTreeView *tree_view, GtkTreeViewColumn *tmp_column = NULL; gint total_width; gint i; - + i = 0; total_width = 0; for (list = tree_view->priv->columns; list; list = list->next) @@ -4710,7 +4732,7 @@ gtk_tree_view_get_arrow_xrange (GtkTreeView *tree_view, x_offset = total_width; break; } - + if (tmp_column->visible) total_width += tmp_column->width; @@ -4719,7 +4741,7 @@ gtk_tree_view_get_arrow_xrange (GtkTreeView *tree_view, if (x1) *x1 = x_offset; - + if (tmp_column && tmp_column->visible) { /* +1 because x2 isn't included in the range. */ @@ -4741,7 +4763,7 @@ gtk_tree_view_get_arrow_xrange (GtkTreeView *tree_view, * @path: a #GtkTreePath for the row, or %NULL to get only horizontal coordinates * @column: a #GtkTreeViewColumn for the column, or %NULL to get only vertical coordiantes * @rect: rectangle to fill with cell rect - * + * * Fills the bounding rectangle in tree window coordinates for the * cell at the row specified by @path and the column specified by * @column. If @path is %NULL, the y and height fields of the @@ -4750,7 +4772,7 @@ gtk_tree_view_get_arrow_xrange (GtkTreeView *tree_view, * not cover the entire tree; there are extra pixels in between rows, * for example. The returned rectangle is equivalent to the @cell_area * passed to gtk_cell_renderer_render(). - * + * **/ void gtk_tree_view_get_cell_area (GtkTreeView *tree_view, @@ -4760,7 +4782,7 @@ gtk_tree_view_get_cell_area (GtkTreeView *tree_view, { GtkRBTree *tree = NULL; GtkRBNode *node = NULL; - + g_return_if_fail (GTK_IS_TREE_VIEW (tree_view)); g_return_if_fail (column == NULL || GTK_IS_TREE_VIEW_COLUMN (column)); g_return_if_fail (rect != NULL); @@ -4769,13 +4791,13 @@ gtk_tree_view_get_cell_area (GtkTreeView *tree_view, rect->y = 0; rect->width = 0; rect->height = 0; - + if (path) { /* Get vertical coords */ - + _gtk_tree_view_find_node (tree_view, path, &tree, &node); - + if (tree == NULL) { g_warning (G_STRLOC": no row corresponding to path"); @@ -4793,7 +4815,7 @@ gtk_tree_view_get_cell_area (GtkTreeView *tree_view, if (column) { gint x2 = 0; - + gtk_tree_view_get_cell_xrange (tree_view, tree, column, &rect->x, &x2); rect->width = x2 - rect->x; } @@ -4806,7 +4828,7 @@ gtk_tree_view_get_cell_area (GtkTreeView *tree_view, * @path: a #GtkTreePath for the row, or %NULL to get only horizontal coordinates * @column: a #GtkTreeViewColumn for the column, or %NULL to get only vertical coordiantes * @rect: rectangle to fill with cell background rect - * + * * Fills the bounding rectangle in tree window coordinates for the * cell at the row specified by @path and the column specified by * @column. If @path is %NULL, the y and height fields of the @@ -4818,7 +4840,7 @@ gtk_tree_view_get_cell_area (GtkTreeView *tree_view, * buttons). Contrast with the cell_area, returned by * gtk_tree_view_get_cell_area(), which returns only the cell itself, * excluding surrounding borders and the tree expander area. - * + * **/ void gtk_tree_view_get_background_area (GtkTreeView *tree_view, @@ -4828,7 +4850,7 @@ gtk_tree_view_get_background_area (GtkTreeView *tree_view, { GtkRBTree *tree = NULL; GtkRBNode *node = NULL; - + g_return_if_fail (GTK_IS_TREE_VIEW (tree_view)); g_return_if_fail (column == NULL || GTK_IS_TREE_VIEW_COLUMN (column)); g_return_if_fail (rect != NULL); @@ -4837,13 +4859,13 @@ gtk_tree_view_get_background_area (GtkTreeView *tree_view, rect->y = 0; rect->width = 0; rect->height = 0; - + if (path) { /* Get vertical coords */ - + _gtk_tree_view_find_node (tree_view, path, &tree, &node); - + if (tree == NULL) { g_warning (G_STRLOC": no row corresponding to path"); @@ -4858,7 +4880,7 @@ gtk_tree_view_get_background_area (GtkTreeView *tree_view, if (column) { gint x2 = 0; - + gtk_tree_view_get_background_xrange (tree_view, tree, column, &rect->x, &x2); rect->width = x2 - rect->x; } @@ -4902,7 +4924,7 @@ gtk_tree_view_expand_all_helper (GtkRBTree *tree, /** * gtk_tree_view_expand_all: * @tree_view: A #GtkTreeView. - * + * * Recursively expands all nodes in the @tree_view. **/ void @@ -4944,7 +4966,7 @@ gtk_tree_view_collapse_all_helper (GtkRBTree *tree, /* Ensure we don't have a dangling pointer to a dead node */ ensure_unprelighted (GTK_TREE_VIEW (data)); - + _gtk_rbtree_remove (node->children); gtk_tree_path_free (path); } @@ -4953,7 +4975,7 @@ gtk_tree_view_collapse_all_helper (GtkRBTree *tree, /** * gtk_tree_view_collapse_all: * @tree_view: A #GtkTreeView. - * + * * Recursively collapses all visible, expanded nodes in @tree_view. **/ void @@ -4983,9 +5005,9 @@ gtk_tree_view_collapse_all (GtkTreeView *tree_view) * @tree_view: a #GtkTreeView * @path: path to a row * @open_all: whether to recursively expand, or just expand immediate children - * + * * Opens the row so its children are visible - * + * * Return value: %TRUE if the row existed and had children **/ gboolean @@ -5008,14 +5030,14 @@ gtk_tree_view_expand_row (GtkTreeView *tree_view, &tree, &node)) return FALSE; - + if (node->children) return TRUE; - + gtk_tree_model_get_iter (tree_view->priv->model, &iter, path); if (! gtk_tree_model_iter_has_child (tree_view->priv->model, &iter)) return FALSE; - + node->children = _gtk_rbtree_new (); node->children->parent_tree = tree; node->children->parent_node = node; @@ -5038,9 +5060,9 @@ gtk_tree_view_expand_row (GtkTreeView *tree_view, * gtk_tree_view_collapse_row: * @tree_view: a #GtkTreeView * @path: path to a row in the @tree_view - * + * * Collapses a row (hides its child rows). - * + * * Return value: %TRUE if the row was expanded **/ gboolean @@ -5073,9 +5095,9 @@ gtk_tree_view_collapse_row (GtkTreeView *tree_view, /* Ensure we don't have a dangling pointer to a dead node */ ensure_unprelighted (tree_view); - + g_assert (tree_view->priv->prelight_node == NULL); - + _gtk_rbtree_remove (node->children); if (GTK_WIDGET_MAPPED (tree_view)) @@ -5125,7 +5147,7 @@ gtk_tree_view_get_visible_rect (GtkTreeView *tree_view, * * Converts widget coordinates to coordinates for the * tree window (the full scrollable area of the tree). - * + * **/ void gtk_tree_view_widget_to_tree_coords (GtkTreeView *tree_view, @@ -5135,7 +5157,7 @@ gtk_tree_view_widget_to_tree_coords (GtkTreeView *tree_view, gint *ty) { g_return_if_fail (GTK_IS_TREE_VIEW (tree_view)); - + if (tx) { *tx = wx + tree_view->priv->hadjustment->value; @@ -5157,7 +5179,7 @@ gtk_tree_view_widget_to_tree_coords (GtkTreeView *tree_view, * * Converts tree coordinates (coordinates in full scrollable * area of the tree) to widget coordinates. - * + * **/ void gtk_tree_view_tree_to_widget_coords (GtkTreeView *tree_view, @@ -5183,7 +5205,7 @@ gtk_tree_view_tree_to_widget_coords (GtkTreeView *tree_view, * gtk_tree_view_set_rules_hint * @tree_view: a #GtkTreeView * @setting: %TRUE if the tree requires reading across rows - * + * * This function tells GTK+ that the user interface for your * application requires users to read across tree rows and associate * cells with one another. By default, GTK+ will then render the tree @@ -5196,14 +5218,14 @@ gtk_tree_view_tree_to_widget_coords (GtkTreeView *tree_view, * hint to the theme engine that your tree makes alternating colors * useful from a functional standpoint (since it has lots of columns, * generally). - * + * **/ void gtk_tree_view_set_rules_hint (GtkTreeView *tree_view, gboolean setting) { g_return_if_fail (GTK_IS_TREE_VIEW (tree_view)); - + setting = setting != FALSE; if (tree_view->priv->has_rules != setting) @@ -5218,16 +5240,16 @@ gtk_tree_view_set_rules_hint (GtkTreeView *tree_view, /** * gtk_tree_view_get_rules_hint * @tree_view: a #GtkTreeView - * + * * Gets the setting set by gtk_tree_view_set_rules_hint(). - * + * * Return value: %TRUE if rules are useful for the user of this tree **/ gboolean gtk_tree_view_get_rules_hint (GtkTreeView *tree_view) { g_return_val_if_fail (GTK_IS_TREE_VIEW (tree_view), FALSE); - + return tree_view->priv->has_rules; } @@ -5311,7 +5333,7 @@ struct _TreeViewDragInfo GtkTargetList *dest_target_list; GClosure *location_droppable_closure; - + guint source_set : 1; guint dest_set : 1; }; @@ -5330,7 +5352,7 @@ clear_source_info (TreeViewDragInfo *di) if (di->row_draggable_closure) g_closure_unref (di->row_draggable_closure); - + di->source_target_list = NULL; di->row_draggable_closure = NULL; } @@ -5343,7 +5365,7 @@ clear_dest_info (TreeViewDragInfo *di) if (di->dest_target_list) gtk_target_list_unref (di->dest_target_list); - + di->location_droppable_closure = NULL; di->dest_target_list = NULL; } @@ -5366,7 +5388,7 @@ ensure_info (GtkTreeView *tree_view) if (di == NULL) { di = g_new0 (TreeViewDragInfo, 1); - + g_object_set_data_full (G_OBJECT (tree_view), "gtk-tree-view-drag-info", di, @@ -5393,11 +5415,11 @@ drag_scan_timeout (gpointer data) GtkTreePath *path = NULL; GtkTreeViewColumn *column = NULL; GdkRectangle visible_rect; - + tree_view = GTK_TREE_VIEW (data); gdk_window_get_pointer (tree_view->priv->bin_window, - &x, &y, &state); + &x, &y, &state); gtk_tree_view_get_visible_rect (tree_view, &visible_rect); @@ -5414,18 +5436,18 @@ drag_scan_timeout (gpointer data) &column, NULL, NULL); - + if (path != NULL) { gtk_tree_view_scroll_to_cell (tree_view, path, column, - 0.5, 0.5); - + 0.5, 0.5); + gtk_tree_path_free (path); } } - + return TRUE; } @@ -5459,7 +5481,7 @@ gtk_tree_view_set_rows_drag_source (GtkTreeView *tree_view, TreeViewDragInfo *di; g_return_if_fail (GTK_IS_TREE_VIEW (tree_view)); - + di = ensure_info (tree_view); clear_source_info (di); @@ -5487,7 +5509,7 @@ gtk_tree_view_set_rows_drag_dest (GtkTreeView *tree_view, gpointer user_data) { TreeViewDragInfo *di; - + g_return_if_fail (GTK_IS_TREE_VIEW (tree_view)); gtk_drag_dest_set (GTK_WIDGET (tree_view), @@ -5495,9 +5517,9 @@ gtk_tree_view_set_rows_drag_dest (GtkTreeView *tree_view, NULL, 0, actions); - + di = ensure_info (tree_view); - clear_dest_info (di); + clear_dest_info (di); if (targets) di->dest_target_list = gtk_target_list_new (targets, n_targets); @@ -5509,7 +5531,7 @@ gtk_tree_view_set_rows_drag_dest (GtkTreeView *tree_view, g_closure_ref (di->location_droppable_closure); g_closure_sink (di->location_droppable_closure); } - + di->dest_set = TRUE; } @@ -5517,9 +5539,9 @@ void gtk_tree_view_unset_rows_drag_source (GtkTreeView *tree_view) { TreeViewDragInfo *di; - + g_return_if_fail (GTK_IS_TREE_VIEW (tree_view)); - + di = get_info (tree_view); if (di) @@ -5539,9 +5561,9 @@ void gtk_tree_view_unset_rows_drag_dest (GtkTreeView *tree_view) { TreeViewDragInfo *di; - + g_return_if_fail (GTK_IS_TREE_VIEW (tree_view)); - + di = get_info (tree_view); if (di) @@ -5567,11 +5589,11 @@ gtk_tree_view_set_drag_dest_row (GtkTreeView *tree_view, /* Note; this function is exported to allow a custom DND * implementation, so it can't touch TreeViewDragInfo */ - + g_return_if_fail (GTK_IS_TREE_VIEW (tree_view)); current_dest = NULL; - + if (tree_view->priv->drag_dest_row) current_dest = gtk_tree_row_reference_get_path (tree_view->priv->drag_dest_row); @@ -5585,7 +5607,7 @@ gtk_tree_view_set_drag_dest_row (GtkTreeView *tree_view, gtk_tree_row_reference_free (tree_view->priv->drag_dest_row); tree_view->priv->drag_dest_pos = pos; - + if (path) { tree_view->priv->drag_dest_row = @@ -5602,7 +5624,7 @@ gtk_tree_view_get_drag_dest_row (GtkTreeView *tree_view, GtkTreeViewDropPosition *pos) { g_return_if_fail (GTK_IS_TREE_VIEW (tree_view)); - + if (path) { if (tree_view->priv->drag_dest_row) @@ -5629,11 +5651,11 @@ gtk_tree_view_get_dest_row_at_pos (GtkTreeView *tree_view, GdkRectangle cell; GtkTreeViewColumn *column = NULL; GtkTreePath *tmp_path = NULL; - + /* Note; this function is exported to allow a custom DND * implementation, so it can't touch TreeViewDragInfo */ - + g_return_val_if_fail (tree_view != NULL, FALSE); g_return_val_if_fail (tree_view->priv->tree != NULL, FALSE); g_return_val_if_fail (drag_x >= 0, FALSE); @@ -5647,7 +5669,7 @@ gtk_tree_view_get_dest_row_at_pos (GtkTreeView *tree_view, gtk_tree_view_widget_to_tree_coords (tree_view, drag_x, drag_y, &x, &y); - + /* If in the top quarter of a row, we drop before that row; if * in the bottom quarter, drop after that row; if in the middle, * and the row has children, drop into the row. @@ -5660,27 +5682,27 @@ gtk_tree_view_get_dest_row_at_pos (GtkTreeView *tree_view, &column, NULL, &cell_y)) - return FALSE; + return FALSE; gtk_tree_view_get_background_area (tree_view, tmp_path, column, &cell); offset_into_row = cell_y; - + if (path) *path = tmp_path; else gtk_tree_path_free (tmp_path); tmp_path = NULL; - + quarter = cell.height / 4.0; - + if (pos) { if (offset_into_row < quarter) { - *pos = GTK_TREE_VIEW_DROP_BEFORE; + *pos = GTK_TREE_VIEW_DROP_BEFORE; } else if (offset_into_row < quarter * 2) { @@ -5709,7 +5731,7 @@ gtk_tree_view_maybe_begin_dragging_row (GtkTreeView *tree_view, gint button; gint cell_x, cell_y; GtkTreeModel *model; - + di = get_info (tree_view); if (di == NULL) @@ -5717,7 +5739,7 @@ gtk_tree_view_maybe_begin_dragging_row (GtkTreeView *tree_view, if (tree_view->priv->pressed_button < 0) return FALSE; - + if (!gtk_drag_check_threshold (GTK_WIDGET (tree_view), tree_view->priv->press_start_x, tree_view->priv->press_start_y, @@ -5728,7 +5750,7 @@ gtk_tree_view_maybe_begin_dragging_row (GtkTreeView *tree_view, if (model == NULL) return FALSE; - + button = tree_view->priv->pressed_button; tree_view->priv->pressed_button = -1; @@ -5743,15 +5765,15 @@ gtk_tree_view_maybe_begin_dragging_row (GtkTreeView *tree_view, if (path == NULL) return FALSE; - + /* FIXME if the path doesn't match the row_draggable predicate, * return FALSE and free path - */ + */ /* FIXME Check whether we're a start button, if not return FALSE and * free path */ - + context = gtk_drag_begin (GTK_WIDGET (tree_view), di->source_target_list, di->source_actions, @@ -5776,10 +5798,10 @@ gtk_tree_view_maybe_begin_dragging_row (GtkTreeView *tree_view, gdk_pixmap_unref (row_pix); } - + set_source_row (context, model, path); gtk_tree_path_free (path); - + return TRUE; } @@ -5810,7 +5832,7 @@ gtk_tree_view_drag_data_get (GtkWidget *widget, GtkTreeModel *model; TreeViewDragInfo *di; GtkTreePath *source_row; - + tree_view = GTK_TREE_VIEW (widget); model = gtk_tree_view_get_model (tree_view); @@ -5819,15 +5841,15 @@ gtk_tree_view_drag_data_get (GtkWidget *widget, return; di = get_info (GTK_TREE_VIEW (widget)); - - if (di == NULL) + + if (di == NULL) return; source_row = get_source_row (context); if (source_row == NULL) return; - + /* We can implement the GTK_TREE_MODEL_ROW target generically for * any model; for DragSource models there are some other targets * we also support. @@ -5884,28 +5906,28 @@ gtk_tree_view_drag_data_delete (GtkWidget *widget, GtkTreeModel *model; GtkTreeView *tree_view; GtkTreePath *source_row; - + tree_view = GTK_TREE_VIEW (widget); model = gtk_tree_view_get_model (tree_view); - + if (!check_model_dnd (model, GTK_TYPE_TREE_DRAG_SOURCE, "drag_data_delete")) return; - + di = get_info (tree_view); if (di == NULL) return; source_row = get_source_row (context); - + if (source_row == NULL) return; - + gtk_tree_drag_source_drag_data_delete (GTK_TREE_DRAG_SOURCE (model), source_row); gtk_tree_path_free (source_row); - + set_source_row (context, NULL, NULL); } @@ -5925,14 +5947,14 @@ gtk_tree_view_drag_leave (GtkWidget *widget, guint time) { TreeViewDragInfo *di; - + di = get_info (GTK_TREE_VIEW (widget)); - + /* unset any highlight row */ gtk_tree_view_set_drag_dest_row (GTK_TREE_VIEW (widget), NULL, GTK_TREE_VIEW_DROP_BEFORE); - + remove_scroll_timeout (GTK_TREE_VIEW (widget)); remove_open_timeout (GTK_TREE_VIEW (widget)); } @@ -5947,8 +5969,8 @@ open_row_timeout (gpointer data) gtk_tree_view_get_drag_dest_row (tree_view, &dest_path, &pos); - - if (dest_path && + + if (dest_path && (pos == GTK_TREE_VIEW_DROP_INTO_OR_AFTER || pos == GTK_TREE_VIEW_DROP_INTO_OR_BEFORE)) { @@ -5958,9 +5980,9 @@ open_row_timeout (gpointer data) tree_view->priv->open_dest_timeout = 0; gtk_tree_path_free (dest_path); - + return FALSE; - } + } else { if (dest_path) @@ -5984,14 +6006,14 @@ set_destination_row (GtkTreeView *tree_view, TreeViewDragInfo *di; GtkWidget *widget; GtkTreePath *old_dest_path = NULL; - + *suggested_action = 0; *target = GDK_NONE; - + widget = GTK_WIDGET (tree_view); - + di = get_info (tree_view); - + if (di == NULL) { /* someone unset us as a drag dest, note that if @@ -6004,7 +6026,7 @@ set_destination_row (GtkTreeView *tree_view, remove_scroll_timeout (GTK_TREE_VIEW (widget)); remove_open_timeout (GTK_TREE_VIEW (widget)); - + return FALSE; /* no longer a drop site */ } @@ -6013,7 +6035,7 @@ set_destination_row (GtkTreeView *tree_view, { return FALSE; } - + if (!gtk_tree_view_get_dest_row_at_pos (tree_view, x, y, &path, @@ -6029,7 +6051,7 @@ set_destination_row (GtkTreeView *tree_view, /* don't propagate to parent though */ return TRUE; } - + g_assert (path); /* If we left the current row's "open" zone, unset the timeout for @@ -6038,7 +6060,7 @@ set_destination_row (GtkTreeView *tree_view, gtk_tree_view_get_drag_dest_row (tree_view, &old_dest_path, &old_pos); - + if (old_dest_path && (gtk_tree_path_compare (path, old_dest_path) != 0 || !(pos == GTK_TREE_VIEW_DROP_INTO_OR_AFTER || @@ -6047,15 +6069,15 @@ set_destination_row (GtkTreeView *tree_view, if (old_dest_path) gtk_tree_path_free (old_dest_path); - + if (TRUE /* FIXME if the location droppable predicate */) { GtkWidget *source_widget; - + *suggested_action = context->suggested_action; - + source_widget = gtk_drag_get_source_widget (context); - + if (source_widget == widget) { /* Default to MOVE, unless the user has @@ -6072,7 +6094,7 @@ set_destination_row (GtkTreeView *tree_view, { /* can't drop here */ remove_open_timeout (tree_view); - + gtk_tree_view_set_drag_dest_row (GTK_TREE_VIEW (widget), NULL, GTK_TREE_VIEW_DROP_BEFORE); @@ -6093,14 +6115,14 @@ gtk_tree_view_drag_motion (GtkWidget *widget, GtkTreeView *tree_view; GdkDragAction suggested_action = 0; GdkAtom target; - + tree_view = GTK_TREE_VIEW (widget); - + if (!set_destination_row (tree_view, context, x, y, &suggested_action, &target)) return FALSE; ensure_scroll_timeout (tree_view); - + gtk_tree_view_get_drag_dest_row (tree_view, &path, &pos); if (path == NULL) @@ -6115,7 +6137,7 @@ gtk_tree_view_drag_motion (GtkWidget *widget, pos == GTK_TREE_VIEW_DROP_INTO_OR_BEFORE)) { tree_view->priv->open_dest_timeout = - gtk_timeout_add (500, open_row_timeout, tree_view); + gtk_timeout_add (500, open_row_timeout, tree_view); } if (target == gdk_atom_intern ("GTK_TREE_MODEL_ROW", FALSE)) @@ -6151,7 +6173,7 @@ get_logical_dest_row (GtkTreeView *tree_view) if (path == NULL) return NULL; - + if (pos == GTK_TREE_VIEW_DROP_BEFORE) ; /* do nothing */ else if (pos == GTK_TREE_VIEW_DROP_INTO_OR_BEFORE || @@ -6182,22 +6204,22 @@ gtk_tree_view_drag_drop (GtkWidget *widget, GdkAtom target = GDK_NONE; TreeViewDragInfo *di; GtkTreeModel *model; - + tree_view = GTK_TREE_VIEW (widget); model = gtk_tree_view_get_model (tree_view); - + remove_scroll_timeout (GTK_TREE_VIEW (widget)); remove_open_timeout (GTK_TREE_VIEW (widget)); - - di = get_info (tree_view); - + + di = get_info (tree_view); + if (di == NULL) return FALSE; - + if (!check_model_dnd (model, GTK_TYPE_TREE_DRAG_DEST, "drag_drop")) return FALSE; - + if (!set_destination_row (tree_view, context, x, y, &suggested_action, &target)) return FALSE; @@ -6209,18 +6231,18 @@ gtk_tree_view_drag_drop (GtkWidget *widget, * treat drag data receives as a drop. */ set_status_pending (context, 0); - + set_dest_row (context, model, path); } if (path) gtk_tree_path_free (path); - + /* Unset this thing */ gtk_tree_view_set_drag_dest_row (GTK_TREE_VIEW (widget), NULL, GTK_TREE_VIEW_DROP_BEFORE); - + if (target != GDK_NONE) { gtk_drag_get_data (widget, context, target, time); @@ -6246,14 +6268,14 @@ gtk_tree_view_drag_data_received (GtkWidget *widget, GtkTreeView *tree_view; GtkTreePath *dest_row; GdkDragAction suggested_action; - + tree_view = GTK_TREE_VIEW (widget); model = gtk_tree_view_get_model (tree_view); if (!check_model_dnd (model, GTK_TYPE_TREE_DRAG_DEST, "drag_data_received")) - return; - + return; + di = get_info (tree_view); if (di == NULL) @@ -6277,7 +6299,7 @@ gtk_tree_view_drag_data_received (GtkWidget *widget, { GtkTreeModel *src_model = NULL; GtkTreePath *src_path = NULL; - + if (!gtk_selection_data_get_tree_row (selection_data, &src_model, &src_path)) @@ -6294,7 +6316,7 @@ gtk_tree_view_drag_data_received (GtkWidget *widget, gtk_tree_path_free (src_path); } } - + gdk_drag_status (context, suggested_action, time); if (path) @@ -6305,15 +6327,15 @@ gtk_tree_view_drag_data_received (GtkWidget *widget, gtk_tree_view_set_drag_dest_row (GTK_TREE_VIEW (widget), NULL, GTK_TREE_VIEW_DROP_BEFORE); - + return; } - + dest_row = get_dest_row (context); if (dest_row == NULL) return; - + if (selection_data->length >= 0) { if (gtk_tree_drag_dest_drag_data_received (GTK_TREE_DRAG_DEST (model), @@ -6321,8 +6343,8 @@ gtk_tree_view_drag_data_received (GtkWidget *widget, selection_data)) accepted = TRUE; } - - gtk_drag_finish (context, + + gtk_drag_finish (context, accepted, (context->action == GDK_ACTION_MOVE), time); |