summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/eom-close-confirmation-dialog.c16
-rw-r--r--src/eom-jobs.c6
-rw-r--r--src/eom-jobs.h4
-rw-r--r--src/eom-list-store.c10
-rw-r--r--src/eom-list-store.h3
-rw-r--r--src/eom-metadata-sidebar.c5
-rw-r--r--src/eom-scroll-view.c30
-rw-r--r--src/eom-thumb-view.c25
-rw-r--r--src/eom-window.c69
-rw-r--r--src/eom-window.h3
-rw-r--r--src/main.c5
-rw-r--r--src/meson.build180
12 files changed, 291 insertions, 65 deletions
diff --git a/src/eom-close-confirmation-dialog.c b/src/eom-close-confirmation-dialog.c
index ad8dc63..b862ba0 100644
--- a/src/eom-close-confirmation-dialog.c
+++ b/src/eom-close-confirmation-dialog.c
@@ -451,8 +451,6 @@ populate_model (GtkTreeModel *store, GList *imgs)
const gchar *name;
GdkPixbuf *buf = NULL;
GdkPixbuf *buf_scaled = NULL;
- int width;
- double ratio;
img = EOM_IMAGE (imgs->data);
@@ -460,9 +458,17 @@ populate_model (GtkTreeModel *store, GList *imgs)
buf = eom_image_get_thumbnail (img);
if (buf) {
- ratio = IMAGE_COLUMN_HEIGHT / (double) gdk_pixbuf_get_height (buf);
- width = (int) (gdk_pixbuf_get_width (buf) * ratio);
- buf_scaled = gdk_pixbuf_scale_simple (buf, width, IMAGE_COLUMN_HEIGHT, GDK_INTERP_BILINEAR);
+ int height;
+ int width;
+ double ratio;
+
+ height = gdk_pixbuf_get_height (buf);
+ ratio = IMAGE_COLUMN_HEIGHT / (double) height;
+ width = gdk_pixbuf_get_width (buf);
+ buf_scaled = gdk_pixbuf_scale_simple (buf,
+ (int) (ratio * (double) width),
+ IMAGE_COLUMN_HEIGHT,
+ GDK_INTERP_BILINEAR);
} else
buf_scaled = get_nothumb_pixbuf ();
diff --git a/src/eom-jobs.c b/src/eom-jobs.c
index bde2517..7104268 100644
--- a/src/eom-jobs.c
+++ b/src/eom-jobs.c
@@ -351,6 +351,7 @@ eom_job_model_class_init (EomJobModelClass *class)
/**
* eom_job_model_new:
* @file_list: (element-type GFile): a #GFile list
+ * @preserve_order: Flag to indicate whether to honor the order of input parameters.
*
* Creates a new #EomJob model.
*
@@ -358,13 +359,14 @@ eom_job_model_class_init (EomJobModelClass *class)
*/
EomJob *
-eom_job_model_new (GSList *file_list)
+eom_job_model_new (GSList *file_list, gboolean preserve_order)
{
EomJobModel *job;
job = g_object_new (EOM_TYPE_JOB_MODEL, NULL);
job->file_list = file_list;
+ job->preserve_order = preserve_order;
return EOM_JOB (job);
}
@@ -438,7 +440,7 @@ eom_job_model_run (EomJob *ejob)
job->store = EOM_LIST_STORE (eom_list_store_new ());
- eom_list_store_add_files (job->store, filtered_list);
+ eom_list_store_add_files (job->store, filtered_list, job->preserve_order);
g_list_free_full (filtered_list, g_object_unref);
g_list_free_full (error_list, g_free);
diff --git a/src/eom-jobs.h b/src/eom-jobs.h
index df2283e..37bc26e 100644
--- a/src/eom-jobs.h
+++ b/src/eom-jobs.h
@@ -163,6 +163,7 @@ struct _EomJobModel
EomJob parent;
EomListStore *store;
GSList *file_list;
+ gboolean preserve_order;
};
struct _EomJobModelClass
@@ -247,7 +248,8 @@ EomJob *eom_job_load_new (EomImage *image,
/* EomJobModel */
GType eom_job_model_get_type (void) G_GNUC_CONST;
-EomJob *eom_job_model_new (GSList *file_list);
+EomJob *eom_job_model_new (GSList *file_list,
+ gboolean preserve_order);
/* EomJobTransform */
GType eom_job_transform_get_type (void) G_GNUC_CONST;
diff --git a/src/eom-list-store.c b/src/eom-list-store.c
index 0115b1d..3d1a9c6 100644
--- a/src/eom-list-store.c
+++ b/src/eom-list-store.c
@@ -34,7 +34,8 @@ struct _EomListStorePrivate {
gint initial_image; /* The image that should be selected firstly by the view. */
GdkPixbuf *busy_image; /* Loading image icon */
GdkPixbuf *missing_image; /* Missing image icon */
- GMutex mutex; /* Mutex for saving the jobs in the model */
+ GMutex mutex; /* Mutex for saving the jobs in the model */
+ gboolean preserve_order; /* If TRUE, preserves the original order of files */
};
G_DEFINE_TYPE_WITH_PRIVATE (EomListStore, eom_list_store, GTK_TYPE_LIST_STORE);
@@ -529,6 +530,7 @@ eom_list_store_append_directory (EomListStore *store,
* eom_list_store_add_files:
* @store: An #EomListStore.
* @file_list: (element-type GFile): A %NULL-terminated list of #GFile's.
+ * @preserve_order: Flag to indicate whether to honor the order of input parameters.
*
* Adds a list of #GFile's to @store. The given list
* must be %NULL-terminated.
@@ -540,7 +542,7 @@ eom_list_store_append_directory (EomListStore *store,
*
**/
void
-eom_list_store_add_files (EomListStore *store, GList *file_list)
+eom_list_store_add_files (EomListStore *store, GList *file_list, gboolean preserve_order)
{
GList *it;
GFileInfo *file_info;
@@ -624,7 +626,11 @@ eom_list_store_add_files (EomListStore *store, GList *file_list)
g_free (caption);
}
+ /* Set the sort behaviour depending on the toggle option.
+ If preserve_order is TRUE, then preserve the order in which files were provided.
+ Otherwise, use the default sort function. */
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store),
+ preserve_order ? GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID : \
GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID,
GTK_SORT_ASCENDING);
diff --git a/src/eom-list-store.h b/src/eom-list-store.h
index 6536b10..bc5052b 100644
--- a/src/eom-list-store.h
+++ b/src/eom-list-store.h
@@ -81,7 +81,8 @@ void eom_list_store_append_image (EomListStore *store,
EomImage *image);
void eom_list_store_add_files (EomListStore *store,
- GList *file_list);
+ GList *file_list,
+ gboolean preserve_order);
void eom_list_store_remove_image (EomListStore *store,
EomImage *image);
diff --git a/src/eom-metadata-sidebar.c b/src/eom-metadata-sidebar.c
index 982a937..9b8fc8b 100644
--- a/src/eom-metadata-sidebar.c
+++ b/src/eom-metadata-sidebar.c
@@ -263,11 +263,16 @@ eom_metadata_sidebar_set_image (EomMetadataSidebar *sidebar, EomImage *image)
if (image == priv->image)
return;
+#if GLIB_CHECK_VERSION(2,62,0)
+ g_clear_signal_handler (&priv->thumb_changed_id,
+ priv->image);
+#else
if (priv->thumb_changed_id != 0) {
g_signal_handler_disconnect (priv->image,
priv->thumb_changed_id);
priv->thumb_changed_id = 0;
}
+#endif
if (priv->image)
g_object_unref (priv->image);
diff --git a/src/eom-scroll-view.c b/src/eom-scroll-view.c
index d438021..ee57c77 100644
--- a/src/eom-scroll-view.c
+++ b/src/eom-scroll-view.c
@@ -87,8 +87,8 @@ struct _EomScrollViewPrivate {
/* actual image */
EomImage *image;
- guint image_changed_id;
- guint frame_changed_id;
+ gulong image_changed_id;
+ gulong frame_changed_id;
GdkPixbuf *pixbuf;
cairo_surface_t *surface;
@@ -188,15 +188,20 @@ free_image_resources (EomScrollView *view)
priv = view->priv;
- if (priv->image_changed_id > 0) {
+#if GLIB_CHECK_VERSION(2,62,0)
+ g_clear_signal_handler (&priv->image_changed_id, priv->image);
+ g_clear_signal_handler (&priv->frame_changed_id, priv->image);
+#else
+ if (priv->image_changed_id != 0) {
g_signal_handler_disconnect (priv->image, priv->image_changed_id);
priv->image_changed_id = 0;
}
- if (priv->frame_changed_id > 0) {
+ if (priv->frame_changed_id != 0) {
g_signal_handler_disconnect (priv->image, priv->frame_changed_id);
priv->frame_changed_id = 0;
}
+#endif
if (priv->image != NULL) {
eom_image_data_unref (priv->image);
@@ -1028,12 +1033,12 @@ eom_scroll_view_scroll_event (GtkWidget *widget, GdkEventScroll *event, gpointer
case GDK_SCROLL_DOWN:
zoom_factor = 1.0 / priv->zoom_multiplier;
xofs = 0;
- yofs = yofs;
+ /* yofs = yofs; */
break;
case GDK_SCROLL_RIGHT:
zoom_factor = priv->zoom_multiplier;
- xofs = xofs;
+ /* xofs = xofs; */
yofs = 0;
break;
@@ -1294,7 +1299,8 @@ display_draw (GtkWidget *widget, cairo_t *cr, gpointer data)
cairo_matrix_init_identity (&matrix);
if (transform) {
cairo_matrix_t affine;
- double image_offset_x = 0., image_offset_y = 0.;
+ int image_offset_x = 0;
+ int image_offset_y = 0;
eom_transform_get_affine (transform, &affine);
cairo_matrix_multiply (&matrix, &affine, &matrix);
@@ -1302,23 +1308,23 @@ display_draw (GtkWidget *widget, cairo_t *cr, gpointer data)
switch (eom_transform_get_transform_type (transform)) {
case EOM_TRANSFORM_ROT_90:
case EOM_TRANSFORM_FLIP_HORIZONTAL:
- image_offset_x = (double) gdk_pixbuf_get_width (priv->pixbuf);
+ image_offset_x = gdk_pixbuf_get_width (priv->pixbuf);
break;
case EOM_TRANSFORM_ROT_270:
case EOM_TRANSFORM_FLIP_VERTICAL:
- image_offset_y = (double) gdk_pixbuf_get_height (priv->pixbuf);
+ image_offset_y = gdk_pixbuf_get_height (priv->pixbuf);
break;
case EOM_TRANSFORM_ROT_180:
case EOM_TRANSFORM_TRANSPOSE:
case EOM_TRANSFORM_TRANSVERSE:
- image_offset_x = (double) gdk_pixbuf_get_width (priv->pixbuf);
- image_offset_y = (double) gdk_pixbuf_get_height (priv->pixbuf);
+ image_offset_x = gdk_pixbuf_get_width (priv->pixbuf);
+ image_offset_y = gdk_pixbuf_get_height (priv->pixbuf);
break;
case EOM_TRANSFORM_NONE:
default:
break;
}
- cairo_matrix_init_translate (&translate, image_offset_x, image_offset_y);
+ cairo_matrix_init_translate (&translate, (double) image_offset_x, (double) image_offset_y);
cairo_matrix_multiply (&matrix, &matrix, &translate);
}
/* Zoom factor for SVGs is already scaled, so scale back to application pixels. */
diff --git a/src/eom-thumb-view.c b/src/eom-thumb-view.c
index 3a2ddf4..0b28440 100644
--- a/src/eom-thumb-view.c
+++ b/src/eom-thumb-view.c
@@ -78,7 +78,7 @@ struct _EomThumbViewPrivate {
gint end_thumb; /* the last visible thumbnail */
GtkWidget *menu; /* a contextual menu for thumbnails */
GtkCellRenderer *pixbuf_cell;
- gint visible_range_changed_id;
+ guint visible_range_changed_id;
GtkOrientation orientation;
gint n_images;
@@ -167,17 +167,24 @@ eom_thumb_view_dispose (GObject *object)
priv->visible_range_changed_id = 0;
}
- model = gtk_icon_view_get_model (GTK_ICON_VIEW (object));
-
- if (model && priv->image_add_id != 0) {
- g_signal_handler_disconnect (model, priv->image_add_id);
- priv->image_add_id = 0;
+#if GLIB_CHECK_VERSION(2,62,0)
+ if ((model = gtk_icon_view_get_model (GTK_ICON_VIEW (object))) != NULL) {
+ g_clear_signal_handler (&priv->image_add_id, model);
+ g_clear_signal_handler (&priv->image_removed_id, model);
}
+#else
+ if ((model = gtk_icon_view_get_model (GTK_ICON_VIEW (object))) != NULL) {
+ if (priv->image_add_id != 0) {
+ g_signal_handler_disconnect (model, priv->image_add_id);
+ priv->image_add_id = 0;
+ }
- if (model && priv->image_removed_id) {
- g_signal_handler_disconnect (model, priv->image_removed_id);
- priv->image_removed_id = 0;
+ if (priv->image_removed_id != 0) {
+ g_signal_handler_disconnect (model, priv->image_removed_id);
+ priv->image_removed_id = 0;
+ }
}
+#endif
G_OBJECT_CLASS (eom_thumb_view_parent_class)->dispose (object);
}
diff --git a/src/eom-window.c b/src/eom-window.c
index 6c4b5d2..c039d67 100644
--- a/src/eom-window.c
+++ b/src/eom-window.c
@@ -496,38 +496,40 @@ update_status_bar (EomWindow *window)
priv = window->priv;
- if (priv->image != NULL &&
- eom_image_has_data (priv->image, EOM_IMAGE_DATA_DIMENSION)) {
- int zoom, width, height;
- goffset bytes = 0;
+ if (priv->image != NULL)
+ {
+ if ( eom_image_has_data (priv->image, EOM_IMAGE_DATA_DIMENSION))
+ {
+ int zoom, width, height;
+ goffset bytes = 0;
- zoom = floor (100 * eom_scroll_view_get_zoom (EOM_SCROLL_VIEW (priv->view)) + 0.5);
+ zoom = floor (100 * eom_scroll_view_get_zoom (EOM_SCROLL_VIEW (priv->view)) + 0.5);
- eom_image_get_size (priv->image, &width, &height);
+ eom_image_get_size (priv->image, &width, &height);
- bytes = eom_image_get_bytes (priv->image);
+ bytes = eom_image_get_bytes (priv->image);
- if ((width > 0) && (height > 0)) {
- char *size_string;
+ if ((width > 0) && (height > 0)) {
+ char *size_string;
- size_string = g_format_size (bytes);
+ size_string = g_format_size (bytes);
- /* Translators: This is the string displayed in the statusbar
- * The tokens are from left to right:
- * - image width
- * - image height
- * - image size in bytes
- * - zoom in percent */
- str = g_strdup_printf (ngettext("%i × %i pixel %s %i%%",
- "%i × %i pixels %s %i%%", height),
- width,
- height,
- size_string,
- zoom);
+ /* Translators: This is the string displayed in the statusbar
+ * The tokens are from left to right:
+ * - image width
+ * - image height
+ * - image size in bytes
+ * - zoom in percent */
+ str = g_strdup_printf (ngettext("%i × %i pixel %s %i%%",
+ "%i × %i pixels %s %i%%", height),
+ width,
+ height,
+ size_string,
+ zoom);
- g_free (size_string);
+ g_free (size_string);
+ }
}
-
update_image_pos (window);
}
@@ -574,7 +576,6 @@ update_action_groups_state (EomWindow *window)
GtkAction *action_sshow;
GtkAction *action_print;
gboolean print_disabled = FALSE;
- gboolean show_image_collection = FALSE;
gint n_images = 0;
g_return_if_fail (EOM_IS_WINDOW (window));
@@ -633,6 +634,8 @@ update_action_groups_state (EomWindow *window)
priv->status = EOM_WINDOW_STATUS_NORMAL;
}
} else {
+ gboolean show_image_collection;
+
if (priv->flags & EOM_STARTUP_DISABLE_COLLECTION) {
g_settings_set_boolean (priv->ui_settings, EOM_CONF_UI_IMAGE_COLLECTION, FALSE);
@@ -4342,7 +4345,7 @@ eom_window_open_editor (GtkAction *action,
file = eom_image_get_file (window->priv->image);
files = g_list_append (files, file);
- g_app_info_launch (app_info, &files,
+ g_app_info_launch (app_info, files,
G_APP_LAUNCH_CONTEXT (context), NULL);
g_list_free (files);
@@ -4685,7 +4688,9 @@ static void
eom_window_init (EomWindow *window)
{
GdkGeometry hints;
+#if defined(HAVE_LCMS) && defined(GDK_WINDOWING_X11)
GdkScreen *screen;
+#endif
EomWindowPrivate *priv;
eom_debug (DEBUG_WINDOW);
@@ -4698,8 +4703,6 @@ eom_window_init (EomWindow *window)
hints.min_width = EOM_WINDOW_MIN_WIDTH;
hints.min_height = EOM_WINDOW_MIN_HEIGHT;
- screen = gtk_widget_get_screen (GTK_WIDGET (window));
-
priv = window->priv = eom_window_get_instance_private (window);
priv->view_settings = g_settings_new (EOM_CONF_VIEW);
@@ -4737,6 +4740,7 @@ eom_window_init (EomWindow *window)
window->priv->status = EOM_WINDOW_STATUS_UNKNOWN;
#if defined(HAVE_LCMS) && defined(GDK_WINDOWING_X11)
+ screen = gtk_widget_get_screen (GTK_WIDGET (window));
window->priv->display_profile =
eom_window_get_display_profile (screen);
#endif
@@ -5325,9 +5329,10 @@ eom_window_class_init (EomWindowClass *class)
* @flags: the initialization parameters for the new window.
*
*
- * Creates a new and empty #EomWindow. Use @flags to indicate
- * if the window should be initialized fullscreen, in slideshow mode,
- * and/or without the thumbnails collection visible. See #EomStartupFlags.
+ * Creates a new and empty #EomWindow. Use @flags to indicate if the window
+ * should be initialized fullscreen, in slideshow mode, and/or without the
+ * thumbnails collection visible. Use preserve-order to maintain
+ * the order of input parameters instead of sorting. See #EomStartupFlags.
*
* Returns: a newly created #EomWindow.
**/
@@ -5467,7 +5472,7 @@ eom_window_open_file_list (EomWindow *window, GSList *file_list)
g_slist_foreach (file_list, (GFunc) g_object_ref, NULL);
window->priv->file_list = file_list;
- job = eom_job_model_new (file_list);
+ job = eom_job_model_new (file_list, !!(window->priv->flags & EOM_STARTUP_PRESERVE_ORDER));
g_signal_connect (job, "finished",
G_CALLBACK (eom_job_model_cb),
diff --git a/src/eom-window.h b/src/eom-window.h
index 04e028b..cd1d7b5 100644
--- a/src/eom-window.h
+++ b/src/eom-window.h
@@ -78,7 +78,8 @@ typedef enum {
typedef enum {
EOM_STARTUP_FULLSCREEN = 1 << 0,
EOM_STARTUP_SLIDE_SHOW = 1 << 1,
- EOM_STARTUP_DISABLE_COLLECTION = 1 << 2
+ EOM_STARTUP_DISABLE_COLLECTION = 1 << 2,
+ EOM_STARTUP_PRESERVE_ORDER = 1 << 3
} EomStartupFlags;
struct _EomWindow {
diff --git a/src/main.c b/src/main.c
index 1c4d725..94487d8 100644
--- a/src/main.c
+++ b/src/main.c
@@ -52,6 +52,7 @@ static gboolean fullscreen = FALSE;
static gboolean slide_show = FALSE;
static gboolean disable_collection = FALSE;
static gboolean force_new_instance = FALSE;
+static gboolean preserve_order = FALSE;
static gchar **startup_files = NULL;
static gboolean
@@ -71,6 +72,7 @@ static const GOptionEntry goption_options[] =
{ "disable-image-collection", 'c', 0, G_OPTION_ARG_NONE, &disable_collection, N_("Disable image collection"), NULL },
{ "slide-show", 's', 0, G_OPTION_ARG_NONE, &slide_show, N_("Open in slideshow mode"), NULL },
{ "new-instance", 'n', 0, G_OPTION_ARG_NONE, &force_new_instance, N_("Start a new instance instead of reusing an existing one"), NULL },
+ { "preserve-order", 'p', 0, G_OPTION_ARG_NONE, &preserve_order, N_("Preserve the input file order (disable default sorting)"), NULL },
{ "version", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK,
_print_version_and_exit, N_("Show the application's version"), NULL},
{ NULL }
@@ -87,6 +89,9 @@ set_startup_flags (void)
if (slide_show)
flags |= EOM_STARTUP_SLIDE_SHOW;
+
+ if (preserve_order)
+ flags |= EOM_STARTUP_PRESERVE_ORDER;
}
int
diff --git a/src/meson.build b/src/meson.build
new file mode 100644
index 0000000..92e6fff
--- /dev/null
+++ b/src/meson.build
@@ -0,0 +1,180 @@
+resources = gnome.compile_resources(
+ 'eom-resources',
+ 'eom.gresource.xml',
+ c_name: '_eom',
+ source_dir: '../data',
+)
+
+marshal = gnome.genmarshal('eom-marshal', sources: ['eom-marshal.list'], prefix: 'eom_marshal')
+
+inst_headers = files(
+ 'eom-application.h',
+ 'eom-application-activatable.h',
+ 'eom-debug.h',
+ 'eom-window.h',
+ 'eom-window-activatable.h',
+ 'eom-sidebar.h',
+ 'eom-properties-dialog.h',
+ 'eom-error-message-area.h',
+ 'eom-file-chooser.h',
+ 'eom-statusbar.h',
+ 'eom-thumb-nav.h',
+ 'eom-transform.h',
+ 'eom-image.h',
+ 'eom-enums.h',
+ 'eom-image-save-info.h',
+ 'eom-scroll-view.h',
+ 'eom-thumb-view.h',
+ 'eom-list-store.h',
+ 'eom-thumbnail.h',
+ 'eom-job-queue.h',
+ 'eom-clipboard-handler.h',
+ 'eom-jobs.h',
+)
+
+noinst_headers = files(
+ 'eom-application-internal.h',
+ 'eom-session.h',
+ 'eom-util.h',
+ 'eom-pixbuf-util.h',
+ 'eom-preferences-dialog.h',
+ 'eom-config-keys.h',
+ 'eom-image-jpeg.h',
+ 'eom-image-private.h',
+ 'eom-metadata-sidebar.h',
+ 'eom-uri-converter.h',
+ 'eom-metadata-reader.h',
+ 'eom-metadata-reader-jpg.h',
+ 'eom-metadata-reader-png.h',
+ 'eom-save-as-dialog-helper.h',
+ 'eom-print-image-setup.h',
+ 'eom-print-preview.h',
+ 'eom-print.h',
+ 'eom-plugin-engine.h',
+ 'eom-close-confirmation-dialog.h',
+ 'zoom.h',
+)
+
+enum = gnome.mkenums('eom-enum-types', c_template: 'eom-enum-types.c.template', h_template: 'eom-enum-types.h.template', sources: inst_headers)
+
+enum_headers = files(
+ 'eom-scroll-view.h',
+ 'eom-window.h',
+)
+
+c_sources = files(
+ 'eom-application.c',
+ 'eom-application-activatable.c',
+ 'eom-session.c',
+ 'eom-debug.c',
+ 'eom-util.c',
+ 'eom-pixbuf-util.c',
+ 'eom-window.c',
+ 'eom-window-activatable.c',
+ 'eom-sidebar.c',
+ 'eom-preferences-dialog.c',
+ 'eom-properties-dialog.c',
+ 'eom-error-message-area.c',
+ 'eom-file-chooser.c',
+ 'eom-statusbar.c',
+ 'eom-thumb-nav.c',
+ 'eom-transform.c',
+ 'eom-image.c',
+ 'eom-image-jpeg.c',
+ 'eom-image-save-info.c',
+ 'eom-scroll-view.c',
+ 'eom-thumb-view.c',
+ 'eom-list-store.c',
+ 'eom-metadata-sidebar.c',
+ 'eom-thumbnail.c',
+ 'eom-job-queue.c',
+ 'eom-jobs.c',
+ 'eom-uri-converter.c',
+ 'eom-metadata-reader.c',
+ 'eom-metadata-reader-jpg.c',
+ 'eom-metadata-reader-png.c',
+ 'eom-save-as-dialog-helper.c',
+ 'eom-print-image-setup.c',
+ 'eom-print-preview.c',
+ 'eom-print.c',
+ 'eom-close-confirmation-dialog.c',
+ 'eom-plugin-engine.c',
+ 'eom-clipboard-handler.c',
+ 'zoom.c',
+)
+
+libeom_src = [
+ c_sources,
+ enum,
+ resources,
+ marshal,
+ noinst_headers,
+ inst_headers,
+]
+
+if exif.found()
+ inst_headers += files('eom-exif-util.h')
+ noinst_headers += files('eom-metadata-details.h')
+ libeom_src += files(
+ 'eom-metadata-details.c',
+ 'eom-exif-util.c',
+ )
+endif
+
+if xmp.found()
+ noinst_headers += files('eom-metadata-details.h')
+ libeom_src += files('eom-metadata-details.c')
+endif
+
+cflags = [
+ '-DG_LOG_DOMAIN="EOM"',
+ '-DEOM_DATA_DIR="' + pkgdatadir + '"',
+ '-DEOM_LOCALE_DIR="' + localedir + '"',
+ '-DEOM_PLUGIN_DIR="' + pluginsdir + '"',
+ '-DLIBDIR="' + libdir + '"',
+]
+
+include_dirs = [top_inc, toolbareditor_inc]
+
+if jpeg.found()
+ include_dirs += [jpegutils_inc]
+endif
+
+libeom = static_library(
+ 'eom',
+ libeom_src,
+ c_args: cflags,
+ dependencies: all_deps,
+ include_directories: include_dirs,
+)
+
+src_inc = include_directories('.')
+
+install_headers(inst_headers, install_dir: join_paths(includedir, 'eom-' + eom_api_version, 'eom'))
+
+eom_links = [libeom, toolbareditor]
+
+if jpeg.found()
+ eom_links += [jpegutils]
+endif
+
+bin = executable(
+ 'eom', ['main.c', resources],
+ install: true,
+ c_args: cflags,
+ dependencies: all_deps,
+ link_with: eom_links,
+ include_directories: include_dirs,
+)
+
+if gobject_introspection.found()
+ gir = gnome.generate_gir(
+ bin,
+ includes: ['Gtk-3.0'],
+ sources: [inst_headers, c_sources, enum, resources, marshal],
+ include_directories: include_dirs,
+ install: true,
+ namespace: 'Eom',
+ nsversion: '1.0',
+ )
+endif