1.12.42
[gnumeric.git] / src / dialogs / dialog-password.c
blob4fe76ed145cac516d6cb6c0c6f365d300d6da9cd
1 #include <gnumeric-config.h>
2 #include <glib/gi18n-lib.h>
3 #include <dialogs/dialogs.h>
4 #include <gui-util.h>
6 static void
7 cb_accept_password (G_GNUC_UNUSED GtkWidget *IGNORED, GtkDialog *d)
9 gtk_dialog_response (d, GTK_RESPONSE_ACCEPT);
13 * Note: filename is fs encoded, not UTF-8.
15 char *
16 dialog_get_password (GtkWindow *parent, const char *filename)
18 char *res = NULL;
19 char *str;
20 char *dispname;
21 char *primary;
22 char *secondary;
23 GtkWidget *d, *hb, *vb, *pwb, *image, *label, *entry;
25 dispname = g_filename_display_name (filename);
26 primary = g_strdup_printf (_("%s is encrypted"), dispname);
27 g_free (dispname);
28 secondary = _("Encrypted files require a password\nbefore they can be opened.");
29 label = gtk_label_new (NULL);
30 str = g_strdup_printf ("<span weight=\"bold\" size=\"larger\">"
31 "%s</span>\n\n%s", primary, secondary);
32 gtk_label_set_markup (GTK_LABEL (label), str);
33 g_free (primary);
34 g_free (str);
36 gtk_label_set_selectable (GTK_LABEL (label), TRUE);
38 d = gtk_dialog_new_with_buttons ("", parent,
39 GTK_DIALOG_DESTROY_WITH_PARENT,
40 GNM_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
41 GNM_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
42 NULL);
43 gtk_window_set_resizable (GTK_WINDOW (d), FALSE);
44 hb = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
45 gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (d))), hb,
46 TRUE, TRUE, 8);
47 image = gtk_image_new_from_icon_name ("gnumeric-protection-yes-dialog",
48 GTK_ICON_SIZE_DIALOG);
49 gtk_misc_set_alignment (GTK_MISC (image), 0.5, 0.0);
50 gtk_box_pack_start (GTK_BOX (hb), image, FALSE, FALSE, 0);
51 vb = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
52 gtk_box_pack_start (GTK_BOX (hb), vb, TRUE, TRUE, 6);
53 gtk_box_pack_start (GTK_BOX (vb), label, TRUE, TRUE, 0);
54 pwb = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 8);
55 /* Strange width so that width of primary/secondary text will win. */
56 entry = g_object_new (GTK_TYPE_ENTRY,
57 "visibility", FALSE,
58 "width-request", 1, NULL);
59 gtk_box_pack_start (GTK_BOX (pwb), gtk_label_new (_("Password:")),
60 FALSE, FALSE, 0);
61 gtk_box_pack_start (GTK_BOX (pwb), entry, TRUE, TRUE, 0);
62 gtk_box_pack_start (GTK_BOX (vb), pwb, FALSE, FALSE, 0);
63 gtk_widget_show_all (d);
65 g_signal_connect (G_OBJECT (entry),
66 "activate",
67 G_CALLBACK (cb_accept_password), d);
69 if (gtk_dialog_run (GTK_DIALOG (d)) == GTK_RESPONSE_ACCEPT)
70 res = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry)));
71 gtk_widget_destroy (d);
72 return res;