From 2df06061bd224a3986ab13bb4a012b23c041b7cb Mon Sep 17 00:00:00 2001 From: Sven Neumann Date: Sun, 24 Oct 1999 13:26:30 +0000 Subject: [PATCH] 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 --- ChangeLog | 11 ++++++++ app/channel_ops.c | 48 +++++++++++++++++----------------- app/channel_ops.h | 15 ++++++----- app/core/gimpdrawable-offset.c | 48 +++++++++++++++++----------------- app/core/gimpdrawable-offset.h | 15 ++++++----- app/core/gimpimage-duplicate.c | 48 +++++++++++++++++----------------- app/core/gimpimage-duplicate.h | 15 ++++++----- app/gimpdrawable-offset.c | 48 +++++++++++++++++----------------- app/gimpdrawable-offset.h | 15 ++++++----- app/gimpimage-duplicate.c | 48 +++++++++++++++++----------------- app/gimpimage-duplicate.h | 15 ++++++----- app/ops_buttons.c | 7 ++--- libgimp/gimpexport.c | 21 +++++++++++++-- 13 files changed, 194 insertions(+), 160 deletions(-) diff --git a/ChangeLog b/ChangeLog index dc0fa8b36b..039d2b8f56 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +Sun Oct 24 15:24:15 MEST 1999 Sven Neumann + + * 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 * app/channels_dialog.c diff --git a/app/channel_ops.c b/app/channel_ops.c index 6d4780ab16..15fafd1e04 100644 --- a/app/channel_ops.c +++ b/app/channel_ops.c @@ -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 diff --git a/app/channel_ops.h b/app/channel_ops.h index 343978842c..212eb44e7b 100644 --- a/app/channel_ops.h +++ b/app/channel_ops.h @@ -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__ */ + diff --git a/app/core/gimpdrawable-offset.c b/app/core/gimpdrawable-offset.c index 6d4780ab16..15fafd1e04 100644 --- a/app/core/gimpdrawable-offset.c +++ b/app/core/gimpdrawable-offset.c @@ -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 diff --git a/app/core/gimpdrawable-offset.h b/app/core/gimpdrawable-offset.h index 343978842c..212eb44e7b 100644 --- a/app/core/gimpdrawable-offset.h +++ b/app/core/gimpdrawable-offset.h @@ -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__ */ + diff --git a/app/core/gimpimage-duplicate.c b/app/core/gimpimage-duplicate.c index 6d4780ab16..15fafd1e04 100644 --- a/app/core/gimpimage-duplicate.c +++ b/app/core/gimpimage-duplicate.c @@ -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 diff --git a/app/core/gimpimage-duplicate.h b/app/core/gimpimage-duplicate.h index 343978842c..212eb44e7b 100644 --- a/app/core/gimpimage-duplicate.h +++ b/app/core/gimpimage-duplicate.h @@ -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__ */ + diff --git a/app/gimpdrawable-offset.c b/app/gimpdrawable-offset.c index 6d4780ab16..15fafd1e04 100644 --- a/app/gimpdrawable-offset.c +++ b/app/gimpdrawable-offset.c @@ -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 diff --git a/app/gimpdrawable-offset.h b/app/gimpdrawable-offset.h index 343978842c..212eb44e7b 100644 --- a/app/gimpdrawable-offset.h +++ b/app/gimpdrawable-offset.h @@ -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__ */ + diff --git a/app/gimpimage-duplicate.c b/app/gimpimage-duplicate.c index 6d4780ab16..15fafd1e04 100644 --- a/app/gimpimage-duplicate.c +++ b/app/gimpimage-duplicate.c @@ -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 diff --git a/app/gimpimage-duplicate.h b/app/gimpimage-duplicate.h index 343978842c..212eb44e7b 100644 --- a/app/gimpimage-duplicate.h +++ b/app/gimpimage-duplicate.h @@ -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__ */ + diff --git a/app/ops_buttons.c b/app/ops_buttons.c index ee8139b108..68eaeb7490 100644 --- a/app/ops_buttons.c +++ b/app/ops_buttons.c @@ -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); diff --git a/libgimp/gimpexport.c b/libgimp/gimpexport.c index 08072df420..f3b09fd4f7 100644 --- a/libgimp/gimpexport.c +++ b/libgimp/gimpexport.c @@ -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); }