Mercurial > emacs
annotate lwlib/lwlib-Xlw.c @ 22758:dbd9ecc9dbac
Added next-buffer/previous-buffer keybindings (bound to M-n/M-p).
(crisp-unbury-buffer): New function.
Fixed bogus XEmacs/Lucid string-match checking.
Made modeline entry mouse2-able.
(crisp-mode-map): Make this a sparse keymap parented from
current-global-map.
(crisp-mode-original-keymap): Don't copy the keymap.
(crisp-last-last-command): Renamed from last-last-command. defvar it.
(crisp-mode): Honor ARG.
(crisp-kill-line, crisp-copy-line): When a region isn't highlighted,
use the region from point to eol. Honor prefix argument.
(crisp-submit-bug-report): New command, taken from cc-mode.
Shortened the version numbering, removed the release-version tracking
(crisp-version): New function.
New keybindings `C-home', `C-end', `M-home', `M-end', `C-f', `M-l',
`M-m'.
(crisp-copy-line): No need to save point.
Removed S-right and S-left bindings.
Abstract the marking and selection interfaces so that we can be
compatible with both Emacs and XEmacs. And try and make the
behavior as close as possible under both environments so that there
are no surprises.
author | Karl Heuer <kwzh@gnu.org> |
---|---|
date | Tue, 14 Jul 1998 22:17:35 +0000 |
parents | ee40177f6c68 |
children | e0d966fb548f |
rev | line source |
---|---|
5626 | 1 /* The lwlib interface to "xlwmenu" menus. |
2 Copyright (C) 1992 Lucid, Inc. | |
3 | |
4 This file is part of the Lucid Widget Library. | |
5 | |
6 The Lucid Widget Library is free software; you can redistribute it and/or | |
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, | |
12 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
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:
12745
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:
12745
diff
changeset
|
19 Boston, MA 02111-1307, USA. */ |
5626 | 20 |
21 #include "lwlib-Xlw.h" | |
22 #include <X11/StringDefs.h> | |
23 #include <X11/IntrinsicP.h> | |
24 #include <X11/ObjectP.h> | |
25 #include <X11/CompositeP.h> | |
26 #include <X11/Shell.h> | |
27 #include "xlwmenu.h" | |
28 | |
29 /* Menu callbacks */ | |
30 static void | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
31 pre_hook (w, client_data, call_data) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
32 Widget w; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
33 XtPointer client_data; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
34 XtPointer call_data; |
5626 | 35 { |
36 widget_instance* instance = (widget_instance*)client_data; | |
37 widget_value* val; | |
38 | |
39 if (w->core.being_destroyed) | |
40 return; | |
41 | |
42 val = lw_get_widget_value_for_widget (instance, w); | |
43 if (instance->info->pre_activate_cb) | |
44 instance->info->pre_activate_cb (w, instance->info->id, | |
45 val ? val->call_data : NULL); | |
46 } | |
47 | |
48 static void | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
49 pick_hook (w, client_data, call_data) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
50 Widget w; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
51 XtPointer client_data; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
52 XtPointer call_data; |
5626 | 53 { |
54 widget_instance* instance = (widget_instance*)client_data; | |
55 widget_value* contents_val = (widget_value*)call_data; | |
56 widget_value* widget_val; | |
57 XtPointer widget_arg; | |
58 | |
59 if (w->core.being_destroyed) | |
60 return; | |
61 | |
62 if (instance->info->selection_cb && contents_val && contents_val->enabled | |
63 && !contents_val->contents) | |
64 instance->info->selection_cb (w, instance->info->id, | |
65 contents_val->call_data); | |
66 | |
67 widget_val = lw_get_widget_value_for_widget (instance, w); | |
68 widget_arg = widget_val ? widget_val->call_data : NULL; | |
69 if (instance->info->post_activate_cb) | |
70 instance->info->post_activate_cb (w, instance->info->id, widget_arg); | |
71 | |
72 } | |
73 | |
74 /* creation functions */ | |
5993
5feb28cb62c8
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5983
diff
changeset
|
75 |
5626 | 76 static Widget |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
77 xlw_create_menubar (instance) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
78 widget_instance* instance; |
5626 | 79 { |
5951
ddd8c555b2fc
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5708
diff
changeset
|
80 Widget widget; |
8786 | 81 Arg al[5]; |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
82 int ac = 0; |
5951
ddd8c555b2fc
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5708
diff
changeset
|
83 |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
84 XtSetArg (al[ac], XtNmenu, instance->info->val); ac++; |
8786 | 85 #ifdef emacs |
86 XtSetArg (al[ac], XtNshowGrip, 0); ac++; | |
87 XtSetArg (al[ac], XtNresizeToPreferred, 1); ac++; | |
88 XtSetArg (al[ac], XtNallowResize, 1); ac++; | |
89 #endif | |
5951
ddd8c555b2fc
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5708
diff
changeset
|
90 |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
91 /* This used to use XtVaCreateWidget, but an old Xt version |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
92 has a bug in XtVaCreateWidget that frees instance->info->name. */ |
6009
f68004daa523
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5993
diff
changeset
|
93 widget |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
94 = XtCreateWidget (instance->info->name, xlwMenuWidgetClass, |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
95 instance->parent, al, ac); |
5952
908e36c0235d
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5951
diff
changeset
|
96 |
5626 | 97 XtAddCallback (widget, XtNopen, pre_hook, (XtPointer)instance); |
98 XtAddCallback (widget, XtNselect, pick_hook, (XtPointer)instance); | |
99 return widget; | |
100 } | |
101 | |
102 static Widget | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
103 xlw_create_popup_menu (instance) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
104 widget_instance* instance; |
5626 | 105 { |
6009
f68004daa523
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5993
diff
changeset
|
106 Widget popup_shell |
f68004daa523
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5993
diff
changeset
|
107 = XtCreatePopupShell (instance->info->name, overrideShellWidgetClass, |
f68004daa523
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5993
diff
changeset
|
108 instance->parent, NULL, 0); |
5626 | 109 |
5952
908e36c0235d
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5951
diff
changeset
|
110 Widget widget; |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
111 Arg al[2]; |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
112 int ac = 0; |
5952
908e36c0235d
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5951
diff
changeset
|
113 |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
114 XtSetArg (al[ac], XtNmenu, instance->info->val); ac++; |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
115 XtSetArg (al[ac], XtNhorizontal, False); ac++; |
5952
908e36c0235d
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5951
diff
changeset
|
116 |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
117 /* This used to use XtVaManagedCreateWidget, but an old Xt version |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
118 has a bug in XtVaManagedCreateWidget that frees instance->info->name. */ |
6009
f68004daa523
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5993
diff
changeset
|
119 widget |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
120 = XtCreateManagedWidget ("popup", xlwMenuWidgetClass, |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
121 popup_shell, al, ac); |
5952
908e36c0235d
*** empty log message ***
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5951
diff
changeset
|
122 |
5626 | 123 XtAddCallback (widget, XtNselect, pick_hook, (XtPointer)instance); |
124 | |
125 return popup_shell; | |
126 } | |
127 | |
128 widget_creation_entry | |
129 xlw_creation_table [] = | |
130 { | |
131 {"menubar", xlw_create_menubar}, | |
132 {"popup", xlw_create_popup_menu}, | |
133 {NULL, NULL} | |
134 }; | |
135 | |
136 Boolean | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
137 lw_lucid_widget_p (widget) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
138 Widget widget; |
5626 | 139 { |
140 WidgetClass the_class = XtClass (widget); | |
6009
f68004daa523
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5993
diff
changeset
|
141 |
5626 | 142 if (the_class == xlwMenuWidgetClass) |
143 return True; | |
144 if (the_class == overrideShellWidgetClass) | |
6009
f68004daa523
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5993
diff
changeset
|
145 return (XtClass (((CompositeWidget)widget)->composite.children [0]) |
f68004daa523
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5993
diff
changeset
|
146 == xlwMenuWidgetClass); |
5626 | 147 return False; |
148 } | |
149 | |
150 void | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
151 xlw_update_one_widget (instance, widget, val, deep_p) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
152 widget_instance* instance; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
153 Widget widget; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
154 widget_value* val; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
155 Boolean deep_p; |
5626 | 156 { |
157 XlwMenuWidget mw; | |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
158 Arg al[1]; |
5626 | 159 |
160 if (XtIsShell (widget)) | |
161 mw = (XlwMenuWidget)((CompositeWidget)widget)->composite.children [0]; | |
162 else | |
163 mw = (XlwMenuWidget)widget; | |
6040
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
164 |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
165 /* This used to use XtVaSetValues, but some old Xt versions |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
166 that have a bug in XtVaCreateWidget might have it here too. */ |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
167 XtSetArg (al[0], XtNmenu, instance->info->val); |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
168 |
7988b8acd29f
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
6009
diff
changeset
|
169 XtSetValues (widget, al, 1); |
5626 | 170 } |
171 | |
172 void | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
173 xlw_update_one_value (instance, widget, val) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
174 widget_instance* instance; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
175 Widget widget; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
176 widget_value* val; |
5626 | 177 { |
178 return; | |
179 } | |
180 | |
181 void | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
182 xlw_pop_instance (instance, up) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
183 widget_instance* instance; |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
184 Boolean up; |
5626 | 185 { |
186 } | |
187 | |
188 void | |
12745
4da8b8ac5211
(xlw_popup_menu): New arg event.
Richard M. Stallman <rms@gnu.org>
parents:
8786
diff
changeset
|
189 xlw_popup_menu (widget, event) |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
190 Widget widget; |
12745
4da8b8ac5211
(xlw_popup_menu): New arg event.
Richard M. Stallman <rms@gnu.org>
parents:
8786
diff
changeset
|
191 XEvent *event; |
5626 | 192 { |
193 XButtonPressedEvent dummy; | |
194 XlwMenuWidget mw; | |
195 | |
196 if (!XtIsShell (widget)) | |
197 return; | |
198 | |
199 mw = (XlwMenuWidget)((CompositeWidget)widget)->composite.children [0]; | |
200 | |
12745
4da8b8ac5211
(xlw_popup_menu): New arg event.
Richard M. Stallman <rms@gnu.org>
parents:
8786
diff
changeset
|
201 if (event) |
4da8b8ac5211
(xlw_popup_menu): New arg event.
Richard M. Stallman <rms@gnu.org>
parents:
8786
diff
changeset
|
202 pop_up_menu (mw, event); |
4da8b8ac5211
(xlw_popup_menu): New arg event.
Richard M. Stallman <rms@gnu.org>
parents:
8786
diff
changeset
|
203 else |
4da8b8ac5211
(xlw_popup_menu): New arg event.
Richard M. Stallman <rms@gnu.org>
parents:
8786
diff
changeset
|
204 { |
4da8b8ac5211
(xlw_popup_menu): New arg event.
Richard M. Stallman <rms@gnu.org>
parents:
8786
diff
changeset
|
205 dummy.type = ButtonPress; |
4da8b8ac5211
(xlw_popup_menu): New arg event.
Richard M. Stallman <rms@gnu.org>
parents:
8786
diff
changeset
|
206 dummy.serial = 0; |
4da8b8ac5211
(xlw_popup_menu): New arg event.
Richard M. Stallman <rms@gnu.org>
parents:
8786
diff
changeset
|
207 dummy.send_event = 0; |
4da8b8ac5211
(xlw_popup_menu): New arg event.
Richard M. Stallman <rms@gnu.org>
parents:
8786
diff
changeset
|
208 dummy.display = XtDisplay (widget); |
4da8b8ac5211
(xlw_popup_menu): New arg event.
Richard M. Stallman <rms@gnu.org>
parents:
8786
diff
changeset
|
209 dummy.window = XtWindow (XtParent (widget)); |
4da8b8ac5211
(xlw_popup_menu): New arg event.
Richard M. Stallman <rms@gnu.org>
parents:
8786
diff
changeset
|
210 dummy.time = CurrentTime; |
4da8b8ac5211
(xlw_popup_menu): New arg event.
Richard M. Stallman <rms@gnu.org>
parents:
8786
diff
changeset
|
211 dummy.button = 0; |
4da8b8ac5211
(xlw_popup_menu): New arg event.
Richard M. Stallman <rms@gnu.org>
parents:
8786
diff
changeset
|
212 XQueryPointer (dummy.display, dummy.window, &dummy.root, |
4da8b8ac5211
(xlw_popup_menu): New arg event.
Richard M. Stallman <rms@gnu.org>
parents:
8786
diff
changeset
|
213 &dummy.subwindow, &dummy.x_root, &dummy.y_root, |
4da8b8ac5211
(xlw_popup_menu): New arg event.
Richard M. Stallman <rms@gnu.org>
parents:
8786
diff
changeset
|
214 &dummy.x, &dummy.y, &dummy.state); |
5626 | 215 |
12745
4da8b8ac5211
(xlw_popup_menu): New arg event.
Richard M. Stallman <rms@gnu.org>
parents:
8786
diff
changeset
|
216 pop_up_menu (mw, &dummy); |
4da8b8ac5211
(xlw_popup_menu): New arg event.
Richard M. Stallman <rms@gnu.org>
parents:
8786
diff
changeset
|
217 } |
5626 | 218 } |
219 | |
220 /* Destruction of instances */ | |
221 void | |
5708
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
222 xlw_destroy_instance (instance) |
4870efc489ea
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
223 widget_instance* instance; |
5626 | 224 { |
225 if (instance->widget) | |
226 XtDestroyWidget (instance->widget); | |
227 } | |
228 |