Mercurial > hg > xemacs-beta
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/gtk-password-dialog.el Mon Aug 13 11:44:37 2007 +0200 @@ -0,0 +1,122 @@ +;;; gtk-password-dialog.el --- Reading passwords in a dialog + +;; Copyright (C) 2000 Free Software Foundation, Inc. + +;; Maintainer: William M. Perry <wmperry@gnu.org> +;; Keywords: extensions, internal + +;; This file is part of XEmacs. + +;; XEmacs is free software; you can redistribute it and/or modify it +;; under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. + +;; XEmacs is distributed in the hope that it will be useful, but +;; WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;; General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with XEmacs; see the file COPYING. If not, write to the +;; Free Software Foundation, 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Synched up with: Not in FSF. + +(defun gtk-password-dialog-ok-button (dlg) + (get dlg 'x-ok-button)) + +(defun gtk-password-dialog-cancel-button (dlg) + (get dlg 'x-cancel-button)) + +(defun gtk-password-dialog-entry-widget (dlg) + (get dlg 'x-initial-entry)) + +(defun gtk-password-dialog-confirmation-widget (dlg) + (get dlg 'x-verify-entry)) + +(defun gtk-password-dialog-new (&rest keywords) + ;; Format is (:keyword value ...) + ;; Allowed keywords are: + ;; + ;; :callback function + ;; :default string + ;; :title string + :; :prompt string + ;; :default string + ;; :verify boolean + ;; :verify-prompt string + (let* ((callback (plist-get keywords :callback 'ignore)) + (dialog (gtk-dialog-new)) + (vbox (gtk-dialog-vbox dialog)) + (button-area (gtk-dialog-action-area dialog)) + (default (plist-get keywords :default)) + (widget nil)) + (gtk-window-set-title dialog (plist-get keywords :title "Enter password...")) + + ;; Make us modal... + (put dialog 'type 'dialog) + + ;; Put the buttons in the bottom + (setq widget (gtk-button-new-with-label "OK")) + (gtk-container-add button-area widget) + (gtk-signal-connect widget 'clicked + (lambda (button data) + (funcall (car data) + (gtk-entry-get-text + (get (cdr data) 'x-initial-entry)))) + (cons callback dialog)) + (put dialog 'x-ok-button widget) + + (setq widget (gtk-button-new-with-label "Cancel")) + (gtk-container-add button-area widget) + (gtk-signal-connect widget 'clicked + (lambda (button dialog) + (gtk-widget-destroy dialog)) + dialog) + (put dialog 'x-cancel-button widget) + + ;; Now the entry area... + (gtk-container-set-border-width vbox 5) + (setq widget (gtk-label-new (plist-get keywords :prompt "Password:"))) + (gtk-misc-set-alignment widget 0.0 0.5) + (gtk-container-add vbox widget) + + (setq widget (gtk-entry-new)) + (put widget 'visibility nil) + (gtk-container-add vbox widget) + (put dialog 'x-initial-entry widget) + + (if (plist-get keywords :verify) + (let ((changed-cb (lambda (editable dialog) + (gtk-widget-set-sensitive + (get dialog 'x-ok-button) + (equal (gtk-entry-get-text + (get dialog 'x-initial-entry)) + (gtk-entry-get-text + (get dialog 'x-verify-entry))))))) + (gtk-container-set-border-width vbox 5) + (setq widget (gtk-label-new (plist-get keywords :verify-prompt "Verify:"))) + (gtk-misc-set-alignment widget 0.0 0.5) + (gtk-container-add vbox widget) + + (setq widget (gtk-entry-new)) + (put widget 'visibility nil) + (gtk-container-add vbox widget) + (put dialog 'x-verify-entry widget) + + (gtk-signal-connect (get dialog 'x-initial-entry) + 'changed changed-cb dialog) + (gtk-signal-connect (get dialog 'x-verify-entry) + 'changed changed-cb dialog) + (gtk-widget-set-sensitive (get dialog 'x-ok-button) nil))) + + (if default + (progn + (gtk-entry-set-text (get dialog 'x-initial-entry) default) + (gtk-entry-select-region (get dialog 'x-initial-entry) + 0 (length default)))) + dialog)) + +(provide 'gtk-password-dialog)