Added optional usage of libpreview (CVS version), which implements

2002-08-17  Jens Finke <jens@triq.net>

	Added optional usage of libpreview (CVS version), which
	implements thumbnail creation/storage after Thumbnail Management
	Standard.

	* configure.in: Added check for libpreview if collection view is
	enabled.

	* collection/Makefile.am (EXTRA_DIST): Added
	eog-collection-marshal.list.

	* collection/eog-image-loader-simple.[ch]: New files.

	* collection/eog-image-loader-preview.[ch]: New files. Image
	loader, which utilizes libpreview library.

	* collection/Makefile.am: Added libpreview conditional stuff and
	the new files.

	* collection/eog-collection-model.c: Removed image loading stuff.

	* collection/eog-collection-view.c
	(eog_collection_view_construct): Create either simple or
	libpreview image loader.

	* collection/eog-image-loader.[ch]: Reworked this as abstract
	interface. Moved previous implementation to
	eog-image-loader-simple.[ch].

	* collection/eog-item-factory-clean.[ch]: Added FACTORY DEBUG flag.
	(eog_item_factory_clean_instance_init): Set default thumbnail size
	to 96x96.
	(eog_item_factory_clean_dispose): Free image loader.
	(update_item_image): Added debug messages. Start thumbnail
	creation.
	(image_loading_finished),
	(image_loading_failed_cb): New functions.
	(eog_item_factory_clean_construct): Aded loader argument, setup
	loader object.
	(eog_item_factory_clean_new): Added loader argument.

	* collection/eog-item-factory.c: Removed marshal_* function
	declarations.

	* collection/eog-item-factory.h: Removed eog_item_factory_new
	declaration.

	* collection/eog-wrap-list.c: Fixed debug message guards.
	(do_item_selection_changed_update): Check for item != NULL.
This commit is contained in:
Jens Finke 2002-08-17 17:19:02 +00:00 committed by Jens Finke
parent c12d5a9a97
commit 19ac94fd99
15 changed files with 832 additions and 387 deletions

View file

@ -1,12 +1,18 @@
if ENABLE_LIBPREVIEW
LIBPREVIEW_FLAGS=-DHAVE_LIBPREVIEW
endif
INCLUDES = \
-DGNOMELOCALEDIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \
-DG_LOG_DOMAIN=\"Eog\" \
-DDATADIR=\""$(datadir)"\" \
$(LIBPREVIEW_FLAGS) \
-I$(top_srcdir) \
-I$(top_builddir) \
-I$(top_srcdir)/libeog \
-I$(top_builddir)/libeog \
$(EOG_CFLAGS) \
$(LIBPREVIEW_CFLAGS) \
$(EXTRA_WARNING_CFLAGS)
libexec_PROGRAMS = eog-collection-view
@ -47,6 +53,10 @@ eog_collection_view_SOURCES = \
cimage.h \
eog-image-loader.c \
eog-image-loader.h \
eog-image-loader-simple.c \
eog-image-loader-simple.h \
eog-image-loader-preview.c \
eog-image-loader-preview.h \
eog-collection-model.h \
eog-collection-model.c \
eog-item-factory.h \
@ -65,6 +75,7 @@ eog_collection_view_LDADD = \
-L$(top_builddir)/libeog \
-leog \
$(EOG_LIBS) \
$(LIBPREVIEW_LIBS) \
$(INTLLIBS) \
$(LIBPNG) $(LIBJPEG)
@ -83,4 +94,4 @@ $(EVOLUTION_GENERATED):
endif
CLEANFILES += $(EVOLUTION_GENERATED) $(BUILT_SOURCES)
EXTRA_DIST = $(server_in_files)
EXTRA_DIST = $(server_in_files) eog-collection-marshal.list

View file

@ -1,5 +1,4 @@
#include "eog-collection-model.h"
#include "eog-image-loader.h"
#include "bonobo/bonobo-moniker-util.h"
#include <libgnomevfs/gnome-vfs-directory.h>
#include <libgnome/gnome-macros.h>
@ -35,12 +34,6 @@ struct _EogCollectionModelPrivate {
GSList *selected_images;
/* does all the image loading work */
EogImageLoader *loader;
/* list of images to load with loader */
GSList *images_to_load;
/* base uri e.g. from a directory */
gchar *base_uri;
};
@ -53,9 +46,6 @@ static void eog_collection_model_finalize (GObject *object);
GNOME_CLASS_BOILERPLATE (EogCollectionModel, eog_collection_model,
GObject, G_TYPE_OBJECT);
static void
image_loading_finished_cb (EogImageLoader *loader, CImage *img, gpointer data);
static void
free_hash_image (gpointer key, gpointer value, gpointer data)
{
@ -90,10 +80,6 @@ eog_collection_model_dispose (GObject *obj)
model = EOG_COLLECTION_MODEL (obj);
if (model->priv->loader)
g_object_unref (G_OBJECT (model->priv->loader));
model->priv->loader = NULL;
if (model->priv->selected_images)
g_slist_free (model->priv->selected_images);
model->priv->selected_images = NULL;
@ -131,10 +117,8 @@ eog_collection_model_instance_init (EogCollectionModel *obj)
EogCollectionModelPrivate *priv;
priv = g_new0(EogCollectionModelPrivate, 1);
priv->loader = NULL;
priv->id_image_mapping = NULL;
priv->selected_images = NULL;
priv->images_to_load = NULL;
priv->base_uri = NULL;
obj->priv = priv;
}
@ -226,17 +210,8 @@ eog_collection_model_class_init (EogCollectionModelClass *klass)
void
eog_collection_model_construct (EogCollectionModel *model)
{
EogImageLoader *loader;
g_return_if_fail (model != NULL);
g_return_if_fail (EOG_IS_COLLECTION_MODEL (model));
/* init loader */
loader = eog_image_loader_new (92,68);
g_signal_connect (G_OBJECT (loader), "loading_finished",
G_CALLBACK (image_loading_finished_cb), model);
model->priv->loader = loader;
/* init hash table */
model->priv->id_image_mapping = g_hash_table_new ((GHashFunc) g_direct_hash,
@ -380,8 +355,6 @@ directory_visit_cb (const gchar *rel_path,
g_signal_emit_by_name (G_OBJECT (model),
"image-added", id);
eog_image_loader_start (priv->loader, img);
if (count++ % 50 == 0)
while (gtk_events_pending ())
@ -448,8 +421,6 @@ real_file_loading (LoadingContext *ctx)
img);
g_signal_emit_by_name (G_OBJECT (model),
"image-added", id);
eog_image_loader_start (priv->loader, img);
}
loading_context_free (ctx);
@ -569,15 +540,6 @@ eog_collection_model_set_uri_list (EogCollectionModel *model,
g_signal_emit_by_name (G_OBJECT (model), "base-uri-changed");
}
void
image_loading_finished_cb (EogImageLoader *loader, CImage *img, gpointer model)
{
g_signal_emit_by_name (G_OBJECT (model),
"image-changed",
cimage_get_unique_id (img));
}
gint
eog_collection_model_get_length (EogCollectionModel *model)
{

View file

@ -29,6 +29,12 @@
# include "Evolution-Composer.h"
#endif
#if HAVE_LIBPREVIEW
#include "eog-image-loader-preview.h"
#else
#include "eog-image-loader-simple.h"
#endif
#include "eog-item-factory-clean.h"
#include "eog-wrap-list.h"
#include "eog-collection-view.h"
@ -760,6 +766,7 @@ eog_collection_view_construct (EogCollectionView *list_view)
{
EogCollectionViewPrivate *priv = NULL;
EogItemFactory *factory;
EogImageLoader *loader;
g_return_val_if_fail (list_view != NULL, NULL);
g_return_val_if_fail (EOG_IS_COLLECTION_VIEW (list_view), NULL);
@ -792,7 +799,12 @@ eog_collection_view_construct (EogCollectionView *list_view)
G_CALLBACK (model_base_uri_changed),
list_view);
factory = EOG_ITEM_FACTORY (eog_item_factory_clean_new ());
#if HAVE_LIBPREVIEW
loader = eog_image_loader_preview_new (96, 96);
#else
loader = eog_image_loader_simple_new (96, 96);
#endif
factory = EOG_ITEM_FACTORY (eog_item_factory_clean_new (loader));
priv->root = gtk_scrolled_window_new (NULL, NULL);
@ -811,6 +823,7 @@ eog_collection_view_construct (EogCollectionView *list_view)
gtk_widget_show (priv->root);
g_object_unref (G_OBJECT (factory));
g_object_unref (G_OBJECT (loader));
/* Property Bag */
priv->property_bag = bonobo_property_bag_new (eog_collection_view_get_prop,

View file

@ -0,0 +1,194 @@
#if HAVE_LIBPREVIEW
#include <libpreview/libpreview.h>
#include "eog-image-loader-preview.h"
#include "cimage.h"
#include "eog-collection-marshal.h"
struct _EogImageLoaderPreviewPrivate {
gint thumb_width;
gint thumb_height;
};
typedef struct {
CImage *image;
EogImageLoaderPreview *loader;
} LoadingContext;
static void eog_image_loader_preview_class_init (EogImageLoaderPreviewClass *klass);
static void eog_image_loader_preview_instance_init (EogImageLoaderPreview *loader);
static void eog_image_loader_preview_dispose (GObject *obj);
static void eog_image_loader_preview_finalize (GObject *obj);
static void eog_image_loader_preview_start (EogImageLoader *loader, CImage *img);
static void eog_image_loader_preview_stop (EogImageLoader *loader);
GNOME_CLASS_BOILERPLATE (EogImageLoaderPreview, eog_image_loader_preview,
EogImageLoader, EOG_TYPE_IMAGE_LOADER);
#define USE_ASYNC 1
void
eog_image_loader_preview_class_init (EogImageLoaderPreviewClass *klass)
{
GObjectClass *obj_class;
EogImageLoaderClass *eil_class;
obj_class = (GObjectClass*) klass;
eil_class = (EogImageLoaderClass*) klass;
obj_class->dispose = eog_image_loader_preview_dispose;
obj_class->finalize = eog_image_loader_preview_finalize;
eil_class->start = eog_image_loader_preview_start;
eil_class->stop = eog_image_loader_preview_stop;
}
void
eog_image_loader_preview_instance_init (EogImageLoaderPreview *loader)
{
EogImageLoaderPreviewPrivate *priv;
priv = g_new0 (EogImageLoaderPreviewPrivate, 1);
loader->priv = priv;
}
void
eog_image_loader_preview_dispose (GObject *obj)
{
GNOME_CALL_PARENT (G_OBJECT_CLASS, dispose, (obj));
}
void
eog_image_loader_preview_finalize (GObject *obj)
{
EogImageLoaderPreview *loader;
preview_cache_async_shutdown ();
loader = EOG_IMAGE_LOADER_PREVIEW (obj);
if (loader->priv != NULL)
g_free (loader->priv);
loader->priv = NULL;
GNOME_CALL_PARENT (G_OBJECT_CLASS, finalize, (obj));
}
EogImageLoader*
eog_image_loader_preview_new (gint thumb_width, gint thumb_height)
{
EogImageLoaderPreview *loader;
preview_cache_init ();
#if USE_ASYNC
preview_cache_async_init ();
#endif
loader = EOG_IMAGE_LOADER_PREVIEW (g_object_new (EOG_TYPE_IMAGE_LOADER_PREVIEW, NULL));
loader->priv->thumb_width = thumb_width;
loader->priv->thumb_height = thumb_height;
return EOG_IMAGE_LOADER (loader);
}
static void
loading_finished (PreviewThumbnail *thumb, GError **err, gpointer data)
{
LoadingContext *context;
EogImageLoaderPreview *loader;
PreviewThumbnailStatus status;
GdkPixbuf *pixbuf;
CImage *image;
context = (LoadingContext*) data;
image = context->image;
loader = context->loader;
g_free (context);
status = preview_thumbnail_get_status (thumb);
if (status == PREVIEW_THUMBNAIL_LOADED) {
pixbuf = preview_thumbnail_get_pixbuf (thumb);
cimage_set_thumbnail (image, pixbuf);
cimage_set_image_dimensions (image,
gdk_pixbuf_get_width (pixbuf),
gdk_pixbuf_get_height (pixbuf));
g_object_unref (G_OBJECT (pixbuf));
g_object_unref (G_OBJECT (thumb));
_eog_image_loader_loading_finished (EOG_IMAGE_LOADER (loader), image);
}
else {
cimage_set_loading_failed (image);
g_object_unref (G_OBJECT (thumb));
_eog_image_loader_loading_failed (EOG_IMAGE_LOADER (loader), image);
}
}
static void
loading_canceled (PreviewThumbnail *thumb, GError **err, gpointer data)
{
LoadingContext *context;
EogImageLoaderPreview *loader;
CImage *image;
context = (LoadingContext*) data;
image = context->image;
loader = context->loader;
g_free (context);
g_object_unref (G_OBJECT (thumb));
_eog_image_loader_loading_canceled (EOG_IMAGE_LOADER (loader), image);
}
static void
eog_image_loader_preview_start (EogImageLoader *loader, CImage *image)
{
EogImageLoaderPreviewPrivate *priv;
PreviewThumbnail *thumb;
GnomeVFSURI *uri;
LoadingContext *context;
g_return_if_fail (EOG_IS_IMAGE_LOADER_PREVIEW (loader));
g_return_if_fail (IS_CIMAGE (image));
priv = EOG_IMAGE_LOADER_PREVIEW (loader)->priv;
context = g_new0 (LoadingContext, 1);
context->loader = EOG_IMAGE_LOADER_PREVIEW (loader);
context->image = image;
uri = cimage_get_uri (image);
thumb = preview_thumbnail_new_uri (uri, priv->thumb_width, priv->thumb_height);
#if USE_ASYNC
preview_cache_thumbnail_request_async (thumb,
loading_finished,
loading_canceled,
NULL,
context);
#else
preview_cache_thumbnail_request (thumb, NULL);
loading_finished (thumb, NULL, context);
#endif
gnome_vfs_uri_unref (uri);
}
static void
eog_image_loader_preview_stop (EogImageLoader *loader)
{
#if USE_ASYNC
preview_cache_cancel_existing_jobs ();
#endif
}
#endif

View file

@ -0,0 +1,41 @@
#ifndef _EOG_IMAGE_LOADER_PREVIEW_H_
#define _EOG_IMAGE_LOADER_PREVIEW_H_
#if HAVE_LIBPREVIEW
#include <glib-object.h>
#include "eog-image-loader.h"
G_BEGIN_DECLS
#define EOG_TYPE_IMAGE_LOADER_PREVIEW (eog_image_loader_preview_get_type ())
#define EOG_IMAGE_LOADER_PREVIEW(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EOG_TYPE_IMAGE_LOADER_PREVIEW, EogImageLoaderPreview))
#define EOG_IMAGE_LOADER_PREVIEW_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EOG_TYPE_IMAGE_LOADER_PREVIEW, EogImageLoaderPreviewClass))
#define EOG_IS_IMAGE_LOADER_PREVIEW(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EOG_TYPE_IMAGE_LOADER_PREVIEW))
#define EOG_IS_IMAGE_LOADER_PREVIEW_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EOG_TYPE_IMAGE_LOADER_PREVIEW))
typedef struct _EogImageLoaderPreview EogImageLoaderPreview;
typedef struct _EogImageLoaderPreviewClass EogImageLoaderPreviewClass;
typedef struct _EogImageLoaderPreviewPrivate EogImageLoaderPreviewPrivate;
struct _EogImageLoaderPreviewClass {
EogImageLoaderClass parent_class;
};
struct _EogImageLoaderPreview {
EogImageLoader loader;
EogImageLoaderPreviewPrivate *priv;
};
GType eog_image_loader_preview_get_type (void);
EogImageLoader*
eog_image_loader_preview_new (gint thumb_width, gint thumb_height);
G_END_DECLS
#endif
#endif /* _EOG_IMAGE_LOADER_PREVIEW_H_ */

View file

@ -0,0 +1,373 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <bonobo/Bonobo.h>
#include <bonobo/bonobo-moniker-util.h>
#include <libgnomevfs/gnome-vfs-types.h>
#include <libgnomevfs/gnome-vfs-uri.h>
#include <libgnomevfs/gnome-vfs-ops.h>
#include <libgnome/gnome-macros.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include "eog-image-loader-simple.h"
#include "cimage.h"
#include "eog-collection-marshal.h"
typedef struct {
EogImageLoaderSimple *loader;
CImage *cimg;
GdkPixbufLoader *pbf_loader_simple;
} EILContext;
struct _EogImageLoaderSimplePrivate {
gint thumb_width;
gint thumb_height;
GList *queue;
gint idle_handler_id;
gboolean active;
gboolean cancel_loading;
};
static void eog_image_loader_simple_class_init (EogImageLoaderSimpleClass *klass);
static void eog_image_loader_simple_instance_init (EogImageLoaderSimple *loader);
static void eog_image_loader_simple_dispose (GObject *obj);
static void eog_image_loader_simple_finalize (GObject *obj);
static void eog_image_loader_simple_start (EogImageLoader *loader, CImage *img);
static void eog_image_loader_simple_stop (EogImageLoader *loader);
static gint setup_next_uri (EogImageLoaderSimple *loader);
GNOME_CLASS_BOILERPLATE (EogImageLoaderSimple, eog_image_loader_simple,
EogImageLoader, EOG_TYPE_IMAGE_LOADER);
void
eog_image_loader_simple_class_init (EogImageLoaderSimpleClass *klass)
{
GObjectClass *obj_class;
EogImageLoaderClass *eil_class;
obj_class = (GObjectClass*) klass;
eil_class = (EogImageLoaderClass*) klass;
obj_class->dispose = eog_image_loader_simple_dispose;
obj_class->finalize = eog_image_loader_simple_finalize;
eil_class->start = eog_image_loader_simple_start;
eil_class->stop = eog_image_loader_simple_stop;
}
void
eog_image_loader_simple_instance_init (EogImageLoaderSimple *loader)
{
EogImageLoaderSimplePrivate *priv;
priv = g_new0 (EogImageLoaderSimplePrivate, 1);
priv->queue = NULL;
priv->idle_handler_id = -1;
priv->cancel_loading = FALSE;
loader->priv = priv;
}
void
eog_image_loader_simple_dispose (GObject *obj)
{
EogImageLoaderSimple *loader;
g_return_if_fail (EOG_IS_IMAGE_LOADER_SIMPLE (obj));
loader = EOG_IMAGE_LOADER_SIMPLE (obj);
/* FIXME: Free resources */
GNOME_CALL_PARENT (G_OBJECT_CLASS, dispose, (obj));
}
void
eog_image_loader_simple_finalize (GObject *obj)
{
GNOME_CALL_PARENT (G_OBJECT_CLASS, finalize, (obj));
}
EogImageLoader*
eog_image_loader_simple_new (gint thumb_width, gint thumb_height)
{
EogImageLoaderSimple *loader;
loader = EOG_IMAGE_LOADER_SIMPLE (g_object_new (EOG_TYPE_IMAGE_LOADER_SIMPLE, NULL));
loader->priv->thumb_width = thumb_width;
loader->priv->thumb_height = thumb_height;
return EOG_IMAGE_LOADER (loader);
}
/* Scales a width/height pair to fit in a specific size */
static void
scale_to_fit (int src_w, int src_h, int fit_w, int fit_h, int *dest_w, int *dest_h)
{
*dest_w = fit_w;
*dest_h = (src_h * *dest_w) / src_w;
if (*dest_h > fit_h) {
*dest_h = fit_h;
*dest_w = (src_w * *dest_h) / src_h;
}
g_assert (*dest_w <= fit_w);
g_assert (*dest_h <= fit_h);
}
static GdkPixbuf*
scale_image (EogImageLoaderSimple *loader, GdkPixbuf *image)
{
EogImageLoaderSimplePrivate *priv;
GdkPixbuf *thumb;
gint pixbuf_w, pixbuf_h;
gint thumb_w, thumb_h;
priv = loader->priv;
if (image) {
pixbuf_w = gdk_pixbuf_get_width (image);
pixbuf_h = gdk_pixbuf_get_height (image);
} else
pixbuf_w = pixbuf_h = 0;
if (pixbuf_w > priv->thumb_width || pixbuf_h > priv->thumb_height) {
scale_to_fit (pixbuf_w, pixbuf_h,
priv->thumb_width, priv->thumb_height,
&thumb_w, &thumb_h);
thumb = gdk_pixbuf_scale_simple (image,
thumb_w,
thumb_h,
GDK_INTERP_BILINEAR);
} else {
thumb_w = pixbuf_w;
thumb_h = pixbuf_h;
thumb = image;
g_object_ref (thumb);
}
return thumb;
}
static void
loading_canceled (EILContext *ctx)
{
EogImageLoaderSimple *loader;
g_return_if_fail (ctx != NULL);
g_return_if_fail (ctx->loader != NULL);
loader = ctx->loader;
#ifdef COLLECTION_DEBUG
g_message ("Loading canceled\n");
#endif
g_signal_emit_by_name (G_OBJECT (ctx->loader),
"loading_canceled",
ctx->cimg);
if (ctx->pbf_loader_simple)
gdk_pixbuf_loader_close (ctx->pbf_loader_simple, NULL);
g_free (ctx);
loader->priv->cancel_loading = FALSE;
g_list_free (loader->priv->queue);
loader->priv->queue = NULL;
loader->priv->active = FALSE;
}
static void
loading_finished (EILContext *ctx)
{
EogImageLoaderSimple *loader;
gboolean loading_failed = FALSE;
loader = ctx->loader;
if (cimage_has_loading_failed (ctx->cimg))
loading_failed = TRUE;
else {
GdkPixbuf *pbf;
GdkPixbuf *thumb;
/* scale loaded image */
pbf = gdk_pixbuf_loader_get_pixbuf (ctx->pbf_loader_simple);
if (pbf != NULL) {
thumb = scale_image (loader, pbf);
#ifdef COLLECTION_DEBUG
g_message ("Successfully finished loading for: %s\n", cimage_get_uri (ctx->cimg));
#endif
cimage_set_thumbnail (ctx->cimg, thumb);
cimage_set_image_dimensions (ctx->cimg,
gdk_pixbuf_get_width (pbf),
gdk_pixbuf_get_height (pbf));
g_object_unref (thumb);
g_object_unref (pbf);
g_signal_emit_by_name (G_OBJECT (ctx->loader),
"loading_finished",
ctx->cimg);
} else {
loading_failed = TRUE;
}
}
if (loading_failed) {
#ifdef COLLECTION_DEBUG
g_message ("Loading failed for: %s\n", cimage_get_uri (ctx->cimg)->text);
#endif
cimage_set_loading_failed (ctx->cimg);
g_signal_emit_by_name (G_OBJECT (ctx->loader),
"loading_failed",
ctx->cimg);
}
g_free (ctx);
setup_next_uri (loader);
}
static gint
load_uri (EILContext *ctx)
{
EogImageLoaderSimplePrivate *priv;
guchar *buffer;
gint p = 0;
GnomeVFSResult result;
GnomeVFSHandle *handle;
GnomeVFSFileSize bytes_read;
priv = ctx->loader->priv;
/* remove idle handler */
gtk_idle_remove (priv->idle_handler_id);
priv->idle_handler_id = -1;
/* try to obtain BonoboStream */
result = gnome_vfs_open_uri (&handle, cimage_get_uri (ctx->cimg),
GNOME_VFS_OPEN_READ);
if (result != GNOME_VFS_OK) {
cimage_set_loading_failed (ctx->cimg);
loading_finished (ctx);
return FALSE;
}
g_assert (handle != NULL);
/* create loader */
ctx->pbf_loader_simple = gdk_pixbuf_loader_new ();
/* loading image from stream */
buffer = g_new0 (guchar, 4096);
while (!priv->cancel_loading) {
result = gnome_vfs_read (handle, buffer,
4096, &bytes_read);
if (result == GNOME_VFS_ERROR_EOF) break;
if (result != GNOME_VFS_OK)
goto loading_error;
if (bytes_read == 0) break; /* reached end of stream */
if(!gdk_pixbuf_loader_write(ctx->pbf_loader_simple,
buffer, bytes_read, NULL)) {
goto loading_error;
}
/* update gui every 50th time */
if (p++ % 50 == 0)
while (gtk_events_pending ())
gtk_main_iteration ();
}
g_free (buffer);
gnome_vfs_close (handle);
gdk_pixbuf_loader_close (ctx->pbf_loader_simple, NULL);
if (priv->cancel_loading)
loading_canceled (ctx);
else
loading_finished (ctx);
return TRUE;
loading_error:
cimage_set_loading_failed (ctx->cimg);
g_free (buffer);
gnome_vfs_close (handle);
loading_finished (ctx);
return FALSE;
}
static gint
setup_next_uri (EogImageLoaderSimple *loader)
{
EILContext *ctx = NULL;
EogImageLoaderSimplePrivate *priv;
g_return_val_if_fail (loader != NULL, FALSE);
g_return_val_if_fail (EOG_IS_IMAGE_LOADER_SIMPLE (loader), FALSE);
priv = loader->priv;
if (priv->idle_handler_id != -1)
gtk_idle_remove (priv->idle_handler_id);
priv->idle_handler_id = -1;
if (priv->queue != NULL) {
ctx = g_new0 (EILContext, 1);
ctx->loader = loader;
ctx->pbf_loader_simple = NULL;
ctx->cimg = (CImage*) priv->queue->data;
priv->queue = g_list_remove (priv->queue, ctx->cimg);
#ifdef COLLECTION_DEBUG
g_message ("Open image: %s\n", cimage_get_uri (ctx->cimg));
#endif
priv->idle_handler_id = gtk_idle_add ((GtkFunction) load_uri, ctx);
} else {
priv->active = FALSE;
}
return TRUE;
}
static void
eog_image_loader_simple_start (EogImageLoader *loader, CImage *img)
{
EogImageLoaderSimplePrivate *priv;
g_return_if_fail (EOG_IS_IMAGE_LOADER_SIMPLE (loader));
g_return_if_fail (IS_CIMAGE (img));
priv = EOG_IMAGE_LOADER_SIMPLE (loader)->priv;
priv->queue = g_list_append (priv->queue, img);
if (!priv->active) {
priv->active = TRUE;
priv->idle_handler_id = gtk_idle_add ((GtkFunction) setup_next_uri, loader);
}
}
static void
eog_image_loader_simple_stop (EogImageLoader *loader)
{
g_return_if_fail (EOG_IS_IMAGE_LOADER_SIMPLE (loader));
EOG_IMAGE_LOADER_SIMPLE (loader)->priv->cancel_loading = TRUE;
}

View file

@ -0,0 +1,37 @@
#ifndef _EOG_IMAGE_LOADER_SIMPLE_H_
#define _EOG_IMAGE_LOADER_SIMPLE_H_
#include <glib-object.h>
#include "eog-image-loader.h"
G_BEGIN_DECLS
#define EOG_TYPE_IMAGE_LOADER_SIMPLE (eog_image_loader_simple_get_type ())
#define EOG_IMAGE_LOADER_SIMPLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EOG_TYPE_IMAGE_LOADER_SIMPLE, EogImageLoaderSimple))
#define EOG_IMAGE_LOADER_SIMPLE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EOG_TYPE_IMAGE_LOADER_SIMPLE, EogImageLoaderSimpleClass))
#define EOG_IS_IMAGE_LOADER_SIMPLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EOG_TYPE_IMAGE_LOADER_SIMPLE))
#define EOG_IS_IMAGE_LOADER_SIMPLE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EOG_TYPE_IMAGE_LOADER_SIMPLE))
typedef struct _EogImageLoaderSimple EogImageLoaderSimple;
typedef struct _EogImageLoaderSimpleClass EogImageLoaderSimpleClass;
typedef struct _EogImageLoaderSimplePrivate EogImageLoaderSimplePrivate;
struct _EogImageLoaderSimpleClass {
EogImageLoaderClass parent_class;
};
struct _EogImageLoaderSimple {
EogImageLoader loader;
EogImageLoaderSimplePrivate *priv;
};
GType eog_image_loader_simple_get_type (void);
EogImageLoader*
eog_image_loader_simple_new (gint thumb_width, gint thumb_height);
G_END_DECLS
#endif /* _EOG_IMAGE_LOADER_SIMPLE_H_ */

View file

@ -1,50 +1,22 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <bonobo/Bonobo.h>
#include <bonobo/bonobo-moniker-util.h>
#include <libgnomevfs/gnome-vfs-types.h>
#include <libgnomevfs/gnome-vfs-uri.h>
#include <libgnomevfs/gnome-vfs-ops.h>
#include <libgnome/gnome-macros.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <glib-object.h>
#include "eog-image-loader.h"
#include "cimage.h"
#include "eog-collection-marshal.h"
typedef struct {
EogImageLoader *loader;
CImage *cimg;
GdkPixbufLoader *pbf_loader;
} EILContext;
enum {
LOADING_FINISHED,
LOADING_CANCELED,
LOADING_FAILED,
START,
STOP,
LAST_SIGNAL
};
static guint eog_image_loader_signals [LAST_SIGNAL];
struct _EogImageLoaderPrivate {
gint thumb_width;
gint thumb_height;
GList *queue;
gint idle_handler_id;
gboolean active;
gboolean cancel_loading;
};
static void eog_image_loader_class_init (EogImageLoaderClass *klass);
static void eog_image_loader_instance_init (EogImageLoader *loader);
static void eog_image_loader_dispose (GObject *obj);
static gint setup_next_uri (EogImageLoader *loader);
GNOME_CLASS_BOILERPLATE (EogImageLoader, eog_image_loader,
GObject, G_TYPE_OBJECT);
@ -81,311 +53,72 @@ eog_image_loader_class_init (EogImageLoaderClass *klass)
eog_collection_marshal_VOID__POINTER,
G_TYPE_NONE, 1,
G_TYPE_POINTER);
obj_class->dispose = eog_image_loader_dispose;
eog_image_loader_signals [START] =
g_signal_new ("start",
G_TYPE_FROM_CLASS (obj_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (EogImageLoaderClass, start),
NULL, NULL,
eog_collection_marshal_VOID__POINTER,
G_TYPE_NONE, 1,
G_TYPE_POINTER);
eog_image_loader_signals [STOP] =
g_signal_new ("stop",
G_TYPE_FROM_CLASS (obj_class),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (EogImageLoaderClass, start),
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
}
void
eog_image_loader_instance_init (EogImageLoader *loader)
{
EogImageLoaderPrivate *priv;
priv = g_new0 (EogImageLoaderPrivate, 1);
priv->queue = NULL;
priv->idle_handler_id = -1;
priv->cancel_loading = FALSE;
loader->priv = priv;
}
void
eog_image_loader_dispose (GObject *obj)
_eog_image_loader_loading_finished (EogImageLoader *loader, CImage *img)
{
EogImageLoader *loader;
g_return_if_fail (EOG_IS_IMAGE_LOADER (loader));
g_return_if_fail (IS_CIMAGE (img));
g_return_if_fail (obj != NULL);
g_return_if_fail (EOG_IS_IMAGE_LOADER (obj));
loader = EOG_IMAGE_LOADER (obj);
GNOME_CALL_PARENT (G_OBJECT_CLASS, dispose, (obj));
g_signal_emit_by_name (G_OBJECT (loader), "loading_finished", img);
}
EogImageLoader*
eog_image_loader_new (gint thumb_width, gint thumb_height)
void
_eog_image_loader_loading_canceled (EogImageLoader *loader, CImage *img)
{
EogImageLoader *loader;
g_return_if_fail (EOG_IS_IMAGE_LOADER (loader));
g_return_if_fail (IS_CIMAGE (img));
loader = EOG_IMAGE_LOADER (g_object_new (EOG_TYPE_IMAGE_LOADER, NULL));
loader->priv->thumb_width = thumb_width;
loader->priv->thumb_height = thumb_height;
return loader;
g_signal_emit_by_name (G_OBJECT (loader), "loading_canceled", img);
}
/* Scales a width/height pair to fit in a specific size */
static void
scale_to_fit (int src_w, int src_h, int fit_w, int fit_h, int *dest_w, int *dest_h)
void
_eog_image_loader_loading_failed (EogImageLoader *loader, CImage *img)
{
*dest_w = fit_w;
*dest_h = (src_h * *dest_w) / src_w;
g_return_if_fail (EOG_IS_IMAGE_LOADER (loader));
g_return_if_fail (IS_CIMAGE (img));
if (*dest_h > fit_h) {
*dest_h = fit_h;
*dest_w = (src_w * *dest_h) / src_h;
}
g_assert (*dest_w <= fit_w);
g_assert (*dest_h <= fit_h);
}
static GdkPixbuf*
scale_image (EogImageLoader *loader, GdkPixbuf *image)
{
EogImageLoaderPrivate *priv;
GdkPixbuf *thumb;
gint pixbuf_w, pixbuf_h;
gint thumb_w, thumb_h;
priv = loader->priv;
if (image) {
pixbuf_w = gdk_pixbuf_get_width (image);
pixbuf_h = gdk_pixbuf_get_height (image);
} else
pixbuf_w = pixbuf_h = 0;
if (pixbuf_w > priv->thumb_width || pixbuf_h > priv->thumb_height) {
scale_to_fit (pixbuf_w, pixbuf_h,
priv->thumb_width, priv->thumb_height,
&thumb_w, &thumb_h);
thumb = gdk_pixbuf_scale_simple (image,
thumb_w,
thumb_h,
GDK_INTERP_BILINEAR);
} else {
thumb_w = pixbuf_w;
thumb_h = pixbuf_h;
thumb = image;
g_object_ref (thumb);
}
return thumb;
}
static void
loading_canceled (EILContext *ctx)
{
EogImageLoader *loader;
g_return_if_fail (ctx != NULL);
g_return_if_fail (ctx->loader != NULL);
loader = ctx->loader;
#ifdef COLLECTION_DEBUG
g_message ("Loading canceled\n");
#endif
g_signal_emit_by_name (G_OBJECT (ctx->loader),
"loading_canceled",
ctx->cimg);
if (ctx->pbf_loader)
gdk_pixbuf_loader_close (ctx->pbf_loader, NULL);
g_free (ctx);
loader->priv->cancel_loading = FALSE;
g_list_free (loader->priv->queue);
loader->priv->queue = NULL;
loader->priv->active = FALSE;
}
static void
loading_finished (EILContext *ctx)
{
EogImageLoader *loader;
gboolean loading_failed = FALSE;
loader = ctx->loader;
if (cimage_has_loading_failed (ctx->cimg))
loading_failed = TRUE;
else {
GdkPixbuf *pbf;
GdkPixbuf *thumb;
/* scale loaded image */
pbf = gdk_pixbuf_loader_get_pixbuf (ctx->pbf_loader);
if (pbf != NULL) {
thumb = scale_image (loader, pbf);
#ifdef COLLECTION_DEBUG
g_message ("Successfully finished loading for: %s\n", cimage_get_uri (ctx->cimg));
#endif
cimage_set_thumbnail (ctx->cimg, thumb);
cimage_set_image_dimensions (ctx->cimg,
gdk_pixbuf_get_width (pbf),
gdk_pixbuf_get_height (pbf));
g_object_unref (thumb);
g_object_unref (pbf);
g_signal_emit_by_name (G_OBJECT (ctx->loader),
"loading_finished",
ctx->cimg);
} else {
loading_failed = TRUE;
}
}
if (loading_failed) {
#ifdef COLLECTION_DEBUG
g_message ("Loading failed for: %s\n", cimage_get_uri (ctx->cimg)->text);
#endif
cimage_set_loading_failed (ctx->cimg);
g_signal_emit_by_name (G_OBJECT (ctx->loader),
"loading_failed",
ctx->cimg);
}
g_free (ctx);
setup_next_uri (loader);
}
static gint
load_uri (EILContext *ctx)
{
EogImageLoaderPrivate *priv;
guchar *buffer;
gint p = 0;
GnomeVFSResult result;
GnomeVFSHandle *handle;
GnomeVFSFileSize bytes_read;
priv = ctx->loader->priv;
/* remove idle handler */
gtk_idle_remove (priv->idle_handler_id);
priv->idle_handler_id = -1;
/* try to obtain BonoboStream */
result = gnome_vfs_open_uri (&handle, cimage_get_uri (ctx->cimg),
GNOME_VFS_OPEN_READ);
if (result != GNOME_VFS_OK) {
cimage_set_loading_failed (ctx->cimg);
loading_finished (ctx);
return FALSE;
}
g_assert (handle != NULL);
/* create loader */
ctx->pbf_loader = gdk_pixbuf_loader_new ();
/* loading image from stream */
buffer = g_new0 (guchar, 4096);
while (!priv->cancel_loading) {
result = gnome_vfs_read (handle, buffer,
4096, &bytes_read);
if (result == GNOME_VFS_ERROR_EOF) break;
if (result != GNOME_VFS_OK)
goto loading_error;
if (bytes_read == 0) break; /* reached end of stream */
if(!gdk_pixbuf_loader_write(ctx->pbf_loader,
buffer, bytes_read, NULL)) {
goto loading_error;
}
/* update gui every 50th time */
if (p++ % 50 == 0)
while (gtk_events_pending ())
gtk_main_iteration ();
}
g_free (buffer);
gnome_vfs_close (handle);
gdk_pixbuf_loader_close (ctx->pbf_loader, NULL);
if (priv->cancel_loading)
loading_canceled (ctx);
else
loading_finished (ctx);
return TRUE;
loading_error:
cimage_set_loading_failed (ctx->cimg);
g_free (buffer);
gnome_vfs_close (handle);
loading_finished (ctx);
return FALSE;
}
static gint
setup_next_uri (EogImageLoader *loader)
{
EILContext *ctx = NULL;
EogImageLoaderPrivate *priv;
g_return_val_if_fail (loader != NULL, FALSE);
g_return_val_if_fail (EOG_IS_IMAGE_LOADER (loader), FALSE);
priv = loader->priv;
if (priv->idle_handler_id != -1)
gtk_idle_remove (priv->idle_handler_id);
priv->idle_handler_id = -1;
if (priv->queue != NULL) {
ctx = g_new0 (EILContext, 1);
ctx->loader = loader;
ctx->pbf_loader = NULL;
ctx->cimg = (CImage*) priv->queue->data;
priv->queue = g_list_remove (priv->queue, ctx->cimg);
#ifdef COLLECTION_DEBUG
g_message ("Open image: %s\n", cimage_get_uri (ctx->cimg));
#endif
priv->idle_handler_id = gtk_idle_add ((GtkFunction) load_uri, ctx);
} else {
priv->active = FALSE;
}
return TRUE;
g_signal_emit_by_name (G_OBJECT (loader), "loading_failed", img);
}
void
eog_image_loader_start (EogImageLoader *loader, CImage *img)
{
EogImageLoaderPrivate *priv;
g_return_if_fail (loader != NULL);
g_return_if_fail (EOG_IS_IMAGE_LOADER (loader));
g_return_if_fail (IS_CIMAGE (img));
priv = loader->priv;
priv->queue = g_list_append (priv->queue, img);
if (!priv->active) {
priv->active = TRUE;
priv->idle_handler_id = gtk_idle_add ((GtkFunction) setup_next_uri, loader);
}
g_signal_emit_by_name (G_OBJECT (loader), "start", img);
}
void
eog_image_loader_stop (EogImageLoader *loader)
{
g_return_if_fail (loader != NULL);
g_return_if_fail (EOG_IS_IMAGE_LOADER (loader));
loader->priv->cancel_loading = TRUE;
g_signal_emit_by_name (G_OBJECT (loader), "stop");
}

View file

@ -19,27 +19,32 @@ typedef struct _EogImageLoaderPrivate EogImageLoaderPrivate;
struct _EogImageLoaderClass {
GObjectClass parent_class;
/* signals */
void (* loading_finished) (EogImageLoader *loader, CImage *img);
void (* loading_canceled) (EogImageLoader *loader, CImage *img);
void (* loading_failed) (EogImageLoader *loader, CImage *img);
/* virtuell functions */
void (* start) (EogImageLoader *loader, CImage *img);
void (* stop) (EogImageLoader *loader);
};
struct _EogImageLoader {
GObject parent;
EogImageLoaderPrivate *priv;
};
GType eog_image_loader_get_type (void);
EogImageLoader*
eog_image_loader_new (gint thumb_width, gint thumb_height);
void eog_image_loader_start (EogImageLoader *loader, CImage *img);
void eog_image_loader_stop (EogImageLoader *loader);
/* only for internal use */
void _eog_image_loader_loading_finished (EogImageLoader *loader, CImage *img);
void _eog_image_loader_loading_canceled (EogImageLoader *loader, CImage *img);
void _eog_image_loader_loading_failed (EogImageLoader *loader, CImage *img);
G_END_DECLS
#endif /* _EOG_IMAGE_LOADER_H_ */

View file

@ -35,9 +35,12 @@
#define MAX_CAPTION_LINES 2
#define FACTORY_DEBUG 0
/* Private part of the EogItemFactoryClean structure */
struct _EogItemFactoryCleanPrivate {
EogImageLoader *loader;
/* item metrics */
EogCleanMetrics *metrics;
@ -69,13 +72,11 @@ typedef struct {
GnomeCanvasItem *bgr;
} IconItem;
static void eog_item_factory_clean_class_init (EogItemFactoryCleanClass *class);
static void eog_item_factory_clean_instance_init (EogItemFactoryClean *factory);
static void eog_item_factory_clean_dispose (GObject *object);
static void eog_item_factory_clean_finalize (GObject *object);
static EogItemFactoryClean* eog_item_factory_clean_construct (EogItemFactoryClean *factory);
static EogItemFactoryClean* eog_item_factory_clean_construct (EogItemFactoryClean *factory, EogImageLoader *loader);
static GnomeCanvasItem *ii_factory_create_item (EogItemFactory *factory,
GnomeCanvasGroup *parent, guint id);
@ -118,14 +119,15 @@ eog_item_factory_clean_instance_init (EogItemFactoryClean *factory)
priv = g_new0 (EogItemFactoryCleanPrivate, 1);
metrics = g_new0 (EogCleanMetrics, 1);
metrics->twidth = 92;
metrics->theight = 69;
metrics->twidth = 96;
metrics->theight = 96;
metrics->cspace = 5;
metrics->cpadding = 2;
metrics->font_height = 12;
priv->metrics = metrics;
priv->stipple = gdk_bitmap_create_from_data (NULL, stipple_bits, 2, 2);
priv->loader = NULL;
factory->priv = priv;
}
@ -155,6 +157,10 @@ eog_item_factory_clean_dispose (GObject *object)
g_object_unref (G_OBJECT (priv->stipple));
priv->stipple = NULL;
if (priv->loader)
g_object_unref (G_OBJECT (priv->loader));
priv->loader = NULL;
GNOME_CALL_PARENT (G_OBJECT_CLASS, dispose, (object));
}
@ -412,20 +418,36 @@ update_item_image (EogItemFactoryClean *factory, GnomeCanvasItem *item, CImage *
int image_x, image_y;
double x1, y1, x2, y2;
GdkPixbuf *thumb;
gboolean start_thumb_creation = FALSE;
metrics = factory->priv->metrics;
priv = factory->priv;
#if FACTORY_DEBUG
g_message ("update_item_image - id:%i", cimage_get_unique_id (cimage));
#endif
icon = g_object_get_data (G_OBJECT (item), "IconItem");
g_assert (icon != NULL);
/* obtain thumbnail image */
if (cimage_has_thumbnail (cimage)) {
#if FACTORY_DEBUG
g_message (" ** have thumbnail - id:%i", cimage_get_unique_id (cimage));
#endif
thumb = cimage_get_thumbnail (cimage);
}
else {
thumb = priv->dummy;
g_object_ref (thumb);
if (!cimage_has_loading_failed (cimage)) {
start_thumb_creation = TRUE;
#if FACTORY_DEBUG
g_message (" ** start thumbnail creation - id:%i", cimage_get_unique_id (cimage));
#endif
g_object_set_data (G_OBJECT (cimage), "CanvasItem", item);
}
}
g_assert (thumb != NULL);
@ -448,6 +470,10 @@ update_item_image (EogItemFactoryClean *factory, GnomeCanvasItem *item, CImage *
NULL);
g_object_unref (thumb);
if (start_thumb_creation) {
eog_image_loader_start (EOG_IMAGE_LOADER (priv->loader), cimage);
}
}
static void
@ -635,8 +661,35 @@ ii_factory_get_item_size (EogItemFactory *factory,
+ 4; /* padding between caption lines */
}
static void
image_loading_finished_cb (EogImageLoader *loader, CImage *image, EogItemFactoryClean *factory)
{
GnomeCanvasItem *item;
#if FACTORY_DEBUG
g_message ("image_loading_finished - id:%i", cimage_get_unique_id (image));
#endif
if (IS_CIMAGE (image)) {
item = (GnomeCanvasItem*) g_object_get_data (G_OBJECT (image), "CanvasItem");
update_item_image (factory, item, image);
}
}
static void
image_loading_failed_cb (EogImageLoader *loader, CImage *image, EogItemFactoryClean *factory)
{
GnomeCanvasItem *item;
if (IS_CIMAGE (image)) {
cimage_set_loading_failed (image);
item = (GnomeCanvasItem*) g_object_get_data (G_OBJECT (image), "CanvasItem");
update_item_image (factory, item, image);
}
}
static EogItemFactoryClean*
eog_item_factory_clean_construct (EogItemFactoryClean *factory)
eog_item_factory_clean_construct (EogItemFactoryClean *factory, EogImageLoader *loader)
{
EogItemFactoryCleanPrivate *priv;
char *dummy_file;
@ -650,17 +703,29 @@ eog_item_factory_clean_construct (EogItemFactoryClean *factory)
priv->dummy = gdk_pixbuf_new_from_file (dummy_file, NULL);
g_free (dummy_file);
/* image loader setup */
priv->loader = loader;
if (loader != NULL) {
g_signal_connect (G_OBJECT (loader), "loading_finished",
G_CALLBACK (image_loading_finished_cb), factory);
g_signal_connect (G_OBJECT (loader), "loading_canceled",
G_CALLBACK (image_loading_failed_cb), factory);
g_signal_connect (G_OBJECT (loader), "loading_failed",
G_CALLBACK (image_loading_failed_cb), factory);
g_object_ref (priv->loader);
}
return factory;
}
EogItemFactoryClean *
eog_item_factory_clean_new (void)
eog_item_factory_clean_new (EogImageLoader *loader)
{
EogItemFactoryClean *factory;
factory = EOG_ITEM_FACTORY_CLEAN (g_object_new (EOG_TYPE_ITEM_FACTORY_CLEAN, NULL));
return eog_item_factory_clean_construct (factory);
return eog_item_factory_clean_construct (factory, loader);
}
/**

View file

@ -23,6 +23,7 @@
#define EOG_ITEM_FACTORY_CLEAN_H
#include "eog-item-factory.h"
#include "eog-image-loader.h"
G_BEGIN_DECLS
@ -75,7 +76,7 @@ typedef struct {
GType eog_item_factory_clean_get_type (void);
EogItemFactoryClean *eog_item_factory_clean_new (void);
EogItemFactoryClean *eog_item_factory_clean_new (EogImageLoader *loader);
void eog_item_factory_clean_set_metrics (EogItemFactoryClean *factory,
EogCleanMetrics *metrics);

View file

@ -41,14 +41,6 @@ enum {
static void eog_item_factory_class_init (EogItemFactoryClass *class);
static void eog_item_factory_instance_init (EogItemFactory *obj);
static void marshal_create_item (GtkObject *object, GtkSignalFunc func,
gpointer data, GtkArg *args);
static void marshal_update_item (GtkObject *object, GtkSignalFunc func,
gpointer data, GtkArg *args);
static void marshal_get_item_size (GtkObject *object, GtkSignalFunc func,
gpointer data, GtkArg *args);
static guint ei_factory_signals[LAST_SIGNAL];
GNOME_CLASS_BOILERPLATE (EogItemFactory, eog_item_factory,

View file

@ -80,8 +80,6 @@ struct _EogItemFactoryClass {
GType eog_item_factory_get_type (void);
GObject* eog_item_factory_new (void);
GnomeCanvasItem *eog_item_factory_create_item (EogItemFactory *factory,
GnomeCanvasGroup *parent,
guint id);

View file

@ -529,7 +529,7 @@ model_image_changed (EogCollectionModel *model, GQuark id, gpointer data)
g_return_if_fail (EOG_IS_WRAP_LIST (data));
#ifdef COLLECTION_DEBUG
#if COLLECTION_DEBUG
g_message ("model_interval_changed called");
#endif
priv = EOG_WRAP_LIST (data)->priv;
@ -552,7 +552,7 @@ model_image_added (EogCollectionModel *model, GQuark id, gpointer data)
{
g_return_if_fail (EOG_IS_WRAP_LIST (data));
#ifdef COLLECTION_DEBUG
#if COLLECTION_DEBUG
g_message ("model_interval_added called\n");
#endif
@ -565,7 +565,7 @@ model_image_removed (EogCollectionModel *model, GQuark id, gpointer data)
{
g_return_if_fail (EOG_IS_WRAP_LIST (data));
#ifdef COLLECTION_DEBUG
#if COLLECTION_DEBUG
g_message ("model_interval_removed called\n");
#endif
@ -579,7 +579,7 @@ model_selection_changed (EogCollectionModel *model, GQuark id, gpointer data)
{
g_return_if_fail (EOG_IS_WRAP_LIST (data));
#ifdef COLLECTION_DEBUG
#if COLLECTION_DEBUG
g_message ("model_selection_changed called");
#endif
@ -591,7 +591,7 @@ model_selected_all (EogCollectionModel *model, gpointer data)
{
g_return_if_fail (EOG_IS_WRAP_LIST (data));
#ifdef COLLECTION_DEBUG
#if COLLECTION_DEBUG
g_message ("model_selected_all called");
#endif
@ -603,7 +603,7 @@ model_selected_none (EogCollectionModel *model, gpointer data)
{
g_return_if_fail (EOG_IS_WRAP_LIST (data));
#ifdef COLLECTION_DEBUG
#if COLLECTION_DEBUG
g_message ("model_selected_none called");
#endif
@ -813,7 +813,7 @@ request_update (EogWrapList *wlist)
g_return_if_fail (wlist != NULL);
g_return_if_fail (EOG_IS_WRAP_LIST (wlist));
#ifdef COLLECTION_DEBUG
#if COLLECTION_DEBUG
g_message ("request_update called.");
#endif
@ -849,7 +849,7 @@ do_item_changed_update (EogWrapList *wlist,
g_return_if_fail (wlist != NULL);
g_return_if_fail (EOG_IS_WRAP_LIST (wlist));
#ifdef COLLECTION_DEBUG
#if COLLECTION_DEBUG
g_message ("do_item_changed_update called - id:%i", id);
#endif
@ -879,7 +879,7 @@ do_item_removed_update (EogWrapList *wlist,
*layout_check_needed = FALSE;
*item_rearrangement_needed = FALSE;
#ifdef COLLECTION_DEBUG
#if COLLECTION_DEBUG
g_message ("do_item_removed_update called - id:%i", id);
#endif
@ -914,7 +914,7 @@ do_item_added_update (EogWrapList *wlist,
g_return_if_fail (wlist != NULL);
g_return_if_fail (EOG_IS_WRAP_LIST (wlist));
#ifdef COLLECTION_DEBUG
#if COLLECTION_DEBUG
g_message ("do_item_added_update called - id:%i", id);
#endif
@ -971,16 +971,18 @@ do_item_selection_changed_update (EogWrapList *wlist,
g_return_if_fail (wlist != NULL);
g_return_if_fail (EOG_IS_WRAP_LIST (wlist));
#ifdef COLLECTION_DEBUG
#if COLLECTION_DEBUG
g_message ("do_item_selection_changed - id:%i", id);
#endif
priv = wlist->priv;
item = get_item_by_unique_id (wlist, id);
eog_item_factory_update_item (priv->factory,
priv->model,
item, EOG_ITEM_UPDATE_SELECTION_STATE);
if (item != NULL) {
eog_item_factory_update_item (priv->factory,
priv->model,
item, EOG_ITEM_UPDATE_SELECTION_STATE);
}
}
static void
@ -1012,7 +1014,7 @@ do_item_selection_update_all (EogWrapList *wlist,
g_return_if_fail (wlist != NULL);
g_return_if_fail (EOG_IS_WRAP_LIST (wlist));
#ifdef COLLECTION_DEBUG
#if COLLECTION_DEBUG
g_message ("do_item_selection_update_all");
#endif
priv = wlist->priv;
@ -1033,7 +1035,7 @@ do_layout_check (EogWrapList *wlist)
priv = wlist->priv;
#ifdef COLLECTION_DEBUG
#if COLLECTION_DEBUG
g_message ("do_layout_check called");
#endif
@ -1071,7 +1073,7 @@ do_layout_check (EogWrapList *wlist)
g_assert_not_reached ();
}
#ifdef COLLECTION_DEBUG
#if COLLECTION_DEBUG
g_print (" ** canvas width: %i\n",cw);
g_print (" ** n_cols_new: %i\n", n_cols_new);
g_print (" ** n_rows_new: %i\n", n_rows_new);
@ -1143,7 +1145,7 @@ do_item_rearrangement (EogWrapList *wlist)
data.wlist = wlist;
data.n = 0;
#ifdef COLLECTION_DEBUG
#if COLLECTION_DEBUG
g_message ("do_item_rearrangement called");
#endif
@ -1159,6 +1161,10 @@ do_item_rearrangement (EogWrapList *wlist)
gnome_canvas_set_scroll_region (GNOME_CANVAS (wlist),
0.0, 0.0,
sr_width, sr_height);
#if COLLECTION_DEBUG
g_message ("do_item_rearrangement leaved");
#endif
}
static void

View file

@ -81,6 +81,19 @@ AC_ARG_ENABLE(collection,
fi)
AM_CONDITIONAL(ENABLE_COLLECTION, test x$collection = xyes)
dnl ******************************************************
dnl Check if we have libpreview when the collection is desired
dnl ******************************************************
libpreview=no
if test x$collection = xyes; then
LIBPREVIEW_MODULE="libpreview"
PKG_CHECK_MODULES(LIBPREVIEW, $LIBPREVIEW_MODULE, libpreview=yes, libpreview=no)
AC_SUBST(LIBPREVIEW_CFLAGS)
AC_SUBST(LIBPREVIEW_LIBS)
fi
AM_CONDITIONAL(ENABLE_LIBPREVIEW, test x$libpreview = xyes)
dnl *******************************************************
dnl Check for evolution
dnl *******************************************************
@ -279,4 +292,5 @@ Configuration:
Extra Compiler Warnings: ${EXTRA_WARNING_CFLAGS}
Build collection view (experimental): ${collection}
Use libpreview: ${libpreview}
"