static void cut_named_buffer_callback (GtkWidget *widget, const gchar *name, gpointer data) { GimpImage *image = GIMP_IMAGE (data); GimpDrawable *drawable = gimp_image_get_active_drawable (image); GError *error = NULL; if (! drawable) { gimp_message_literal (image->gimp, NULL, GIMP_MESSAGE_WARNING, _("There is no active layer or channel to cut from.")); return; } if (! (name && strlen (name))) name = _("(Unnamed Buffer)"); if (gimp_edit_named_cut (image, name, drawable, gimp_get_user_context (image->gimp), &error)) { gimp_image_flush (image); } else { gimp_message_literal (image->gimp, NULL, GIMP_MESSAGE_WARNING, error->message); g_clear_error (&error); } }
static GimpValueArray * edit_named_cut_invoker (GimpProcedure *procedure, Gimp *gimp, GimpContext *context, GimpProgress *progress, const GimpValueArray *args, GError **error) { gboolean success = TRUE; GimpValueArray *return_vals; GimpDrawable *drawable; const gchar *buffer_name; gchar *real_name = NULL; drawable = gimp_value_get_drawable (gimp_value_array_index (args, 0), gimp); buffer_name = g_value_get_string (gimp_value_array_index (args, 1)); if (success) { if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, GIMP_PDB_ITEM_CONTENT, error) && gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error)) { GimpImage *image = gimp_item_get_image (GIMP_ITEM (drawable)); GError *my_error = NULL; real_name = (gchar *) gimp_edit_named_cut (image, buffer_name, drawable, context, &my_error); if (real_name) { real_name = g_strdup (real_name); } else { gimp_message_literal (gimp, G_OBJECT (progress), GIMP_MESSAGE_WARNING, my_error->message); g_clear_error (&my_error); } } else success = FALSE; } return_vals = gimp_procedure_get_return_values (procedure, success, error ? *error : NULL); if (success) g_value_take_string (gimp_value_array_index (return_vals, 1), real_name); return return_vals; }