| diff -up openssh-7.4p1/contrib/gnome-ssh-askpass2.c.progress openssh-7.4p1/contrib/gnome-ssh-askpass2.c |
| |
| |
| @@ -53,6 +53,7 @@ |
| #include <string.h> |
| #include <unistd.h> |
| #include <X11/Xlib.h> |
| +#include <glib.h> |
| #include <gtk/gtk.h> |
| #include <gdk/gdkx.h> |
| |
| @@ -81,13 +82,24 @@ ok_dialog(GtkWidget *entry, gpointer dia |
| gtk_dialog_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK); |
| } |
| |
| +static void |
| +move_progress(GtkWidget *entry, gpointer progress) |
| +{ |
| + gdouble step; |
| + g_return_if_fail(GTK_IS_PROGRESS_BAR(progress)); |
| + |
| + step = g_random_double_range(0.03, 0.1); |
| + gtk_progress_bar_set_pulse_step(GTK_PROGRESS_BAR(progress), step); |
| + gtk_progress_bar_pulse(GTK_PROGRESS_BAR(progress)); |
| +} |
| + |
| static int |
| passphrase_dialog(char *message) |
| { |
| const char *failed; |
| char *passphrase, *local; |
| int result, grab_tries, grab_server, grab_pointer; |
| - GtkWidget *parent_window, *dialog, *entry; |
| + GtkWidget *parent_window, *dialog, *entry, *progress, *hbox; |
| GdkGrabStatus status; |
| |
| grab_server = (getenv("GNOME_SSH_ASKPASS_GRAB_SERVER") != NULL); |
| @@ -104,14 +116,32 @@ passphrase_dialog(char *message) |
| "%s", |
| message); |
| |
| + hbox = gtk_hbox_new(FALSE, 0); |
| + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, FALSE, |
| + FALSE, 0); |
| + gtk_widget_show(hbox); |
| + |
| entry = gtk_entry_new(); |
| gtk_box_pack_start( |
| - GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), entry, |
| - FALSE, FALSE, 0); |
| + GTK_BOX(hbox), entry, |
| + TRUE, FALSE, 0); |
| + gtk_entry_set_width_chars(GTK_ENTRY(entry), 2); |
| gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE); |
| gtk_widget_grab_focus(entry); |
| gtk_widget_show(entry); |
| |
| + hbox = gtk_hbox_new(FALSE, 0); |
| + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, FALSE, |
| + FALSE, 8); |
| + gtk_widget_show(hbox); |
| + |
| + progress = gtk_progress_bar_new(); |
| + |
| + gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress), "Passphrase length hidden intentionally"); |
| + gtk_box_pack_start(GTK_BOX(hbox), progress, TRUE, |
| + TRUE, 5); |
| + gtk_widget_show(progress); |
| + |
| gtk_window_set_title(GTK_WINDOW(dialog), "OpenSSH"); |
| gtk_window_set_position (GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); |
| gtk_window_set_keep_above(GTK_WINDOW(dialog), TRUE); |
| @@ -120,6 +150,8 @@ passphrase_dialog(char *message) |
| gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK); |
| g_signal_connect(G_OBJECT(entry), "activate", |
| G_CALLBACK(ok_dialog), dialog); |
| + g_signal_connect(G_OBJECT(entry), "changed", |
| + G_CALLBACK(move_progress), progress); |
| |
| gtk_window_set_keep_above(GTK_WINDOW(dialog), TRUE); |
| |