diff --git a/app/actions/filters-actions.c b/app/actions/filters-actions.c index 521dbc4f40..a7090710ba 100644 --- a/app/actions/filters-actions.c +++ b/app/actions/filters-actions.c @@ -911,6 +911,7 @@ filters_actions_update (GimpActionGroup *group, gboolean gray = FALSE; gboolean alpha = FALSE; gboolean supports_alpha = FALSE; + gboolean is_group = FALSE; image = action_data_get_image (data); @@ -937,7 +938,7 @@ filters_actions_update (GimpActionGroup *group, writable = ! gimp_item_is_content_locked (item, NULL); if (gimp_viewable_get_children (GIMP_VIEWABLE (drawable))) - writable = FALSE; + is_group = TRUE; } g_list_free (drawables); @@ -947,7 +948,7 @@ filters_actions_update (GimpActionGroup *group, gimp_action_group_set_action_sensitive (group, action, (condition) != 0, NULL) SET_SENSITIVE ("filters-alien-map", writable); - SET_SENSITIVE ("filters-antialias", writable); + SET_SENSITIVE ("filters-antialias", writable && !is_group); SET_SENSITIVE ("filters-apply-canvas", writable); SET_SENSITIVE ("filters-apply-lens", writable); SET_SENSITIVE ("filters-bayer-matrix", writable); @@ -974,11 +975,11 @@ filters_actions_update (GimpActionGroup *group, SET_SENSITIVE ("filters-desaturate", writable && !gray); SET_SENSITIVE ("filters-difference-of-gaussians", writable); SET_SENSITIVE ("filters-diffraction-patterns", writable); - SET_SENSITIVE ("filters-dilate", writable); + SET_SENSITIVE ("filters-dilate", writable && !is_group); SET_SENSITIVE ("filters-displace", writable); SET_SENSITIVE ("filters-distance-map", writable); SET_SENSITIVE ("filters-dropshadow", writable && alpha); - SET_SENSITIVE ("filters-edge", writable); + SET_SENSITIVE ("filters-edge", writable && !is_group); SET_SENSITIVE ("filters-edge-laplace", writable); SET_SENSITIVE ("filters-edge-neon", writable); SET_SENSITIVE ("filters-edge-sobel", writable); @@ -997,9 +998,9 @@ filters_actions_update (GimpActionGroup *group, SET_SENSITIVE ("filters-hue-chroma", writable); SET_SENSITIVE ("filters-hue-saturation", writable && !gray); SET_SENSITIVE ("filters-illusion", writable); - SET_SENSITIVE ("filters-invert-linear", writable); - SET_SENSITIVE ("filters-invert-perceptual", writable); - SET_SENSITIVE ("filters-invert-value", writable); + SET_SENSITIVE ("filters-invert-linear", writable && !is_group); + SET_SENSITIVE ("filters-invert-perceptual", writable && !is_group); + SET_SENSITIVE ("filters-invert-value", writable && !is_group); SET_SENSITIVE ("filters-image-gradient", writable); SET_SENSITIVE ("filters-kaleidoscope", writable); SET_SENSITIVE ("filters-lens-blur", writable); diff --git a/app/core/gimpimage-merge.c b/app/core/gimpimage-merge.c index cd4a32c6ea..d71dae6c00 100644 --- a/app/core/gimpimage-merge.c +++ b/app/core/gimpimage-merge.c @@ -448,6 +448,10 @@ gimp_image_merge_group_layer (GimpImage *image, gimp_layer_set_composite_mode (GIMP_LAYER (group), composite_mode, TRUE); } + /* Merge down filter effects */ + gimp_drawable_merge_filters (GIMP_DRAWABLE (group)); + gimp_drawable_clear_filters (GIMP_DRAWABLE (group)); + layer = GIMP_LAYER (gimp_item_duplicate (GIMP_ITEM (group), GIMP_TYPE_LAYER)); diff --git a/app/tools/gimpfiltertool.c b/app/tools/gimpfiltertool.c index 829bf21c83..6ebb425c3b 100644 --- a/app/tools/gimpfiltertool.c +++ b/app/tools/gimpfiltertool.c @@ -304,15 +304,6 @@ gimp_filter_tool_initialize (GimpTool *tool, } drawable = drawables->data; - if (gimp_viewable_get_children (GIMP_VIEWABLE (drawable))) - { - g_set_error_literal (error, GIMP_ERROR, GIMP_FAILED, - _("Cannot modify the pixels of layer groups.")); - - g_list_free (drawables); - return FALSE; - } - if (gimp_item_is_content_locked (GIMP_ITEM (drawable), &locked_item)) { g_set_error_literal (error, GIMP_ERROR, GIMP_FAILED, diff --git a/app/widgets/gimpitemtreeview.c b/app/widgets/gimpitemtreeview.c index 465290f3a1..84bec9df36 100644 --- a/app/widgets/gimpitemtreeview.c +++ b/app/widgets/gimpitemtreeview.c @@ -2732,7 +2732,8 @@ gimp_item_tree_view_effects_merged_clicked (GtkWidget *widget, return; } - if (view->priv->effects_drawable) + if (view->priv->effects_drawable && + ! gimp_viewable_get_children (GIMP_VIEWABLE (view->priv->effects_drawable))) { GimpImage *image = view->priv->image; GeglNode *op = gimp_drawable_filter_get_operation (view->priv->effects_filter); @@ -3239,12 +3240,20 @@ static void gimp_item_tree_effects_set_sensitive (GimpItemTreeView *view, gboolean is_sensitive) { + 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))) + 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->effects_merge_button, + (is_sensitive && ! is_group)); gtk_widget_set_sensitive (view->priv->effects_remove_button, is_sensitive); }