1 #include <gnumeric-config.h>
2 #include <glib/gi18n-lib.h>
3 #include <dialogs/dialogs.h>
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.
16 dialog_get_password (GtkWindow
*parent
, const char *filename
)
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
);
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
);
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
,
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
,
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
,
58 "width-request", 1, NULL
);
59 gtk_box_pack_start (GTK_BOX (pwb
), gtk_label_new (_("Password:")),
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
),
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
);