view lisp/gtk-password-dialog.el @ 1261:465bd3c7d932

[xemacs-hg @ 2003-02-06 06:35:47 by ben] various bug fixes mule/cyril-util.el: Fix compile warning. loadup.el, make-docfile.el, update-elc-2.el, update-elc.el: Set stack-trace-on-error, load-always-display-messages so we get better debug results. update-elc-2.el: Fix typo in name of lisp/mule, leading to compile failure. simple.el: Omit M-S-home/end from motion keys. update-elc.el: Overhaul: -- allow list of "early-compile" files to be specified, not hardcoded -- fix autoload checking to include all .el files, not just dumped ones -- be smarter about regenerating autoloads, so we don't need to use loadup-el if not necessary -- use standard methods for loading/not loading auto-autoloads.el (maybe fixes "Already loaded" error?) -- rename misleading NOBYTECOMPILE flag file. window-xemacs.el: Fix bug in default param. window-xemacs.el: Fix compile warnings. lwlib-Xm.c: Fix compile warning. lispref/mule.texi: Lots of Mule rewriting. internals/internals.texi: Major fixup. Correct for new names of Bytebpos, Ichar, etc. and lots of Mule rewriting. config.inc.samp: Various fixups. Makefile.in.in: NOBYTECOMPILE -> BYTECOMPILE_CHANGE. esd.c: Warning fixes. fns.c: Eliminate bogus require-prints-loading-message; use already existent load-always-display-messages instead. Make sure `load' knows we are coming from `require'. lread.c: Turn on `load-warn-when-source-newer' by default. Change loading message to indicate when we are `require'ing. Eliminate purify_flag hacks to display more messages; instead, loadup and friends specify this explicitly with `load-always-display-messages'. Add spaces when batch to clearly indicate recursive loading. Fassoc() does not GC so no need to gcpro. gui-x.c, gui-x.h, menubar-x.c: Fix up crashes when selecting menubar items due to lack of GCPROing of callbacks in lwlib structures. eval.c, lisp.h, print.c: Don't canonicalize to selected-frame when noninteractive, or backtraces get all screwed up as some values are printed through the stream console and some aren't. Export canonicalize_printcharfun() and use in Fbacktrace().
author ben
date Thu, 06 Feb 2003 06:36:17 +0000
parents 7039e6323819
children 308d34e9f07d
line wrap: on
line source

;;; 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.

(globally-declare-fboundp
 '(gtk-dialog-new
   gtk-dialog-vbox gtk-dialog-action-area
   gtk-window-set-title gtk-button-new-with-label
   gtk-container-add gtk-signal-connect gtk-entry-get-text
   gtk-widget-destroy gtk-container-set-border-width gtk-label-new
   gtk-misc-set-alignment gtk-entry-new gtk-widget-set-sensitive
   gtk-entry-set-text gtk-entry-select-region))

(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)