diff options
Diffstat (limited to 'image-converter')
-rw-r--r-- | image-converter/Makefile.am | 4 | ||||
-rw-r--r-- | image-converter/caja-image-converter.c | 6 | ||||
-rw-r--r-- | image-converter/caja-image-converter.h | 1 | ||||
-rw-r--r-- | image-converter/caja-image-resize.ui | 2 | ||||
-rw-r--r-- | image-converter/caja-image-resizer.c | 212 | ||||
-rw-r--r-- | image-converter/caja-image-resizer.h | 25 | ||||
-rw-r--r-- | image-converter/caja-image-rotator.c | 187 | ||||
-rw-r--r-- | image-converter/caja-image-rotator.h | 25 | ||||
-rw-r--r-- | image-converter/image-converter.c | 11 | ||||
-rw-r--r-- | image-converter/libcaja-image-converter.caja-extension.desktop.in.in | 4 |
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@ |