view lisp/gtk-password-dialog.el @ 5200:70ed8a0d8da8

port Mule-ization of mule-wnnfns.c from ben-unicode-internal -------------------- ChangeLog entries follow: -------------------- src/ChangeLog addition: 2010-04-12 Ben Wing <ben@xemacs.org> * charset.h: * lisp.h: * lisp.h (XREALLOC_ARRAY): * text.h: Port charset_codepoint_to_itext(), buffer_itext_to_charset_codepoint(), EXTBYTE_STRING_TO_ALLOCA(), `enum converr' from ben-unicode-internal, for use with the mule-wnnfns.c changes. * mule-wnnfns.c: * mule-wnnfns.c (Fwnn_open): * mule-wnnfns.c (Fwnn_dict_add): * mule-wnnfns.c (Fwnn_dict_list): * mule-wnnfns.c (Fwnn_get_zenkouho): * mule-wnnfns.c (Fwnn_inspect): * mule-wnnfns.c (Fwnn_bunsetu_kanji): * mule-wnnfns.c (Fwnn_bunsetu_yomi): * mule-wnnfns.c (Fwnn_word_info): * mule-wnnfns.c (Fwnn_dict_search): * mule-wnnfns.c (Fwnn_get_msg): * mule-wnnfns.c (Fwnn_fuzokugo_set): * mule-wnnfns.c (Fwnn_fuzokugo_get): * mule-wnnfns.c (Fwnn_hinsi_list): * mule-wnnfns.c (Fwnn_fisys_dict_add): * mule-wnnfns.c (Fwnn_fiusr_dict_add): * mule-wnnfns.c (Fwnn_notrans_dict_add): * mule-wnnfns.c (Fwnn_bmodify_dict_add): * mule-wnnfns.c (reinit_vars_of_mule_wnn): * mule-wnnfns.c (vars_of_mule_wnn): * mule-wnnfns.c (w2m): * mule-wnnfns.c (m2w): * mule-wnnfns.c (yes_or_no): * mule-wnnfns.c (puts2): * mule-wnnfns.c (check_wnn_server_type): Mule-ize, borrowed from ben-unicode-internal.
author Ben Wing <ben@xemacs.org>
date Mon, 12 Apr 2010 00:55:04 -0500
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)