[nautilus-sendto] Merge some helper libraries into one
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus-sendto] Merge some helper libraries into one
- Date: Mon, 23 Aug 2010 15:42:55 +0000 (UTC)
commit 91d25632e6e1c1b6c3d340ac0569ae520096c35a
Author: Bastien Nocera <hadess hadess net>
Date: Fri Aug 20 18:52:05 2010 +0100
Merge some helper libraries into one
So that the packer can be exported to other plugins.
src/plugins/Makefile.am | 21 +-
src/plugins/evolution/Makefile.am | 2 +-
src/plugins/evolution/evolution.c | 2 +-
src/plugins/nautilus-sendto-packer.c | 434 +++++++++++++++++++++++++++++
src/plugins/nautilus-sendto-packer.h | 54 ++++
src/plugins/nst-common.c | 408 ---------------------------
src/plugins/nst-common.h | 34 ---
src/plugins/removable-devices/Makefile.am | 2 +-
8 files changed, 498 insertions(+), 459 deletions(-)
---
diff --git a/src/plugins/Makefile.am b/src/plugins/Makefile.am
index 6d445b5..9f5531b 100644
--- a/src/plugins/Makefile.am
+++ b/src/plugins/Makefile.am
@@ -2,26 +2,20 @@ SUBDIRS = . removable-devices evolution
#SUBDIRS = . $(PLUGINS)
DIST_SUBDIRS = $(ALL_PLUGINS)
-NST_COMMON_SOURCES = nst-common.c nst-common.h
-
-noinst_LTLIBRARIES = libnstcommon.la
-libnstcommon_la_SOURCES = $(NST_COMMON_SOURCES)
-libnstcommon_la_CFLAGS = $(NAUTILUS_SENDTO_CFLAGS) -DUIDIR=\""$(uidir)"\"
-libnstcommon_la_LIBADD = $(NAUTILUS_SENDTO_LIBS)
-
-EXTRA_DIST = $(NST_COMMON_SOURCES)
-
nautilus_sendto_includedir = $(includedir)/nautilus-sendto/
-nautilus_sendto_include_HEADERS = nautilus-sendto-plugin.h
+nautilus_sendto_include_HEADERS = nautilus-sendto-plugin.h nst-common.h nautilus-sendto-packer.h
lib_LTLIBRARIES = libnautilussendto-1.0.la
-libnautilussendto_1_0_la_SOURCES = nautilus-sendto-plugin.h nautilus-sendto-plugin.c
+libnautilussendto_1_0_la_SOURCES = \
+ nautilus-sendto-plugin.c \
+ nst-common.c \
+ nautilus-sendto-packer.c \
+ $(nautilus_sendto_include_HEADERS)
libnautilussendto_1_0_la_LIBADD = $(NAUTILUS_SENDTO_LIBS)
-libnautilussendto_1_0_la_CFLAGS = $(NAUTILUS_SENDTO_CFLAGS)
+libnautilussendto_1_0_la_CFLAGS = $(NAUTILUS_SENDTO_CFLAGS) -DUIDIR=\""$(uidir)"\"
uidir = $(datadir)/nautilus-sendto/ui
-if HAVE_INTROSPECTION
-include $(INTROSPECTION_MAKEFILE)
INTROSPECTION_GIRS = NautilusSendto-1.0.gir
INTROSPECTION_SCANNER_ARGS = --add-include-path=$(top_builddir)/src --warn-all
@@ -42,5 +36,4 @@ typelibdir = $(libdir)/girepository-1.0
typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
CLEANFILES = $(gir_DATA) $(typelib_DATA)
-endif
diff --git a/src/plugins/evolution/Makefile.am b/src/plugins/evolution/Makefile.am
index de4e539..e5ce04e 100644
--- a/src/plugins/evolution/Makefile.am
+++ b/src/plugins/evolution/Makefile.am
@@ -32,7 +32,7 @@ plugin_LTLIBRARIES = libnstevolution.la
libnstevolution_la_SOURCES = evolution.c $(CLA_FILES) $(MARSHALFILES)
libnstevolution_la_LDFLAGS = -module -avoid-version
-libnstevolution_la_LIBADD = $(NST_EBOOK_LIBS) $(NAUTILUS_SENDTO_LIBS) $(builddir)/../libnstcommon.la $(builddir)/../libnautilussendto-1.0.la
+libnstevolution_la_LIBADD = $(NST_EBOOK_LIBS) $(NAUTILUS_SENDTO_LIBS) $(builddir)/../libnautilussendto-1.0.la
EXTRA_DIST = $(CLA_FILES) $(plugin_in_files)
CLEANFILES = econtactentry-marshal.c econtactentry-marshal.h
diff --git a/src/plugins/evolution/evolution.c b/src/plugins/evolution/evolution.c
index 5731c59..34cda98 100644
--- a/src/plugins/evolution/evolution.c
+++ b/src/plugins/evolution/evolution.c
@@ -26,7 +26,7 @@
#include <glib/gi18n-lib.h>
#include <string.h>
#include "nautilus-sendto-plugin.h"
-#include "nst-common.h"
+#include "nautilus-sendto-packer.h"
#define EVOLUTION_TYPE_PLUGIN (evolution_plugin_get_type ())
#define EVOLUTION_PLUGIN(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EVOLUTION_TYPE_PLUGIN, EvolutionPlugin))
diff --git a/src/plugins/nautilus-sendto-packer.c b/src/plugins/nautilus-sendto-packer.c
new file mode 100644
index 0000000..1d4cab5
--- /dev/null
+++ b/src/plugins/nautilus-sendto-packer.c
@@ -0,0 +1,434 @@
+/*
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more av.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * Author: Maxim Ermilov <ermilov maxim gmail com>
+ */
+
+#include "config.h"
+
+#include <gio/gio.h>
+#include <glib/gi18n-lib.h>
+#include "nautilus-sendto-packer.h"
+
+#define NAUTILUS_SENDTO_LAST_COMPRESS "last-compress"
+
+struct NstPackWidgetPrivate {
+ GtkWidget *pack_combobox;
+ GtkWidget *pack_entry;
+ GtkWidget *pack_checkbutton;
+ gboolean can_send;
+};
+
+G_DEFINE_TYPE (NstPackWidget, nst_pack_widget, GTK_TYPE_VBOX)
+#define NST_PACK_WIDGET_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), NST_TYPE_PACK_WIDGET, NstPackWidgetPrivate))
+
+static void pack_entry_changed_cb (GObject *object, GParamSpec *spec, NstPackWidget *widget);
+static void toggle_pack_check (GtkWidget *toggle, NstPackWidget *widget);
+
+enum {
+ PROP_0,
+ PROP_CAN_SEND
+};
+
+static char *
+get_filename_from_list (GList *file_list)
+{
+ GList *l;
+ GString *common_part = NULL;
+ gboolean matches = TRUE;
+ guint offset = 0;
+ const char *encoding;
+ gboolean use_utf8 = TRUE;
+
+ encoding = g_getenv ("G_FILENAME_ENCODING");
+
+ if (encoding != NULL && strcasecmp (encoding, "UTF-8") != 0)
+ use_utf8 = FALSE;
+
+ if (file_list == NULL)
+ return NULL;
+
+ common_part = g_string_new ("");
+
+ while (TRUE) {
+ gunichar cur_char = '\0';
+ for (l = file_list; l ; l = l->next) {
+ char *path = NULL, *name = NULL;
+ char *offset_name = NULL;
+
+ path = g_filename_from_uri ((char *) l->data, NULL, NULL);
+ if (!path)
+ break;
+
+ name = g_path_get_basename (path);
+
+ if (!use_utf8) {
+ char *tmp;
+
+ tmp = g_filename_to_utf8 (name, -1, NULL, NULL, NULL);
+ g_free (name);
+ name = tmp;
+ }
+
+ if (!name) {
+ g_free (path);
+ break;
+ }
+
+ if (offset >= g_utf8_strlen (name, -1)) {
+ g_free(name);
+ g_free(path);
+ matches = FALSE;
+ break;
+ }
+
+ offset_name = g_utf8_offset_to_pointer (name, offset);
+
+ if (offset_name == g_utf8_strrchr (name, -1, '.')) {
+ g_free (name);
+ g_free (path);
+ matches = FALSE;
+ break;
+ }
+ if (cur_char == '\0') {
+ cur_char = g_utf8_get_char (offset_name);
+ } else if (cur_char != g_utf8_get_char (offset_name)) {
+ g_free (name);
+ g_free (path);
+ matches = FALSE;
+ break;
+ }
+ g_free (name);
+ g_free (path);
+ }
+ if (matches == TRUE && cur_char != '\0') {
+ offset++;
+ common_part = g_string_append_unichar (common_part,
+ cur_char);
+ } else {
+ break;
+ }
+ }
+
+ if (g_utf8_strlen (common_part->str, -1) < 4) {
+ g_string_free (common_part, TRUE);
+ return NULL;
+ }
+
+ return g_string_free (common_part, FALSE);
+}
+
+static void
+nst_pack_widget_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ NstPackWidget *widget;
+
+ widget = NST_PACK_WIDGET (object);
+
+ switch (property_id) {
+ case PROP_CAN_SEND:
+ g_value_set_boolean (value, widget->priv->can_send);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ }
+}
+
+static void
+nst_pack_widget_class_init (NstPackWidgetClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->get_property = nst_pack_widget_get_property;
+
+ g_object_class_install_property (object_class, PROP_CAN_SEND,
+ g_param_spec_boolean ("can-send", "Can send", "Whether the text entry is filled if compression is active.",
+ TRUE, G_PARAM_READABLE));
+
+ g_type_class_add_private (klass, sizeof (NstPackWidgetPrivate));
+}
+
+static void
+nst_pack_widget_init (NstPackWidget *self)
+{
+ GtkBuilder *builder;
+ GError *error = NULL;
+ GtkWidget *vbox;
+ NstPackWidgetPrivate *priv;
+ GSettings *settings;
+ const char *ui_file;
+
+ self->priv = NST_PACK_WIDGET_GET_PRIVATE (self);
+ priv = self->priv;
+
+ builder = gtk_builder_new ();
+ if (g_getenv ("NST_RUN_FROM_BUILDDIR") != NULL)
+ ui_file = "../data/pack-entry.ui";
+ else
+ ui_file = UIDIR "/" "pack-entry.ui";
+
+ if (!gtk_builder_add_from_file (builder, ui_file, &error)) {
+ g_warning ("Couldn't load builder file '%s': %s", ui_file, error->message);
+ g_error_free (error);
+ }
+
+ vbox = GTK_WIDGET (gtk_builder_get_object (builder, "vbox4"));
+ priv->pack_combobox = GTK_WIDGET (gtk_builder_get_object (builder, "pack_combobox"));
+ priv->pack_entry = GTK_WIDGET (gtk_builder_get_object (builder, "pack_entry"));
+ priv->pack_checkbutton = GTK_WIDGET (gtk_builder_get_object (builder, "pack_checkbutton"));
+
+ gtk_entry_set_text (GTK_ENTRY (priv->pack_entry), _("Files"));
+
+ g_signal_connect (G_OBJECT (priv->pack_entry), "notify::text",
+ G_CALLBACK (pack_entry_changed_cb), self);
+ g_signal_connect (G_OBJECT (priv->pack_checkbutton), "toggled",
+ G_CALLBACK (toggle_pack_check), self);
+ nst_pack_widget_set_enabled (self, FALSE);
+ /* Because the default is FALSE, and we're not changing the value */
+ toggle_pack_check (priv->pack_checkbutton, self);
+
+ settings = g_settings_new ("org.gnome.Nautilus.Sendto");
+ gtk_combo_box_set_active (GTK_COMBO_BOX (priv->pack_combobox),
+ g_settings_get_int (settings,
+ NAUTILUS_SENDTO_LAST_COMPRESS));
+ g_object_unref (settings);
+
+ gtk_container_add (GTK_CONTAINER (self), vbox);
+}
+
+void
+nst_pack_widget_set_enabled (NstPackWidget *widget,
+ gboolean enabled)
+{
+ g_return_if_fail (NST_PACK_WIDGET (widget));
+
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget->priv->pack_checkbutton), enabled);
+ /* The toggled callback will take care of making the entry unsensitive */
+}
+
+gboolean
+nst_pack_widget_get_enabled (NstPackWidget *widget)
+{
+ g_return_val_if_fail (NST_PACK_WIDGET (widget), FALSE);
+
+ return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget->priv->pack_checkbutton));
+}
+
+void
+nst_pack_widget_set_force_enabled (NstPackWidget *widget,
+ gboolean force_enabled)
+{
+ g_return_if_fail (NST_PACK_WIDGET (widget));
+
+ if (force_enabled) {
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget->priv->pack_checkbutton), TRUE);
+ gtk_widget_set_sensitive (widget->priv->pack_checkbutton, FALSE);
+ } else {
+ gtk_widget_set_sensitive (widget->priv->pack_checkbutton, TRUE);
+ }
+}
+
+gboolean
+nst_pack_widget_get_force_enabled (NstPackWidget *widget)
+{
+ g_return_val_if_fail (NST_PACK_WIDGET (widget), FALSE);
+
+ return gtk_widget_get_sensitive (widget->priv->pack_checkbutton);
+}
+
+void
+nst_pack_widget_set_from_names (NstPackWidget *widget,
+ GList *file_list)
+{
+ NstPackWidgetPrivate *priv;
+ gboolean one_file;
+
+ priv = widget->priv;
+
+ if (file_list != NULL && file_list->next != NULL)
+ one_file = FALSE;
+ else if (file_list != NULL)
+ one_file = TRUE;
+
+ if (one_file) {
+ char *filepath, *filename;
+
+ filepath = g_filename_from_uri ((char *)file_list->data,
+ NULL, NULL);
+ filename = NULL;
+
+ if (filepath != NULL)
+ filename = g_path_get_basename (filepath);
+ if (filename != NULL && filename[0] != '\0')
+ gtk_entry_set_text (GTK_ENTRY (priv->pack_entry), filename);
+
+ g_free (filename);
+ g_free (filepath);
+ } else {
+ char *filename;
+
+ filename = get_filename_from_list (file_list);
+ if (filename != NULL && filename[0] != '\0') {
+ gtk_entry_set_text (GTK_ENTRY (priv->pack_entry),
+ filename);
+ }
+ g_free (filename);
+ }
+}
+
+char *
+nst_pack_widget_pack_files (NstPackWidget *widget,
+ GList *file_list)
+{
+ char *file_roller_cmd;
+ const char *filename;
+ GList *l;
+ GString *cmd, *tmp;
+ char *pack_type, *tmp_dir, *tmp_work_dir, *packed_file;
+ NstPackWidgetPrivate *priv;
+ GSettings *settings;
+
+ priv = widget->priv;
+ file_roller_cmd = g_find_program_in_path ("file-roller");
+ filename = gtk_entry_get_text (GTK_ENTRY (widget->priv->pack_entry));
+
+ g_assert (filename != NULL && *filename != '\0');
+
+ tmp_dir = g_strdup_printf ("%s/nautilus-sendto-%s",
+ g_get_tmp_dir (), g_get_user_name ());
+ g_mkdir (tmp_dir, 0700);
+ tmp_work_dir = g_strdup_printf ("%s/nautilus-sendto-%s/%li",
+ g_get_tmp_dir (), g_get_user_name (),
+ time (NULL));
+ g_mkdir (tmp_work_dir, 0700);
+ g_free (tmp_dir);
+
+ switch (gtk_combo_box_get_active (GTK_COMBO_BOX (priv->pack_combobox)))
+ {
+ case 0:
+ pack_type = g_strdup (".zip");
+ break;
+ case 1:
+ pack_type = g_strdup (".tar.gz");
+ break;
+ case 2:
+ pack_type = g_strdup (".tar.bz2");
+ break;
+ default:
+ pack_type = NULL;
+ g_assert_not_reached ();
+ }
+
+ settings = g_settings_new ("org.gnome.Nautilus.Sendto");
+ g_settings_set_int (settings,
+ NAUTILUS_SENDTO_LAST_COMPRESS,
+ gtk_combo_box_get_active (GTK_COMBO_BOX (priv->pack_combobox)));
+ g_object_unref (settings);
+
+ cmd = g_string_new ("");
+ g_string_printf (cmd, "%s --add-to=\"%s/%s%s\"",
+ file_roller_cmd, tmp_work_dir,
+ filename,
+ pack_type);
+
+ /* file-roller doesn't understand URIs */
+ for (l = file_list ; l; l=l->next){
+ char *file;
+
+ file = g_filename_from_uri (l->data, NULL, NULL);
+ g_string_append_printf (cmd," \"%s\"", file);
+ g_free (file);
+ }
+
+ g_spawn_command_line_sync (cmd->str, NULL, NULL, NULL, NULL);
+ g_string_free (cmd, TRUE);
+ tmp = g_string_new("");
+ g_string_printf (tmp,"%s/%s%s", tmp_work_dir,
+ filename,
+ pack_type);
+ g_free (tmp_work_dir);
+ packed_file = g_filename_to_uri (tmp->str, NULL, NULL);
+ g_string_free(tmp, TRUE);
+
+ return packed_file;
+}
+
+static void
+pack_entry_set_send_enabled (NstPackWidget *widget,
+ gboolean send_enabled)
+{
+ if (send_enabled != widget->priv->can_send) {
+ widget->priv->can_send = send_enabled;
+
+ g_object_notify (G_OBJECT (widget), "can-send");
+ }
+}
+
+static void
+toggle_pack_check (GtkWidget *toggle, NstPackWidget *widget)
+{
+ GtkToggleButton *t = GTK_TOGGLE_BUTTON (toggle);
+ gboolean enabled, send_enabled;
+ NstPackWidgetPrivate *priv;
+
+ priv = widget->priv;
+ enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (t));
+ gtk_widget_set_sensitive (priv->pack_combobox, enabled);
+ gtk_widget_set_sensitive (priv->pack_entry, enabled);
+
+ send_enabled = TRUE;
+
+ if (enabled) {
+ const char *filename;
+
+ filename = gtk_entry_get_text (GTK_ENTRY (priv->pack_entry));
+ if (filename == NULL || *filename == '\0')
+ send_enabled = FALSE;
+ }
+
+ pack_entry_set_send_enabled (widget, send_enabled);
+}
+
+static void
+pack_entry_changed_cb (GObject *object, GParamSpec *spec, NstPackWidget *widget)
+{
+ gboolean send_enabled;
+ NstPackWidgetPrivate *priv;
+
+ priv = widget->priv;
+ send_enabled = TRUE;
+
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->pack_checkbutton))) {
+ const char *filename;
+
+ filename = gtk_entry_get_text(GTK_ENTRY(priv->pack_entry));
+ if (filename == NULL || *filename == '\0')
+ send_enabled = FALSE;
+ }
+
+ pack_entry_set_send_enabled (widget, send_enabled);
+}
+
+GtkWidget *
+nst_pack_widget_new (void)
+{
+ return g_object_new (NST_TYPE_PACK_WIDGET, NULL);
+}
+
diff --git a/src/plugins/nautilus-sendto-packer.h b/src/plugins/nautilus-sendto-packer.h
new file mode 100644
index 0000000..05f4581
--- /dev/null
+++ b/src/plugins/nautilus-sendto-packer.h
@@ -0,0 +1,54 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more av.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA.
+ *
+ * Author: Maxim Ermilov <ermilov maxim gmail com>
+ * Bastien Nocera <hadess hadess net>
+ */
+
+#include <gtk/gtk.h>
+
+#define NST_TYPE_PACK_WIDGET (nst_pack_widget_get_type ())
+#define NST_PACK_WIDGET(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), NST_TYPE_PACK_WIDGET, NstPackWidget))
+#define NST_PACK_WIDGET_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), NST_TYPE_PACK_WIDGET, NstPackWidget))
+#define NST_IS_PACK_WIDGET(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), NST_TYPE_PACK_WIDGET))
+#define NST_IS_PACK_WIDGET_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), NST_TYPE_PACK_WIDGET))
+#define NST_PACK_WIDGET_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), NST_TYPE_PACK_WIDGET, NstPackWidgetClass))
+
+typedef struct NstPackWidgetPrivate NstPackWidgetPrivate;
+
+typedef struct {
+ GtkVBox parent;
+ NstPackWidgetPrivate *priv;
+} NstPackWidget;
+
+typedef struct {
+ GtkVBoxClass parent;
+} NstPackWidgetClass;
+
+GType nst_pack_widget_get_type (void);
+GtkWidget *nst_pack_widget_new (void);
+
+char *nst_pack_widget_pack_files (NstPackWidget *widget,
+ GList *file_list);
+void nst_pack_widget_set_from_names (NstPackWidget *widget,
+ GList *file_list);
+void nst_pack_widget_set_enabled (NstPackWidget *widget,
+ gboolean enabled);
+gboolean nst_pack_widget_get_enabled (NstPackWidget *widget);
+void nst_pack_widget_set_force_enabled (NstPackWidget *widget,
+ gboolean force_enabled);
+gboolean nst_pack_widget_get_force_enabled (NstPackWidget *widget);
+
diff --git a/src/plugins/nst-common.c b/src/plugins/nst-common.c
index 03afb9d..cd8d1c8 100644
--- a/src/plugins/nst-common.c
+++ b/src/plugins/nst-common.c
@@ -101,411 +101,3 @@ copy_files_to (GList *file_list, GFile *dest)
return retval;
}
-#define NAUTILUS_SENDTO_LAST_COMPRESS "last-compress"
-
-struct NstPackWidgetPrivate {
- GtkWidget *pack_combobox;
- GtkWidget *pack_entry;
- GtkWidget *pack_checkbutton;
- gboolean can_send;
-};
-
-G_DEFINE_TYPE (NstPackWidget, nst_pack_widget, GTK_TYPE_VBOX)
-#define NST_PACK_WIDGET_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), NST_TYPE_PACK_WIDGET, NstPackWidgetPrivate))
-
-static void pack_entry_changed_cb (GObject *object, GParamSpec *spec, NstPackWidget *widget);
-static void toggle_pack_check (GtkWidget *toggle, NstPackWidget *widget);
-
-enum {
- PROP_0,
- PROP_CAN_SEND
-};
-
-static char *
-get_filename_from_list (GList *file_list)
-{
- GList *l;
- GString *common_part = NULL;
- gboolean matches = TRUE;
- guint offset = 0;
- const char *encoding;
- gboolean use_utf8 = TRUE;
-
- encoding = g_getenv ("G_FILENAME_ENCODING");
-
- if (encoding != NULL && strcasecmp (encoding, "UTF-8") != 0)
- use_utf8 = FALSE;
-
- if (file_list == NULL)
- return NULL;
-
- common_part = g_string_new ("");
-
- while (TRUE) {
- gunichar cur_char = '\0';
- for (l = file_list; l ; l = l->next) {
- char *path = NULL, *name = NULL;
- char *offset_name = NULL;
-
- path = g_filename_from_uri ((char *) l->data, NULL, NULL);
- if (!path)
- break;
-
- name = g_path_get_basename (path);
-
- if (!use_utf8) {
- char *tmp;
-
- tmp = g_filename_to_utf8 (name, -1, NULL, NULL, NULL);
- g_free (name);
- name = tmp;
- }
-
- if (!name) {
- g_free (path);
- break;
- }
-
- if (offset >= g_utf8_strlen (name, -1)) {
- g_free(name);
- g_free(path);
- matches = FALSE;
- break;
- }
-
- offset_name = g_utf8_offset_to_pointer (name, offset);
-
- if (offset_name == g_utf8_strrchr (name, -1, '.')) {
- g_free (name);
- g_free (path);
- matches = FALSE;
- break;
- }
- if (cur_char == '\0') {
- cur_char = g_utf8_get_char (offset_name);
- } else if (cur_char != g_utf8_get_char (offset_name)) {
- g_free (name);
- g_free (path);
- matches = FALSE;
- break;
- }
- g_free (name);
- g_free (path);
- }
- if (matches == TRUE && cur_char != '\0') {
- offset++;
- common_part = g_string_append_unichar (common_part,
- cur_char);
- } else {
- break;
- }
- }
-
- if (g_utf8_strlen (common_part->str, -1) < 4) {
- g_string_free (common_part, TRUE);
- return NULL;
- }
-
- return g_string_free (common_part, FALSE);
-}
-
-static void
-nst_pack_widget_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
-{
- NstPackWidget *widget;
-
- widget = NST_PACK_WIDGET (object);
-
- switch (property_id) {
- case PROP_CAN_SEND:
- g_value_set_boolean (value, widget->priv->can_send);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-}
-
-static void
-nst_pack_widget_class_init (NstPackWidgetClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->get_property = nst_pack_widget_get_property;
-
- g_object_class_install_property (object_class, PROP_CAN_SEND,
- g_param_spec_boolean ("can-send", "Can send", "Whether the text entry is filled if compression is active.",
- TRUE, G_PARAM_READABLE));
-
- g_type_class_add_private (klass, sizeof (NstPackWidgetPrivate));
-}
-
-static void
-nst_pack_widget_init (NstPackWidget *self)
-{
- GtkBuilder *builder;
- GError *error = NULL;
- GtkWidget *vbox;
- NstPackWidgetPrivate *priv;
- GSettings *settings;
- const char *ui_file;
-
- self->priv = NST_PACK_WIDGET_GET_PRIVATE (self);
- priv = self->priv;
-
- builder = gtk_builder_new ();
- if (g_getenv ("NST_RUN_FROM_BUILDDIR") != NULL)
- ui_file = "../data/pack-entry.ui";
- else
- ui_file = UIDIR "/" "pack-entry.ui";
-
- if (!gtk_builder_add_from_file (builder, ui_file, &error)) {
- g_warning ("Couldn't load builder file '%s': %s", ui_file, error->message);
- g_error_free (error);
- }
-
- vbox = GTK_WIDGET (gtk_builder_get_object (builder, "vbox4"));
- priv->pack_combobox = GTK_WIDGET (gtk_builder_get_object (builder, "pack_combobox"));
- priv->pack_entry = GTK_WIDGET (gtk_builder_get_object (builder, "pack_entry"));
- priv->pack_checkbutton = GTK_WIDGET (gtk_builder_get_object (builder, "pack_checkbutton"));
-
- gtk_entry_set_text (GTK_ENTRY (priv->pack_entry), _("Files"));
-
- g_signal_connect (G_OBJECT (priv->pack_entry), "notify::text",
- G_CALLBACK (pack_entry_changed_cb), self);
- g_signal_connect (G_OBJECT (priv->pack_checkbutton), "toggled",
- G_CALLBACK (toggle_pack_check), self);
- nst_pack_widget_set_enabled (self, FALSE);
- /* Because the default is FALSE, and we're not changing the value */
- toggle_pack_check (priv->pack_checkbutton, self);
-
- settings = g_settings_new ("org.gnome.Nautilus.Sendto");
- gtk_combo_box_set_active (GTK_COMBO_BOX (priv->pack_combobox),
- g_settings_get_int (settings,
- NAUTILUS_SENDTO_LAST_COMPRESS));
- g_object_unref (settings);
-
- gtk_container_add (GTK_CONTAINER (self), vbox);
-}
-
-void
-nst_pack_widget_set_enabled (NstPackWidget *widget,
- gboolean enabled)
-{
- g_return_if_fail (NST_PACK_WIDGET (widget));
-
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget->priv->pack_checkbutton), enabled);
- /* The toggled callback will take care of making the entry unsensitive */
-}
-
-gboolean
-nst_pack_widget_get_enabled (NstPackWidget *widget)
-{
- g_return_val_if_fail (NST_PACK_WIDGET (widget), FALSE);
-
- return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget->priv->pack_checkbutton));
-}
-
-void
-nst_pack_widget_set_force_enabled (NstPackWidget *widget,
- gboolean force_enabled)
-{
- g_return_if_fail (NST_PACK_WIDGET (widget));
-
- if (force_enabled) {
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget->priv->pack_checkbutton), TRUE);
- gtk_widget_set_sensitive (widget->priv->pack_checkbutton, FALSE);
- } else {
- gtk_widget_set_sensitive (widget->priv->pack_checkbutton, TRUE);
- }
-}
-
-gboolean
-nst_pack_widget_get_force_enabled (NstPackWidget *widget)
-{
- g_return_val_if_fail (NST_PACK_WIDGET (widget), FALSE);
-
- return gtk_widget_get_sensitive (widget->priv->pack_checkbutton);
-}
-
-void
-nst_pack_widget_set_from_names (NstPackWidget *widget,
- GList *file_list)
-{
- NstPackWidgetPrivate *priv;
- gboolean one_file;
-
- priv = widget->priv;
-
- if (file_list != NULL && file_list->next != NULL)
- one_file = FALSE;
- else if (file_list != NULL)
- one_file = TRUE;
-
- if (one_file) {
- char *filepath, *filename;
-
- filepath = g_filename_from_uri ((char *)file_list->data,
- NULL, NULL);
- filename = NULL;
-
- if (filepath != NULL)
- filename = g_path_get_basename (filepath);
- if (filename != NULL && filename[0] != '\0')
- gtk_entry_set_text (GTK_ENTRY (priv->pack_entry), filename);
-
- g_free (filename);
- g_free (filepath);
- } else {
- char *filename;
-
- filename = get_filename_from_list (file_list);
- if (filename != NULL && filename[0] != '\0') {
- gtk_entry_set_text (GTK_ENTRY (priv->pack_entry),
- filename);
- }
- g_free (filename);
- }
-}
-
-char *
-nst_pack_widget_pack_files (NstPackWidget *widget,
- GList *file_list)
-{
- char *file_roller_cmd;
- const char *filename;
- GList *l;
- GString *cmd, *tmp;
- char *pack_type, *tmp_dir, *tmp_work_dir, *packed_file;
- NstPackWidgetPrivate *priv;
- GSettings *settings;
-
- priv = widget->priv;
- file_roller_cmd = g_find_program_in_path ("file-roller");
- filename = gtk_entry_get_text (GTK_ENTRY (widget->priv->pack_entry));
-
- g_assert (filename != NULL && *filename != '\0');
-
- tmp_dir = g_strdup_printf ("%s/nautilus-sendto-%s",
- g_get_tmp_dir (), g_get_user_name ());
- g_mkdir (tmp_dir, 0700);
- tmp_work_dir = g_strdup_printf ("%s/nautilus-sendto-%s/%li",
- g_get_tmp_dir (), g_get_user_name (),
- time (NULL));
- g_mkdir (tmp_work_dir, 0700);
- g_free (tmp_dir);
-
- switch (gtk_combo_box_get_active (GTK_COMBO_BOX (priv->pack_combobox)))
- {
- case 0:
- pack_type = g_strdup (".zip");
- break;
- case 1:
- pack_type = g_strdup (".tar.gz");
- break;
- case 2:
- pack_type = g_strdup (".tar.bz2");
- break;
- default:
- pack_type = NULL;
- g_assert_not_reached ();
- }
-
- settings = g_settings_new ("org.gnome.Nautilus.Sendto");
- g_settings_set_int (settings,
- NAUTILUS_SENDTO_LAST_COMPRESS,
- gtk_combo_box_get_active (GTK_COMBO_BOX (priv->pack_combobox)));
- g_object_unref (settings);
-
- cmd = g_string_new ("");
- g_string_printf (cmd, "%s --add-to=\"%s/%s%s\"",
- file_roller_cmd, tmp_work_dir,
- filename,
- pack_type);
-
- /* file-roller doesn't understand URIs */
- for (l = file_list ; l; l=l->next){
- char *file;
-
- file = g_filename_from_uri (l->data, NULL, NULL);
- g_string_append_printf (cmd," \"%s\"", file);
- g_free (file);
- }
-
- g_spawn_command_line_sync (cmd->str, NULL, NULL, NULL, NULL);
- g_string_free (cmd, TRUE);
- tmp = g_string_new("");
- g_string_printf (tmp,"%s/%s%s", tmp_work_dir,
- filename,
- pack_type);
- g_free (tmp_work_dir);
- packed_file = g_filename_to_uri (tmp->str, NULL, NULL);
- g_string_free(tmp, TRUE);
-
- return packed_file;
-}
-
-static void
-pack_entry_set_send_enabled (NstPackWidget *widget,
- gboolean send_enabled)
-{
- if (send_enabled != widget->priv->can_send) {
- widget->priv->can_send = send_enabled;
-
- g_object_notify (G_OBJECT (widget), "can-send");
- }
-}
-
-static void
-toggle_pack_check (GtkWidget *toggle, NstPackWidget *widget)
-{
- GtkToggleButton *t = GTK_TOGGLE_BUTTON (toggle);
- gboolean enabled, send_enabled;
- NstPackWidgetPrivate *priv;
-
- priv = widget->priv;
- enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (t));
- gtk_widget_set_sensitive (priv->pack_combobox, enabled);
- gtk_widget_set_sensitive (priv->pack_entry, enabled);
-
- send_enabled = TRUE;
-
- if (enabled) {
- const char *filename;
-
- filename = gtk_entry_get_text (GTK_ENTRY (priv->pack_entry));
- if (filename == NULL || *filename == '\0')
- send_enabled = FALSE;
- }
-
- pack_entry_set_send_enabled (widget, send_enabled);
-}
-
-static void
-pack_entry_changed_cb (GObject *object, GParamSpec *spec, NstPackWidget *widget)
-{
- gboolean send_enabled;
- NstPackWidgetPrivate *priv;
-
- priv = widget->priv;
- send_enabled = TRUE;
-
- if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->pack_checkbutton))) {
- const char *filename;
-
- filename = gtk_entry_get_text(GTK_ENTRY(priv->pack_entry));
- if (filename == NULL || *filename == '\0')
- send_enabled = FALSE;
- }
-
- pack_entry_set_send_enabled (widget, send_enabled);
-}
-
-GtkWidget *
-nst_pack_widget_new (void)
-{
- return g_object_new (NST_TYPE_PACK_WIDGET, NULL);
-}
-
diff --git a/src/plugins/nst-common.h b/src/plugins/nst-common.h
index 7a439ce..3b312ed 100644
--- a/src/plugins/nst-common.h
+++ b/src/plugins/nst-common.h
@@ -22,37 +22,3 @@
gboolean copy_files_to (GList *file_list, GFile *dest);
-#include <gtk/gtk.h>
-
-#define NST_TYPE_PACK_WIDGET (nst_pack_widget_get_type ())
-#define NST_PACK_WIDGET(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), NST_TYPE_PACK_WIDGET, NstPackWidget))
-#define NST_PACK_WIDGET_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), NST_TYPE_PACK_WIDGET, NstPackWidget))
-#define NST_IS_PACK_WIDGET(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), NST_TYPE_PACK_WIDGET))
-#define NST_IS_PACK_WIDGET_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), NST_TYPE_PACK_WIDGET))
-#define NST_PACK_WIDGET_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), NST_TYPE_PACK_WIDGET, NstPackWidgetClass))
-
-typedef struct NstPackWidgetPrivate NstPackWidgetPrivate;
-
-typedef struct {
- GtkVBox parent;
- NstPackWidgetPrivate *priv;
-} NstPackWidget;
-
-typedef struct {
- GtkVBoxClass parent;
-} NstPackWidgetClass;
-
-GType nst_pack_widget_get_type (void);
-GtkWidget *nst_pack_widget_new (void);
-
-char *nst_pack_widget_pack_files (NstPackWidget *widget,
- GList *file_list);
-void nst_pack_widget_set_from_names (NstPackWidget *widget,
- GList *file_list);
-void nst_pack_widget_set_enabled (NstPackWidget *widget,
- gboolean enabled);
-gboolean nst_pack_widget_get_enabled (NstPackWidget *widget);
-void nst_pack_widget_set_force_enabled (NstPackWidget *widget,
- gboolean force_enabled);
-gboolean nst_pack_widget_get_force_enabled (NstPackWidget *widget);
-
diff --git a/src/plugins/removable-devices/Makefile.am b/src/plugins/removable-devices/Makefile.am
index ee71da4..6dfcd17 100644
--- a/src/plugins/removable-devices/Makefile.am
+++ b/src/plugins/removable-devices/Makefile.am
@@ -19,6 +19,6 @@ plugin_LTLIBRARIES = libnstremovable_devices.la
libnstremovable_devices_la_SOURCES = removable-devices.c
libnstremovable_devices_la_LDFLAGS = -module -avoid-version
-libnstremovable_devices_la_LIBADD = $(GIO_LIBS) $(NAUTILUS_SENDTO_LIBS) $(builddir)/../libnstcommon.la $(builddir)/../libnautilussendto-1.0.la
+libnstremovable_devices_la_LIBADD = $(GIO_LIBS) $(NAUTILUS_SENDTO_LIBS) $(builddir)/../libnautilussendto-1.0.la
EXTRA_DIST = $(plugin_in_files)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]