tree view column: Convert to g_object_notify_by_pspec

This avoids pspec lookup overhead in g_object_notify.
This commit is contained in:
Matthias Clasen 2015-09-06 12:35:12 -04:00
parent 3077a7e025
commit c60362ab10

View File

@ -196,7 +196,8 @@ enum
PROP_SORT_INDICATOR, PROP_SORT_INDICATOR,
PROP_SORT_ORDER, PROP_SORT_ORDER,
PROP_SORT_COLUMN_ID, PROP_SORT_COLUMN_ID,
PROP_CELL_AREA PROP_CELL_AREA,
LAST_PROP
}; };
enum enum
@ -206,6 +207,7 @@ enum
}; };
static guint tree_column_signals[LAST_SIGNAL] = { 0 }; static guint tree_column_signals[LAST_SIGNAL] = { 0 };
static GParamSpec *tree_column_props[LAST_PROP] = { NULL, };
G_DEFINE_TYPE_WITH_CODE (GtkTreeViewColumn, gtk_tree_view_column, G_TYPE_INITIALLY_UNOWNED, G_DEFINE_TYPE_WITH_CODE (GtkTreeViewColumn, gtk_tree_view_column, G_TYPE_INITIALLY_UNOWNED,
G_ADD_PRIVATE (GtkTreeViewColumn) G_ADD_PRIVATE (GtkTreeViewColumn)
@ -239,148 +241,132 @@ gtk_tree_view_column_class_init (GtkTreeViewColumnClass *class)
_gtk_marshal_VOID__VOID, _gtk_marshal_VOID__VOID,
G_TYPE_NONE, 0); G_TYPE_NONE, 0);
g_object_class_install_property (object_class, tree_column_props[PROP_VISIBLE] =
PROP_VISIBLE, g_param_spec_boolean ("visible",
g_param_spec_boolean ("visible", P_("Visible"),
P_("Visible"), P_("Whether to display the column"),
P_("Whether to display the column"), TRUE,
TRUE, GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
g_object_class_install_property (object_class,
PROP_RESIZABLE,
g_param_spec_boolean ("resizable",
P_("Resizable"),
P_("Column is user-resizable"),
FALSE,
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
g_object_class_install_property (object_class,
PROP_X_OFFSET,
g_param_spec_int ("x-offset",
P_("X position"),
P_("Current X position of the column"),
-G_MAXINT,
G_MAXINT,
0,
GTK_PARAM_READABLE));
g_object_class_install_property (object_class, tree_column_props[PROP_RESIZABLE] =
PROP_WIDTH, g_param_spec_boolean ("resizable",
g_param_spec_int ("width", P_("Resizable"),
P_("Width"), P_("Column is user-resizable"),
P_("Current width of the column"), FALSE,
0, GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
G_MAXINT,
0,
GTK_PARAM_READABLE));
g_object_class_install_property (object_class,
PROP_SPACING,
g_param_spec_int ("spacing",
P_("Spacing"),
P_("Space which is inserted between cells"),
0,
G_MAXINT,
0,
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
g_object_class_install_property (object_class,
PROP_SIZING,
g_param_spec_enum ("sizing",
P_("Sizing"),
P_("Resize mode of the column"),
GTK_TYPE_TREE_VIEW_COLUMN_SIZING,
GTK_TREE_VIEW_COLUMN_GROW_ONLY,
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
g_object_class_install_property (object_class,
PROP_FIXED_WIDTH,
g_param_spec_int ("fixed-width",
P_("Fixed Width"),
P_("Current fixed width of the column"),
-1, G_MAXINT, -1,
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
g_object_class_install_property (object_class, tree_column_props[PROP_X_OFFSET] =
PROP_MIN_WIDTH, g_param_spec_int ("x-offset",
g_param_spec_int ("min-width", P_("X position"),
P_("Minimum Width"), P_("Current X position of the column"),
P_("Minimum allowed width of the column"), -G_MAXINT, G_MAXINT,
-1, G_MAXINT, -1, 0,
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); GTK_PARAM_READABLE);
g_object_class_install_property (object_class, tree_column_props[PROP_WIDTH] =
PROP_MAX_WIDTH, g_param_spec_int ("width",
g_param_spec_int ("max-width", P_("Width"),
P_("Maximum Width"), P_("Current width of the column"),
P_("Maximum allowed width of the column"), 0, G_MAXINT,
-1, G_MAXINT, -1, 0,
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); GTK_PARAM_READABLE);
g_object_class_install_property (object_class, tree_column_props[PROP_SPACING] =
PROP_TITLE, g_param_spec_int ("spacing",
g_param_spec_string ("title", P_("Spacing"),
P_("Title"), P_("Space which is inserted between cells"),
P_("Title to appear in column header"), 0, G_MAXINT,
"", 0,
GTK_PARAM_READWRITE)); GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
g_object_class_install_property (object_class,
PROP_EXPAND,
g_param_spec_boolean ("expand",
P_("Expand"),
P_("Column gets share of extra width allocated to the widget"),
FALSE,
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
g_object_class_install_property (object_class,
PROP_CLICKABLE,
g_param_spec_boolean ("clickable",
P_("Clickable"),
P_("Whether the header can be clicked"),
FALSE,
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
g_object_class_install_property (object_class, tree_column_props[PROP_SIZING] =
PROP_WIDGET, g_param_spec_enum ("sizing",
g_param_spec_object ("widget", P_("Sizing"),
P_("Widget"), P_("Resize mode of the column"),
P_("Widget to put in column header button instead of column title"), GTK_TYPE_TREE_VIEW_COLUMN_SIZING,
GTK_TYPE_WIDGET, GTK_TREE_VIEW_COLUMN_GROW_ONLY,
GTK_PARAM_READWRITE)); GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
g_object_class_install_property (object_class, tree_column_props[PROP_FIXED_WIDTH] =
PROP_ALIGNMENT, g_param_spec_int ("fixed-width",
g_param_spec_float ("alignment", P_("Fixed Width"),
P_("Alignment"), P_("Current fixed width of the column"),
P_("X Alignment of the column header text or widget"), -1, G_MAXINT,
0.0, 1.0, 0.0, -1,
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
g_object_class_install_property (object_class, tree_column_props[PROP_MIN_WIDTH] =
PROP_REORDERABLE, g_param_spec_int ("min-width",
g_param_spec_boolean ("reorderable", P_("Minimum Width"),
P_("Reorderable"), P_("Minimum allowed width of the column"),
P_("Whether the column can be reordered around the headers"), -1, G_MAXINT,
FALSE, -1,
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
g_object_class_install_property (object_class, tree_column_props[PROP_MAX_WIDTH] =
PROP_SORT_INDICATOR, g_param_spec_int ("max-width",
g_param_spec_boolean ("sort-indicator", P_("Maximum Width"),
P_("Sort indicator"), P_("Maximum allowed width of the column"),
P_("Whether to show a sort indicator"), -1, G_MAXINT,
FALSE, -1,
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
g_object_class_install_property (object_class, tree_column_props[PROP_TITLE] =
PROP_SORT_ORDER, g_param_spec_string ("title",
g_param_spec_enum ("sort-order", P_("Title"),
P_("Sort order"), P_("Title to appear in column header"),
P_("Sort direction the sort indicator should indicate"), "",
GTK_TYPE_SORT_TYPE, GTK_PARAM_READWRITE);
GTK_SORT_ASCENDING,
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); tree_column_props[PROP_EXPAND] =
g_param_spec_boolean ("expand",
P_("Expand"),
P_("Column gets share of extra width allocated to the widget"),
FALSE,
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
tree_column_props[PROP_CLICKABLE] =
g_param_spec_boolean ("clickable",
P_("Clickable"),
P_("Whether the header can be clicked"),
FALSE,
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
tree_column_props[PROP_WIDGET] =
g_param_spec_object ("widget",
P_("Widget"),
P_("Widget to put in column header button instead of column title"),
GTK_TYPE_WIDGET,
GTK_PARAM_READWRITE);
tree_column_props[PROP_ALIGNMENT] =
g_param_spec_float ("alignment",
P_("Alignment"),
P_("X Alignment of the column header text or widget"),
0.0, 1.0, 0.0,
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
tree_column_props[PROP_REORDERABLE] =
g_param_spec_boolean ("reorderable",
P_("Reorderable"),
P_("Whether the column can be reordered around the headers"),
FALSE,
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
tree_column_props[PROP_SORT_INDICATOR] =
g_param_spec_boolean ("sort-indicator",
P_("Sort indicator"),
P_("Whether to show a sort indicator"),
FALSE,
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
tree_column_props[PROP_SORT_ORDER] =
g_param_spec_enum ("sort-order",
P_("Sort order"),
P_("Sort direction the sort indicator should indicate"),
GTK_TYPE_SORT_TYPE,
GTK_SORT_ASCENDING,
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
/** /**
* GtkTreeViewColumn:sort-column-id: * GtkTreeViewColumn:sort-column-id:
@ -390,13 +376,13 @@ gtk_tree_view_column_class_init (GtkTreeViewColumnClass *class)
* *
* Since: 2.18 * Since: 2.18
**/ **/
g_object_class_install_property (object_class, tree_column_props[PROP_SORT_COLUMN_ID] =
PROP_SORT_COLUMN_ID, g_param_spec_int ("sort-column-id",
g_param_spec_int ("sort-column-id", P_("Sort column ID"),
P_("Sort column ID"), P_("Logical sort column ID this column sorts on when selected for sorting"),
P_("Logical sort column ID this column sorts on when selected for sorting"), -1, G_MAXINT,
-1, G_MAXINT, -1, -1,
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
/** /**
* GtkTreeViewColumn:cell-area: * GtkTreeViewColumn:cell-area:
@ -408,13 +394,14 @@ gtk_tree_view_column_class_init (GtkTreeViewColumnClass *class)
* *
* Since: 3.0 * Since: 3.0
*/ */
g_object_class_install_property (object_class, tree_column_props[PROP_CELL_AREA] =
PROP_CELL_AREA, g_param_spec_object ("cell-area",
g_param_spec_object ("cell-area", P_("Cell Area"),
P_("Cell Area"), P_("The GtkCellArea used to layout cells"),
P_("The GtkCellArea used to layout cells"), GTK_TYPE_CELL_AREA,
GTK_TYPE_CELL_AREA, GTK_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY);
GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_properties (object_class, LAST_PROP, tree_column_props);
} }
static void static void
@ -1857,7 +1844,7 @@ gtk_tree_view_column_set_spacing (GtkTreeViewColumn *tree_column,
gtk_cell_area_box_set_spacing (GTK_CELL_AREA_BOX (priv->cell_area), spacing); gtk_cell_area_box_set_spacing (GTK_CELL_AREA_BOX (priv->cell_area), spacing);
if (priv->tree_view) if (priv->tree_view)
_gtk_tree_view_column_cell_set_dirty (tree_column, TRUE); _gtk_tree_view_column_cell_set_dirty (tree_column, TRUE);
g_object_notify (G_OBJECT (tree_column), "spacing"); g_object_notify_by_pspec (G_OBJECT (tree_column), tree_column_props[PROP_SPACING]);
} }
} }
@ -1917,7 +1904,7 @@ gtk_tree_view_column_set_visible (GtkTreeViewColumn *tree_column,
} }
gtk_tree_view_column_update_button (tree_column); gtk_tree_view_column_update_button (tree_column);
g_object_notify (G_OBJECT (tree_column), "visible"); g_object_notify_by_pspec (G_OBJECT (tree_column), tree_column_props[PROP_VISIBLE]);
} }
/** /**
@ -1968,7 +1955,7 @@ gtk_tree_view_column_set_resizable (GtkTreeViewColumn *tree_column,
gtk_tree_view_column_update_button (tree_column); gtk_tree_view_column_update_button (tree_column);
g_object_notify (G_OBJECT (tree_column), "resizable"); g_object_notify_by_pspec (G_OBJECT (tree_column), tree_column_props[PROP_RESIZABLE]);
} }
/** /**
@ -2015,7 +2002,7 @@ gtk_tree_view_column_set_sizing (GtkTreeViewColumn *tree_column,
gtk_tree_view_column_update_button (tree_column); gtk_tree_view_column_update_button (tree_column);
g_object_notify (G_OBJECT (tree_column), "sizing"); g_object_notify_by_pspec (G_OBJECT (tree_column), tree_column_props[PROP_SIZING]);
} }
/** /**
@ -2152,8 +2139,8 @@ _gtk_tree_view_column_allocate (GtkTreeViewColumn *tree_column,
TREE_VIEW_DRAG_WIDTH, allocation.height); TREE_VIEW_DRAG_WIDTH, allocation.height);
} }
g_object_notify (G_OBJECT (tree_column), "x-offset"); g_object_notify_by_pspec (G_OBJECT (tree_column), tree_column_props[PROP_X_OFFSET]);
g_object_notify (G_OBJECT (tree_column), "width"); g_object_notify_by_pspec (G_OBJECT (tree_column), tree_column_props[PROP_WIDTH]);
} }
/** /**
@ -2192,7 +2179,7 @@ gtk_tree_view_column_set_fixed_width (GtkTreeViewColumn *tree_column,
gtk_widget_get_realized (priv->tree_view)) gtk_widget_get_realized (priv->tree_view))
gtk_widget_queue_resize (priv->tree_view); gtk_widget_queue_resize (priv->tree_view);
g_object_notify (G_OBJECT (tree_column), "fixed-width"); g_object_notify_by_pspec (G_OBJECT (tree_column), tree_column_props[PROP_FIXED_WIDTH]);
} }
} }
@ -2248,9 +2235,9 @@ gtk_tree_view_column_set_min_width (GtkTreeViewColumn *tree_column,
if (priv->max_width != -1 && priv->max_width < min_width) if (priv->max_width != -1 && priv->max_width < min_width)
{ {
priv->max_width = min_width; priv->max_width = min_width;
g_object_notify (G_OBJECT (tree_column), "max-width"); g_object_notify_by_pspec (G_OBJECT (tree_column), tree_column_props[PROP_MAX_WIDTH]);
} }
g_object_notify (G_OBJECT (tree_column), "min-width"); g_object_notify_by_pspec (G_OBJECT (tree_column), tree_column_props[PROP_MIN_WIDTH]);
g_object_thaw_notify (G_OBJECT (tree_column)); g_object_thaw_notify (G_OBJECT (tree_column));
if (priv->column_type == GTK_TREE_VIEW_COLUMN_AUTOSIZE && priv->tree_view) if (priv->column_type == GTK_TREE_VIEW_COLUMN_AUTOSIZE && priv->tree_view)
@ -2312,9 +2299,9 @@ gtk_tree_view_column_set_max_width (GtkTreeViewColumn *tree_column,
if (max_width != -1 && max_width < priv->min_width) if (max_width != -1 && max_width < priv->min_width)
{ {
priv->min_width = max_width; priv->min_width = max_width;
g_object_notify (G_OBJECT (tree_column), "min-width"); g_object_notify_by_pspec (G_OBJECT (tree_column), tree_column_props[PROP_MIN_WIDTH]);
} }
g_object_notify (G_OBJECT (tree_column), "max-width"); g_object_notify_by_pspec (G_OBJECT (tree_column), tree_column_props[PROP_MAX_WIDTH]);
g_object_thaw_notify (G_OBJECT (tree_column)); g_object_thaw_notify (G_OBJECT (tree_column));
if (priv->column_type == GTK_TREE_VIEW_COLUMN_AUTOSIZE && priv->tree_view) if (priv->column_type == GTK_TREE_VIEW_COLUMN_AUTOSIZE && priv->tree_view)
@ -2385,7 +2372,7 @@ gtk_tree_view_column_set_title (GtkTreeViewColumn *tree_column,
priv->title = new_title; priv->title = new_title;
gtk_tree_view_column_update_button (tree_column); gtk_tree_view_column_update_button (tree_column);
g_object_notify (G_OBJECT (tree_column), "title"); g_object_notify_by_pspec (G_OBJECT (tree_column), tree_column_props[PROP_TITLE]);
} }
/** /**
@ -2442,7 +2429,7 @@ gtk_tree_view_column_set_expand (GtkTreeViewColumn *tree_column,
gtk_widget_queue_resize (priv->tree_view); gtk_widget_queue_resize (priv->tree_view);
} }
g_object_notify (G_OBJECT (tree_column), "expand"); g_object_notify_by_pspec (G_OBJECT (tree_column), tree_column_props[PROP_EXPAND]);
} }
/** /**
@ -2487,7 +2474,7 @@ gtk_tree_view_column_set_clickable (GtkTreeViewColumn *tree_column,
priv->clickable = clickable; priv->clickable = clickable;
gtk_tree_view_column_update_button (tree_column); gtk_tree_view_column_update_button (tree_column);
g_object_notify (G_OBJECT (tree_column), "clickable"); g_object_notify_by_pspec (G_OBJECT (tree_column), tree_column_props[PROP_CLICKABLE]);
} }
/** /**
@ -2528,12 +2515,12 @@ gtk_tree_view_column_set_widget (GtkTreeViewColumn *tree_column,
if (widget) if (widget)
g_object_ref_sink (widget); g_object_ref_sink (widget);
if (priv->child) if (priv->child)
g_object_unref (priv->child); g_object_unref (priv->child);
priv->child = widget; priv->child = widget;
gtk_tree_view_column_update_button (tree_column); gtk_tree_view_column_update_button (tree_column);
g_object_notify (G_OBJECT (tree_column), "widget"); g_object_notify_by_pspec (G_OBJECT (tree_column), tree_column_props[PROP_WIDGET]);
} }
/** /**
@ -2580,7 +2567,7 @@ gtk_tree_view_column_set_alignment (GtkTreeViewColumn *tree_column,
priv->xalign = xalign; priv->xalign = xalign;
gtk_tree_view_column_update_button (tree_column); gtk_tree_view_column_update_button (tree_column);
g_object_notify (G_OBJECT (tree_column), "alignment"); g_object_notify_by_pspec (G_OBJECT (tree_column), tree_column_props[PROP_ALIGNMENT]);
} }
/** /**
@ -2626,7 +2613,7 @@ gtk_tree_view_column_set_reorderable (GtkTreeViewColumn *tree_column,
priv->reorderable = (reorderable?TRUE:FALSE); priv->reorderable = (reorderable?TRUE:FALSE);
gtk_tree_view_column_update_button (tree_column); gtk_tree_view_column_update_button (tree_column);
g_object_notify (G_OBJECT (tree_column), "reorderable"); g_object_notify_by_pspec (G_OBJECT (tree_column), tree_column_props[PROP_REORDERABLE]);
} }
/** /**
@ -2690,7 +2677,7 @@ gtk_tree_view_column_set_sort_column_id (GtkTreeViewColumn *tree_column,
gtk_tree_view_column_set_sort_order (tree_column, GTK_SORT_ASCENDING); gtk_tree_view_column_set_sort_order (tree_column, GTK_SORT_ASCENDING);
gtk_tree_view_column_set_sort_indicator (tree_column, FALSE); gtk_tree_view_column_set_sort_indicator (tree_column, FALSE);
gtk_tree_view_column_set_clickable (tree_column, FALSE); gtk_tree_view_column_set_clickable (tree_column, FALSE);
g_object_notify (G_OBJECT (tree_column), "sort-column-id"); g_object_notify_by_pspec (G_OBJECT (tree_column), tree_column_props[PROP_SORT_COLUMN_ID]);
return; return;
} }
@ -2703,7 +2690,7 @@ gtk_tree_view_column_set_sort_column_id (GtkTreeViewColumn *tree_column,
NULL); NULL);
gtk_tree_view_column_setup_sort_column_id_callback (tree_column); gtk_tree_view_column_setup_sort_column_id_callback (tree_column);
g_object_notify (G_OBJECT (tree_column), "sort-column-id"); g_object_notify_by_pspec (G_OBJECT (tree_column), tree_column_props[PROP_SORT_COLUMN_ID]);
} }
/** /**
@ -2749,7 +2736,7 @@ gtk_tree_view_column_set_sort_indicator (GtkTreeViewColumn *tree_column,
tree_column->priv->show_sort_indicator = setting; tree_column->priv->show_sort_indicator = setting;
gtk_tree_view_column_update_button (tree_column); gtk_tree_view_column_update_button (tree_column);
g_object_notify (G_OBJECT (tree_column), "sort-indicator"); g_object_notify_by_pspec (G_OBJECT (tree_column), tree_column_props[PROP_SORT_INDICATOR]);
} }
/** /**
@ -2796,7 +2783,7 @@ gtk_tree_view_column_set_sort_order (GtkTreeViewColumn *tree_column,
tree_column->priv->sort_order = order; tree_column->priv->sort_order = order;
gtk_tree_view_column_update_button (tree_column); gtk_tree_view_column_update_button (tree_column);
g_object_notify (G_OBJECT (tree_column), "sort-order"); g_object_notify_by_pspec (G_OBJECT (tree_column), tree_column_props[PROP_SORT_ORDER]);
} }
/** /**