summaryrefslogtreecommitdiff
path: root/image-converter
diff options
context:
space:
mode:
Diffstat (limited to 'image-converter')
-rw-r--r--image-converter/Makefile.am4
-rw-r--r--image-converter/caja-image-converter.c6
-rw-r--r--image-converter/caja-image-converter.h1
-rw-r--r--image-converter/caja-image-resize.ui2
-rw-r--r--image-converter/caja-image-resizer.c212
-rw-r--r--image-converter/caja-image-resizer.h25
-rw-r--r--image-converter/caja-image-rotator.c187
-rw-r--r--image-converter/caja-image-rotator.h25
-rw-r--r--image-converter/image-converter.c11
-rw-r--r--image-converter/libcaja-image-converter.caja-extension.desktop.in.in4
10 files changed, 213 insertions, 264 deletions
diff --git a/image-converter/Makefile.am b/image-converter/Makefile.am
index 5a9b21e..82c01c0 100644
--- a/image-converter/Makefile.am
+++ b/image-converter/Makefile.am
@@ -47,7 +47,11 @@ extensiondir = $(datadir)/caja/extensions
extension_in_files = libcaja-image-converter.caja-extension.desktop.in
extension_DATA = $(extension_in_files:.caja-extension.desktop.in=.caja-extension)
$(extension_DATA): $(extension_in_files)
+if USE_NLS
$(AM_V_GEN) $(MSGFMT) --desktop --keyword= --keyword=Copyright --keyword=Name --keyword=Description --template $< -d $(top_srcdir)/po -o $@
+else
+ $(AM_V_GEN) cp $< $@
+endif
EXTRA_DIST = \
caja-image-resize.ui \
diff --git a/image-converter/caja-image-converter.c b/image-converter/caja-image-converter.c
index 7598813..591d8e8 100644
--- a/image-converter/caja-image-converter.c
+++ b/image-converter/caja-image-converter.c
@@ -22,16 +22,17 @@
*/
#ifdef HAVE_CONFIG_H
- #include <config.h> /* for GETTEXT_PACKAGE */
+#include <config.h>
#endif
+#include <glib/gi18n-lib.h>
+
#include "caja-image-converter.h"
#include "caja-image-resizer.h"
#include "caja-image-rotator.h"
#include <libcaja-extension/caja-menu-provider.h>
-#include <glib/gi18n-lib.h>
#include <gtk/gtk.h>
#include <string.h> /* for strcmp */
@@ -181,6 +182,7 @@ caja_image_converter_register_type (GTypeModule *module)
sizeof (CajaImageConverter),
0,
(GInstanceInitFunc) caja_image_converter_instance_init,
+ NULL
};
static const GInterfaceInfo menu_provider_iface_info = {
diff --git a/image-converter/caja-image-converter.h b/image-converter/caja-image-converter.h
index c8beba7..ef57589 100644
--- a/image-converter/caja-image-converter.h
+++ b/image-converter/caja-image-converter.h
@@ -32,7 +32,6 @@ G_BEGIN_DECLS
* instantiated by caja. It implements the GInterfaces
* exported by libcaja. */
-
#define CAJA_TYPE_IMAGE_CONVERTER (caja_image_converter_get_type ())
#define CAJA_IMAGE_CONVERTER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), CAJA_TYPE_IMAGE_CONVERTER, CajaImageConverter))
#define CAJA_IS_IMAGE_CONVERTER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), CAJA_TYPE_IMAGE_CONVERTER))
diff --git a/image-converter/caja-image-resize.ui b/image-converter/caja-image-resize.ui
index 5fe0ea3..f3bcbce 100644
--- a/image-converter/caja-image-resize.ui
+++ b/image-converter/caja-image-resize.ui
@@ -183,7 +183,7 @@
<property name="can_focus">False</property>
<property name="spacing">8</property>
<child>
- <object class="GtkRadioButton">
+ <object class="GtkRadioButton" id="custom_pct_radiobutton">
<property name="label" translatable="yes">Scale:</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
diff --git a/image-converter/caja-image-resizer.c b/image-converter/caja-image-resizer.c
index 84f834c..f9ce576 100644
--- a/image-converter/caja-image-resizer.c
+++ b/image-converter/caja-image-resizer.c
@@ -22,22 +22,23 @@
*/
#ifdef HAVE_CONFIG_H
- #include <config.h> /* for GETTEXT_PACKAGE */
+#include <config.h>
#endif
+#include <glib/gi18n-lib.h>
+
#include "caja-image-resizer.h"
#include <string.h>
-#include <glib/gi18n.h>
#include <gio/gio.h>
#include <gtk/gtk.h>
#include <libcaja-extension/caja-file-info.h>
-typedef struct _CajaImageResizerPrivate CajaImageResizerPrivate;
+struct _CajaImageResizer {
+ GObject parent_instance;
-struct _CajaImageResizerPrivate {
GList *files;
gchar *suffix;
@@ -65,7 +66,7 @@ struct _CajaImageResizerPrivate {
GtkWidget *progress_label;
};
-G_DEFINE_TYPE_WITH_PRIVATE (CajaImageResizer, caja_image_resizer, G_TYPE_OBJECT)
+G_DEFINE_TYPE (CajaImageResizer, caja_image_resizer, G_TYPE_OBJECT)
enum {
PROP_FILES = 1,
@@ -78,62 +79,55 @@ typedef enum {
} CajaImageResizerSignalType;
static void
-caja_image_resizer_finalize(GObject *object)
+caja_image_resizer_finalize (GObject *object)
{
- CajaImageResizer *dialog = CAJA_IMAGE_RESIZER (object);
- CajaImageResizerPrivate *priv = caja_image_resizer_get_instance_private (dialog);
+ CajaImageResizer *resizer = CAJA_IMAGE_RESIZER (object);
- g_free (priv->suffix);
+ g_free (resizer->suffix);
- if (priv->size)
- g_free (priv->size);
+ if (resizer->size)
+ g_free (resizer->size);
G_OBJECT_CLASS(caja_image_resizer_parent_class)->finalize(object);
}
static void
caja_image_resizer_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
{
- CajaImageResizer *dialog = CAJA_IMAGE_RESIZER (object);
- CajaImageResizerPrivate *priv = caja_image_resizer_get_instance_private (dialog);
+ CajaImageResizer *resizer = CAJA_IMAGE_RESIZER (object);
switch (property_id) {
- case PROP_FILES:
- priv->files = g_value_get_pointer (value);
- priv->images_total = g_list_length (priv->files);
- break;
- default:
- /* We don't have any other property... */
- G_OBJECT_WARN_INVALID_PROPERTY_ID(object,property_id,pspec);
- break;
+ case PROP_FILES:
+ resizer->files = g_value_get_pointer (value);
+ resizer->images_total = g_list_length (resizer->files);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
}
static void
caja_image_resizer_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
{
- CajaImageResizer *self = CAJA_IMAGE_RESIZER (object);
- CajaImageResizerPrivate *priv = caja_image_resizer_get_instance_private (self);
+ CajaImageResizer *resizer = CAJA_IMAGE_RESIZER (object);
switch (property_id) {
- case PROP_FILES:
- g_value_set_pointer (value, priv->files);
- break;
- default:
- /* We don't have any other property... */
- G_OBJECT_WARN_INVALID_PROPERTY_ID(object,property_id,pspec);
- break;
+ case PROP_FILES:
+ g_value_set_pointer (value, resizer->files);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
}
static void
-caja_image_resizer_class_init(CajaImageResizerClass *klass)
+caja_image_resizer_class_init (CajaImageResizerClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS(klass);
GParamSpec *files_param_spec;
@@ -155,10 +149,9 @@ caja_image_resizer_class_init(CajaImageResizerClass *klass)
static void run_op (CajaImageResizer *resizer);
static GFile *
-caja_image_resizer_transform_filename (CajaImageResizer *resizer, GFile *orig_file)
+caja_image_resizer_transform_filename (CajaImageResizer *resizer,
+ GFile *orig_file)
{
- CajaImageResizerPrivate *priv = caja_image_resizer_get_instance_private (resizer);
-
GFile *parent_file, *new_file;
char *basename, *extension, *new_basename;
@@ -173,8 +166,8 @@ caja_image_resizer_transform_filename (CajaImageResizer *resizer, GFile *orig_fi
basename[strlen (basename) - strlen (extension)] = '\0';
new_basename = g_strdup_printf ("%s%s%s", basename,
- priv->suffix == NULL ? ".tmp" : priv->suffix,
- extension == NULL ? "" : extension);
+ resizer->suffix == NULL ? ".tmp" : resizer->suffix,
+ extension == NULL ? "" : extension);
g_free (basename);
g_free (extension);
@@ -187,14 +180,13 @@ caja_image_resizer_transform_filename (CajaImageResizer *resizer, GFile *orig_fi
}
static void
-op_finished (GPid pid, gint status, gpointer data)
+op_finished (GPid pid,
+ gint status,
+ gpointer data)
{
CajaImageResizer *resizer = CAJA_IMAGE_RESIZER (data);
- CajaImageResizerPrivate *priv = caja_image_resizer_get_instance_private (resizer);
-
- gboolean retry = TRUE;
-
- CajaFileInfo *file = CAJA_FILE_INFO (priv->files->data);
+ gboolean retry = TRUE;
+ CajaFileInfo *file = CAJA_FILE_INFO (resizer->files->data);
if (status != 0) {
/* resizing failed */
@@ -205,7 +197,7 @@ op_finished (GPid pid, gint status, gpointer data)
char *msg;
char *name;
- name = caja_file_info_get_name (file);
+ name = caja_file_info_get_name (file);
builder = gtk_builder_new_from_resource ("/org/mate/caja/extensions/imageconverter/error-dialog.ui");
msg_dialog = GTK_WIDGET (gtk_builder_get_object (builder, "error_dialog"));
@@ -220,12 +212,12 @@ op_finished (GPid pid, gint status, gpointer data)
if (response_id == 0) {
retry = TRUE;
} else if (response_id == GTK_RESPONSE_CANCEL) {
- priv->cancelled = TRUE;
+ resizer->cancelled = TRUE;
} else if (response_id == 1) {
retry = FALSE;
}
- } else if (priv->suffix == NULL) {
+ } else if (resizer->suffix == NULL) {
/* resize image in place */
GFile *orig_location = caja_file_info_get_location (file);
GFile *new_location = caja_image_resizer_transform_filename (resizer, orig_location);
@@ -236,27 +228,25 @@ op_finished (GPid pid, gint status, gpointer data)
if (status == 0 || !retry) {
/* image has been successfully resized (or skipped) */
- priv->images_resized++;
- priv->files = priv->files->next;
+ resizer->images_resized++;
+ resizer->files = resizer->files->next;
}
- if (!priv->cancelled && priv->files != NULL) {
+ if (!resizer->cancelled && resizer->files != NULL) {
/* process next image */
run_op (resizer);
} else {
/* cancel/terminate operation */
- gtk_widget_destroy (priv->progress_dialog);
+ gtk_widget_destroy (resizer->progress_dialog);
}
}
static void
run_op (CajaImageResizer *resizer)
{
- CajaImageResizerPrivate *priv = caja_image_resizer_get_instance_private (resizer);
-
- g_return_if_fail (priv->files != NULL);
+ g_return_if_fail (resizer->files != NULL);
- CajaFileInfo *file = CAJA_FILE_INFO (priv->files->data);
+ CajaFileInfo *file = CAJA_FILE_INFO (resizer->files->data);
GFile *orig_location = caja_file_info_get_location (file);
char *filename = g_file_get_path (orig_location);
@@ -268,17 +258,20 @@ run_op (CajaImageResizer *resizer)
/* FIXME: check whether new_uri already exists and provide "Replace _All", "_Skip", and "_Replace" options */
gchar *argv[6];
- argv[0] = "/usr/bin/convert";
+ argv[0] = "convert";
argv[1] = filename;
argv[2] = "-resize";
- argv[3] = priv->size;
+ argv[3] = resizer->size;
argv[4] = new_filename;
argv[5] = NULL;
pid_t pid;
- if (!g_spawn_async (NULL, argv, NULL, G_SPAWN_DO_NOT_REAP_CHILD, NULL, NULL, &pid, NULL)) {
+ if (filename == NULL || new_filename == NULL ||
+ !g_spawn_async (NULL, argv, NULL, G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD, NULL, NULL, &pid, NULL)) {
// FIXME: error handling
+ g_free (filename);
+ g_free (new_filename);
return;
}
@@ -289,43 +282,51 @@ run_op (CajaImageResizer *resizer)
char *tmp;
- gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (priv->progress_bar), (double) (priv->images_resized + 1) / priv->images_total);
- tmp = g_strdup_printf (_("Resizing image: %d of %d"), priv->images_resized + 1, priv->images_total);
- gtk_progress_bar_set_text (GTK_PROGRESS_BAR (priv->progress_bar), tmp);
+ gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (resizer->progress_bar),
+ (double) (resizer->images_resized + 1) / resizer->images_total);
+ tmp = g_strdup_printf (_("Resizing image: %d of %d"),
+ resizer->images_resized + 1,
+ resizer->images_total);
+ gtk_progress_bar_set_text (GTK_PROGRESS_BAR (resizer->progress_bar), tmp);
g_free (tmp);
char *name = caja_file_info_get_name (file);
tmp = g_strdup_printf (_("<i>Resizing \"%s\"</i>"), name);
g_free (name);
- gtk_label_set_markup (GTK_LABEL (priv->progress_label), tmp);
+ gtk_label_set_markup (GTK_LABEL (resizer->progress_label), tmp);
g_free (tmp);
}
static void
-caja_image_resizer_response_cb (GtkDialog *dialog, gint response_id, gpointer user_data)
+on_caja_image_resizer_response (GtkDialog *dialog,
+ gint response_id,
+ CajaImageResizer *resizer)
{
- CajaImageResizer *resizer = CAJA_IMAGE_RESIZER (user_data);
- CajaImageResizerPrivate *priv = caja_image_resizer_get_instance_private (resizer);
-
if (response_id == GTK_RESPONSE_OK) {
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->append_radiobutton))) {
- if (strlen (gtk_entry_get_text (priv->name_entry)) == 0) {
- GtkWidget *msg_dialog = gtk_message_dialog_new (GTK_WINDOW (dialog),
- GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR,
- GTK_BUTTONS_OK, _("Please enter a valid filename suffix!"));
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (resizer->append_radiobutton))) {
+ if (strlen (gtk_entry_get_text (resizer->name_entry)) == 0) {
+ GtkWidget *msg_dialog;
+ msg_dialog = gtk_message_dialog_new (GTK_WINDOW (dialog),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK,
+ _("Please enter a valid filename suffix!"));
gtk_dialog_run (GTK_DIALOG (msg_dialog));
gtk_widget_destroy (msg_dialog);
return;
}
- priv->suffix = g_strdup (gtk_entry_get_text (priv->name_entry));
+ resizer->suffix = g_strdup (gtk_entry_get_text (resizer->name_entry));
}
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->default_size_radiobutton))) {
- priv->size = gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (priv->size_combobox));
- } else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->custom_pct_radiobutton))) {
- priv->size = g_strdup_printf ("%d%%", (int) gtk_spin_button_get_value (priv->pct_spinbutton));
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (resizer->default_size_radiobutton))) {
+ resizer->size = gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (resizer->size_combobox));
+ } else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (resizer->custom_pct_radiobutton))) {
+ resizer->size = g_strdup_printf ("%d%%",
+ gtk_spin_button_get_value_as_int (resizer->pct_spinbutton));
} else {
- priv->size = g_strdup_printf ("%dx%d", (int) gtk_spin_button_get_value (priv->width_spinbutton), (int) gtk_spin_button_get_value (priv->height_spinbutton));
+ resizer->size = g_strdup_printf ("%dx%d",
+ gtk_spin_button_get_value_as_int (resizer->width_spinbutton),
+ gtk_spin_button_get_value_as_int (resizer->height_spinbutton));
}
run_op (resizer);
@@ -335,45 +336,38 @@ caja_image_resizer_response_cb (GtkDialog *dialog, gint response_id, gpointer us
}
static void
-caja_image_resizer_init(CajaImageResizer *resizer)
+caja_image_resizer_init (CajaImageResizer *resizer)
{
- CajaImageResizerPrivate *priv = caja_image_resizer_get_instance_private (resizer);
-
GtkBuilder *builder;
- GError *err = NULL;
- builder = gtk_builder_new ();
+ builder = gtk_builder_new_from_resource ("/org/mate/caja/extensions/imageconverter/caja-image-resize.ui");
+#ifdef ENABLE_NLS
gtk_builder_set_translation_domain (builder, GETTEXT_PACKAGE);
- /* If we're unable to load the xml file */
- if (gtk_builder_add_from_resource (builder, "/org/mate/caja/extensions/imageconverter/caja-image-resize.ui", &err) == 0) {
- g_warning ("%s", err->message);
- g_error_free (err);
- return;
- }
+#endif /* ENABLE_NLS */
/* Grab some widgets */
- priv->resize_dialog = GTK_DIALOG (gtk_builder_get_object (builder, "resize_dialog"));
- priv->default_size_radiobutton =
+ resizer->resize_dialog = GTK_DIALOG (gtk_builder_get_object (builder, "resize_dialog"));
+ resizer->default_size_radiobutton =
GTK_RADIO_BUTTON (gtk_builder_get_object (builder, "default_size_radiobutton"));
- priv->size_combobox = GTK_COMBO_BOX_TEXT (gtk_builder_get_object (builder, "comboboxtext_size"));
- priv->custom_pct_radiobutton =
+ resizer->size_combobox = GTK_COMBO_BOX_TEXT (gtk_builder_get_object (builder, "comboboxtext_size"));
+ resizer->custom_pct_radiobutton =
GTK_RADIO_BUTTON (gtk_builder_get_object (builder, "custom_pct_radiobutton"));
- priv->pct_spinbutton = GTK_SPIN_BUTTON (gtk_builder_get_object (builder, "pct_spinbutton"));
- priv->custom_size_radiobutton =
+ resizer->pct_spinbutton = GTK_SPIN_BUTTON (gtk_builder_get_object (builder, "pct_spinbutton"));
+ resizer->custom_size_radiobutton =
GTK_RADIO_BUTTON (gtk_builder_get_object (builder, "custom_size_radiobutton"));
- priv->width_spinbutton = GTK_SPIN_BUTTON (gtk_builder_get_object (builder, "width_spinbutton"));
- priv->height_spinbutton = GTK_SPIN_BUTTON (gtk_builder_get_object (builder, "height_spinbutton"));
- priv->append_radiobutton = GTK_RADIO_BUTTON (gtk_builder_get_object (builder, "append_radiobutton"));
- priv->name_entry = GTK_ENTRY (gtk_builder_get_object (builder, "name_entry"));
- priv->inplace_radiobutton = GTK_RADIO_BUTTON (gtk_builder_get_object (builder, "inplace_radiobutton"));
+ resizer->width_spinbutton = GTK_SPIN_BUTTON (gtk_builder_get_object (builder, "width_spinbutton"));
+ resizer->height_spinbutton = GTK_SPIN_BUTTON (gtk_builder_get_object (builder, "height_spinbutton"));
+ resizer->append_radiobutton = GTK_RADIO_BUTTON (gtk_builder_get_object (builder, "append_radiobutton"));
+ resizer->name_entry = GTK_ENTRY (gtk_builder_get_object (builder, "name_entry"));
+ resizer->inplace_radiobutton = GTK_RADIO_BUTTON (gtk_builder_get_object (builder, "inplace_radiobutton"));
/* Set default item in combo box */
- /* gtk_combo_box_set_active (priv->size_combobox, 4); 1024x768 */
+ /* gtk_combo_box_set_active (resizer->size_combobox, 4); 1024x768 */
/* Connect signal */
- g_signal_connect (G_OBJECT (priv->resize_dialog), "response",
- (GCallback) caja_image_resizer_response_cb,
- resizer);
+ g_signal_connect (resizer->resize_dialog, "response",
+ G_CALLBACK (on_caja_image_resizer_response),
+ resizer);
g_object_unref (builder);
}
@@ -387,7 +381,5 @@ caja_image_resizer_new (GList *files)
void
caja_image_resizer_show_dialog (CajaImageResizer *resizer)
{
- CajaImageResizerPrivate *priv = caja_image_resizer_get_instance_private (resizer);
-
- gtk_widget_show (GTK_WIDGET (priv->resize_dialog));
+ gtk_widget_show (GTK_WIDGET (resizer->resize_dialog));
}
diff --git a/image-converter/caja-image-resizer.h b/image-converter/caja-image-resizer.h
index f55d160..3262cb5 100644
--- a/image-converter/caja-image-resizer.h
+++ b/image-converter/caja-image-resizer.h
@@ -21,36 +21,19 @@
*
*/
-#ifndef CAJA_IMAGE_RESIZER_H
-#define CAJA_IMAGE_RESIZER_H
+#ifndef __CAJA_IMAGE_RESIZER_H__
+#define __CAJA_IMAGE_RESIZER_H__
#include <glib-object.h>
G_BEGIN_DECLS
#define CAJA_TYPE_IMAGE_RESIZER (caja_image_resizer_get_type ())
-#define CAJA_IMAGE_RESIZER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), CAJA_TYPE_IMAGE_RESIZER, CajaImageResizer))
-#define CAJA_IMAGE_RESIZER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), CAJA_TYPE_IMAGE_RESIZER, CajaImageResizerClass))
-#define CAJA_IS_IMAGE_RESIZER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), CAJA_TYPE_IMAGE_RESIZER))
-#define CAJA_IS_IMAGE_RESIZER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), CAJA_TYPE_IMAGE_RESIZER))
-#define CAJA_IMAGE_RESIZER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), CAJA_TYPE_IMAGE_RESIZER, CajaImageResizerClass))
+G_DECLARE_FINAL_TYPE (CajaImageResizer, caja_image_resizer, CAJA, IMAGE_RESIZER, GObject)
-typedef struct _CajaImageResizer CajaImageResizer;
-typedef struct _CajaImageResizerClass CajaImageResizerClass;
-
-struct _CajaImageResizer {
- GObject parent;
-};
-
-struct _CajaImageResizerClass {
- GObjectClass parent_class;
- /* Add Signal Functions Here */
-};
-
-GType caja_image_resizer_get_type (void);
CajaImageResizer *caja_image_resizer_new (GList *files);
void caja_image_resizer_show_dialog (CajaImageResizer *dialog);
G_END_DECLS
-#endif /* CAJA_IMAGE_RESIZER_H */
+#endif /* __CAJA_IMAGE_RESIZER_H__ */
diff --git a/image-converter/caja-image-rotator.c b/image-converter/caja-image-rotator.c
index 4d3db73..256fb76 100644
--- a/image-converter/caja-image-rotator.c
+++ b/image-converter/caja-image-rotator.c
@@ -22,22 +22,23 @@
*/
#ifdef HAVE_CONFIG_H
- #include <config.h> /* for GETTEXT_PACKAGE */
+#include <config.h>
#endif
+#include <glib/gi18n-lib.h>
+
#include "caja-image-rotator.h"
#include <string.h>
-#include <glib/gi18n.h>
#include <gio/gio.h>
#include <gtk/gtk.h>
#include <libcaja-extension/caja-file-info.h>
-typedef struct _CajaImageRotatorPrivate CajaImageRotatorPrivate;
+struct _CajaImageRotator {
+ GObject parent_instance;
-struct _CajaImageRotatorPrivate {
GList *files;
gchar *suffix;
@@ -62,7 +63,7 @@ struct _CajaImageRotatorPrivate {
GtkWidget *progress_label;
};
-G_DEFINE_TYPE_WITH_PRIVATE (CajaImageRotator, caja_image_rotator, G_TYPE_OBJECT)
+G_DEFINE_TYPE (CajaImageRotator, caja_image_rotator, G_TYPE_OBJECT)
enum {
PROP_FILES = 1,
@@ -75,57 +76,50 @@ typedef enum {
} CajaImageRotatorSignalType;
static void
-caja_image_rotator_finalize(GObject *object)
+caja_image_rotator_finalize (GObject *object)
{
- CajaImageRotator *dialog = CAJA_IMAGE_ROTATOR (object);
- CajaImageRotatorPrivate *priv = caja_image_rotator_get_instance_private (dialog);
+ CajaImageRotator *rotator = CAJA_IMAGE_ROTATOR (object);
- g_free (priv->suffix);
+ g_free (rotator->suffix);
- if (priv->angle)
- g_free (priv->angle);
+ if (rotator->angle)
+ g_free (rotator->angle);
G_OBJECT_CLASS(caja_image_rotator_parent_class)->finalize(object);
}
static void
caja_image_rotator_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
{
- CajaImageRotator *dialog = CAJA_IMAGE_ROTATOR (object);
- CajaImageRotatorPrivate *priv = caja_image_rotator_get_instance_private (dialog);
+ CajaImageRotator *rotator = CAJA_IMAGE_ROTATOR (object);
switch (property_id) {
- case PROP_FILES:
- priv->files = g_value_get_pointer (value);
- priv->images_total = g_list_length (priv->files);
- break;
- default:
- /* We don't have any other property... */
- G_OBJECT_WARN_INVALID_PROPERTY_ID(object,property_id,pspec);
- break;
+ case PROP_FILES:
+ rotator->files = g_value_get_pointer (value);
+ rotator->images_total = g_list_length (rotator->files);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object,property_id,pspec);
}
}
static void
caja_image_rotator_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
{
- CajaImageRotator *self = CAJA_IMAGE_ROTATOR (object);
- CajaImageRotatorPrivate *priv = caja_image_rotator_get_instance_private (self);
+ CajaImageRotator *rotator = CAJA_IMAGE_ROTATOR (object);
switch (property_id) {
- case PROP_FILES:
- g_value_set_pointer (value, priv->files);
- break;
- default:
- /* We don't have any other property... */
- G_OBJECT_WARN_INVALID_PROPERTY_ID(object,property_id,pspec);
- break;
+ case PROP_FILES:
+ g_value_set_pointer (value, rotator->files);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
}
@@ -154,8 +148,6 @@ static void run_op (CajaImageRotator *rotator);
static GFile *
caja_image_rotator_transform_filename (CajaImageRotator *rotator, GFile *orig_file)
{
- CajaImageRotatorPrivate *priv = caja_image_rotator_get_instance_private (rotator);
-
GFile *parent_file, *new_file;
char *basename, *extension, *new_basename;
@@ -170,8 +162,8 @@ caja_image_rotator_transform_filename (CajaImageRotator *rotator, GFile *orig_fi
basename[strlen (basename) - strlen (extension)] = '\0';
new_basename = g_strdup_printf ("%s%s%s", basename,
- priv->suffix == NULL ? ".tmp" : priv->suffix,
- extension == NULL ? "" : extension);
+ rotator->suffix == NULL ? ".tmp" : rotator->suffix,
+ extension == NULL ? "" : extension);
g_free (basename);
g_free (extension);
@@ -184,14 +176,13 @@ caja_image_rotator_transform_filename (CajaImageRotator *rotator, GFile *orig_fi
}
static void
-op_finished (GPid pid, gint status, gpointer data)
+op_finished (GPid pid,
+ gint status,
+ gpointer data)
{
CajaImageRotator *rotator = CAJA_IMAGE_ROTATOR (data);
- CajaImageRotatorPrivate *priv = caja_image_rotator_get_instance_private (rotator);
-
- gboolean retry = TRUE;
-
- CajaFileInfo *file = CAJA_FILE_INFO (priv->files->data);
+ gboolean retry = TRUE;
+ CajaFileInfo *file = CAJA_FILE_INFO (rotator->files->data);
if (status != 0) {
/* rotating failed */
@@ -217,12 +208,12 @@ op_finished (GPid pid, gint status, gpointer data)
if (response_id == 0) {
retry = TRUE;
} else if (response_id == GTK_RESPONSE_CANCEL) {
- priv->cancelled = TRUE;
+ rotator->cancelled = TRUE;
} else if (response_id == 1) {
retry = FALSE;
}
- } else if (priv->suffix == NULL) {
+ } else if (rotator->suffix == NULL) {
/* rotate image in place */
GFile *orig_location = caja_file_info_get_location (file);
GFile *new_location = caja_image_rotator_transform_filename (rotator, orig_location);
@@ -233,27 +224,25 @@ op_finished (GPid pid, gint status, gpointer data)
if (status == 0 || !retry) {
/* image has been successfully rotated (or skipped) */
- priv->images_rotated++;
- priv->files = priv->files->next;
+ rotator->images_rotated++;
+ rotator->files = rotator->files->next;
}
- if (!priv->cancelled && priv->files != NULL) {
+ if (!rotator->cancelled && rotator->files != NULL) {
/* process next image */
run_op (rotator);
} else {
/* cancel/terminate operation */
- gtk_widget_destroy (priv->progress_dialog);
+ gtk_widget_destroy (rotator->progress_dialog);
}
}
static void
run_op (CajaImageRotator *rotator)
{
- CajaImageRotatorPrivate *priv = caja_image_rotator_get_instance_private (rotator);
-
- g_return_if_fail (priv->files != NULL);
+ g_return_if_fail (rotator->files != NULL);
- CajaFileInfo *file = CAJA_FILE_INFO (priv->files->data);
+ CajaFileInfo *file = CAJA_FILE_INFO (rotator->files->data);
GFile *orig_location = caja_file_info_get_location (file);
char *filename = g_file_get_path (orig_location);
@@ -265,10 +254,10 @@ run_op (CajaImageRotator *rotator)
/* FIXME: check whether new_uri already exists and provide "Replace _All", "_Skip", and "_Replace" options */
gchar *argv[8];
- argv[0] = "/usr/bin/convert";
+ argv[0] = "convert";
argv[1] = filename;
argv[2] = "-rotate";
- argv[3] = priv->angle;
+ argv[3] = rotator->angle;
argv[4] = "-orient";
argv[5] = "TopLeft";
argv[6] = new_filename;
@@ -276,8 +265,11 @@ run_op (CajaImageRotator *rotator)
pid_t pid;
- if (!g_spawn_async (NULL, argv, NULL, G_SPAWN_DO_NOT_REAP_CHILD, NULL, NULL, &pid, NULL)) {
+ if (filename == NULL || new_filename == NULL ||
+ !g_spawn_async (NULL, argv, NULL, G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH, NULL, NULL, &pid, NULL)) {
// FIXME: error handling
+ g_free (filename);
+ g_free (new_filename);
return;
}
@@ -288,28 +280,27 @@ run_op (CajaImageRotator *rotator)
char *tmp;
- gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (priv->progress_bar), (double) (priv->images_rotated + 1) / priv->images_total);
- tmp = g_strdup_printf (_("Rotating image: %d of %d"), priv->images_rotated + 1, priv->images_total);
- gtk_progress_bar_set_text (GTK_PROGRESS_BAR (priv->progress_bar), tmp);
+ gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (rotator->progress_bar), (double) (rotator->images_rotated + 1) / rotator->images_total);
+ tmp = g_strdup_printf (_("Rotating image: %d of %d"), rotator->images_rotated + 1, rotator->images_total);
+ gtk_progress_bar_set_text (GTK_PROGRESS_BAR (rotator->progress_bar), tmp);
g_free (tmp);
char *name = caja_file_info_get_name (file);
tmp = g_strdup_printf (_("<i>Rotating \"%s\"</i>"), name);
g_free (name);
- gtk_label_set_markup (GTK_LABEL (priv->progress_label), tmp);
+ gtk_label_set_markup (GTK_LABEL (rotator->progress_label), tmp);
g_free (tmp);
}
static void
-caja_image_rotator_response_cb (GtkDialog *dialog, gint response_id, gpointer user_data)
+on_caja_image_rotator_response (GtkDialog *dialog,
+ gint response_id,
+ CajaImageRotator *rotator)
{
- CajaImageRotator *rotator = CAJA_IMAGE_ROTATOR (user_data);
- CajaImageRotatorPrivate *priv = caja_image_rotator_get_instance_private (rotator);
-
if (response_id == GTK_RESPONSE_OK) {
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->append_radiobutton))) {
- if (strlen (gtk_entry_get_text (priv->name_entry)) == 0) {
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (rotator->append_radiobutton))) {
+ if (strlen (gtk_entry_get_text (rotator->name_entry)) == 0) {
GtkWidget *msg_dialog = gtk_message_dialog_new (GTK_WINDOW (dialog),
GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR,
GTK_BUTTONS_OK, _("Please enter a valid filename suffix!"));
@@ -317,24 +308,25 @@ caja_image_rotator_response_cb (GtkDialog *dialog, gint response_id, gpointer us
gtk_widget_destroy (msg_dialog);
return;
}
- priv->suffix = g_strdup (gtk_entry_get_text (priv->name_entry));
+ rotator->suffix = g_strdup (gtk_entry_get_text (rotator->name_entry));
}
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->default_angle_radiobutton))) {
- switch (gtk_combo_box_get_active (GTK_COMBO_BOX (priv->angle_combobox))) {
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (rotator->default_angle_radiobutton))) {
+ switch (gtk_combo_box_get_active (GTK_COMBO_BOX (rotator->angle_combobox))) {
case 0:
- priv->angle = g_strdup_printf ("90");
+ rotator->angle = g_strdup_printf ("90");
break;
case 1:
- priv->angle = g_strdup_printf ("-90");
+ rotator->angle = g_strdup_printf ("-90");
break;
case 2:
- priv->angle = g_strdup_printf ("180");
+ rotator->angle = g_strdup_printf ("180");
break;
default:
g_assert_not_reached ();
}
- } else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->custom_angle_radiobutton))) {
- priv->angle = g_strdup_printf ("%d", (int) gtk_spin_button_get_value (priv->angle_spinbutton));
+ } else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (rotator->custom_angle_radiobutton))) {
+ rotator->angle = g_strdup_printf ("%d",
+ gtk_spin_button_get_value_as_int (rotator->angle_spinbutton));
} else {
g_assert_not_reached ();
}
@@ -346,43 +338,36 @@ caja_image_rotator_response_cb (GtkDialog *dialog, gint response_id, gpointer us
}
static void
-caja_image_rotator_init(CajaImageRotator *rotator)
+caja_image_rotator_init (CajaImageRotator *rotator)
{
- CajaImageRotatorPrivate *priv = caja_image_rotator_get_instance_private (rotator);
-
GtkBuilder *builder;
- GError *err = NULL;
- builder = gtk_builder_new ();
+ builder = gtk_builder_new_from_resource ("/org/mate/caja/extensions/imageconverter/caja-image-rotate.ui");
+#ifdef ENABLE_NLS
gtk_builder_set_translation_domain (builder, GETTEXT_PACKAGE);
- /* If we're unable to load the xml file */
- if (gtk_builder_add_from_resource (builder, "/org/mate/caja/extensions/imageconverter/caja-image-rotate.ui", &err) == 0) {
- g_warning ("%s", err->message);
- g_error_free (err);
- return;
- }
+#endif /* ENABLE_NLS */
/* Grab some widgets */
- priv->rotate_dialog = GTK_DIALOG (gtk_builder_get_object (builder, "rotate_dialog"));
- priv->default_angle_radiobutton =
+ rotator->rotate_dialog = GTK_DIALOG (gtk_builder_get_object (builder, "rotate_dialog"));
+ rotator->default_angle_radiobutton =
GTK_RADIO_BUTTON (gtk_builder_get_object (builder, "default_angle_radiobutton"));
- priv->angle_combobox = GTK_COMBO_BOX (gtk_builder_get_object (builder, "angle_combobox"));
- priv->custom_angle_radiobutton =
+ rotator->angle_combobox = GTK_COMBO_BOX (gtk_builder_get_object (builder, "angle_combobox"));
+ rotator->custom_angle_radiobutton =
GTK_RADIO_BUTTON (gtk_builder_get_object (builder, "custom_angle_radiobutton"));
- priv->angle_spinbutton =
+ rotator->angle_spinbutton =
GTK_SPIN_BUTTON (gtk_builder_get_object (builder, "angle_spinbutton"));
- priv->append_radiobutton =
+ rotator->append_radiobutton =
GTK_RADIO_BUTTON (gtk_builder_get_object (builder, "append_radiobutton"));
- priv->name_entry = GTK_ENTRY (gtk_builder_get_object (builder, "name_entry"));
- priv->inplace_radiobutton =
+ rotator->name_entry = GTK_ENTRY (gtk_builder_get_object (builder, "name_entry"));
+ rotator->inplace_radiobutton =
GTK_RADIO_BUTTON (gtk_builder_get_object (builder, "inplace_radiobutton"));
/* Set default value for combobox */
- gtk_combo_box_set_active (priv->angle_combobox, 0); /* 90° clockwise */
+ gtk_combo_box_set_active (rotator->angle_combobox, 0); /* 90° clockwise */
/* Connect the signal */
- g_signal_connect (G_OBJECT (priv->rotate_dialog), "response",
- (GCallback) caja_image_rotator_response_cb,
+ g_signal_connect (rotator->rotate_dialog, "response",
+ G_CALLBACK (on_caja_image_rotator_response),
rotator);
g_object_unref (builder);
@@ -397,7 +382,5 @@ caja_image_rotator_new (GList *files)
void
caja_image_rotator_show_dialog (CajaImageRotator *rotator)
{
- CajaImageRotatorPrivate *priv = caja_image_rotator_get_instance_private (rotator);
-
- gtk_widget_show (GTK_WIDGET (priv->rotate_dialog));
+ gtk_widget_show (GTK_WIDGET (rotator->rotate_dialog));
}
diff --git a/image-converter/caja-image-rotator.h b/image-converter/caja-image-rotator.h
index 55222d3..e8b59b7 100644
--- a/image-converter/caja-image-rotator.h
+++ b/image-converter/caja-image-rotator.h
@@ -21,36 +21,19 @@
*
*/
-#ifndef CAJA_IMAGE_ROTATOR_H
-#define CAJA_IMAGE_ROTATOR_H
+#ifndef __CAJA_IMAGE_ROTATOR_H__
+#define __CAJA_IMAGE_ROTATOR_H__
#include <glib-object.h>
G_BEGIN_DECLS
#define CAJA_TYPE_IMAGE_ROTATOR (caja_image_rotator_get_type ())
-#define CAJA_IMAGE_ROTATOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), CAJA_TYPE_IMAGE_ROTATOR, CajaImageRotator))
-#define CAJA_IMAGE_ROTATOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), CAJA_TYPE_IMAGE_ROTATOR, CajaImageRotatorClass))
-#define CAJA_IS_IMAGE_ROTATOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), CAJA_TYPE_IMAGE_ROTATOR))
-#define CAJA_IS_IMAGE_ROTATOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), CAJA_TYPE_IMAGE_ROTATOR))
-#define CAJA_IMAGE_ROTATOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), CAJA_TYPE_IMAGE_ROTATOR, CajaImageRotatorClass))
+G_DECLARE_FINAL_TYPE (CajaImageRotator, caja_image_rotator, CAJA, IMAGE_ROTATOR, GObject)
-typedef struct _CajaImageRotator CajaImageRotator;
-typedef struct _CajaImageRotatorClass CajaImageRotatorClass;
-
-struct _CajaImageRotator {
- GObject parent;
-};
-
-struct _CajaImageRotatorClass {
- GObjectClass parent_class;
- /* Add Signal Functions Here */
-};
-
-GType caja_image_rotator_get_type (void);
CajaImageRotator *caja_image_rotator_new (GList *files);
void caja_image_rotator_show_dialog (CajaImageRotator *dialog);
G_END_DECLS
-#endif /* CAJA_IMAGE_ROTATOR_H */
+#endif /* __CAJA_IMAGE_ROTATOR_H__ */
diff --git a/image-converter/image-converter.c b/image-converter/image-converter.c
index d793ef9..a3fd248 100644
--- a/image-converter/image-converter.c
+++ b/image-converter/image-converter.c
@@ -22,12 +22,14 @@
*/
#ifdef HAVE_CONFIG_H
- #include <config.h>
+#include <config.h>
#endif
-#include "caja-image-converter.h"
+#include <glib/gi18n-lib.h>
+
+#include <libcaja-extension/caja-extension-types.h>
-#include <libintl.h>
+#include "caja-image-converter.h"
static GType type_list[1];
@@ -38,9 +40,10 @@ caja_module_initialize (GTypeModule *module)
caja_image_converter_register_type (module);
type_list[0] = CAJA_TYPE_IMAGE_CONVERTER;
-
+#ifdef ENABLE_NLS
bindtextdomain (GETTEXT_PACKAGE, MATELOCALEDIR);
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+#endif /* ENABLE_NLS */
}
void
diff --git a/image-converter/libcaja-image-converter.caja-extension.desktop.in.in b/image-converter/libcaja-image-converter.caja-extension.desktop.in.in
index a2b5653..ada4bd3 100644
--- a/image-converter/libcaja-image-converter.caja-extension.desktop.in.in
+++ b/image-converter/libcaja-image-converter.caja-extension.desktop.in.in
@@ -4,6 +4,6 @@ Icon=image
Name=Image Converter
Description=Rotate and resize images
Author=Jürg Billeter <[email protected]>
-Copyright=Copyright (C) 2004-2005 Jürg Billeter
+Copyright=Copyright (C) 2004-2005 Jürg Billeter\nCopyright (C) 2013-2014 Stefano Karapetsas\nCopyright (C) 2015-2021 MATE developers
Version=@VERSION@
-Website=https://mate-desktop.org/
+Website=@PACKAGE_URL@