tree_view->priv->arrow_prelit &&
gtk_tree_view_draw_expanders (tree_view))
{
- if (event->button == 1)
+ if (event->button == GDK_BUTTON_PRIMARY)
{
gtk_grab_add (widget);
tree_view->priv->button_pressed_node = tree_view->priv->prelight_node;
_gtk_tree_view_set_focus_column (tree_view, column);
/* decide if we edit */
- if (event->type == GDK_BUTTON_PRESS && event->button == 1 &&
+ if (event->type == GDK_BUTTON_PRESS && event->button == GDK_BUTTON_PRIMARY &&
!(event->state & gtk_accelerator_get_default_mod_mask ()))
{
GtkTreePath *anchor;
}
/* Test if a double click happened on the same row. */
- if (event->button == 1 && event->type == GDK_BUTTON_PRESS)
+ if (event->button == GDK_BUTTON_PRIMARY && event->type == GDK_BUTTON_PRESS)
{
int double_click_time, double_click_distance;
if (tree_view->priv->button_pressed_node == NULL)
return FALSE;
- if (event->button == 1)
+ if (event->button == GDK_BUTTON_PRIMARY)
{
if (tree_view->priv->button_pressed_node == tree_view->priv->prelight_node &&
tree_view->priv->arrow_prelit)
if (w > 0 && h > 0)
{
GtkStyleContext *context;
- GtkStateFlags state;
context = gtk_widget_get_style_context (widget);
- state = gtk_widget_get_state_flags (widget);
-
- gtk_style_context_save (context);
- gtk_style_context_set_state (context, state);
gtk_render_focus (context, cr, 1, 1, w, h);
-
- gtk_style_context_restore (context);
}
}
GList *first_column, *last_column;
gint vertical_separator;
gint horizontal_separator;
- gint focus_line_width;
gboolean allow_rules;
gboolean has_can_focus_cell;
gboolean rtl;
gint grid_line_width;
gboolean draw_vgrid_lines, draw_hgrid_lines;
GtkStyleContext *context;
- GtkStateFlags state;
gboolean parity;
rtl = (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL);
context = gtk_widget_get_style_context (widget);
- state = gtk_widget_get_state_flags (widget);
gtk_widget_style_get (widget,
"horizontal-separator", &horizontal_separator,
"vertical-separator", &vertical_separator,
"allow-rules", &allow_rules,
- "focus-line-width", &focus_line_width,
NULL);
if (tree_view->priv->tree == NULL)
if (tree_view->priv->height < bin_window_height)
{
gtk_style_context_save (context);
- gtk_style_context_set_state (context, state);
gtk_style_context_add_class (context, GTK_STYLE_CLASS_CELL);
gtk_render_background (context, cr,
GtkRBTree *tree = NULL;
GtkRBNode *node = NULL;
+ gtk_style_context_save (context);
+ gtk_style_context_add_class (context, GTK_STYLE_CLASS_DND);
+
switch (tree_view->priv->drag_dest_pos)
{
case GTK_TREE_VIEW_DROP_BEFORE:
if (tree == NULL)
break;
- gtk_render_focus (context, cr,
- 0, gtk_tree_view_get_row_y_offset (tree_view, tree, node)
- - focus_line_width / 2,
- gdk_window_get_width (tree_view->priv->bin_window),
- gtk_tree_view_get_row_height (tree_view, node)
- - focus_line_width + 1);
+ gtk_render_frame (context, cr,
+ 0, gtk_tree_view_get_row_y_offset (tree_view, tree, node),
+ gdk_window_get_width (tree_view->priv->bin_window),
+ gtk_tree_view_get_row_height (tree_view, node));
break;
}
rtl ? 0 : bin_window_width,
highlight_y);
}
+
+ gtk_style_context_restore (context);
}
/* draw the big row-spanning focus rectangle, if needed */
/* If the cursor row got deleted, move the cursor to the next row */
if (tree_view->priv->cursor_node &&
(tree_view->priv->cursor_node == node ||
- (node->children && _gtk_rbtree_contains (node->children, tree_view->priv->cursor_tree))))
+ (node->children && (tree_view->priv->cursor_tree == node->children ||
+ _gtk_rbtree_contains (node->children, tree_view->priv->cursor_tree)))))
{
GtkTreePath *cursor_path;
send_event->button.y = -1;
send_event->button.axes = NULL;
send_event->button.state = 0;
- send_event->button.button = 1;
+ send_event->button.button = GDK_BUTTON_PRIMARY;
send_event->button.x_root = 0;
send_event->button.y_root = 0;
gdk_event_set_device (send_event, device);
return tree_view->priv->tree;
}
+gboolean
+_gtk_tree_view_get_cursor_node (GtkTreeView *tree_view,
+ GtkRBTree **tree,
+ GtkRBNode **node)
+{
+ GtkTreeViewPrivate *priv;
+
+ priv = tree_view->priv;
+
+ if (priv->cursor_node == NULL)
+ return FALSE;
+
+ *tree = priv->cursor_tree;
+ *node = priv->cursor_node;
+
+ return TRUE;
+}
+
GdkWindow *
_gtk_tree_view_get_header_window (GtkTreeView *tree_view)
{
return tree_view->priv->header_window;
}
+GtkTreeViewColumn *
+_gtk_tree_view_get_focus_column (GtkTreeView *tree_view)
+{
+ return tree_view->priv->focus_column;
+}
+
void
_gtk_tree_view_set_focus_column (GtkTreeView *tree_view,
GtkTreeViewColumn *column)
{
+ GtkTreeViewColumn *old_column = tree_view->priv->focus_column;
+
+ if (old_column == column)
+ return;
+
tree_view->priv->focus_column = column;
+
+ _gtk_tree_view_accessible_update_focus_column (tree_view,
+ old_column,
+ column);
}
gint x2;
gint vertical_separator;
gint expander_size;
- GtkCellRendererState flags;
+ GtkCellRendererState flags = 0;
widget = GTK_WIDGET (tree_view);
context = gtk_widget_get_style_context (widget);
area.height = gtk_tree_view_get_cell_area_height (tree_view, node,
vertical_separator);
- if (!gtk_widget_get_sensitive (widget))
- state |= GTK_STATE_FLAG_INSENSITIVE;
- else
- {
- flags = 0;
-
- if (GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_SELECTED))
- flags |= GTK_CELL_RENDERER_SELECTED;
+ if (GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_SELECTED))
+ flags |= GTK_CELL_RENDERER_SELECTED;
- state = gtk_cell_renderer_get_state (NULL, widget, flags);
+ if (node == tree_view->priv->prelight_node &&
+ tree_view->priv->arrow_prelit)
+ flags |= GTK_CELL_RENDERER_PRELIT;
- if (node == tree_view->priv->prelight_node &&
- tree_view->priv->arrow_prelit)
- state |= GTK_STATE_FLAG_PRELIGHT;
- }
+ state = gtk_cell_renderer_get_state (NULL, widget, flags);
if (node->children != NULL)
state |= GTK_STATE_FLAG_ACTIVE;
+ else
+ state &= ~(GTK_STATE_FLAG_ACTIVE);
gtk_style_context_save (context);
if (selected_rows)
{
cursor_path = gtk_tree_path_copy((const GtkTreePath *)(selected_rows->data));
- g_list_foreach (selected_rows, (GFunc)gtk_tree_path_free, NULL);
- g_list_free (selected_rows);
+ g_list_free_full (selected_rows, (GDestroyNotify) gtk_tree_path_free);
}
else
{
{
GtkRBTree *new_tree = NULL;
GtkRBNode *new_node = NULL;
- GtkRBTree *cursor_tree = NULL;
- GtkRBNode *cursor_node = NULL;
GtkTreePath *cursor_path = NULL;
if (!gtk_widget_has_focus (GTK_WIDGET (tree_view)))
tree_view->priv->cursor_node);
_gtk_tree_selection_internal_select_node (tree_view->priv->selection,
- cursor_node,
- cursor_tree,
+ tree_view->priv->cursor_node,
+ tree_view->priv->cursor_tree,
cursor_path,
GTK_TREE_SELECT_MODE_TOGGLE,
FALSE);
gtk_tree_view_build_tree (tree_view, tree_view->priv->tree, &iter, 1, FALSE);
_gtk_tree_view_accessible_add (tree_view, tree_view->priv->tree, NULL);
}
-
- if (search_first_focusable_path (tree_view, &path, TRUE, NULL, NULL))
- {
- gtk_tree_view_real_set_cursor (tree_view, path, CLEAR_AND_SELECT | CURSOR_INVALID);
- gtk_tree_path_free (path);
- }
- else
- gtk_tree_view_real_set_cursor (tree_view, NULL, CURSOR_INVALID);
+ gtk_tree_path_free (path);
/* FIXME: do I need to do this? gtk_tree_view_create_buttons (tree_view); */
install_presize_handler (tree_view);
}
- else
- gtk_tree_view_real_set_cursor (tree_view, NULL, CURSOR_INVALID);
+
+ gtk_tree_view_real_set_cursor (tree_view, NULL, CURSOR_INVALID);
g_object_notify (G_OBJECT (tree_view), "model");
cursor_changed = (node->children == tree_view->priv->cursor_tree)
|| _gtk_rbtree_contains (node->children, tree_view->priv->cursor_tree);
}
+ else
+ cursor_changed = FALSE;
if (gtk_tree_row_reference_valid (tree_view->priv->anchor))
{
{
if (!(flags & CURSOR_INVALID) && tree_view->priv->cursor_node)
{
+ _gtk_tree_view_accessible_remove_state (tree_view,
+ tree_view->priv->cursor_tree,
+ tree_view->priv->cursor_node,
+ GTK_CELL_RENDERER_FOCUSED);
_gtk_tree_view_queue_draw_node (tree_view,
tree_view->priv->cursor_tree,
tree_view->priv->cursor_node,
tree_view->priv->cursor_node,
NULL);
}
+
+ _gtk_tree_view_accessible_add_state (tree_view,
+ tree_view->priv->cursor_tree,
+ tree_view->priv->cursor_node,
+ GTK_CELL_RENDERER_FOCUSED);
}
g_signal_emit (tree_view, tree_view_signals[CURSOR_CHANGED], 0);
GtkRBTree *tree;
GtkRBNode *node;
GtkStyleContext *context;
- GtkStateFlags state;
gint cell_offset;
GList *list;
GdkRectangle background_area;
gtk_style_context_save (context);
- state = gtk_widget_get_state_flags (widget);
- gtk_style_context_set_state (context, state);
-
gtk_style_context_add_class (context, GTK_STYLE_CLASS_VIEW);
gtk_style_context_add_region (context, GTK_STYLE_REGION_COLUMN, 0);