From 9b2fc547efd5e20172ac60de05b47a3c4cbafe8d Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Thu, 29 May 2025 19:34:32 +0200 Subject: [PATCH] app: GimpDrawableTreeView: rename "effect" to "filter" --- app/widgets/gimpdrawabletreeview.c | 549 +++++++++++++++-------------- 1 file changed, 281 insertions(+), 268 deletions(-) diff --git a/app/widgets/gimpdrawabletreeview.c b/app/widgets/gimpdrawabletreeview.c index f5aaf6d7bf..cfc18af127 100644 --- a/app/widgets/gimpdrawabletreeview.c +++ b/app/widgets/gimpdrawabletreeview.c @@ -61,30 +61,30 @@ #include "gimp-intl.h" -#define COLUMN_EFFECTS_ACTIVE 3 +#define COLUMN_FILTERS_ACTIVE 3 struct _GimpDrawableTreeViewPrivate { - GtkWidget *effect_header_image; + GtkWidget *filters_header_image; - gint model_column_effects; - GtkCellRenderer *effects_cell; + gint model_column_filters; + GtkCellRenderer *filters_cell; - GtkWidget *effects_popover; - GtkWidget *effects_box; - GtkWidget *effects_filters; - GtkWidget *effects_options; + GtkWidget *filters_popover; + GtkWidget *filters_vbox; + GtkWidget *filters_view; + GtkWidget *filters_options; - GtkWidget *effects_visible_button; - GtkWidget *effects_edit_button; - GtkWidget *effects_raise_button; - GtkWidget *effects_lower_button; - GtkWidget *effects_merge_button; - GtkWidget *effects_remove_button; - GimpDrawable *effects_drawable; - GimpDrawableFilter - *effects_filter; + GtkWidget *filters_visible_button; + GtkWidget *filters_edit_button; + GtkWidget *filters_raise_button; + GtkWidget *filters_lower_button; + GtkWidget *filters_merge_button; + GtkWidget *filters_remove_button; + + GimpDrawable *filter_drawable; + GimpDrawableFilter *filter; GimpTreeHandler *filters_changed_handler; GimpTreeHandler *filters_active_changed_handler; @@ -257,7 +257,7 @@ gimp_drawable_tree_view_init (GimpDrawableTreeView *view) view->priv = gimp_drawable_tree_view_get_instance_private (view); - view->priv->model_column_effects = + view->priv->model_column_filters = gimp_container_tree_store_columns_add (tree_view->model_columns, &tree_view->n_model_columns, G_TYPE_BOOLEAN); @@ -285,32 +285,32 @@ gimp_drawable_tree_view_constructed (GObject *object) if (GIMP_IS_LAYER_TREE_VIEW (object)) { GtkTreeViewColumn *column; - GtkWidget *image; column = gtk_tree_view_column_new (); - image = gtk_image_new_from_icon_name (GIMP_ICON_EFFECT, button_icon_size); - gimp_widget_set_identifier (image, "item-effect-header-icon"); - gtk_tree_view_column_set_widget (column, image); - gtk_widget_set_visible (image, TRUE); + view->priv->filters_header_image = + gtk_image_new_from_icon_name (GIMP_ICON_EFFECT, button_icon_size); + gimp_widget_set_identifier (view->priv->filters_header_image, + "item-effect-header-icon"); + gtk_tree_view_column_set_widget (column, view->priv->filters_header_image); + gtk_widget_show (view->priv->filters_header_image); gtk_tree_view_insert_column (tree_view->view, column, 2); - view->priv->effect_header_image = image; - view->priv->effects_cell = gimp_cell_renderer_toggle_new (GIMP_ICON_EFFECT); - g_object_set (view->priv->effects_cell, + view->priv->filters_cell = gimp_cell_renderer_toggle_new (GIMP_ICON_EFFECT); + g_object_set (view->priv->filters_cell, "xpad", 0, "ypad", 0, "icon-size", pixel_icon_size, NULL); - gtk_tree_view_column_pack_start (column, view->priv->effects_cell, FALSE); - gtk_tree_view_column_set_attributes (column, view->priv->effects_cell, + gtk_tree_view_column_pack_start (column, view->priv->filters_cell, FALSE); + gtk_tree_view_column_set_attributes (column, view->priv->filters_cell, "active", - view->priv->model_column_effects, + view->priv->model_column_filters, NULL); gimp_container_tree_view_add_toggle_cell (tree_view, - view->priv->effects_cell); + view->priv->filters_cell); - g_signal_connect (view->priv->effects_cell, "clicked", + g_signal_connect (view->priv->filters_cell, "clicked", G_CALLBACK (gimp_drawable_tree_view_effects_clicked), item_view); } @@ -322,116 +322,135 @@ gimp_drawable_tree_view_constructed (GObject *object) GtkWidget *label; gchar *text; - view->priv->effects_filters = gtk_box_new (GTK_ORIENTATION_VERTICAL, button_spacing); - view->priv->effects_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, button_spacing); - view->priv->effects_options = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, button_spacing); + /* filters popover */ + view->priv->filters_popover = gtk_popover_new (GTK_WIDGET (tree_view->view)); + gtk_popover_set_modal (GTK_POPOVER (view->priv->filters_popover), TRUE); - /* Effects Buttons */ - view->priv->effects_visible_button = gtk_toggle_button_new (); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (view->priv->effects_visible_button), - TRUE); - image = gtk_image_new_from_icon_name (GIMP_ICON_VISIBLE, - GTK_ICON_SIZE_SMALL_TOOLBAR); - gtk_container_add (GTK_CONTAINER (view->priv->effects_visible_button), image); - gimp_help_set_help_data (view->priv->effects_visible_button, - _("Toggle the visibility of all filters."), - GIMP_HELP_LAYER_EFFECTS); - g_signal_connect (view->priv->effects_visible_button, "toggled", - G_CALLBACK (gimp_drawable_tree_view_effects_visible_all_toggled), - view); - gtk_box_pack_start (GTK_BOX (view->priv->effects_options), - view->priv->effects_visible_button, TRUE, TRUE, 0); - gtk_widget_set_visible (image, TRUE); - gtk_widget_set_visible (view->priv->effects_visible_button, TRUE); + /* main vbox within */ + view->priv->filters_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, + button_spacing); + gtk_container_add (GTK_CONTAINER (view->priv->filters_popover), + view->priv->filters_vbox); + gtk_widget_show (view->priv->filters_vbox); - view->priv->effects_edit_button = - gtk_button_new_from_icon_name (GIMP_ICON_EDIT, - GTK_ICON_SIZE_SMALL_TOOLBAR); - gimp_help_set_help_data (view->priv->effects_edit_button, - _("Edit the selected filter."), - GIMP_HELP_LAYER_EFFECTS); - g_signal_connect (view->priv->effects_edit_button, "clicked", - G_CALLBACK (gimp_drawable_tree_view_effects_edit_clicked), - view); - gtk_box_pack_start (GTK_BOX (view->priv->effects_options), - view->priv->effects_edit_button, TRUE, TRUE, 0); - gtk_widget_set_visible (view->priv->effects_edit_button, TRUE); - - view->priv->effects_raise_button = - gtk_button_new_from_icon_name (GIMP_ICON_GO_UP, - GTK_ICON_SIZE_SMALL_TOOLBAR); - gimp_help_set_help_data (view->priv->effects_raise_button, - _("Raise filter one step up in the stack."), - GIMP_HELP_LAYER_EFFECTS); - g_signal_connect (view->priv->effects_raise_button, "clicked", - G_CALLBACK (gimp_drawable_tree_view_effects_raise_clicked), - view); - gtk_box_pack_start (GTK_BOX (view->priv->effects_options), - view->priv->effects_raise_button, TRUE, TRUE, 0); - gtk_widget_set_visible (view->priv->effects_raise_button, TRUE); - - view->priv->effects_lower_button = - gtk_button_new_from_icon_name (GIMP_ICON_GO_DOWN, - GTK_ICON_SIZE_SMALL_TOOLBAR); - gimp_help_set_help_data (view->priv->effects_lower_button, - _("Lower filter one step down in the stack."), - GIMP_HELP_LAYER_EFFECTS); - g_signal_connect (view->priv->effects_lower_button, "clicked", - G_CALLBACK (gimp_drawable_tree_view_effects_lower_clicked), - view); - gtk_box_pack_start (GTK_BOX (view->priv->effects_options), - view->priv->effects_lower_button, TRUE, TRUE, 0); - gtk_widget_set_visible (view->priv->effects_lower_button, TRUE); - - view->priv->effects_merge_button = - gtk_button_new_from_icon_name (GIMP_ICON_LAYER_MERGE_DOWN, - GTK_ICON_SIZE_SMALL_TOOLBAR); - gimp_help_set_help_data (view->priv->effects_merge_button, - _("Merge all active filters down."), - GIMP_HELP_LAYER_EFFECTS); - g_signal_connect (view->priv->effects_merge_button, "clicked", - G_CALLBACK (gimp_drawable_tree_view_effects_merge_clicked), - view); - gtk_box_pack_start (GTK_BOX (view->priv->effects_options), - view->priv->effects_merge_button, TRUE, TRUE, 0); - gtk_widget_set_visible (view->priv->effects_merge_button, TRUE); - - view->priv->effects_remove_button = - gtk_button_new_from_icon_name (GIMP_ICON_EDIT_DELETE, - GTK_ICON_SIZE_SMALL_TOOLBAR); - gimp_help_set_help_data (view->priv->effects_remove_button, - _("Remove the selected filter."), - GIMP_HELP_LAYER_EFFECTS); - g_signal_connect (view->priv->effects_remove_button, "clicked", - G_CALLBACK (gimp_drawable_tree_view_effects_remove_clicked), - view); - gtk_box_pack_start (GTK_BOX (view->priv->effects_options), - view->priv->effects_remove_button, TRUE, TRUE, 0); - gtk_widget_set_visible (view->priv->effects_remove_button, TRUE); + gimp_help_connect (view->priv->filters_vbox, NULL, gimp_standard_help_func, + GIMP_HELP_LAYER_EFFECTS, NULL, NULL); + /* top label */ label = gtk_label_new (NULL); text = g_strdup_printf ("%s", _("Layer Effects")); gtk_label_set_markup (GTK_LABEL (label), text); - gtk_widget_set_visible (label, TRUE); g_free (text); - - /* Effects popover. */ - view->priv->effects_popover = gtk_popover_new (GTK_WIDGET (tree_view->view)); - gtk_popover_set_modal (GTK_POPOVER (view->priv->effects_popover), TRUE); - gtk_container_add (GTK_CONTAINER (view->priv->effects_popover), - view->priv->effects_filters); - gimp_help_connect (view->priv->effects_filters, NULL, - gimp_standard_help_func, GIMP_HELP_LAYER_EFFECTS, NULL, NULL); - gtk_box_pack_start (GTK_BOX (view->priv->effects_filters), label, + gtk_box_pack_start (GTK_BOX (view->priv->filters_vbox), label, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (view->priv->effects_filters), - view->priv->effects_box, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (view->priv->effects_filters), - view->priv->effects_options, FALSE, FALSE, 0); - gtk_widget_set_visible (view->priv->effects_box, TRUE); - gtk_widget_set_visible (view->priv->effects_options, TRUE); - gtk_widget_set_visible (view->priv->effects_filters, TRUE); + gtk_widget_show (label); + + /* bottom buttons */ + view->priv->filters_options = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, button_spacing); + gtk_box_pack_end (GTK_BOX (view->priv->filters_vbox), + view->priv->filters_options, FALSE, FALSE, 0); + gtk_widget_show (view->priv->filters_options); + + /* "visible" button */ + view->priv->filters_visible_button = gtk_toggle_button_new (); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (view->priv->filters_visible_button), + TRUE); + image = gtk_image_new_from_icon_name (GIMP_ICON_VISIBLE, + GTK_ICON_SIZE_SMALL_TOOLBAR); + gtk_container_add (GTK_CONTAINER (view->priv->filters_visible_button), image); + gtk_widget_show (image); + + gtk_box_pack_start (GTK_BOX (view->priv->filters_options), + view->priv->filters_visible_button, TRUE, TRUE, 0); + gtk_widget_show (view->priv->filters_visible_button); + + gimp_help_set_help_data (view->priv->filters_visible_button, + _("Toggle the visibility of all filters."), + GIMP_HELP_LAYER_EFFECTS); + + g_signal_connect (view->priv->filters_visible_button, "toggled", + G_CALLBACK (gimp_drawable_tree_view_effects_visible_all_toggled), + view); + + /* "edit" button */ + view->priv->filters_edit_button = + gtk_button_new_from_icon_name (GIMP_ICON_EDIT, + GTK_ICON_SIZE_SMALL_TOOLBAR); + gtk_box_pack_start (GTK_BOX (view->priv->filters_options), + view->priv->filters_edit_button, TRUE, TRUE, 0); + gtk_widget_show (view->priv->filters_edit_button); + + gimp_help_set_help_data (view->priv->filters_edit_button, + _("Edit the selected filter."), + GIMP_HELP_LAYER_EFFECTS); + + g_signal_connect (view->priv->filters_edit_button, "clicked", + G_CALLBACK (gimp_drawable_tree_view_effects_edit_clicked), + view); + + /* "raide" button */ + view->priv->filters_raise_button = + gtk_button_new_from_icon_name (GIMP_ICON_GO_UP, + GTK_ICON_SIZE_SMALL_TOOLBAR); + gtk_box_pack_start (GTK_BOX (view->priv->filters_options), + view->priv->filters_raise_button, TRUE, TRUE, 0); + gtk_widget_show (view->priv->filters_raise_button); + + gimp_help_set_help_data (view->priv->filters_raise_button, + _("Raise filter one step up in the stack."), + GIMP_HELP_LAYER_EFFECTS); + g_signal_connect (view->priv->filters_raise_button, "clicked", + G_CALLBACK (gimp_drawable_tree_view_effects_raise_clicked), + view); + + /* "lower" button */ + view->priv->filters_lower_button = + gtk_button_new_from_icon_name (GIMP_ICON_GO_DOWN, + GTK_ICON_SIZE_SMALL_TOOLBAR); + gtk_box_pack_start (GTK_BOX (view->priv->filters_options), + view->priv->filters_lower_button, TRUE, TRUE, 0); + gtk_widget_show (view->priv->filters_lower_button); + + gimp_help_set_help_data (view->priv->filters_lower_button, + _("Lower filter one step down in the stack."), + GIMP_HELP_LAYER_EFFECTS); + + g_signal_connect (view->priv->filters_lower_button, "clicked", + G_CALLBACK (gimp_drawable_tree_view_effects_lower_clicked), + view); + + /* "merge" button */ + view->priv->filters_merge_button = + gtk_button_new_from_icon_name (GIMP_ICON_LAYER_MERGE_DOWN, + GTK_ICON_SIZE_SMALL_TOOLBAR); + gtk_box_pack_start (GTK_BOX (view->priv->filters_options), + view->priv->filters_merge_button, TRUE, TRUE, 0); + gtk_widget_show (view->priv->filters_merge_button); + + gimp_help_set_help_data (view->priv->filters_merge_button, + _("Merge all active filters down."), + GIMP_HELP_LAYER_EFFECTS); + + g_signal_connect (view->priv->filters_merge_button, "clicked", + G_CALLBACK (gimp_drawable_tree_view_effects_merge_clicked), + view); + + /* "remove" button */ + view->priv->filters_remove_button = + gtk_button_new_from_icon_name (GIMP_ICON_EDIT_DELETE, + GTK_ICON_SIZE_SMALL_TOOLBAR); + gtk_box_pack_start (GTK_BOX (view->priv->filters_options), + view->priv->filters_remove_button, TRUE, TRUE, 0); + gtk_widget_show (view->priv->filters_remove_button); + + gimp_help_set_help_data (view->priv->filters_remove_button, + _("Remove the selected filter."), + GIMP_HELP_LAYER_EFFECTS); + + g_signal_connect (view->priv->filters_remove_button, "clicked", + G_CALLBACK (gimp_drawable_tree_view_effects_remove_clicked), + view); } gimp_dnd_viewable_dest_add (gimp_item_tree_view_get_new_button (item_view), @@ -453,10 +472,7 @@ gimp_drawable_tree_view_dispose (GObject *object) { GimpDrawableTreeView *view = GIMP_DRAWABLE_TREE_VIEW (object); - g_clear_pointer (&view->priv->effects_popover, gtk_widget_destroy); - - view->priv->effects_drawable = NULL; - view->priv->effects_filter = NULL; + g_clear_pointer (&view->priv->filters_popover, gtk_widget_destroy); G_OBJECT_CLASS (parent_class)->dispose (object); } @@ -474,19 +490,19 @@ gimp_drawable_tree_view_style_updated (GtkWidget *widget) if (GIMP_IS_LAYER_TREE_VIEW (view)) { - gtk_image_get_icon_name (GTK_IMAGE (view->priv->effect_header_image), + gtk_image_get_icon_name (GTK_IMAGE (view->priv->filters_header_image), &old_icon_name, &old_size); if (button_icon_size != old_size) { gchar *icon_name = g_strdup (old_icon_name); - gtk_image_set_from_icon_name (GTK_IMAGE (view->priv->effect_header_image), + gtk_image_set_from_icon_name (GTK_IMAGE (view->priv->filters_header_image), icon_name, button_icon_size); g_free (icon_name); } - g_object_set (view->priv->effects_cell, + g_object_set (view->priv->filters_cell, "icon-name", GIMP_ICON_EFFECT, "icon-size", pixel_icon_size, NULL); @@ -511,13 +527,10 @@ gimp_drawable_tree_view_set_container (GimpContainerView *view, { if (GIMP_IS_LAYER_TREE_VIEW (drawable_view)) { - gimp_tree_handler_disconnect (drawable_view->priv->filters_changed_handler); - drawable_view->priv->filters_changed_handler = NULL; - - if (drawable_view->priv->filters_active_changed_handler) - gimp_tree_handler_disconnect (drawable_view->priv->filters_active_changed_handler); - - drawable_view->priv->filters_active_changed_handler = NULL; + g_clear_pointer (&drawable_view->priv->filters_changed_handler, + gimp_tree_handler_disconnect); + g_clear_pointer (&drawable_view->priv->filters_active_changed_handler, + gimp_tree_handler_disconnect); } } @@ -557,7 +570,7 @@ gimp_drawable_tree_view_insert_item (GimpContainerView *view, n_filters = gimp_container_get_n_children (filters); gtk_tree_store_set (GTK_TREE_STORE (tree_view->model), iter, - drawable_view->priv->model_column_effects, + drawable_view->priv->model_column_filters, n_filters > 0, -1); } @@ -714,24 +727,30 @@ gimp_drawable_tree_view_set_image (GimpItemTreeView *view, GimpDrawableTreeView *drawable_view = GIMP_DRAWABLE_TREE_VIEW (view); if (gimp_item_tree_view_get_image (view)) - g_signal_handlers_disconnect_by_func (gimp_item_tree_view_get_image (view), - gimp_drawable_tree_view_floating_selection_changed, - view); + { + g_signal_handlers_disconnect_by_func (gimp_item_tree_view_get_image (view), + gimp_drawable_tree_view_floating_selection_changed, + view); + + if (GIMP_IS_LAYER_TREE_VIEW (view)) + { + drawable_view->priv->filter_drawable = NULL; + drawable_view->priv->filter = NULL; + + if (drawable_view->priv->filters_popover) + gtk_widget_hide (drawable_view->priv->filters_popover); + } + } GIMP_ITEM_TREE_VIEW_CLASS (parent_class)->set_image (view, image); if (gimp_item_tree_view_get_image (view)) - g_signal_connect (gimp_item_tree_view_get_image (view), - "floating-selection-changed", - G_CALLBACK (gimp_drawable_tree_view_floating_selection_changed), - view); - - drawable_view->priv->effects_drawable = NULL; - drawable_view->priv->effects_filter = NULL; - drawable_view->priv->filters_active_changed_handler = NULL; - - if (drawable_view->priv->effects_popover) - gtk_widget_set_visible (drawable_view->priv->effects_popover, FALSE); + { + g_signal_connect (gimp_item_tree_view_get_image (view), + "floating-selection-changed", + G_CALLBACK (gimp_drawable_tree_view_floating_selection_changed), + view); + } } @@ -801,30 +820,30 @@ gimp_drawable_tree_view_filters_changed (GimpDrawable *drawable, n_filters = 0; if (n_filters == 0 || fs_disabled) - view->priv->effects_filter = NULL; + view->priv->filter = NULL; if (iter) gtk_tree_store_set (GTK_TREE_STORE (tree_view->model), iter, - view->priv->model_column_effects, + view->priv->model_column_filters, n_filters > 0, -1); /* Re-enable buttons after editing */ gimp_drawable_tree_effects_set_sensitive (view, ! fs_disabled); - if (view->priv->effects_popover && - view->priv->effects_filter && + if (view->priv->filters_popover && + view->priv->filter && ! fs_disabled) { - if (GIMP_IS_DRAWABLE_FILTER (view->priv->effects_filter)) + if (GIMP_IS_DRAWABLE_FILTER (view->priv->filter)) { gint index = gimp_container_get_child_index (filters, - GIMP_OBJECT (view->priv->effects_filter)); + GIMP_OBJECT (view->priv->filter)); if (index == 0) - gtk_widget_set_sensitive (view->priv->effects_raise_button, FALSE); + gtk_widget_set_sensitive (view->priv->filters_raise_button, FALSE); else if (index == (n_filters - 1)) - gtk_widget_set_sensitive (view->priv->effects_lower_button, FALSE); + gtk_widget_set_sensitive (view->priv->filters_lower_button, FALSE); } } } @@ -836,18 +855,18 @@ gimp_drawable_tree_effects_set_sensitive (GimpDrawableTreeView *view, gboolean is_group = FALSE; /* Do not allow merging down effects on group layers */ - if (view->priv->effects_drawable && - gimp_viewable_get_children (GIMP_VIEWABLE (view->priv->effects_drawable))) + if (view->priv->filter_drawable && + gimp_viewable_get_children (GIMP_VIEWABLE (view->priv->filter_drawable))) is_group = TRUE; - gtk_widget_set_sensitive (view->priv->effects_box, is_sensitive); - gtk_widget_set_sensitive (view->priv->effects_visible_button, is_sensitive); - gtk_widget_set_sensitive (view->priv->effects_edit_button, is_sensitive); - gtk_widget_set_sensitive (view->priv->effects_raise_button, is_sensitive); - gtk_widget_set_sensitive (view->priv->effects_lower_button, is_sensitive); - gtk_widget_set_sensitive (view->priv->effects_merge_button, (is_sensitive && + gtk_widget_set_sensitive (view->priv->filters_vbox, is_sensitive); + gtk_widget_set_sensitive (view->priv->filters_visible_button, is_sensitive); + gtk_widget_set_sensitive (view->priv->filters_edit_button, is_sensitive); + gtk_widget_set_sensitive (view->priv->filters_raise_button, is_sensitive); + gtk_widget_set_sensitive (view->priv->filters_lower_button, is_sensitive); + gtk_widget_set_sensitive (view->priv->filters_merge_button, (is_sensitive && ! is_group)); - gtk_widget_set_sensitive (view->priv->effects_remove_button, is_sensitive); + gtk_widget_set_sensitive (view->priv->filters_remove_button, is_sensitive); } static void @@ -869,14 +888,10 @@ gimp_drawable_tree_view_effects_clicked (GtkCellRendererToggle *toggle, GimpDrawable *drawable; GimpContainer *filters; GdkRectangle rect; - GtkWidget *filter_view; GList *list; - GList *children; gint n_children = 0; gboolean visible = TRUE; - children = gtk_container_get_children (GTK_CONTAINER (view->priv->effects_box)); - /* Update the filter state. */ store = GIMP_CONTAINER_TREE_STORE (GIMP_CONTAINER_TREE_VIEW (view)->model); renderer = gimp_container_tree_store_get_renderer (store, &iter); @@ -884,19 +899,22 @@ gimp_drawable_tree_view_effects_clicked (GtkCellRendererToggle *toggle, g_object_unref (renderer); /* Get filters */ - if (children) + if (view->priv->filters_view) { - g_signal_handlers_disconnect_by_func (children->data, + g_signal_handlers_disconnect_by_func (view->priv->filters_view, gimp_drawable_tree_view_effects_filters_selected, view); - g_signal_handlers_disconnect_by_func (children->data, + g_signal_handlers_disconnect_by_func (view->priv->filters_view, gimp_drawable_tree_view_effects_activate_filter, view); - gtk_widget_destroy (children->data); - g_list_free (children); + + g_clear_pointer (&view->priv->filters_active_changed_handler, + gimp_tree_handler_disconnect); + g_clear_pointer (&view->priv->filters_view, + gtk_widget_destroy); } - view->priv->effects_drawable = drawable; + view->priv->filter_drawable = drawable; filters = gimp_drawable_get_filters (drawable); @@ -914,12 +932,12 @@ gimp_drawable_tree_view_effects_clicked (GtkCellRendererToggle *toggle, } /* Set the initial value for the effect visibility toggle */ - g_signal_handlers_block_by_func (view->priv->effects_visible_button, + g_signal_handlers_block_by_func (view->priv->filters_visible_button, gimp_drawable_tree_view_effects_visible_all_toggled, view); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (view->priv->effects_visible_button), + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (view->priv->filters_visible_button), visible); - g_signal_handlers_unblock_by_func (view->priv->effects_visible_button, + g_signal_handlers_unblock_by_func (view->priv->filters_visible_button, gimp_drawable_tree_view_effects_visible_all_toggled, view); @@ -928,23 +946,20 @@ gimp_drawable_tree_view_effects_clicked (GtkCellRendererToggle *toggle, { GtkCellRenderer *renderer; GtkTreeViewColumn *column; - GimpContainerTreeView *filter_tree_view = NULL; + GimpContainerTreeView *filter_tree_view; GtkWidget *scrolled_window = NULL; gboolean is_editing = FALSE; - filter_view = gimp_container_tree_view_new (filters, - gimp_container_view_get_context (GIMP_CONTAINER_VIEW (view)), - GIMP_VIEW_SIZE_SMALL, 0); - filter_tree_view = GIMP_CONTAINER_TREE_VIEW (filter_view); + view->priv->filters_view = gimp_container_tree_view_new (filters, + gimp_container_view_get_context (GIMP_CONTAINER_VIEW (view)), + GIMP_VIEW_SIZE_SMALL, 0); + filter_tree_view = GIMP_CONTAINER_TREE_VIEW (view->priv->filters_view); /* Connect filter active signal */ - if (view->priv->filters_active_changed_handler) - gimp_tree_handler_disconnect (view->priv->filters_active_changed_handler); - view->priv->filters_active_changed_handler = gimp_tree_handler_connect (filters, "active-changed", G_CALLBACK (gimp_drawable_tree_view_filter_active_changed), - filter_view); + view->priv->filters_view); gimp_container_tree_store_columns_add (filter_tree_view->model_columns, &filter_tree_view->n_model_columns, @@ -957,7 +972,7 @@ gimp_drawable_tree_view_effects_clicked (GtkCellRendererToggle *toggle, gtk_tree_view_column_pack_end (column, renderer, FALSE); gtk_tree_view_column_set_attributes (column, renderer, "active", - COLUMN_EFFECTS_ACTIVE, + COLUMN_FILTERS_ACTIVE, NULL); gtk_tree_view_append_column (filter_tree_view->view, @@ -994,19 +1009,19 @@ gimp_drawable_tree_view_effects_clicked (GtkCellRendererToggle *toggle, g_signal_connect (filter_tree_view, "select-items", G_CALLBACK (gimp_drawable_tree_view_effects_filters_selected), view); - g_signal_connect_object (filter_tree_view, - "activate-item", + g_signal_connect_object (filter_tree_view, "activate-item", G_CALLBACK (gimp_drawable_tree_view_effects_activate_filter), view, 0); - gtk_box_pack_start (GTK_BOX (view->priv->effects_box), filter_view, TRUE, TRUE, 0); - gtk_widget_set_visible (filter_view, TRUE); + gtk_box_pack_start (GTK_BOX (view->priv->filters_vbox), + view->priv->filters_view, TRUE, TRUE, 0); + gtk_widget_show (view->priv->filters_view); scrolled_window = gtk_widget_get_parent (GTK_WIDGET (filter_tree_view->view)); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_NEVER, GTK_POLICY_NEVER); - gtk_widget_set_size_request (view->priv->effects_box, -1, 24 * (n_children + 1)); + gtk_widget_set_size_request (view->priv->filters_vbox, -1, 24 * (n_children + 1)); /* Change popover position. */ gtk_tree_view_get_cell_area (GIMP_CONTAINER_TREE_VIEW (view)->view, path, @@ -1014,10 +1029,10 @@ gimp_drawable_tree_view_effects_clicked (GtkCellRendererToggle *toggle, &rect); gtk_tree_view_convert_bin_window_to_widget_coords (GIMP_CONTAINER_TREE_VIEW (view)->view, rect.x, rect.y, &rect.x, &rect.y); - gtk_popover_set_pointing_to (GTK_POPOVER (view->priv->effects_popover), &rect); + gtk_popover_set_pointing_to (GTK_POPOVER (view->priv->filters_popover), &rect); gimp_drawable_tree_view_filters_changed (drawable, view); - gtk_widget_show (view->priv->effects_popover); + gtk_widget_show (view->priv->filters_popover); /* Lock filter options if we're actively editing a filter */ gimp_drawable_tree_effects_set_sensitive (view, ! is_editing); @@ -1033,32 +1048,30 @@ gimp_drawable_tree_view_effects_filters_selected (GimpContainerView *view, { g_return_val_if_fail (g_list_length (filters) <= 1, FALSE); - if (filters && GIMP_IS_DRAWABLE (drawable_view->priv->effects_drawable)) + if (filters && GIMP_IS_DRAWABLE (drawable_view->priv->filter_drawable)) { - GimpDrawableFilter *filter; - GimpContainer *container; - gint index = -1; - gint n_children = 0; - gboolean is_blocked_op = FALSE; - GeglNode *op_node = NULL; + gint index = -1; + gint n_children = 0; + gboolean is_blocked_op = FALSE; /* Don't set floating selection as active filter */ if (GIMP_IS_DRAWABLE_FILTER (filters->data)) { - filter = filters->data; + GimpContainer *container; + GeglNode *op_node; - drawable_view->priv->effects_filter = filter; + drawable_view->priv->filter = filters->data; container = - gimp_drawable_get_filters (GIMP_DRAWABLE (drawable_view->priv->effects_drawable)); + gimp_drawable_get_filters (GIMP_DRAWABLE (drawable_view->priv->filter_drawable)); index = gimp_container_get_child_index (container, - GIMP_OBJECT (filter)); + GIMP_OBJECT (drawable_view->priv->filter)); n_children = gimp_container_get_n_children (container); /* TODO: For now, prevent raising/lowering tool operations like Warp. */ - op_node = gimp_drawable_filter_get_operation (filter); + op_node = gimp_drawable_filter_get_operation (drawable_view->priv->filter); if (op_node && ! strcmp (gegl_node_get_operation (op_node), "GraphNode")) is_blocked_op = TRUE; @@ -1068,11 +1081,11 @@ gimp_drawable_tree_view_effects_filters_selected (GimpContainerView *view, is_blocked_op = TRUE; } - gtk_widget_set_sensitive (drawable_view->priv->effects_remove_button, + gtk_widget_set_sensitive (drawable_view->priv->filters_remove_button, ! is_blocked_op); - gtk_widget_set_sensitive (drawable_view->priv->effects_raise_button, + gtk_widget_set_sensitive (drawable_view->priv->filters_raise_button, (index != 0) && ! is_blocked_op); - gtk_widget_set_sensitive (drawable_view->priv->effects_lower_button, + gtk_widget_set_sensitive (drawable_view->priv->filters_lower_button, (index != n_children - 1) && ! is_blocked_op); } @@ -1085,7 +1098,7 @@ gimp_drawable_tree_view_effects_activate_filter (GtkWidget *widget, gpointer insert_data, GimpDrawableTreeView *view) { - if (gtk_widget_get_sensitive (view->priv->effects_edit_button)) + if (gtk_widget_get_sensitive (view->priv->filters_edit_button)) gimp_drawable_tree_view_effects_edit_clicked (widget, view); } @@ -1100,7 +1113,7 @@ gimp_drawable_tree_view_filter_active_changed (GimpFilter *filter, if (iter) gtk_tree_store_set (GTK_TREE_STORE (view->model), iter, - COLUMN_EFFECTS_ACTIVE, + COLUMN_FILTERS_ACTIVE, gimp_filter_get_active (filter), -1); } @@ -1151,7 +1164,7 @@ static void gimp_drawable_tree_view_effects_visible_all_toggled (GtkWidget *widget, GimpDrawableTreeView *view) { - if (view->priv->effects_drawable) + if (view->priv->filter_drawable) { GimpContainer *filters; GList *list; @@ -1159,7 +1172,7 @@ gimp_drawable_tree_view_effects_visible_all_toggled (GtkWidget *widge visible = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); - filters = gimp_drawable_get_filters (GIMP_DRAWABLE (view->priv->effects_drawable)); + filters = gimp_drawable_get_filters (GIMP_DRAWABLE (view->priv->filter_drawable)); for (list = GIMP_LIST (filters)->queue->head; list; @@ -1173,7 +1186,7 @@ gimp_drawable_tree_view_effects_visible_all_toggled (GtkWidget *widge } } - gimp_item_refresh_filters (GIMP_ITEM (view->priv->effects_drawable)); + gimp_item_refresh_filters (GIMP_ITEM (view->priv->filter_drawable)); } } @@ -1185,10 +1198,10 @@ gimp_drawable_tree_view_effects_edit_clicked (GtkWidget *widget, GimpDrawable *drawable; GeglNode *op; - if (! GIMP_IS_DRAWABLE_FILTER (view->priv->effects_filter)) + if (! GIMP_IS_DRAWABLE_FILTER (view->priv->filter)) return; - drawable = gimp_drawable_filter_get_drawable (view->priv->effects_filter); + drawable = gimp_drawable_filter_get_drawable (view->priv->filter); if (drawable && GIMP_IS_DRAWABLE (drawable)) { @@ -1208,7 +1221,7 @@ gimp_drawable_tree_view_effects_edit_clicked (GtkWidget *widget, return; } - op = gimp_drawable_filter_get_operation (view->priv->effects_filter); + op = gimp_drawable_filter_get_operation (view->priv->filter); if (op) { GimpProcedure *procedure; @@ -1216,7 +1229,7 @@ gimp_drawable_tree_view_effects_edit_clicked (GtkWidget *widget, gchar *operation; gchar *name; - g_object_get (view->priv->effects_filter, + g_object_get (view->priv->filter, "name", &name, NULL); g_object_get (op, @@ -1226,7 +1239,7 @@ gimp_drawable_tree_view_effects_edit_clicked (GtkWidget *widget, if (operation) { procedure = gimp_gegl_procedure_new (image->gimp, - view->priv->effects_filter, + view->priv->filter, GIMP_RUN_INTERACTIVE, NULL, operation, name, @@ -1258,33 +1271,33 @@ gimp_drawable_tree_view_effects_raise_clicked (GtkWidget *widget, { GimpImage *image = gimp_item_tree_view_get_image (GIMP_ITEM_TREE_VIEW (view)); - if (! GIMP_IS_DRAWABLE_FILTER (view->priv->effects_filter)) + if (! GIMP_IS_DRAWABLE_FILTER (view->priv->filter)) return; - if (gimp_drawable_filter_get_mask (view->priv->effects_filter) == NULL) + if (gimp_drawable_filter_get_mask (view->priv->filter) == NULL) { gimp_message_literal (image->gimp, G_OBJECT (view), GIMP_MESSAGE_ERROR, _("Cannot reorder a filter that is being edited.")); return; } - if (gimp_drawable_raise_filter (view->priv->effects_drawable, - GIMP_FILTER (view->priv->effects_filter))) + if (gimp_drawable_raise_filter (view->priv->filter_drawable, + GIMP_FILTER (view->priv->filter))) { - if (gtk_widget_get_sensitive (view->priv->effects_edit_button)) + if (gtk_widget_get_sensitive (view->priv->filters_edit_button)) { GimpContainer *filters; gint index; filters = - gimp_drawable_get_filters (GIMP_DRAWABLE (view->priv->effects_drawable)); + gimp_drawable_get_filters (GIMP_DRAWABLE (view->priv->filter_drawable)); index = gimp_container_get_child_index (filters, - GIMP_OBJECT (view->priv->effects_filter)); + GIMP_OBJECT (view->priv->filter)); - gtk_widget_set_sensitive (view->priv->effects_lower_button, TRUE); + gtk_widget_set_sensitive (view->priv->filters_lower_button, TRUE); if (index == 0) - gtk_widget_set_sensitive (view->priv->effects_raise_button, FALSE); + gtk_widget_set_sensitive (view->priv->filters_raise_button, FALSE); } } } @@ -1295,33 +1308,33 @@ gimp_drawable_tree_view_effects_lower_clicked (GtkWidget *widget, { GimpImage *image = gimp_item_tree_view_get_image (GIMP_ITEM_TREE_VIEW (view)); - if (! GIMP_IS_DRAWABLE_FILTER (view->priv->effects_filter)) + if (! GIMP_IS_DRAWABLE_FILTER (view->priv->filter)) return; - if (gimp_drawable_filter_get_mask (view->priv->effects_filter) == NULL) + if (gimp_drawable_filter_get_mask (view->priv->filter) == NULL) { gimp_message_literal (image->gimp, G_OBJECT (view), GIMP_MESSAGE_ERROR, _("Cannot reorder a filter that is being edited.")); return; } - if (gimp_drawable_lower_filter (view->priv->effects_drawable, - GIMP_FILTER (view->priv->effects_filter))) + if (gimp_drawable_lower_filter (view->priv->filter_drawable, + GIMP_FILTER (view->priv->filter))) { - if (gtk_widget_get_sensitive (view->priv->effects_edit_button)) + if (gtk_widget_get_sensitive (view->priv->filters_edit_button)) { GimpContainer *filters; gint index; filters = - gimp_drawable_get_filters (GIMP_DRAWABLE (view->priv->effects_drawable)); + gimp_drawable_get_filters (GIMP_DRAWABLE (view->priv->filter_drawable)); index = gimp_container_get_child_index (filters, - GIMP_OBJECT (view->priv->effects_filter)); + GIMP_OBJECT (view->priv->filter)); - gtk_widget_set_sensitive (view->priv->effects_raise_button, TRUE); + gtk_widget_set_sensitive (view->priv->filters_raise_button, TRUE); if (index == gimp_container_get_n_children (filters) - 1) - gtk_widget_set_sensitive (view->priv->effects_lower_button, FALSE); + gtk_widget_set_sensitive (view->priv->filters_lower_button, FALSE); } } } @@ -1333,7 +1346,7 @@ gimp_drawable_tree_view_effects_merge_clicked (GtkWidget *widget, GimpContext *context; GimpToolInfo *active_tool; - if (! GIMP_IS_DRAWABLE_FILTER (view->priv->effects_filter)) + if (! GIMP_IS_DRAWABLE_FILTER (view->priv->filter)) return; /* Commit GEGL-based tools before trying to merge filters */ @@ -1348,13 +1361,13 @@ gimp_drawable_tree_view_effects_merge_clicked (GtkWidget *widget, gimp_context_get_display (context)); } - if (view->priv->effects_drawable && - ! gimp_viewable_get_children (GIMP_VIEWABLE (view->priv->effects_drawable))) + if (view->priv->filter_drawable && + ! gimp_viewable_get_children (GIMP_VIEWABLE (view->priv->filter_drawable))) { GimpImage *image = gimp_item_tree_view_get_image (GIMP_ITEM_TREE_VIEW (view)); /* Don't merge if the layer is currently locked */ - if (gimp_item_get_lock_content (GIMP_ITEM (view->priv->effects_drawable))) + if (gimp_item_get_lock_content (GIMP_ITEM (view->priv->filter_drawable))) { gimp_message_literal (image->gimp, G_OBJECT (view), GIMP_MESSAGE_WARNING, @@ -1362,15 +1375,15 @@ gimp_drawable_tree_view_effects_merge_clicked (GtkWidget *widget, return; } - gimp_drawable_merge_filters (GIMP_DRAWABLE (view->priv->effects_drawable)); - gimp_drawable_clear_filters (GIMP_DRAWABLE (view->priv->effects_drawable)); + gimp_drawable_merge_filters (GIMP_DRAWABLE (view->priv->filter_drawable)); + gimp_drawable_clear_filters (GIMP_DRAWABLE (view->priv->filter_drawable)); - view->priv->effects_filter = NULL; + view->priv->filter = NULL; /* Close NDE pop-over on successful merge */ - gtk_widget_set_visible (view->priv->effects_popover, FALSE); + gtk_widget_hide (view->priv->filters_popover); - gimp_item_refresh_filters (GIMP_ITEM (view->priv->effects_drawable)); + gimp_item_refresh_filters (GIMP_ITEM (view->priv->filter_drawable)); } } @@ -1378,28 +1391,28 @@ static void gimp_drawable_tree_view_effects_remove_clicked (GtkWidget *widget, GimpDrawableTreeView *view) { - if (view->priv->effects_drawable) + if (view->priv->filter_drawable) { GimpImage *image = gimp_item_tree_view_get_image (GIMP_ITEM_TREE_VIEW (view)); GimpContainer *filters; - filters = gimp_drawable_get_filters (view->priv->effects_drawable); + filters = gimp_drawable_get_filters (view->priv->filter_drawable); if (gimp_container_have (filters, - GIMP_OBJECT (view->priv->effects_filter))) + GIMP_OBJECT (view->priv->filter))) { gimp_image_undo_push_filter_remove (image, _("Remove filter"), - view->priv->effects_drawable, - view->priv->effects_filter); + view->priv->filter_drawable, + view->priv->filter); - gimp_drawable_filter_abort (view->priv->effects_filter); + gimp_drawable_filter_abort (view->priv->filter); /* Toggle the popover off if all effects are deleted */ if (gimp_container_get_n_children (filters) == 0) - gtk_widget_set_visible (view->priv->effects_popover, FALSE); + gtk_widget_hide (view->priv->filters_popover); } - gimp_item_refresh_filters (GIMP_ITEM (view->priv->effects_drawable)); + gimp_item_refresh_filters (GIMP_ITEM (view->priv->filter_drawable)); } }