[gtk+/treeview-refactor] Use structure bitfield instead of GtkTreeViewFlags
- From: Kristian Rietveld <kristian src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/treeview-refactor] Use structure bitfield instead of GtkTreeViewFlags
- Date: Sun, 5 Dec 2010 14:23:20 +0000 (UTC)
commit 131783005e19a9ccaaf81daee291b5cb431685dd
Author: Kristian Rietveld <kris gtk org>
Date: Sun Dec 5 15:12:53 2010 +0100
Use structure bitfield instead of GtkTreeViewFlags
gtk/gtktreeview.c | 139 ++++++++++++++++++++++------------------------------
1 files changed, 59 insertions(+), 80 deletions(-)
---
diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c
index 4088015..0a7bf5d 100644
--- a/gtk/gtktreeview.c
+++ b/gtk/gtktreeview.c
@@ -134,19 +134,6 @@
* </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,
@@ -163,10 +150,6 @@ enum
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.
*/
@@ -309,7 +292,6 @@ struct _GtkTreeViewPrivate
{
GtkTreeModel *model;
- guint flags;
/* tree information */
GtkRBTree *tree;
@@ -527,6 +509,16 @@ struct _GtkTreeViewPrivate
* 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;
};
@@ -1718,9 +1710,9 @@ gtk_tree_view_init (GtkTreeView *tree_view)
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;
@@ -1921,7 +1913,7 @@ gtk_tree_view_get_property (GObject *object,
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);
@@ -2128,7 +2120,7 @@ gtk_tree_view_map_buttons (GtkTreeView *tree_view)
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;
@@ -2959,7 +2951,7 @@ grab_focus_and_unset_draw_keyfocus (GtkTreeView *tree_view)
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
@@ -3038,7 +3030,7 @@ gtk_tree_view_button_press (GtkWidget *widget,
/* 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)
@@ -3337,7 +3329,7 @@ gtk_tree_view_button_press (GtkWidget *widget,
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);
@@ -3426,7 +3418,7 @@ gtk_tree_view_button_release_drag_column (GtkWidget *widget,
/* 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;
}
@@ -3451,7 +3443,7 @@ gtk_tree_view_button_release_column_resize (GtkWidget *widget,
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);
@@ -3464,7 +3456,7 @@ gtk_tree_view_button_release (GtkWidget *widget,
{
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)
@@ -3473,7 +3465,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))
+ 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)
@@ -3483,7 +3475,7 @@ gtk_tree_view_button_release (GtkWidget *widget,
{
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;
@@ -3516,10 +3508,10 @@ gtk_tree_view_grab_broken (GtkWidget *widget,
{
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;
@@ -3625,20 +3617,15 @@ do_prelight (GtkTreeView *tree_view,
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);
}
@@ -3654,10 +3641,10 @@ do_prelight (GtkTreeView *tree_view,
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,
@@ -3686,7 +3673,7 @@ do_prelight (GtkTreeView *tree_view,
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);
}
@@ -3728,7 +3715,7 @@ prelight_or_select (GtkTreeView *tree_view,
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);
@@ -4615,11 +4602,11 @@ gtk_tree_view_motion (GtkWidget *widget,
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 */
@@ -5091,7 +5078,7 @@ gtk_tree_view_bin_draw (GtkWidget *widget,
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;
@@ -5345,7 +5332,7 @@ gtk_tree_view_bin_draw (GtkWidget *widget,
/* 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;
@@ -5748,7 +5735,7 @@ gtk_tree_view_key_press (GtkWidget *widget,
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)
{
@@ -5758,7 +5745,7 @@ gtk_tree_view_key_press (GtkWidget *widget,
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;
@@ -8285,7 +8272,7 @@ gtk_tree_view_header_focus (GtkTreeView *tree_view,
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));
@@ -8622,7 +8609,7 @@ gtk_tree_view_real_move_cursor (GtkTreeView *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))
@@ -8970,10 +8957,10 @@ gtk_tree_view_row_has_child_toggled (GtkTreeModel *model,
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;
@@ -9268,7 +9255,6 @@ gtk_tree_view_build_tree (GtkTreeView *tree_view,
{
GtkRBNode *temp = NULL;
GtkTreePath *path = NULL;
- gboolean is_list = GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_IS_LIST);
do
{
@@ -9284,7 +9270,7 @@ gtk_tree_view_build_tree (GtkTreeView *tree_view,
}
}
- if (is_list)
+ if (tree_view->priv->is_list)
continue;
if (recurse)
@@ -9525,7 +9511,7 @@ gtk_tree_view_is_expander_column (GtkTreeView *tree_view,
{
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)
@@ -9550,8 +9536,7 @@ gtk_tree_view_is_expander_column (GtkTreeView *tree_view,
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;
@@ -9861,7 +9846,7 @@ _gtk_tree_view_column_start_drag (GtkTreeView *tree_view,
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,
@@ -9928,7 +9913,7 @@ _gtk_tree_view_queue_draw_node (GtkTreeView *tree_view,
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;
@@ -10066,7 +10051,7 @@ gtk_tree_view_draw_arrow (GtkTreeView *tree_view,
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;
@@ -10144,7 +10129,7 @@ gtk_tree_view_focus_to_cursor (GtkTreeView *tree_view)
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);
@@ -11426,9 +11411,9 @@ gtk_tree_view_set_model (GtkTreeView *tree_view,
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))
@@ -11607,7 +11592,7 @@ gtk_tree_view_get_headers_visible (GtkTreeView *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_HEADERS_VISIBLE);
+ return tree_view->priv->headers_visible;
}
/**
@@ -11631,13 +11616,10 @@ gtk_tree_view_set_headers_visible (GtkTreeView *tree_view,
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)))
{
@@ -15441,7 +15423,7 @@ _gtk_tree_view_add_editable (GtkTreeView *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)
{
@@ -15918,12 +15900,9 @@ gtk_tree_view_set_show_expanders (GtkTreeView *tree_view,
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));
@@ -15945,7 +15924,7 @@ gtk_tree_view_get_show_expanders (GtkTreeView *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;
}
/**
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]