mirror of
https://gitlab.gnome.org/GNOME/gimp.git
synced 2025-07-03 17:33:25 +00:00
core,widgets: Fix filter manipulations on invisible layers
Many actions done on layers require refreshing its filters, by toggling the layer off and on again. When done on an invisible layer, this would turn it visible, which could not be undone. Now, the layer remains invisible.
This commit is contained in:
parent
3b775abc90
commit
a60c1097ab
6 changed files with 32 additions and 57 deletions
|
@ -2107,10 +2107,7 @@ gimp_drawable_end_paint (GimpDrawable *drawable)
|
|||
if (gimp_drawable_has_visible_filters (drawable) &&
|
||||
drawable->private->paint_count == 0)
|
||||
{
|
||||
gimp_item_set_visible (GIMP_ITEM (drawable), FALSE, FALSE);
|
||||
gimp_image_flush (gimp_item_get_image (GIMP_ITEM (drawable)));
|
||||
gimp_item_set_visible (GIMP_ITEM (drawable),TRUE, FALSE);
|
||||
gimp_image_flush (gimp_item_get_image (GIMP_ITEM (drawable)));
|
||||
gimp_item_refresh_filters (GIMP_ITEM (drawable));
|
||||
}
|
||||
|
||||
return result;
|
||||
|
|
|
@ -242,10 +242,7 @@ gimp_drawable_filter_undo_pop (GimpUndo *undo,
|
|||
{
|
||||
gimp_drawable_remove_filter (drawable, GIMP_FILTER (filter));
|
||||
|
||||
gimp_item_set_visible (GIMP_ITEM (drawable), FALSE, FALSE);
|
||||
gimp_image_flush (undo->image);
|
||||
gimp_item_set_visible (GIMP_ITEM (drawable), TRUE, FALSE);
|
||||
gimp_image_flush (undo->image);
|
||||
gimp_item_refresh_filters (GIMP_ITEM (drawable));
|
||||
}
|
||||
}
|
||||
if ((undo_mode == GIMP_UNDO_MODE_UNDO &&
|
||||
|
|
|
@ -2786,3 +2786,20 @@ gimp_item_is_in_set (GimpItem *item,
|
|||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* Hack to make the effects visibly change */
|
||||
void
|
||||
gimp_item_refresh_filters (GimpItem *item)
|
||||
{
|
||||
g_return_if_fail (GIMP_IS_ITEM (item));
|
||||
|
||||
if (gimp_item_is_visible (item))
|
||||
{
|
||||
GimpImage *image = gimp_item_get_image (item);
|
||||
|
||||
gimp_item_set_visible (item, FALSE, FALSE);
|
||||
gimp_image_flush (image);
|
||||
gimp_item_set_visible (item, TRUE, FALSE);
|
||||
gimp_image_flush (image);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -410,5 +410,7 @@ gboolean gimp_item_mask_intersect (GimpItem *item,
|
|||
gboolean gimp_item_is_in_set (GimpItem *item,
|
||||
GimpItemSet set);
|
||||
|
||||
void gimp_item_refresh_filters (GimpItem *item);
|
||||
|
||||
|
||||
#endif /* __GIMP_ITEM_H__ */
|
||||
|
|
|
@ -924,10 +924,7 @@ gimp_filter_tool_options_notify (GimpTool *tool,
|
|||
gimp_container_reorder (filters, GIMP_OBJECT (filter_tool->filter),
|
||||
0);
|
||||
|
||||
gimp_item_set_visible (GIMP_ITEM (drawable), FALSE, FALSE);
|
||||
gimp_image_flush (gimp_item_get_image (GIMP_ITEM (drawable)));
|
||||
gimp_item_set_visible (GIMP_ITEM (drawable), TRUE, FALSE);
|
||||
gimp_image_flush (gimp_item_get_image (GIMP_ITEM (drawable)));
|
||||
gimp_item_refresh_filters (GIMP_ITEM (drawable));
|
||||
}
|
||||
|
||||
g_object_set (filter_tool->filter,
|
||||
|
@ -1199,10 +1196,7 @@ gimp_filter_tool_halt (GimpFilterTool *filter_tool)
|
|||
|
||||
gimp_filter_set_active (GIMP_FILTER (filter_tool->existing_filter), TRUE);
|
||||
|
||||
gimp_item_set_visible (GIMP_ITEM (drawable), FALSE, FALSE);
|
||||
gimp_image_flush (gimp_item_get_image (GIMP_ITEM (drawable)));
|
||||
gimp_item_set_visible (GIMP_ITEM (drawable), TRUE, FALSE);
|
||||
gimp_image_flush (gimp_item_get_image (GIMP_ITEM (drawable)));
|
||||
gimp_item_refresh_filters (GIMP_ITEM (drawable));
|
||||
|
||||
/* Restore buttons in layer tree view */
|
||||
gimp_drawable_filters_changed (gimp_drawable_filter_get_drawable (filter_tool->existing_filter));
|
||||
|
@ -1361,9 +1355,7 @@ gimp_filter_tool_commit (GimpFilterTool *filter_tool,
|
|||
/* TODO: Review when we can apply NDE filters to channels/layer masks */
|
||||
if (GIMP_IS_LAYER (drawable))
|
||||
{
|
||||
gimp_item_set_visible (GIMP_ITEM (drawable), FALSE, FALSE);
|
||||
gimp_image_flush (gimp_display_get_image (tool->display));
|
||||
gimp_item_set_visible (GIMP_ITEM (drawable), TRUE, FALSE);
|
||||
gimp_item_refresh_filters (GIMP_ITEM (drawable));
|
||||
}
|
||||
gimp_image_flush (gimp_display_get_image (tool->display));
|
||||
|
||||
|
@ -1383,10 +1375,7 @@ gimp_filter_tool_commit (GimpFilterTool *filter_tool,
|
|||
|
||||
gimp_filter_set_active (GIMP_FILTER (filter_tool->existing_filter), TRUE);
|
||||
|
||||
gimp_item_set_visible (GIMP_ITEM (drawable), FALSE, FALSE);
|
||||
gimp_image_flush (gimp_item_get_image (GIMP_ITEM (drawable)));
|
||||
gimp_item_set_visible (GIMP_ITEM (drawable), TRUE, FALSE);
|
||||
gimp_image_flush (gimp_item_get_image (GIMP_ITEM (drawable)));
|
||||
gimp_item_refresh_filters (GIMP_ITEM (drawable));
|
||||
}
|
||||
|
||||
filter_tool->existing_filter = NULL;
|
||||
|
@ -1569,10 +1558,7 @@ gimp_filter_tool_create_filter (GimpFilterTool *filter_tool)
|
|||
{
|
||||
gimp_container_reorder (filters, GIMP_OBJECT (filter_tool->filter),
|
||||
count - 1);
|
||||
gimp_item_set_visible (GIMP_ITEM (drawable), FALSE, FALSE);
|
||||
gimp_image_flush (gimp_item_get_image (GIMP_ITEM (drawable)));
|
||||
gimp_item_set_visible (GIMP_ITEM (drawable), TRUE, FALSE);
|
||||
gimp_image_flush (gimp_item_get_image (GIMP_ITEM (drawable)));
|
||||
gimp_item_refresh_filters ((GIMP_ITEM (drawable)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2597,11 +2597,7 @@ gimp_item_tree_view_effects_visible_toggled (GtkCellRendererToggle *toggle,
|
|||
|
||||
gimp_filter_set_active (GIMP_FILTER (filter), ! visible);
|
||||
|
||||
/* Refresh the drawable */
|
||||
gimp_item_set_visible (GIMP_ITEM (drawable), FALSE, FALSE);
|
||||
gimp_image_flush (image);
|
||||
gimp_item_set_visible (GIMP_ITEM (drawable), TRUE, FALSE);
|
||||
gimp_image_flush (image);
|
||||
gimp_item_refresh_filters (GIMP_ITEM (drawable));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2632,11 +2628,7 @@ gimp_item_tree_view_effects_visible_all_toggled (GtkWidget *widget,
|
|||
}
|
||||
}
|
||||
|
||||
/* Hack to make the effects visibly change */
|
||||
gimp_item_set_visible (GIMP_ITEM (view->priv->effects_drawable), FALSE, FALSE);
|
||||
gimp_image_flush (image);
|
||||
gimp_item_set_visible (GIMP_ITEM (view->priv->effects_drawable), TRUE, FALSE);
|
||||
gimp_image_flush (image);
|
||||
gimp_item_refresh_filters (GIMP_ITEM (view->priv->effects_drawable));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2762,11 +2754,7 @@ gimp_item_tree_view_effects_raised_clicked (GtkWidget *widget,
|
|||
gtk_widget_set_sensitive (view->priv->effects_raise_button, FALSE);
|
||||
}
|
||||
|
||||
/* Hack to make the effects visibly change */
|
||||
gimp_item_set_visible (GIMP_ITEM (drawable), FALSE, FALSE);
|
||||
gimp_image_flush (image);
|
||||
gimp_item_set_visible (GIMP_ITEM (drawable), TRUE, FALSE);
|
||||
gimp_image_flush (image);
|
||||
gimp_item_refresh_filters (GIMP_ITEM (view->priv->effects_drawable));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2822,11 +2810,7 @@ gimp_item_tree_view_effects_lowered_clicked (GtkWidget *widget,
|
|||
gtk_widget_set_sensitive (view->priv->effects_lower_button, FALSE);
|
||||
}
|
||||
|
||||
/* Hack to make the effects visibly change */
|
||||
gimp_item_set_visible (GIMP_ITEM (drawable), FALSE, FALSE);
|
||||
gimp_image_flush (image);
|
||||
gimp_item_set_visible (GIMP_ITEM (drawable), TRUE, FALSE);
|
||||
gimp_image_flush (image);
|
||||
gimp_item_refresh_filters (GIMP_ITEM (drawable));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2876,11 +2860,7 @@ gimp_item_tree_view_effects_merged_clicked (GtkWidget *widget,
|
|||
/* Close NDE pop-over on successful merge */
|
||||
gtk_widget_set_visible (view->priv->effects_popover, FALSE);
|
||||
|
||||
/* Hack to make the effects visibly change */
|
||||
gimp_item_set_visible (GIMP_ITEM (view->priv->effects_drawable), FALSE, FALSE);
|
||||
gimp_image_flush (image);
|
||||
gimp_item_set_visible (GIMP_ITEM (view->priv->effects_drawable), TRUE, FALSE);
|
||||
gimp_image_flush (image);
|
||||
gimp_item_refresh_filters (GIMP_ITEM (view->priv->effects_drawable));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2909,11 +2889,7 @@ gimp_item_tree_view_effects_removed_clicked (GtkWidget *widget,
|
|||
gtk_widget_set_visible (view->priv->effects_popover, FALSE);
|
||||
}
|
||||
|
||||
/* Hack to make the effects visibly change */
|
||||
gimp_item_set_visible (GIMP_ITEM (view->priv->effects_drawable), FALSE, FALSE);
|
||||
gimp_image_flush (image);
|
||||
gimp_item_set_visible (GIMP_ITEM (view->priv->effects_drawable), TRUE, FALSE);
|
||||
gimp_image_flush (image);
|
||||
gimp_item_refresh_filters (GIMP_ITEM (view->priv->effects_drawable));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue