mirror of
https://gitlab.gnome.org/GNOME/eog
synced 2024-10-19 14:34:42 +00:00
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:
parent
c12d5a9a97
commit
19ac94fd99
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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,
|
||||
|
|
194
collection/eog-image-loader-preview.c
Normal file
194
collection/eog-image-loader-preview.c
Normal 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
|
41
collection/eog-image-loader-preview.h
Normal file
41
collection/eog-image-loader-preview.h
Normal 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_ */
|
373
collection/eog-image-loader-simple.c
Normal file
373
collection/eog-image-loader-simple.c
Normal 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;
|
||||
}
|
||||
|
||||
|
37
collection/eog-image-loader-simple.h
Normal file
37
collection/eog-image-loader-simple.h
Normal 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_ */
|
|
@ -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");
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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_ */
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
14
configure.in
14
configure.in
|
@ -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}
|
||||
"
|
||||
|
|
Loading…
Reference in a new issue