Mercurial > emacs
annotate lwlib/lwlib-Xlw.c @ 97350:f0689cd563e3
Merge from gnus--devo--0
Revision: emacs@sv.gnu.org/emacs--devo--0--patch-1372
author | Miles Bader <miles@gnu.org> |
---|---|
date | Thu, 07 Aug 2008 07:18:07 +0000 |
parents | a1c6fb73c033 |
children | 606f2d163a64 3c31d7653adf |
rev | line source |
---|---|
5626 | 1 /* The lwlib interface to "xlwmenu" menus. |
2 Copyright (C) 1992 Lucid, Inc. | |
64769
6358e3c6075c
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64083
diff
changeset
|
3 Copyright (C) 1994, 2000, 2001, 2002, 2003, 2004, |
79747 | 4 2005, 2006, 2007, 2008 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 |
51142
45a8df254788
Include lisp.h, not ../src/lisp.h.
Dave Love <fx@gnu.org>
parents:
49600
diff
changeset
|
27 #include "lisp.h" |
41767 | 28 |
5626 | 29 #include "lwlib-Xlw.h" |
30 #include <X11/StringDefs.h> | |
31 #include <X11/IntrinsicP.h> | |
32 #include <X11/ObjectP.h> | |
33 #include <X11/CompositeP.h> | |
34 #include <X11/Shell.h> | |
35 #include "xlwmenu.h" | |
36 | |
36955
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
37 #if 0 |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
38 |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
39 #include <stdio.h> |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
40 |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
41 /* 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
|
42 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
|
43 |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
44 void |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
45 x_print_complete_resource_name (widget) |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
46 Widget widget; |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
47 { |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
48 int i; |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
49 String names[100]; |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
50 |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
51 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
|
52 { |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
53 names[i] = XtName (widget); |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
54 widget = XtParent (widget); |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
55 } |
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 for (--i; i >= 1; --i) |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
58 fprintf (stderr, "%s.", names[i]); |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
59 fprintf (stderr, "%s\n", names[0]); |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
60 } |
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 #endif /* 0 */ |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
63 |
ebb6774c41db
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29892
diff
changeset
|
64 |
5626 | 65 /* Menu callbacks */ |
27334
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
66 |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
67 /* Callback XtNhighlightCallback for Lucid menus. W is the menu |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
68 widget, CLIENT_DATA contains a pointer to the widget_instance |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
69 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
|
70 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
|
71 if there isn't any highlighted menu item. */ |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
72 |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
73 static void |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
74 highlight_hook (w, client_data, call_data) |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
75 Widget w; |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
76 XtPointer client_data; |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
77 XtPointer call_data; |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
78 { |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
79 widget_instance *instance = (widget_instance *) client_data; |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
80 |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
81 if (instance->info->highlight_cb |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
82 && !w->core.being_destroyed) |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
83 instance->info->highlight_cb (w, instance->info->id, call_data); |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
84 } |
b0f7b611a20e
(highlight_hook): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
85 |
5626 | 86 static void |
75019
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
87 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
|
88 Widget w; |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
89 XtPointer client_data; |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
90 XtPointer call_data; |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
91 { |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
92 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
|
93 } |
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 static void |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
96 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
|
97 Widget w; |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
98 XtPointer client_data; |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
99 XtPointer call_data; |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
100 { |
6be52bf115d4
(enter_hook, leave_hook): New functions
Jan Djärv <jan.h.d@swipnet.se>
parents:
68640
diff
changeset
|
101 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
|
102 } |
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 static void |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
106 pre_hook (w, client_data, call_data) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
107 Widget w; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
108 XtPointer client_data; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
109 XtPointer call_data; |
5626 | 110 { |
111 widget_instance* instance = (widget_instance*)client_data; | |
112 widget_value* val; | |
113 | |
114 if (w->core.being_destroyed) | |
115 return; | |
116 | |
117 val = lw_get_widget_value_for_widget (instance, w); | |
118 if (instance->info->pre_activate_cb) | |
119 instance->info->pre_activate_cb (w, instance->info->id, | |
120 val ? val->call_data : NULL); | |
121 } | |
122 | |
123 static void | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
124 pick_hook (w, client_data, call_data) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
125 Widget w; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
126 XtPointer client_data; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
127 XtPointer call_data; |
5626 | 128 { |
129 widget_instance* instance = (widget_instance*)client_data; | |
130 widget_value* contents_val = (widget_value*)call_data; | |
131 widget_value* widget_val; | |
132 XtPointer widget_arg; | |
133 | |
134 if (w->core.being_destroyed) | |
135 return; | |
136 | |
137 if (instance->info->selection_cb && contents_val && contents_val->enabled | |
138 && !contents_val->contents) | |
139 instance->info->selection_cb (w, instance->info->id, | |
140 contents_val->call_data); | |
141 | |
142 widget_val = lw_get_widget_value_for_widget (instance, w); | |
143 widget_arg = widget_val ? widget_val->call_data : NULL; | |
144 if (instance->info->post_activate_cb) | |
145 instance->info->post_activate_cb (w, instance->info->id, widget_arg); | |
146 | |
147 } | |
148 | |
149 /* creation functions */ | |
5993
5feb28cb62c8
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5983
diff
changeset
|
150 |
5626 | 151 static Widget |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
152 xlw_create_menubar (instance) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
153 widget_instance* instance; |
5626 | 154 { |
5951
ddd8c555b2fc
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5708
diff
changeset
|
155 Widget widget; |
8786 | 156 Arg al[5]; |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
157 int ac = 0; |
5951
ddd8c555b2fc
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5708
diff
changeset
|
158 |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
159 XtSetArg (al[ac], XtNmenu, instance->info->val); ac++; |
8786 | 160 #ifdef emacs |
161 XtSetArg (al[ac], XtNshowGrip, 0); ac++; | |
162 XtSetArg (al[ac], XtNresizeToPreferred, 1); ac++; | |
163 XtSetArg (al[ac], XtNallowResize, 1); ac++; | |
164 #endif | |
5951
ddd8c555b2fc
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5708
diff
changeset
|
165 |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
166 /* This used to use XtVaCreateWidget, but an old Xt version |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
167 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
|
168 widget |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
169 = XtCreateWidget (instance->info->name, xlwMenuWidgetClass, |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
170 instance->parent, al, ac); |
5952
908e36c0235d
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5951
diff
changeset
|
171 |
5626 | 172 XtAddCallback (widget, XtNopen, pre_hook, (XtPointer)instance); |
173 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
|
174 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
|
175 XtAddCallback (widget, XtNenterCallback, enter_hook, (XtPointer)instance); |
5626 | 176 return widget; |
177 } | |
178 | |
179 static Widget | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
180 xlw_create_popup_menu (instance) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
181 widget_instance* instance; |
5626 | 182 { |
6009
f68004daa523
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5993
diff
changeset
|
183 Widget popup_shell |
f68004daa523
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5993
diff
changeset
|
184 = XtCreatePopupShell (instance->info->name, overrideShellWidgetClass, |
f68004daa523
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5993
diff
changeset
|
185 instance->parent, NULL, 0); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
41767
diff
changeset
|
186 |
5952
908e36c0235d
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5951
diff
changeset
|
187 Widget widget; |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
188 Arg al[2]; |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
189 int ac = 0; |
5952
908e36c0235d
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5951
diff
changeset
|
190 |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
191 XtSetArg (al[ac], XtNmenu, instance->info->val); ac++; |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
192 XtSetArg (al[ac], XtNhorizontal, False); ac++; |
5952
908e36c0235d
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5951
diff
changeset
|
193 |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
194 /* This used to use XtVaManagedCreateWidget, but an old Xt version |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
195 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
|
196 widget |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
197 = XtCreateManagedWidget ("popup", xlwMenuWidgetClass, |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
198 popup_shell, al, ac); |
5952
908e36c0235d
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5951
diff
changeset
|
199 |
5626 | 200 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
|
201 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
|
202 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
|
203 |
5626 | 204 return popup_shell; |
205 } | |
206 | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
41767
diff
changeset
|
207 widget_creation_entry |
5626 | 208 xlw_creation_table [] = |
209 { | |
210 {"menubar", xlw_create_menubar}, | |
211 {"popup", xlw_create_popup_menu}, | |
212 {NULL, NULL} | |
213 }; | |
214 | |
215 Boolean | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
216 lw_lucid_widget_p (widget) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
217 Widget widget; |
5626 | 218 { |
219 WidgetClass the_class = XtClass (widget); | |
6009
f68004daa523
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5993
diff
changeset
|
220 |
5626 | 221 if (the_class == xlwMenuWidgetClass) |
222 return True; | |
223 if (the_class == overrideShellWidgetClass) | |
6009
f68004daa523
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5993
diff
changeset
|
224 return (XtClass (((CompositeWidget)widget)->composite.children [0]) |
f68004daa523
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5993
diff
changeset
|
225 == xlwMenuWidgetClass); |
5626 | 226 return False; |
227 } | |
228 | |
229 void | |
51142
45a8df254788
Include lisp.h, not ../src/lisp.h.
Dave Love <fx@gnu.org>
parents:
49600
diff
changeset
|
230 #ifdef PROTOTYPES |
45a8df254788
Include lisp.h, not ../src/lisp.h.
Dave Love <fx@gnu.org>
parents:
49600
diff
changeset
|
231 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
|
232 widget_value* val, Boolean deep_p) |
45a8df254788
Include lisp.h, not ../src/lisp.h.
Dave Love <fx@gnu.org>
parents:
49600
diff
changeset
|
233 #else |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
234 xlw_update_one_widget (instance, widget, val, deep_p) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
235 widget_instance* instance; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
236 Widget widget; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
237 widget_value* val; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
238 Boolean deep_p; |
51142
45a8df254788
Include lisp.h, not ../src/lisp.h.
Dave Love <fx@gnu.org>
parents:
49600
diff
changeset
|
239 #endif |
5626 | 240 { |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
241 Arg al[1]; |
5626 | 242 |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
243 /* This used to use XtVaSetValues, but some old Xt versions |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
244 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
|
245 XtSetArg (al[0], XtNmenu, instance->info->val); |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
246 |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
247 XtSetValues (widget, al, 1); |
5626 | 248 } |
249 | |
250 void | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
251 xlw_update_one_value (instance, widget, val) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
252 widget_instance* instance; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
253 Widget widget; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
254 widget_value* val; |
5626 | 255 { |
256 return; | |
257 } | |
258 | |
259 void | |
51142
45a8df254788
Include lisp.h, not ../src/lisp.h.
Dave Love <fx@gnu.org>
parents:
49600
diff
changeset
|
260 #ifdef PROTOTYPES |
45a8df254788
Include lisp.h, not ../src/lisp.h.
Dave Love <fx@gnu.org>
parents:
49600
diff
changeset
|
261 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
|
262 #else |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
263 xlw_pop_instance (instance, up) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
264 widget_instance* instance; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
265 Boolean up; |
51142
45a8df254788
Include lisp.h, not ../src/lisp.h.
Dave Love <fx@gnu.org>
parents:
49600
diff
changeset
|
266 #endif |
5626 | 267 { |
268 } | |
269 | |
270 void | |
12745
4da8b8ac5211
(xlw_popup_menu): New arg event.
Richard M. Stallman <rms@gnu.org>
parents:
8786
diff
changeset
|
271 xlw_popup_menu (widget, event) |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
272 Widget widget; |
12745
4da8b8ac5211
(xlw_popup_menu): New arg event.
Richard M. Stallman <rms@gnu.org>
parents:
8786
diff
changeset
|
273 XEvent *event; |
5626 | 274 { |
275 XlwMenuWidget mw; | |
276 | |
277 if (!XtIsShell (widget)) | |
278 return; | |
279 | |
280 mw = (XlwMenuWidget)((CompositeWidget)widget)->composite.children [0]; | |
281 | |
12745
4da8b8ac5211
(xlw_popup_menu): New arg event.
Richard M. Stallman <rms@gnu.org>
parents:
8786
diff
changeset
|
282 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
|
283 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
|
284 else |
4da8b8ac5211
(xlw_popup_menu): New arg event.
Richard M. Stallman <rms@gnu.org>
parents:
8786
diff
changeset
|
285 { |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
286 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
|
287 XButtonPressedEvent *bd = &dummy.xbutton; |
5626 | 288 |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
289 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
|
290 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
|
291 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
|
292 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
|
293 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
|
294 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
|
295 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
|
296 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
|
297 &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
|
298 &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
|
299 |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
300 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
|
301 } |
5626 | 302 } |
303 | |
304 /* Destruction of instances */ | |
305 void | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
306 xlw_destroy_instance (instance) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
307 widget_instance* instance; |
5626 | 308 { |
309 if (instance->widget) | |
310 XtDestroyWidget (instance->widget); | |
311 } | |
312 | |
52401 | 313 /* arch-tag: 541e3912-477d-406e-9bf2-dbf2b7ff8c3b |
314 (do not change this comment) */ |