From b07b91cdc973bcaa65e9df0fa0e304943dcaffa6 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Fri, 17 Jun 2016 21:32:33 +0100 Subject: [PATCH] p2v: Don't allow password & SSH identity URL fields to both be non-empty. It makes no sense. By setting one field to non-sensitive when the other field is populated, we can avoid this happening, and also make tabbing between the fields simpler. As a consequence of making this change, I also got rid of the now unnecessary explanatory text telling you to leave one field blank. (cherry picked from commit b0d2d697e03a11642ab36f4a92b1f849085d2db9) --- p2v/gui.c | 44 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/p2v/gui.c b/p2v/gui.c index 832d72a..dad8f6e 100644 --- a/p2v/gui.c +++ b/p2v/gui.c @@ -92,6 +92,7 @@ gui_conversion (struct config *config) /*----------------------------------------------------------------------*/ /* Connection dialog. */ +static void password_or_identity_changed_callback (GtkWidget *w, gpointer data); static void test_connection_clicked (GtkWidget *w, gpointer data); static void *test_connection_thread (void *data); static void configure_network_button_clicked (GtkWidget *w, gpointer data); @@ -110,7 +111,6 @@ create_connection_dialog (struct config *config) GtkWidget *username_label; GtkWidget *password_label; GtkWidget *identity_label; - GtkWidget *identity_tip_label; GtkWidget *test_hbox, *test; GtkWidget *about; GtkWidget *configure_network; @@ -126,7 +126,7 @@ create_connection_dialog (struct config *config) gtk_label_set_line_wrap (GTK_LABEL (intro), TRUE); gtk_misc_set_padding (GTK_MISC (intro), 10, 10); - table = gtk_table_new (6, 2, FALSE); + table = gtk_table_new (5, 2, FALSE); server_label = gtk_label_new (_("Conversion server:")); gtk_misc_set_alignment (GTK_MISC (server_label), 1., 0.5); gtk_table_attach (GTK_TABLE (table), server_label, @@ -183,19 +183,12 @@ create_connection_dialog (struct config *config) gtk_table_attach (GTK_TABLE (table), identity_entry, 1, 2, 3, 4, GTK_EXPAND|GTK_FILL, GTK_FILL, 4, 4); - identity_tip_label = gtk_label_new (NULL); - gtk_label_set_markup (GTK_LABEL (identity_tip_label), - _("If using password authentication, leave the SSH Identity URL blank")); - gtk_label_set_line_wrap (GTK_LABEL (identity_tip_label), TRUE); - gtk_table_attach (GTK_TABLE (table), identity_tip_label, - 1, 2, 4, 5, GTK_FILL, GTK_FILL, 4, 4); - sudo_button = gtk_check_button_new_with_label (_("Use sudo when running virt-v2v")); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sudo_button), config->sudo); gtk_table_attach (GTK_TABLE (table), sudo_button, - 1, 2, 5, 6, GTK_FILL, GTK_FILL, 4, 4); + 1, 2, 4, 5, GTK_FILL, GTK_FILL, 4, 4); test_hbox = gtk_hbox_new (FALSE, 0); test = gtk_button_new_with_label (_("Test connection")); @@ -247,6 +240,37 @@ create_connection_dialog (struct config *config) G_CALLBACK (about_button_clicked), NULL); g_signal_connect (G_OBJECT (next_button), "clicked", G_CALLBACK (connection_next_clicked), NULL); + g_signal_connect (G_OBJECT (password_entry), "changed", + G_CALLBACK (password_or_identity_changed_callback), NULL); + g_signal_connect (G_OBJECT (identity_entry), "changed", + G_CALLBACK (password_or_identity_changed_callback), NULL); +} + +/** + * The password or SSH identity URL entries are mutually exclusive, so + * if one contains text then disable the other. This function is + * called when the "changed" signal is received on either. + */ +static void +password_or_identity_changed_callback (GtkWidget *w, gpointer data) +{ + const char *str; + int password_set; + int identity_set; + + str = gtk_entry_get_text (GTK_ENTRY (password_entry)); + password_set = str != NULL && STRNEQ (str, ""); + str = gtk_entry_get_text (GTK_ENTRY (identity_entry)); + identity_set = str != NULL && STRNEQ (str, ""); + + if (!password_set && !identity_set) { + gtk_widget_set_sensitive (password_entry, TRUE); + gtk_widget_set_sensitive (identity_entry, TRUE); + } + else if (identity_set) + gtk_widget_set_sensitive (password_entry, FALSE); + else if (password_set) + gtk_widget_set_sensitive (identity_entry, FALSE); } static void -- 1.8.3.1