[file-roller/gnome-3-8] do not allow to save as the original name



commit 919d713777843efb18ffad6139a31b4080d22fdc
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Mon May 27 21:50:48 2013 +0200

    do not allow to save as the original name
    
    [bug #700892]

 src/dlg-batch-add.c         |    3 ++-
 src/fr-new-archive-dialog.c |   33 +++++++++++++++++++++++++++++----
 src/fr-new-archive-dialog.h |    3 ++-
 src/fr-window.c             |    7 +++++--
 4 files changed, 38 insertions(+), 8 deletions(-)
---
diff --git a/src/dlg-batch-add.c b/src/dlg-batch-add.c
index 640eb6a..dd93152 100644
--- a/src/dlg-batch-add.c
+++ b/src/dlg-batch-add.c
@@ -88,7 +88,8 @@ dlg_batch_add_files (FrWindow *window,
                                            NULL,
                                            ((file_list->next == NULL) ? 
FR_NEW_ARCHIVE_ACTION_NEW_SINGLE_FILE : FR_NEW_ARCHIVE_ACTION_NEW_MANY_FILES),
                                            parent,
-                                           filename);
+                                           filename,
+                                           NULL);
        g_signal_connect (dialog,
                          "response",
                          G_CALLBACK (dialog_response_cb),
diff --git a/src/fr-new-archive-dialog.c b/src/fr-new-archive-dialog.c
index 9a27fc5..76f5a51 100644
--- a/src/fr-new-archive-dialog.c
+++ b/src/fr-new-archive-dialog.c
@@ -46,6 +46,7 @@ struct _FrNewArchiveDialogPrivate {
        gboolean    can_encrypt;
        gboolean    can_encrypt_header;
        gboolean    can_create_volumes;
+       GFile      *original_file;
 };
 
 
@@ -59,6 +60,7 @@ fr_new_archive_dialog_finalize (GObject *object)
 
        self = FR_NEW_ARCHIVE_DIALOG (object);
 
+       _g_object_unref (self->priv->original_file);
        g_object_unref (self->priv->settings);
        g_object_unref (self->priv->builder);
        g_hash_table_unref (self->priv->supported_ext);
@@ -102,7 +104,6 @@ fr_new_archive_dialog_class_init (FrNewArchiveDialogClass *klass)
 
        object_class = G_OBJECT_CLASS (klass);
        object_class->finalize = fr_new_archive_dialog_finalize;
-       object_class->finalize = fr_new_archive_dialog_finalize;
 
        widget_class = GTK_WIDGET_CLASS (klass);
        widget_class->unmap = fr_new_archive_dialog_unmap;
@@ -116,6 +117,7 @@ fr_new_archive_dialog_init (FrNewArchiveDialog *self)
        self->priv->settings = g_settings_new (FILE_ROLLER_SCHEMA_NEW);
        self->priv->builder = NULL;
        self->priv->supported_ext = g_hash_table_new (g_str_hash, g_str_equal);
+       self->priv->original_file = NULL;
 }
 
 
@@ -200,7 +202,8 @@ _fr_new_archive_dialog_construct (FrNewArchiveDialog *self,
                                  GtkWindow          *parent,
                                  FrNewArchiveAction  action,
                                  GFile              *folder,
-                                 const char         *default_name)
+                                 const char         *default_name,
+                                 GFile              *original_file)
 {
        char *active_extension;
        int   active_extension_idx;
@@ -214,6 +217,9 @@ _fr_new_archive_dialog_construct (FrNewArchiveDialog *self,
        if (self->priv->builder == NULL)
                return;
 
+       _g_object_unref (self->priv->original_file);
+       self->priv->original_file = _g_object_ref (original_file);
+
        gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (self))), GET_WIDGET 
("content"));
 
        gtk_dialog_add_button (GTK_DIALOG (self), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
@@ -298,12 +304,13 @@ fr_new_archive_dialog_new (const char         *title,
                           GtkWindow          *parent,
                           FrNewArchiveAction  action,
                           GFile              *folder,
-                          const char         *default_name)
+                          const char         *default_name,
+                          GFile              *original_file)
 {
        FrNewArchiveDialog *self;
 
        self = g_object_new (FR_TYPE_NEW_ARCHIVE_DIALOG, "title", title, NULL);
-       _fr_new_archive_dialog_construct (self, parent, action, folder, default_name);
+       _fr_new_archive_dialog_construct (self, parent, action, folder, default_name, original_file);
 
        return (GtkWidget *) self;
 }
@@ -427,6 +434,24 @@ fr_new_archive_dialog_get_file (FrNewArchiveDialog  *self,
                return NULL;
        }
 
+       /* check whehter the file is equal to the original file */
+
+       if ((self->priv->original_file != NULL) && (g_file_equal (file, self->priv->original_file))) {
+               dialog = _gtk_error_dialog_new (GTK_WINDOW (self),
+                                               GTK_DIALOG_MODAL,
+                                               NULL,
+                                               _("Could not create the archive"),
+                                               "%s",
+                                               _("New name is the same as old one, please type other 
name."));
+               gtk_dialog_run (GTK_DIALOG (dialog));
+
+               gtk_widget_destroy (GTK_WIDGET (dialog));
+               g_object_unref (parent_info);
+               g_object_unref (file);
+
+               return NULL;
+       }
+
        /* overwrite confirmation */
 
        if (g_file_query_exists (file, NULL)) {
diff --git a/src/fr-new-archive-dialog.h b/src/fr-new-archive-dialog.h
index e9c12ac..4a6d3ee 100644
--- a/src/fr-new-archive-dialog.h
+++ b/src/fr-new-archive-dialog.h
@@ -55,7 +55,8 @@ GtkWidget *     fr_new_archive_dialog_new                 (const char          *
                                                           GtkWindow           *parent,
                                                           FrNewArchiveAction   action,
                                                           GFile               *folder,
-                                                          const char          *default_name);
+                                                          const char          *default_name,
+                                                          GFile               *original_file);
 GFile *         fr_new_archive_dialog_get_file            (FrNewArchiveDialog  *dialog,
                                                           const char         **mime_type);
 const char *    fr_new_archive_dialog_get_password        (FrNewArchiveDialog  *dialog);
diff --git a/src/fr-window.c b/src/fr-window.c
index 6da6409..a0f13fb 100644
--- a/src/fr-window.c
+++ b/src/fr-window.c
@@ -4133,7 +4133,8 @@ fr_window_drag_data_received  (GtkWidget          *widget,
                                                                    GTK_WINDOW (window),
                                                                    FR_NEW_ARCHIVE_ACTION_SAVE_AS,
                                                                    fr_window_get_open_default_dir (window),
-                                                                   archive_name);
+                                                                   archive_name,
+                                                                   NULL);
                                gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
                                g_signal_connect (G_OBJECT (dialog),
                                                  "response",
@@ -7212,6 +7213,7 @@ fr_window_action_new_archive (FrWindow *window)
                                            GTK_WINDOW (window),
                                            FR_NEW_ARCHIVE_ACTION_NEW_MANY_FILES,
                                            fr_window_get_open_default_dir (window),
+                                           NULL,
                                            NULL);
        if ((fr_window_archive_is_present (window) && ! fr_window_is_batch_mode (window) ? NULL : GTK_WINDOW 
(window)))
                gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
@@ -7521,7 +7523,8 @@ fr_window_action_save_as (FrWindow *window)
                                            GTK_WINDOW (window),
                                            FR_NEW_ARCHIVE_ACTION_SAVE_AS,
                                            fr_window_get_open_default_dir (window),
-                                           archive_name);
+                                           archive_name,
+                                           window->priv->archive_file);
        gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
        g_signal_connect (G_OBJECT (dialog),
                          "response",


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]