* </refsect2>
*/
-
-typedef enum
-{
- GTK_TREE_VIEW_IS_LIST = 1 << 0,
- GTK_TREE_VIEW_SHOW_EXPANDERS = 1 << 1,
- GTK_TREE_VIEW_IN_COLUMN_RESIZE = 1 << 2,
- GTK_TREE_VIEW_ARROW_PRELIT = 1 << 3,
- GTK_TREE_VIEW_HEADERS_VISIBLE = 1 << 4,
- GTK_TREE_VIEW_DRAW_KEYFOCUS = 1 << 5,
- GTK_TREE_VIEW_MODEL_SETUP = 1 << 6,
- GTK_TREE_VIEW_IN_COLUMN_DRAG = 1 << 7
-} GtkTreeViewFlags;
-
enum
{
DRAG_COLUMN_WINDOW_STATE_UNSET = 0,
RUBBER_BAND_ACTIVE = 2
};
-#define GTK_TREE_VIEW_SET_FLAG(tree_view, flag) G_STMT_START{ (tree_view->priv->flags|=flag); }G_STMT_END
-#define GTK_TREE_VIEW_UNSET_FLAG(tree_view, flag) G_STMT_START{ (tree_view->priv->flags&=~(flag)); }G_STMT_END
-#define GTK_TREE_VIEW_FLAG_SET(tree_view, flag) ((tree_view->priv->flags&flag)==flag)
-
/* This lovely little value is used to determine how far away from the title bar
* you can move the mouse and still have a column drag work.
*/
{
GtkTreeModel *model;
- guint flags;
/* tree information */
GtkRBTree *tree;
* driving the scrollable adjustment values */
guint hscroll_policy : 1;
guint vscroll_policy : 1;
+
+ /* GtkTreeView flags */
+ guint is_list : 1;
+ guint show_expanders : 1;
+ guint in_column_resize : 1;
+ guint arrow_prelit : 1;
+ guint headers_visible : 1;
+ guint draw_keyfocus : 1;
+ guint model_setup : 1;
+ guint in_column_drag : 1;
};
gtk_widget_set_can_focus (GTK_WIDGET (tree_view), TRUE);
gtk_widget_set_redraw_on_allocate (GTK_WIDGET (tree_view), FALSE);
- tree_view->priv->flags = GTK_TREE_VIEW_SHOW_EXPANDERS
- | GTK_TREE_VIEW_DRAW_KEYFOCUS
- | GTK_TREE_VIEW_HEADERS_VISIBLE;
+ tree_view->priv->show_expanders = TRUE;
+ tree_view->priv->draw_keyfocus = TRUE;
+ tree_view->priv->headers_visible = TRUE;
/* We need some padding */
tree_view->priv->dy = 0;
g_value_set_boolean (value, tree_view->priv->hover_expand);
break;
case PROP_SHOW_EXPANDERS:
- g_value_set_boolean (value, GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_SHOW_EXPANDERS));
+ g_value_set_boolean (value, tree_view->priv->show_expanders);
break;
case PROP_LEVEL_INDENTATION:
g_value_set_int (value, tree_view->priv->level_indentation);
g_return_if_fail (gtk_widget_get_mapped (GTK_WIDGET (tree_view)));
- if (GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_HEADERS_VISIBLE))
+ if (tree_view->priv->headers_visible)
{
GtkTreeViewColumn *column;
GtkWidget *button;
if (gtk_widget_get_can_focus (widget) && !gtk_widget_has_focus (widget))
gtk_widget_grab_focus (widget);
- GTK_TREE_VIEW_UNSET_FLAG (tree_view, GTK_TREE_VIEW_DRAW_KEYFOCUS);
+ tree_view->priv->draw_keyfocus = 0;
}
static inline gboolean
/* are we in an arrow? */
if (tree_view->priv->prelight_node &&
- GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_ARROW_PRELIT) &&
+ tree_view->priv->arrow_prelit &&
gtk_tree_view_draw_expanders (tree_view))
{
if (event->button == 1)
return FALSE;
gtk_grab_add (widget);
- GTK_TREE_VIEW_SET_FLAG (tree_view, GTK_TREE_VIEW_IN_COLUMN_RESIZE);
+ tree_view->priv->in_column_resize = TRUE;
_gtk_tree_view_column_set_resized_width (column, gtk_tree_view_column_get_width (column) -
tree_view->priv->last_extra_space_per_column);
/* Reset our flags */
tree_view->priv->drag_column_window_state = DRAG_COLUMN_WINDOW_STATE_UNSET;
- GTK_TREE_VIEW_UNSET_FLAG (tree_view, GTK_TREE_VIEW_IN_COLUMN_DRAG);
+ tree_view->priv->in_column_drag = FALSE;
return TRUE;
}
0, 0, NULL, NULL,
drag_data);
- GTK_TREE_VIEW_UNSET_FLAG (tree_view, GTK_TREE_VIEW_IN_COLUMN_RESIZE);
+ tree_view->priv->in_column_resize = FALSE;
gtk_grab_remove (widget);
gdk_display_pointer_ungrab (gdk_window_get_display (event->window),
event->time);
{
GtkTreeView *tree_view = GTK_TREE_VIEW (widget);
- if (GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_IN_COLUMN_DRAG))
+ if (tree_view->priv->in_column_drag)
return gtk_tree_view_button_release_drag_column (widget, event);
if (tree_view->priv->rubber_band_status)
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))
+ if (tree_view->priv->in_column_resize)
return gtk_tree_view_button_release_column_resize (widget, event);
if (tree_view->priv->button_pressed_node == NULL)
{
gtk_grab_remove (widget);
if (tree_view->priv->button_pressed_node == tree_view->priv->prelight_node &&
- GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_ARROW_PRELIT))
+ tree_view->priv->arrow_prelit)
{
GtkTreePath *path = NULL;
{
GtkTreeView *tree_view = GTK_TREE_VIEW (widget);
- if (GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_IN_COLUMN_DRAG))
+ if (tree_view->priv->in_column_drag)
gtk_tree_view_button_release_drag_column (widget, (GdkEventButton *)event);
- if (GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_IN_COLUMN_RESIZE))
+ if (tree_view->priv->in_column_resize)
gtk_tree_view_button_release_column_resize (widget, (GdkEventButton *)event);
return TRUE;
if (tree && node && gtk_tree_view_draw_expanders (tree_view))
{
gboolean over_arrow;
- gboolean flag_set;
over_arrow = coords_are_over_arrow (tree_view, tree, node, x, y);
- flag_set = GTK_TREE_VIEW_FLAG_SET (tree_view,
- GTK_TREE_VIEW_ARROW_PRELIT);
- if (over_arrow != flag_set)
+ if (over_arrow != tree_view->priv->arrow_prelit)
{
if (over_arrow)
- GTK_TREE_VIEW_SET_FLAG (tree_view,
- GTK_TREE_VIEW_ARROW_PRELIT);
+ tree_view->priv->arrow_prelit = TRUE;
else
- GTK_TREE_VIEW_UNSET_FLAG (tree_view,
- GTK_TREE_VIEW_ARROW_PRELIT);
+ tree_view->priv->arrow_prelit = FALSE;
gtk_tree_view_queue_draw_arrow (tree_view, tree, node);
}
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)
+ if (tree_view->priv->arrow_prelit
&& gtk_tree_view_draw_expanders (tree_view))
{
- GTK_TREE_VIEW_UNSET_FLAG (tree_view, GTK_TREE_VIEW_ARROW_PRELIT);
+ tree_view->priv->arrow_prelit = FALSE;
gtk_tree_view_queue_draw_arrow (tree_view,
tree_view->priv->prelight_tree,
if (gtk_tree_view_draw_expanders (tree_view)
&& coords_are_over_arrow (tree_view, tree, node, x, y))
{
- GTK_TREE_VIEW_SET_FLAG (tree_view, GTK_TREE_VIEW_ARROW_PRELIT);
+ tree_view->priv->arrow_prelit = TRUE;
gtk_tree_view_queue_draw_arrow (tree_view, tree, node);
}
gtk_tree_selection_select_path (tree_view->priv->selection, path);
if (GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_SELECTED))
{
- GTK_TREE_VIEW_UNSET_FLAG (tree_view, GTK_TREE_VIEW_DRAW_KEYFOCUS);
+ tree_view->priv->draw_keyfocus = FALSE;
gtk_tree_view_real_set_cursor (tree_view, path, FALSE, FALSE);
}
gtk_tree_path_free (path);
tree_view = (GtkTreeView *) widget;
/* Resizing a column */
- if (GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_IN_COLUMN_RESIZE))
+ if (tree_view->priv->in_column_resize)
return gtk_tree_view_motion_resize_column (widget, event);
/* Drag column */
- if (GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_IN_COLUMN_DRAG))
+ if (tree_view->priv->in_column_drag)
return gtk_tree_view_motion_drag_column (widget, event);
/* Sanity check it */
if (node == cursor && has_can_focus_cell
&& ((column == tree_view->priv->focus_column
- && GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_DRAW_KEYFOCUS) &&
+ && tree_view->priv->draw_keyfocus &&
gtk_widget_has_focus (widget))
|| (column == tree_view->priv->edited_column)))
draw_focus = TRUE;
/* draw the big row-spanning focus rectangle, if needed */
if (!has_can_focus_cell && node == cursor &&
- GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_DRAW_KEYFOCUS) &&
+ tree_view->priv->draw_keyfocus &&
gtk_widget_has_focus (widget))
{
gint tmp_y, tmp_height;
return TRUE;
}
- if (GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_IN_COLUMN_DRAG))
+ if (tree_view->priv->in_column_drag)
{
if (event->keyval == GDK_KEY_Escape)
{
return TRUE;
}
- if (GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_HEADERS_VISIBLE))
+ if (tree_view->priv->headers_visible)
{
GList *focus_column;
gboolean rtl;
GList *tmp_list;
gboolean rtl;
- if (! GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_HEADERS_VISIBLE))
+ if (! tree_view->priv->headers_visible)
return FALSE;
focus_child = gtk_container_get_focus_child (GTK_CONTAINER (tree_view));
return FALSE;
gtk_tree_view_stop_editing (tree_view, FALSE);
- GTK_TREE_VIEW_SET_FLAG (tree_view, GTK_TREE_VIEW_DRAW_KEYFOCUS);
+ tree_view->priv->draw_keyfocus = TRUE;
gtk_widget_grab_focus (GTK_WIDGET (tree_view));
if (gtk_get_current_event_state (&state))
else
GTK_RBNODE_UNSET_FLAG (node, GTK_RBNODE_IS_PARENT);
- if (has_child && GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_IS_LIST))
+ if (has_child && tree_view->priv->is_list)
{
- GTK_TREE_VIEW_UNSET_FLAG (tree_view, GTK_TREE_VIEW_IS_LIST);
- if (GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_SHOW_EXPANDERS))
+ tree_view->priv->is_list = FALSE;
+ if (tree_view->priv->show_expanders)
{
GList *list;
{
GtkRBNode *temp = NULL;
GtkTreePath *path = NULL;
- gboolean is_list = GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_IS_LIST);
do
{
}
}
- if (is_list)
+ if (tree_view->priv->is_list)
continue;
if (recurse)
{
GList *list;
- if (GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_IS_LIST))
+ if (tree_view->priv->is_list)
return FALSE;
if (tree_view->priv->expander_column != NULL)
static inline gboolean
gtk_tree_view_draw_expanders (GtkTreeView *tree_view)
{
- if (!GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_IS_LIST)
- && GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_SHOW_EXPANDERS))
+ if (!tree_view->priv->is_list && tree_view->priv->show_expanders)
return TRUE;
/* else */
return FALSE;
while (gtk_events_pending ())
gtk_main_iteration ();
- GTK_TREE_VIEW_SET_FLAG (tree_view, GTK_TREE_VIEW_IN_COLUMN_DRAG);
+ tree_view->priv->in_column_drag = TRUE;
gdk_pointer_grab (tree_view->priv->drag_window,
FALSE,
GDK_POINTER_MOTION_MASK|GDK_BUTTON_RELEASE_MASK,
static inline gint
gtk_tree_view_get_effective_header_height (GtkTreeView *tree_view)
{
- if (GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_HEADERS_VISIBLE))
+ if (tree_view->priv->headers_visible)
return tree_view->priv->header_height;
/* else */
return 0;
else
{
if (node == tree_view->priv->prelight_node &&
- GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_ARROW_PRELIT))
+ tree_view->priv->arrow_prelit)
state = GTK_STATE_PRELIGHT;
else
state = GTK_STATE_NORMAL;
if (cursor_path)
{
- GTK_TREE_VIEW_SET_FLAG (tree_view, GTK_TREE_VIEW_DRAW_KEYFOCUS);
+ tree_view->priv->draw_keyfocus = TRUE;
gtk_tree_view_queue_draw_path (tree_view, cursor_path, NULL);
gtk_tree_path_free (cursor_path);
flags = gtk_tree_model_get_flags (tree_view->priv->model);
if ((flags & GTK_TREE_MODEL_LIST_ONLY) == GTK_TREE_MODEL_LIST_ONLY)
- GTK_TREE_VIEW_SET_FLAG (tree_view, GTK_TREE_VIEW_IS_LIST);
+ tree_view->priv->is_list = TRUE;
else
- GTK_TREE_VIEW_UNSET_FLAG (tree_view, GTK_TREE_VIEW_IS_LIST);
+ tree_view->priv->is_list = FALSE;
path = gtk_tree_path_new_first ();
if (gtk_tree_model_get_iter (tree_view->priv->model, &iter, path))
{
g_return_val_if_fail (GTK_IS_TREE_VIEW (tree_view), FALSE);
- return GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_HEADERS_VISIBLE);
+ return tree_view->priv->headers_visible;
}
/**
headers_visible = !! headers_visible;
- if (GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_HEADERS_VISIBLE) == headers_visible)
+ if (tree_view->priv->headers_visible == headers_visible)
return;
- if (headers_visible)
- GTK_TREE_VIEW_SET_FLAG (tree_view, GTK_TREE_VIEW_HEADERS_VISIBLE);
- else
- GTK_TREE_VIEW_UNSET_FLAG (tree_view, GTK_TREE_VIEW_HEADERS_VISIBLE);
+ tree_view->priv->headers_visible = headers_visible == TRUE;
if (gtk_widget_get_realized (GTK_WIDGET (tree_view)))
{
gtk_widget_get_preferred_size (GTK_WIDGET (cell_editable),
&requisition, NULL);
- GTK_TREE_VIEW_SET_FLAG (tree_view, GTK_TREE_VIEW_DRAW_KEYFOCUS);
+ tree_view->priv->draw_keyfocus = TRUE;
if (requisition.height < cell_area->height)
{
g_return_if_fail (GTK_IS_TREE_VIEW (tree_view));
enabled = enabled != FALSE;
- was_enabled = GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_SHOW_EXPANDERS);
+ was_enabled = tree_view->priv->show_expanders;
- if (enabled)
- GTK_TREE_VIEW_SET_FLAG (tree_view, GTK_TREE_VIEW_SHOW_EXPANDERS);
- else
- GTK_TREE_VIEW_UNSET_FLAG (tree_view, GTK_TREE_VIEW_SHOW_EXPANDERS);
+ tree_view->priv->show_expanders = enabled == TRUE;
if (enabled != was_enabled)
gtk_widget_queue_draw (GTK_WIDGET (tree_view));
{
g_return_val_if_fail (GTK_IS_TREE_VIEW (tree_view), FALSE);
- return GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_SHOW_EXPANDERS);
+ return tree_view->priv->show_expanders;
}
/**