mirror of
https://gitlab.gnome.org/GNOME/gimp
synced 2024-10-20 09:21:50 +00:00
added "gchar *name_changed_signal" to GimpViewableClass which defaults to
2002-04-29 Michael Natterer <mitch@gimp.org> * app/core/gimpviewable.[ch]: added "gchar *name_changed_signal" to GimpViewableClass which defaults to "name_changed". * app/widgets/gimplistitem.c * app/widgets/gimpmenuitem.c: connect to viewable_class->name_changed_signal instead of just "name_changed". Fixed possible UI inconsistency where the previous viewable's tooltip would have been displayed. * app/core/gimpimagefile.[ch]: set name_changed_signal to "info_changed" so views can update their tooltips correctly. Merged the separate image_state and thumb_state states into one state variable and extended the state enum. Added description strings for all states. Show the file size for all files, not only for those with a thumbnail. Enabled display of outdated thumbnails. * app/gui/file-open-dialog.c: some changes because gimp_imagefile_get_description() returns 3 instead of 2 lines of text now. * app/widgets/gimpcontainerview-utils.c: show the imagefile's description in the tooltip. * app/gui/menus.c * app/gui/documents-commands.[ch] * app/widgets/gimpdocumentview.c: added functions to remove "dangling" document history entries. Updated the context menu so all functions can be accessed through it.
This commit is contained in:
parent
05581ddf78
commit
63ca433dce
32
ChangeLog
32
ChangeLog
|
@ -1,3 +1,35 @@
|
|||
2002-04-29 Michael Natterer <mitch@gimp.org>
|
||||
|
||||
* app/core/gimpviewable.[ch]: added "gchar *name_changed_signal"
|
||||
to GimpViewableClass which defaults to "name_changed".
|
||||
|
||||
* app/widgets/gimplistitem.c
|
||||
* app/widgets/gimpmenuitem.c: connect to
|
||||
viewable_class->name_changed_signal instead of just
|
||||
"name_changed". Fixed possible UI inconsistency where the previous
|
||||
viewable's tooltip would have been displayed.
|
||||
|
||||
* app/core/gimpimagefile.[ch]: set name_changed_signal to
|
||||
"info_changed" so views can update their tooltips correctly.
|
||||
Merged the separate image_state and thumb_state states into one
|
||||
state variable and extended the state enum. Added description
|
||||
strings for all states. Show the file size for all files, not only
|
||||
for those with a thumbnail. Enabled display of outdated
|
||||
thumbnails.
|
||||
|
||||
* app/gui/file-open-dialog.c: some changes because
|
||||
gimp_imagefile_get_description() returns 3 instead of 2 lines of
|
||||
text now.
|
||||
|
||||
* app/widgets/gimpcontainerview-utils.c: show the imagefile's
|
||||
description in the tooltip.
|
||||
|
||||
* app/gui/menus.c
|
||||
* app/gui/documents-commands.[ch]
|
||||
* app/widgets/gimpdocumentview.c: added functions to remove
|
||||
"dangling" document history entries. Updated the context menu so
|
||||
all functions can be accessed through it.
|
||||
|
||||
2002-04-28 Sven Neumann <sven@gimp.org>
|
||||
|
||||
* app/tools/gimpairbrushtool.c
|
||||
|
|
|
@ -100,8 +100,8 @@ documents_delete_document_cmd_callback (GtkWidget *widget,
|
|||
|
||||
|
||||
void
|
||||
documents_refresh_documents_cmd_callback (GtkWidget *widget,
|
||||
gpointer data)
|
||||
documents_recreate_preview_cmd_callback (GtkWidget *widget,
|
||||
gpointer data)
|
||||
{
|
||||
GimpDocumentView *view;
|
||||
|
||||
|
@ -113,6 +113,36 @@ documents_refresh_documents_cmd_callback (GtkWidget *widget,
|
|||
gtk_button_clicked (GTK_BUTTON (view->refresh_button));
|
||||
}
|
||||
|
||||
void
|
||||
documents_reload_previews_cmd_callback (GtkWidget *widget,
|
||||
gpointer data)
|
||||
{
|
||||
GimpDocumentView *view;
|
||||
|
||||
view = (GimpDocumentView *) gimp_widget_get_callback_context (widget);
|
||||
|
||||
if (! view)
|
||||
return;
|
||||
|
||||
gimp_button_extended_clicked (GIMP_BUTTON (view->refresh_button),
|
||||
GDK_SHIFT_MASK);
|
||||
}
|
||||
|
||||
void
|
||||
documents_delete_dangling_documents_cmd_callback (GtkWidget *widget,
|
||||
gpointer data)
|
||||
{
|
||||
GimpDocumentView *view;
|
||||
|
||||
view = (GimpDocumentView *) gimp_widget_get_callback_context (widget);
|
||||
|
||||
if (! view)
|
||||
return;
|
||||
|
||||
gimp_button_extended_clicked (GIMP_BUTTON (view->refresh_button),
|
||||
GDK_CONTROL_MASK);
|
||||
}
|
||||
|
||||
void
|
||||
documents_menu_update (GtkItemFactory *factory,
|
||||
gpointer data)
|
||||
|
@ -127,11 +157,13 @@ documents_menu_update (GtkItemFactory *factory,
|
|||
#define SET_SENSITIVE(menu,condition) \
|
||||
gimp_item_factory_set_sensitive (factory, menu, (condition) != 0)
|
||||
|
||||
SET_SENSITIVE ("/Open Image", imagefile);
|
||||
SET_SENSITIVE ("/Raise or Open Image", imagefile);
|
||||
SET_SENSITIVE ("/File Open Dialog...", TRUE);
|
||||
SET_SENSITIVE ("/Remove Entry", imagefile);
|
||||
SET_SENSITIVE ("/Refresh History", TRUE);
|
||||
SET_SENSITIVE ("/Open Image", imagefile);
|
||||
SET_SENSITIVE ("/Raise or Open Image", imagefile);
|
||||
SET_SENSITIVE ("/File Open Dialog...", TRUE);
|
||||
SET_SENSITIVE ("/Remove Entry", imagefile);
|
||||
SET_SENSITIVE ("/Recreate Preview", imagefile);
|
||||
SET_SENSITIVE ("/Reload all Previews", imagefile);
|
||||
SET_SENSITIVE ("/Remove Dangling Entries", imagefile);
|
||||
|
||||
#undef SET_SENSITIVE
|
||||
}
|
||||
|
|
|
@ -20,19 +20,23 @@
|
|||
#define __DOCUMENTS_COMMANDS_H__
|
||||
|
||||
|
||||
void documents_open_document_cmd_callback (GtkWidget *widget,
|
||||
gpointer data);
|
||||
void documents_raise_or_open_document_cmd_callback (GtkWidget *widget,
|
||||
gpointer data);
|
||||
void documents_file_open_dialog_cmd_callback (GtkWidget *widget,
|
||||
gpointer data);
|
||||
void documents_delete_document_cmd_callback (GtkWidget *widget,
|
||||
gpointer data);
|
||||
void documents_refresh_documents_cmd_callback (GtkWidget *widget,
|
||||
gpointer data);
|
||||
void documents_open_document_cmd_callback (GtkWidget *widget,
|
||||
gpointer data);
|
||||
void documents_raise_or_open_document_cmd_callback (GtkWidget *widget,
|
||||
gpointer data);
|
||||
void documents_file_open_dialog_cmd_callback (GtkWidget *widget,
|
||||
gpointer data);
|
||||
void documents_delete_document_cmd_callback (GtkWidget *widget,
|
||||
gpointer data);
|
||||
void documents_recreate_preview_cmd_callback (GtkWidget *widget,
|
||||
gpointer data);
|
||||
void documents_reload_previews_cmd_callback (GtkWidget *widget,
|
||||
gpointer data);
|
||||
void documents_delete_dangling_documents_cmd_callback (GtkWidget *widget,
|
||||
gpointer data);
|
||||
|
||||
void documents_menu_update (GtkItemFactory *factory,
|
||||
gpointer data);
|
||||
void documents_menu_update (GtkItemFactory *factory,
|
||||
gpointer data);
|
||||
|
||||
|
||||
#endif /* __DOCUMENTS_COMMANDS_H__ */
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
|
||||
#include "config.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
|
@ -89,7 +90,6 @@ static void gimp_imagefile_set_info (GimpImagefile *imagefile,
|
|||
gboolean emit_always,
|
||||
gint width,
|
||||
gint height,
|
||||
gint size,
|
||||
GimpImageType type,
|
||||
gint n_layers);
|
||||
static TempBuf * gimp_imagefile_get_new_preview (GimpViewable *viewable,
|
||||
|
@ -189,9 +189,12 @@ gimp_imagefile_class_init (GimpImagefileClass *klass)
|
|||
gimp_marshal_VOID__VOID,
|
||||
G_TYPE_NONE, 0);
|
||||
|
||||
object_class->finalize = gimp_imagefile_finalize;
|
||||
gimp_object_class->name_changed = gimp_imagefile_name_changed;
|
||||
viewable_class->get_new_preview = gimp_imagefile_get_new_preview;
|
||||
object_class->finalize = gimp_imagefile_finalize;
|
||||
|
||||
gimp_object_class->name_changed = gimp_imagefile_name_changed;
|
||||
|
||||
viewable_class->name_changed_signal = "info_changed";
|
||||
viewable_class->get_new_preview = gimp_imagefile_get_new_preview;
|
||||
|
||||
g_type_class_ref (GIMP_TYPE_IMAGE_TYPE);
|
||||
|
||||
|
@ -205,16 +208,17 @@ gimp_imagefile_class_init (GimpImagefileClass *klass)
|
|||
static void
|
||||
gimp_imagefile_init (GimpImagefile *imagefile)
|
||||
{
|
||||
imagefile->state = GIMP_IMAGEFILE_STATE_UNKNOWN;
|
||||
imagefile->image_mtime = 0;
|
||||
imagefile->image_size = -1;
|
||||
imagefile->thumb_mtime = 0;
|
||||
|
||||
imagefile->width = -1;
|
||||
imagefile->height = -1;
|
||||
imagefile->size = -1;
|
||||
imagefile->type = -1;
|
||||
imagefile->n_layers = -1;
|
||||
|
||||
imagefile->description = NULL;
|
||||
imagefile->image_state = GIMP_IMAGEFILE_STATE_UNKNOWN;
|
||||
imagefile->image_mtime = 0;
|
||||
imagefile->thumb_state = GIMP_IMAGEFILE_STATE_UNKNOWN;
|
||||
imagefile->thumb_mtime = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -252,32 +256,41 @@ gimp_imagefile_update (GimpImagefile *imagefile)
|
|||
|
||||
if (uri)
|
||||
{
|
||||
gchar *filename = NULL;
|
||||
gchar *thumbname = NULL;
|
||||
gint thumb_size = GIMP_IMAGEFILE_THUMB_SIZE_FAIL;
|
||||
GimpImagefileState old_state;
|
||||
gchar *filename = NULL;
|
||||
gchar *thumbname = NULL;
|
||||
gint thumb_size = GIMP_IMAGEFILE_THUMB_SIZE_FAIL;
|
||||
off_t image_size;
|
||||
|
||||
old_state = imagefile->state;
|
||||
|
||||
filename = g_filename_from_uri (uri, NULL, NULL);
|
||||
|
||||
imagefile->image_mtime = 0;
|
||||
imagefile->image_size = -1;
|
||||
|
||||
if (! filename)
|
||||
{
|
||||
/* no thumbnails of remote images :-( */
|
||||
|
||||
imagefile->image_state = GIMP_IMAGEFILE_STATE_REMOTE;
|
||||
imagefile->state = GIMP_IMAGEFILE_STATE_REMOTE;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (! gimp_imagefile_test (filename, &imagefile->image_mtime, NULL))
|
||||
if (! gimp_imagefile_test (filename,
|
||||
&imagefile->image_mtime,
|
||||
&image_size))
|
||||
{
|
||||
imagefile->image_state = GIMP_IMAGEFILE_STATE_NOT_FOUND;
|
||||
imagefile->state = GIMP_IMAGEFILE_STATE_NOT_FOUND;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
imagefile->image_state = GIMP_IMAGEFILE_STATE_EXISTS;
|
||||
imagefile->state = GIMP_IMAGEFILE_STATE_EXISTS;
|
||||
imagefile->image_size = image_size;
|
||||
|
||||
/* found the image, now look for the thumbnail */
|
||||
|
||||
imagefile->state = GIMP_IMAGEFILE_STATE_THUMBNAIL_NOT_FOUND;
|
||||
imagefile->thumb_mtime = 0;
|
||||
|
||||
thumbname =
|
||||
|
@ -288,16 +301,19 @@ gimp_imagefile_update (GimpImagefile *imagefile)
|
|||
&thumb_size);
|
||||
|
||||
if (! thumbname)
|
||||
{
|
||||
imagefile->thumb_state = GIMP_IMAGEFILE_STATE_NOT_FOUND;
|
||||
goto cleanup;
|
||||
}
|
||||
goto cleanup;
|
||||
|
||||
imagefile->thumb_state = GIMP_IMAGEFILE_STATE_EXISTS;
|
||||
if (imagefile->image_mtime >= imagefile->thumb_mtime)
|
||||
imagefile->state = GIMP_IMAGEFILE_STATE_THUMBNAIL_OK;
|
||||
else
|
||||
imagefile->state = GIMP_IMAGEFILE_STATE_THUMBNAIL_OLD;
|
||||
|
||||
cleanup:
|
||||
g_free (filename);
|
||||
g_free (thumbname);
|
||||
|
||||
if (imagefile->state != old_state)
|
||||
gimp_imagefile_set_info (imagefile, TRUE, -1, -1, -1, -1);
|
||||
}
|
||||
|
||||
gimp_viewable_invalidate_preview (GIMP_VIEWABLE (imagefile));
|
||||
|
@ -328,12 +344,12 @@ gimp_imagefile_create_thumbnail (GimpImagefile *imagefile)
|
|||
|
||||
if (uri)
|
||||
{
|
||||
GimpImage *gimage = NULL;
|
||||
GimpPDBStatusType dummy;
|
||||
gchar *filename;
|
||||
gchar *thumb_name;
|
||||
gchar *filename = NULL;
|
||||
gchar *thumb_name = NULL;
|
||||
time_t image_mtime;
|
||||
off_t image_size;
|
||||
GimpImage *gimage;
|
||||
GimpPDBStatusType dummy;
|
||||
|
||||
filename = g_filename_from_uri (uri, NULL, NULL);
|
||||
|
||||
|
@ -346,20 +362,18 @@ gimp_imagefile_create_thumbnail (GimpImagefile *imagefile)
|
|||
|
||||
/* the thumbnail directory doesn't exist and couldn't be created */
|
||||
if (! thumb_name)
|
||||
return;
|
||||
goto cleanup;
|
||||
|
||||
if (gimp_imagefile_test (filename, &image_mtime, &image_size))
|
||||
{
|
||||
gimage = file_open_image (the_gimp,
|
||||
uri,
|
||||
uri,
|
||||
NULL,
|
||||
GIMP_RUN_NONINTERACTIVE,
|
||||
&dummy,
|
||||
NULL);
|
||||
}
|
||||
if (! gimp_imagefile_test (filename, &image_mtime, &image_size))
|
||||
goto cleanup;
|
||||
|
||||
g_free (filename);
|
||||
gimage = file_open_image (the_gimp,
|
||||
uri,
|
||||
uri,
|
||||
NULL,
|
||||
GIMP_RUN_NONINTERACTIVE,
|
||||
&dummy,
|
||||
NULL);
|
||||
|
||||
if (gimage)
|
||||
{
|
||||
|
@ -371,7 +385,15 @@ gimp_imagefile_create_thumbnail (GimpImagefile *imagefile)
|
|||
|
||||
g_object_unref (G_OBJECT (gimage));
|
||||
}
|
||||
else
|
||||
{
|
||||
imagefile->state = GIMP_IMAGEFILE_STATE_THUMBNAIL_FAILED;
|
||||
|
||||
gimp_imagefile_set_info (imagefile, TRUE, -1, -1, -1, -1);
|
||||
}
|
||||
|
||||
cleanup:
|
||||
g_free (filename);
|
||||
g_free (thumb_name);
|
||||
}
|
||||
}
|
||||
|
@ -433,13 +455,12 @@ gimp_imagefile_name_changed (GimpObject *object)
|
|||
if (GIMP_OBJECT_CLASS (parent_class)->name_changed)
|
||||
GIMP_OBJECT_CLASS (parent_class)->name_changed (object);
|
||||
|
||||
imagefile->image_state = GIMP_IMAGEFILE_STATE_UNKNOWN;
|
||||
imagefile->state = GIMP_IMAGEFILE_STATE_UNKNOWN;
|
||||
imagefile->image_mtime = 0;
|
||||
|
||||
imagefile->thumb_state = GIMP_IMAGEFILE_STATE_UNKNOWN;
|
||||
imagefile->image_size = -1;
|
||||
imagefile->thumb_mtime = 0;
|
||||
|
||||
gimp_imagefile_set_info (imagefile, TRUE, -1, -1, -1, -1, -1);
|
||||
gimp_imagefile_set_info (imagefile, TRUE, -1, -1, -1, -1);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -447,7 +468,6 @@ gimp_imagefile_set_info (GimpImagefile *imagefile,
|
|||
gboolean emit_always,
|
||||
gint width,
|
||||
gint height,
|
||||
gint size,
|
||||
GimpImageType type,
|
||||
gint n_layers)
|
||||
{
|
||||
|
@ -455,13 +475,11 @@ gimp_imagefile_set_info (GimpImagefile *imagefile,
|
|||
|
||||
changed = (imagefile->width != width ||
|
||||
imagefile->height != height ||
|
||||
imagefile->size != size ||
|
||||
imagefile->type != type ||
|
||||
imagefile->n_layers != n_layers);
|
||||
|
||||
imagefile->width = width;
|
||||
imagefile->height = height;
|
||||
imagefile->size = size;
|
||||
imagefile->type = type;
|
||||
imagefile->n_layers = n_layers;
|
||||
|
||||
|
@ -479,12 +497,12 @@ gimp_imagefile_set_info (GimpImagefile *imagefile,
|
|||
|
||||
static void
|
||||
gimp_imagefile_set_info_from_pixbuf (GimpImagefile *imagefile,
|
||||
gboolean emit_always,
|
||||
GdkPixbuf *pixbuf)
|
||||
{
|
||||
const gchar *option;
|
||||
gint img_width = -1;
|
||||
gint img_height = -1;
|
||||
gint img_size = -1;
|
||||
GimpImageType img_type = -1;
|
||||
gint img_layers = -1;
|
||||
|
||||
|
@ -495,10 +513,6 @@ gimp_imagefile_set_info_from_pixbuf (GimpImagefile *imagefile,
|
|||
option = gdk_pixbuf_get_option (pixbuf, TAG_THUMB_IMAGE_HEIGHT);
|
||||
if (!option || sscanf (option, "%d", &img_height) != 1)
|
||||
img_height = -1;
|
||||
|
||||
option = gdk_pixbuf_get_option (pixbuf, TAG_THUMB_SIZE);
|
||||
if (!option || sscanf (option, "%d", &img_size) != 1)
|
||||
img_size = -1;
|
||||
|
||||
option = gdk_pixbuf_get_option (pixbuf, TAG_THUMB_GIMP_TYPE);
|
||||
if (option)
|
||||
|
@ -515,10 +529,10 @@ gimp_imagefile_set_info_from_pixbuf (GimpImagefile *imagefile,
|
|||
|
||||
option = gdk_pixbuf_get_option (pixbuf, TAG_THUMB_GIMP_LAYERS);
|
||||
if (!option || sscanf (option, "%d", &img_layers) != 1)
|
||||
img_size = -1;
|
||||
img_layers = -1;
|
||||
|
||||
gimp_imagefile_set_info (imagefile, FALSE,
|
||||
img_width, img_height, img_size,
|
||||
gimp_imagefile_set_info (imagefile, emit_always,
|
||||
img_width, img_height,
|
||||
img_type, img_layers);
|
||||
}
|
||||
|
||||
|
@ -551,88 +565,112 @@ gimp_imagefile_get_description (GimpImagefile *imagefile)
|
|||
if (imagefile->description)
|
||||
return (const gchar *) imagefile->description;
|
||||
|
||||
switch (imagefile->thumb_state)
|
||||
switch (imagefile->state)
|
||||
{
|
||||
case GIMP_IMAGEFILE_STATE_UNKNOWN:
|
||||
case GIMP_IMAGEFILE_STATE_REMOTE:
|
||||
case GIMP_IMAGEFILE_STATE_NOT_FOUND:
|
||||
imagefile->description = _("No preview available");
|
||||
imagefile->description = NULL;
|
||||
imagefile->static_desc = TRUE;
|
||||
break;
|
||||
|
||||
case GIMP_IMAGEFILE_STATE_EXISTS:
|
||||
if (imagefile->image_mtime > imagefile->thumb_mtime)
|
||||
{
|
||||
imagefile->description = _("Thumbnail is out of date");
|
||||
imagefile->static_desc = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
GString *str;
|
||||
GEnumClass *enum_class;
|
||||
GEnumValue *enum_value;
|
||||
case GIMP_IMAGEFILE_STATE_REMOTE:
|
||||
imagefile->description = _("Remote image");
|
||||
imagefile->static_desc = TRUE;
|
||||
break;
|
||||
|
||||
str = g_string_new (NULL);
|
||||
|
||||
if (imagefile->width > -1 && imagefile->height > -1)
|
||||
{
|
||||
/* image size */
|
||||
g_string_append_printf (str, _("%d x %d"),
|
||||
imagefile->width, imagefile->height);
|
||||
}
|
||||
|
||||
enum_class = g_type_class_peek (GIMP_TYPE_IMAGE_TYPE);
|
||||
enum_value = g_enum_get_value (enum_class, imagefile->type);
|
||||
|
||||
if (enum_value)
|
||||
{
|
||||
if (str->len)
|
||||
g_string_append_len (str, ", ", 2);
|
||||
|
||||
g_string_append (str, gettext (enum_value->value_name));
|
||||
}
|
||||
|
||||
if (imagefile->size > -1)
|
||||
{
|
||||
gchar *size;
|
||||
|
||||
size = gimp_image_new_get_memsize_string (imagefile->size);
|
||||
|
||||
if (str->len)
|
||||
g_string_append_len (str, "\n", 1);
|
||||
|
||||
g_string_append (str, size);
|
||||
g_free (size);
|
||||
}
|
||||
|
||||
if (imagefile->n_layers > -1)
|
||||
{
|
||||
gchar *n_layers;
|
||||
|
||||
if (imagefile->n_layers == 1)
|
||||
n_layers = g_strdup_printf (_("%d Layer"), imagefile->n_layers);
|
||||
else
|
||||
n_layers = g_strdup_printf (_("%d Layers"), imagefile->n_layers);
|
||||
|
||||
if (str->len)
|
||||
{
|
||||
if (imagefile->size > -1)
|
||||
g_string_append_len (str, ", ", 2);
|
||||
else
|
||||
g_string_append_len (str, "\n", 1);
|
||||
}
|
||||
|
||||
g_string_append (str, n_layers);
|
||||
g_free (n_layers);
|
||||
}
|
||||
|
||||
imagefile->static_desc = FALSE;
|
||||
imagefile->description = g_string_free (str, FALSE);
|
||||
}
|
||||
case GIMP_IMAGEFILE_STATE_NOT_FOUND:
|
||||
imagefile->description = _("Could not open image");
|
||||
imagefile->static_desc = TRUE;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
{
|
||||
GString *str;
|
||||
|
||||
str = g_string_new (NULL);
|
||||
|
||||
if (imagefile->image_size > -1)
|
||||
{
|
||||
gchar *size;
|
||||
|
||||
size = gimp_image_new_get_memsize_string (imagefile->image_size);
|
||||
|
||||
g_string_append (str, size);
|
||||
g_free (size);
|
||||
}
|
||||
|
||||
switch (imagefile->state)
|
||||
{
|
||||
case GIMP_IMAGEFILE_STATE_THUMBNAIL_NOT_FOUND:
|
||||
g_string_append_printf (str, "\n%s", _("No preview available"));
|
||||
break;
|
||||
|
||||
case GIMP_IMAGEFILE_STATE_THUMBNAIL_OLD:
|
||||
g_string_append_printf (str, "\n%s", _("Preview is out of date"));
|
||||
break;
|
||||
|
||||
case GIMP_IMAGEFILE_STATE_THUMBNAIL_FAILED:
|
||||
g_string_append_printf (str, "\n%s", _("Failed to create preview"));
|
||||
break;
|
||||
|
||||
case GIMP_IMAGEFILE_STATE_THUMBNAIL_OK:
|
||||
g_string_append_len (str, "\n", 1);
|
||||
|
||||
if (imagefile->image_mtime > imagefile->thumb_mtime)
|
||||
{
|
||||
g_string_append (str, _("Thumbnail is out of date"));
|
||||
}
|
||||
else
|
||||
{
|
||||
GEnumClass *enum_class;
|
||||
GEnumValue *enum_value;
|
||||
|
||||
if (imagefile->width > -1 && imagefile->height > -1)
|
||||
{
|
||||
/* image size */
|
||||
g_string_append_printf (str, _("%d x %d Pixel"),
|
||||
imagefile->width, imagefile->height);
|
||||
}
|
||||
|
||||
enum_class = g_type_class_peek (GIMP_TYPE_IMAGE_TYPE);
|
||||
enum_value = g_enum_get_value (enum_class, imagefile->type);
|
||||
|
||||
if (enum_value)
|
||||
{
|
||||
if (str->len)
|
||||
g_string_append (str, "\n");
|
||||
|
||||
g_string_append (str, gettext (enum_value->value_name));
|
||||
}
|
||||
|
||||
if (imagefile->n_layers > -1)
|
||||
{
|
||||
gchar *n_layers;
|
||||
|
||||
if (imagefile->n_layers == 1)
|
||||
n_layers = g_strdup_printf (_("%d Layer"),
|
||||
imagefile->n_layers);
|
||||
else
|
||||
n_layers = g_strdup_printf (_("%d Layers"),
|
||||
imagefile->n_layers);
|
||||
|
||||
if (enum_value)
|
||||
g_string_append (str, ", ");
|
||||
else
|
||||
g_string_append (str, "\n");
|
||||
|
||||
g_string_append (str, n_layers);
|
||||
g_free (n_layers);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
imagefile->static_desc = FALSE;
|
||||
imagefile->description = g_string_free (str, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
return (const gchar *) imagefile->description;
|
||||
|
@ -667,24 +705,29 @@ static TempBuf *
|
|||
gimp_imagefile_read_png_thumb (GimpImagefile *imagefile,
|
||||
gint size)
|
||||
{
|
||||
TempBuf *temp_buf = NULL;
|
||||
GdkPixbuf *pixbuf = NULL;
|
||||
gchar *thumbname = NULL;
|
||||
gint thumb_size = GIMP_IMAGEFILE_THUMB_SIZE_FAIL;
|
||||
const gchar *option;
|
||||
gint width;
|
||||
gint height;
|
||||
gint bytes;
|
||||
time_t y;
|
||||
guchar *src;
|
||||
guchar *dest;
|
||||
GError *error = NULL;
|
||||
GimpImagefileState old_state;
|
||||
TempBuf *temp_buf = NULL;
|
||||
GdkPixbuf *pixbuf = NULL;
|
||||
gchar *thumbname = NULL;
|
||||
gint thumb_size = GIMP_IMAGEFILE_THUMB_SIZE_FAIL;
|
||||
const gchar *option;
|
||||
gint width;
|
||||
gint height;
|
||||
gint bytes;
|
||||
time_t thumb_image_mtime;
|
||||
off_t thumb_image_size;
|
||||
guchar *src;
|
||||
guchar *dest;
|
||||
gint y;
|
||||
GError *error = NULL;
|
||||
|
||||
if (imagefile->image_state != GIMP_IMAGEFILE_STATE_EXISTS)
|
||||
if (imagefile->state < GIMP_IMAGEFILE_STATE_EXISTS)
|
||||
return NULL;
|
||||
|
||||
old_state = imagefile->state;
|
||||
|
||||
/* try to locate a thumbnail for this image */
|
||||
imagefile->thumb_state = GIMP_IMAGEFILE_STATE_NOT_FOUND;
|
||||
imagefile->state = GIMP_IMAGEFILE_STATE_THUMBNAIL_NOT_FOUND;
|
||||
imagefile->thumb_mtime = 0;
|
||||
|
||||
thumbname = gimp_imagefile_find_png_thumb (GIMP_OBJECT (imagefile)->name,
|
||||
|
@ -695,17 +738,22 @@ gimp_imagefile_read_png_thumb (GimpImagefile *imagefile,
|
|||
if (!thumbname)
|
||||
goto cleanup;
|
||||
|
||||
imagefile->thumb_state = GIMP_IMAGEFILE_STATE_EXISTS;
|
||||
if (imagefile->image_mtime >= imagefile->thumb_mtime)
|
||||
imagefile->state = GIMP_IMAGEFILE_STATE_THUMBNAIL_OK;
|
||||
else
|
||||
imagefile->state = GIMP_IMAGEFILE_STATE_THUMBNAIL_OLD;
|
||||
|
||||
pixbuf = gdk_pixbuf_new_from_file (thumbname, &error);
|
||||
pixbuf = gdk_pixbuf_new_from_file (thumbname, &error);
|
||||
|
||||
if (!pixbuf)
|
||||
{
|
||||
g_message (_("Could not open thumbnail\nfile '%s':\n%s"),
|
||||
thumbname, error->message);
|
||||
|
||||
imagefile->state = GIMP_IMAGEFILE_STATE_THUMBNAIL_NOT_FOUND;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
|
||||
g_free (thumbname);
|
||||
thumbname = NULL;
|
||||
|
||||
|
@ -716,9 +764,19 @@ gimp_imagefile_read_png_thumb (GimpImagefile *imagefile,
|
|||
goto cleanup;
|
||||
|
||||
option = gdk_pixbuf_get_option (pixbuf, TAG_THUMB_MTIME);
|
||||
if (!option || sscanf (option, "%ld", &y) != 1 || y != imagefile->image_mtime)
|
||||
if (!option || sscanf (option, "%ld", &thumb_image_mtime) != 1)
|
||||
goto cleanup;
|
||||
|
||||
option = gdk_pixbuf_get_option (pixbuf, TAG_THUMB_SIZE);
|
||||
if (!option || sscanf (option, "%ld", &thumb_image_size) != 1)
|
||||
goto cleanup;
|
||||
|
||||
if (thumb_image_mtime != imagefile->image_mtime ||
|
||||
thumb_image_size != imagefile->image_size)
|
||||
imagefile->state = GIMP_IMAGEFILE_STATE_THUMBNAIL_OLD;
|
||||
else
|
||||
imagefile->state = GIMP_IMAGEFILE_STATE_THUMBNAIL_OK;
|
||||
|
||||
/* now convert the pixbuf to a tempbuf */
|
||||
|
||||
width = gdk_pixbuf_get_width (pixbuf);
|
||||
|
@ -738,12 +796,14 @@ gimp_imagefile_read_png_thumb (GimpImagefile *imagefile,
|
|||
}
|
||||
|
||||
/* extract into about the original file from the pixbuf */
|
||||
gimp_imagefile_set_info_from_pixbuf (imagefile, pixbuf);
|
||||
gimp_imagefile_set_info_from_pixbuf (imagefile,
|
||||
imagefile->state != old_state,
|
||||
pixbuf);
|
||||
|
||||
cleanup:
|
||||
g_free (thumbname);
|
||||
if (pixbuf)
|
||||
g_object_unref (pixbuf);
|
||||
g_object_unref (pixbuf);
|
||||
if (error)
|
||||
g_error_free (error);
|
||||
|
||||
|
@ -833,6 +893,11 @@ gimp_imagefile_save_png_thumb (GimpImagefile *imagefile,
|
|||
uri, thumb_name, error->message);
|
||||
g_error_free (error);
|
||||
}
|
||||
else if (chmod (thumb_name, 0600))
|
||||
{
|
||||
g_message (_("Couldn't set permissions of thumbnail '%s'.\n%s"),
|
||||
thumb_name, g_strerror (errno));
|
||||
}
|
||||
|
||||
g_free (desc);
|
||||
g_free (t_str);
|
||||
|
@ -840,6 +905,7 @@ gimp_imagefile_save_png_thumb (GimpImagefile *imagefile,
|
|||
g_free (h_str);
|
||||
g_free (s_str);
|
||||
g_free (l_str);
|
||||
|
||||
}
|
||||
|
||||
g_object_unref (G_OBJECT (pixbuf));
|
||||
|
@ -883,6 +949,12 @@ gimp_imagefile_png_thumb_path (const gchar *uri,
|
|||
gchar *thumb_name = NULL;
|
||||
gint i, n;
|
||||
|
||||
if (strstr (uri, "/.thumbnails/"))
|
||||
{
|
||||
g_message (_("Cannot create thumbnail of thumbnail\n%s"), uri);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
name = gimp_imagefile_png_thumb_name (uri);
|
||||
|
||||
n = G_N_ELEMENTS (thumb_sizes);
|
||||
|
@ -935,8 +1007,7 @@ gimp_imagefile_find_png_thumb (const gchar *uri,
|
|||
{
|
||||
thumb_name = g_build_filename (thumb_subdirs[i], name, NULL);
|
||||
|
||||
if (gimp_imagefile_test (thumb_name, thumb_mtime, NULL) &&
|
||||
image_mtime <= *thumb_mtime)
|
||||
if (gimp_imagefile_test (thumb_name, thumb_mtime, NULL))
|
||||
{
|
||||
*thumb_size = thumb_sizes[i].size;
|
||||
return thumb_name;
|
||||
|
@ -949,8 +1020,7 @@ gimp_imagefile_find_png_thumb (const gchar *uri,
|
|||
{
|
||||
thumb_name = g_build_filename (thumb_subdirs[i], name, NULL);
|
||||
|
||||
if (gimp_imagefile_test (thumb_name, thumb_mtime, NULL) &&
|
||||
image_mtime <= *thumb_mtime)
|
||||
if (gimp_imagefile_test (thumb_name, thumb_mtime, NULL))
|
||||
{
|
||||
*thumb_size = thumb_sizes[i].size;
|
||||
return thumb_name;
|
||||
|
@ -1016,6 +1086,8 @@ gimp_imagefile_read_xv_thumb (GimpImagefile *imagefile)
|
|||
if (!raw_thumb)
|
||||
return NULL;
|
||||
|
||||
imagefile->state = GIMP_IMAGEFILE_STATE_THUMBNAIL_OLD;
|
||||
|
||||
if (image_info)
|
||||
{
|
||||
gint img_width;
|
||||
|
@ -1027,7 +1099,7 @@ gimp_imagefile_read_xv_thumb (GimpImagefile *imagefile)
|
|||
img_height = 0;
|
||||
}
|
||||
gimp_imagefile_set_info (imagefile, FALSE,
|
||||
img_width, img_height, -1, -1, -1);
|
||||
img_width, img_height, -1, -1);
|
||||
|
||||
g_free (image_info);
|
||||
}
|
||||
|
|
|
@ -36,7 +36,11 @@ typedef enum
|
|||
GIMP_IMAGEFILE_STATE_UNKNOWN,
|
||||
GIMP_IMAGEFILE_STATE_REMOTE,
|
||||
GIMP_IMAGEFILE_STATE_NOT_FOUND,
|
||||
GIMP_IMAGEFILE_STATE_EXISTS
|
||||
GIMP_IMAGEFILE_STATE_EXISTS,
|
||||
GIMP_IMAGEFILE_STATE_THUMBNAIL_NOT_FOUND,
|
||||
GIMP_IMAGEFILE_STATE_THUMBNAIL_OLD,
|
||||
GIMP_IMAGEFILE_STATE_THUMBNAIL_FAILED,
|
||||
GIMP_IMAGEFILE_STATE_THUMBNAIL_OK
|
||||
} GimpImagefileState;
|
||||
|
||||
|
||||
|
@ -54,18 +58,17 @@ struct _GimpImagefile
|
|||
{
|
||||
GimpViewable parent_instance;
|
||||
|
||||
GimpImagefileState state;
|
||||
|
||||
time_t image_mtime;
|
||||
gssize image_size;
|
||||
time_t thumb_mtime;
|
||||
|
||||
gint width;
|
||||
gint height;
|
||||
gssize size;
|
||||
GimpImageType type;
|
||||
gint n_layers;
|
||||
|
||||
GimpImagefileState image_state;
|
||||
time_t image_mtime;
|
||||
|
||||
GimpImagefileState thumb_state;
|
||||
time_t thumb_mtime;
|
||||
|
||||
gchar *description;
|
||||
gboolean static_desc;
|
||||
};
|
||||
|
|
|
@ -109,6 +109,8 @@ gimp_viewable_class_init (GimpViewableClass *klass)
|
|||
|
||||
gimp_object_class->get_memsize = gimp_viewable_get_memsize;
|
||||
|
||||
klass->name_changed_signal = "name_changed";
|
||||
|
||||
klass->invalidate_preview = gimp_viewable_real_invalidate_preview;
|
||||
klass->size_changed = NULL;
|
||||
|
||||
|
|
|
@ -47,6 +47,8 @@ struct _GimpViewableClass
|
|||
{
|
||||
GimpObjectClass parent_class;
|
||||
|
||||
const gchar *name_changed_signal;
|
||||
|
||||
/* signals */
|
||||
void (* invalidate_preview) (GimpViewable *viewable);
|
||||
void (* size_changed) (GimpViewable *viewable);
|
||||
|
|
|
@ -296,11 +296,20 @@ file_open_dialog_create (Gimp *gimp)
|
|||
gtk_box_pack_start (GTK_BOX (vbox2), open_options_title, FALSE, FALSE, 0);
|
||||
gtk_widget_show (open_options_title);
|
||||
|
||||
label = gtk_label_new (" \n ");
|
||||
label = gtk_label_new (" \n \n ");
|
||||
gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.0);
|
||||
gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_CENTER);
|
||||
gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, FALSE, 0);
|
||||
gtk_widget_show (label);
|
||||
|
||||
/* eek */
|
||||
{
|
||||
GtkRequisition requisition;
|
||||
|
||||
gtk_widget_size_request (label, &requisition);
|
||||
gtk_widget_set_size_request (label, -1, requisition.height);
|
||||
}
|
||||
|
||||
g_signal_connect (G_OBJECT (open_options_imagefile), "info_changed",
|
||||
G_CALLBACK (file_open_imagefile_info_changed),
|
||||
label);
|
||||
|
|
|
@ -100,8 +100,8 @@ documents_delete_document_cmd_callback (GtkWidget *widget,
|
|||
|
||||
|
||||
void
|
||||
documents_refresh_documents_cmd_callback (GtkWidget *widget,
|
||||
gpointer data)
|
||||
documents_recreate_preview_cmd_callback (GtkWidget *widget,
|
||||
gpointer data)
|
||||
{
|
||||
GimpDocumentView *view;
|
||||
|
||||
|
@ -113,6 +113,36 @@ documents_refresh_documents_cmd_callback (GtkWidget *widget,
|
|||
gtk_button_clicked (GTK_BUTTON (view->refresh_button));
|
||||
}
|
||||
|
||||
void
|
||||
documents_reload_previews_cmd_callback (GtkWidget *widget,
|
||||
gpointer data)
|
||||
{
|
||||
GimpDocumentView *view;
|
||||
|
||||
view = (GimpDocumentView *) gimp_widget_get_callback_context (widget);
|
||||
|
||||
if (! view)
|
||||
return;
|
||||
|
||||
gimp_button_extended_clicked (GIMP_BUTTON (view->refresh_button),
|
||||
GDK_SHIFT_MASK);
|
||||
}
|
||||
|
||||
void
|
||||
documents_delete_dangling_documents_cmd_callback (GtkWidget *widget,
|
||||
gpointer data)
|
||||
{
|
||||
GimpDocumentView *view;
|
||||
|
||||
view = (GimpDocumentView *) gimp_widget_get_callback_context (widget);
|
||||
|
||||
if (! view)
|
||||
return;
|
||||
|
||||
gimp_button_extended_clicked (GIMP_BUTTON (view->refresh_button),
|
||||
GDK_CONTROL_MASK);
|
||||
}
|
||||
|
||||
void
|
||||
documents_menu_update (GtkItemFactory *factory,
|
||||
gpointer data)
|
||||
|
@ -127,11 +157,13 @@ documents_menu_update (GtkItemFactory *factory,
|
|||
#define SET_SENSITIVE(menu,condition) \
|
||||
gimp_item_factory_set_sensitive (factory, menu, (condition) != 0)
|
||||
|
||||
SET_SENSITIVE ("/Open Image", imagefile);
|
||||
SET_SENSITIVE ("/Raise or Open Image", imagefile);
|
||||
SET_SENSITIVE ("/File Open Dialog...", TRUE);
|
||||
SET_SENSITIVE ("/Remove Entry", imagefile);
|
||||
SET_SENSITIVE ("/Refresh History", TRUE);
|
||||
SET_SENSITIVE ("/Open Image", imagefile);
|
||||
SET_SENSITIVE ("/Raise or Open Image", imagefile);
|
||||
SET_SENSITIVE ("/File Open Dialog...", TRUE);
|
||||
SET_SENSITIVE ("/Remove Entry", imagefile);
|
||||
SET_SENSITIVE ("/Recreate Preview", imagefile);
|
||||
SET_SENSITIVE ("/Reload all Previews", imagefile);
|
||||
SET_SENSITIVE ("/Remove Dangling Entries", imagefile);
|
||||
|
||||
#undef SET_SENSITIVE
|
||||
}
|
||||
|
|
|
@ -20,19 +20,23 @@
|
|||
#define __DOCUMENTS_COMMANDS_H__
|
||||
|
||||
|
||||
void documents_open_document_cmd_callback (GtkWidget *widget,
|
||||
gpointer data);
|
||||
void documents_raise_or_open_document_cmd_callback (GtkWidget *widget,
|
||||
gpointer data);
|
||||
void documents_file_open_dialog_cmd_callback (GtkWidget *widget,
|
||||
gpointer data);
|
||||
void documents_delete_document_cmd_callback (GtkWidget *widget,
|
||||
gpointer data);
|
||||
void documents_refresh_documents_cmd_callback (GtkWidget *widget,
|
||||
gpointer data);
|
||||
void documents_open_document_cmd_callback (GtkWidget *widget,
|
||||
gpointer data);
|
||||
void documents_raise_or_open_document_cmd_callback (GtkWidget *widget,
|
||||
gpointer data);
|
||||
void documents_file_open_dialog_cmd_callback (GtkWidget *widget,
|
||||
gpointer data);
|
||||
void documents_delete_document_cmd_callback (GtkWidget *widget,
|
||||
gpointer data);
|
||||
void documents_recreate_preview_cmd_callback (GtkWidget *widget,
|
||||
gpointer data);
|
||||
void documents_reload_previews_cmd_callback (GtkWidget *widget,
|
||||
gpointer data);
|
||||
void documents_delete_dangling_documents_cmd_callback (GtkWidget *widget,
|
||||
gpointer data);
|
||||
|
||||
void documents_menu_update (GtkItemFactory *factory,
|
||||
gpointer data);
|
||||
void documents_menu_update (GtkItemFactory *factory,
|
||||
gpointer data);
|
||||
|
||||
|
||||
#endif /* __DOCUMENTS_COMMANDS_H__ */
|
||||
|
|
|
@ -296,11 +296,20 @@ file_open_dialog_create (Gimp *gimp)
|
|||
gtk_box_pack_start (GTK_BOX (vbox2), open_options_title, FALSE, FALSE, 0);
|
||||
gtk_widget_show (open_options_title);
|
||||
|
||||
label = gtk_label_new (" \n ");
|
||||
label = gtk_label_new (" \n \n ");
|
||||
gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.0);
|
||||
gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_CENTER);
|
||||
gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, FALSE, 0);
|
||||
gtk_widget_show (label);
|
||||
|
||||
/* eek */
|
||||
{
|
||||
GtkRequisition requisition;
|
||||
|
||||
gtk_widget_size_request (label, &requisition);
|
||||
gtk_widget_set_size_request (label, -1, requisition.height);
|
||||
}
|
||||
|
||||
g_signal_connect (G_OBJECT (open_options_imagefile), "info_changed",
|
||||
G_CALLBACK (file_open_imagefile_info_changed),
|
||||
label);
|
||||
|
|
|
@ -1866,31 +1866,34 @@ static GimpItemFactoryEntry documents_entries[] =
|
|||
{ { N_("/Open Image"), NULL,
|
||||
documents_open_document_cmd_callback, 0,
|
||||
"<StockItem>", GTK_STOCK_OPEN },
|
||||
NULL,
|
||||
NULL, NULL },
|
||||
NULL, NULL, NULL },
|
||||
{ { N_("/Raise or Open Image"), NULL,
|
||||
documents_raise_or_open_document_cmd_callback, 0,
|
||||
"<StockItem>", GTK_STOCK_OPEN },
|
||||
NULL,
|
||||
NULL, NULL },
|
||||
NULL, NULL, NULL },
|
||||
{ { N_("/File Open Dialog..."), NULL,
|
||||
documents_file_open_dialog_cmd_callback, 0,
|
||||
"<StockItem>", GTK_STOCK_OPEN },
|
||||
NULL,
|
||||
NULL, NULL },
|
||||
NULL, NULL, NULL },
|
||||
{ { N_("/Remove Entry"), NULL,
|
||||
documents_delete_document_cmd_callback, 0,
|
||||
"<StockItem>", GTK_STOCK_DELETE },
|
||||
NULL,
|
||||
NULL, NULL },
|
||||
NULL, NULL, NULL },
|
||||
|
||||
SEPARATOR ("/---"),
|
||||
|
||||
{ { N_("/Refresh History"), NULL,
|
||||
documents_refresh_documents_cmd_callback, 0,
|
||||
{ { N_("/Recreate Preview"), NULL,
|
||||
documents_recreate_preview_cmd_callback, 0,
|
||||
"<StockItem>", GTK_STOCK_REFRESH },
|
||||
NULL,
|
||||
NULL, NULL }
|
||||
NULL, NULL, NULL },
|
||||
{ { N_("/Reload all Previews"), NULL,
|
||||
documents_reload_previews_cmd_callback, 0,
|
||||
"<StockItem>", GTK_STOCK_REFRESH },
|
||||
NULL, NULL, NULL },
|
||||
{ { N_("/Remove Dangling Entries"), NULL,
|
||||
documents_delete_dangling_documents_cmd_callback, 0,
|
||||
"<StockItem>", GTK_STOCK_REFRESH },
|
||||
NULL, NULL, NULL },
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -1866,31 +1866,34 @@ static GimpItemFactoryEntry documents_entries[] =
|
|||
{ { N_("/Open Image"), NULL,
|
||||
documents_open_document_cmd_callback, 0,
|
||||
"<StockItem>", GTK_STOCK_OPEN },
|
||||
NULL,
|
||||
NULL, NULL },
|
||||
NULL, NULL, NULL },
|
||||
{ { N_("/Raise or Open Image"), NULL,
|
||||
documents_raise_or_open_document_cmd_callback, 0,
|
||||
"<StockItem>", GTK_STOCK_OPEN },
|
||||
NULL,
|
||||
NULL, NULL },
|
||||
NULL, NULL, NULL },
|
||||
{ { N_("/File Open Dialog..."), NULL,
|
||||
documents_file_open_dialog_cmd_callback, 0,
|
||||
"<StockItem>", GTK_STOCK_OPEN },
|
||||
NULL,
|
||||
NULL, NULL },
|
||||
NULL, NULL, NULL },
|
||||
{ { N_("/Remove Entry"), NULL,
|
||||
documents_delete_document_cmd_callback, 0,
|
||||
"<StockItem>", GTK_STOCK_DELETE },
|
||||
NULL,
|
||||
NULL, NULL },
|
||||
NULL, NULL, NULL },
|
||||
|
||||
SEPARATOR ("/---"),
|
||||
|
||||
{ { N_("/Refresh History"), NULL,
|
||||
documents_refresh_documents_cmd_callback, 0,
|
||||
{ { N_("/Recreate Preview"), NULL,
|
||||
documents_recreate_preview_cmd_callback, 0,
|
||||
"<StockItem>", GTK_STOCK_REFRESH },
|
||||
NULL,
|
||||
NULL, NULL }
|
||||
NULL, NULL, NULL },
|
||||
{ { N_("/Reload all Previews"), NULL,
|
||||
documents_reload_previews_cmd_callback, 0,
|
||||
"<StockItem>", GTK_STOCK_REFRESH },
|
||||
NULL, NULL, NULL },
|
||||
{ { N_("/Remove Dangling Entries"), NULL,
|
||||
documents_delete_dangling_documents_cmd_callback, 0,
|
||||
"<StockItem>", GTK_STOCK_REFRESH },
|
||||
NULL, NULL, NULL },
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -382,11 +382,21 @@ gimp_container_view_imagefile_name_func (GtkWidget *widget,
|
|||
|
||||
if (tooltip)
|
||||
{
|
||||
gchar *filename;
|
||||
gchar *filename;
|
||||
const gchar *desc;
|
||||
|
||||
filename = file_utils_uri_to_utf8_filename (uri);
|
||||
desc = gimp_imagefile_get_description (imagefile);
|
||||
|
||||
*tooltip = filename;
|
||||
if (desc)
|
||||
{
|
||||
*tooltip = g_strdup_printf ("%s\n%s", filename, desc);
|
||||
g_free (filename);
|
||||
}
|
||||
else
|
||||
{
|
||||
*tooltip = filename;
|
||||
}
|
||||
}
|
||||
|
||||
if (imagefile->width > 0 && imagefile->height > 0)
|
||||
|
|
|
@ -176,7 +176,8 @@ gimp_document_view_new (GimpViewType view_type,
|
|||
gimp_editor_add_button (GIMP_EDITOR (editor->view),
|
||||
GTK_STOCK_REFRESH,
|
||||
_("Recreate preview\n"
|
||||
"<Shift> Reload all previews"),
|
||||
"<Shift> Reload all previews\n"
|
||||
"<Ctrl> Remove Dangling Entries"),
|
||||
NULL,
|
||||
G_CALLBACK (gimp_document_view_refresh_clicked),
|
||||
G_CALLBACK (gimp_document_view_refresh_extended_clicked),
|
||||
|
@ -333,6 +334,18 @@ gimp_document_view_refresh_clicked (GtkWidget *widget,
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_document_view_delete_dangling_foreach (GimpImagefile *imagefile,
|
||||
GimpContainer *container)
|
||||
{
|
||||
gimp_imagefile_update (imagefile);
|
||||
|
||||
if (imagefile->state == GIMP_IMAGEFILE_STATE_NOT_FOUND)
|
||||
{
|
||||
gimp_container_remove (container, GIMP_OBJECT (imagefile));
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_document_view_refresh_extended_clicked (GtkWidget *widget,
|
||||
guint state,
|
||||
|
@ -342,7 +355,13 @@ gimp_document_view_refresh_extended_clicked (GtkWidget *widget,
|
|||
|
||||
editor = GIMP_CONTAINER_EDITOR (view);
|
||||
|
||||
if (state & GDK_SHIFT_MASK)
|
||||
if (state & GDK_CONTROL_MASK)
|
||||
{
|
||||
gimp_container_foreach (editor->view->container,
|
||||
(GFunc) gimp_document_view_delete_dangling_foreach,
|
||||
editor->view->container);
|
||||
}
|
||||
else if (state & GDK_SHIFT_MASK)
|
||||
{
|
||||
gimp_container_foreach (editor->view->container,
|
||||
(GFunc) gimp_imagefile_update,
|
||||
|
|
|
@ -324,7 +324,8 @@ gimp_list_item_real_set_viewable (GimpListItem *list_item,
|
|||
|
||||
gimp_list_item_name_changed (viewable, list_item);
|
||||
|
||||
g_signal_connect_object (G_OBJECT (viewable), "name_changed",
|
||||
g_signal_connect_object (G_OBJECT (viewable),
|
||||
GIMP_VIEWABLE_GET_CLASS (viewable)->name_changed_signal,
|
||||
G_CALLBACK (gimp_list_item_name_changed),
|
||||
list_item, 0);
|
||||
|
||||
|
@ -592,21 +593,16 @@ gimp_list_item_name_changed (GimpViewable *viewable,
|
|||
{
|
||||
if (list_item->get_name_func)
|
||||
{
|
||||
gchar *name;
|
||||
gchar *tooltip;
|
||||
gchar *name = NULL;
|
||||
gchar *tooltip = NULL;
|
||||
|
||||
name = list_item->get_name_func (GTK_WIDGET (list_item), &tooltip);
|
||||
|
||||
gtk_label_set_text (GTK_LABEL (list_item->name_label), name);
|
||||
gimp_help_set_help_data (GTK_WIDGET (list_item), tooltip, NULL);
|
||||
|
||||
g_free (name);
|
||||
|
||||
if (tooltip)
|
||||
{
|
||||
gimp_help_set_help_data (GTK_WIDGET (list_item), tooltip, NULL);
|
||||
|
||||
g_free (tooltip);
|
||||
}
|
||||
g_free (tooltip);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -146,7 +146,8 @@ gimp_menu_item_real_set_viewable (GimpMenuItem *menu_item,
|
|||
|
||||
gimp_menu_item_name_changed (viewable, menu_item);
|
||||
|
||||
g_signal_connect_object (G_OBJECT (viewable), "name_changed",
|
||||
g_signal_connect_object (G_OBJECT (viewable),
|
||||
GIMP_VIEWABLE_GET_CLASS (viewable)->name_changed_signal,
|
||||
G_CALLBACK (gimp_menu_item_name_changed),
|
||||
menu_item, 0);
|
||||
|
||||
|
@ -185,21 +186,16 @@ gimp_menu_item_name_changed (GimpViewable *viewable,
|
|||
{
|
||||
if (menu_item->get_name_func)
|
||||
{
|
||||
gchar *name;
|
||||
gchar *tooltip;
|
||||
gchar *name = NULL;
|
||||
gchar *tooltip = NULL;
|
||||
|
||||
name = menu_item->get_name_func (GTK_WIDGET (menu_item), &tooltip);
|
||||
|
||||
gtk_label_set_text (GTK_LABEL (menu_item->name_label), name);
|
||||
gimp_help_set_help_data (GTK_WIDGET (menu_item), tooltip, NULL);
|
||||
|
||||
g_free (name);
|
||||
|
||||
if (tooltip)
|
||||
{
|
||||
gimp_help_set_help_data (GTK_WIDGET (menu_item), tooltip, NULL);
|
||||
|
||||
g_free (tooltip);
|
||||
}
|
||||
g_free (tooltip);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue