From aa1ca52a37bedae3971baa2c803b2f531cceca33 Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Wed, 25 Feb 2004 17:33:45 +0000 Subject: [PATCH] Changed libgimpthumb API in a way that will make GtkFileChooser 2004-02-25 Michael Natterer Changed libgimpthumb API in a way that will make GtkFileChooser integration possible without doing major hacks: * libgimpthumb/gimpthumb-enums.h: added GimpThumbFileType enum and extended GimpThumbState enum. * libgimpthumb/gimpthumb-utils.[ch]: return GimpThumbFileType instead of gboolean from gimp_thumb_file_test(). * libgimpthumb/gimpthumbnail.c * app/core/gimpimagefile.c: changed accordingly (the icons used for REMOTE, FOLDER and SPECIAL need to be changed). --- ChangeLog | 15 +++++++++++++++ app/core/gimpimagefile.c | 32 ++++++++++++++++++++++++++++++- libgimpthumb/gimpthumb-enums.h | 15 +++++++++++++++ libgimpthumb/gimpthumb-utils.c | 35 +++++++++++++++++++++++----------- libgimpthumb/gimpthumb-utils.h | 24 +++++++++++------------ libgimpthumb/gimpthumbnail.c | 25 +++++++++++++++++++----- 6 files changed, 117 insertions(+), 29 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4fef6aae01..62190bdf7b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2004-02-25 Michael Natterer + + Changed libgimpthumb API in a way that will make GtkFileChooser + integration possible without doing major hacks: + + * libgimpthumb/gimpthumb-enums.h: added GimpThumbFileType enum + and extended GimpThumbState enum. + + * libgimpthumb/gimpthumb-utils.[ch]: return GimpThumbFileType + instead of gboolean from gimp_thumb_file_test(). + + * libgimpthumb/gimpthumbnail.c + * app/core/gimpimagefile.c: changed accordingly (the icons + used for REMOTE, FOLDER and SPECIAL need to be changed). + 2004-02-25 Michael Natterer * app/tools/gimpimagemaptool.c: cleanup. diff --git a/app/core/gimpimagefile.c b/app/core/gimpimagefile.c index 56d4dc9e7a..1627f11dc5 100644 --- a/app/core/gimpimagefile.c +++ b/app/core/gimpimagefile.c @@ -312,6 +312,8 @@ gimp_imagefile_name_changed (GimpObject *object) if (GIMP_OBJECT_CLASS (parent_class)->name_changed) GIMP_OBJECT_CLASS (parent_class)->name_changed (object); + gimp_viewable_set_stock_id (GIMP_VIEWABLE (imagefile), NULL); + gimp_thumbnail_set_uri (imagefile->thumbnail, gimp_object_get_name (object)); } @@ -379,8 +381,26 @@ gimp_imagefile_get_new_preview (GimpViewable *viewable, temp_buf_free (temp_buf); - return scaled_buf; + temp_buf = scaled_buf; } + + gimp_viewable_set_stock_id (GIMP_VIEWABLE (imagefile), NULL); + } + else if (imagefile->thumbnail->image_state == GIMP_THUMB_STATE_REMOTE) + { + gimp_viewable_set_stock_id (GIMP_VIEWABLE (imagefile), "gtk-network"); + } + else if (imagefile->thumbnail->image_state == GIMP_THUMB_STATE_FOLDER) + { + gimp_viewable_set_stock_id (GIMP_VIEWABLE (imagefile), "gtk-open"); + } + else if (imagefile->thumbnail->image_state == GIMP_THUMB_STATE_SPECIAL) + { + gimp_viewable_set_stock_id (GIMP_VIEWABLE (imagefile), "gtk-harddisk"); + } + else + { + gimp_viewable_set_stock_id (GIMP_VIEWABLE (imagefile), NULL); } return temp_buf; @@ -459,6 +479,16 @@ gimp_imagefile_get_desc_string (GimpImagefile *imagefile) imagefile->static_desc = TRUE; break; + case GIMP_THUMB_STATE_FOLDER: + imagefile->description = _("Folder"); + imagefile->static_desc = TRUE; + break; + + case GIMP_THUMB_STATE_SPECIAL: + imagefile->description = _("Special File"); + imagefile->static_desc = TRUE; + break; + case GIMP_THUMB_STATE_NOT_FOUND: imagefile->description = _("Could not open"); imagefile->static_desc = TRUE; diff --git a/libgimpthumb/gimpthumb-enums.h b/libgimpthumb/gimpthumb-enums.h index 096652bfac..61e5cecf78 100644 --- a/libgimpthumb/gimpthumb-enums.h +++ b/libgimpthumb/gimpthumb-enums.h @@ -27,6 +27,19 @@ #define __GIMP_THUMB_ENUMS_H__ +#define GIMP_TYPE_THUMB_FILE_TYPE (gimp_thumb_file_type_get_type ()) + +GType gimp_thumb_file_type_get_type (void) G_GNUC_CONST; + +typedef enum +{ + GIMP_THUMB_FILE_TYPE_NONE, + GIMP_THUMB_FILE_TYPE_REGULAR, + GIMP_THUMB_FILE_TYPE_FOLDER, + GIMP_THUMB_FILE_TYPE_SPECIAL +} GimpThumbFileType; + + #define GIMP_TYPE_THUMB_SIZE (gimp_thumb_size_get_type ()) GType gimp_thumb_size_get_type (void) G_GNUC_CONST; @@ -47,6 +60,8 @@ typedef enum { GIMP_THUMB_STATE_UNKNOWN, GIMP_THUMB_STATE_REMOTE, + GIMP_THUMB_STATE_FOLDER, + GIMP_THUMB_STATE_SPECIAL, GIMP_THUMB_STATE_NOT_FOUND, GIMP_THUMB_STATE_EXISTS, GIMP_THUMB_STATE_OLD, diff --git a/libgimpthumb/gimpthumb-utils.c b/libgimpthumb/gimpthumb-utils.c index 16e10941ff..deb81a6094 100644 --- a/libgimpthumb/gimpthumb-utils.c +++ b/libgimpthumb/gimpthumb-utils.c @@ -262,7 +262,8 @@ gimp_thumb_find_thumb (const gchar *uri, { thumb_name = g_build_filename (thumb_subdirs[i], name, NULL); - if (gimp_thumb_file_test (thumb_name, NULL, NULL)) + if (gimp_thumb_file_test (thumb_name, NULL, NULL) == + GIMP_THUMB_FILE_TYPE_REGULAR) { *size = thumb_sizes[i]; return thumb_name; @@ -275,7 +276,8 @@ gimp_thumb_find_thumb (const gchar *uri, { thumb_name = g_build_filename (thumb_subdirs[i], name, NULL); - if (gimp_thumb_file_test (thumb_name, NULL, NULL)) + if (gimp_thumb_file_test (thumb_name, NULL, NULL) == + GIMP_THUMB_FILE_TYPE_REGULAR) { *size = thumb_sizes[i]; return thumb_name; @@ -297,9 +299,10 @@ gimp_thumb_find_thumb (const gchar *uri, * checks if the given @filename exists and returns modification time * and file size in 64bit integer values. * - * Return value: %TRUE if the file exists, %FALSE otherwise + * Return value: The type of the file, or #GIMP_THUMB_FILE_TYPE_NONE if + * the file doesn't exist. **/ -gboolean +GimpThumbFileType gimp_thumb_file_test (const gchar *filename, gint64 *mtime, gint64 *size) @@ -308,17 +311,27 @@ gimp_thumb_file_test (const gchar *filename, g_return_val_if_fail (filename != NULL, FALSE); - if (stat (filename, &s) == 0 && (S_ISREG (s.st_mode))) + if (stat (filename, &s) == 0) { - if (mtime) - *mtime = s.st_mtime; - if (size) - *size = s.st_size; + if (mtime) *mtime = s.st_mtime; + if (size) *size = s.st_size; - return TRUE; + if (S_ISREG (s.st_mode)) + { + return GIMP_THUMB_FILE_TYPE_REGULAR; + } + else if (S_ISDIR (s.st_mode)) + { + return GIMP_THUMB_FILE_TYPE_FOLDER; + } + + return GIMP_THUMB_FILE_TYPE_SPECIAL; } - return FALSE; + if (mtime) *mtime = 0; + if (size) *size = 0; + + return GIMP_THUMB_FILE_TYPE_NONE; } static void diff --git a/libgimpthumb/gimpthumb-utils.h b/libgimpthumb/gimpthumb-utils.h index 9748b8b6fc..68e10628f0 100644 --- a/libgimpthumb/gimpthumb-utils.h +++ b/libgimpthumb/gimpthumb-utils.h @@ -29,21 +29,21 @@ G_BEGIN_DECLS -gboolean gimp_thumb_init (const gchar *creator, - const gchar *thumb_basedir); +gboolean gimp_thumb_init (const gchar *creator, + const gchar *thumb_basedir); -const gchar * gimp_thumb_get_thumb_dir (GimpThumbSize size); -gboolean gimp_thumb_ensure_thumb_dir (GimpThumbSize size, - GError **error); +const gchar * gimp_thumb_get_thumb_dir (GimpThumbSize size); +gboolean gimp_thumb_ensure_thumb_dir (GimpThumbSize size, + GError **error); -gchar * gimp_thumb_name_from_uri (const gchar *uri, - GimpThumbSize size); -gchar * gimp_thumb_find_thumb (const gchar *uri, - GimpThumbSize *size); +gchar * gimp_thumb_name_from_uri (const gchar *uri, + GimpThumbSize size); +gchar * gimp_thumb_find_thumb (const gchar *uri, + GimpThumbSize *size); -gboolean gimp_thumb_file_test (const gchar *filename, - gint64 *mtime, - gint64 *size); +GimpThumbFileType gimp_thumb_file_test (const gchar *filename, + gint64 *mtime, + gint64 *size); G_END_DECLS diff --git a/libgimpthumb/gimpthumbnail.c b/libgimpthumb/gimpthumbnail.c index 895058d86b..9ed34b2e52 100644 --- a/libgimpthumb/gimpthumbnail.c +++ b/libgimpthumb/gimpthumbnail.c @@ -546,8 +546,8 @@ static void gimp_thumbnail_update_image (GimpThumbnail *thumbnail) { GimpThumbState state; - gint64 filesize = 0; gint64 mtime = 0; + gint64 filesize = 0; if (! thumbnail->image_uri) return; @@ -581,10 +581,25 @@ gimp_thumbnail_update_image (GimpThumbnail *thumbnail) break; default: - if (gimp_thumb_file_test (thumbnail->image_filename, &mtime, &filesize)) - state = GIMP_THUMB_STATE_EXISTS; - else - state = GIMP_THUMB_STATE_NOT_FOUND; + switch (gimp_thumb_file_test (thumbnail->image_filename, + &mtime, &filesize)) + { + case GIMP_THUMB_FILE_TYPE_REGULAR: + state = GIMP_THUMB_STATE_EXISTS; + break; + + case GIMP_THUMB_FILE_TYPE_FOLDER: + state = GIMP_THUMB_STATE_FOLDER; + break; + + case GIMP_THUMB_FILE_TYPE_SPECIAL: + state = GIMP_THUMB_STATE_SPECIAL; + break; + + default: + state = GIMP_THUMB_STATE_NOT_FOUND; + break; + } break; }