annotate lisp/widgets-gtk.el @ 5697:40fbceabaafd

menubar-items.el (default-menubar): Reorganize. Add PROBLEMS to toplevel. New "More about XEmacs" submenu for NEWS, licensing, etc. New "Recent History" menu for messages, lossage, etc. Get rid of ugly and unexpressive ellipses.
author Stephen J. Turnbull <stephen@xemacs.org>
date Mon, 24 Dec 2012 03:08:33 +0900
parents 308d34e9f07d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1 ;;; widgets-gtk.el --- Embedded widget support for XEmacs w/GTK primitives
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
3 ;; Copyright (C) 2001 Free Software Foundation, Inc.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
4
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
5 ;; Maintainer: William M. Perry <wmperry@gnu.org>
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
6 ;; Keywords: extensions, internal, dumped
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
7
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
8 ;; This file is part of XEmacs.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
9
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 2367
diff changeset
10 ;; XEmacs is free software: you can redistribute it and/or modify it
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 2367
diff changeset
11 ;; under the terms of the GNU General Public License as published by the
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 2367
diff changeset
12 ;; Free Software Foundation, either version 3 of the License, or (at your
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 2367
diff changeset
13 ;; option) any later version.
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
14
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 2367
diff changeset
15 ;; XEmacs is distributed in the hope that it will be useful, but WITHOUT
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 2367
diff changeset
16 ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 2367
diff changeset
17 ;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 2367
diff changeset
18 ;; for more details.
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
19
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 2367
diff changeset
21 ;; along with XEmacs. If not, see <http://www.gnu.org/licenses/>.
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
22
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
23 ;;; Synched up with: Not in FSF.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
24
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
25 ;;; Commentary:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
26
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
27 ;; This file is dumped with XEmacs (when embedded widgets are compiled in).
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
28
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
29 (globally-declare-fboundp
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
30 '(gtk-button-new-with-label
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
31 gtk-signal-connect
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
32 gtk-radio-button-new-with-label gtk-radio-button-group
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
33 gtk-toggle-button-set-active gtk-check-button-new-with-label
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
34 gtk-widget-show-all gtk-notebook-new gtk-notebook-append-page
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
35 gtk-vbox-new gtk-label-new gtk-adjustment-new
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
36 gtk-progress-bar-new-with-adjustment gtk-adjustment-set-value
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
37 gtk-entry-new gtk-entry-set-text gtk-widget-set-style
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
38 gtk-widget-get-style))
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 462
diff changeset
39
738
5039859429c5 [xemacs-hg @ 2002-02-02 13:39:59 by wmperry]
wmperry
parents: 523
diff changeset
40 (defun gtk-widget-get-callback (widget plist instance)
5039859429c5 [xemacs-hg @ 2002-02-02 13:39:59 by wmperry]
wmperry
parents: 523
diff changeset
41 (let ((cb (plist-get plist :callback))
5039859429c5 [xemacs-hg @ 2002-02-02 13:39:59 by wmperry]
wmperry
parents: 523
diff changeset
42 (ex (plist-get plist :callback-ex))
5039859429c5 [xemacs-hg @ 2002-02-02 13:39:59 by wmperry]
wmperry
parents: 523
diff changeset
43 (real-cb nil))
5039859429c5 [xemacs-hg @ 2002-02-02 13:39:59 by wmperry]
wmperry
parents: 523
diff changeset
44 (cond
5039859429c5 [xemacs-hg @ 2002-02-02 13:39:59 by wmperry]
wmperry
parents: 523
diff changeset
45 (ex
5039859429c5 [xemacs-hg @ 2002-02-02 13:39:59 by wmperry]
wmperry
parents: 523
diff changeset
46 (gtk-signal-connect widget 'button-release-event
5039859429c5 [xemacs-hg @ 2002-02-02 13:39:59 by wmperry]
wmperry
parents: 523
diff changeset
47 (lambda (widget event data)
5039859429c5 [xemacs-hg @ 2002-02-02 13:39:59 by wmperry]
wmperry
parents: 523
diff changeset
48 (put widget 'last-event event)))
5039859429c5 [xemacs-hg @ 2002-02-02 13:39:59 by wmperry]
wmperry
parents: 523
diff changeset
49 `(lambda (widget &rest ignored)
5039859429c5 [xemacs-hg @ 2002-02-02 13:39:59 by wmperry]
wmperry
parents: 523
diff changeset
50 (funcall ,ex ,instance (get widget 'last-event))))
5039859429c5 [xemacs-hg @ 2002-02-02 13:39:59 by wmperry]
wmperry
parents: 523
diff changeset
51 (cb
5039859429c5 [xemacs-hg @ 2002-02-02 13:39:59 by wmperry]
wmperry
parents: 523
diff changeset
52 `(lambda (widget &rest ignored)
5039859429c5 [xemacs-hg @ 2002-02-02 13:39:59 by wmperry]
wmperry
parents: 523
diff changeset
53 (if (functionp ,real-cb)
5039859429c5 [xemacs-hg @ 2002-02-02 13:39:59 by wmperry]
wmperry
parents: 523
diff changeset
54 (funcall ,real-cb)
5039859429c5 [xemacs-hg @ 2002-02-02 13:39:59 by wmperry]
wmperry
parents: 523
diff changeset
55 (eval ,real-cb))))
5039859429c5 [xemacs-hg @ 2002-02-02 13:39:59 by wmperry]
wmperry
parents: 523
diff changeset
56 (t
5039859429c5 [xemacs-hg @ 2002-02-02 13:39:59 by wmperry]
wmperry
parents: 523
diff changeset
57 nil))))
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
58
738
5039859429c5 [xemacs-hg @ 2002-02-02 13:39:59 by wmperry]
wmperry
parents: 523
diff changeset
59 (defun gtk-widget-instantiate-button-internal (plist instance)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
60 (let* ((type (or (plist-get plist :style) 'button))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
61 (label (or (plist-get plist :descriptor) (symbol-name type)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
62 (widget nil))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
63 (case type
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
64 (button
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
65 (setq widget (gtk-button-new-with-label label))
738
5039859429c5 [xemacs-hg @ 2002-02-02 13:39:59 by wmperry]
wmperry
parents: 523
diff changeset
66 (gtk-signal-connect widget 'clicked
5039859429c5 [xemacs-hg @ 2002-02-02 13:39:59 by wmperry]
wmperry
parents: 523
diff changeset
67 (gtk-widget-get-callback widget plist instance)))
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
68 (radio
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
69 (let ((aux nil)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
70 (selected-p (plist-get plist :selected)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
71 (setq widget (gtk-radio-button-new-with-label nil label)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
72 aux (gtk-radio-button-new-with-label
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
73 (gtk-radio-button-group widget)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
74 "bogus sibling"))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
75 (gtk-toggle-button-set-active widget (eval selected-p))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
76 (gtk-signal-connect widget 'toggled
738
5039859429c5 [xemacs-hg @ 2002-02-02 13:39:59 by wmperry]
wmperry
parents: 523
diff changeset
77 (gtk-widget-get-callback widget plist instance) aux)))
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
78 (otherwise
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
79 ;; Check boxes
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
80 (setq widget (gtk-check-button-new-with-label label))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
81 (gtk-toggle-button-set-active widget
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
82 (eval (plist-get plist :selected)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
83 (gtk-signal-connect widget 'toggled
738
5039859429c5 [xemacs-hg @ 2002-02-02 13:39:59 by wmperry]
wmperry
parents: 523
diff changeset
84 (gtk-widget-get-callback widget plist instance))))
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
85 (gtk-widget-show-all widget)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
86 widget))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
87
738
5039859429c5 [xemacs-hg @ 2002-02-02 13:39:59 by wmperry]
wmperry
parents: 523
diff changeset
88 (defun gtk-widget-instantiate-notebook-internal (plist instance)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
89 (let ((widget (gtk-notebook-new))
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2168
diff changeset
90 ;(items (plist-get plist :items))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2168
diff changeset
91 )
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 738
diff changeset
92 ; (while items
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 738
diff changeset
93 ; (gtk-notebook-append-page widget
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 738
diff changeset
94 ; (gtk-vbox-new nil 3)
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 738
diff changeset
95 ; (gtk-label-new (aref (car items) 0)))
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 738
diff changeset
96 ; (setq items (cdr items)))
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
97 widget))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
98
738
5039859429c5 [xemacs-hg @ 2002-02-02 13:39:59 by wmperry]
wmperry
parents: 523
diff changeset
99 (defun gtk-widget-instantiate-progress-internal (plist instance)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
100 (let* ((adj (gtk-adjustment-new 0.0 0.0 100.0 1.0 5.0 5.0))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
101 (widget (gtk-progress-bar-new-with-adjustment adj)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
102 (gtk-adjustment-set-value adj (or (plist-get plist :value) 0.0))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
103 widget))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
104
738
5039859429c5 [xemacs-hg @ 2002-02-02 13:39:59 by wmperry]
wmperry
parents: 523
diff changeset
105 (defun gtk-widget-instantiate-entry-internal (plist instance)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
106 (let* ((widget (gtk-entry-new))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
107 (default (plist-get plist :descriptor)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
108 (cond
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
109 ((stringp default)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
110 nil)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
111 ((sequencep default)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
112 (setq default (mapconcat 'identity default "")))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
113 (t
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
114 (error "Invalid default value: %S" default)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
115 (gtk-entry-set-text widget default)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
116 widget))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
117
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
118 (put 'button 'instantiator 'gtk-widget-instantiate-button-internal)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
119 (put 'tab-control 'instantiator 'gtk-widget-instantiate-notebook-internal)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
120 (put 'progress-gauge 'instantiator 'gtk-widget-instantiate-progress-internal)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
121 (put 'tree-view 'instantiator 'ignore)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
122 (put 'edit-field 'instantiator 'gtk-widget-instantiate-entry-internal)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
123 (put 'combo-box 'instantiator 'ignore)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
124 (put 'label 'instantiator 'ignore)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
125 (put 'layout 'instantiator 'ignore)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
126
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
127 (defun gtk-widget-instantiate-internal (instance
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
128 instantiator
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
129 pointer-fg
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
130 pointer-bg
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
131 domain)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
132 "The lisp side of widget/glyph instantiation code."
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
133 (let* ((type (aref instantiator 0))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
134 (plist (cdr (map 'list 'identity instantiator)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
135 (widget (funcall (or (get type 'instantiator) 'ignore)
738
5039859429c5 [xemacs-hg @ 2002-02-02 13:39:59 by wmperry]
wmperry
parents: 523
diff changeset
136 plist instance)))
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 738
diff changeset
137 ; (add-timeout 0.1 (lambda (obj)
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 738
diff changeset
138 ; (gtk-widget-set-style obj
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 738
diff changeset
139 ; (gtk-widget-get-style
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 738
diff changeset
140 ; (frame-property nil 'text-widget))))
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 738
diff changeset
141 ; widget)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
142 widget))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
143
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
144 (defun gtk-widget-property-internal ()
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
145 nil)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
146
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
147 (defun gtk-widget-redisplay-internal ()
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
148 nil)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
149
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
150 (provide 'widgets-gtk)