widgets: Prevent rearranging floating selection as filter
While we blocked rearranging a floating selection in the NDE GUI, we did not add a check to prevent another filter from being moved into it. Since a floating selection is considered a GimpLayer, applying GimpDrawableFilter operations to it caused a crash. This patch adds more safeguards to prevent this.
This commit is contained in:
@ -2467,13 +2467,18 @@ gimp_item_tree_view_effects_filters_selected (GimpContainerView *view,
|
|||||||
item_view->priv->effects_drawable &&
|
item_view->priv->effects_drawable &&
|
||||||
GIMP_IS_DRAWABLE (item_view->priv->effects_drawable))
|
GIMP_IS_DRAWABLE (item_view->priv->effects_drawable))
|
||||||
{
|
{
|
||||||
GimpDrawableFilter *filter = filters->data;
|
GimpDrawableFilter *filter;
|
||||||
GimpContainer *container;
|
GimpContainer *container;
|
||||||
gint index;
|
gint index = -1;
|
||||||
gint n_children;
|
gint n_children;
|
||||||
gboolean is_tool_op = FALSE;
|
gboolean is_blocked_op = FALSE;
|
||||||
GeglNode *op_node = NULL;
|
GeglNode *op_node = NULL;
|
||||||
|
|
||||||
|
/* Don't set floating selection as active filter */
|
||||||
|
if (GIMP_IS_DRAWABLE_FILTER (filters->data))
|
||||||
|
{
|
||||||
|
filter = filters->data;
|
||||||
|
|
||||||
item_view->priv->effects_filter = filter;
|
item_view->priv->effects_filter = filter;
|
||||||
|
|
||||||
container =
|
container =
|
||||||
@ -2488,14 +2493,19 @@ gimp_item_tree_view_effects_filters_selected (GimpContainerView *view,
|
|||||||
op_node = gimp_drawable_filter_get_operation (filter);
|
op_node = gimp_drawable_filter_get_operation (filter);
|
||||||
if (op_node &&
|
if (op_node &&
|
||||||
! strcmp (gegl_node_get_operation (op_node), "GraphNode"))
|
! strcmp (gegl_node_get_operation (op_node), "GraphNode"))
|
||||||
is_tool_op = TRUE;
|
is_blocked_op = TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
is_blocked_op = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
gtk_widget_set_sensitive (item_view->priv->effects_remove_button,
|
gtk_widget_set_sensitive (item_view->priv->effects_remove_button,
|
||||||
! is_tool_op);
|
! is_blocked_op);
|
||||||
gtk_widget_set_sensitive (item_view->priv->effects_raise_button,
|
gtk_widget_set_sensitive (item_view->priv->effects_raise_button,
|
||||||
(index != 0) && ! is_tool_op);
|
(index != 0) && ! is_blocked_op);
|
||||||
gtk_widget_set_sensitive (item_view->priv->effects_lower_button,
|
gtk_widget_set_sensitive (item_view->priv->effects_lower_button,
|
||||||
(index != n_children - 1) && ! is_tool_op);
|
(index != n_children - 1) && ! is_blocked_op);
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -2771,6 +2781,11 @@ gimp_item_tree_view_effects_lowered_clicked (GtkWidget *widget,
|
|||||||
|
|
||||||
if (index < gimp_container_get_n_children (filters))
|
if (index < gimp_container_get_n_children (filters))
|
||||||
{
|
{
|
||||||
|
/* Don't rearrange filters with floating selection */
|
||||||
|
if (! GIMP_IS_DRAWABLE_FILTER (
|
||||||
|
gimp_container_get_child_by_index (filters, index)))
|
||||||
|
return;
|
||||||
|
|
||||||
gimp_image_undo_push_filter_reorder (image, _("Reorder filter"),
|
gimp_image_undo_push_filter_reorder (image, _("Reorder filter"),
|
||||||
drawable,
|
drawable,
|
||||||
view->priv->effects_filter);
|
view->priv->effects_filter);
|
||||||
|
Reference in New Issue
Block a user