get rid of remaining (invisible) layers after merging visible layers

* libgimp/gimpexport.c: get rid of remaining (invisible) layers
        after merging visible layers

        * app/channel_ops.[ch]: applied a patch from Garry R. Osgood that
	seems to fix bugs #2261 and #2382 (crashes when using offset).
        A few more changes made the dialog actually work...

        * app/ops_buttons.c: plugged a memleak I introduced yesterday

--Sven
This commit is contained in:
Sven Neumann 1999-10-24 13:26:30 +00:00
parent 7a432a7734
commit 2df06061bd
13 changed files with 194 additions and 160 deletions

View File

@ -1,3 +1,14 @@
Sun Oct 24 15:24:15 MEST 1999 Sven Neumann <sven@gimp.org>
* libgimp/gimpexport.c: get rid of remaining (invisible) layers
after merging visible layers
* app/channel_ops.[ch]: applied a patch from Garry R. Osgood that seems
to fix bugs #2261 and #2382 (crashes when using offset).
A few more changes made the dialog actually work...
* app/ops_buttons.c: plugged a memleak I introduced yesterday
Sat Oct 23 22:26:59 MEST 1999 Sven Neumann <sven@gimp.org>
* app/channels_dialog.c

View File

@ -177,26 +177,29 @@ channel_ops_offset (GimpImage* gimage)
radio_button = gtk_radio_button_new_with_label (group, _("Background"));
group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio_button));
gtk_box_pack_start (GTK_BOX (radio_box), radio_button, FALSE, FALSE, 0);
gtk_object_set_data (GTK_OBJECT (radio_button), "merge_type",
gtk_object_set_data (GTK_OBJECT (radio_button), "fill_type",
(gpointer) OFFSET_BACKGROUND);
gtk_signal_connect (GTK_OBJECT (radio_button), "toggled",
(GtkSignalFunc) offset_fill_type_update,
&off_d->fill_type);
off_d);
gtk_widget_show (radio_button);
radio_button = gtk_radio_button_new_with_label (group, _("Transparent"));
group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio_button));
gtk_box_pack_start (GTK_BOX (radio_box), radio_button, FALSE, FALSE, 0);
gtk_object_set_data (GTK_OBJECT (radio_button), "fill_type",
(gpointer) OFFSET_TRANSPARENT);
gtk_signal_connect (GTK_OBJECT (radio_button), "toggled",
(GtkSignalFunc) offset_fill_type_update,
off_d);
gtk_widget_show (radio_button);
if (drawable_has_alpha (drawable))
{
radio_button = gtk_radio_button_new_with_label (group, _("Transparent"));
group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio_button));
gtk_box_pack_start (GTK_BOX (radio_box), radio_button, FALSE, FALSE, 0);
gtk_object_set_data (GTK_OBJECT (radio_button), "merge_type",
(gpointer) OFFSET_TRANSPARENT);
gtk_signal_connect (GTK_OBJECT (radio_button), "toggled",
(GtkSignalFunc) offset_fill_type_update,
&off_d->fill_type);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_button), TRUE);
gtk_widget_show (radio_button);
}
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_button), TRUE);
else
gtk_widget_set_sensitive (radio_button, FALSE);
gtk_widget_show (radio_box);
gtk_widget_show (off_d->fill_options);
/* The by half height and half width option */
push = gtk_button_new_with_label (_("Offset by (x/2),(y/2)"));
@ -204,9 +207,6 @@ channel_ops_offset (GimpImage* gimage)
gtk_box_pack_start (GTK_BOX (vbox), push, FALSE, FALSE, 0);
gtk_widget_show (push);
gtk_widget_show (radio_box);
gtk_widget_show (off_d->fill_options);
/* Hook up the wrap around */
gtk_signal_connect (GTK_OBJECT (check), "toggled",
(GtkSignalFunc) offset_wraparound_update,
@ -223,12 +223,12 @@ channel_ops_offset (GimpImage* gimage)
}
void
offset (GimpImage *gimage,
GimpDrawable *drawable,
gboolean wrap_around,
gint fill_type,
gint offset_x,
gint offset_y)
offset (GimpImage *gimage,
GimpDrawable *drawable,
gboolean wrap_around,
ChannelOffsetType fill_type,
gint offset_x,
gint offset_y)
{
PixelRegion srcPR, destPR;
TileManager *new_tiles;
@ -469,6 +469,7 @@ offset_ok_callback (GtkWidget *widget,
gint offset_y;
off_d = (OffsetDialog *) data;
if ((gimage = off_d->gimage) != NULL)
{
drawable = gimage_active_drawable (gimage);
@ -522,7 +523,6 @@ offset_fill_type_update (GtkWidget *widget,
if (GTK_TOGGLE_BUTTON (widget)->active)
off_d->fill_type =
(ChannelOffsetType) gtk_object_get_data (GTK_OBJECT (widget), "fill_type");
}
static void

View File

@ -31,13 +31,14 @@ typedef enum
void channel_ops_offset (GimpImage *gimage);
void channel_ops_duplicate (GimpImage *gimage);
void offset (GimpImage *gimage,
GimpDrawable *drawable,
gboolean wrap_around,
gint fill_type,
gint offset_x,
gint offset_y);
void offset (GimpImage *gimage,
GimpDrawable *drawable,
gboolean wrap_around,
ChannelOffsetType fill_type,
gint offset_x,
gint offset_y);
GimpImage * duplicate (GimpImage *gimage);
GimpImage * duplicate (GimpImage *gimage);
#endif /* __CHANNEL_OPS_H__ */

View File

@ -177,26 +177,29 @@ channel_ops_offset (GimpImage* gimage)
radio_button = gtk_radio_button_new_with_label (group, _("Background"));
group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio_button));
gtk_box_pack_start (GTK_BOX (radio_box), radio_button, FALSE, FALSE, 0);
gtk_object_set_data (GTK_OBJECT (radio_button), "merge_type",
gtk_object_set_data (GTK_OBJECT (radio_button), "fill_type",
(gpointer) OFFSET_BACKGROUND);
gtk_signal_connect (GTK_OBJECT (radio_button), "toggled",
(GtkSignalFunc) offset_fill_type_update,
&off_d->fill_type);
off_d);
gtk_widget_show (radio_button);
radio_button = gtk_radio_button_new_with_label (group, _("Transparent"));
group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio_button));
gtk_box_pack_start (GTK_BOX (radio_box), radio_button, FALSE, FALSE, 0);
gtk_object_set_data (GTK_OBJECT (radio_button), "fill_type",
(gpointer) OFFSET_TRANSPARENT);
gtk_signal_connect (GTK_OBJECT (radio_button), "toggled",
(GtkSignalFunc) offset_fill_type_update,
off_d);
gtk_widget_show (radio_button);
if (drawable_has_alpha (drawable))
{
radio_button = gtk_radio_button_new_with_label (group, _("Transparent"));
group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio_button));
gtk_box_pack_start (GTK_BOX (radio_box), radio_button, FALSE, FALSE, 0);
gtk_object_set_data (GTK_OBJECT (radio_button), "merge_type",
(gpointer) OFFSET_TRANSPARENT);
gtk_signal_connect (GTK_OBJECT (radio_button), "toggled",
(GtkSignalFunc) offset_fill_type_update,
&off_d->fill_type);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_button), TRUE);
gtk_widget_show (radio_button);
}
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_button), TRUE);
else
gtk_widget_set_sensitive (radio_button, FALSE);
gtk_widget_show (radio_box);
gtk_widget_show (off_d->fill_options);
/* The by half height and half width option */
push = gtk_button_new_with_label (_("Offset by (x/2),(y/2)"));
@ -204,9 +207,6 @@ channel_ops_offset (GimpImage* gimage)
gtk_box_pack_start (GTK_BOX (vbox), push, FALSE, FALSE, 0);
gtk_widget_show (push);
gtk_widget_show (radio_box);
gtk_widget_show (off_d->fill_options);
/* Hook up the wrap around */
gtk_signal_connect (GTK_OBJECT (check), "toggled",
(GtkSignalFunc) offset_wraparound_update,
@ -223,12 +223,12 @@ channel_ops_offset (GimpImage* gimage)
}
void
offset (GimpImage *gimage,
GimpDrawable *drawable,
gboolean wrap_around,
gint fill_type,
gint offset_x,
gint offset_y)
offset (GimpImage *gimage,
GimpDrawable *drawable,
gboolean wrap_around,
ChannelOffsetType fill_type,
gint offset_x,
gint offset_y)
{
PixelRegion srcPR, destPR;
TileManager *new_tiles;
@ -469,6 +469,7 @@ offset_ok_callback (GtkWidget *widget,
gint offset_y;
off_d = (OffsetDialog *) data;
if ((gimage = off_d->gimage) != NULL)
{
drawable = gimage_active_drawable (gimage);
@ -522,7 +523,6 @@ offset_fill_type_update (GtkWidget *widget,
if (GTK_TOGGLE_BUTTON (widget)->active)
off_d->fill_type =
(ChannelOffsetType) gtk_object_get_data (GTK_OBJECT (widget), "fill_type");
}
static void

View File

@ -31,13 +31,14 @@ typedef enum
void channel_ops_offset (GimpImage *gimage);
void channel_ops_duplicate (GimpImage *gimage);
void offset (GimpImage *gimage,
GimpDrawable *drawable,
gboolean wrap_around,
gint fill_type,
gint offset_x,
gint offset_y);
void offset (GimpImage *gimage,
GimpDrawable *drawable,
gboolean wrap_around,
ChannelOffsetType fill_type,
gint offset_x,
gint offset_y);
GimpImage * duplicate (GimpImage *gimage);
GimpImage * duplicate (GimpImage *gimage);
#endif /* __CHANNEL_OPS_H__ */

View File

@ -177,26 +177,29 @@ channel_ops_offset (GimpImage* gimage)
radio_button = gtk_radio_button_new_with_label (group, _("Background"));
group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio_button));
gtk_box_pack_start (GTK_BOX (radio_box), radio_button, FALSE, FALSE, 0);
gtk_object_set_data (GTK_OBJECT (radio_button), "merge_type",
gtk_object_set_data (GTK_OBJECT (radio_button), "fill_type",
(gpointer) OFFSET_BACKGROUND);
gtk_signal_connect (GTK_OBJECT (radio_button), "toggled",
(GtkSignalFunc) offset_fill_type_update,
&off_d->fill_type);
off_d);
gtk_widget_show (radio_button);
radio_button = gtk_radio_button_new_with_label (group, _("Transparent"));
group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio_button));
gtk_box_pack_start (GTK_BOX (radio_box), radio_button, FALSE, FALSE, 0);
gtk_object_set_data (GTK_OBJECT (radio_button), "fill_type",
(gpointer) OFFSET_TRANSPARENT);
gtk_signal_connect (GTK_OBJECT (radio_button), "toggled",
(GtkSignalFunc) offset_fill_type_update,
off_d);
gtk_widget_show (radio_button);
if (drawable_has_alpha (drawable))
{
radio_button = gtk_radio_button_new_with_label (group, _("Transparent"));
group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio_button));
gtk_box_pack_start (GTK_BOX (radio_box), radio_button, FALSE, FALSE, 0);
gtk_object_set_data (GTK_OBJECT (radio_button), "merge_type",
(gpointer) OFFSET_TRANSPARENT);
gtk_signal_connect (GTK_OBJECT (radio_button), "toggled",
(GtkSignalFunc) offset_fill_type_update,
&off_d->fill_type);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_button), TRUE);
gtk_widget_show (radio_button);
}
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_button), TRUE);
else
gtk_widget_set_sensitive (radio_button, FALSE);
gtk_widget_show (radio_box);
gtk_widget_show (off_d->fill_options);
/* The by half height and half width option */
push = gtk_button_new_with_label (_("Offset by (x/2),(y/2)"));
@ -204,9 +207,6 @@ channel_ops_offset (GimpImage* gimage)
gtk_box_pack_start (GTK_BOX (vbox), push, FALSE, FALSE, 0);
gtk_widget_show (push);
gtk_widget_show (radio_box);
gtk_widget_show (off_d->fill_options);
/* Hook up the wrap around */
gtk_signal_connect (GTK_OBJECT (check), "toggled",
(GtkSignalFunc) offset_wraparound_update,
@ -223,12 +223,12 @@ channel_ops_offset (GimpImage* gimage)
}
void
offset (GimpImage *gimage,
GimpDrawable *drawable,
gboolean wrap_around,
gint fill_type,
gint offset_x,
gint offset_y)
offset (GimpImage *gimage,
GimpDrawable *drawable,
gboolean wrap_around,
ChannelOffsetType fill_type,
gint offset_x,
gint offset_y)
{
PixelRegion srcPR, destPR;
TileManager *new_tiles;
@ -469,6 +469,7 @@ offset_ok_callback (GtkWidget *widget,
gint offset_y;
off_d = (OffsetDialog *) data;
if ((gimage = off_d->gimage) != NULL)
{
drawable = gimage_active_drawable (gimage);
@ -522,7 +523,6 @@ offset_fill_type_update (GtkWidget *widget,
if (GTK_TOGGLE_BUTTON (widget)->active)
off_d->fill_type =
(ChannelOffsetType) gtk_object_get_data (GTK_OBJECT (widget), "fill_type");
}
static void

View File

@ -31,13 +31,14 @@ typedef enum
void channel_ops_offset (GimpImage *gimage);
void channel_ops_duplicate (GimpImage *gimage);
void offset (GimpImage *gimage,
GimpDrawable *drawable,
gboolean wrap_around,
gint fill_type,
gint offset_x,
gint offset_y);
void offset (GimpImage *gimage,
GimpDrawable *drawable,
gboolean wrap_around,
ChannelOffsetType fill_type,
gint offset_x,
gint offset_y);
GimpImage * duplicate (GimpImage *gimage);
GimpImage * duplicate (GimpImage *gimage);
#endif /* __CHANNEL_OPS_H__ */

View File

@ -177,26 +177,29 @@ channel_ops_offset (GimpImage* gimage)
radio_button = gtk_radio_button_new_with_label (group, _("Background"));
group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio_button));
gtk_box_pack_start (GTK_BOX (radio_box), radio_button, FALSE, FALSE, 0);
gtk_object_set_data (GTK_OBJECT (radio_button), "merge_type",
gtk_object_set_data (GTK_OBJECT (radio_button), "fill_type",
(gpointer) OFFSET_BACKGROUND);
gtk_signal_connect (GTK_OBJECT (radio_button), "toggled",
(GtkSignalFunc) offset_fill_type_update,
&off_d->fill_type);
off_d);
gtk_widget_show (radio_button);
radio_button = gtk_radio_button_new_with_label (group, _("Transparent"));
group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio_button));
gtk_box_pack_start (GTK_BOX (radio_box), radio_button, FALSE, FALSE, 0);
gtk_object_set_data (GTK_OBJECT (radio_button), "fill_type",
(gpointer) OFFSET_TRANSPARENT);
gtk_signal_connect (GTK_OBJECT (radio_button), "toggled",
(GtkSignalFunc) offset_fill_type_update,
off_d);
gtk_widget_show (radio_button);
if (drawable_has_alpha (drawable))
{
radio_button = gtk_radio_button_new_with_label (group, _("Transparent"));
group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio_button));
gtk_box_pack_start (GTK_BOX (radio_box), radio_button, FALSE, FALSE, 0);
gtk_object_set_data (GTK_OBJECT (radio_button), "merge_type",
(gpointer) OFFSET_TRANSPARENT);
gtk_signal_connect (GTK_OBJECT (radio_button), "toggled",
(GtkSignalFunc) offset_fill_type_update,
&off_d->fill_type);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_button), TRUE);
gtk_widget_show (radio_button);
}
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_button), TRUE);
else
gtk_widget_set_sensitive (radio_button, FALSE);
gtk_widget_show (radio_box);
gtk_widget_show (off_d->fill_options);
/* The by half height and half width option */
push = gtk_button_new_with_label (_("Offset by (x/2),(y/2)"));
@ -204,9 +207,6 @@ channel_ops_offset (GimpImage* gimage)
gtk_box_pack_start (GTK_BOX (vbox), push, FALSE, FALSE, 0);
gtk_widget_show (push);
gtk_widget_show (radio_box);
gtk_widget_show (off_d->fill_options);
/* Hook up the wrap around */
gtk_signal_connect (GTK_OBJECT (check), "toggled",
(GtkSignalFunc) offset_wraparound_update,
@ -223,12 +223,12 @@ channel_ops_offset (GimpImage* gimage)
}
void
offset (GimpImage *gimage,
GimpDrawable *drawable,
gboolean wrap_around,
gint fill_type,
gint offset_x,
gint offset_y)
offset (GimpImage *gimage,
GimpDrawable *drawable,
gboolean wrap_around,
ChannelOffsetType fill_type,
gint offset_x,
gint offset_y)
{
PixelRegion srcPR, destPR;
TileManager *new_tiles;
@ -469,6 +469,7 @@ offset_ok_callback (GtkWidget *widget,
gint offset_y;
off_d = (OffsetDialog *) data;
if ((gimage = off_d->gimage) != NULL)
{
drawable = gimage_active_drawable (gimage);
@ -522,7 +523,6 @@ offset_fill_type_update (GtkWidget *widget,
if (GTK_TOGGLE_BUTTON (widget)->active)
off_d->fill_type =
(ChannelOffsetType) gtk_object_get_data (GTK_OBJECT (widget), "fill_type");
}
static void

View File

@ -31,13 +31,14 @@ typedef enum
void channel_ops_offset (GimpImage *gimage);
void channel_ops_duplicate (GimpImage *gimage);
void offset (GimpImage *gimage,
GimpDrawable *drawable,
gboolean wrap_around,
gint fill_type,
gint offset_x,
gint offset_y);
void offset (GimpImage *gimage,
GimpDrawable *drawable,
gboolean wrap_around,
ChannelOffsetType fill_type,
gint offset_x,
gint offset_y);
GimpImage * duplicate (GimpImage *gimage);
GimpImage * duplicate (GimpImage *gimage);
#endif /* __CHANNEL_OPS_H__ */

View File

@ -177,26 +177,29 @@ channel_ops_offset (GimpImage* gimage)
radio_button = gtk_radio_button_new_with_label (group, _("Background"));
group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio_button));
gtk_box_pack_start (GTK_BOX (radio_box), radio_button, FALSE, FALSE, 0);
gtk_object_set_data (GTK_OBJECT (radio_button), "merge_type",
gtk_object_set_data (GTK_OBJECT (radio_button), "fill_type",
(gpointer) OFFSET_BACKGROUND);
gtk_signal_connect (GTK_OBJECT (radio_button), "toggled",
(GtkSignalFunc) offset_fill_type_update,
&off_d->fill_type);
off_d);
gtk_widget_show (radio_button);
radio_button = gtk_radio_button_new_with_label (group, _("Transparent"));
group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio_button));
gtk_box_pack_start (GTK_BOX (radio_box), radio_button, FALSE, FALSE, 0);
gtk_object_set_data (GTK_OBJECT (radio_button), "fill_type",
(gpointer) OFFSET_TRANSPARENT);
gtk_signal_connect (GTK_OBJECT (radio_button), "toggled",
(GtkSignalFunc) offset_fill_type_update,
off_d);
gtk_widget_show (radio_button);
if (drawable_has_alpha (drawable))
{
radio_button = gtk_radio_button_new_with_label (group, _("Transparent"));
group = gtk_radio_button_group (GTK_RADIO_BUTTON (radio_button));
gtk_box_pack_start (GTK_BOX (radio_box), radio_button, FALSE, FALSE, 0);
gtk_object_set_data (GTK_OBJECT (radio_button), "merge_type",
(gpointer) OFFSET_TRANSPARENT);
gtk_signal_connect (GTK_OBJECT (radio_button), "toggled",
(GtkSignalFunc) offset_fill_type_update,
&off_d->fill_type);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_button), TRUE);
gtk_widget_show (radio_button);
}
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_button), TRUE);
else
gtk_widget_set_sensitive (radio_button, FALSE);
gtk_widget_show (radio_box);
gtk_widget_show (off_d->fill_options);
/* The by half height and half width option */
push = gtk_button_new_with_label (_("Offset by (x/2),(y/2)"));
@ -204,9 +207,6 @@ channel_ops_offset (GimpImage* gimage)
gtk_box_pack_start (GTK_BOX (vbox), push, FALSE, FALSE, 0);
gtk_widget_show (push);
gtk_widget_show (radio_box);
gtk_widget_show (off_d->fill_options);
/* Hook up the wrap around */
gtk_signal_connect (GTK_OBJECT (check), "toggled",
(GtkSignalFunc) offset_wraparound_update,
@ -223,12 +223,12 @@ channel_ops_offset (GimpImage* gimage)
}
void
offset (GimpImage *gimage,
GimpDrawable *drawable,
gboolean wrap_around,
gint fill_type,
gint offset_x,
gint offset_y)
offset (GimpImage *gimage,
GimpDrawable *drawable,
gboolean wrap_around,
ChannelOffsetType fill_type,
gint offset_x,
gint offset_y)
{
PixelRegion srcPR, destPR;
TileManager *new_tiles;
@ -469,6 +469,7 @@ offset_ok_callback (GtkWidget *widget,
gint offset_y;
off_d = (OffsetDialog *) data;
if ((gimage = off_d->gimage) != NULL)
{
drawable = gimage_active_drawable (gimage);
@ -522,7 +523,6 @@ offset_fill_type_update (GtkWidget *widget,
if (GTK_TOGGLE_BUTTON (widget)->active)
off_d->fill_type =
(ChannelOffsetType) gtk_object_get_data (GTK_OBJECT (widget), "fill_type");
}
static void

View File

@ -31,13 +31,14 @@ typedef enum
void channel_ops_offset (GimpImage *gimage);
void channel_ops_duplicate (GimpImage *gimage);
void offset (GimpImage *gimage,
GimpDrawable *drawable,
gboolean wrap_around,
gint fill_type,
gint offset_x,
gint offset_y);
void offset (GimpImage *gimage,
GimpDrawable *drawable,
gboolean wrap_around,
ChannelOffsetType fill_type,
gint offset_x,
gint offset_y);
GimpImage * duplicate (GimpImage *gimage);
GimpImage * duplicate (GimpImage *gimage);
#endif /* __CHANNEL_OPS_H__ */

View File

@ -43,6 +43,7 @@ ops_button_box_new (GtkWidget *parent,
GtkStyle *style;
GSList *group = NULL;
GSList *box_list = NULL;
GSList *list;
gint max_width = 0;
gint width;
gint height;
@ -115,10 +116,10 @@ ops_button_box_new (GtkWidget *parent,
ops_button++;
}
for (; box_list; box_list = box_list->next)
for (list = box_list; list; list = list->next)
{
gtk_widget_set_usize (GTK_WIDGET (box_list->data), max_width, -1);
gtk_widget_show (GTK_WIDGET (box_list->data));
gtk_widget_set_usize (GTK_WIDGET (list->data), max_width, -1);
gtk_widget_show (GTK_WIDGET (list->data));
}
g_slist_free (box_list);

View File

@ -38,11 +38,25 @@ typedef struct
/* the functions that do the actual export */
static void
export_merge (gint32 image_ID,
gint32 *drawable_ID)
{
*drawable_ID = gimp_image_merge_visible_layers (image_ID, GIMP_EXPAND_AS_NECESSARY);
gint nlayers;
gint i;
gint32 *layers;
*drawable_ID = gimp_image_merge_visible_layers (image_ID, GIMP_CLIP_TO_IMAGE);
/* remove any remaining (invisible) layers */
layers = gimp_image_get_layers (image_ID, &nlayers);
for (i = 0; i < nlayers; i++)
{
if (layers[i] != *drawable_ID)
gimp_image_remove_layer (image_ID, layers[i]);
}
g_free (layers);
}
static void
@ -97,6 +111,7 @@ export_add_alpha (gint32 image_ID,
g_free (layers);
}
/* a set of predefined actions */
static ExportAction export_action_merge =
@ -190,6 +205,7 @@ static ExportAction export_action_add_alpha =
0
};
/* dialog functions */
static GtkWidget *dialog = NULL;
@ -416,7 +432,7 @@ gimp_export_image (gint32 *image_ID_ptr,
/* check multiple layers */
if (!added_flatten && nlayers > 1)
{
if ((cap & CAN_HANDLE_LAYERS_AS_ANIMATION))
if (cap & CAN_HANDLE_LAYERS_AS_ANIMATION)
actions = g_slist_prepend (actions, &export_action_animate_or_merge);
else if ( !(cap & CAN_HANDLE_LAYERS))
actions = g_slist_prepend (actions, &export_action_merge);
@ -483,6 +499,7 @@ gimp_export_image (gint32 *image_ID_ptr,
action->alt_action (*image_ID_ptr, drawable_ID_ptr);
}
}
g_slist_free (actions);
return (dialog_return);
}