From fe31f87bf0fd88be90e68b563efe4fd0e8de676a Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 9 Jun 2014 11:50:05 -0400 Subject: [PATCH] GtkTreeView: Use G_PARAM_EXPLICIT_NOTIFY --- gtk/gtktreeview.c | 377 ++++++++++++++++++++++++---------------------- 1 file changed, 201 insertions(+), 176 deletions(-) diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c index 713203e9c3..e9ed89d15e 100644 --- a/gtk/gtktreeview.c +++ b/gtk/gtktreeview.c @@ -990,187 +990,181 @@ gtk_tree_view_class_init (GtkTreeViewClass *class) g_object_class_install_property (o_class, PROP_HEADERS_VISIBLE, g_param_spec_boolean ("headers-visible", - P_("Headers Visible"), - P_("Show the column header buttons"), - TRUE, - GTK_PARAM_READWRITE)); + P_("Headers Visible"), + P_("Show the column header buttons"), + TRUE, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); g_object_class_install_property (o_class, PROP_HEADERS_CLICKABLE, g_param_spec_boolean ("headers-clickable", - P_("Headers Clickable"), - P_("Column headers respond to click events"), - TRUE, - GTK_PARAM_READWRITE)); + P_("Headers Clickable"), + P_("Column headers respond to click events"), + TRUE, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); g_object_class_install_property (o_class, PROP_EXPANDER_COLUMN, g_param_spec_object ("expander-column", - P_("Expander Column"), - P_("Set the column for the expander column"), - GTK_TYPE_TREE_VIEW_COLUMN, - GTK_PARAM_READWRITE)); + P_("Expander Column"), + P_("Set the column for the expander column"), + GTK_TYPE_TREE_VIEW_COLUMN, + GTK_PARAM_READWRITE)); g_object_class_install_property (o_class, PROP_REORDERABLE, g_param_spec_boolean ("reorderable", - P_("Reorderable"), - P_("View is reorderable"), - FALSE, - GTK_PARAM_READWRITE)); + P_("Reorderable"), + P_("View is reorderable"), + FALSE, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); g_object_class_install_property (o_class, PROP_RULES_HINT, g_param_spec_boolean ("rules-hint", - P_("Rules Hint"), - P_("Set a hint to the theme engine to draw rows in alternating colors"), - FALSE, - GTK_PARAM_READWRITE)); + P_("Rules Hint"), + P_("Set a hint to the theme engine to draw rows in alternating colors"), + FALSE, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); - g_object_class_install_property (o_class, - PROP_ENABLE_SEARCH, - g_param_spec_boolean ("enable-search", - P_("Enable Search"), - P_("View allows user to search through columns interactively"), - TRUE, - GTK_PARAM_READWRITE)); + g_object_class_install_property (o_class, + PROP_ENABLE_SEARCH, + g_param_spec_boolean ("enable-search", + P_("Enable Search"), + P_("View allows user to search through columns interactively"), + TRUE, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); - g_object_class_install_property (o_class, - PROP_SEARCH_COLUMN, - g_param_spec_int ("search-column", - P_("Search Column"), - P_("Model column to search through during interactive search"), - -1, - G_MAXINT, - -1, - GTK_PARAM_READWRITE)); + g_object_class_install_property (o_class, + PROP_SEARCH_COLUMN, + g_param_spec_int ("search-column", + P_("Search Column"), + P_("Model column to search through during interactive search"), + -1, G_MAXINT, -1, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); - /** - * GtkTreeView:fixed-height-mode: - * - * Setting the ::fixed-height-mode property to %TRUE speeds up - * #GtkTreeView by assuming that all rows have the same height. - * Only enable this option if all rows are the same height. - * Please see gtk_tree_view_set_fixed_height_mode() for more - * information on this option. - * - * Since: 2.4 - **/ - g_object_class_install_property (o_class, - PROP_FIXED_HEIGHT_MODE, - g_param_spec_boolean ("fixed-height-mode", - P_("Fixed Height Mode"), - P_("Speeds up GtkTreeView by assuming that all rows have the same height"), - FALSE, - GTK_PARAM_READWRITE)); + /** + * GtkTreeView:fixed-height-mode: + * + * Setting the ::fixed-height-mode property to %TRUE speeds up + * #GtkTreeView by assuming that all rows have the same height. + * Only enable this option if all rows are the same height. + * Please see gtk_tree_view_set_fixed_height_mode() for more + * information on this option. + * + * Since: 2.4 + */ + g_object_class_install_property (o_class, + PROP_FIXED_HEIGHT_MODE, + g_param_spec_boolean ("fixed-height-mode", + P_("Fixed Height Mode"), + P_("Speeds up GtkTreeView by assuming that all rows have the same height"), + FALSE, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); - /** - * GtkTreeView:hover-selection: - * - * Enables or disables the hover selection mode of @tree_view. - * Hover selection makes the selected row follow the pointer. - * Currently, this works only for the selection modes - * %GTK_SELECTION_SINGLE and %GTK_SELECTION_BROWSE. - * - * This mode is primarily intended for treeviews in popups, e.g. - * in #GtkComboBox or #GtkEntryCompletion. - * - * Since: 2.6 - */ - g_object_class_install_property (o_class, - PROP_HOVER_SELECTION, - g_param_spec_boolean ("hover-selection", - P_("Hover Selection"), - P_("Whether the selection should follow the pointer"), - FALSE, - GTK_PARAM_READWRITE)); + /** + * GtkTreeView:hover-selection: + * + * Enables or disables the hover selection mode of @tree_view. + * Hover selection makes the selected row follow the pointer. + * Currently, this works only for the selection modes + * %GTK_SELECTION_SINGLE and %GTK_SELECTION_BROWSE. + * + * This mode is primarily intended for treeviews in popups, e.g. + * in #GtkComboBox or #GtkEntryCompletion. + * + * Since: 2.6 + */ + g_object_class_install_property (o_class, + PROP_HOVER_SELECTION, + g_param_spec_boolean ("hover-selection", + P_("Hover Selection"), + P_("Whether the selection should follow the pointer"), + FALSE, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); - /** - * GtkTreeView:hover-expand: - * - * Enables or disables the hover expansion mode of @tree_view. - * Hover expansion makes rows expand or collapse if the pointer moves - * over them. - * - * This mode is primarily intended for treeviews in popups, e.g. - * in #GtkComboBox or #GtkEntryCompletion. - * - * Since: 2.6 - */ - g_object_class_install_property (o_class, - PROP_HOVER_EXPAND, - g_param_spec_boolean ("hover-expand", - P_("Hover Expand"), - P_("Whether rows should be expanded/collapsed when the pointer moves over them"), - FALSE, - GTK_PARAM_READWRITE)); + /** + * GtkTreeView:hover-expand: + * + * Enables or disables the hover expansion mode of @tree_view. + * Hover expansion makes rows expand or collapse if the pointer moves + * over them. + * + * This mode is primarily intended for treeviews in popups, e.g. + * in #GtkComboBox or #GtkEntryCompletion. + * + * Since: 2.6 + */ + g_object_class_install_property (o_class, + PROP_HOVER_EXPAND, + g_param_spec_boolean ("hover-expand", + P_("Hover Expand"), + P_("Whether rows should be expanded/collapsed when the pointer moves over them"), + FALSE, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); - /** - * GtkTreeView:show-expanders: - * - * %TRUE if the view has expanders. - * - * Since: 2.12 - */ - g_object_class_install_property (o_class, - PROP_SHOW_EXPANDERS, - g_param_spec_boolean ("show-expanders", - P_("Show Expanders"), - P_("View has expanders"), - TRUE, - GTK_PARAM_READWRITE)); + /** + * GtkTreeView:show-expanders: + * + * %TRUE if the view has expanders. + * + * Since: 2.12 + */ + g_object_class_install_property (o_class, + PROP_SHOW_EXPANDERS, + g_param_spec_boolean ("show-expanders", + P_("Show Expanders"), + P_("View has expanders"), + TRUE, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); - /** - * GtkTreeView:level-indentation: - * - * Extra indentation for each level. - * - * Since: 2.12 - */ - g_object_class_install_property (o_class, - PROP_LEVEL_INDENTATION, - g_param_spec_int ("level-indentation", - P_("Level Indentation"), - P_("Extra indentation for each level"), - 0, - G_MAXINT, - 0, - GTK_PARAM_READWRITE)); + /** + * GtkTreeView:level-indentation: + * + * Extra indentation for each level. + * + * Since: 2.12 + */ + g_object_class_install_property (o_class, + PROP_LEVEL_INDENTATION, + g_param_spec_int ("level-indentation", + P_("Level Indentation"), + P_("Extra indentation for each level"), + 0, G_MAXINT, 0, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); - g_object_class_install_property (o_class, - PROP_RUBBER_BANDING, - g_param_spec_boolean ("rubber-banding", - P_("Rubber Banding"), - P_("Whether to enable selection of multiple items by dragging the mouse pointer"), - FALSE, - GTK_PARAM_READWRITE)); + g_object_class_install_property (o_class, + PROP_RUBBER_BANDING, + g_param_spec_boolean ("rubber-banding", + P_("Rubber Banding"), + P_("Whether to enable selection of multiple items by dragging the mouse pointer"), + FALSE, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); - g_object_class_install_property (o_class, - PROP_ENABLE_GRID_LINES, - g_param_spec_enum ("enable-grid-lines", - P_("Enable Grid Lines"), - P_("Whether grid lines should be drawn in the tree view"), - GTK_TYPE_TREE_VIEW_GRID_LINES, - GTK_TREE_VIEW_GRID_LINES_NONE, - GTK_PARAM_READWRITE)); + g_object_class_install_property (o_class, + PROP_ENABLE_GRID_LINES, + g_param_spec_enum ("enable-grid-lines", + P_("Enable Grid Lines"), + P_("Whether grid lines should be drawn in the tree view"), + GTK_TYPE_TREE_VIEW_GRID_LINES, + GTK_TREE_VIEW_GRID_LINES_NONE, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); - g_object_class_install_property (o_class, - PROP_ENABLE_TREE_LINES, - g_param_spec_boolean ("enable-tree-lines", - P_("Enable Tree Lines"), - P_("Whether tree lines should be drawn in the tree view"), - FALSE, - GTK_PARAM_READWRITE)); + g_object_class_install_property (o_class, + PROP_ENABLE_TREE_LINES, + g_param_spec_boolean ("enable-tree-lines", + P_("Enable Tree Lines"), + P_("Whether tree lines should be drawn in the tree view"), + FALSE, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); - g_object_class_install_property (o_class, - PROP_TOOLTIP_COLUMN, - g_param_spec_int ("tooltip-column", - P_("Tooltip Column"), - P_("The column in the model containing the tooltip texts for the rows"), - -1, - G_MAXINT, - -1, - GTK_PARAM_READWRITE)); + g_object_class_install_property (o_class, + PROP_TOOLTIP_COLUMN, + g_param_spec_int ("tooltip-column", + P_("Tooltip Column"), + P_("The column in the model containing the tooltip texts for the rows"), + -1, G_MAXINT, -1, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); /** * GtkTreeView:activate-on-single-click: @@ -1183,10 +1177,10 @@ gtk_tree_view_class_init (GtkTreeViewClass *class) g_object_class_install_property (o_class, PROP_ACTIVATE_ON_SINGLE_CLICK, g_param_spec_boolean ("activate-on-single-click", - P_("Activate on Single Click"), - P_("Activate row on a single click"), - FALSE, - GTK_PARAM_READWRITE)); + P_("Activate on Single Click"), + P_("Activate row on a single click"), + FALSE, + GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY)); /* Style properties */ #define _TREE_VIEW_EXPANDER_SIZE 14 @@ -1878,12 +1872,20 @@ gtk_tree_view_set_property (GObject *object, gtk_tree_view_do_set_vadjustment (tree_view, g_value_get_object (value)); break; case PROP_HSCROLL_POLICY: - tree_view->priv->hscroll_policy = g_value_get_enum (value); - gtk_widget_queue_resize (GTK_WIDGET (tree_view)); + if (tree_view->priv->hscroll_policy != g_value_get_enum (value)) + { + tree_view->priv->hscroll_policy = g_value_get_enum (value); + gtk_widget_queue_resize (GTK_WIDGET (tree_view)); + g_object_notify_by_pspec (object, pspec); + } break; case PROP_VSCROLL_POLICY: - tree_view->priv->vscroll_policy = g_value_get_enum (value); - gtk_widget_queue_resize (GTK_WIDGET (tree_view)); + if (tree_view->priv->vscroll_policy != g_value_get_enum (value)) + { + tree_view->priv->vscroll_policy = g_value_get_enum (value); + gtk_widget_queue_resize (GTK_WIDGET (tree_view)); + g_object_notify_by_pspec (object, pspec); + } break; case PROP_HEADERS_VISIBLE: gtk_tree_view_set_headers_visible (tree_view, g_value_get_boolean (value)); @@ -1910,19 +1912,35 @@ gtk_tree_view_set_property (GObject *object, gtk_tree_view_set_fixed_height_mode (tree_view, g_value_get_boolean (value)); break; case PROP_HOVER_SELECTION: - tree_view->priv->hover_selection = g_value_get_boolean (value); + if (tree_view->priv->hover_selection != g_value_get_boolean (value)) + { + tree_view->priv->hover_selection = g_value_get_boolean (value); + g_object_notify_by_pspec (object, pspec); + } break; case PROP_HOVER_EXPAND: - tree_view->priv->hover_expand = g_value_get_boolean (value); + if (tree_view->priv->hover_expand != g_value_get_boolean (value)) + { + tree_view->priv->hover_expand = g_value_get_boolean (value); + g_object_notify_by_pspec (object, pspec); + } break; case PROP_SHOW_EXPANDERS: gtk_tree_view_set_show_expanders (tree_view, g_value_get_boolean (value)); break; case PROP_LEVEL_INDENTATION: - tree_view->priv->level_indentation = g_value_get_int (value); + if (tree_view->priv->level_indentation != g_value_get_int (value)) + { + tree_view->priv->level_indentation = g_value_get_int (value); + g_object_notify_by_pspec (object, pspec); + } break; case PROP_RUBBER_BANDING: - tree_view->priv->rubber_banding_enable = g_value_get_boolean (value); + if (tree_view->priv->rubber_banding_enable != g_value_get_boolean (value)) + { + tree_view->priv->rubber_banding_enable = g_value_get_boolean (value); + g_object_notify_by_pspec (object, pspec); + } break; case PROP_ENABLE_GRID_LINES: gtk_tree_view_set_grid_lines (tree_view, g_value_get_enum (value)); @@ -11707,13 +11725,21 @@ gtk_tree_view_set_headers_clickable (GtkTreeView *tree_view, gboolean setting) { GList *list; + gboolean changed = FALSE; g_return_if_fail (GTK_IS_TREE_VIEW (tree_view)); for (list = tree_view->priv->columns; list; list = list->next) - gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (list->data), setting); + { + if (gtk_tree_view_column_get_clickable (GTK_TREE_VIEW_COLUMN (list->data)) != setting) + { + gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (list->data), setting); + changed = TRUE; + } + } - g_object_notify (G_OBJECT (tree_view), "headers-clickable"); + if (changed) + g_object_notify (G_OBJECT (tree_view), "headers-clickable"); } @@ -11772,9 +11798,8 @@ gtk_tree_view_set_rules_hint (GtkTreeView *tree_view, { tree_view->priv->has_rules = setting; gtk_widget_queue_draw (GTK_WIDGET (tree_view)); + g_object_notify (G_OBJECT (tree_view), "rules-hint"); } - - g_object_notify (G_OBJECT (tree_view), "rules-hint"); } /** @@ -16064,12 +16089,12 @@ gtk_tree_view_set_show_expanders (GtkTreeView *tree_view, g_return_if_fail (GTK_IS_TREE_VIEW (tree_view)); enabled = enabled != FALSE; - was_enabled = tree_view->priv->show_expanders; - - tree_view->priv->show_expanders = enabled == TRUE; - - if (enabled != was_enabled) - gtk_widget_queue_draw (GTK_WIDGET (tree_view)); + if (tree_view->priv->show_expanders != enabled) + { + tree_view->priv->show_expanders = enabled; + gtk_widget_queue_draw (GTK_WIDGET (tree_view)); + g_object_notify (G_OBJECT (tree_view), "show-expanders"); + } } /**