Mercurial > emacs
annotate lwlib/lwlib-Xm.c @ 55434:f88632e54afb
2004-05-08 John Wiegley <johnw@newartisans.com>
* iswitchb.el (iswitchb-use-virtual-buffers): Added support for
"virtual buffers" (off by default), which makes it possible to
switch to the buffers of recently files. When a buffer name
search fails, and this option is on, iswitchb will look at the
list of recently visited files, and permit matching against those
names. When the user hits RET on a match, it will revisit that
file.
(iswitchb-read-buffer): Added two optional arguments, which makes
isearchb.el possible.
(iswitchb-completions, iswitchb-set-matches, iswitchb-prev-match,
iswitchb-next-match): Added support for virtual buffers.
author | John Wiegley <johnw@newartisans.com> |
---|---|
date | Sat, 08 May 2004 13:00:52 +0000 |
parents | 609ef1718642 |
children | 68d57432d36d |
rev | line source |
---|---|
5626 | 1 /* The lwlib interface to Motif widgets. |
2 Copyright (C) 1992 Lucid, Inc. | |
3 | |
4 This file is part of the Lucid Widget Library. | |
5 | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
6 The Lucid Widget Library is free software; you can redistribute it and/or |
5626 | 7 modify it under the terms of the GNU General Public License as published by |
8 the Free Software Foundation; either version 1, or (at your option) | |
9 any later version. | |
10 | |
11 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:
49460
diff
changeset
|
12 but WITHOUT ANY WARRANTY; without even the implied warranty of |
5626 | 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
14 GNU General Public License for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
17 along with GNU Emacs; see the file COPYING. If not, write to | |
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
14018
diff
changeset
|
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
14018
diff
changeset
|
19 Boston, MA 02111-1307, USA. */ |
5626 | 20 |
26087
e0d966fb548f
Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents:
25885
diff
changeset
|
21 #ifdef HAVE_CONFIG_H |
e0d966fb548f
Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents:
25885
diff
changeset
|
22 #include <config.h> |
e0d966fb548f
Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents:
25885
diff
changeset
|
23 #endif |
e0d966fb548f
Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents:
25885
diff
changeset
|
24 |
5626 | 25 #include <unistd.h> |
26 #include <stdio.h> | |
27 | |
28 #include <X11/StringDefs.h> | |
29 #include <X11/IntrinsicP.h> | |
30 #include <X11/ObjectP.h> | |
31 #include <X11/CoreP.h> | |
32 #include <X11/CompositeP.h> | |
33 | |
41767 | 34 #include "../src/lisp.h" |
35 | |
5626 | 36 #include "lwlib-Xm.h" |
37 #include "lwlib-utils.h" | |
38 | |
39 #include <Xm/BulletinB.h> | |
40 #include <Xm/CascadeB.h> | |
14931
0706926a11cb
(destroy_all_children): When freeing a cascade button, free its submenu too.
Richard M. Stallman <rms@gnu.org>
parents:
14877
diff
changeset
|
41 #include <Xm/CascadeBG.h> |
5626 | 42 #include <Xm/DrawingA.h> |
43 #include <Xm/FileSB.h> | |
44 #include <Xm/Label.h> | |
45 #include <Xm/List.h> | |
8784 | 46 #include <Xm/MainW.h> |
5626 | 47 #include <Xm/MenuShell.h> |
48 #include <Xm/MessageB.h> | |
8784 | 49 #include <Xm/PanedW.h> |
5626 | 50 #include <Xm/PushB.h> |
51 #include <Xm/PushBG.h> | |
52 #include <Xm/ArrowB.h> | |
53 #include <Xm/SelectioB.h> | |
54 #include <Xm/Text.h> | |
55 #include <Xm/TextF.h> | |
56 #include <Xm/ToggleB.h> | |
57 #include <Xm/ToggleBG.h> | |
58 #include <Xm/RowColumn.h> | |
59 #include <Xm/ScrolledW.h> | |
60 #include <Xm/Separator.h> | |
61 #include <Xm/DialogS.h> | |
62 #include <Xm/Form.h> | |
63 | |
44751 | 64 #undef P_ |
29467 | 65 #if defined __STDC__ || defined PROTOTYPES |
25037 | 66 #define P_(X) X |
67 #else | |
68 #define P_(X) () | |
69 #endif | |
5626 | 70 |
25037 | 71 enum do_call_type { pre_activate, selection, no_selection, post_activate }; |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
72 |
5626 | 73 |
74 /* Structures to keep destroyed instances */ | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
75 typedef struct _destroyed_instance |
5626 | 76 { |
77 char* name; | |
78 char* type; | |
79 Widget widget; | |
80 Widget parent; | |
81 Boolean pop_up_p; | |
82 struct _destroyed_instance* next; | |
83 } destroyed_instance; | |
84 | |
25037 | 85 static destroyed_instance *make_destroyed_instance P_ ((char *, char *, |
86 Widget, Widget, | |
87 Boolean)); | |
88 static void free_destroyed_instance P_ ((destroyed_instance*)); | |
89 Widget first_child P_ ((Widget)); | |
90 Boolean lw_motif_widget_p P_ ((Widget)); | |
91 static XmString resource_motif_string P_ ((Widget, char *)); | |
92 static void destroy_all_children P_ ((Widget, int)); | |
93 static void xm_update_label P_ ((widget_instance *, Widget, widget_value *)); | |
94 static void xm_update_list P_ ((widget_instance *, Widget, widget_value *)); | |
95 static void xm_update_pushbutton P_ ((widget_instance *, Widget, | |
96 widget_value *)); | |
97 static void xm_update_cascadebutton P_ ((widget_instance *, Widget, | |
98 widget_value *)); | |
99 static void xm_update_toggle P_ ((widget_instance *, Widget, widget_value *)); | |
100 static void xm_update_radiobox P_ ((widget_instance *, Widget, widget_value *)); | |
101 static void make_menu_in_widget P_ ((widget_instance *, Widget, | |
102 widget_value *, int)); | |
103 static void update_one_menu_entry P_ ((widget_instance *, Widget, | |
104 widget_value *, Boolean)); | |
105 static void xm_update_menu P_ ((widget_instance *, Widget, widget_value *, | |
106 Boolean)); | |
107 static void xm_update_text P_ ((widget_instance *, Widget, widget_value *)); | |
108 static void xm_update_text_field P_ ((widget_instance *, Widget, | |
109 widget_value *)); | |
110 void xm_update_one_value P_ ((widget_instance *, Widget, widget_value *)); | |
111 static void activate_button P_ ((Widget, XtPointer, XtPointer)); | |
112 static Widget make_dialog P_ ((char *, Widget, Boolean, char *, char *, | |
113 Boolean, Boolean, Boolean, int, int)); | |
114 static destroyed_instance* find_matching_instance P_ ((widget_instance*)); | |
115 static void mark_dead_instance_destroyed P_ ((Widget, XtPointer, XtPointer)); | |
116 static void recenter_widget P_ ((Widget)); | |
117 static Widget recycle_instance P_ ((destroyed_instance*)); | |
118 Widget xm_create_dialog P_ ((widget_instance*)); | |
119 static Widget make_menubar P_ ((widget_instance*)); | |
120 static void remove_grabs P_ ((Widget, XtPointer, XtPointer)); | |
121 static Widget make_popup_menu P_ ((widget_instance*)); | |
122 static Widget make_main P_ ((widget_instance*)); | |
123 void xm_destroy_instance P_ ((widget_instance*)); | |
124 void xm_popup_menu P_ ((Widget, XEvent *)); | |
125 static void set_min_dialog_size P_ ((Widget)); | |
126 static void do_call P_ ((Widget, XtPointer, enum do_call_type)); | |
127 static void xm_generic_callback P_ ((Widget, XtPointer, XtPointer)); | |
128 static void xm_nosel_callback P_ ((Widget, XtPointer, XtPointer)); | |
129 static void xm_pull_down_callback P_ ((Widget, XtPointer, XtPointer)); | |
130 static void xm_pop_down_callback P_ ((Widget, XtPointer, XtPointer)); | |
131 void xm_set_keyboard_focus P_ ((Widget, Widget)); | |
132 void xm_set_main_areas P_ ((Widget, Widget, Widget)); | |
133 static void xm_internal_update_other_instances P_ ((Widget, XtPointer, | |
134 XtPointer)); | |
27333
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
135 static void xm_arm_callback P_ ((Widget, XtPointer, XtPointer)); |
25037 | 136 |
137 #if 0 | |
138 void xm_update_one_widget P_ ((widget_instance *, Widget, widget_value *, | |
139 Boolean)); | |
140 void xm_pop_instance P_ ((widget_instance*, Boolean)); | |
141 void xm_manage_resizing P_ ((Widget, Boolean)); | |
142 #endif | |
143 | |
144 | |
36940
7e04c5d86fe6
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36782
diff
changeset
|
145 #if 0 |
7e04c5d86fe6
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36782
diff
changeset
|
146 |
7e04c5d86fe6
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36782
diff
changeset
|
147 /* Print the complete X resource name of widget WIDGET to stderr. |
7e04c5d86fe6
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36782
diff
changeset
|
148 This is sometimes handy to have available. */ |
7e04c5d86fe6
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36782
diff
changeset
|
149 |
7e04c5d86fe6
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36782
diff
changeset
|
150 void |
7e04c5d86fe6
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36782
diff
changeset
|
151 x_print_complete_resource_name (widget) |
7e04c5d86fe6
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36782
diff
changeset
|
152 Widget widget; |
7e04c5d86fe6
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36782
diff
changeset
|
153 { |
7e04c5d86fe6
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36782
diff
changeset
|
154 int i; |
7e04c5d86fe6
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36782
diff
changeset
|
155 String names[100]; |
7e04c5d86fe6
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36782
diff
changeset
|
156 |
7e04c5d86fe6
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36782
diff
changeset
|
157 for (i = 0; i < 100 && widget != NULL; ++i) |
7e04c5d86fe6
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36782
diff
changeset
|
158 { |
7e04c5d86fe6
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36782
diff
changeset
|
159 names[i] = XtName (widget); |
7e04c5d86fe6
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36782
diff
changeset
|
160 widget = XtParent (widget); |
7e04c5d86fe6
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36782
diff
changeset
|
161 } |
7e04c5d86fe6
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36782
diff
changeset
|
162 |
7e04c5d86fe6
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36782
diff
changeset
|
163 for (--i; i >= 1; --i) |
7e04c5d86fe6
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36782
diff
changeset
|
164 fprintf (stderr, "%s.", names[i]); |
7e04c5d86fe6
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36782
diff
changeset
|
165 fprintf (stderr, "%s\n", names[0]); |
7e04c5d86fe6
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36782
diff
changeset
|
166 } |
7e04c5d86fe6
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36782
diff
changeset
|
167 |
7e04c5d86fe6
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36782
diff
changeset
|
168 #endif /* 0 */ |
7e04c5d86fe6
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36782
diff
changeset
|
169 |
7e04c5d86fe6
(x_print_complete_resource_name) [0]: New function.
Gerd Moellmann <gerd@gnu.org>
parents:
36782
diff
changeset
|
170 |
27333
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
171 static destroyed_instance *all_destroyed_instances = NULL; |
5626 | 172 |
173 static destroyed_instance* | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
174 make_destroyed_instance (name, type, widget, parent, pop_up_p) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
175 char* name; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
176 char* type; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
177 Widget widget; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
178 Widget parent; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
179 Boolean pop_up_p; |
5626 | 180 { |
181 destroyed_instance* instance = | |
182 (destroyed_instance*)malloc (sizeof (destroyed_instance)); | |
8784 | 183 instance->name = safe_strdup (name); |
184 instance->type = safe_strdup (type); | |
5626 | 185 instance->widget = widget; |
186 instance->parent = parent; | |
187 instance->pop_up_p = pop_up_p; | |
188 instance->next = NULL; | |
189 return instance; | |
190 } | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
191 |
5626 | 192 static void |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
193 free_destroyed_instance (instance) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
194 destroyed_instance* instance; |
5626 | 195 { |
196 free (instance->name); | |
197 free (instance->type); | |
198 free (instance); | |
199 } | |
200 | |
201 /* motif utility functions */ | |
202 Widget | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
203 first_child (widget) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
204 Widget widget; |
5626 | 205 { |
206 return ((CompositeWidget)widget)->composite.children [0]; | |
207 } | |
208 | |
209 Boolean | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
210 lw_motif_widget_p (widget) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
211 Widget widget; |
5626 | 212 { |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
213 return |
5626 | 214 XtClass (widget) == xmDialogShellWidgetClass |
215 || XmIsPrimitive (widget) || XmIsManager (widget) || XmIsGadget (widget); | |
216 } | |
217 | |
218 static XmString | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
219 resource_motif_string (widget, name) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
220 Widget widget; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
221 char* name; |
5626 | 222 { |
223 XtResource resource; | |
224 XmString result = 0; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
225 |
5626 | 226 resource.resource_name = name; |
227 resource.resource_class = XmCXmString; | |
228 resource.resource_type = XmRXmString; | |
229 resource.resource_size = sizeof (XmString); | |
230 resource.resource_offset = 0; | |
231 resource.default_type = XtRImmediate; | |
232 resource.default_addr = 0; | |
233 | |
234 XtGetSubresources (widget, (XtPointer)&result, "dialogString", | |
235 "DialogString", &resource, 1, NULL, 0); | |
236 return result; | |
237 } | |
238 | |
14877
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
239 /* Destroy all of the children of WIDGET |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
240 starting with number FIRST_CHILD_TO_DESTROY. */ |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
241 |
5626 | 242 static void |
14877
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
243 destroy_all_children (widget, first_child_to_destroy) |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
244 Widget widget; |
14877
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
245 int first_child_to_destroy; |
5626 | 246 { |
247 Widget* children; | |
248 unsigned int number; | |
249 int i; | |
250 | |
251 children = XtCompositeChildren (widget, &number); | |
252 if (children) | |
253 { | |
14877
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
254 XtUnmanageChildren (children + first_child_to_destroy, |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
255 number - first_child_to_destroy); |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
256 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
257 /* Unmanage all children and destroy them. They will only be |
14877
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
258 really destroyed when we get out of DispatchEvent. */ |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
259 for (i = first_child_to_destroy; i < number; i++) |
14931
0706926a11cb
(destroy_all_children): When freeing a cascade button, free its submenu too.
Richard M. Stallman <rms@gnu.org>
parents:
14877
diff
changeset
|
260 { |
0706926a11cb
(destroy_all_children): When freeing a cascade button, free its submenu too.
Richard M. Stallman <rms@gnu.org>
parents:
14877
diff
changeset
|
261 Arg al[2]; |
0706926a11cb
(destroy_all_children): When freeing a cascade button, free its submenu too.
Richard M. Stallman <rms@gnu.org>
parents:
14877
diff
changeset
|
262 Widget submenu = 0; |
0706926a11cb
(destroy_all_children): When freeing a cascade button, free its submenu too.
Richard M. Stallman <rms@gnu.org>
parents:
14877
diff
changeset
|
263 /* Cascade buttons have submenus,and these submenus |
0706926a11cb
(destroy_all_children): When freeing a cascade button, free its submenu too.
Richard M. Stallman <rms@gnu.org>
parents:
14877
diff
changeset
|
264 need to be freed. But they are not included in |
0706926a11cb
(destroy_all_children): When freeing a cascade button, free its submenu too.
Richard M. Stallman <rms@gnu.org>
parents:
14877
diff
changeset
|
265 XtCompositeChildren. So get it out of the cascade button |
0706926a11cb
(destroy_all_children): When freeing a cascade button, free its submenu too.
Richard M. Stallman <rms@gnu.org>
parents:
14877
diff
changeset
|
266 and free it. If this child is not a cascade button, |
0706926a11cb
(destroy_all_children): When freeing a cascade button, free its submenu too.
Richard M. Stallman <rms@gnu.org>
parents:
14877
diff
changeset
|
267 then submenu should remain unchanged. */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
268 XtSetArg (al[0], XmNsubMenuId, &submenu); |
14931
0706926a11cb
(destroy_all_children): When freeing a cascade button, free its submenu too.
Richard M. Stallman <rms@gnu.org>
parents:
14877
diff
changeset
|
269 XtGetValues (children[i], al, 1); |
0706926a11cb
(destroy_all_children): When freeing a cascade button, free its submenu too.
Richard M. Stallman <rms@gnu.org>
parents:
14877
diff
changeset
|
270 if (submenu) |
49460
9f4069f735c6
lwlib-Xm.c: Fixed memory leak for menus.
Jan Djärv <jan.h.d@swipnet.se>
parents:
44751
diff
changeset
|
271 { |
9f4069f735c6
lwlib-Xm.c: Fixed memory leak for menus.
Jan Djärv <jan.h.d@swipnet.se>
parents:
44751
diff
changeset
|
272 destroy_all_children (submenu, 0); |
9f4069f735c6
lwlib-Xm.c: Fixed memory leak for menus.
Jan Djärv <jan.h.d@swipnet.se>
parents:
44751
diff
changeset
|
273 XtDestroyWidget (submenu); |
9f4069f735c6
lwlib-Xm.c: Fixed memory leak for menus.
Jan Djärv <jan.h.d@swipnet.se>
parents:
44751
diff
changeset
|
274 } |
14931
0706926a11cb
(destroy_all_children): When freeing a cascade button, free its submenu too.
Richard M. Stallman <rms@gnu.org>
parents:
14877
diff
changeset
|
275 XtDestroyWidget (children[i]); |
0706926a11cb
(destroy_all_children): When freeing a cascade button, free its submenu too.
Richard M. Stallman <rms@gnu.org>
parents:
14877
diff
changeset
|
276 } |
14877
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
277 |
5626 | 278 XtFree ((char *) children); |
279 } | |
280 } | |
281 | |
27333
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
282 |
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
283 |
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
284 /* Callback XmNarmCallback and XmNdisarmCallback for buttons in a |
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
285 menu. CLIENT_DATA contains a pointer to the widget_value |
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
286 corresponding to widget W. CALL_DATA contains a |
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
287 XmPushButtonCallbackStruct containing the reason why the callback |
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
288 is called. */ |
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
289 |
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
290 static void |
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
291 xm_arm_callback (w, client_data, call_data) |
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
292 Widget w; |
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
293 XtPointer client_data, call_data; |
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
294 { |
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
295 XmPushButtonCallbackStruct *cbs = (XmPushButtonCallbackStruct *) call_data; |
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
296 widget_value *wv = (widget_value *) client_data; |
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
297 widget_instance *instance; |
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
298 |
34335
8a6f81835a8d
(xm_arm_callback): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents:
34039
diff
changeset
|
299 /* Get the id of the menu bar or popup menu this widget is in. */ |
36440
c94bea694181
(xm_arm_callback): Don't compare widgets with `None',
Gerd Moellmann <gerd@gnu.org>
parents:
36437
diff
changeset
|
300 while (w != NULL) |
34335
8a6f81835a8d
(xm_arm_callback): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents:
34039
diff
changeset
|
301 { |
8a6f81835a8d
(xm_arm_callback): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents:
34039
diff
changeset
|
302 if (XmIsRowColumn (w)) |
8a6f81835a8d
(xm_arm_callback): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents:
34039
diff
changeset
|
303 { |
8a6f81835a8d
(xm_arm_callback): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents:
34039
diff
changeset
|
304 unsigned char type = 0xff; |
8a6f81835a8d
(xm_arm_callback): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents:
34039
diff
changeset
|
305 |
8a6f81835a8d
(xm_arm_callback): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents:
34039
diff
changeset
|
306 XtVaGetValues (w, XmNrowColumnType, &type, NULL); |
8a6f81835a8d
(xm_arm_callback): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents:
34039
diff
changeset
|
307 if (type == XmMENU_BAR || type == XmMENU_POPUP) |
8a6f81835a8d
(xm_arm_callback): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents:
34039
diff
changeset
|
308 break; |
8a6f81835a8d
(xm_arm_callback): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents:
34039
diff
changeset
|
309 } |
8a6f81835a8d
(xm_arm_callback): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents:
34039
diff
changeset
|
310 |
8a6f81835a8d
(xm_arm_callback): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents:
34039
diff
changeset
|
311 w = XtParent (w); |
8a6f81835a8d
(xm_arm_callback): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents:
34039
diff
changeset
|
312 } |
8a6f81835a8d
(xm_arm_callback): Fix last change.
Gerd Moellmann <gerd@gnu.org>
parents:
34039
diff
changeset
|
313 |
36440
c94bea694181
(xm_arm_callback): Don't compare widgets with `None',
Gerd Moellmann <gerd@gnu.org>
parents:
36437
diff
changeset
|
314 if (w != NULL) |
27333
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
315 { |
34039
88c42020e441
(xm_arm_callback): Handle case that W is null;
Gerd Moellmann <gerd@gnu.org>
parents:
30571
diff
changeset
|
316 instance = lw_get_widget_instance (w); |
88c42020e441
(xm_arm_callback): Handle case that W is null;
Gerd Moellmann <gerd@gnu.org>
parents:
30571
diff
changeset
|
317 if (instance && instance->info->highlight_cb) |
88c42020e441
(xm_arm_callback): Handle case that W is null;
Gerd Moellmann <gerd@gnu.org>
parents:
30571
diff
changeset
|
318 { |
88c42020e441
(xm_arm_callback): Handle case that W is null;
Gerd Moellmann <gerd@gnu.org>
parents:
30571
diff
changeset
|
319 call_data = cbs->reason == XmCR_DISARM ? NULL : wv; |
88c42020e441
(xm_arm_callback): Handle case that W is null;
Gerd Moellmann <gerd@gnu.org>
parents:
30571
diff
changeset
|
320 instance->info->highlight_cb (w, instance->info->id, call_data); |
88c42020e441
(xm_arm_callback): Handle case that W is null;
Gerd Moellmann <gerd@gnu.org>
parents:
30571
diff
changeset
|
321 } |
27333
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
322 } |
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
323 } |
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
324 |
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
325 |
25037 | 326 |
327 /* Update the label of widget WIDGET. WIDGET must be a Label widget | |
328 or a subclass of Label. WIDGET_INSTANCE is unused. VAL contains | |
329 the value to update. | |
330 | |
331 Menus: | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
332 |
25037 | 333 Emacs fills VAL->name with the text to display in the menu, and |
334 sets VAL->value to null. Function make_menu_in_widget creates | |
335 widgets with VAL->name as resource name. This works because the | |
336 Label widget uses its resource name for display if no | |
337 XmNlabelString is set. | |
338 | |
339 Dialogs: | |
340 | |
341 VAL->name is again set to the resource name, but VAL->value is | |
342 not null, and contains the label string to display. */ | |
343 | |
5626 | 344 static void |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
345 xm_update_label (instance, widget, val) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
346 widget_instance* instance; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
347 Widget widget; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
348 widget_value* val; |
5626 | 349 { |
350 XmString res_string = 0; | |
351 XmString built_string = 0; | |
352 XmString key_string = 0; | |
353 Arg al [256]; | |
354 int ac; | |
25037 | 355 |
5626 | 356 ac = 0; |
357 | |
358 if (val->value) | |
359 { | |
25037 | 360 /* A label string is specified, i.e. we are in a dialog. First |
361 see if it is overridden by something from the resource file. */ | |
5626 | 362 res_string = resource_motif_string (widget, val->value); |
363 | |
364 if (res_string) | |
365 { | |
366 XtSetArg (al [ac], XmNlabelString, res_string); ac++; | |
367 } | |
368 else | |
369 { | |
370 built_string = | |
371 XmStringCreateLtoR (val->value, XmSTRING_DEFAULT_CHARSET); | |
372 XtSetArg (al [ac], XmNlabelString, built_string); ac++; | |
373 } | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
374 |
5626 | 375 XtSetArg (al [ac], XmNlabelType, XmSTRING); ac++; |
376 } | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
377 |
5626 | 378 if (val->key) |
379 { | |
380 key_string = XmStringCreateLtoR (val->key, XmSTRING_DEFAULT_CHARSET); | |
381 XtSetArg (al [ac], XmNacceleratorText, key_string); ac++; | |
382 } | |
383 | |
384 if (ac) | |
385 XtSetValues (widget, al, ac); | |
386 | |
387 if (built_string) | |
388 XmStringFree (built_string); | |
389 | |
390 if (key_string) | |
391 XmStringFree (key_string); | |
392 } | |
393 | |
394 /* update of list */ | |
395 static void | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
396 xm_update_list (instance, widget, val) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
397 widget_instance* instance; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
398 Widget widget; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
399 widget_value* val; |
5626 | 400 { |
401 widget_value* cur; | |
402 int i; | |
403 XtRemoveAllCallbacks (widget, XmNsingleSelectionCallback); | |
404 XtAddCallback (widget, XmNsingleSelectionCallback, xm_generic_callback, | |
405 instance); | |
406 for (cur = val->contents, i = 0; cur; cur = cur->next) | |
407 if (cur->value) | |
408 { | |
409 XmString xmstr = XmStringCreate (cur->value, XmSTRING_DEFAULT_CHARSET); | |
410 i += 1; | |
411 XmListAddItem (widget, xmstr, 0); | |
412 if (cur->selected) | |
413 XmListSelectPos (widget, i, False); | |
414 XmStringFree (xmstr); | |
415 } | |
416 } | |
417 | |
418 /* update of buttons */ | |
419 static void | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
420 xm_update_pushbutton (instance, widget, val) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
421 widget_instance* instance; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
422 Widget widget; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
423 widget_value* val; |
5626 | 424 { |
30571 | 425 XtVaSetValues (widget, XmNalignment, XmALIGNMENT_CENTER, NULL); |
5626 | 426 XtRemoveAllCallbacks (widget, XmNactivateCallback); |
427 XtAddCallback (widget, XmNactivateCallback, xm_generic_callback, instance); | |
428 } | |
429 | |
430 static void | |
11862
10a973a88e87
(activate_button, xm_update_cascadebutton): Don't use prototype.
Karl Heuer <kwzh@gnu.org>
parents:
11435
diff
changeset
|
431 xm_update_cascadebutton (instance, widget, val) |
10a973a88e87
(activate_button, xm_update_cascadebutton): Don't use prototype.
Karl Heuer <kwzh@gnu.org>
parents:
11435
diff
changeset
|
432 widget_instance* instance; |
10a973a88e87
(activate_button, xm_update_cascadebutton): Don't use prototype.
Karl Heuer <kwzh@gnu.org>
parents:
11435
diff
changeset
|
433 Widget widget; |
10a973a88e87
(activate_button, xm_update_cascadebutton): Don't use prototype.
Karl Heuer <kwzh@gnu.org>
parents:
11435
diff
changeset
|
434 widget_value* val; |
5626 | 435 { |
436 /* Should also rebuild the menu by calling ...update_menu... */ | |
437 XtRemoveAllCallbacks (widget, XmNcascadingCallback); | |
438 XtAddCallback (widget, XmNcascadingCallback, xm_pull_down_callback, | |
439 instance); | |
440 } | |
441 | |
442 /* update toggle and radiobox */ | |
443 static void | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
444 xm_update_toggle (instance, widget, val) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
445 widget_instance* instance; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
446 Widget widget; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
447 widget_value* val; |
5626 | 448 { |
449 XtRemoveAllCallbacks (widget, XmNvalueChangedCallback); | |
450 XtAddCallback (widget, XmNvalueChangedCallback, | |
25037 | 451 xm_generic_callback, instance); |
5626 | 452 XtVaSetValues (widget, XmNset, val->selected, |
30571 | 453 XmNalignment, XmALIGNMENT_BEGINNING, NULL); |
5626 | 454 } |
455 | |
456 static void | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
457 xm_update_radiobox (instance, widget, val) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
458 widget_instance* instance; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
459 Widget widget; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
460 widget_value* val; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
461 |
5626 | 462 { |
463 Widget toggle; | |
464 widget_value* cur; | |
465 | |
466 /* update the callback */ | |
467 XtRemoveAllCallbacks (widget, XmNentryCallback); | |
468 XtAddCallback (widget, XmNentryCallback, xm_generic_callback, instance); | |
469 | |
470 /* first update all the toggles */ | |
471 /* Energize kernel interface is currently bad. It sets the selected widget | |
472 with the selected flag but returns it by its name. So we currently | |
473 have to support both setting the selection with the selected slot | |
474 of val contents and setting it with the "value" slot of val. The latter | |
475 has a higher priority. This to be removed when the kernel is fixed. */ | |
476 for (cur = val->contents; cur; cur = cur->next) | |
477 { | |
478 toggle = XtNameToWidget (widget, cur->value); | |
479 if (toggle) | |
480 { | |
36437
d45267642a42
(xm_update_radiobox, update_one_menu_entry)
Gerd Moellmann <gerd@gnu.org>
parents:
34335
diff
changeset
|
481 XtSetSensitive (toggle, cur->enabled); |
5626 | 482 if (!val->value && cur->selected) |
30571 | 483 XtVaSetValues (toggle, XmNset, cur->selected, NULL); |
5626 | 484 if (val->value && strcmp (val->value, cur->value)) |
30571 | 485 XtVaSetValues (toggle, XmNset, False, NULL); |
5626 | 486 } |
487 } | |
488 | |
489 /* The selected was specified by the value slot */ | |
490 if (val->value) | |
491 { | |
492 toggle = XtNameToWidget (widget, val->value); | |
493 if (toggle) | |
30571 | 494 XtVaSetValues (toggle, XmNset, True, NULL); |
5626 | 495 } |
496 } | |
497 | |
25037 | 498 |
499 /* update a popup menu, pulldown menu or a menubar */ | |
5626 | 500 |
14877
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
501 /* KEEP_FIRST_CHILDREN gives the number of initial children to keep. */ |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
502 |
5626 | 503 static void |
14877
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
504 make_menu_in_widget (instance, widget, val, keep_first_children) |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
505 widget_instance* instance; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
506 Widget widget; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
507 widget_value* val; |
14877
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
508 int keep_first_children; |
5626 | 509 { |
510 Widget* children = 0; | |
511 int num_children; | |
512 int child_index; | |
513 widget_value* cur; | |
514 Widget button = 0; | |
25037 | 515 Widget title = 0; |
5626 | 516 Widget menu; |
517 Arg al [256]; | |
518 int ac; | |
519 Boolean menubar_p; | |
25037 | 520 unsigned char type; |
5626 | 521 |
14877
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
522 Widget* old_children; |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
523 unsigned int old_num_children; |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
524 |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
525 old_children = XtCompositeChildren (widget, &old_num_children); |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
526 |
5626 | 527 /* Allocate the children array */ |
36782
2f7bd108e82f
(make_menu_in_widget): Remove code forcing LessTif to
Gerd Moellmann <gerd@gnu.org>
parents:
36780
diff
changeset
|
528 for (num_children = 0, cur = val; cur; num_children++, cur = cur->next) |
2f7bd108e82f
(make_menu_in_widget): Remove code forcing LessTif to
Gerd Moellmann <gerd@gnu.org>
parents:
36780
diff
changeset
|
529 ; |
5626 | 530 children = (Widget*)XtMalloc (num_children * sizeof (Widget)); |
531 | |
25037 | 532 /* WIDGET should be a RowColumn. */ |
533 if (!XmIsRowColumn (widget)) | |
534 abort (); | |
535 | |
536 /* Determine whether WIDGET is a menu bar. */ | |
537 type = -1; | |
538 XtSetArg (al[0], XmNrowColumnType, &type); | |
5626 | 539 XtGetValues (widget, al, 1); |
25037 | 540 if (type != XmMENU_BAR && type != XmMENU_PULLDOWN && type != XmMENU_POPUP) |
541 abort (); | |
542 menubar_p = type == XmMENU_BAR; | |
5626 | 543 |
25037 | 544 /* Add a callback to popups and pulldowns that is called when |
545 it is made invisible again. */ | |
5626 | 546 if (!menubar_p) |
547 XtAddCallback (XtParent (widget), XmNpopdownCallback, | |
548 xm_pop_down_callback, (XtPointer)instance); | |
549 | |
14877
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
550 /* Preserve the first KEEP_FIRST_CHILDREN old children. */ |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
551 for (child_index = 0, cur = val; child_index < keep_first_children; |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
552 child_index++, cur = cur->next) |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
553 children[child_index] = old_children[child_index]; |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
554 |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
555 /* Check that those are all we have |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
556 (the caller should have deleted the rest). */ |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
557 if (old_num_children != keep_first_children) |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
558 abort (); |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
559 |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
560 /* Create the rest. */ |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
561 for (child_index = keep_first_children; cur; child_index++, cur = cur->next) |
25037 | 562 { |
563 enum menu_separator separator; | |
564 | |
5626 | 565 ac = 0; |
25037 | 566 XtSetArg (al[ac], XmNsensitive, cur->enabled); ac++; |
567 XtSetArg (al[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++; | |
568 XtSetArg (al[ac], XmNuserData, cur->call_data); ac++; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
569 |
9835
d2250d1b0f48
(make_menu_in_widget): Differentiate a separator entry ("--") from a
Paul Reilly <pmr@pajato.com>
parents:
9825
diff
changeset
|
570 if (instance->pop_up_p && !cur->contents && !cur->call_data |
25037 | 571 && !lw_separator_p (cur->name, &separator, 1)) |
9224
b4563001d783
(make_menu_in_widget): Add support for displaying a title in pop up
Paul Reilly <pmr@pajato.com>
parents:
8884
diff
changeset
|
572 { |
b4563001d783
(make_menu_in_widget): Add support for displaying a title in pop up
Paul Reilly <pmr@pajato.com>
parents:
8884
diff
changeset
|
573 ac = 0; |
b4563001d783
(make_menu_in_widget): Add support for displaying a title in pop up
Paul Reilly <pmr@pajato.com>
parents:
8884
diff
changeset
|
574 XtSetArg (al[ac], XmNalignment, XmALIGNMENT_CENTER); ac++; |
25037 | 575 title = button = XmCreateLabel (widget, cur->name, al, ac); |
9224
b4563001d783
(make_menu_in_widget): Add support for displaying a title in pop up
Paul Reilly <pmr@pajato.com>
parents:
8884
diff
changeset
|
576 } |
25037 | 577 else if (lw_separator_p (cur->name, &separator, 1)) |
5626 | 578 { |
25037 | 579 ac = 0; |
580 XtSetArg (al[ac], XmNseparatorType, separator); ++ac; | |
581 button = XmCreateSeparator (widget, cur->name, al, ac); | |
5626 | 582 } |
583 else if (!cur->contents) | |
584 { | |
585 if (menubar_p) | |
586 button = XmCreateCascadeButton (widget, cur->name, al, ac); | |
587 else if (!cur->call_data) | |
588 button = XmCreateLabel (widget, cur->name, al, ac); | |
25037 | 589 else if (cur->button_type == BUTTON_TYPE_TOGGLE |
590 || cur->button_type == BUTTON_TYPE_RADIO) | |
591 { | |
592 XtSetArg (al[ac], XmNset, cur->selected); ++ac; | |
593 XtSetArg (al[ac], XmNvisibleWhenOff, True); ++ac; | |
594 XtSetArg (al[ac], XmNindicatorType, | |
595 (cur->button_type == BUTTON_TYPE_TOGGLE | |
596 ? XmN_OF_MANY : XmONE_OF_MANY)); | |
597 ++ac; | |
25885
6a0fe1278e4d
(make_menu_in_widget, update_one_menu_entry): Use
Gerd Moellmann <gerd@gnu.org>
parents:
25037
diff
changeset
|
598 button = XmCreateToggleButton (widget, cur->name, al, ac); |
27333
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
599 XtAddCallback (button, XmNarmCallback, xm_arm_callback, cur); |
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
600 XtAddCallback (button, XmNdisarmCallback, xm_arm_callback, cur); |
25037 | 601 } |
5626 | 602 else |
27333
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
603 { |
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
604 button = XmCreatePushButton (widget, cur->name, al, ac); |
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
605 XtAddCallback (button, XmNarmCallback, xm_arm_callback, cur); |
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
606 XtAddCallback (button, XmNdisarmCallback, xm_arm_callback, cur); |
a5bceda5d689
(xm_arm_callback): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
607 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
608 |
5626 | 609 xm_update_label (instance, button, cur); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
610 |
25037 | 611 /* Add a callback that is called when the button is |
612 selected. Toggle buttons don't support | |
613 XmNactivateCallback, we use XmNvalueChangedCallback in | |
614 that case. Don't add a callback to a simple label. */ | |
615 if (cur->button_type) | |
616 xm_update_toggle (instance, button, cur); | |
617 else if (cur->call_data) | |
5626 | 618 XtAddCallback (button, XmNactivateCallback, xm_generic_callback, |
619 (XtPointer)instance); | |
620 } | |
621 else | |
622 { | |
11435
efaaecd960ae
(update_one_menu_entry, make_menu_in_widget):
Richard M. Stallman <rms@gnu.org>
parents:
11299
diff
changeset
|
623 menu = XmCreatePulldownMenu (widget, cur->name, NULL, 0); |
27422
5c5bb4b1ff45
(make_menu_in_widget): Don't add XmNpopdownCallback,
Gerd Moellmann <gerd@gnu.org>
parents:
27345
diff
changeset
|
624 |
14877
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
625 make_menu_in_widget (instance, menu, cur->contents, 0); |
27422
5c5bb4b1ff45
(make_menu_in_widget): Don't add XmNpopdownCallback,
Gerd Moellmann <gerd@gnu.org>
parents:
27345
diff
changeset
|
626 XtSetArg (al[ac], XmNsubMenuId, menu); ac++; |
25885
6a0fe1278e4d
(make_menu_in_widget, update_one_menu_entry): Use
Gerd Moellmann <gerd@gnu.org>
parents:
25037
diff
changeset
|
627 button = XmCreateCascadeButton (widget, cur->name, al, ac); |
5626 | 628 |
629 xm_update_label (instance, button, cur); | |
630 | |
631 XtAddCallback (button, XmNcascadingCallback, xm_pull_down_callback, | |
632 (XtPointer)instance); | |
633 } | |
634 | |
25037 | 635 children[child_index] = button; |
5626 | 636 } |
637 | |
25037 | 638 /* Last entry is the help button. The original comment read "Has to |
639 be done after managing the buttons otherwise the menubar is only | |
640 4 pixels high." This is no longer true, and to make | |
641 XmNmenuHelpWidget work, we need to set it before managing the | |
642 children.. --gerd. */ | |
5626 | 643 if (button) |
30571 | 644 XtVaSetValues (widget, XmNmenuHelpWidget, button, NULL); |
25037 | 645 |
646 if (num_children) | |
647 XtManageChildren (children, num_children); | |
5626 | 648 |
649 XtFree ((char *) children); | |
14877
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
650 if (old_children) |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
651 XtFree ((char *) old_children); |
5626 | 652 } |
653 | |
654 static void | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
655 update_one_menu_entry (instance, widget, val, deep_p) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
656 widget_instance* instance; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
657 Widget widget; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
658 widget_value* val; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
659 Boolean deep_p; |
5626 | 660 { |
661 Arg al [256]; | |
662 int ac; | |
663 Widget menu; | |
664 widget_value* contents; | |
665 | |
14877
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
666 if (val->this_one_change == NO_CHANGE) |
5626 | 667 return; |
668 | |
669 /* update the sensitivity and userdata */ | |
670 /* Common to all widget types */ | |
36437
d45267642a42
(xm_update_radiobox, update_one_menu_entry)
Gerd Moellmann <gerd@gnu.org>
parents:
34335
diff
changeset
|
671 XtSetSensitive (widget, val->enabled); |
d45267642a42
(xm_update_radiobox, update_one_menu_entry)
Gerd Moellmann <gerd@gnu.org>
parents:
34335
diff
changeset
|
672 XtVaSetValues (widget, XmNuserData, val->call_data, NULL); |
5626 | 673 |
674 /* update the menu button as a label. */ | |
14877
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
675 if (val->this_one_change >= VISIBLE_CHANGE) |
25037 | 676 { |
677 xm_update_label (instance, widget, val); | |
678 if (val->button_type) | |
679 xm_update_toggle (instance, widget, val); | |
680 } | |
5626 | 681 |
682 /* update the pulldown/pullaside as needed */ | |
683 ac = 0; | |
684 menu = NULL; | |
685 XtSetArg (al [ac], XmNsubMenuId, &menu); ac++; | |
686 XtGetValues (widget, al, ac); | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
687 |
5626 | 688 contents = val->contents; |
689 | |
690 if (!menu) | |
691 { | |
692 if (contents) | |
693 { | |
15853
1ca5c3c9853a
(update_one_menu_entry): When creating a pulldown
Richard M. Stallman <rms@gnu.org>
parents:
15816
diff
changeset
|
694 unsigned int old_num_children, i; |
15859
2cb422e2d16c
(update_one_menu_entry): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents:
15853
diff
changeset
|
695 Widget parent; |
15853
1ca5c3c9853a
(update_one_menu_entry): When creating a pulldown
Richard M. Stallman <rms@gnu.org>
parents:
15816
diff
changeset
|
696 Widget *widget_list; |
1ca5c3c9853a
(update_one_menu_entry): When creating a pulldown
Richard M. Stallman <rms@gnu.org>
parents:
15816
diff
changeset
|
697 |
1ca5c3c9853a
(update_one_menu_entry): When creating a pulldown
Richard M. Stallman <rms@gnu.org>
parents:
15816
diff
changeset
|
698 parent = XtParent (widget); |
1ca5c3c9853a
(update_one_menu_entry): When creating a pulldown
Richard M. Stallman <rms@gnu.org>
parents:
15816
diff
changeset
|
699 widget_list = XtCompositeChildren (parent, &old_num_children); |
1ca5c3c9853a
(update_one_menu_entry): When creating a pulldown
Richard M. Stallman <rms@gnu.org>
parents:
15816
diff
changeset
|
700 |
1ca5c3c9853a
(update_one_menu_entry): When creating a pulldown
Richard M. Stallman <rms@gnu.org>
parents:
15816
diff
changeset
|
701 /* Find the widget position within the parent's widget list. */ |
1ca5c3c9853a
(update_one_menu_entry): When creating a pulldown
Richard M. Stallman <rms@gnu.org>
parents:
15816
diff
changeset
|
702 for (i = 0; i < old_num_children; i++) |
1ca5c3c9853a
(update_one_menu_entry): When creating a pulldown
Richard M. Stallman <rms@gnu.org>
parents:
15816
diff
changeset
|
703 if (strcmp (XtName (widget_list[i]), XtName (widget)) == 0) |
1ca5c3c9853a
(update_one_menu_entry): When creating a pulldown
Richard M. Stallman <rms@gnu.org>
parents:
15816
diff
changeset
|
704 break; |
1ca5c3c9853a
(update_one_menu_entry): When creating a pulldown
Richard M. Stallman <rms@gnu.org>
parents:
15816
diff
changeset
|
705 if (i == old_num_children) |
1ca5c3c9853a
(update_one_menu_entry): When creating a pulldown
Richard M. Stallman <rms@gnu.org>
parents:
15816
diff
changeset
|
706 abort (); |
15859
2cb422e2d16c
(update_one_menu_entry): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents:
15853
diff
changeset
|
707 if (XmIsCascadeButton (widget_list[i])) |
2cb422e2d16c
(update_one_menu_entry): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents:
15853
diff
changeset
|
708 { |
2cb422e2d16c
(update_one_menu_entry): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents:
15853
diff
changeset
|
709 menu = XmCreatePulldownMenu (parent, XtName(widget), NULL, 0); |
2cb422e2d16c
(update_one_menu_entry): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents:
15853
diff
changeset
|
710 make_menu_in_widget (instance, menu, contents, 0); |
2cb422e2d16c
(update_one_menu_entry): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents:
15853
diff
changeset
|
711 ac = 0; |
2cb422e2d16c
(update_one_menu_entry): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents:
15853
diff
changeset
|
712 XtSetArg (al [ac], XmNsubMenuId, menu); ac++; |
2cb422e2d16c
(update_one_menu_entry): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents:
15853
diff
changeset
|
713 XtSetValues (widget, al, ac); |
2cb422e2d16c
(update_one_menu_entry): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents:
15853
diff
changeset
|
714 } |
2cb422e2d16c
(update_one_menu_entry): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents:
15853
diff
changeset
|
715 else |
2cb422e2d16c
(update_one_menu_entry): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents:
15853
diff
changeset
|
716 { |
2cb422e2d16c
(update_one_menu_entry): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents:
15853
diff
changeset
|
717 Widget button; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
718 |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
719 /* The current menuitem is a XmPushButtonGadget, it |
15859
2cb422e2d16c
(update_one_menu_entry): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents:
15853
diff
changeset
|
720 needs to be replaced by a CascadeButtonGadget */ |
2cb422e2d16c
(update_one_menu_entry): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents:
15853
diff
changeset
|
721 XtDestroyWidget (widget_list[i]); |
2cb422e2d16c
(update_one_menu_entry): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents:
15853
diff
changeset
|
722 menu = XmCreatePulldownMenu (parent, val->name, NULL, 0); |
2cb422e2d16c
(update_one_menu_entry): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents:
15853
diff
changeset
|
723 make_menu_in_widget (instance, menu, contents, 0); |
2cb422e2d16c
(update_one_menu_entry): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents:
15853
diff
changeset
|
724 ac = 0; |
2cb422e2d16c
(update_one_menu_entry): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents:
15853
diff
changeset
|
725 XtSetArg (al [ac], XmNsubMenuId, menu); ac++; |
2cb422e2d16c
(update_one_menu_entry): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents:
15853
diff
changeset
|
726 /* Non-zero values don't work reliably in |
2cb422e2d16c
(update_one_menu_entry): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents:
15853
diff
changeset
|
727 conjunction with Emacs' event loop */ |
2cb422e2d16c
(update_one_menu_entry): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents:
15853
diff
changeset
|
728 XtSetArg (al [ac], XmNmappingDelay, 0); ac++; |
20471
d4e514328333
(update_one_menu_entry): Add conditional in case XmNpositionIndex is missing.
Richard M. Stallman <rms@gnu.org>
parents:
15859
diff
changeset
|
729 #ifdef XmNpositionIndex /* This is undefined on SCO ODT 2.0. */ |
15859
2cb422e2d16c
(update_one_menu_entry): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents:
15853
diff
changeset
|
730 /* Tell Motif to put it in the right place */ |
20471
d4e514328333
(update_one_menu_entry): Add conditional in case XmNpositionIndex is missing.
Richard M. Stallman <rms@gnu.org>
parents:
15859
diff
changeset
|
731 XtSetArg (al [ac], XmNpositionIndex , i); ac++; |
d4e514328333
(update_one_menu_entry): Add conditional in case XmNpositionIndex is missing.
Richard M. Stallman <rms@gnu.org>
parents:
15859
diff
changeset
|
732 #endif |
25885
6a0fe1278e4d
(make_menu_in_widget, update_one_menu_entry): Use
Gerd Moellmann <gerd@gnu.org>
parents:
25037
diff
changeset
|
733 button = XmCreateCascadeButton (parent, val->name, al, ac); |
15859
2cb422e2d16c
(update_one_menu_entry): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents:
15853
diff
changeset
|
734 xm_update_label (instance, button, val); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
735 |
15859
2cb422e2d16c
(update_one_menu_entry): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents:
15853
diff
changeset
|
736 XtAddCallback (button, XmNcascadingCallback, xm_pull_down_callback, |
2cb422e2d16c
(update_one_menu_entry): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents:
15853
diff
changeset
|
737 (XtPointer)instance); |
2cb422e2d16c
(update_one_menu_entry): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents:
15853
diff
changeset
|
738 XtManageChild (button); |
2cb422e2d16c
(update_one_menu_entry): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents:
15853
diff
changeset
|
739 } |
49460
9f4069f735c6
lwlib-Xm.c: Fixed memory leak for menus.
Jan Djärv <jan.h.d@swipnet.se>
parents:
44751
diff
changeset
|
740 |
9f4069f735c6
lwlib-Xm.c: Fixed memory leak for menus.
Jan Djärv <jan.h.d@swipnet.se>
parents:
44751
diff
changeset
|
741 if (widget_list) |
9f4069f735c6
lwlib-Xm.c: Fixed memory leak for menus.
Jan Djärv <jan.h.d@swipnet.se>
parents:
44751
diff
changeset
|
742 XtFree ((char*) widget_list); |
5626 | 743 } |
744 } | |
745 else if (!contents) | |
746 { | |
747 ac = 0; | |
748 XtSetArg (al [ac], XmNsubMenuId, NULL); ac++; | |
749 XtSetValues (widget, al, ac); | |
750 XtDestroyWidget (menu); | |
751 } | |
752 else if (deep_p && contents->change != NO_CHANGE) | |
753 xm_update_menu (instance, menu, val, 1); | |
754 } | |
755 | |
756 static void | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
757 xm_update_menu (instance, widget, val, deep_p) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
758 widget_instance* instance; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
759 Widget widget; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
760 widget_value* val; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
761 Boolean deep_p; |
5626 | 762 { |
14877
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
763 Widget* children; |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
764 unsigned int num_children; |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
765 int num_children_to_keep = 0; |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
766 int i; |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
767 widget_value* cur; |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
768 |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
769 children = XtCompositeChildren (widget, &num_children); |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
770 |
5626 | 771 /* Widget is a RowColumn widget whose contents have to be updated |
772 * to reflect the list of items in val->contents */ | |
14877
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
773 |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
774 /* See how many buttons we can keep, and how many we |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
775 must completely replace. */ |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
776 if (val->contents == 0) |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
777 num_children_to_keep = 0; |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
778 else if (val->contents->change == STRUCTURAL_CHANGE) |
5626 | 779 { |
14877
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
780 if (children) |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
781 { |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
782 for (i = 0, cur = val->contents; |
15665
432750098147
(xm_update_menu): Fix loop termination test.
Karl Heuer <kwzh@gnu.org>
parents:
15630
diff
changeset
|
783 (i < num_children |
432750098147
(xm_update_menu): Fix loop termination test.
Karl Heuer <kwzh@gnu.org>
parents:
15630
diff
changeset
|
784 && cur); /* how else to ditch unwanted children ?? - mgd */ |
14877
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
785 i++, cur = cur->next) |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
786 { |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
787 if (cur->this_one_change == STRUCTURAL_CHANGE) |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
788 break; |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
789 } |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
790 |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
791 num_children_to_keep = i; |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
792 } |
5626 | 793 } |
794 else | |
14877
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
795 num_children_to_keep = num_children; |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
796 |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
797 /* Update all the buttons of the RowColumn, in order, |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
798 except for those we are going to replace entirely. */ |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
799 if (children) |
5626 | 800 { |
14877
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
801 for (i = 0, cur = val->contents; i < num_children_to_keep; i++) |
5626 | 802 { |
14877
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
803 if (!cur) |
15853
1ca5c3c9853a
(update_one_menu_entry): When creating a pulldown
Richard M. Stallman <rms@gnu.org>
parents:
15816
diff
changeset
|
804 { |
1ca5c3c9853a
(update_one_menu_entry): When creating a pulldown
Richard M. Stallman <rms@gnu.org>
parents:
15816
diff
changeset
|
805 num_children_to_keep = i; |
1ca5c3c9853a
(update_one_menu_entry): When creating a pulldown
Richard M. Stallman <rms@gnu.org>
parents:
15816
diff
changeset
|
806 break; |
1ca5c3c9853a
(update_one_menu_entry): When creating a pulldown
Richard M. Stallman <rms@gnu.org>
parents:
15816
diff
changeset
|
807 } |
14877
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
808 if (children [i]->core.being_destroyed |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
809 || strcmp (XtName (children [i]), cur->name)) |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
810 continue; |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
811 update_one_menu_entry (instance, children [i], cur, deep_p); |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
812 cur = cur->next; |
5626 | 813 } |
814 } | |
14877
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
815 |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
816 /* Now replace from scratch all the buttons after the last |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
817 place that the top-level structure changed. */ |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
818 if (val->contents->change == STRUCTURAL_CHANGE) |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
819 { |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
820 destroy_all_children (widget, num_children_to_keep); |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
821 make_menu_in_widget (instance, widget, val->contents, |
49460
9f4069f735c6
lwlib-Xm.c: Fixed memory leak for menus.
Jan Djärv <jan.h.d@swipnet.se>
parents:
44751
diff
changeset
|
822 num_children_to_keep); |
14877
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
823 } |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
824 |
62fc4d7a846f
(destroy_all_children): New arg first_child_to_destroy.
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
825 XtFree ((char *) children); |
5626 | 826 } |
827 | |
828 | |
829 /* update text widgets */ | |
830 | |
831 static void | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
832 xm_update_text (instance, widget, val) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
833 widget_instance* instance; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
834 Widget widget; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
835 widget_value* val; |
5626 | 836 { |
837 XmTextSetString (widget, val->value ? val->value : ""); | |
838 XtRemoveAllCallbacks (widget, XmNactivateCallback); | |
839 XtAddCallback (widget, XmNactivateCallback, xm_generic_callback, instance); | |
840 XtRemoveAllCallbacks (widget, XmNvalueChangedCallback); | |
841 XtAddCallback (widget, XmNvalueChangedCallback, | |
842 xm_internal_update_other_instances, instance); | |
843 } | |
844 | |
845 static void | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
846 xm_update_text_field (instance, widget, val) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
847 widget_instance* instance; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
848 Widget widget; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
849 widget_value* val; |
5626 | 850 { |
851 XmTextFieldSetString (widget, val->value ? val->value : ""); | |
852 XtRemoveAllCallbacks (widget, XmNactivateCallback); | |
853 XtAddCallback (widget, XmNactivateCallback, xm_generic_callback, instance); | |
854 XtRemoveAllCallbacks (widget, XmNvalueChangedCallback); | |
855 XtAddCallback (widget, XmNvalueChangedCallback, | |
856 xm_internal_update_other_instances, instance); | |
857 } | |
858 | |
859 | |
860 /* update a motif widget */ | |
861 | |
862 void | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
863 xm_update_one_widget (instance, widget, val, deep_p) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
864 widget_instance* instance; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
865 Widget widget; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
866 widget_value* val; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
867 Boolean deep_p; |
5626 | 868 { |
869 WidgetClass class; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
870 |
5626 | 871 /* Mark as not edited */ |
872 val->edited = False; | |
873 | |
874 /* Common to all widget types */ | |
36437
d45267642a42
(xm_update_radiobox, update_one_menu_entry)
Gerd Moellmann <gerd@gnu.org>
parents:
34335
diff
changeset
|
875 XtSetSensitive (widget, val->enabled); |
d45267642a42
(xm_update_radiobox, update_one_menu_entry)
Gerd Moellmann <gerd@gnu.org>
parents:
34335
diff
changeset
|
876 XtVaSetValues (widget, XmNuserData, val->call_data, NULL); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
877 |
5626 | 878 /* Common to all label like widgets */ |
879 if (XtIsSubclass (widget, xmLabelWidgetClass)) | |
880 xm_update_label (instance, widget, val); | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
881 |
5626 | 882 class = XtClass (widget); |
883 /* Class specific things */ | |
884 if (class == xmPushButtonWidgetClass || | |
885 class == xmArrowButtonWidgetClass) | |
886 { | |
887 xm_update_pushbutton (instance, widget, val); | |
888 } | |
889 else if (class == xmCascadeButtonWidgetClass) | |
890 { | |
891 xm_update_cascadebutton (instance, widget, val); | |
892 } | |
893 else if (class == xmToggleButtonWidgetClass | |
894 || class == xmToggleButtonGadgetClass) | |
895 { | |
896 xm_update_toggle (instance, widget, val); | |
897 } | |
898 else if (class == xmRowColumnWidgetClass) | |
899 { | |
900 Boolean radiobox = 0; | |
901 int ac = 0; | |
902 Arg al [1]; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
903 |
5626 | 904 XtSetArg (al [ac], XmNradioBehavior, &radiobox); ac++; |
905 XtGetValues (widget, al, ac); | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
906 |
5626 | 907 if (radiobox) |
908 xm_update_radiobox (instance, widget, val); | |
909 else | |
910 xm_update_menu (instance, widget, val, deep_p); | |
911 } | |
912 else if (class == xmTextWidgetClass) | |
913 { | |
914 xm_update_text (instance, widget, val); | |
915 } | |
916 else if (class == xmTextFieldWidgetClass) | |
917 { | |
918 xm_update_text_field (instance, widget, val); | |
919 } | |
920 else if (class == xmListWidgetClass) | |
921 { | |
922 xm_update_list (instance, widget, val); | |
923 } | |
924 } | |
925 | |
926 /* getting the value back */ | |
927 void | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
928 xm_update_one_value (instance, widget, val) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
929 widget_instance* instance; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
930 Widget widget; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
931 widget_value* val; |
5626 | 932 { |
933 WidgetClass class = XtClass (widget); | |
934 widget_value *old_wv; | |
935 | |
936 /* copy the call_data slot into the "return" widget_value */ | |
937 for (old_wv = instance->info->val->contents; old_wv; old_wv = old_wv->next) | |
938 if (!strcmp (val->name, old_wv->name)) | |
939 { | |
940 val->call_data = old_wv->call_data; | |
941 break; | |
942 } | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
943 |
5626 | 944 if (class == xmToggleButtonWidgetClass || class == xmToggleButtonGadgetClass) |
945 { | |
30571 | 946 XtVaGetValues (widget, XmNset, &val->selected, NULL); |
5626 | 947 val->edited = True; |
948 } | |
949 else if (class == xmTextWidgetClass) | |
950 { | |
951 if (val->value) | |
952 free (val->value); | |
953 val->value = XmTextGetString (widget); | |
954 val->edited = True; | |
955 } | |
956 else if (class == xmTextFieldWidgetClass) | |
957 { | |
958 if (val->value) | |
959 free (val->value); | |
960 val->value = XmTextFieldGetString (widget); | |
961 val->edited = True; | |
962 } | |
963 else if (class == xmRowColumnWidgetClass) | |
964 { | |
965 Boolean radiobox = 0; | |
966 int ac = 0; | |
967 Arg al [1]; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
968 |
5626 | 969 XtSetArg (al [ac], XmNradioBehavior, &radiobox); ac++; |
970 XtGetValues (widget, al, ac); | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
971 |
5626 | 972 if (radiobox) |
973 { | |
974 CompositeWidget radio = (CompositeWidget)widget; | |
975 int i; | |
976 for (i = 0; i < radio->composite.num_children; i++) | |
977 { | |
978 int set = False; | |
979 Widget toggle = radio->composite.children [i]; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
980 |
30571 | 981 XtVaGetValues (toggle, XmNset, &set, NULL); |
5626 | 982 if (set) |
983 { | |
984 if (val->value) | |
985 free (val->value); | |
8784 | 986 val->value = safe_strdup (XtName (toggle)); |
5626 | 987 } |
988 } | |
989 val->edited = True; | |
990 } | |
991 } | |
992 else if (class == xmListWidgetClass) | |
993 { | |
994 int pos_cnt; | |
995 int* pos_list; | |
996 if (XmListGetSelectedPos (widget, &pos_list, &pos_cnt)) | |
997 { | |
998 int i; | |
999 widget_value* cur; | |
1000 for (cur = val->contents, i = 0; cur; cur = cur->next) | |
1001 if (cur->value) | |
1002 { | |
1003 int j; | |
1004 cur->selected = False; | |
1005 i += 1; | |
1006 for (j = 0; j < pos_cnt; j++) | |
1007 if (pos_list [j] == i) | |
1008 { | |
1009 cur->selected = True; | |
8784 | 1010 val->value = safe_strdup (cur->name); |
5626 | 1011 } |
1012 } | |
1013 val->edited = 1; | |
1014 XtFree ((char *) pos_list); | |
1015 } | |
1016 } | |
1017 } | |
1018 | |
1019 | |
1020 /* This function is for activating a button from a program. It's wrong because | |
1021 we pass a NULL argument in the call_data which is not Motif compatible. | |
1022 This is used from the XmNdefaultAction callback of the List widgets to | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1023 have a double-click put down a dialog box like the button would do. |
5626 | 1024 I could not find a way to do that with accelerators. |
1025 */ | |
1026 static void | |
11862
10a973a88e87
(activate_button, xm_update_cascadebutton): Don't use prototype.
Karl Heuer <kwzh@gnu.org>
parents:
11435
diff
changeset
|
1027 activate_button (widget, closure, call_data) |
10a973a88e87
(activate_button, xm_update_cascadebutton): Don't use prototype.
Karl Heuer <kwzh@gnu.org>
parents:
11435
diff
changeset
|
1028 Widget widget; |
10a973a88e87
(activate_button, xm_update_cascadebutton): Don't use prototype.
Karl Heuer <kwzh@gnu.org>
parents:
11435
diff
changeset
|
1029 XtPointer closure; |
10a973a88e87
(activate_button, xm_update_cascadebutton): Don't use prototype.
Karl Heuer <kwzh@gnu.org>
parents:
11435
diff
changeset
|
1030 XtPointer call_data; |
5626 | 1031 { |
1032 Widget button = (Widget)closure; | |
1033 XtCallCallbacks (button, XmNactivateCallback, NULL); | |
1034 } | |
1035 | |
1036 /* creation functions */ | |
1037 | |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1038 /* Called for key press in dialogs. Used to pop down dialog on ESC. */ |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1039 static void |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1040 dialog_key_cb (widget, closure, event, continue_to_dispatch) |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1041 Widget widget; |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1042 XtPointer closure; |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1043 XEvent *event; |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1044 Boolean *continue_to_dispatch; |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1045 { |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1046 KeySym sym = 0; |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1047 Modifiers modif_ret; |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1048 |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1049 XtTranslateKeycode (event->xkey.display, event->xkey.keycode, 0, |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1050 &modif_ret, &sym); |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1051 |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1052 if (sym == osfXK_Cancel) |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1053 { |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1054 Widget w = *((Widget *) closure); |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1055 |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1056 while (w && ! XtIsShell (w)) |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1057 w = XtParent (w); |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1058 |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1059 if (XtIsShell (w)) XtPopdown (w); |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1060 } |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1061 |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1062 *continue_to_dispatch = TRUE; |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1063 } |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1064 |
5626 | 1065 /* dialogs */ |
1066 static Widget | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1067 make_dialog (name, parent, pop_up_p, shell_title, icon_name, text_input_slot, |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1068 radio_box, list, left_buttons, right_buttons) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1069 char* name; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1070 Widget parent; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1071 Boolean pop_up_p; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1072 char* shell_title; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1073 char* icon_name; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1074 Boolean text_input_slot; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1075 Boolean radio_box; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1076 Boolean list; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1077 int left_buttons; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1078 int right_buttons; |
5626 | 1079 { |
1080 Widget result; | |
1081 Widget form; | |
1082 Widget row; | |
1083 Widget icon; | |
1084 Widget icon_separator; | |
1085 Widget message; | |
1086 Widget value = 0; | |
1087 Widget separator; | |
1088 Widget button = 0; | |
1089 Widget children [16]; /* for the final XtManageChildren */ | |
1090 int n_children; | |
1091 Arg al[64]; /* Arg List */ | |
1092 int ac; /* Arg Count */ | |
1093 int i; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1094 |
5626 | 1095 if (pop_up_p) |
1096 { | |
1097 ac = 0; | |
1098 XtSetArg(al[ac], XmNtitle, shell_title); ac++; | |
1099 XtSetArg(al[ac], XtNallowShellResize, True); ac++; | |
1100 XtSetArg(al[ac], XmNdeleteResponse, XmUNMAP); ac++; | |
1101 result = XmCreateDialogShell (parent, "dialog", al, ac); | |
1102 ac = 0; | |
1103 XtSetArg(al[ac], XmNautoUnmanage, FALSE); ac++; | |
1104 /* XtSetArg(al[ac], XmNautoUnmanage, TRUE); ac++; */ /* ####is this ok? */ | |
1105 XtSetArg(al[ac], XmNnavigationType, XmTAB_GROUP); ac++; | |
1106 form = XmCreateForm (result, shell_title, al, ac); | |
1107 } | |
1108 else | |
1109 { | |
1110 ac = 0; | |
1111 XtSetArg(al[ac], XmNautoUnmanage, FALSE); ac++; | |
1112 XtSetArg(al[ac], XmNnavigationType, XmTAB_GROUP); ac++; | |
1113 form = XmCreateForm (parent, shell_title, al, ac); | |
1114 result = form; | |
1115 } | |
1116 | |
8884 | 1117 n_children = left_buttons + right_buttons + 1; |
5626 | 1118 ac = 0; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1119 XtSetArg(al[ac], XmNpacking, n_children == 3? |
8884 | 1120 XmPACK_COLUMN: XmPACK_TIGHT); ac++; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1121 XtSetArg(al[ac], XmNorientation, n_children == 3? |
8884 | 1122 XmVERTICAL: XmHORIZONTAL); ac++; |
5626 | 1123 XtSetArg(al[ac], XmNnumColumns, left_buttons + right_buttons + 1); ac++; |
1124 XtSetArg(al[ac], XmNmarginWidth, 0); ac++; | |
1125 XtSetArg(al[ac], XmNmarginHeight, 0); ac++; | |
1126 XtSetArg(al[ac], XmNspacing, 13); ac++; | |
1127 XtSetArg(al[ac], XmNadjustLast, False); ac++; | |
1128 XtSetArg(al[ac], XmNalignment, XmALIGNMENT_CENTER); ac++; | |
1129 XtSetArg(al[ac], XmNisAligned, True); ac++; | |
1130 XtSetArg(al[ac], XmNtopAttachment, XmATTACH_NONE); ac++; | |
1131 XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_FORM); ac++; | |
1132 XtSetArg(al[ac], XmNbottomOffset, 13); ac++; | |
1133 XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++; | |
1134 XtSetArg(al[ac], XmNleftOffset, 13); ac++; | |
1135 XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; | |
1136 XtSetArg(al[ac], XmNrightOffset, 13); ac++; | |
1137 row = XmCreateRowColumn (form, "row", al, ac); | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1138 |
5626 | 1139 n_children = 0; |
1140 for (i = 0; i < left_buttons; i++) | |
1141 { | |
1142 char button_name [16]; | |
1143 sprintf (button_name, "button%d", i + 1); | |
1144 ac = 0; | |
1145 if (i == 0) | |
1146 { | |
1147 XtSetArg(al[ac], XmNhighlightThickness, 1); ac++; | |
1148 XtSetArg(al[ac], XmNshowAsDefault, TRUE); ac++; | |
1149 } | |
8884 | 1150 XtSetArg(al[ac], XmNmarginWidth, 10); ac++; |
5626 | 1151 XtSetArg(al[ac], XmNnavigationType, XmTAB_GROUP); ac++; |
1152 children [n_children] = XmCreatePushButton (row, button_name, al, ac); | |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1153 XtAddEventHandler (children [n_children], |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1154 KeyPressMask, False, dialog_key_cb, result); |
5626 | 1155 |
1156 if (i == 0) | |
1157 { | |
1158 button = children [n_children]; | |
1159 ac = 0; | |
1160 XtSetArg(al[ac], XmNdefaultButton, button); ac++; | |
1161 XtSetValues (row, al, ac); | |
1162 } | |
1163 | |
1164 n_children++; | |
1165 } | |
1166 | |
14018 | 1167 /* invisible separator button */ |
5626 | 1168 ac = 0; |
1169 XtSetArg (al[ac], XmNmappedWhenManaged, FALSE); ac++; | |
1170 children [n_children] = XmCreateLabel (row, "separator_button", al, ac); | |
1171 n_children++; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1172 |
5626 | 1173 for (i = 0; i < right_buttons; i++) |
1174 { | |
1175 char button_name [16]; | |
1176 sprintf (button_name, "button%d", left_buttons + i + 1); | |
1177 ac = 0; | |
8884 | 1178 XtSetArg(al[ac], XmNmarginWidth, 10); ac++; |
5626 | 1179 XtSetArg(al[ac], XmNnavigationType, XmTAB_GROUP); ac++; |
1180 children [n_children] = XmCreatePushButton (row, button_name, al, ac); | |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1181 XtAddEventHandler (children [n_children], |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1182 KeyPressMask, False, dialog_key_cb, result); |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1183 |
5626 | 1184 if (! button) button = children [n_children]; |
1185 n_children++; | |
1186 } | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1187 |
5626 | 1188 XtManageChildren (children, n_children); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1189 |
5626 | 1190 ac = 0; |
1191 XtSetArg(al[ac], XmNtopAttachment, XmATTACH_NONE); ac++; | |
1192 XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++; | |
1193 XtSetArg(al[ac], XmNbottomOffset, 13); ac++; | |
1194 XtSetArg(al[ac], XmNbottomWidget, row); ac++; | |
1195 XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++; | |
1196 XtSetArg(al[ac], XmNleftOffset, 0); ac++; | |
1197 XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; | |
1198 XtSetArg(al[ac], XmNrightOffset, 0); ac++; | |
1199 separator = XmCreateSeparator (form, "", al, ac); | |
1200 | |
1201 ac = 0; | |
1202 XtSetArg(al[ac], XmNlabelType, XmPIXMAP); ac++; | |
1203 XtSetArg(al[ac], XmNtopAttachment, XmATTACH_FORM); ac++; | |
1204 XtSetArg(al[ac], XmNtopOffset, 13); ac++; | |
1205 XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_NONE); ac++; | |
1206 XtSetArg(al[ac], XmNleftAttachment, XmATTACH_FORM); ac++; | |
1207 XtSetArg(al[ac], XmNleftOffset, 13); ac++; | |
1208 XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++; | |
1209 icon = XmCreateLabel (form, icon_name, al, ac); | |
1210 | |
1211 ac = 0; | |
1212 XtSetArg(al[ac], XmNmappedWhenManaged, FALSE); ac++; | |
1213 XtSetArg(al[ac], XmNtopAttachment, XmATTACH_WIDGET); ac++; | |
1214 XtSetArg(al[ac], XmNtopOffset, 6); ac++; | |
1215 XtSetArg(al[ac], XmNtopWidget, icon); ac++; | |
1216 XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++; | |
1217 XtSetArg(al[ac], XmNbottomOffset, 6); ac++; | |
1218 XtSetArg(al[ac], XmNbottomWidget, separator); ac++; | |
1219 XtSetArg(al[ac], XmNleftAttachment, XmATTACH_NONE); ac++; | |
1220 XtSetArg(al[ac], XmNrightAttachment, XmATTACH_NONE); ac++; | |
1221 icon_separator = XmCreateLabel (form, "", al, ac); | |
1222 | |
1223 if (text_input_slot) | |
1224 { | |
1225 ac = 0; | |
1226 XtSetArg(al[ac], XmNcolumns, 50); ac++; | |
1227 XtSetArg(al[ac], XmNtopAttachment, XmATTACH_NONE); ac++; | |
1228 XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++; | |
1229 XtSetArg(al[ac], XmNbottomOffset, 13); ac++; | |
1230 XtSetArg(al[ac], XmNbottomWidget, separator); ac++; | |
1231 XtSetArg(al[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++; | |
1232 XtSetArg(al[ac], XmNleftOffset, 13); ac++; | |
1233 XtSetArg(al[ac], XmNleftWidget, icon); ac++; | |
1234 XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; | |
1235 XtSetArg(al[ac], XmNrightOffset, 13); ac++; | |
1236 value = XmCreateTextField (form, "value", al, ac); | |
1237 } | |
1238 else if (radio_box) | |
1239 { | |
1240 Widget radio_butt; | |
1241 ac = 0; | |
1242 XtSetArg(al[ac], XmNmarginWidth, 0); ac++; | |
1243 XtSetArg(al[ac], XmNmarginHeight, 0); ac++; | |
1244 XtSetArg(al[ac], XmNspacing, 13); ac++; | |
1245 XtSetArg(al[ac], XmNalignment, XmALIGNMENT_CENTER); ac++; | |
1246 XtSetArg(al[ac], XmNorientation, XmHORIZONTAL); ac++; | |
1247 XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++; | |
1248 XtSetArg(al[ac], XmNbottomOffset, 13); ac++; | |
1249 XtSetArg(al[ac], XmNbottomWidget, separator); ac++; | |
1250 XtSetArg(al[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++; | |
1251 XtSetArg(al[ac], XmNleftOffset, 13); ac++; | |
1252 XtSetArg(al[ac], XmNleftWidget, icon); ac++; | |
1253 XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; | |
1254 XtSetArg(al[ac], XmNrightOffset, 13); ac++; | |
1255 value = XmCreateRadioBox (form, "radiobutton1", al, ac); | |
1256 ac = 0; | |
1257 i = 0; | |
1258 radio_butt = XmCreateToggleButtonGadget (value, "radio1", al, ac); | |
1259 children [i++] = radio_butt; | |
1260 radio_butt = XmCreateToggleButtonGadget (value, "radio2", al, ac); | |
1261 children [i++] = radio_butt; | |
1262 radio_butt = XmCreateToggleButtonGadget (value, "radio3", al, ac); | |
1263 children [i++] = radio_butt; | |
1264 XtManageChildren (children, i); | |
1265 } | |
1266 else if (list) | |
1267 { | |
1268 ac = 0; | |
1269 XtSetArg(al[ac], XmNvisibleItemCount, 5); ac++; | |
1270 XtSetArg(al[ac], XmNtopAttachment, XmATTACH_NONE); ac++; | |
1271 XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++; | |
1272 XtSetArg(al[ac], XmNbottomOffset, 13); ac++; | |
1273 XtSetArg(al[ac], XmNbottomWidget, separator); ac++; | |
1274 XtSetArg(al[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++; | |
1275 XtSetArg(al[ac], XmNleftOffset, 13); ac++; | |
1276 XtSetArg(al[ac], XmNleftWidget, icon); ac++; | |
1277 XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; | |
1278 XtSetArg(al[ac], XmNrightOffset, 13); ac++; | |
1279 value = XmCreateScrolledList (form, "list", al, ac); | |
1280 | |
1281 /* this is the easiest way I found to have the dble click in the | |
1282 list activate the default button */ | |
1283 XtAddCallback (value, XmNdefaultActionCallback, activate_button, button); | |
1284 } | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1285 |
5626 | 1286 ac = 0; |
1287 XtSetArg(al[ac], XmNalignment, XmALIGNMENT_BEGINNING); ac++; | |
1288 XtSetArg(al[ac], XmNtopAttachment, XmATTACH_FORM); ac++; | |
1289 XtSetArg(al[ac], XmNtopOffset, 13); ac++; | |
1290 XtSetArg(al[ac], XmNbottomAttachment, XmATTACH_WIDGET); ac++; | |
1291 XtSetArg(al[ac], XmNbottomOffset, 13); ac++; | |
1292 XtSetArg(al[ac], XmNbottomWidget, | |
1293 text_input_slot || radio_box || list ? value : separator); ac++; | |
1294 XtSetArg(al[ac], XmNleftAttachment, XmATTACH_WIDGET); ac++; | |
1295 XtSetArg(al[ac], XmNleftOffset, 13); ac++; | |
1296 XtSetArg(al[ac], XmNleftWidget, icon); ac++; | |
1297 XtSetArg(al[ac], XmNrightAttachment, XmATTACH_FORM); ac++; | |
1298 XtSetArg(al[ac], XmNrightOffset, 13); ac++; | |
1299 message = XmCreateLabel (form, "message", al, ac); | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1300 |
5626 | 1301 if (list) |
1302 XtManageChild (value); | |
1303 | |
1304 i = 0; | |
1305 children [i] = row; i++; | |
1306 children [i] = separator; i++; | |
1307 if (text_input_slot || radio_box) | |
1308 { | |
1309 children [i] = value; i++; | |
1310 } | |
1311 children [i] = message; i++; | |
1312 children [i] = icon; i++; | |
1313 children [i] = icon_separator; i++; | |
1314 XtManageChildren (children, i); | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1315 |
5626 | 1316 if (text_input_slot || list) |
1317 { | |
1318 XtInstallAccelerators (value, button); | |
1319 XtSetKeyboardFocus (result, value); | |
1320 } | |
1321 else | |
1322 { | |
1323 XtInstallAccelerators (form, button); | |
1324 XtSetKeyboardFocus (result, button); | |
1325 } | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1326 |
5626 | 1327 return result; |
1328 } | |
1329 | |
1330 static destroyed_instance* | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1331 find_matching_instance (instance) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1332 widget_instance* instance; |
5626 | 1333 { |
1334 destroyed_instance* cur; | |
1335 destroyed_instance* prev; | |
1336 char* type = instance->info->type; | |
1337 char* name = instance->info->name; | |
1338 | |
1339 for (prev = NULL, cur = all_destroyed_instances; | |
1340 cur; | |
1341 prev = cur, cur = cur->next) | |
1342 { | |
1343 if (!strcmp (cur->name, name) | |
1344 && !strcmp (cur->type, type) | |
1345 && cur->parent == instance->parent | |
1346 && cur->pop_up_p == instance->pop_up_p) | |
1347 { | |
1348 if (prev) | |
1349 prev->next = cur->next; | |
1350 else | |
1351 all_destroyed_instances = cur->next; | |
1352 return cur; | |
1353 } | |
1354 /* do some cleanup */ | |
1355 else if (!cur->widget) | |
1356 { | |
1357 if (prev) | |
1358 prev->next = cur->next; | |
1359 else | |
1360 all_destroyed_instances = cur->next; | |
1361 free_destroyed_instance (cur); | |
1362 cur = prev ? prev : all_destroyed_instances; | |
1363 } | |
1364 } | |
1365 return NULL; | |
1366 } | |
1367 | |
1368 static void | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1369 mark_dead_instance_destroyed (widget, closure, call_data) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1370 Widget widget; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1371 XtPointer closure; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1372 XtPointer call_data; |
5626 | 1373 { |
1374 destroyed_instance* instance = (destroyed_instance*)closure; | |
1375 instance->widget = NULL; | |
1376 } | |
1377 | |
1378 static void | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1379 recenter_widget (widget) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1380 Widget widget; |
5626 | 1381 { |
1382 Widget parent = XtParent (widget); | |
1383 Screen* screen = XtScreen (widget); | |
1384 Dimension screen_width = WidthOfScreen (screen); | |
1385 Dimension screen_height = HeightOfScreen (screen); | |
1386 Dimension parent_width = 0; | |
1387 Dimension parent_height = 0; | |
1388 Dimension child_width = 0; | |
1389 Dimension child_height = 0; | |
1390 Position x; | |
1391 Position y; | |
1392 | |
30571 | 1393 XtVaGetValues (widget, XtNwidth, &child_width, XtNheight, &child_height, NULL); |
5626 | 1394 XtVaGetValues (parent, XtNwidth, &parent_width, XtNheight, &parent_height, |
30571 | 1395 NULL); |
5626 | 1396 |
1397 x = (((Position)parent_width) - ((Position)child_width)) / 2; | |
1398 y = (((Position)parent_height) - ((Position)child_height)) / 2; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1399 |
5626 | 1400 XtTranslateCoords (parent, x, y, &x, &y); |
1401 | |
1402 if (x + child_width > screen_width) | |
1403 x = screen_width - child_width; | |
1404 if (x < 0) | |
1405 x = 0; | |
1406 | |
1407 if (y + child_height > screen_height) | |
1408 y = screen_height - child_height; | |
1409 if (y < 0) | |
1410 y = 0; | |
1411 | |
30571 | 1412 XtVaSetValues (widget, XtNx, x, XtNy, y, NULL); |
5626 | 1413 } |
1414 | |
1415 static Widget | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1416 recycle_instance (instance) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1417 destroyed_instance* instance; |
5626 | 1418 { |
1419 Widget widget = instance->widget; | |
1420 | |
1421 /* widget is NULL if the parent was destroyed. */ | |
1422 if (widget) | |
1423 { | |
1424 Widget focus; | |
1425 Widget separator; | |
1426 | |
1427 /* Remove the destroy callback as the instance is not in the list | |
1428 anymore */ | |
1429 XtRemoveCallback (instance->parent, XtNdestroyCallback, | |
1430 mark_dead_instance_destroyed, | |
1431 (XtPointer)instance); | |
1432 | |
1433 /* Give the focus to the initial item */ | |
1434 focus = XtNameToWidget (widget, "*value"); | |
1435 if (!focus) | |
1436 focus = XtNameToWidget (widget, "*button1"); | |
1437 if (focus) | |
1438 XtSetKeyboardFocus (widget, focus); | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1439 |
5626 | 1440 /* shrink the separator label back to their original size */ |
1441 separator = XtNameToWidget (widget, "*separator_button"); | |
1442 if (separator) | |
30571 | 1443 XtVaSetValues (separator, XtNwidth, 5, XtNheight, 5, NULL); |
5626 | 1444 |
1445 /* Center the dialog in its parent */ | |
1446 recenter_widget (widget); | |
1447 } | |
1448 free_destroyed_instance (instance); | |
1449 return widget; | |
1450 } | |
1451 | |
1452 Widget | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1453 xm_create_dialog (instance) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1454 widget_instance* instance; |
5626 | 1455 { |
1456 char* name = instance->info->type; | |
1457 Widget parent = instance->parent; | |
1458 Widget widget; | |
1459 Boolean pop_up_p = instance->pop_up_p; | |
1460 char* shell_name = 0; | |
36437
d45267642a42
(xm_update_radiobox, update_one_menu_entry)
Gerd Moellmann <gerd@gnu.org>
parents:
34335
diff
changeset
|
1461 char* icon_name = 0; |
5626 | 1462 Boolean text_input_slot = False; |
1463 Boolean radio_box = False; | |
1464 Boolean list = False; | |
1465 int total_buttons; | |
1466 int left_buttons = 0; | |
1467 int right_buttons = 1; | |
1468 destroyed_instance* dead_one; | |
1469 | |
1470 /* try to find a widget to recycle */ | |
1471 dead_one = find_matching_instance (instance); | |
1472 if (dead_one) | |
1473 { | |
1474 Widget recycled_widget = recycle_instance (dead_one); | |
1475 if (recycled_widget) | |
1476 return recycled_widget; | |
1477 } | |
1478 | |
1479 switch (name [0]){ | |
1480 case 'E': case 'e': | |
1481 icon_name = "dbox-error"; | |
1482 shell_name = "Error"; | |
1483 break; | |
1484 | |
1485 case 'I': case 'i': | |
1486 icon_name = "dbox-info"; | |
1487 shell_name = "Information"; | |
1488 break; | |
1489 | |
1490 case 'L': case 'l': | |
1491 list = True; | |
1492 icon_name = "dbox-question"; | |
1493 shell_name = "Prompt"; | |
1494 break; | |
1495 | |
1496 case 'P': case 'p': | |
1497 text_input_slot = True; | |
1498 icon_name = "dbox-question"; | |
1499 shell_name = "Prompt"; | |
1500 break; | |
1501 | |
1502 case 'Q': case 'q': | |
1503 icon_name = "dbox-question"; | |
1504 shell_name = "Question"; | |
1505 break; | |
1506 } | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1507 |
5626 | 1508 total_buttons = name [1] - '0'; |
1509 | |
1510 if (name [3] == 'T' || name [3] == 't') | |
1511 { | |
1512 text_input_slot = False; | |
1513 radio_box = True; | |
1514 } | |
1515 else if (name [3]) | |
1516 right_buttons = name [4] - '0'; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1517 |
5626 | 1518 left_buttons = total_buttons - right_buttons; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1519 |
5626 | 1520 widget = make_dialog (name, parent, pop_up_p, |
1521 shell_name, icon_name, text_input_slot, radio_box, | |
1522 list, left_buttons, right_buttons); | |
1523 | |
1524 XtAddCallback (widget, XmNpopdownCallback, xm_nosel_callback, | |
1525 (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
|
1526 |
5626 | 1527 return widget; |
1528 } | |
1529 | |
15816
e1e9df8a862e
(make_menubar): Turn off menu accelerator.
Richard M. Stallman <rms@gnu.org>
parents:
15665
diff
changeset
|
1530 /* Create a menu bar. We turn off the f10 key |
e1e9df8a862e
(make_menubar): Turn off menu accelerator.
Richard M. Stallman <rms@gnu.org>
parents:
15665
diff
changeset
|
1531 because we have not yet managed to make it work right in Motif. */ |
e1e9df8a862e
(make_menubar): Turn off menu accelerator.
Richard M. Stallman <rms@gnu.org>
parents:
15665
diff
changeset
|
1532 |
5626 | 1533 static Widget |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1534 make_menubar (instance) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1535 widget_instance* instance; |
5626 | 1536 { |
27345
15a661269a09
(make_menubar): Set XmNresizeHeight and XmNresizeWidth to False.
Gerd Moellmann <gerd@gnu.org>
parents:
27333
diff
changeset
|
1537 Arg al[3]; |
15816
e1e9df8a862e
(make_menubar): Turn off menu accelerator.
Richard M. Stallman <rms@gnu.org>
parents:
15665
diff
changeset
|
1538 int ac; |
e1e9df8a862e
(make_menubar): Turn off menu accelerator.
Richard M. Stallman <rms@gnu.org>
parents:
15665
diff
changeset
|
1539 |
e1e9df8a862e
(make_menubar): Turn off menu accelerator.
Richard M. Stallman <rms@gnu.org>
parents:
15665
diff
changeset
|
1540 ac = 0; |
27345
15a661269a09
(make_menubar): Set XmNresizeHeight and XmNresizeWidth to False.
Gerd Moellmann <gerd@gnu.org>
parents:
27333
diff
changeset
|
1541 XtSetArg(al[ac], XmNmenuAccelerator, 0); ++ac; |
15a661269a09
(make_menubar): Set XmNresizeHeight and XmNresizeWidth to False.
Gerd Moellmann <gerd@gnu.org>
parents:
27333
diff
changeset
|
1542 return XmCreateMenuBar (instance->parent, instance->info->name, al, ac); |
5626 | 1543 } |
1544 | |
1545 static void | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1546 remove_grabs (shell, closure, call_data) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1547 Widget shell; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1548 XtPointer closure; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1549 XtPointer call_data; |
5626 | 1550 { |
11245
5fdf816307c6
(remove_grabs): Use type Widget for `menu'.
Richard M. Stallman <rms@gnu.org>
parents:
9835
diff
changeset
|
1551 Widget menu = (Widget) closure; |
5fdf816307c6
(remove_grabs): Use type Widget for `menu'.
Richard M. Stallman <rms@gnu.org>
parents:
9835
diff
changeset
|
1552 XmRemoveFromPostFromList (menu, XtParent (XtParent (menu))); |
5626 | 1553 } |
1554 | |
1555 static Widget | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1556 make_popup_menu (instance) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1557 widget_instance* instance; |
5626 | 1558 { |
1559 Widget parent = instance->parent; | |
1560 Window parent_window = parent->core.window; | |
1561 Widget result; | |
1562 | |
1563 /* sets the parent window to 0 to fool Motif into not generating a grab */ | |
1564 parent->core.window = 0; | |
1565 result = XmCreatePopupMenu (parent, instance->info->name, NULL, 0); | |
1566 XtAddCallback (XtParent (result), XmNpopdownCallback, remove_grabs, | |
1567 (XtPointer)result); | |
1568 parent->core.window = parent_window; | |
1569 return result; | |
1570 } | |
25037 | 1571 |
8784 | 1572 static Widget |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1573 make_main (instance) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1574 widget_instance* instance; |
8784 | 1575 { |
1576 Widget parent = instance->parent; | |
1577 Widget result; | |
1578 Arg al[2]; | |
1579 int ac; | |
1580 | |
1581 ac = 0; | |
1582 XtSetArg (al[ac], XtNborderWidth, 0); ac++; | |
1583 XtSetArg (al[ac], XmNspacing, 0); ac++; | |
1584 result = XmCreateMainWindow (parent, instance->info->name, al, ac); | |
1585 return result; | |
1586 } | |
5626 | 1587 |
1588 /* Table of functions to create widgets */ | |
1589 | |
1590 #ifdef ENERGIZE | |
1591 | |
1592 /* interface with the XDesigner generated functions */ | |
1593 typedef Widget (*widget_maker) (Widget); | |
1594 extern Widget create_project_p_sheet (Widget parent); | |
1595 extern Widget create_debugger_p_sheet (Widget parent); | |
1596 extern Widget create_breaklist_p_sheet (Widget parent); | |
1597 extern Widget create_le_browser_p_sheet (Widget parent); | |
1598 extern Widget create_class_browser_p_sheet (Widget parent); | |
1599 extern Widget create_call_browser_p_sheet (Widget parent); | |
1600 extern Widget create_build_dialog (Widget parent); | |
1601 extern Widget create_editmode_dialog (Widget parent); | |
1602 extern Widget create_search_dialog (Widget parent); | |
1603 extern Widget create_project_display_dialog (Widget parent); | |
1604 | |
1605 static Widget | |
1606 make_one (widget_instance* instance, widget_maker fn) | |
1607 { | |
1608 Widget result; | |
1609 Arg al [64]; | |
1610 int ac = 0; | |
1611 | |
1612 if (instance->pop_up_p) | |
1613 { | |
1614 XtSetArg (al [ac], XmNallowShellResize, TRUE); ac++; | |
1615 result = XmCreateDialogShell (instance->parent, "dialog", NULL, 0); | |
1616 XtAddCallback (result, XmNpopdownCallback, &xm_nosel_callback, | |
1617 (XtPointer) instance); | |
1618 (*fn) (result); | |
1619 } | |
1620 else | |
1621 { | |
1622 result = (*fn) (instance->parent); | |
1623 XtRealizeWidget (result); | |
1624 } | |
1625 return result; | |
1626 } | |
1627 | |
1628 static Widget | |
1629 make_project_p_sheet (widget_instance* instance) | |
1630 { | |
1631 return make_one (instance, create_project_p_sheet); | |
1632 } | |
1633 | |
1634 static Widget | |
1635 make_debugger_p_sheet (widget_instance* instance) | |
1636 { | |
1637 return make_one (instance, create_debugger_p_sheet); | |
1638 } | |
1639 | |
1640 static Widget | |
1641 make_breaklist_p_sheet (widget_instance* instance) | |
1642 { | |
1643 return make_one (instance, create_breaklist_p_sheet); | |
1644 } | |
1645 | |
1646 static Widget | |
1647 make_le_browser_p_sheet (widget_instance* instance) | |
1648 { | |
1649 return make_one (instance, create_le_browser_p_sheet); | |
1650 } | |
1651 | |
1652 static Widget | |
1653 make_class_browser_p_sheet (widget_instance* instance) | |
1654 { | |
1655 return make_one (instance, create_class_browser_p_sheet); | |
1656 } | |
1657 | |
1658 static Widget | |
1659 make_call_browser_p_sheet (widget_instance* instance) | |
1660 { | |
1661 return make_one (instance, create_call_browser_p_sheet); | |
1662 } | |
1663 | |
1664 static Widget | |
1665 make_build_dialog (widget_instance* instance) | |
1666 { | |
1667 return make_one (instance, create_build_dialog); | |
1668 } | |
1669 | |
1670 static Widget | |
1671 make_editmode_dialog (widget_instance* instance) | |
1672 { | |
1673 return make_one (instance, create_editmode_dialog); | |
1674 } | |
1675 | |
1676 static Widget | |
1677 make_search_dialog (widget_instance* instance) | |
1678 { | |
1679 return make_one (instance, create_search_dialog); | |
1680 } | |
1681 | |
1682 static Widget | |
1683 make_project_display_dialog (widget_instance* instance) | |
1684 { | |
1685 return make_one (instance, create_project_display_dialog); | |
1686 } | |
1687 | |
1688 #endif /* ENERGIZE */ | |
1689 | |
1690 widget_creation_entry | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1691 xm_creation_table [] = |
5626 | 1692 { |
1693 {"menubar", make_menubar}, | |
1694 {"popup", make_popup_menu}, | |
8784 | 1695 {"main", make_main}, |
5626 | 1696 #ifdef ENERGIZE |
1697 {"project_p_sheet", make_project_p_sheet}, | |
1698 {"debugger_p_sheet", make_debugger_p_sheet}, | |
1699 {"breaklist_psheet", make_breaklist_p_sheet}, | |
1700 {"leb_psheet", make_le_browser_p_sheet}, | |
1701 {"class_browser_psheet", make_class_browser_p_sheet}, | |
1702 {"ctree_browser_psheet", make_call_browser_p_sheet}, | |
1703 {"build", make_build_dialog}, | |
1704 {"editmode", make_editmode_dialog}, | |
1705 {"search", make_search_dialog}, | |
1706 {"project_display", make_project_display_dialog}, | |
1707 #endif /* ENERGIZE */ | |
1708 {NULL, NULL} | |
1709 }; | |
1710 | |
1711 /* Destruction of instances */ | |
1712 void | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1713 xm_destroy_instance (instance) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1714 widget_instance* instance; |
5626 | 1715 { |
1716 Widget widget = instance->widget; | |
1717 /* recycle the dialog boxes */ | |
1718 /* Disable the recycling until we can find a way to have the dialog box | |
1719 get reasonable layout after we modify its contents. */ | |
1720 if (0 | |
1721 && XtClass (widget) == xmDialogShellWidgetClass) | |
1722 { | |
1723 destroyed_instance* dead_instance = | |
1724 make_destroyed_instance (instance->info->name, | |
1725 instance->info->type, | |
1726 instance->widget, | |
1727 instance->parent, | |
1728 instance->pop_up_p); | |
1729 dead_instance->next = all_destroyed_instances; | |
1730 all_destroyed_instances = dead_instance; | |
1731 XtUnmanageChild (first_child (instance->widget)); | |
1732 XFlush (XtDisplay (instance->widget)); | |
1733 XtAddCallback (instance->parent, XtNdestroyCallback, | |
1734 mark_dead_instance_destroyed, (XtPointer)dead_instance); | |
1735 } | |
1736 else | |
1737 { | |
1738 /* This might not be necessary now that the nosel is attached to | |
1739 popdown instead of destroy, but it can't hurt. */ | |
1740 XtRemoveCallback (instance->widget, XtNdestroyCallback, | |
1741 xm_nosel_callback, (XtPointer)instance); | |
1742 XtDestroyWidget (instance->widget); | |
1743 } | |
1744 } | |
1745 | |
1746 /* popup utility */ | |
1747 void | |
12746
23cd08c6dd2a
(xm_popup_menu): New arg `event'.
Richard M. Stallman <rms@gnu.org>
parents:
11862
diff
changeset
|
1748 xm_popup_menu (widget, event) |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1749 Widget widget; |
12746
23cd08c6dd2a
(xm_popup_menu): New arg `event'.
Richard M. Stallman <rms@gnu.org>
parents:
11862
diff
changeset
|
1750 XEvent *event; |
5626 | 1751 { |
1752 XButtonPressedEvent dummy; | |
1753 | |
12746
23cd08c6dd2a
(xm_popup_menu): New arg `event'.
Richard M. Stallman <rms@gnu.org>
parents:
11862
diff
changeset
|
1754 if (event == 0) |
23cd08c6dd2a
(xm_popup_menu): New arg `event'.
Richard M. Stallman <rms@gnu.org>
parents:
11862
diff
changeset
|
1755 { |
23cd08c6dd2a
(xm_popup_menu): New arg `event'.
Richard M. Stallman <rms@gnu.org>
parents:
11862
diff
changeset
|
1756 dummy.type = ButtonPress; |
23cd08c6dd2a
(xm_popup_menu): New arg `event'.
Richard M. Stallman <rms@gnu.org>
parents:
11862
diff
changeset
|
1757 dummy.serial = 0; |
23cd08c6dd2a
(xm_popup_menu): New arg `event'.
Richard M. Stallman <rms@gnu.org>
parents:
11862
diff
changeset
|
1758 dummy.send_event = 0; |
23cd08c6dd2a
(xm_popup_menu): New arg `event'.
Richard M. Stallman <rms@gnu.org>
parents:
11862
diff
changeset
|
1759 dummy.display = XtDisplay (widget); |
23cd08c6dd2a
(xm_popup_menu): New arg `event'.
Richard M. Stallman <rms@gnu.org>
parents:
11862
diff
changeset
|
1760 dummy.window = XtWindow (XtParent (widget)); |
23cd08c6dd2a
(xm_popup_menu): New arg `event'.
Richard M. Stallman <rms@gnu.org>
parents:
11862
diff
changeset
|
1761 dummy.time = 0; |
23cd08c6dd2a
(xm_popup_menu): New arg `event'.
Richard M. Stallman <rms@gnu.org>
parents:
11862
diff
changeset
|
1762 dummy.button = 0; |
23cd08c6dd2a
(xm_popup_menu): New arg `event'.
Richard M. Stallman <rms@gnu.org>
parents:
11862
diff
changeset
|
1763 XQueryPointer (dummy.display, dummy.window, &dummy.root, |
23cd08c6dd2a
(xm_popup_menu): New arg `event'.
Richard M. Stallman <rms@gnu.org>
parents:
11862
diff
changeset
|
1764 &dummy.subwindow, &dummy.x_root, &dummy.y_root, |
23cd08c6dd2a
(xm_popup_menu): New arg `event'.
Richard M. Stallman <rms@gnu.org>
parents:
11862
diff
changeset
|
1765 &dummy.x, &dummy.y, &dummy.state); |
23cd08c6dd2a
(xm_popup_menu): New arg `event'.
Richard M. Stallman <rms@gnu.org>
parents:
11862
diff
changeset
|
1766 event = (XEvent *) &dummy; |
23cd08c6dd2a
(xm_popup_menu): New arg `event'.
Richard M. Stallman <rms@gnu.org>
parents:
11862
diff
changeset
|
1767 } |
5626 | 1768 |
1769 if (event->type == ButtonPress || event->type == ButtonRelease) | |
1770 { | |
36766
93e2f21c32bd
(xm_popup_menu): Don't set XmNmenuPost unless
Gerd Moellmann <gerd@gnu.org>
parents:
36440
diff
changeset
|
1771 /* Setting the menuPost resource only required by Motif 1.1 and |
93e2f21c32bd
(xm_popup_menu): Don't set XmNmenuPost unless
Gerd Moellmann <gerd@gnu.org>
parents:
36440
diff
changeset
|
1772 LessTif 0.84 and earlier. With later versions of LessTif, |
93e2f21c32bd
(xm_popup_menu): Don't set XmNmenuPost unless
Gerd Moellmann <gerd@gnu.org>
parents:
36440
diff
changeset
|
1773 setting menuPost is unnecessary and may cause problems, so |
93e2f21c32bd
(xm_popup_menu): Don't set XmNmenuPost unless
Gerd Moellmann <gerd@gnu.org>
parents:
36440
diff
changeset
|
1774 don't do it. */ |
93e2f21c32bd
(xm_popup_menu): Don't set XmNmenuPost unless
Gerd Moellmann <gerd@gnu.org>
parents:
36440
diff
changeset
|
1775 #if XmVersion < 1002 || (defined LESSTIF_VERSION && LESSTIF_VERSION < 84) |
93e2f21c32bd
(xm_popup_menu): Don't set XmNmenuPost unless
Gerd Moellmann <gerd@gnu.org>
parents:
36440
diff
changeset
|
1776 { |
93e2f21c32bd
(xm_popup_menu): Don't set XmNmenuPost unless
Gerd Moellmann <gerd@gnu.org>
parents:
36440
diff
changeset
|
1777 /* This is so totally ridiculous: there's NO WAY to tell Motif |
93e2f21c32bd
(xm_popup_menu): Don't set XmNmenuPost unless
Gerd Moellmann <gerd@gnu.org>
parents:
36440
diff
changeset
|
1778 that *any* button can select a menu item. Only one button |
93e2f21c32bd
(xm_popup_menu): Don't set XmNmenuPost unless
Gerd Moellmann <gerd@gnu.org>
parents:
36440
diff
changeset
|
1779 can have that honor. */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1780 |
36766
93e2f21c32bd
(xm_popup_menu): Don't set XmNmenuPost unless
Gerd Moellmann <gerd@gnu.org>
parents:
36440
diff
changeset
|
1781 char *trans = 0; |
93e2f21c32bd
(xm_popup_menu): Don't set XmNmenuPost unless
Gerd Moellmann <gerd@gnu.org>
parents:
36440
diff
changeset
|
1782 if (event->xbutton.state & Button5Mask) trans = "<Btn5Down>"; |
93e2f21c32bd
(xm_popup_menu): Don't set XmNmenuPost unless
Gerd Moellmann <gerd@gnu.org>
parents:
36440
diff
changeset
|
1783 else if (event->xbutton.state & Button4Mask) trans = "<Btn4Down>"; |
93e2f21c32bd
(xm_popup_menu): Don't set XmNmenuPost unless
Gerd Moellmann <gerd@gnu.org>
parents:
36440
diff
changeset
|
1784 else if (event->xbutton.state & Button3Mask) trans = "<Btn3Down>"; |
93e2f21c32bd
(xm_popup_menu): Don't set XmNmenuPost unless
Gerd Moellmann <gerd@gnu.org>
parents:
36440
diff
changeset
|
1785 else if (event->xbutton.state & Button2Mask) trans = "<Btn2Down>"; |
93e2f21c32bd
(xm_popup_menu): Don't set XmNmenuPost unless
Gerd Moellmann <gerd@gnu.org>
parents:
36440
diff
changeset
|
1786 else if (event->xbutton.state & Button1Mask) trans = "<Btn1Down>"; |
93e2f21c32bd
(xm_popup_menu): Don't set XmNmenuPost unless
Gerd Moellmann <gerd@gnu.org>
parents:
36440
diff
changeset
|
1787 if (trans) XtVaSetValues (widget, XmNmenuPost, trans, NULL); |
93e2f21c32bd
(xm_popup_menu): Don't set XmNmenuPost unless
Gerd Moellmann <gerd@gnu.org>
parents:
36440
diff
changeset
|
1788 } |
93e2f21c32bd
(xm_popup_menu): Don't set XmNmenuPost unless
Gerd Moellmann <gerd@gnu.org>
parents:
36440
diff
changeset
|
1789 #endif |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1790 |
5626 | 1791 XmMenuPosition (widget, (XButtonPressedEvent *) event); |
1792 } | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1793 |
5626 | 1794 XtManageChild (widget); |
1795 } | |
1796 | |
1797 static void | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1798 set_min_dialog_size (w) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1799 Widget w; |
5626 | 1800 { |
1801 short width; | |
1802 short height; | |
30571 | 1803 XtVaGetValues (w, XmNwidth, &width, XmNheight, &height, NULL); |
1804 XtVaSetValues (w, XmNminWidth, width, XmNminHeight, height, NULL); | |
5626 | 1805 } |
1806 | |
1807 void | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1808 xm_pop_instance (instance, up) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1809 widget_instance* instance; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1810 Boolean up; |
5626 | 1811 { |
1812 Widget widget = instance->widget; | |
1813 | |
1814 if (XtClass (widget) == xmDialogShellWidgetClass) | |
1815 { | |
1816 Widget widget_to_manage = first_child (widget); | |
1817 if (up) | |
1818 { | |
1819 XtManageChild (widget_to_manage); | |
1820 set_min_dialog_size (widget); | |
1821 XtSetKeyboardFocus (instance->parent, widget); | |
1822 } | |
1823 else | |
1824 XtUnmanageChild (widget_to_manage); | |
1825 } | |
1826 else | |
1827 { | |
1828 if (up) | |
1829 XtManageChild (widget); | |
1830 else | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1831 XtUnmanageChild (widget); |
5626 | 1832 } |
1833 } | |
1834 | |
1835 | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1836 /* motif callback */ |
5626 | 1837 |
1838 static void | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1839 do_call (widget, closure, type) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1840 Widget widget; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1841 XtPointer closure; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1842 enum do_call_type type; |
5626 | 1843 { |
1844 Arg al [256]; | |
1845 int ac; | |
1846 XtPointer user_data; | |
1847 widget_instance* instance = (widget_instance*)closure; | |
1848 Widget instance_widget; | |
1849 LWLIB_ID id; | |
1850 | |
1851 if (!instance) | |
1852 return; | |
1853 if (widget->core.being_destroyed) | |
1854 return; | |
1855 | |
1856 instance_widget = instance->widget; | |
1857 if (!instance_widget) | |
1858 return; | |
1859 | |
1860 id = instance->info->id; | |
1861 ac = 0; | |
1862 user_data = NULL; | |
1863 XtSetArg (al [ac], XmNuserData, &user_data); ac++; | |
1864 XtGetValues (widget, al, ac); | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1865 |
5626 | 1866 switch (type) |
1867 { | |
1868 case pre_activate: | |
1869 if (instance->info->pre_activate_cb) | |
1870 instance->info->pre_activate_cb (widget, id, user_data); | |
1871 break; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1872 |
5626 | 1873 case selection: |
1874 if (instance->info->selection_cb) | |
1875 instance->info->selection_cb (widget, id, user_data); | |
1876 break; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1877 |
5626 | 1878 case no_selection: |
1879 if (instance->info->selection_cb) | |
1880 instance->info->selection_cb (widget, id, (XtPointer) -1); | |
1881 break; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1882 |
5626 | 1883 case post_activate: |
1884 if (instance->info->post_activate_cb) | |
1885 instance->info->post_activate_cb (widget, id, user_data); | |
1886 break; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1887 |
5626 | 1888 default: |
1889 abort (); | |
1890 } | |
1891 } | |
1892 | |
1893 /* Like lw_internal_update_other_instances except that it does not do | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1894 anything if its shell parent is not managed. This is to protect |
5626 | 1895 lw_internal_update_other_instances to dereference freed memory |
1896 if the widget was ``destroyed'' by caching it in the all_destroyed_instances | |
1897 list */ | |
1898 static void | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1899 xm_internal_update_other_instances (widget, closure, call_data) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1900 Widget widget; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1901 XtPointer closure; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1902 XtPointer call_data; |
5626 | 1903 { |
1904 Widget parent; | |
1905 for (parent = widget; parent; parent = XtParent (parent)) | |
1906 if (XtIsShell (parent)) | |
1907 break; | |
1908 else if (!XtIsManaged (parent)) | |
1909 return; | |
1910 lw_internal_update_other_instances (widget, closure, call_data); | |
1911 } | |
1912 | |
1913 static void | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1914 xm_generic_callback (widget, closure, call_data) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1915 Widget widget; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1916 XtPointer closure; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1917 XtPointer call_data; |
5626 | 1918 { |
1919 lw_internal_update_other_instances (widget, closure, call_data); | |
1920 do_call (widget, closure, selection); | |
1921 } | |
1922 | |
1923 static void | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1924 xm_nosel_callback (widget, closure, call_data) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1925 Widget widget; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1926 XtPointer closure; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1927 XtPointer call_data; |
5626 | 1928 { |
36780
85a9fd1b9e41
(make_menu_in_widget): Add an XmNpopdownCallback
Gerd Moellmann <gerd@gnu.org>
parents:
36768
diff
changeset
|
1929 /* This callback is only called when a dialog box is dismissed with |
85a9fd1b9e41
(make_menu_in_widget): Add an XmNpopdownCallback
Gerd Moellmann <gerd@gnu.org>
parents:
36768
diff
changeset
|
1930 the wm's destroy button (WM_DELETE_WINDOW.) We want the dialog |
85a9fd1b9e41
(make_menu_in_widget): Add an XmNpopdownCallback
Gerd Moellmann <gerd@gnu.org>
parents:
36768
diff
changeset
|
1931 box to be destroyed in that case, not just unmapped, so that it |
85a9fd1b9e41
(make_menu_in_widget): Add an XmNpopdownCallback
Gerd Moellmann <gerd@gnu.org>
parents:
36768
diff
changeset
|
1932 releases its keyboard grabs. But there are problems with running |
85a9fd1b9e41
(make_menu_in_widget): Add an XmNpopdownCallback
Gerd Moellmann <gerd@gnu.org>
parents:
36768
diff
changeset
|
1933 our callbacks while the widget is in the process of being |
85a9fd1b9e41
(make_menu_in_widget): Add an XmNpopdownCallback
Gerd Moellmann <gerd@gnu.org>
parents:
36768
diff
changeset
|
1934 destroyed, so we set XmNdeleteResponse to XmUNMAP instead of |
85a9fd1b9e41
(make_menu_in_widget): Add an XmNpopdownCallback
Gerd Moellmann <gerd@gnu.org>
parents:
36768
diff
changeset
|
1935 XmDESTROY and then destroy it ourself after having run the |
85a9fd1b9e41
(make_menu_in_widget): Add an XmNpopdownCallback
Gerd Moellmann <gerd@gnu.org>
parents:
36768
diff
changeset
|
1936 callback. */ |
5626 | 1937 do_call (widget, closure, no_selection); |
1938 XtDestroyWidget (widget); | |
1939 } | |
1940 | |
1941 static void | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1942 xm_pull_down_callback (widget, closure, call_data) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1943 Widget widget; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1944 XtPointer closure; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1945 XtPointer call_data; |
5626 | 1946 { |
27422
5c5bb4b1ff45
(make_menu_in_widget): Don't add XmNpopdownCallback,
Gerd Moellmann <gerd@gnu.org>
parents:
27345
diff
changeset
|
1947 Widget parent = XtParent (widget); |
5c5bb4b1ff45
(make_menu_in_widget): Don't add XmNpopdownCallback,
Gerd Moellmann <gerd@gnu.org>
parents:
27345
diff
changeset
|
1948 |
5c5bb4b1ff45
(make_menu_in_widget): Don't add XmNpopdownCallback,
Gerd Moellmann <gerd@gnu.org>
parents:
27345
diff
changeset
|
1949 if (XmIsRowColumn (parent)) |
5c5bb4b1ff45
(make_menu_in_widget): Don't add XmNpopdownCallback,
Gerd Moellmann <gerd@gnu.org>
parents:
27345
diff
changeset
|
1950 { |
5c5bb4b1ff45
(make_menu_in_widget): Don't add XmNpopdownCallback,
Gerd Moellmann <gerd@gnu.org>
parents:
27345
diff
changeset
|
1951 unsigned char type = 0xff; |
5c5bb4b1ff45
(make_menu_in_widget): Don't add XmNpopdownCallback,
Gerd Moellmann <gerd@gnu.org>
parents:
27345
diff
changeset
|
1952 XtVaGetValues (parent, XmNrowColumnType, &type, NULL); |
5c5bb4b1ff45
(make_menu_in_widget): Don't add XmNpopdownCallback,
Gerd Moellmann <gerd@gnu.org>
parents:
27345
diff
changeset
|
1953 if (type == XmMENU_BAR) |
5c5bb4b1ff45
(make_menu_in_widget): Don't add XmNpopdownCallback,
Gerd Moellmann <gerd@gnu.org>
parents:
27345
diff
changeset
|
1954 do_call (widget, closure, pre_activate); |
5c5bb4b1ff45
(make_menu_in_widget): Don't add XmNpopdownCallback,
Gerd Moellmann <gerd@gnu.org>
parents:
27345
diff
changeset
|
1955 } |
5626 | 1956 } |
1957 | |
27422
5c5bb4b1ff45
(make_menu_in_widget): Don't add XmNpopdownCallback,
Gerd Moellmann <gerd@gnu.org>
parents:
27345
diff
changeset
|
1958 |
5c5bb4b1ff45
(make_menu_in_widget): Don't add XmNpopdownCallback,
Gerd Moellmann <gerd@gnu.org>
parents:
27345
diff
changeset
|
1959 /* XmNpopdownCallback for MenuShell widgets. WIDGET is the MenuShell, |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49460
diff
changeset
|
1960 CLOSURE is a pointer to the widget_instance of the shell, |
27422
5c5bb4b1ff45
(make_menu_in_widget): Don't add XmNpopdownCallback,
Gerd Moellmann <gerd@gnu.org>
parents:
27345
diff
changeset
|
1961 |
36780
85a9fd1b9e41
(make_menu_in_widget): Add an XmNpopdownCallback
Gerd Moellmann <gerd@gnu.org>
parents:
36768
diff
changeset
|
1962 Note that this callback is called for each cascade button in a |
85a9fd1b9e41
(make_menu_in_widget): Add an XmNpopdownCallback
Gerd Moellmann <gerd@gnu.org>
parents:
36768
diff
changeset
|
1963 menu, whether or not its submenu is visible. */ |
27422
5c5bb4b1ff45
(make_menu_in_widget): Don't add XmNpopdownCallback,
Gerd Moellmann <gerd@gnu.org>
parents:
27345
diff
changeset
|
1964 |
5626 | 1965 static void |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1966 xm_pop_down_callback (widget, closure, call_data) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1967 Widget widget; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1968 XtPointer closure; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1969 XtPointer call_data; |
5626 | 1970 { |
9835
d2250d1b0f48
(make_menu_in_widget): Differentiate a separator entry ("--") from a
Paul Reilly <pmr@pajato.com>
parents:
9825
diff
changeset
|
1971 widget_instance *instance = (widget_instance *) closure; |
5626 | 1972 |
36780
85a9fd1b9e41
(make_menu_in_widget): Add an XmNpopdownCallback
Gerd Moellmann <gerd@gnu.org>
parents:
36768
diff
changeset
|
1973 if ((!instance->pop_up_p && XtParent (widget) == instance->widget) |
85a9fd1b9e41
(make_menu_in_widget): Add an XmNpopdownCallback
Gerd Moellmann <gerd@gnu.org>
parents:
36768
diff
changeset
|
1974 || XtParent (widget) == instance->parent) |
27422
5c5bb4b1ff45
(make_menu_in_widget): Don't add XmNpopdownCallback,
Gerd Moellmann <gerd@gnu.org>
parents:
27345
diff
changeset
|
1975 do_call (widget, closure, post_activate); |
5c5bb4b1ff45
(make_menu_in_widget): Don't add XmNpopdownCallback,
Gerd Moellmann <gerd@gnu.org>
parents:
27345
diff
changeset
|
1976 } |
5c5bb4b1ff45
(make_menu_in_widget): Don't add XmNpopdownCallback,
Gerd Moellmann <gerd@gnu.org>
parents:
27345
diff
changeset
|
1977 |
5626 | 1978 |
1979 /* set the keyboard focus */ | |
1980 void | |
11299
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1981 xm_set_keyboard_focus (parent, w) |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1982 Widget parent; |
f82f4e93e523
(*): remove function prototypes.
Paul Reilly <pmr@pajato.com>
parents:
11245
diff
changeset
|
1983 Widget w; |
5626 | 1984 { |
1985 XmProcessTraversal (w, 0); | |
1986 XtSetKeyboardFocus (parent, w); | |
1987 } | |
9224
b4563001d783
(make_menu_in_widget): Add support for displaying a title in pop up
Paul Reilly <pmr@pajato.com>
parents:
8884
diff
changeset
|
1988 |
b4563001d783
(make_menu_in_widget): Add support for displaying a title in pop up
Paul Reilly <pmr@pajato.com>
parents:
8884
diff
changeset
|
1989 /* Motif hack to set the main window areas. */ |
b4563001d783
(make_menu_in_widget): Add support for displaying a title in pop up
Paul Reilly <pmr@pajato.com>
parents:
8884
diff
changeset
|
1990 void |
b4563001d783
(make_menu_in_widget): Add support for displaying a title in pop up
Paul Reilly <pmr@pajato.com>
parents:
8884
diff
changeset
|
1991 xm_set_main_areas (parent, menubar, work_area) |
b4563001d783
(make_menu_in_widget): Add support for displaying a title in pop up
Paul Reilly <pmr@pajato.com>
parents:
8884
diff
changeset
|
1992 Widget parent; |
b4563001d783
(make_menu_in_widget): Add support for displaying a title in pop up
Paul Reilly <pmr@pajato.com>
parents:
8884
diff
changeset
|
1993 Widget menubar; |
b4563001d783
(make_menu_in_widget): Add support for displaying a title in pop up
Paul Reilly <pmr@pajato.com>
parents:
8884
diff
changeset
|
1994 Widget work_area; |
b4563001d783
(make_menu_in_widget): Add support for displaying a title in pop up
Paul Reilly <pmr@pajato.com>
parents:
8884
diff
changeset
|
1995 { |
b4563001d783
(make_menu_in_widget): Add support for displaying a title in pop up
Paul Reilly <pmr@pajato.com>
parents:
8884
diff
changeset
|
1996 XmMainWindowSetAreas (parent, |
b4563001d783
(make_menu_in_widget): Add support for displaying a title in pop up
Paul Reilly <pmr@pajato.com>
parents:
8884
diff
changeset
|
1997 menubar, /* menubar (maybe 0) */ |
b4563001d783
(make_menu_in_widget): Add support for displaying a title in pop up
Paul Reilly <pmr@pajato.com>
parents:
8884
diff
changeset
|
1998 0, /* command area (psheets) */ |
b4563001d783
(make_menu_in_widget): Add support for displaying a title in pop up
Paul Reilly <pmr@pajato.com>
parents:
8884
diff
changeset
|
1999 0, /* horizontal scroll */ |
b4563001d783
(make_menu_in_widget): Add support for displaying a title in pop up
Paul Reilly <pmr@pajato.com>
parents:
8884
diff
changeset
|
2000 0, /* vertical scroll */ |
b4563001d783
(make_menu_in_widget): Add support for displaying a title in pop up
Paul Reilly <pmr@pajato.com>
parents:
8884
diff
changeset
|
2001 work_area); /* work area */ |
b4563001d783
(make_menu_in_widget): Add support for displaying a title in pop up
Paul Reilly <pmr@pajato.com>
parents:
8884
diff
changeset
|
2002 } |
b4563001d783
(make_menu_in_widget): Add support for displaying a title in pop up
Paul Reilly <pmr@pajato.com>
parents:
8884
diff
changeset
|
2003 |
b4563001d783
(make_menu_in_widget): Add support for displaying a title in pop up
Paul Reilly <pmr@pajato.com>
parents:
8884
diff
changeset
|
2004 /* Motif hack to control resizing on the menubar. */ |
b4563001d783
(make_menu_in_widget): Add support for displaying a title in pop up
Paul Reilly <pmr@pajato.com>
parents:
8884
diff
changeset
|
2005 void |
b4563001d783
(make_menu_in_widget): Add support for displaying a title in pop up
Paul Reilly <pmr@pajato.com>
parents:
8884
diff
changeset
|
2006 xm_manage_resizing (w, flag) |
b4563001d783
(make_menu_in_widget): Add support for displaying a title in pop up
Paul Reilly <pmr@pajato.com>
parents:
8884
diff
changeset
|
2007 Widget w; |
b4563001d783
(make_menu_in_widget): Add support for displaying a title in pop up
Paul Reilly <pmr@pajato.com>
parents:
8884
diff
changeset
|
2008 Boolean flag; |
b4563001d783
(make_menu_in_widget): Add support for displaying a title in pop up
Paul Reilly <pmr@pajato.com>
parents:
8884
diff
changeset
|
2009 { |
27998
e61be6a5e321
(xm_manage_resizing): Rewritten.
Gerd Moellmann <gerd@gnu.org>
parents:
27422
diff
changeset
|
2010 XtVaSetValues (w, XtNallowShellResize, flag, NULL); |
9224
b4563001d783
(make_menu_in_widget): Add support for displaying a title in pop up
Paul Reilly <pmr@pajato.com>
parents:
8884
diff
changeset
|
2011 } |
52401 | 2012 |
2013 /* arch-tag: 73976f64-73b2-4600-aa13-d9ede20ee965 | |
2014 (do not change this comment) */ |