void dlg_password (GtkWidget *widget, gpointer callback_data) { FrWindow *window = callback_data; DialogData *data; GtkWidget *content_area; char *basename; char *title; data = g_new0 (DialogData, 1); data->window = window; data->builder = _gtk_builder_new_from_resource ("password.ui"); if (data->builder == NULL) { g_free (data); return; } /* Set widgets data. */ data->dialog = g_object_new (GTK_TYPE_DIALOG, "transient-for", GTK_WINDOW (window), "modal", TRUE, "use-header-bar", _gtk_settings_get_dialogs_use_header (), NULL); content_area = gtk_dialog_get_content_area (GTK_DIALOG (data->dialog)); gtk_container_add (GTK_CONTAINER (content_area), GET_WIDGET ("password_vbox")); gtk_dialog_add_buttons (GTK_DIALOG (data->dialog), _GTK_LABEL_CANCEL, GTK_RESPONSE_CANCEL, _GTK_LABEL_SAVE, GTK_RESPONSE_OK, NULL); gtk_dialog_set_default_response (GTK_DIALOG (data->dialog), GTK_RESPONSE_OK); gtk_style_context_add_class (gtk_widget_get_style_context (gtk_dialog_get_widget_for_response (GTK_DIALOG (data->dialog), GTK_RESPONSE_OK)), GTK_STYLE_CLASS_SUGGESTED_ACTION); basename = _g_file_get_display_basename (fr_archive_get_file (window->archive)); title = g_strdup_printf (_("Enter a password for “%s”"), basename); gtk_label_set_text (GTK_LABEL (GET_WIDGET ("title_label")), title); g_free (title); g_free (basename); _gtk_entry_use_as_password_entry (GTK_ENTRY (GET_WIDGET ("password_entry"))); _gtk_entry_set_locale_text (GTK_ENTRY (GET_WIDGET ("password_entry")), fr_window_get_password (window)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("encrypt_header_checkbutton")), fr_window_get_encrypt_header (window)); if (! fr_archive_is_capable_of (window->archive, FR_ARCHIVE_CAN_ENCRYPT_HEADER)) { gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (GET_WIDGET ("encrypt_header_checkbutton")), TRUE); gtk_widget_set_sensitive (GET_WIDGET ("encrypt_header_checkbutton"), FALSE); } /* Set the signals handlers. */ g_signal_connect ((data->dialog), "destroy", G_CALLBACK (destroy_cb), data); g_signal_connect ((data->dialog), "response", G_CALLBACK (response_cb), data); /* Run dialog. */ gtk_widget_grab_focus (GET_WIDGET ("password_entry")); gtk_widget_show (data->dialog); }
static void fr_command_7z_add (FrCommand *command, const char *from_file, GList *file_list, const char *base_dir, gboolean update, gboolean follow_links) { FrArchive *archive = FR_ARCHIVE (command); GList *scan; fr_process_use_standard_locale (command->process, TRUE); fr_process_set_out_line_func (command->process, process_line__add, command); fr_command_7z_begin_command (command); if (update) fr_process_add_arg (command->process, "u"); else fr_process_add_arg (command->process, "a"); if (base_dir != NULL) fr_process_set_working_dir (command->process, base_dir); if (_g_mime_type_matches (archive->mime_type, "application/zip") || _g_mime_type_matches (archive->mime_type, "application/x-cbz")) { fr_process_add_arg (command->process, "-tzip"); fr_process_add_arg (command->process, "-mem=AES128"); } fr_process_add_arg (command->process, "-bd"); fr_process_add_arg (command->process, "-y"); if (follow_links) fr_process_add_arg (command->process, "-l"); add_password_arg (command, archive->password, FALSE); if ((archive->password != NULL) && (*archive->password != 0) && archive->encrypt_header && fr_archive_is_capable_of (archive, FR_ARCHIVE_CAN_ENCRYPT_HEADER)) { fr_process_add_arg (command->process, "-mhe=on"); } /* fr_process_add_arg (command->process, "-ms=off"); FIXME: solid mode off? */ switch (archive->compression) { case FR_COMPRESSION_VERY_FAST: fr_process_add_arg (command->process, "-mx=1"); break; case FR_COMPRESSION_FAST: fr_process_add_arg (command->process, "-mx=5"); break; case FR_COMPRESSION_NORMAL: fr_process_add_arg (command->process, "-mx=7"); break; case FR_COMPRESSION_MAXIMUM: fr_process_add_arg (command->process, "-mx=9"); if (! _g_mime_type_matches (archive->mime_type, "application/zip") && ! _g_mime_type_matches (archive->mime_type, "application/x-cbz")) { fr_process_add_arg (command->process, "-m0=lzma2");; } break; } if (_g_mime_type_matches (archive->mime_type, "application/x-ms-dos-executable")) fr_process_add_arg (command->process, "-sfx"); if (archive->volume_size > 0) fr_process_add_arg_printf (command->process, "-v%ub", archive->volume_size); if (from_file != NULL) fr_process_add_arg_concat (command->process, "-i@", from_file, NULL); if (from_file == NULL) for (scan = file_list; scan; scan = scan->next) /* Files prefixed with '@' need to be handled specially */ if (g_str_has_prefix (scan->data, "@")) fr_process_add_arg_concat (command->process, "-i!", scan->data, NULL); fr_process_add_arg (command->process, "--"); fr_process_add_arg (command->process, command->filename); if (from_file == NULL) for (scan = file_list; scan; scan = scan->next) /* Skip files prefixed with '@', already added */ if (!g_str_has_prefix (scan->data, "@")) fr_process_add_arg (command->process, scan->data); fr_process_end_command (command->process); }