summaryrefslogtreecommitdiff
path: root/src/dlg-extract.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/dlg-extract.c')
-rw-r--r--src/dlg-extract.c44
1 files changed, 41 insertions, 3 deletions
diff --git a/src/dlg-extract.c b/src/dlg-extract.c
index b85d23b..6d63059 100644
--- a/src/dlg-extract.c
+++ b/src/dlg-extract.c
@@ -69,6 +69,8 @@ extract_cb (GtkWidget *w,
FrWindow *window = data->window;
gboolean do_not_extract = FALSE;
char *extract_to_dir;
+ char *sub_dir;
+ gboolean extract_sub_dir;
gboolean overwrite;
gboolean skip_newer;
gboolean selected_files;
@@ -179,16 +181,18 @@ extract_cb (GtkWidget *w,
return FALSE;
}
- fr_window_set_extract_default_dir (window, extract_to_dir, TRUE);
-
overwrite = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("overwrite_checkbutton")));
skip_newer = ! gtk_toggle_button_get_inconsistent (GTK_TOGGLE_BUTTON (GET_WIDGET ("not_newer_checkbutton"))) && gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("not_newer_checkbutton")));
junk_paths = ! gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("recreate_dir_checkbutton")));
+ extract_sub_dir = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("create_subdir_checkbutton")));
g_settings_set_boolean (data->settings, PREF_EXTRACT_OVERWRITE, overwrite);
if (! gtk_toggle_button_get_inconsistent (GTK_TOGGLE_BUTTON (GET_WIDGET ("not_newer_checkbutton"))))
g_settings_set_boolean (data->settings, PREF_EXTRACT_SKIP_NEWER, skip_newer);
g_settings_set_boolean (data->settings, PREF_EXTRACT_RECREATE_FOLDERS, ! junk_paths);
+ g_settings_set_boolean (data->settings, PREF_EXTRACT_CREATE_SUBDIR, extract_sub_dir);
+
+ fr_window_set_extract_default_dir (window, extract_to_dir, !extract_sub_dir);
selected_files = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("selected_files_radiobutton")));
pattern_files = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("file_pattern_radiobutton")));
@@ -220,6 +224,11 @@ extract_cb (GtkWidget *w,
else
base_dir = NULL;
+ if (extract_sub_dir)
+ sub_dir = remove_extension_from_path (g_filename_display_basename (fr_window_get_archive_uri (window)));
+ else
+ sub_dir = NULL;
+
/* close the dialog. */
gtk_widget_destroy (data->dialog);
@@ -229,6 +238,7 @@ extract_cb (GtkWidget *w,
fr_window_archive_extract (window,
file_list,
extract_to_dir,
+ sub_dir,
base_dir,
skip_newer,
overwrite ? FR_OVERWRITE_YES : FR_OVERWRITE_NO,
@@ -237,6 +247,7 @@ extract_cb (GtkWidget *w,
path_list_free (file_list);
g_free (extract_to_dir);
+ g_free (sub_dir);
g_free (base_dir);
return TRUE;
@@ -281,11 +292,21 @@ overwrite_toggled_cb (GtkToggleButton *button,
}
static void
+close_dialog_changed_cb (GtkToggleButton *button,
+ FrWindow *window)
+{
+ gboolean active = gtk_toggle_button_get_active (button);
+ fr_window_set_close_dialog (window, active);
+}
+
+static void
dlg_extract__common (FrWindow *window,
GList *selected_files,
char *base_dir_for_selection)
{
DialogData *data;
+ GtkWidget *button;
+ const char *extract_default_dir;
data = g_new0 (DialogData, 1);
data->builder = gtk_builder_new_from_resource (ENGRAMPA_RESOURCE_UI_PATH G_DIR_SEPARATOR_S "dlg-extract.ui");
@@ -298,7 +319,12 @@ dlg_extract__common (FrWindow *window,
/* Set widgets data. */
- gtk_file_chooser_set_current_folder_uri (GTK_FILE_CHOOSER (data->dialog), fr_window_get_extract_default_dir (window));
+ extract_default_dir = fr_window_get_extract_default_dir (window);
+ if (uri_is_local (extract_default_dir))
+ {
+ extract_default_dir = g_filename_from_uri (extract_default_dir, NULL, NULL);
+ }
+ gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (data->dialog), extract_default_dir);
if (data->selected_files != NULL)
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("selected_files_radiobutton")), TRUE);
@@ -316,6 +342,18 @@ dlg_extract__common (FrWindow *window,
}
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("recreate_dir_checkbutton")), g_settings_get_boolean (data->settings, PREF_EXTRACT_RECREATE_FOLDERS));
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("create_subdir_checkbutton")), g_settings_get_boolean (data->settings, PREF_EXTRACT_CREATE_SUBDIR));
+
+ button = GET_WIDGET ("close_dialog_checkbutton");
+ g_settings_bind (data->settings,
+ PREF_EXTRACT_CLOSE_DIALOG,
+ GTK_TOGGLE_BUTTON (button),
+ "active",
+ G_SETTINGS_BIND_GET);
+ g_signal_connect (button,
+ "toggled",
+ G_CALLBACK (close_dialog_changed_cb),
+ window);
/* Set the signals handlers. */