Mercurial > hg > xemacs-beta
comparison lisp/gtk-password-dialog.el @ 462:0784d089fdc9 r21-2-46
Import from CVS: tag r21-2-46
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:44:37 +0200 |
parents | |
children | 7039e6323819 |
comparison
equal
deleted
inserted
replaced
461:120ed4009e51 | 462:0784d089fdc9 |
---|---|
1 ;;; gtk-password-dialog.el --- Reading passwords in a dialog | |
2 | |
3 ;; Copyright (C) 2000 Free Software Foundation, Inc. | |
4 | |
5 ;; Maintainer: William M. Perry <wmperry@gnu.org> | |
6 ;; Keywords: extensions, internal | |
7 | |
8 ;; This file is part of XEmacs. | |
9 | |
10 ;; XEmacs is free software; you can redistribute it and/or modify it | |
11 ;; under the terms of the GNU General Public License as published by | |
12 ;; the Free Software Foundation; either version 2, or (at your option) | |
13 ;; any later version. | |
14 | |
15 ;; XEmacs is distributed in the hope that it will be useful, but | |
16 ;; WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
18 ;; General Public License for more details. | |
19 | |
20 ;; You should have received a copy of the GNU General Public License | |
21 ;; along with XEmacs; see the file COPYING. If not, write to the | |
22 ;; Free Software Foundation, 59 Temple Place - Suite 330, | |
23 ;; Boston, MA 02111-1307, USA. | |
24 | |
25 ;;; Synched up with: Not in FSF. | |
26 | |
27 (defun gtk-password-dialog-ok-button (dlg) | |
28 (get dlg 'x-ok-button)) | |
29 | |
30 (defun gtk-password-dialog-cancel-button (dlg) | |
31 (get dlg 'x-cancel-button)) | |
32 | |
33 (defun gtk-password-dialog-entry-widget (dlg) | |
34 (get dlg 'x-initial-entry)) | |
35 | |
36 (defun gtk-password-dialog-confirmation-widget (dlg) | |
37 (get dlg 'x-verify-entry)) | |
38 | |
39 (defun gtk-password-dialog-new (&rest keywords) | |
40 ;; Format is (:keyword value ...) | |
41 ;; Allowed keywords are: | |
42 ;; | |
43 ;; :callback function | |
44 ;; :default string | |
45 ;; :title string | |
46 :; :prompt string | |
47 ;; :default string | |
48 ;; :verify boolean | |
49 ;; :verify-prompt string | |
50 (let* ((callback (plist-get keywords :callback 'ignore)) | |
51 (dialog (gtk-dialog-new)) | |
52 (vbox (gtk-dialog-vbox dialog)) | |
53 (button-area (gtk-dialog-action-area dialog)) | |
54 (default (plist-get keywords :default)) | |
55 (widget nil)) | |
56 (gtk-window-set-title dialog (plist-get keywords :title "Enter password...")) | |
57 | |
58 ;; Make us modal... | |
59 (put dialog 'type 'dialog) | |
60 | |
61 ;; Put the buttons in the bottom | |
62 (setq widget (gtk-button-new-with-label "OK")) | |
63 (gtk-container-add button-area widget) | |
64 (gtk-signal-connect widget 'clicked | |
65 (lambda (button data) | |
66 (funcall (car data) | |
67 (gtk-entry-get-text | |
68 (get (cdr data) 'x-initial-entry)))) | |
69 (cons callback dialog)) | |
70 (put dialog 'x-ok-button widget) | |
71 | |
72 (setq widget (gtk-button-new-with-label "Cancel")) | |
73 (gtk-container-add button-area widget) | |
74 (gtk-signal-connect widget 'clicked | |
75 (lambda (button dialog) | |
76 (gtk-widget-destroy dialog)) | |
77 dialog) | |
78 (put dialog 'x-cancel-button widget) | |
79 | |
80 ;; Now the entry area... | |
81 (gtk-container-set-border-width vbox 5) | |
82 (setq widget (gtk-label-new (plist-get keywords :prompt "Password:"))) | |
83 (gtk-misc-set-alignment widget 0.0 0.5) | |
84 (gtk-container-add vbox widget) | |
85 | |
86 (setq widget (gtk-entry-new)) | |
87 (put widget 'visibility nil) | |
88 (gtk-container-add vbox widget) | |
89 (put dialog 'x-initial-entry widget) | |
90 | |
91 (if (plist-get keywords :verify) | |
92 (let ((changed-cb (lambda (editable dialog) | |
93 (gtk-widget-set-sensitive | |
94 (get dialog 'x-ok-button) | |
95 (equal (gtk-entry-get-text | |
96 (get dialog 'x-initial-entry)) | |
97 (gtk-entry-get-text | |
98 (get dialog 'x-verify-entry))))))) | |
99 (gtk-container-set-border-width vbox 5) | |
100 (setq widget (gtk-label-new (plist-get keywords :verify-prompt "Verify:"))) | |
101 (gtk-misc-set-alignment widget 0.0 0.5) | |
102 (gtk-container-add vbox widget) | |
103 | |
104 (setq widget (gtk-entry-new)) | |
105 (put widget 'visibility nil) | |
106 (gtk-container-add vbox widget) | |
107 (put dialog 'x-verify-entry widget) | |
108 | |
109 (gtk-signal-connect (get dialog 'x-initial-entry) | |
110 'changed changed-cb dialog) | |
111 (gtk-signal-connect (get dialog 'x-verify-entry) | |
112 'changed changed-cb dialog) | |
113 (gtk-widget-set-sensitive (get dialog 'x-ok-button) nil))) | |
114 | |
115 (if default | |
116 (progn | |
117 (gtk-entry-set-text (get dialog 'x-initial-entry) default) | |
118 (gtk-entry-select-region (get dialog 'x-initial-entry) | |
119 0 (length default)))) | |
120 dialog)) | |
121 | |
122 (provide 'gtk-password-dialog) |