From dd3529f648ba643924b94857fe16afd37147788d Mon Sep 17 00:00:00 2001 From: ZenWalker Date: Wed, 10 Aug 2016 00:16:52 +0200 Subject: make the "encrypt header" option insensitive if no password is specified based on file-roller commit: https://git.gnome.org/browse/file-roller/commit/?id=6f7f14fa112a7c5b2a64bedeeca9d570ffa90968 and I add some code to work changing the combo box with the compressed file types --- src/dlg-batch-add.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/dlg-batch-add.c b/src/dlg-batch-add.c index ae82eee..55d3b42 100644 --- a/src/dlg-batch-add.c +++ b/src/dlg-batch-add.c @@ -41,6 +41,9 @@ #define BAD_CHARS "/\\*" #define GET_WIDGET(x) (_gtk_builder_get_widget (data->builder, (x))) +static gboolean has_password = FALSE; +static gboolean can_encrypt_header = FALSE; + typedef struct { FrWindow *window; @@ -379,8 +382,9 @@ update_sensitivity_for_mime_type (DialogData *data, gtk_widget_set_sensitive (GET_WIDGET ("a_password_label"), sensitive); sensitive = mime_type_desc[i].capabilities & FR_COMMAND_CAN_ENCRYPT_HEADER; - gtk_widget_set_sensitive (GET_WIDGET ("a_encrypt_header_checkbutton"), sensitive); - gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (GET_WIDGET ("a_encrypt_header_checkbutton")), ! sensitive); + can_encrypt_header = sensitive; + gtk_widget_set_sensitive (GET_WIDGET ("a_encrypt_header_checkbutton"), sensitive ? has_password : FALSE); + gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (GET_WIDGET ("a_encrypt_header_checkbutton")), sensitive ? (!has_password) : TRUE); sensitive = mime_type_desc[i].capabilities & FR_COMMAND_CAN_CREATE_VOLUMES; gtk_widget_set_sensitive (GET_WIDGET ("a_volume_box"), sensitive); @@ -436,13 +440,22 @@ update_archive_type_combo_box_from_ext (DialogData *data, static void update_sensitivity (DialogData *data) { - gtk_widget_set_sensitive (GET_WIDGET ("a_volume_spinbutton"), gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("a_volume_checkbutton")))); + const char *password; + + gtk_widget_set_sensitive (GET_WIDGET ("a_volume_spinbutton"), + gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (GET_WIDGET ("a_volume_checkbutton")))); + + password = gtk_entry_get_text (GTK_ENTRY (GET_WIDGET ("a_password_entry"))); + has_password = (password != NULL) && (*password != '\0'); + gtk_toggle_button_set_inconsistent (GTK_TOGGLE_BUTTON (GET_WIDGET ("a_encrypt_header_checkbutton")), can_encrypt_header ? (!has_password) : TRUE); + gtk_widget_set_sensitive (GET_WIDGET ("a_encrypt_header_checkbutton"), can_encrypt_header ? has_password : FALSE); } static void -password_entry_changed_cb (GtkEditable *editable, - gpointer user_data) +password_entry_notify_text_cb (GObject *object, + GParamSpec *spec, + gpointer user_data) { update_sensitivity ((DialogData *) user_data); } @@ -561,8 +574,8 @@ dlg_batch_add_files (FrWindow *window, G_CALLBACK (archive_type_combo_box_changed_cb), data); g_signal_connect (GET_WIDGET ("a_password_entry"), - "changed", - G_CALLBACK (password_entry_changed_cb), + "notify::text", + G_CALLBACK (password_entry_notify_text_cb), data); g_signal_connect (GET_WIDGET ("a_volume_checkbutton"), "toggled", -- cgit v1.2.1