summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2021-09-17 03:25:35 +0200
committerBenjamin Otte <otte@redhat.com>2021-09-17 03:25:35 +0200
commitb271a94f927c2b7b0c42e58be61d6fdb44480b99 (patch)
tree87ffb6d7c756db037d05bbf67bd3a2e5a873a8cd
parente58f70d7bb5990bfc8a7364c7f4e5af586e43750 (diff)
downloadgtk+-b271a94f927c2b7b0c42e58be61d6fdb44480b99.tar.gz
texture: Rework error enum
1. Change INSUFFICIENT_MEMORY to TOO_LARGE GTK crashes on insufficient memory, we don't emit GErrors. 2. Split UNSUPPORTED into UNSUPPORTED_CONTENT and UNSUPPORTED_FORMAT So we know if you need to find an RPM with a loader or curse and the weird file. 3. Translate error messages, they are meant for end users.
-rw-r--r--gdk/gdktexture.h13
-rw-r--r--gdk/loaders/gdkjpeg.c18
-rw-r--r--gdk/loaders/gdkpng.c30
-rw-r--r--gdk/loaders/gdktiff.c12
4 files changed, 35 insertions, 38 deletions
diff --git a/gdk/gdktexture.h b/gdk/gdktexture.h
index aba864e39f..6a62c9fe50 100644
--- a/gdk/gdktexture.h
+++ b/gdk/gdktexture.h
@@ -45,17 +45,22 @@ GQuark gdk_texture_error_quark (void);
/**
* GdkTextureError:
- * @GDK_TEXTURE_ERROR_INSUFFICIENT_MEMORY: Not enough memory to handle this image
+ * @GDK_TEXTURE_ERROR_TOO_LARGE: Not enough memory to handle this image
* @GDK_TEXTURE_ERROR_CORRUPT_IMAGE: The image data appears corrupted
- * @GDK_TEXTURE_ERROR_UNSUPPORTED: The image format is not supported
+ * @GDK_TEXTURE_ERROR_UNSUPPORTED_CONTENT: The image contains features
+ * that cannot be loaded
+ * @GDK_TEXTURE_ERROR_UNSUPPORTED_FORMAT: The image format is not supported
*
* Possible errors that can be returned by `GdkTexture` constructors.
+ *
+ * Since: 4.6
*/
typedef enum
{
- GDK_TEXTURE_ERROR_INSUFFICIENT_MEMORY,
+ GDK_TEXTURE_ERROR_TOO_LARGE,
GDK_TEXTURE_ERROR_CORRUPT_IMAGE,
- GDK_TEXTURE_ERROR_UNSUPPORTED,
+ GDK_TEXTURE_ERROR_UNSUPPORTED_CONTENT,
+ GDK_TEXTURE_ERROR_UNSUPPORTED_FORMAT,
} GdkTextureError;
GDK_AVAILABLE_IN_ALL
diff --git a/gdk/loaders/gdkjpeg.c b/gdk/loaders/gdkjpeg.c
index 506a278aaa..c64a0ea99d 100644
--- a/gdk/loaders/gdkjpeg.c
+++ b/gdk/loaders/gdkjpeg.c
@@ -19,8 +19,10 @@
#include "gdkjpegprivate.h"
+#include "gdkintl.h"
#include "gdktexture.h"
#include "gdkmemorytextureprivate.h"
+
#include <jpeglib.h>
#include <jerror.h>
#include <setjmp.h>
@@ -53,10 +55,8 @@ fatal_error_handler (j_common_ptr cinfo)
if (errmgr->error && *errmgr->error == NULL)
g_set_error (errmgr->error,
GDK_TEXTURE_ERROR,
- cinfo->err->msg_code == JERR_OUT_OF_MEMORY
- ? GDK_TEXTURE_ERROR_INSUFFICIENT_MEMORY
- : GDK_TEXTURE_ERROR_CORRUPT_IMAGE,
- "Error interpreting JPEG image file (%s)", buffer);
+ GDK_TEXTURE_ERROR_CORRUPT_IMAGE,
+ _("Error interpreting JPEG image file (%s)"), buffer);
siglongjmp (errmgr->setjmp_buffer, 1);
@@ -213,17 +213,17 @@ gdk_load_jpeg (GBytes *input_bytes,
break;
default:
g_set_error (error,
- GDK_TEXTURE_ERROR, GDK_TEXTURE_ERROR_UNSUPPORTED,
- "Unsupported colorspace in jpeg (%d)", info.out_color_space);
+ GDK_TEXTURE_ERROR, GDK_TEXTURE_ERROR_UNSUPPORTED_CONTENT,
+ _("Unsupported JPEG colorspace (%d)"), info.out_color_space);
jpeg_destroy_decompress (&info);
return NULL;
}
if (!data)
{
- g_set_error_literal (error,
- GDK_TEXTURE_ERROR, GDK_TEXTURE_ERROR_INSUFFICIENT_MEMORY,
- "Not enough memory to load jpeg");
+ g_set_error (error,
+ GDK_TEXTURE_ERROR, GDK_TEXTURE_ERROR_TOO_LARGE,
+ _("Not enough memory for image size %ux%u"), width, height);
jpeg_destroy_decompress (&info);
return NULL;
}
diff --git a/gdk/loaders/gdkpng.c b/gdk/loaders/gdkpng.c
index fa0258b0ba..80fca2460b 100644
--- a/gdk/loaders/gdkpng.c
+++ b/gdk/loaders/gdkpng.c
@@ -19,9 +19,10 @@
#include "gdkpngprivate.h"
+#include "gdkintl.h"
+#include "gdkmemorytextureprivate.h"
#include "gdktexture.h"
#include "gdktextureprivate.h"
-#include "gdkmemorytextureprivate.h"
#include "gsk/ngl/fp16private.h"
#include <png.h>
#include <stdio.h>
@@ -113,7 +114,7 @@ png_simple_error_callback (png_structp png,
if (error && !*error)
g_set_error (error,
GDK_TEXTURE_ERROR, GDK_TEXTURE_ERROR_CORRUPT_IMAGE,
- "Error reading png (%s)", error_msg);
+ _("Error reading png (%s)"), error_msg);
longjmp (png_jmpbuf (png), 1);
}
@@ -320,22 +321,11 @@ gdk_load_png (GBytes *bytes,
png_malloc_callback,
png_free_callback);
if (png == NULL)
- {
- g_set_error (error,
- GDK_TEXTURE_ERROR, GDK_TEXTURE_ERROR_INSUFFICIENT_MEMORY,
- "Failed to parse png image");
- return NULL;
- }
+ g_error ("Out of memory");
info = png_create_info_struct (png);
if (info == NULL)
- {
- png_destroy_read_struct (&png, NULL, NULL);
- g_set_error (error,
- GDK_TEXTURE_ERROR, GDK_TEXTURE_ERROR_INSUFFICIENT_MEMORY,
- "Failed to parse png image");
- return NULL;
- }
+ g_error ("Out of memory");
png_set_read_fn (png, &io, png_read_func);
@@ -385,8 +375,8 @@ gdk_load_png (GBytes *bytes,
{
png_destroy_read_struct (&png, &info, NULL);
g_set_error (error,
- GDK_TEXTURE_ERROR, GDK_TEXTURE_ERROR_UNSUPPORTED,
- "Failed to parse png image");
+ GDK_TEXTURE_ERROR, GDK_TEXTURE_ERROR_UNSUPPORTED_CONTENT,
+ _("Failed to parse png image"));
return NULL;
}
@@ -437,9 +427,9 @@ gdk_load_png (GBytes *bytes,
g_free (buffer);
g_free (row_pointers);
png_destroy_read_struct (&png, &info, NULL);
- g_set_error_literal (error,
- GDK_TEXTURE_ERROR, GDK_TEXTURE_ERROR_INSUFFICIENT_MEMORY,
- "Not enough memory to load png");
+ g_set_error (error,
+ GDK_TEXTURE_ERROR, GDK_TEXTURE_ERROR_TOO_LARGE,
+ _("Not enough memory for image size %ux%u"), width, height);
return NULL;
}
diff --git a/gdk/loaders/gdktiff.c b/gdk/loaders/gdktiff.c
index 6f41811791..62d2194f0c 100644
--- a/gdk/loaders/gdktiff.c
+++ b/gdk/loaders/gdktiff.c
@@ -19,9 +19,11 @@
#include "gdktiffprivate.h"
+#include "gdkintl.h"
+#include "gdkmemorytextureprivate.h"
#include "gdktexture.h"
#include "gdktextureprivate.h"
-#include "gdkmemorytextureprivate.h"
+
#include <tiffio.h>
/* Our main interest in tiff as an image format is that it is
@@ -374,7 +376,7 @@ load_fallback (TIFF *tif,
{
g_set_error_literal (error,
GDK_TEXTURE_ERROR, GDK_TEXTURE_ERROR_CORRUPT_IMAGE,
- "Failed to load RGB data from TIFF file");
+ _("Failed to load RGB data from TIFF file"));
g_free (data);
return NULL;
}
@@ -471,8 +473,8 @@ gdk_load_tiff (GBytes *input_bytes,
if (!data)
{
g_set_error (error,
- GDK_TEXTURE_ERROR, GDK_TEXTURE_ERROR_INSUFFICIENT_MEMORY,
- "Not enough memory to read tiff");
+ GDK_TEXTURE_ERROR, GDK_TEXTURE_ERROR_TOO_LARGE,
+ _("Not enough memory for image size %ux%u"), width, height);
TIFFClose (tif);
return NULL;
}
@@ -484,7 +486,7 @@ gdk_load_tiff (GBytes *input_bytes,
{
g_set_error (error,
GDK_TEXTURE_ERROR, GDK_TEXTURE_ERROR_CORRUPT_IMAGE,
- "Reading data failed at row %d", y);
+ _("Reading data failed at row %d"), y);
TIFFClose (tif);
g_free (data);
return NULL;