Mercurial > emacs
annotate lwlib/lwlib-Xlw.c @ 111367:1d1b5e1c230b
Backport r99750 from trunk
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Thu, 04 Nov 2010 15:53:28 -0400 |
parents | 1d1d5d9bd884 |
children | 384b3408c143 376148b31b5e |
rev | line source |
---|---|
5626 | 1 /* The lwlib interface to "xlwmenu" menus. |
2 Copyright (C) 1992 Lucid, Inc. | |
106815 | 3 Copyright (C) 1994, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, |
4 2008, 2009, 2010 Free Software Foundation, Inc. | |
5626 | 5 |
6 This file is part of the Lucid Widget Library. | |
7 | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
41767
diff
changeset
|
8 The Lucid Widget Library is free software; you can redistribute it and/or |
5626 | 9 modify it under the terms of the GNU General Public License as published by |
10 the Free Software Foundation; either version 1, or (at your option) | |
11 any later version. | |
12 | |
13 The Lucid Widget Library is distributed in the hope that it will be useful, | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
41767
diff
changeset
|
14 but WITHOUT ANY WARRANTY; without even the implied warranty of |
5626 | 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16 GNU General Public License for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
19 along with GNU Emacs; see the file COPYING. If not, write to | |
64083 | 20 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
21 Boston, MA 02110-1301, USA. */ | |
5626 | 22 |
26087
e0d966fb548f
Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents:
14186
diff
changeset
|
23 #ifdef HAVE_CONFIG_H |
e0d966fb548f
Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents:
14186
diff
changeset
|
24 #include <config.h> |
e0d966fb548f
Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents:
14186
diff
changeset
|
25 #endif |
e0d966fb548f
Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents:
14186
diff
changeset
|
26 |
105669
68dd71358159
* alloc.c: Do not define struct catchtag.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100957
diff
changeset
|
27 #include <setjmp.h> |
51142
45a8df254788
Include lisp.h, not ../src/lisp.h.
Dave Love <fx@gnu.org>
parents:
49600
diff
changeset
|
28 #include "lisp.h" |
41767 | 29 |
5626 | 30 #include "lwlib-Xlw.h" |
31 #include <X11/StringDefs.h> | |
32 #include <X11/IntrinsicP.h> | |
33 #include <X11/ObjectP.h> | |
34 #include <X11/CompositeP.h> | |
35 #include <X11/Shell.h> | |
36 #include "xlwmenu.h" | |
37 | |
36955
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
38 #if 0 |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
39 |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
40 #include <stdio.h> |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
41 |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
42 /* Print the complete X resource name of widget WIDGET to stderr. |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
43 This is sometimes handy to have available. */ |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
44 |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
45 void |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
46 x_print_complete_resource_name (widget) |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
47 Widget widget; |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
48 { |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
49 int i; |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
50 String names[100]; |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
51 |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
52 for (i = 0; i < 100 && widget != NULL; ++i) |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
53 { |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
54 names[i] = XtName (widget); |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
55 widget = XtParent (widget); |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
56 } |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
57 |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
58 for (--i; i >= 1; --i) |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
59 fprintf (stderr, "%s.", names[i]); |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
60 fprintf (stderr, "%s\n", names[0]); |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
61 } |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
62 |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
63 #endif /* 0 */ |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
64 |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
65 |
5626 | 66 /* Menu callbacks */ |
27334
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
67 |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
68 /* Callback XtNhighlightCallback for Lucid menus. W is the menu |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
69 widget, CLIENT_DATA contains a pointer to the widget_instance |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
70 for the menu, CALL_DATA contains a pointer to the widget_value |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
71 structure for the highlighted menu item. The latter may be null |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
72 if there isn't any highlighted menu item. */ |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
73 |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
74 static void |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
75 highlight_hook (w, client_data, call_data) |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
76 Widget w; |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
77 XtPointer client_data; |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
78 XtPointer call_data; |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
79 { |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
80 widget_instance *instance = (widget_instance *) client_data; |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
81 |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
82 if (instance->info->highlight_cb |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
83 && !w->core.being_destroyed) |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
84 instance->info->highlight_cb (w, instance->info->id, call_data); |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
85 } |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
86 |
5626 | 87 static void |
75019
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
88 enter_hook (w, client_data, call_data) |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
89 Widget w; |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
90 XtPointer client_data; |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
91 XtPointer call_data; |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
92 { |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
93 highlight_hook (w, client_data, call_data); |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
94 } |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
95 |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
96 static void |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
97 leave_hook (w, client_data, call_data) |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
98 Widget w; |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
99 XtPointer client_data; |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
100 XtPointer call_data; |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
101 { |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
102 highlight_hook (w, client_data, NULL); |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
103 } |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
104 |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
105 |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
106 static void |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
107 pre_hook (w, client_data, call_data) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
108 Widget w; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
109 XtPointer client_data; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
110 XtPointer call_data; |
5626 | 111 { |
112 widget_instance* instance = (widget_instance*)client_data; | |
113 widget_value* val; | |
114 | |
115 if (w->core.being_destroyed) | |
116 return; | |
117 | |
118 val = lw_get_widget_value_for_widget (instance, w); | |
119 if (instance->info->pre_activate_cb) | |
120 instance->info->pre_activate_cb (w, instance->info->id, | |
121 val ? val->call_data : NULL); | |
122 } | |
123 | |
124 static void | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
125 pick_hook (w, client_data, call_data) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
126 Widget w; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
127 XtPointer client_data; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
128 XtPointer call_data; |
5626 | 129 { |
130 widget_instance* instance = (widget_instance*)client_data; | |
131 widget_value* contents_val = (widget_value*)call_data; | |
132 widget_value* widget_val; | |
133 XtPointer widget_arg; | |
134 | |
135 if (w->core.being_destroyed) | |
136 return; | |
137 | |
138 if (instance->info->selection_cb && contents_val && contents_val->enabled | |
139 && !contents_val->contents) | |
140 instance->info->selection_cb (w, instance->info->id, | |
141 contents_val->call_data); | |
142 | |
143 widget_val = lw_get_widget_value_for_widget (instance, w); | |
144 widget_arg = widget_val ? widget_val->call_data : NULL; | |
145 if (instance->info->post_activate_cb) | |
146 instance->info->post_activate_cb (w, instance->info->id, widget_arg); | |
147 | |
148 } | |
149 | |
150 /* creation functions */ | |
5993
5feb28cb62c8
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5983
diff
changeset
|
151 |
5626 | 152 static Widget |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
153 xlw_create_menubar (instance) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
154 widget_instance* instance; |
5626 | 155 { |
5951
ddd8c555b2fc
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5708
diff
changeset
|
156 Widget widget; |
8786 | 157 Arg al[5]; |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
158 int ac = 0; |
5951
ddd8c555b2fc
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5708
diff
changeset
|
159 |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
160 XtSetArg (al[ac], XtNmenu, instance->info->val); ac++; |
8786 | 161 #ifdef emacs |
162 XtSetArg (al[ac], XtNshowGrip, 0); ac++; | |
163 XtSetArg (al[ac], XtNresizeToPreferred, 1); ac++; | |
164 XtSetArg (al[ac], XtNallowResize, 1); ac++; | |
165 #endif | |
5951
ddd8c555b2fc
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5708
diff
changeset
|
166 |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
167 /* This used to use XtVaCreateWidget, but an old Xt version |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
168 has a bug in XtVaCreateWidget that frees instance->info->name. */ |
6009
f68004daa523
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5993
diff
changeset
|
169 widget |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
170 = XtCreateWidget (instance->info->name, xlwMenuWidgetClass, |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
171 instance->parent, al, ac); |
5952
908e36c0235d
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5951
diff
changeset
|
172 |
5626 | 173 XtAddCallback (widget, XtNopen, pre_hook, (XtPointer)instance); |
174 XtAddCallback (widget, XtNselect, pick_hook, (XtPointer)instance); | |
75019
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
175 XtAddCallback (widget, XtNleaveCallback, leave_hook, (XtPointer)instance); |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
176 XtAddCallback (widget, XtNenterCallback, enter_hook, (XtPointer)instance); |
5626 | 177 return widget; |
178 } | |
179 | |
180 static Widget | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
181 xlw_create_popup_menu (instance) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
182 widget_instance* instance; |
5626 | 183 { |
6009
f68004daa523
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5993
diff
changeset
|
184 Widget popup_shell |
f68004daa523
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5993
diff
changeset
|
185 = XtCreatePopupShell (instance->info->name, overrideShellWidgetClass, |
f68004daa523
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5993
diff
changeset
|
186 instance->parent, NULL, 0); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
41767
diff
changeset
|
187 |
5952
908e36c0235d
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5951
diff
changeset
|
188 Widget widget; |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
189 Arg al[2]; |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
190 int ac = 0; |
5952
908e36c0235d
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5951
diff
changeset
|
191 |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
192 XtSetArg (al[ac], XtNmenu, instance->info->val); ac++; |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
193 XtSetArg (al[ac], XtNhorizontal, False); ac++; |
5952
908e36c0235d
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5951
diff
changeset
|
194 |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
195 /* This used to use XtVaManagedCreateWidget, but an old Xt version |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
196 has a bug in XtVaManagedCreateWidget that frees instance->info->name. */ |
6009
f68004daa523
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5993
diff
changeset
|
197 widget |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
198 = XtCreateManagedWidget ("popup", xlwMenuWidgetClass, |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
199 popup_shell, al, ac); |
5952
908e36c0235d
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5951
diff
changeset
|
200 |
5626 | 201 XtAddCallback (widget, XtNselect, pick_hook, (XtPointer)instance); |
75019
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
202 XtAddCallback (widget, XtNleaveCallback, leave_hook, (XtPointer)instance); |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
203 XtAddCallback (widget, XtNenterCallback, enter_hook, (XtPointer)instance); |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
204 |
5626 | 205 return popup_shell; |
206 } | |
207 | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
41767
diff
changeset
|
208 widget_creation_entry |
5626 | 209 xlw_creation_table [] = |
210 { | |
211 {"menubar", xlw_create_menubar}, | |
212 {"popup", xlw_create_popup_menu}, | |
213 {NULL, NULL} | |
214 }; | |
215 | |
216 Boolean | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
217 lw_lucid_widget_p (widget) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
218 Widget widget; |
5626 | 219 { |
220 WidgetClass the_class = XtClass (widget); | |
6009
f68004daa523
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5993
diff
changeset
|
221 |
5626 | 222 if (the_class == xlwMenuWidgetClass) |
223 return True; | |
224 if (the_class == overrideShellWidgetClass) | |
6009
f68004daa523
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5993
diff
changeset
|
225 return (XtClass (((CompositeWidget)widget)->composite.children [0]) |
f68004daa523
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5993
diff
changeset
|
226 == xlwMenuWidgetClass); |
5626 | 227 return False; |
228 } | |
229 | |
230 void | |
51142
45a8df254788
Include lisp.h, not ../src/lisp.h.
Dave Love <fx@gnu.org>
parents:
49600
diff
changeset
|
231 #ifdef PROTOTYPES |
45a8df254788
Include lisp.h, not ../src/lisp.h.
Dave Love <fx@gnu.org>
parents:
49600
diff
changeset
|
232 xlw_update_one_widget (widget_instance* instance, Widget widget, |
45a8df254788
Include lisp.h, not ../src/lisp.h.
Dave Love <fx@gnu.org>
parents:
49600
diff
changeset
|
233 widget_value* val, Boolean deep_p) |
45a8df254788
Include lisp.h, not ../src/lisp.h.
Dave Love <fx@gnu.org>
parents:
49600
diff
changeset
|
234 #else |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
235 xlw_update_one_widget (instance, widget, val, deep_p) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
236 widget_instance* instance; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
237 Widget widget; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
238 widget_value* val; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
239 Boolean deep_p; |
51142
45a8df254788
Include lisp.h, not ../src/lisp.h.
Dave Love <fx@gnu.org>
parents:
49600
diff
changeset
|
240 #endif |
5626 | 241 { |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
242 Arg al[1]; |
5626 | 243 |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
244 /* This used to use XtVaSetValues, but some old Xt versions |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
245 that have a bug in XtVaCreateWidget might have it here too. */ |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
246 XtSetArg (al[0], XtNmenu, instance->info->val); |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
247 |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
248 XtSetValues (widget, al, 1); |
5626 | 249 } |
250 | |
251 void | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
252 xlw_update_one_value (instance, widget, val) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
253 widget_instance* instance; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
254 Widget widget; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
255 widget_value* val; |
5626 | 256 { |
257 return; | |
258 } | |
259 | |
260 void | |
51142
45a8df254788
Include lisp.h, not ../src/lisp.h.
Dave Love <fx@gnu.org>
parents:
49600
diff
changeset
|
261 #ifdef PROTOTYPES |
45a8df254788
Include lisp.h, not ../src/lisp.h.
Dave Love <fx@gnu.org>
parents:
49600
diff
changeset
|
262 xlw_pop_instance (widget_instance* instance, Boolean up) |
45a8df254788
Include lisp.h, not ../src/lisp.h.
Dave Love <fx@gnu.org>
parents:
49600
diff
changeset
|
263 #else |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
264 xlw_pop_instance (instance, up) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
265 widget_instance* instance; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
266 Boolean up; |
51142
45a8df254788
Include lisp.h, not ../src/lisp.h.
Dave Love <fx@gnu.org>
parents:
49600
diff
changeset
|
267 #endif |
5626 | 268 { |
269 } | |
270 | |
271 void | |
12745
4da8b8ac5211
(xlw_popup_menu): New arg event.
Richard M. Stallman <rms@gnu.org>
parents:
8786
diff
changeset
|
272 xlw_popup_menu (widget, event) |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
273 Widget widget; |
12745
4da8b8ac5211
(xlw_popup_menu): New arg event.
Richard M. Stallman <rms@gnu.org>
parents:
8786
diff
changeset
|
274 XEvent *event; |
5626 | 275 { |
276 XlwMenuWidget mw; | |
277 | |
278 if (!XtIsShell (widget)) | |
279 return; | |
280 | |
281 mw = (XlwMenuWidget)((CompositeWidget)widget)->composite.children [0]; | |
282 | |
12745
4da8b8ac5211
(xlw_popup_menu): New arg event.
Richard M. Stallman <rms@gnu.org>
parents:
8786
diff
changeset
|
283 if (event) |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
284 XtCallActionProc ((Widget) mw, "start", event, NULL, 0); |
12745
4da8b8ac5211
(xlw_popup_menu): New arg event.
Richard M. Stallman <rms@gnu.org>
parents:
8786
diff
changeset
|
285 else |
4da8b8ac5211
(xlw_popup_menu): New arg event.
Richard M. Stallman <rms@gnu.org>
parents:
8786
diff
changeset
|
286 { |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
287 XEvent dummy; |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
288 XButtonPressedEvent *bd = &dummy.xbutton; |
5626 | 289 |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
290 bd->type = ButtonPress; |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
291 bd->serial = 0; |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
292 bd->send_event = 0; |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
293 bd->display = XtDisplay (widget); |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
294 bd->window = XtWindow (XtParent (widget)); |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
295 bd->time = CurrentTime; |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
296 bd->button = 0; |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
297 XQueryPointer (bd->display, bd->window, &bd->root, |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
298 &bd->subwindow, &bd->x_root, &bd->y_root, |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
299 &bd->x, &bd->y, &bd->state); |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
300 |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
301 XtCallActionProc ((Widget) mw, "start", &dummy, NULL, 0); |
12745
4da8b8ac5211
(xlw_popup_menu): New arg event.
Richard M. Stallman <rms@gnu.org>
parents:
8786
diff
changeset
|
302 } |
5626 | 303 } |
304 | |
305 /* Destruction of instances */ | |
306 void | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
307 xlw_destroy_instance (instance) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
308 widget_instance* instance; |
5626 | 309 { |
310 if (instance->widget) | |
311 XtDestroyWidget (instance->widget); | |
312 } | |
313 | |
52401 | 314 /* arch-tag: 541e3912-477d-406e-9bf2-dbf2b7ff8c3b |
315 (do not change this comment) */ |