[gimp/gimp-2-10] Issue #1520 - GIMP 2.10 Crashes when trying to convert 8bit colour...



commit 93c337896cd3fb84f2fdefd94ecf5b2db130ab4a
Author: Michael Natterer <mitch gimp org>
Date:   Wed May 30 02:16:54 2018 +0200

    Issue #1520 - GIMP 2.10 Crashes when trying to convert 8bit colour...
    
    ...mode image to 1 bit.
    
    Don't try to remove unused colors from the mono black/white palette,
    
    (cherry picked from commit 0ff95b66b74fcefb3dffdf673332ec195539d3a9)

 app/core/gimpimage-convert-indexed.c |  4 +++-
 app/dialogs/convert-indexed-dialog.c | 35 +++++++++++++++++++++++++++--------
 2 files changed, 30 insertions(+), 9 deletions(-)
---
diff --git a/app/core/gimpimage-convert-indexed.c b/app/core/gimpimage-convert-indexed.c
index 954fb6ef29..4558ee4845 100644
--- a/app/core/gimpimage-convert-indexed.c
+++ b/app/core/gimpimage-convert-indexed.c
@@ -1014,7 +1014,9 @@ gimp_image_convert_indexed (GimpImage               *image,
     }
 
   /*  Set the final palette on the image  */
-  if (remove_duplicates && (palette_type != GIMP_CONVERT_PALETTE_GENERATE))
+  if (remove_duplicates &&
+      (palette_type != GIMP_CONVERT_PALETTE_GENERATE) &&
+      (palette_type != GIMP_CONVERT_PALETTE_MONO))
     {
       guchar colormap[GIMP_IMAGE_COLORMAP_SIZE];
       gint   i, j;
diff --git a/app/dialogs/convert-indexed-dialog.c b/app/dialogs/convert-indexed-dialog.c
index be389d7ca9..b1968d2203 100644
--- a/app/dialogs/convert-indexed-dialog.c
+++ b/app/dialogs/convert-indexed-dialog.c
@@ -60,6 +60,7 @@ struct _IndexedDialog
   GtkWidget                  *dialog;
   GimpContext                *context;
   GimpContainer              *container;
+  GtkWidget                  *duplicates_toggle;
 };
 
 
@@ -73,6 +74,9 @@ static gboolean    convert_dialog_palette_filter  (GimpObject    *object,
 static void        convert_dialog_palette_changed (GimpContext   *context,
                                                    GimpPalette   *palette,
                                                    IndexedDialog *private);
+static void        convert_dialog_type_update     (GtkWidget     *widget,
+                                                   IndexedDialog *private);
+
 
 
 /*  public functions  */
@@ -172,8 +176,8 @@ convert_indexed_dialog_new (GimpImage                  *image,
                                            GIMP_CONVERT_PALETTE_CUSTOM :
                                            GIMP_CONVERT_PALETTE_MONO),
                                           gtk_label_new (_("Colormap")),
-                                          G_CALLBACK (gimp_radio_button_update),
-                                          &private->palette_type,
+                                          G_CALLBACK (convert_dialog_type_update),
+                                          private,
                                           &button);
 
   gimp_int_radio_group_set_active (GTK_RADIO_BUTTON (button),
@@ -216,21 +220,22 @@ convert_indexed_dialog_new (GimpImage                  *image,
 
   vbox = gtk_bin_get_child (GTK_BIN (frame));
 
-  toggle = gtk_check_button_new_with_mnemonic (_("_Remove unused and duplicate "
-                                                 "colors from colormap"));
+  private->duplicates_toggle = toggle =
+    gtk_check_button_new_with_mnemonic (_("_Remove unused and duplicate "
+                                          "colors from colormap"));
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle),
                                 private->remove_duplicates);
   gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 3);
   gtk_widget_show (toggle);
 
+  if (private->palette_type == GIMP_CONVERT_PALETTE_GENERATE ||
+      private->palette_type == GIMP_CONVERT_PALETTE_MONO)
+    gtk_widget_set_sensitive (toggle, FALSE);
+
   g_signal_connect (toggle, "toggled",
                     G_CALLBACK (gimp_toggle_button_update),
                     &private->remove_duplicates);
 
-  g_object_bind_property (button, "active",
-                          toggle, "sensitive",
-                          G_BINDING_SYNC_CREATE | G_BINDING_INVERT_BOOLEAN);
-
   /*  dithering  */
 
   frame = gimp_frame_new (_("Dithering"));
@@ -415,3 +420,17 @@ convert_dialog_palette_changed (GimpContext   *context,
       private->custom_palette = palette;
     }
 }
+
+static void
+convert_dialog_type_update (GtkWidget     *widget,
+                            IndexedDialog *private)
+{
+  gimp_radio_button_update (widget, &private->palette_type);
+
+  if (private->duplicates_toggle)
+    gtk_widget_set_sensitive (private->duplicates_toggle,
+                              private->palette_type !=
+                              GIMP_CONVERT_PALETTE_GENERATE &&
+                              private->palette_type !=
+                              GIMP_CONVERT_PALETTE_MONO);
+}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]