Mercurial > emacs
annotate src/xmenu.c @ 97374:d74cc06fb91c
Fix attributions.
| author | Glenn Morris <rgm@gnu.org> |
|---|---|
| date | Sun, 10 Aug 2008 00:16:39 +0000 |
| parents | ba4a6844b73c |
| children | 229acec13840 |
| rev | line source |
|---|---|
| 118 | 1 /* X Communication module for terminals which understand the X protocol. |
|
64770
a0d1312ede66
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64084
diff
changeset
|
2 Copyright (C) 1986, 1988, 1993, 1994, 1996, 1999, 2000, 2001, 2002, 2003, |
| 79759 | 3 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. |
| 118 | 4 |
| 5 This file is part of GNU Emacs. | |
| 6 | |
|
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94005
diff
changeset
|
7 GNU Emacs is free software: you can redistribute it and/or modify |
| 118 | 8 it under the terms of the GNU General Public License as published by |
|
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94005
diff
changeset
|
9 the Free Software Foundation, either version 3 of the License, or |
|
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94005
diff
changeset
|
10 (at your option) any later version. |
| 118 | 11 |
| 12 GNU Emacs is distributed in the hope that it will be useful, | |
| 13 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 15 GNU General Public License for more details. | |
| 16 | |
| 17 You should have received a copy of the GNU General Public License | |
|
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94005
diff
changeset
|
18 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ |
| 118 | 19 |
|
40239
5fda2888718a
Spell the name of Emacs properly (GNU Emacs instead of gnuemacs).
Pavel Jan?k <Pavel@Janik.cz>
parents:
39988
diff
changeset
|
20 /* X pop-up deck-of-cards menu facility for GNU Emacs. |
| 118 | 21 * |
| 22 * Written by Jon Arnold and Roman Budzianowski | |
| 23 * Mods and rewrite by Robert Krawitz | |
| 24 * | |
| 25 */ | |
| 26 | |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
27 /* Modified by Fred Pierresteguy on December 93 |
|
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
28 to make the popup menus and menubar use the Xt. */ |
|
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
29 |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
30 /* Rewritten for clarity and GC protection by rms in Feb 94. */ |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
31 |
|
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26036
diff
changeset
|
32 #include <config.h> |
|
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
26036
diff
changeset
|
33 |
|
62216
0c2ce5566afa
Don't include signal.h.
Richard M. Stallman <rms@gnu.org>
parents:
62090
diff
changeset
|
34 #if 0 /* Why was this included? And without syssignal.h? */ |
| 118 | 35 /* On 4.3 this loses if it comes after xterm.h. */ |
| 36 #include <signal.h> | |
|
62216
0c2ce5566afa
Don't include signal.h.
Richard M. Stallman <rms@gnu.org>
parents:
62090
diff
changeset
|
37 #endif |
|
7900
60795e826dad
Put stdio.h after config.h.
Richard M. Stallman <rms@gnu.org>
parents:
7871
diff
changeset
|
38 |
|
60795e826dad
Put stdio.h after config.h.
Richard M. Stallman <rms@gnu.org>
parents:
7871
diff
changeset
|
39 #include <stdio.h> |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39914
diff
changeset
|
40 |
| 118 | 41 #include "lisp.h" |
|
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32179
diff
changeset
|
42 #include "keyboard.h" |
|
39690
38c1890338cc
(keymap_panes, Fx_popup_menu): Use Fkeymap_prompt.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
43 #include "keymap.h" |
| 770 | 44 #include "frame.h" |
|
83004
7900111db01c
Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents:
53325
diff
changeset
|
45 #include "termhooks.h" |
| 118 | 46 #include "window.h" |
|
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2209
diff
changeset
|
47 #include "blockinput.h" |
| 12661 | 48 #include "buffer.h" |
|
40477
a56267e601e4
Include coding.h and charset.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40239
diff
changeset
|
49 #include "charset.h" |
|
a56267e601e4
Include coding.h and charset.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40239
diff
changeset
|
50 #include "coding.h" |
|
58168
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
51 #include "sysselect.h" |
| 118 | 52 |
|
10502
1b08df5c5e4a
[MSDOS]: #include msdos.h.
Richard M. Stallman <rms@gnu.org>
parents:
10167
diff
changeset
|
53 #ifdef MSDOS |
|
1b08df5c5e4a
[MSDOS]: #include msdos.h.
Richard M. Stallman <rms@gnu.org>
parents:
10167
diff
changeset
|
54 #include "msdos.h" |
|
1b08df5c5e4a
[MSDOS]: #include msdos.h.
Richard M. Stallman <rms@gnu.org>
parents:
10167
diff
changeset
|
55 #endif |
|
1b08df5c5e4a
[MSDOS]: #include msdos.h.
Richard M. Stallman <rms@gnu.org>
parents:
10167
diff
changeset
|
56 |
| 9572 | 57 #ifdef HAVE_X_WINDOWS |
| 118 | 58 /* This may include sys/types.h, and that somehow loses |
| 59 if this is not done before the other system files. */ | |
| 60 #include "xterm.h" | |
| 9572 | 61 #endif |
| 118 | 62 |
| 63 /* Load sys/types.h if not already loaded. | |
| 64 In some systems loading it twice is suicidal. */ | |
| 65 #ifndef makedev | |
| 66 #include <sys/types.h> | |
| 67 #endif | |
| 68 | |
| 69 #include "dispextern.h" | |
| 70 | |
| 9572 | 71 #ifdef HAVE_X_WINDOWS |
| 51404 | 72 /* Defining HAVE_MULTILINGUAL_MENU would mean that the toolkit menu |
| 73 code accepts the Emacs internal encoding. */ | |
|
23302
dcff2a4b6cb4
(single_submenu) [! HAVE_MULTILINGUAL_MENU]: Make
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
74 #undef HAVE_MULTILINGUAL_MENU |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
75 #ifdef USE_X_TOOLKIT |
|
36958
0b580e75db8c
Include widget.h only if USE_X_TOOLKIT is defined.
Eli Zaretskii <eliz@gnu.org>
parents:
36938
diff
changeset
|
76 #include "widget.h" |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
77 #include <X11/Xlib.h> |
|
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
78 #include <X11/IntrinsicP.h> |
|
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
79 #include <X11/CoreP.h> |
|
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
80 #include <X11/StringDefs.h> |
|
8414
8a8d2cdd4218
(xmenu_show): Ignore any geometry resource from the user.
Richard M. Stallman <rms@gnu.org>
parents:
8269
diff
changeset
|
81 #include <X11/Shell.h> |
|
13489
ddf90bfd3744
Don't include Xaw/Paned.h unless USE_LUCID is defined.
Richard M. Stallman <rms@gnu.org>
parents:
13071
diff
changeset
|
82 #ifdef USE_LUCID |
|
81370
a5376379eaae
Link to xaw3d if available.
Chong Yidong <cyd@stupidchicken.com>
parents:
81273
diff
changeset
|
83 #ifdef HAVE_XAW3D |
|
a5376379eaae
Link to xaw3d if available.
Chong Yidong <cyd@stupidchicken.com>
parents:
81273
diff
changeset
|
84 #include <X11/Xaw3d/Paned.h> |
|
a5376379eaae
Link to xaw3d if available.
Chong Yidong <cyd@stupidchicken.com>
parents:
81273
diff
changeset
|
85 #else /* !HAVE_XAW3D */ |
|
11898
a23359be806b
(set_frame_menubar): Set menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11655
diff
changeset
|
86 #include <X11/Xaw/Paned.h> |
|
81370
a5376379eaae
Link to xaw3d if available.
Chong Yidong <cyd@stupidchicken.com>
parents:
81273
diff
changeset
|
87 #endif /* HAVE_XAW3D */ |
|
13489
ddf90bfd3744
Don't include Xaw/Paned.h unless USE_LUCID is defined.
Richard M. Stallman <rms@gnu.org>
parents:
13071
diff
changeset
|
88 #endif /* USE_LUCID */ |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
89 #include "../lwlib/lwlib.h" |
|
10167
358d48409854
Don't include ../oldXMenu/XMenu.h if USE_X_TOOLKIT.
Richard M. Stallman <rms@gnu.org>
parents:
9725
diff
changeset
|
90 #else /* not USE_X_TOOLKIT */ |
| 49322 | 91 #ifndef USE_GTK |
|
10167
358d48409854
Don't include ../oldXMenu/XMenu.h if USE_X_TOOLKIT.
Richard M. Stallman <rms@gnu.org>
parents:
9725
diff
changeset
|
92 #include "../oldXMenu/XMenu.h" |
| 49322 | 93 #endif |
|
10167
358d48409854
Don't include ../oldXMenu/XMenu.h if USE_X_TOOLKIT.
Richard M. Stallman <rms@gnu.org>
parents:
9725
diff
changeset
|
94 #endif /* not USE_X_TOOLKIT */ |
|
358d48409854
Don't include ../oldXMenu/XMenu.h if USE_X_TOOLKIT.
Richard M. Stallman <rms@gnu.org>
parents:
9725
diff
changeset
|
95 #endif /* HAVE_X_WINDOWS */ |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
96 |
| 96608 | 97 #ifdef USE_GTK |
| 98 #include "gtkutil.h" | |
| 99 #endif | |
| 100 | |
| 101 #include "menu.h" | |
| 102 | |
| 118 | 103 #ifndef TRUE |
| 104 #define TRUE 1 | |
| 105 #define FALSE 0 | |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
106 #endif /* no TRUE */ |
| 118 | 107 |
|
12625
e2831d2f5b09
(syms_of_xmenu): Set up Qdebug_on_next_call.
Richard M. Stallman <rms@gnu.org>
parents:
12432
diff
changeset
|
108 Lisp_Object Qdebug_on_next_call; |
|
e2831d2f5b09
(syms_of_xmenu): Set up Qdebug_on_next_call.
Richard M. Stallman <rms@gnu.org>
parents:
12432
diff
changeset
|
109 |
|
72757
6db6c056fc46
(Vmenu_updating_frame): Don't define here.
Richard M. Stallman <rms@gnu.org>
parents:
71134
diff
changeset
|
110 extern Lisp_Object Vmenu_updating_frame; |
|
6db6c056fc46
(Vmenu_updating_frame): Don't define here.
Richard M. Stallman <rms@gnu.org>
parents:
71134
diff
changeset
|
111 |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
112 extern Lisp_Object Qmenu_bar; |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
113 |
|
21242
10e1764f84b8
Don't include puresize.h any more as code that needs it
Richard M. Stallman <rms@gnu.org>
parents:
21178
diff
changeset
|
114 extern Lisp_Object QCtoggle, QCradio; |
|
12298
7c4b729e4b21
(menu_item_equiv_key): Do reconsider a command that had
Richard M. Stallman <rms@gnu.org>
parents:
12196
diff
changeset
|
115 |
| 12661 | 116 extern Lisp_Object Voverriding_local_map; |
| 117 extern Lisp_Object Voverriding_local_map_menu_flag; | |
| 118 | |
| 119 extern Lisp_Object Qoverriding_local_map, Qoverriding_terminal_local_map; | |
| 120 | |
| 121 extern Lisp_Object Qmenu_bar_update_hook; | |
| 122 | |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
123 #ifdef USE_X_TOOLKIT |
|
57814
1f473607c4a9
* xmenu.c: Add prototypes for forward function declarations.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
56959
diff
changeset
|
124 extern void set_frame_menubar P_ ((FRAME_PTR, int, int)); |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
125 extern XtAppContext Xt_app_con; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
126 |
|
62661
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
127 static Lisp_Object xdialog_show P_ ((FRAME_PTR, int, Lisp_Object, Lisp_Object, |
|
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
128 char **)); |
|
57814
1f473607c4a9
* xmenu.c: Add prototypes for forward function declarations.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
56959
diff
changeset
|
129 static void popup_get_selection P_ ((XEvent *, struct x_display_info *, |
|
59156
03a6e350cf4d
(popup_get_selection): Remove parameter down_on_keypress.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
59155
diff
changeset
|
130 LWLIB_ID, int)); |
| 49322 | 131 #endif /* USE_X_TOOLKIT */ |
| 132 | |
| 133 #ifdef USE_GTK | |
|
57814
1f473607c4a9
* xmenu.c: Add prototypes for forward function declarations.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
56959
diff
changeset
|
134 extern void set_frame_menubar P_ ((FRAME_PTR, int, int)); |
|
62661
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
135 static Lisp_Object xdialog_show P_ ((FRAME_PTR, int, Lisp_Object, Lisp_Object, |
|
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
136 char **)); |
| 24993 | 137 #endif |
| 138 | |
| 36933 | 139 static int update_frame_menubar P_ ((struct frame *)); |
| 140 static Lisp_Object xmenu_show P_ ((struct frame *, int, int, int, int, | |
| 141 Lisp_Object, char **)); | |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
142 |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
143 /* Flag which when set indicates a dialog or menu has been posted by |
|
9236
583bb9211b2b
(popup_get_selection): Remove BLOCK_INPUT, UNBLOCK_INPUT since the
Paul Reilly <pmr@pajato.com>
parents:
9233
diff
changeset
|
144 Xt on behalf of one of the widget sets. */ |
| 49322 | 145 static int popup_activated_flag; |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
146 |
| 12661 | 147 static int next_menubar_widget_id; |
|
15792
feeb1f7c1cec
(pending_menu_activation): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15785
diff
changeset
|
148 |
| 97204 | 149 /* For NS and NTGUI, these prototypes are defined in keyboard.h. */ |
| 150 #if defined (USE_X_TOOLKIT) || defined (USE_GTK) | |
| 151 extern widget_value *xmalloc_widget_value P_ ((void)); | |
| 152 extern widget_value *digest_single_submenu P_ ((int, int, int)); | |
| 153 #endif | |
| 154 | |
|
15807
508ec69917b1
(pending_menu_activation): Don't initialize. Not static.
Richard M. Stallman <rms@gnu.org>
parents:
15795
diff
changeset
|
155 /* This is set nonzero after the user activates the menu bar, and set |
|
508ec69917b1
(pending_menu_activation): Don't initialize. Not static.
Richard M. Stallman <rms@gnu.org>
parents:
15795
diff
changeset
|
156 to zero again after the menu bars are redisplayed by prepare_menu_bar. |
|
508ec69917b1
(pending_menu_activation): Don't initialize. Not static.
Richard M. Stallman <rms@gnu.org>
parents:
15795
diff
changeset
|
157 While it is nonzero, all calls to set_frame_menubar go deep. |
|
508ec69917b1
(pending_menu_activation): Don't initialize. Not static.
Richard M. Stallman <rms@gnu.org>
parents:
15795
diff
changeset
|
158 |
|
508ec69917b1
(pending_menu_activation): Don't initialize. Not static.
Richard M. Stallman <rms@gnu.org>
parents:
15795
diff
changeset
|
159 I don't understand why this is needed, but it does seem to be |
|
508ec69917b1
(pending_menu_activation): Don't initialize. Not static.
Richard M. Stallman <rms@gnu.org>
parents:
15795
diff
changeset
|
160 needed on Motif, according to Marcus Daniels <marcus@sysc.pdx.edu>. */ |
|
508ec69917b1
(pending_menu_activation): Don't initialize. Not static.
Richard M. Stallman <rms@gnu.org>
parents:
15795
diff
changeset
|
161 |
|
508ec69917b1
(pending_menu_activation): Don't initialize. Not static.
Richard M. Stallman <rms@gnu.org>
parents:
15795
diff
changeset
|
162 int pending_menu_activation; |
|
11237
7c968b691ff0
(frame_vector): New static variable.
Richard M. Stallman <rms@gnu.org>
parents:
11125
diff
changeset
|
163 |
| 12661 | 164 #ifdef USE_X_TOOLKIT |
| 165 | |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12661
diff
changeset
|
166 /* Return the frame whose ->output_data.x->id equals ID, or 0 if none. */ |
|
11237
7c968b691ff0
(frame_vector): New static variable.
Richard M. Stallman <rms@gnu.org>
parents:
11125
diff
changeset
|
167 |
| 12661 | 168 static struct frame * |
| 169 menubar_id_to_frame (id) | |
| 170 LWLIB_ID id; | |
|
11237
7c968b691ff0
(frame_vector): New static variable.
Richard M. Stallman <rms@gnu.org>
parents:
11125
diff
changeset
|
171 { |
| 12661 | 172 Lisp_Object tail, frame; |
| 173 FRAME_PTR f; | |
|
11237
7c968b691ff0
(frame_vector): New static variable.
Richard M. Stallman <rms@gnu.org>
parents:
11125
diff
changeset
|
174 |
|
90970
3371fc48749b
Replace uses of GC_* macros with the non-GC_ versions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
90951
diff
changeset
|
175 for (tail = Vframe_list; CONSP (tail); tail = XCDR (tail)) |
|
11237
7c968b691ff0
(frame_vector): New static variable.
Richard M. Stallman <rms@gnu.org>
parents:
11125
diff
changeset
|
176 { |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25322
diff
changeset
|
177 frame = XCAR (tail); |
|
90970
3371fc48749b
Replace uses of GC_* macros with the non-GC_ versions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
90951
diff
changeset
|
178 if (!FRAMEP (frame)) |
| 12661 | 179 continue; |
| 180 f = XFRAME (frame); | |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
181 if (!FRAME_WINDOW_P (f)) |
| 12661 | 182 continue; |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12661
diff
changeset
|
183 if (f->output_data.x->id == id) |
| 12661 | 184 return f; |
|
11237
7c968b691ff0
(frame_vector): New static variable.
Richard M. Stallman <rms@gnu.org>
parents:
11125
diff
changeset
|
185 } |
| 12661 | 186 return 0; |
| 187 } | |
|
11237
7c968b691ff0
(frame_vector): New static variable.
Richard M. Stallman <rms@gnu.org>
parents:
11125
diff
changeset
|
188 |
| 12661 | 189 #endif |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
190 |
|
49302
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
191 #ifdef HAVE_X_WINDOWS |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
192 /* Return the mouse position in *X and *Y. The coordinates are window |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
193 relative for the edit window in frame F. |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
194 This is for Fx_popup_menu. The mouse_position_hook can not |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
195 be used for X, as it returns window relative coordinates |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
196 for the window where the mouse is in. This could be the menu bar, |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
197 the scroll bar or the edit window. Fx_popup_menu needs to be |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
198 sure it is the edit window. */ |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
199 static void |
|
53069
1218a42792ea
Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
52981
diff
changeset
|
200 mouse_position_for_popup (f, x, y) |
|
49302
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
201 FRAME_PTR f; |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
202 int *x; |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
203 int *y; |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
204 { |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
205 Window root, dummy_window; |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
206 int dummy; |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
207 |
|
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
208 if (! FRAME_X_P (f)) |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
209 abort (); |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
210 |
|
49302
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
211 BLOCK_INPUT; |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
212 |
|
49302
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
213 XQueryPointer (FRAME_X_DISPLAY (f), |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
214 DefaultRootWindow (FRAME_X_DISPLAY (f)), |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
215 |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
216 /* The root window which contains the pointer. */ |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
217 &root, |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
218 |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
219 /* Window pointer is on, not used */ |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
220 &dummy_window, |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
221 |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
222 /* The position on that root window. */ |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
223 x, y, |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
224 |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
225 /* x/y in dummy_window coordinates, not used. */ |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
226 &dummy, &dummy, |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
227 |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
228 /* Modifier keys and pointer buttons, about which |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
229 we don't care. */ |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
230 (unsigned int *) &dummy); |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
231 |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
232 UNBLOCK_INPUT; |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
233 |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
234 /* xmenu_show expects window coordinates, not root window |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
235 coordinates. Translate. */ |
|
51212
332134065648
Make (some) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50938
diff
changeset
|
236 *x -= f->left_pos + FRAME_OUTER_TO_INNER_DIFF_X (f); |
|
332134065648
Make (some) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50938
diff
changeset
|
237 *y -= f->top_pos + FRAME_OUTER_TO_INNER_DIFF_Y (f); |
|
49302
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
238 } |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
239 |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
240 #endif /* HAVE_X_WINDOWS */ |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
241 |
|
6424
b3d22929b7c1
(Fx_popup_dialog, Fx_popup_menu): Require 2 args.
Richard M. Stallman <rms@gnu.org>
parents:
6406
diff
changeset
|
242 DEFUN ("x-popup-menu", Fx_popup_menu, Sx_popup_menu, 2, 2, 0, |
| 40993 | 243 doc: /* Pop up a deck-of-cards menu and return user's selection. |
|
39914
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
244 POSITION is a position specification. This is either a mouse button event |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
245 or a list ((XOFFSET YOFFSET) WINDOW) |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
246 where XOFFSET and YOFFSET are positions in pixels from the top left |
|
62012
76ffd04afaae
(Fx_popup_menu): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61984
diff
changeset
|
247 corner of WINDOW. (WINDOW may be a window or a frame object.) |
|
58824
8da33d42472e
* xmenu.c (Fx_popup_menu): Correct documentation about position.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58283
diff
changeset
|
248 This controls the position of the top left of the menu as a whole. |
|
39914
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
249 If POSITION is t, it means to use the current mouse position. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
250 |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
251 MENU is a specifier for a menu. For the simplest case, MENU is a keymap. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
252 The menu items come from key bindings that have a menu string as well as |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
253 a definition; actually, the "definition" in such a key binding looks like |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
254 \(STRING . REAL-DEFINITION). To give the menu a title, put a string into |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
255 the keymap as a top-level element. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
256 |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
257 If REAL-DEFINITION is nil, that puts a nonselectable string in the menu. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
258 Otherwise, REAL-DEFINITION should be a valid key binding definition. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
259 |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
260 You can also use a list of keymaps as MENU. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
261 Then each keymap makes a separate pane. |
|
62012
76ffd04afaae
(Fx_popup_menu): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61984
diff
changeset
|
262 |
|
76ffd04afaae
(Fx_popup_menu): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61984
diff
changeset
|
263 When MENU is a keymap or a list of keymaps, the return value is the |
|
76ffd04afaae
(Fx_popup_menu): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61984
diff
changeset
|
264 list of events corresponding to the user's choice. Note that |
|
76ffd04afaae
(Fx_popup_menu): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61984
diff
changeset
|
265 `x-popup-menu' does not actually execute the command bound to that |
|
76ffd04afaae
(Fx_popup_menu): Doc fix.
Luc Teirlinck <teirllm@auburn.edu>
parents:
61984
diff
changeset
|
266 sequence of events. |
|
39914
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
267 |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
268 Alternatively, you can specify a menu of multiple panes |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
269 with a list of the form (TITLE PANE1 PANE2...), |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
270 where each pane is a list of form (TITLE ITEM1 ITEM2...). |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
271 Each ITEM is normally a cons cell (STRING . VALUE); |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
272 but a string can appear as an item--that makes a nonselectable line |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
273 in the menu. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
274 With this form of menu, the return value is VALUE from the chosen item. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
275 |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
276 If POSITION is nil, don't display the menu at all, just precalculate the |
|
62090
cd1e4bc8e488
(Fx_popup_menu, Fx_popup_dialog): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
62012
diff
changeset
|
277 cached information about equivalent key sequences. |
|
cd1e4bc8e488
(Fx_popup_menu, Fx_popup_dialog): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
62012
diff
changeset
|
278 |
|
cd1e4bc8e488
(Fx_popup_menu, Fx_popup_dialog): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
62012
diff
changeset
|
279 If the user gets rid of the menu without making a valid choice, for |
|
cd1e4bc8e488
(Fx_popup_menu, Fx_popup_dialog): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
62012
diff
changeset
|
280 instance by clicking the mouse away from a valid choice or by typing |
|
cd1e4bc8e488
(Fx_popup_menu, Fx_popup_dialog): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
62012
diff
changeset
|
281 keyboard input, then this normally results in a quit and |
|
cd1e4bc8e488
(Fx_popup_menu, Fx_popup_dialog): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
62012
diff
changeset
|
282 `x-popup-menu' does not return. But if POSITION is a mouse button |
|
cd1e4bc8e488
(Fx_popup_menu, Fx_popup_dialog): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
62012
diff
changeset
|
283 event (indicating that the user invoked the menu with the mouse) then |
|
cd1e4bc8e488
(Fx_popup_menu, Fx_popup_dialog): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
62012
diff
changeset
|
284 no quit occurs and `x-popup-menu' returns nil. */) |
|
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39914
diff
changeset
|
285 (position, menu) |
|
1082
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
286 Lisp_Object position, menu; |
| 118 | 287 { |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
288 Lisp_Object keymap, tem; |
|
31829
43566b0aec59
Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents:
31465
diff
changeset
|
289 int xpos = 0, ypos = 0; |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
290 Lisp_Object title; |
|
61620
8449711f0c1c
(Fx_popup_menu): Initialize error_name to NULL.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
61619
diff
changeset
|
291 char *error_name = NULL; |
|
74070
e3259d353397
(Fx_popup_menu): Initialize selection.
Andreas Schwab <schwab@suse.de>
parents:
73941
diff
changeset
|
292 Lisp_Object selection = Qnil; |
|
40477
a56267e601e4
Include coding.h and charset.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40239
diff
changeset
|
293 FRAME_PTR f = NULL; |
| 118 | 294 Lisp_Object x, y, window; |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
295 int keymaps = 0; |
|
10757
2829c9840b0e
(xmenu_show, both versions): New arg for_click.
Richard M. Stallman <rms@gnu.org>
parents:
10716
diff
changeset
|
296 int for_click = 0; |
|
48113
6a09e4b41337
(unuse_menu_items): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46753
diff
changeset
|
297 int specpdl_count = SPECPDL_INDEX (); |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
298 struct gcpro gcpro1; |
| 118 | 299 |
|
14741
9f9c4d4581e4
Put most of file into HAVE_MENUS conditional.
Richard M. Stallman <rms@gnu.org>
parents:
14553
diff
changeset
|
300 #ifdef HAVE_MENUS |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
301 if (! NILP (position)) |
|
2147
1b6e54507323
(Fx_popup_menu): Allow a frame instead of a window, in arg.
Richard M. Stallman <rms@gnu.org>
parents:
2135
diff
changeset
|
302 { |
| 49322 | 303 int get_current_pos_p = 0; |
|
6291
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
304 check_x (); |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
305 |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
306 /* Decode the first argument: find the window and the coordinates. */ |
|
11614
fdd0d5bdd8c6
(popup_get_selection): Use x_non_menubar_window_to_frame.
Karl Heuer <kwzh@gnu.org>
parents:
11528
diff
changeset
|
307 if (EQ (position, Qt) |
|
32179
15fe3fd7b8fc
(Fx_popup_menu, Fx_popup_dialog): Check for tool-bar
Dave Love <fx@gnu.org>
parents:
31829
diff
changeset
|
308 || (CONSP (position) && (EQ (XCAR (position), Qmenu_bar) |
|
15fe3fd7b8fc
(Fx_popup_menu, Fx_popup_dialog): Check for tool-bar
Dave Love <fx@gnu.org>
parents:
31829
diff
changeset
|
309 || EQ (XCAR (position), Qtool_bar)))) |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
310 { |
| 49322 | 311 get_current_pos_p = 1; |
| 312 } | |
| 313 else | |
| 314 { | |
| 315 tem = Fcar (position); | |
| 316 if (CONSP (tem)) | |
| 317 { | |
| 318 window = Fcar (Fcdr (position)); | |
|
60583
44c9c79a2c7a
(ENCODE_MENU_STRING): Explicitly use string_make_unibyte.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59914
diff
changeset
|
319 x = XCAR (tem); |
|
44c9c79a2c7a
(ENCODE_MENU_STRING): Explicitly use string_make_unibyte.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59914
diff
changeset
|
320 y = Fcar (XCDR (tem)); |
| 49322 | 321 } |
| 322 else | |
| 323 { | |
| 324 for_click = 1; | |
| 325 tem = Fcar (Fcdr (position)); /* EVENT_START (position) */ | |
| 326 window = Fcar (tem); /* POSN_WINDOW (tem) */ | |
| 327 tem = Fcar (Fcdr (Fcdr (tem))); /* POSN_WINDOW_POSN (tem) */ | |
| 328 x = Fcar (tem); | |
| 329 y = Fcdr (tem); | |
| 330 } | |
| 331 | |
| 332 /* If a click happens in an external tool bar or a detached | |
| 333 tool bar, x and y is NIL. In that case, use the current | |
| 334 mouse position. This happens for the help button in the | |
| 335 tool bar. Ideally popup-menu should pass NIL to | |
| 336 this function, but it doesn't. */ | |
| 337 if (NILP (x) && NILP (y)) | |
| 338 get_current_pos_p = 1; | |
| 339 } | |
| 340 | |
| 341 if (get_current_pos_p) | |
| 342 { | |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
343 /* Use the mouse's current position. */ |
|
25680
841eb01263ef
(Fx_popup_menu): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
344 FRAME_PTR new_f = SELECTED_FRAME (); |
|
49302
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
345 #ifdef HAVE_X_WINDOWS |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
346 /* Can't use mouse_position_hook for X since it returns |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
347 coordinates relative to the window the mouse is in, |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
348 we need coordinates relative to the edit widget always. */ |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
349 if (new_f != 0) |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
350 { |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
351 int cur_x, cur_y; |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
352 |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
353 mouse_position_for_popup (new_f, &cur_x, &cur_y); |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
354 /* cur_x/y may be negative, so use make_number. */ |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
355 x = make_number (cur_x); |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
356 y = make_number (cur_y); |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
357 } |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
358 |
|
49302
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
359 #else /* not HAVE_X_WINDOWS */ |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
360 Lisp_Object bar_window; |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
361 enum scroll_bar_part part; |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
362 unsigned long time; |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
363 |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
364 if (mouse_position_hook) |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
365 (*mouse_position_hook) (&new_f, 1, &bar_window, |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
366 &part, &x, &y, &time); |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
367 #endif /* not HAVE_X_WINDOWS */ |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
368 |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
369 if (new_f != 0) |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
370 XSETFRAME (window, new_f); |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
371 else |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
372 { |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
373 window = selected_window; |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
374 XSETFASTINT (x, 0); |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
375 XSETFASTINT (y, 0); |
|
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
376 } |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
377 } |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
378 |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40477
diff
changeset
|
379 CHECK_NUMBER (x); |
|
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40477
diff
changeset
|
380 CHECK_NUMBER (y); |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
381 |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
382 /* Decode where to put the menu. */ |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
383 |
|
9102
7a73653817de
(menu_item_enabled_p, single_keymap_panes, Fx_popup_menu, Fx_popup_dialog):
Karl Heuer <kwzh@gnu.org>
parents:
8849
diff
changeset
|
384 if (FRAMEP (window)) |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
385 { |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
386 f = XFRAME (window); |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
387 xpos = 0; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
388 ypos = 0; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
389 } |
|
9102
7a73653817de
(menu_item_enabled_p, single_keymap_panes, Fx_popup_menu, Fx_popup_dialog):
Karl Heuer <kwzh@gnu.org>
parents:
8849
diff
changeset
|
390 else if (WINDOWP (window)) |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
391 { |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40477
diff
changeset
|
392 CHECK_LIVE_WINDOW (window); |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
393 f = XFRAME (WINDOW_FRAME (XWINDOW (window))); |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
394 |
|
51212
332134065648
Make (some) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50938
diff
changeset
|
395 xpos = WINDOW_LEFT_EDGE_X (XWINDOW (window)); |
|
332134065648
Make (some) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50938
diff
changeset
|
396 ypos = WINDOW_TOP_EDGE_Y (XWINDOW (window)); |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
397 } |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
398 else |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
399 /* ??? Not really clean; should be CHECK_WINDOW_OR_FRAME, |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
400 but I don't want to make one now. */ |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40477
diff
changeset
|
401 CHECK_WINDOW (window); |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
402 |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
403 xpos += XINT (x); |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
404 ypos += XINT (y); |
|
67703
7ae48da37b8f
(Fx_popup_menu): Set Vmenu_updating_frame to f if
Juri Linkov <juri@jurta.org>
parents:
67527
diff
changeset
|
405 |
|
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
406 if (! FRAME_X_P (f)) |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
407 error ("Can not put X menu on non-X terminal"); |
|
83423
b64b7e867d0a
Merged from miles@gnu.org--gnu-2005 (patch 677)
Karoly Lorentey <lorentey@elte.hu>
diff
changeset
|
408 |
|
67703
7ae48da37b8f
(Fx_popup_menu): Set Vmenu_updating_frame to f if
Juri Linkov <juri@jurta.org>
parents:
67527
diff
changeset
|
409 XSETFRAME (Vmenu_updating_frame, f); |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
410 } |
|
67703
7ae48da37b8f
(Fx_popup_menu): Set Vmenu_updating_frame to f if
Juri Linkov <juri@jurta.org>
parents:
67527
diff
changeset
|
411 else |
|
7ae48da37b8f
(Fx_popup_menu): Set Vmenu_updating_frame to f if
Juri Linkov <juri@jurta.org>
parents:
67527
diff
changeset
|
412 Vmenu_updating_frame = Qnil; |
|
14741
9f9c4d4581e4
Put most of file into HAVE_MENUS conditional.
Richard M. Stallman <rms@gnu.org>
parents:
14553
diff
changeset
|
413 #endif /* HAVE_MENUS */ |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
414 |
|
48113
6a09e4b41337
(unuse_menu_items): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46753
diff
changeset
|
415 record_unwind_protect (unuse_menu_items, Qnil); |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
416 title = Qnil; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
417 GCPRO1 (title); |
|
4627
340c18d50337
(Fx_popup_menu): Adjust coords so they are relative to the inner window.
Richard M. Stallman <rms@gnu.org>
parents:
3747
diff
changeset
|
418 |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
419 /* Decode the menu items from what was specified. */ |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
420 |
|
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32179
diff
changeset
|
421 keymap = get_keymap (menu, 0, 0); |
|
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32179
diff
changeset
|
422 if (CONSP (keymap)) |
|
1082
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
423 { |
|
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
424 /* We were given a keymap. Extract menu info from the keymap. */ |
|
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
425 Lisp_Object prompt; |
|
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
426 |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
427 /* Extract the detailed info to make one pane. */ |
|
6291
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
428 keymap_panes (&menu, 1, NILP (position)); |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
429 |
|
1082
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
430 /* Search for a string appearing directly as an element of the keymap. |
|
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
431 That string is the title of the menu. */ |
|
39690
38c1890338cc
(keymap_panes, Fx_popup_menu): Use Fkeymap_prompt.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
432 prompt = Fkeymap_prompt (keymap); |
|
16411
939831bf2103
(Fx_popup_menu): Give the menu a title when the menu is a single keymap.
Richard M. Stallman <rms@gnu.org>
parents:
15943
diff
changeset
|
433 if (NILP (title) && !NILP (prompt)) |
|
939831bf2103
(Fx_popup_menu): Give the menu a title when the menu is a single keymap.
Richard M. Stallman <rms@gnu.org>
parents:
15943
diff
changeset
|
434 title = prompt; |
|
1082
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
435 |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
436 /* Make that be the pane title of the first pane. */ |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
437 if (!NILP (prompt) && menu_items_n_panes >= 0) |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
438 XVECTOR (menu_items)->contents[MENU_ITEMS_PANE_NAME] = prompt; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
439 |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
440 keymaps = 1; |
|
1082
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
441 } |
|
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32179
diff
changeset
|
442 else if (CONSP (menu) && KEYMAPP (XCAR (menu))) |
|
1082
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
443 { |
|
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
444 /* We were given a list of keymaps. */ |
|
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
445 int nmaps = XFASTINT (Flength (menu)); |
|
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
446 Lisp_Object *maps |
|
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
447 = (Lisp_Object *) alloca (nmaps * sizeof (Lisp_Object)); |
|
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
448 int i; |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
449 |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
450 title = Qnil; |
|
1082
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
451 |
|
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
452 /* The first keymap that has a prompt string |
|
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
453 supplies the menu title. */ |
|
60583
44c9c79a2c7a
(ENCODE_MENU_STRING): Explicitly use string_make_unibyte.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59914
diff
changeset
|
454 for (tem = menu, i = 0; CONSP (tem); tem = XCDR (tem)) |
|
1082
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
455 { |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
456 Lisp_Object prompt; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
457 |
|
60583
44c9c79a2c7a
(ENCODE_MENU_STRING): Explicitly use string_make_unibyte.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59914
diff
changeset
|
458 maps[i++] = keymap = get_keymap (XCAR (tem), 1, 0); |
|
1082
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
459 |
|
39690
38c1890338cc
(keymap_panes, Fx_popup_menu): Use Fkeymap_prompt.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
460 prompt = Fkeymap_prompt (keymap); |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
461 if (NILP (title) && !NILP (prompt)) |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
462 title = prompt; |
|
1082
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
463 } |
|
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
464 |
|
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
465 /* Extract the detailed info to make one pane. */ |
|
6291
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
466 keymap_panes (maps, nmaps, NILP (position)); |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
467 |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
468 /* Make the title be the pane title of the first pane. */ |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
469 if (!NILP (title) && menu_items_n_panes >= 0) |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
470 XVECTOR (menu_items)->contents[MENU_ITEMS_PANE_NAME] = title; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
471 |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
472 keymaps = 1; |
|
1082
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
473 } |
|
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
474 else |
|
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
475 { |
|
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
476 /* We were given an old-fashioned menu. */ |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
477 title = Fcar (menu); |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40477
diff
changeset
|
478 CHECK_STRING (title); |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
479 |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
480 list_of_panes (Fcdr (menu)); |
|
1828
1463592a6463
* xmenu.c (Fx_popup_menu): Don't forget to turn the frame-relative
Jim Blandy <jimb@redhat.com>
parents:
1821
diff
changeset
|
481 |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
482 keymaps = 0; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
483 } |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
484 |
|
48113
6a09e4b41337
(unuse_menu_items): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46753
diff
changeset
|
485 unbind_to (specpdl_count, Qnil); |
|
6a09e4b41337
(unuse_menu_items): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46753
diff
changeset
|
486 |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
487 if (NILP (position)) |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
488 { |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
489 discard_menu_items (); |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
490 UNGCPRO; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
491 return Qnil; |
| 118 | 492 } |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
493 |
|
14741
9f9c4d4581e4
Put most of file into HAVE_MENUS conditional.
Richard M. Stallman <rms@gnu.org>
parents:
14553
diff
changeset
|
494 #ifdef HAVE_MENUS |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
495 /* Display them in a menu. */ |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
496 BLOCK_INPUT; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
497 |
|
11491
272baf4a077a
(xmenu_show, xdialog_show): Delete menubarp arg.
Richard M. Stallman <rms@gnu.org>
parents:
11449
diff
changeset
|
498 selection = xmenu_show (f, xpos, ypos, for_click, |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
499 keymaps, title, &error_name); |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
500 UNBLOCK_INPUT; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
501 |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
502 discard_menu_items (); |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
503 |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
504 UNGCPRO; |
|
14741
9f9c4d4581e4
Put most of file into HAVE_MENUS conditional.
Richard M. Stallman <rms@gnu.org>
parents:
14553
diff
changeset
|
505 #endif /* HAVE_MENUS */ |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
506 |
| 118 | 507 if (error_name) error (error_name); |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
508 return selection; |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
509 } |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
510 |
|
14741
9f9c4d4581e4
Put most of file into HAVE_MENUS conditional.
Richard M. Stallman <rms@gnu.org>
parents:
14553
diff
changeset
|
511 #ifdef HAVE_MENUS |
|
9f9c4d4581e4
Put most of file into HAVE_MENUS conditional.
Richard M. Stallman <rms@gnu.org>
parents:
14553
diff
changeset
|
512 |
|
62661
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
513 DEFUN ("x-popup-dialog", Fx_popup_dialog, Sx_popup_dialog, 2, 3, 0, |
| 40993 | 514 doc: /* Pop up a dialog box and return user's selection. |
|
39914
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
515 POSITION specifies which frame to use. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
516 This is normally a mouse button event or a window or frame. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
517 If POSITION is t, it means to use the frame the mouse is on. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
518 The dialog box appears in the middle of the specified frame. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
519 |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
520 CONTENTS specifies the alternatives to display in the dialog box. |
|
62661
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
521 It is a list of the form (DIALOG ITEM1 ITEM2...). |
|
39914
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
522 Each ITEM is a cons cell (STRING . VALUE). |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
523 The return value is VALUE from the chosen item. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
524 |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
525 An ITEM may also be just a string--that makes a nonselectable item. |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
526 An ITEM may also be nil--that means to put all preceding items |
|
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
527 on the left of the dialog box and all following items on the right. |
|
62090
cd1e4bc8e488
(Fx_popup_menu, Fx_popup_dialog): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
62012
diff
changeset
|
528 \(By default, approximately half appear on each side.) |
|
cd1e4bc8e488
(Fx_popup_menu, Fx_popup_dialog): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
62012
diff
changeset
|
529 |
|
62661
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
530 If HEADER is non-nil, the frame title for the box is "Information", |
|
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
531 otherwise it is "Question". |
|
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
532 |
|
62090
cd1e4bc8e488
(Fx_popup_menu, Fx_popup_dialog): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
62012
diff
changeset
|
533 If the user gets rid of the dialog box without making a valid choice, |
|
cd1e4bc8e488
(Fx_popup_menu, Fx_popup_dialog): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
62012
diff
changeset
|
534 for instance using the window manager, then this produces a quit and |
|
cd1e4bc8e488
(Fx_popup_menu, Fx_popup_dialog): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
62012
diff
changeset
|
535 `x-popup-dialog' does not return. */) |
|
62661
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
536 (position, contents, header) |
|
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
537 Lisp_Object position, contents, header; |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
538 { |
|
40477
a56267e601e4
Include coding.h and charset.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40239
diff
changeset
|
539 FRAME_PTR f = NULL; |
|
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
540 Lisp_Object window; |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
541 |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
542 check_x (); |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
543 |
|
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
544 /* Decode the first argument: find the window or frame to use. */ |
|
11907
0f03ad1cac1e
(Fx_popup_dialog): Treat (menu-bar) like t, for POSITION.
Karl Heuer <kwzh@gnu.org>
parents:
11898
diff
changeset
|
545 if (EQ (position, Qt) |
|
32179
15fe3fd7b8fc
(Fx_popup_menu, Fx_popup_dialog): Check for tool-bar
Dave Love <fx@gnu.org>
parents:
31829
diff
changeset
|
546 || (CONSP (position) && (EQ (XCAR (position), Qmenu_bar) |
|
15fe3fd7b8fc
(Fx_popup_menu, Fx_popup_dialog): Check for tool-bar
Dave Love <fx@gnu.org>
parents:
31829
diff
changeset
|
547 || EQ (XCAR (position), Qtool_bar)))) |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
548 { |
|
6653
14a0a3fe93fd
(Fx_popup_dialog): If POSITION is t, use selected frame.
Richard M. Stallman <rms@gnu.org>
parents:
6625
diff
changeset
|
549 #if 0 /* Using the frame the mouse is on may not be right. */ |
|
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
550 /* Use the mouse's current position. */ |
|
25680
841eb01263ef
(Fx_popup_menu): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
551 FRAME_PTR new_f = SELECTED_FRAME (); |
|
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
552 Lisp_Object bar_window; |
|
40477
a56267e601e4
Include coding.h and charset.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40239
diff
changeset
|
553 enum scroll_bar_part part; |
|
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
554 unsigned long time; |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
555 Lisp_Object x, y; |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
556 |
|
11125
dc78213dd2b3
(Fx_popup_menu): Pass 1 for `insist' arg.
Richard M. Stallman <rms@gnu.org>
parents:
10835
diff
changeset
|
557 (*mouse_position_hook) (&new_f, 1, &bar_window, &part, &x, &y, &time); |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
558 |
|
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
559 if (new_f != 0) |
|
9339
8a59acc95eea
(Fx_popup_menu, Fx_popup_dialog): Use new accessor macros instead of calling
Karl Heuer <kwzh@gnu.org>
parents:
9336
diff
changeset
|
560 XSETFRAME (window, new_f); |
|
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
561 else |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
562 window = selected_window; |
|
6653
14a0a3fe93fd
(Fx_popup_dialog): If POSITION is t, use selected frame.
Richard M. Stallman <rms@gnu.org>
parents:
6625
diff
changeset
|
563 #endif |
|
11907
0f03ad1cac1e
(Fx_popup_dialog): Treat (menu-bar) like t, for POSITION.
Karl Heuer <kwzh@gnu.org>
parents:
11898
diff
changeset
|
564 window = selected_window; |
|
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
565 } |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
566 else if (CONSP (position)) |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
567 { |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
568 Lisp_Object tem; |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
569 tem = Fcar (position); |
|
9102
7a73653817de
(menu_item_enabled_p, single_keymap_panes, Fx_popup_menu, Fx_popup_dialog):
Karl Heuer <kwzh@gnu.org>
parents:
8849
diff
changeset
|
570 if (CONSP (tem)) |
|
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
571 window = Fcar (Fcdr (position)); |
|
6426
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
572 else |
|
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
573 { |
|
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
574 tem = Fcar (Fcdr (position)); /* EVENT_START (position) */ |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
575 window = Fcar (tem); /* POSN_WINDOW (tem) */ |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
576 } |
|
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
577 } |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
578 else if (WINDOWP (position) || FRAMEP (position)) |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
579 window = position; |
|
15807
508ec69917b1
(pending_menu_activation): Don't initialize. Not static.
Richard M. Stallman <rms@gnu.org>
parents:
15795
diff
changeset
|
580 else |
|
508ec69917b1
(pending_menu_activation): Don't initialize. Not static.
Richard M. Stallman <rms@gnu.org>
parents:
15795
diff
changeset
|
581 window = Qnil; |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
582 |
|
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
583 /* Decode where to put the menu. */ |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
584 |
|
9102
7a73653817de
(menu_item_enabled_p, single_keymap_panes, Fx_popup_menu, Fx_popup_dialog):
Karl Heuer <kwzh@gnu.org>
parents:
8849
diff
changeset
|
585 if (FRAMEP (window)) |
|
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
586 f = XFRAME (window); |
|
9102
7a73653817de
(menu_item_enabled_p, single_keymap_panes, Fx_popup_menu, Fx_popup_dialog):
Karl Heuer <kwzh@gnu.org>
parents:
8849
diff
changeset
|
587 else if (WINDOWP (window)) |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
588 { |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40477
diff
changeset
|
589 CHECK_LIVE_WINDOW (window); |
|
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
590 f = XFRAME (WINDOW_FRAME (XWINDOW (window))); |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
591 } |
|
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
592 else |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
593 /* ??? Not really clean; should be CHECK_WINDOW_OR_FRAME, |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
594 but I don't want to make one now. */ |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40477
diff
changeset
|
595 CHECK_WINDOW (window); |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
596 |
|
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
597 if (! FRAME_X_P (f)) |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
598 error ("Can not put X dialog on non-X terminal"); |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
599 |
| 49322 | 600 #if ! defined (USE_X_TOOLKIT) && ! defined (USE_GTK) |
|
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
601 /* Display a menu with these alternatives |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
602 in the middle of frame F. */ |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
603 { |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
604 Lisp_Object x, y, frame, newpos; |
|
9339
8a59acc95eea
(Fx_popup_menu, Fx_popup_dialog): Use new accessor macros instead of calling
Karl Heuer <kwzh@gnu.org>
parents:
9336
diff
changeset
|
605 XSETFRAME (frame, f); |
|
8a59acc95eea
(Fx_popup_menu, Fx_popup_dialog): Use new accessor macros instead of calling
Karl Heuer <kwzh@gnu.org>
parents:
9336
diff
changeset
|
606 XSETINT (x, x_pixel_width (f) / 2); |
|
8a59acc95eea
(Fx_popup_menu, Fx_popup_dialog): Use new accessor macros instead of calling
Karl Heuer <kwzh@gnu.org>
parents:
9336
diff
changeset
|
607 XSETINT (y, x_pixel_height (f) / 2); |
|
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
608 newpos = Fcons (Fcons (x, Fcons (y, Qnil)), Fcons (frame, Qnil)); |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
609 |
|
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
610 return Fx_popup_menu (newpos, |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
611 Fcons (Fcar (contents), Fcons (contents, Qnil))); |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
612 } |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
613 #else |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
614 { |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
615 Lisp_Object title; |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
616 char *error_name; |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
617 Lisp_Object selection; |
|
48113
6a09e4b41337
(unuse_menu_items): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46753
diff
changeset
|
618 int specpdl_count = SPECPDL_INDEX (); |
|
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
619 |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
620 /* Decode the dialog items from what was specified. */ |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
621 title = Fcar (contents); |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40477
diff
changeset
|
622 CHECK_STRING (title); |
|
48113
6a09e4b41337
(unuse_menu_items): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46753
diff
changeset
|
623 record_unwind_protect (unuse_menu_items, Qnil); |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
624 |
|
53545
ed3e26153ee9
* xmenu.c (Fx_popup_dialog): Add an Ok button if no buttons are
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
53325
diff
changeset
|
625 if (NILP (Fcar (Fcdr (contents)))) |
|
ed3e26153ee9
* xmenu.c (Fx_popup_dialog): Add an Ok button if no buttons are
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
53325
diff
changeset
|
626 /* No buttons specified, add an "Ok" button so users can pop down |
|
ed3e26153ee9
* xmenu.c (Fx_popup_dialog): Add an Ok button if no buttons are
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
53325
diff
changeset
|
627 the dialog. Also, the lesstif/motif version crashes if there are |
|
ed3e26153ee9
* xmenu.c (Fx_popup_dialog): Add an Ok button if no buttons are
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
53325
diff
changeset
|
628 no buttons. */ |
|
ed3e26153ee9
* xmenu.c (Fx_popup_dialog): Add an Ok button if no buttons are
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
53325
diff
changeset
|
629 contents = Fcons (title, Fcons (Fcons (build_string ("Ok"), Qt), Qnil)); |
| 58171 | 630 |
|
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
631 list_of_panes (Fcons (contents, Qnil)); |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
632 |
|
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
633 /* Display them in a dialog box. */ |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
634 BLOCK_INPUT; |
|
62661
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
635 selection = xdialog_show (f, 0, title, header, &error_name); |
|
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
636 UNBLOCK_INPUT; |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
637 |
|
48113
6a09e4b41337
(unuse_menu_items): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46753
diff
changeset
|
638 unbind_to (specpdl_count, Qnil); |
|
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
639 discard_menu_items (); |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
640 |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
641 if (error_name) error (error_name); |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
642 return selection; |
|
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
643 } |
|
6325
d6817c9c0413
Undo previous change. Instead:
Richard M. Stallman <rms@gnu.org>
parents:
6324
diff
changeset
|
644 #endif |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
645 } |
|
58168
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
646 |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
647 |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
648 #ifndef MSDOS |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
649 |
|
58202
54c649507b74
* xfns.c (Fx_file_dialog): Call x_menu_in_use and x_menu_set_in_use.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58197
diff
changeset
|
650 /* Set menu_items_inuse so no other popup menu or dialog is created. */ |
|
54c649507b74
* xfns.c (Fx_file_dialog): Call x_menu_in_use and x_menu_set_in_use.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58197
diff
changeset
|
651 |
|
54c649507b74
* xfns.c (Fx_file_dialog): Call x_menu_in_use and x_menu_set_in_use.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58197
diff
changeset
|
652 void |
|
54c649507b74
* xfns.c (Fx_file_dialog): Call x_menu_in_use and x_menu_set_in_use.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58197
diff
changeset
|
653 x_menu_set_in_use (in_use) |
|
54c649507b74
* xfns.c (Fx_file_dialog): Call x_menu_in_use and x_menu_set_in_use.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58197
diff
changeset
|
654 int in_use; |
|
54c649507b74
* xfns.c (Fx_file_dialog): Call x_menu_in_use and x_menu_set_in_use.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58197
diff
changeset
|
655 { |
|
54c649507b74
* xfns.c (Fx_file_dialog): Call x_menu_in_use and x_menu_set_in_use.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58197
diff
changeset
|
656 menu_items_inuse = in_use ? Qt : Qnil; |
|
58283
c163562b2d59
* xmenu.c (x_menu_in_use): Removed.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58216
diff
changeset
|
657 popup_activated_flag = in_use; |
|
72854
f295b430aa3a
* xterm.c (x_initialize): Don't install Xt event timer here.
Chong Yidong <cyd@stupidchicken.com>
parents:
72757
diff
changeset
|
658 #ifdef USE_X_TOOLKIT |
|
f295b430aa3a
* xterm.c (x_initialize): Don't install Xt event timer here.
Chong Yidong <cyd@stupidchicken.com>
parents:
72757
diff
changeset
|
659 if (popup_activated_flag) |
|
f295b430aa3a
* xterm.c (x_initialize): Don't install Xt event timer here.
Chong Yidong <cyd@stupidchicken.com>
parents:
72757
diff
changeset
|
660 x_activate_timeout_atimer (); |
|
f295b430aa3a
* xterm.c (x_initialize): Don't install Xt event timer here.
Chong Yidong <cyd@stupidchicken.com>
parents:
72757
diff
changeset
|
661 #endif |
|
58202
54c649507b74
* xfns.c (Fx_file_dialog): Call x_menu_in_use and x_menu_set_in_use.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58197
diff
changeset
|
662 } |
|
54c649507b74
* xfns.c (Fx_file_dialog): Call x_menu_in_use and x_menu_set_in_use.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58197
diff
changeset
|
663 |
|
58168
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
664 /* Wait for an X event to arrive or for a timer to expire. */ |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
665 |
|
58202
54c649507b74
* xfns.c (Fx_file_dialog): Call x_menu_in_use and x_menu_set_in_use.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58197
diff
changeset
|
666 void |
|
58168
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
667 x_menu_wait_for_event (void *data) |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
668 { |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
669 extern EMACS_TIME timer_check P_ ((int)); |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
670 |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
671 /* Another way to do this is to register a timer callback, that can be |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
672 done in GTK and Xt. But we have to do it like this when using only X |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
673 anyway, and with callbacks we would have three variants for timer handling |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
674 instead of the small ifdefs below. */ |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
675 |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
676 while ( |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
677 #ifdef USE_X_TOOLKIT |
|
58170
66ace4a9a250
(pop_down_menu): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58169
diff
changeset
|
678 ! XtAppPending (Xt_app_con) |
|
58168
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
679 #elif defined USE_GTK |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
680 ! gtk_events_pending () |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
681 #else |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
682 ! XPending ((Display*) data) |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
683 #endif |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
684 ) |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
685 { |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
686 EMACS_TIME next_time = timer_check (1); |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
687 long secs = EMACS_SECS (next_time); |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
688 long usecs = EMACS_USECS (next_time); |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
689 SELECT_TYPE read_fds; |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
690 struct x_display_info *dpyinfo; |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
691 int n = 0; |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
692 |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
693 FD_ZERO (&read_fds); |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
694 for (dpyinfo = x_display_list; dpyinfo; dpyinfo = dpyinfo->next) |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
695 { |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
696 int fd = ConnectionNumber (dpyinfo->display); |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
697 FD_SET (fd, &read_fds); |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
698 if (fd > n) n = fd; |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
699 } |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
700 |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
701 if (secs < 0 || (secs == 0 && usecs == 0)) |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
702 { |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
703 /* Sometimes timer_check returns -1 (no timers) even if there are |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
704 timers. So do a timeout anyway. */ |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
705 EMACS_SET_SECS (next_time, 1); |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
706 EMACS_SET_USECS (next_time, 0); |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
707 } |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
708 |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
709 select (n + 1, &read_fds, (SELECT_TYPE *)0, (SELECT_TYPE *)0, &next_time); |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
710 } |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
711 } |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
712 #endif /* ! MSDOS */ |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
713 |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
714 |
| 49322 | 715 #if defined (USE_X_TOOLKIT) || defined (USE_GTK) |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
716 |
|
58170
66ace4a9a250
(pop_down_menu): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58169
diff
changeset
|
717 #ifdef USE_X_TOOLKIT |
|
66ace4a9a250
(pop_down_menu): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58169
diff
changeset
|
718 |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
719 /* Loop in Xt until the menu pulldown or dialog popup has been |
| 13821 | 720 popped down (deactivated). This is used for x-popup-menu |
|
48912
b0b74923fe41
(popup_get_selection): Now static. New arg DO_TIMERS.
Richard M. Stallman <rms@gnu.org>
parents:
48329
diff
changeset
|
721 and x-popup-dialog; it is not used for the menu bar. |
|
b0b74923fe41
(popup_get_selection): Now static. New arg DO_TIMERS.
Richard M. Stallman <rms@gnu.org>
parents:
48329
diff
changeset
|
722 |
|
11954
4117d74ba254
(popup_get_selection): Force deactivation if key pressed.
Karl Heuer <kwzh@gnu.org>
parents:
11918
diff
changeset
|
723 NOTE: All calls to popup_get_selection should be protected |
|
9236
583bb9211b2b
(popup_get_selection): Remove BLOCK_INPUT, UNBLOCK_INPUT since the
Paul Reilly <pmr@pajato.com>
parents:
9233
diff
changeset
|
724 with BLOCK_INPUT, UNBLOCK_INPUT wrappers. */ |
|
11449
fca5a32f7806
(popup_get_selection): Queue up events that aren't
Richard M. Stallman <rms@gnu.org>
parents:
11266
diff
changeset
|
725 |
|
48912
b0b74923fe41
(popup_get_selection): Now static. New arg DO_TIMERS.
Richard M. Stallman <rms@gnu.org>
parents:
48329
diff
changeset
|
726 static void |
|
59156
03a6e350cf4d
(popup_get_selection): Remove parameter down_on_keypress.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
59155
diff
changeset
|
727 popup_get_selection (initial_event, dpyinfo, id, do_timers) |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
728 XEvent *initial_event; |
|
11449
fca5a32f7806
(popup_get_selection): Queue up events that aren't
Richard M. Stallman <rms@gnu.org>
parents:
11266
diff
changeset
|
729 struct x_display_info *dpyinfo; |
|
11954
4117d74ba254
(popup_get_selection): Force deactivation if key pressed.
Karl Heuer <kwzh@gnu.org>
parents:
11918
diff
changeset
|
730 LWLIB_ID id; |
|
57965
9b14127a651a
* eval.c (Feval): Remove check for INPUT_BLOCKED_P.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57928
diff
changeset
|
731 int do_timers; |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
732 { |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
733 XEvent event; |
|
49116
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
734 |
|
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
735 while (popup_activated_flag) |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
736 { |
| 59107 | 737 if (initial_event) |
|
49116
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
738 { |
|
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
739 event = *initial_event; |
|
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
740 initial_event = 0; |
|
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
741 } |
|
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
742 else |
|
58168
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
743 { |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
744 if (do_timers) x_menu_wait_for_event (0); |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
745 XtAppNextEvent (Xt_app_con, &event); |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
746 } |
|
49116
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
747 |
|
15628
f74c79dcaf8d
(popup_get_selection): For a ButtonRelease on the proper
Karl Heuer <kwzh@gnu.org>
parents:
15428
diff
changeset
|
748 /* Make sure we don't consider buttons grabbed after menu goes. |
|
49116
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
749 And make sure to deactivate for any ButtonRelease, |
|
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
750 even if XtDispatchEvent doesn't do that. */ |
|
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
751 if (event.type == ButtonRelease |
|
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
752 && dpyinfo->display == event.xbutton.display) |
|
15628
f74c79dcaf8d
(popup_get_selection): For a ButtonRelease on the proper
Karl Heuer <kwzh@gnu.org>
parents:
15428
diff
changeset
|
753 { |
|
f74c79dcaf8d
(popup_get_selection): For a ButtonRelease on the proper
Karl Heuer <kwzh@gnu.org>
parents:
15428
diff
changeset
|
754 dpyinfo->grabbed &= ~(1 << event.xbutton.button); |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
755 #ifdef USE_MOTIF /* Pretending that the event came from a |
|
49116
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
756 Btn1Down seems the only way to convince Motif to |
|
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
757 activate its callbacks; setting the XmNmenuPost |
|
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
758 isn't working. --marcus@sysc.pdx.edu. */ |
|
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
759 event.xbutton.button = 1; |
|
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
760 /* Motif only pops down menus when no Ctrl, Alt or Mod |
|
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
761 key is pressed and the button is released. So reset key state |
|
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
762 so Motif thinks this is the case. */ |
|
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
763 event.xbutton.state = 0; |
|
15839
e66ccb471d26
(xmenu_show): Set dummy.state.
Richard M. Stallman <rms@gnu.org>
parents:
15807
diff
changeset
|
764 #endif |
|
15628
f74c79dcaf8d
(popup_get_selection): For a ButtonRelease on the proper
Karl Heuer <kwzh@gnu.org>
parents:
15428
diff
changeset
|
765 } |
|
59155
6690f246cffe
* xmenu.c (popup_get_selection): Only pop down dialogs
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
59107
diff
changeset
|
766 /* Pop down on C-g and Escape. */ |
|
11954
4117d74ba254
(popup_get_selection): Force deactivation if key pressed.
Karl Heuer <kwzh@gnu.org>
parents:
11918
diff
changeset
|
767 else if (event.type == KeyPress |
|
15628
f74c79dcaf8d
(popup_get_selection): For a ButtonRelease on the proper
Karl Heuer <kwzh@gnu.org>
parents:
15428
diff
changeset
|
768 && dpyinfo->display == event.xbutton.display) |
|
49116
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
769 { |
|
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
770 KeySym keysym = XLookupKeysym (&event.xkey, 0); |
|
59102
0096c58ce34a
* xmenu.c (popup_get_selection): Pop down on C-g.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58824
diff
changeset
|
771 |
|
59155
6690f246cffe
* xmenu.c (popup_get_selection): Only pop down dialogs
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
59107
diff
changeset
|
772 if ((keysym == XK_g && (event.xkey.state & ControlMask) != 0) |
|
6690f246cffe
* xmenu.c (popup_get_selection): Only pop down dialogs
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
59107
diff
changeset
|
773 || keysym == XK_Escape) /* Any escape, ignore modifiers. */ |
|
59102
0096c58ce34a
* xmenu.c (popup_get_selection): Pop down on C-g.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58824
diff
changeset
|
774 popup_activated_flag = 0; |
|
49116
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
775 } |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
776 |
|
49116
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
777 x_dispatch_event (&event, event.xany.display); |
|
11449
fca5a32f7806
(popup_get_selection): Queue up events that aren't
Richard M. Stallman <rms@gnu.org>
parents:
11266
diff
changeset
|
778 } |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
779 } |
|
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
780 |
| 83542 | 781 DEFUN ("x-menu-bar-open-internal", Fx_menu_bar_open_internal, Sx_menu_bar_open_internal, 0, 1, "i", |
|
71057
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
782 doc: /* Start key navigation of the menu bar in FRAME. |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
783 This initially opens the first menu bar item and you can then navigate with the |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
784 arrow keys, select a menu entry with the return key or cancel with the |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
785 escape key. If FRAME has no menu bar this function does nothing. |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
786 |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
787 If FRAME is nil or not given, use the selected frame. */) |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
788 (frame) |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
789 Lisp_Object frame; |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
790 { |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
791 XEvent ev; |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
792 FRAME_PTR f = check_x_frame (frame); |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
793 Widget menubar; |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
794 BLOCK_INPUT; |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
795 |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
796 if (FRAME_EXTERNAL_MENU_BAR (f)) |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
797 set_frame_menubar (f, 0, 1); |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
798 |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
799 menubar = FRAME_X_OUTPUT (f)->menubar_widget; |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
800 if (menubar) |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
801 { |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
802 Window child; |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
803 int error_p = 0; |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
804 |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
805 x_catch_errors (FRAME_X_DISPLAY (f)); |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
806 memset (&ev, 0, sizeof ev); |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
807 ev.xbutton.display = FRAME_X_DISPLAY (f); |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
808 ev.xbutton.window = XtWindow (menubar); |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
809 ev.xbutton.root = FRAME_X_DISPLAY_INFO (f)->root_window; |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
810 ev.xbutton.time = XtLastTimestampProcessed (FRAME_X_DISPLAY (f)); |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
811 ev.xbutton.button = Button1; |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
812 ev.xbutton.x = ev.xbutton.y = FRAME_MENUBAR_HEIGHT (f) / 2; |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
813 ev.xbutton.same_screen = True; |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
814 |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
815 #ifdef USE_MOTIF |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
816 { |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
817 Arg al[2]; |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
818 WidgetList list; |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
819 Cardinal nr; |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
820 XtSetArg (al[0], XtNchildren, &list); |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
821 XtSetArg (al[1], XtNnumChildren, &nr); |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
822 XtGetValues (menubar, al, 2); |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
823 ev.xbutton.window = XtWindow (list[0]); |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
824 } |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
825 #endif |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
826 |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
827 XTranslateCoordinates (FRAME_X_DISPLAY (f), |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
828 /* From-window, to-window. */ |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
829 ev.xbutton.window, ev.xbutton.root, |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
830 |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
831 /* From-position, to-position. */ |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
832 ev.xbutton.x, ev.xbutton.y, |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
833 &ev.xbutton.x_root, &ev.xbutton.y_root, |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
834 |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
835 /* Child of win. */ |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
836 &child); |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
837 error_p = x_had_errors_p (FRAME_X_DISPLAY (f)); |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
838 x_uncatch_errors (); |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
839 |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
840 if (! error_p) |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
841 { |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
842 ev.type = ButtonPress; |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
843 ev.xbutton.state = 0; |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
844 |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
845 XtDispatchEvent (&ev); |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
846 ev.xbutton.type = ButtonRelease; |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
847 ev.xbutton.state = Button1Mask; |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
848 XtDispatchEvent (&ev); |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
849 } |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
850 } |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
851 |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
852 UNBLOCK_INPUT; |
|
71094
bff9557e8c24
(Fmenu_bar_start): Return a value.
Andreas Schwab <schwab@suse.de>
parents:
71057
diff
changeset
|
853 |
|
bff9557e8c24
(Fmenu_bar_start): Return a value.
Andreas Schwab <schwab@suse.de>
parents:
71057
diff
changeset
|
854 return Qnil; |
|
71057
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
855 } |
| 49322 | 856 #endif /* USE_X_TOOLKIT */ |
| 857 | |
|
71057
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
858 |
| 49322 | 859 #ifdef USE_GTK |
| 83542 | 860 DEFUN ("x-menu-bar-open-internal", Fx_menu_bar_open_internal, Sx_menu_bar_open_internal, 0, 1, "i", |
|
71057
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
861 doc: /* Start key navigation of the menu bar in FRAME. |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
862 This initially opens the first menu bar item and you can then navigate with the |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
863 arrow keys, select a menu entry with the return key or cancel with the |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
864 escape key. If FRAME has no menu bar this function does nothing. |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
865 |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
866 If FRAME is nil or not given, use the selected frame. */) |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
867 (frame) |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
868 Lisp_Object frame; |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
869 { |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
870 GtkWidget *menubar; |
|
73662
ea2e12adb144
* xmenu.c (Fmenu_bar_open): Declare variable before BLOCK_INPUT to
Chong Yidong <cyd@stupidchicken.com>
parents:
73320
diff
changeset
|
871 FRAME_PTR f; |
|
ea2e12adb144
* xmenu.c (Fmenu_bar_open): Declare variable before BLOCK_INPUT to
Chong Yidong <cyd@stupidchicken.com>
parents:
73320
diff
changeset
|
872 |
| 73715 | 873 /* gcc 2.95 doesn't accept the FRAME_PTR declaration after |
| 874 BLOCK_INPUT. */ | |
| 875 | |
|
71057
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
876 BLOCK_INPUT; |
|
73662
ea2e12adb144
* xmenu.c (Fmenu_bar_open): Declare variable before BLOCK_INPUT to
Chong Yidong <cyd@stupidchicken.com>
parents:
73320
diff
changeset
|
877 f = check_x_frame (frame); |
|
71057
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
878 |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
879 if (FRAME_EXTERNAL_MENU_BAR (f)) |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
880 set_frame_menubar (f, 0, 1); |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
881 |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
882 menubar = FRAME_X_OUTPUT (f)->menubar_widget; |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
883 if (menubar) |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
884 { |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
885 /* Activate the first menu. */ |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
886 GList *children = gtk_container_get_children (GTK_CONTAINER (menubar)); |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
887 |
|
97075
864ac210d576
* xmenu.c (Fx_menu_bar_open_internal): Use activate_item signal to
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
96608
diff
changeset
|
888 if (children) |
|
864ac210d576
* xmenu.c (Fx_menu_bar_open_internal): Use activate_item signal to
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
96608
diff
changeset
|
889 { |
|
864ac210d576
* xmenu.c (Fx_menu_bar_open_internal): Use activate_item signal to
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
96608
diff
changeset
|
890 g_signal_emit_by_name (children->data, "activate_item"); |
|
864ac210d576
* xmenu.c (Fx_menu_bar_open_internal): Use activate_item signal to
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
96608
diff
changeset
|
891 popup_activated_flag = 1; |
|
864ac210d576
* xmenu.c (Fx_menu_bar_open_internal): Use activate_item signal to
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
96608
diff
changeset
|
892 g_list_free (children); |
|
864ac210d576
* xmenu.c (Fx_menu_bar_open_internal): Use activate_item signal to
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
96608
diff
changeset
|
893 } |
|
71057
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
894 } |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
895 UNBLOCK_INPUT; |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
896 |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
897 return Qnil; |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
898 } |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
899 |
| 49322 | 900 /* Loop util popup_activated_flag is set to zero in a callback. |
| 901 Used for popup menus and dialogs. */ | |
|
58170
66ace4a9a250
(pop_down_menu): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58169
diff
changeset
|
902 |
| 49322 | 903 static void |
|
58170
66ace4a9a250
(pop_down_menu): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58169
diff
changeset
|
904 popup_widget_loop (do_timers, widget) |
|
58168
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
905 int do_timers; |
|
58170
66ace4a9a250
(pop_down_menu): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58169
diff
changeset
|
906 GtkWidget *widget; |
| 49322 | 907 { |
| 908 ++popup_activated_flag; | |
| 909 | |
| 910 /* Process events in the Gtk event loop until done. */ | |
| 911 while (popup_activated_flag) | |
| 912 { | |
|
58168
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
913 if (do_timers) x_menu_wait_for_event (0); |
| 49322 | 914 gtk_main_iteration (); |
| 915 } | |
| 916 } | |
| 917 #endif | |
| 918 | |
| 12661 | 919 /* Activate the menu bar of frame F. |
| 920 This is called from keyboard.c when it gets the | |
|
45803
9484de301252
Rename enum event_kind items.
Pavel Jan?k <Pavel@Janik.cz>
parents:
42588
diff
changeset
|
921 MENU_BAR_ACTIVATE_EVENT out of the Emacs event queue. |
| 12661 | 922 |
| 923 To activate the menu bar, we use the X button-press event | |
|
15710
85d87cd0f655
(x_activate_menubar): Allow any event, not just ButtonPress.
Karl Heuer <kwzh@gnu.org>
parents:
15628
diff
changeset
|
924 that was saved in saved_menu_event. |
| 12661 | 925 That makes the toolkit do its thing. |
| 926 | |
| 927 But first we recompute the menu bar contents (the whole tree). | |
| 928 | |
| 929 The reason for saving the button event until here, instead of | |
| 930 passing it to the toolkit right away, is that we can safely | |
| 931 execute Lisp code. */ | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
932 |
| 21514 | 933 void |
| 12661 | 934 x_activate_menubar (f) |
| 935 FRAME_PTR f; | |
| 936 { | |
|
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
937 if (! FRAME_X_P (f)) |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
938 abort (); |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
939 |
|
15710
85d87cd0f655
(x_activate_menubar): Allow any event, not just ButtonPress.
Karl Heuer <kwzh@gnu.org>
parents:
15628
diff
changeset
|
940 if (!f->output_data.x->saved_menu_event->type) |
| 12661 | 941 return; |
| 942 | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
943 #ifdef USE_GTK |
|
53069
1218a42792ea
Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
52981
diff
changeset
|
944 if (! xg_win_to_widget (FRAME_X_DISPLAY (f), |
|
1218a42792ea
Implement multiple display handling for GTK.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
52981
diff
changeset
|
945 f->output_data.x->saved_menu_event->xany.window)) |
| 49322 | 946 return; |
| 947 #endif | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
948 |
|
15807
508ec69917b1
(pending_menu_activation): Don't initialize. Not static.
Richard M. Stallman <rms@gnu.org>
parents:
15795
diff
changeset
|
949 set_frame_menubar (f, 0, 1); |
| 12661 | 950 BLOCK_INPUT; |
| 49322 | 951 #ifdef USE_GTK |
| 952 XPutBackEvent (f->output_data.x->display_info->display, | |
| 953 f->output_data.x->saved_menu_event); | |
| 954 popup_activated_flag = 1; | |
| 955 #else | |
|
48113
6a09e4b41337
(unuse_menu_items): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46753
diff
changeset
|
956 XtDispatchEvent (f->output_data.x->saved_menu_event); |
| 49322 | 957 #endif |
| 12661 | 958 UNBLOCK_INPUT; |
|
15807
508ec69917b1
(pending_menu_activation): Don't initialize. Not static.
Richard M. Stallman <rms@gnu.org>
parents:
15795
diff
changeset
|
959 #ifdef USE_MOTIF |
|
15792
feeb1f7c1cec
(pending_menu_activation): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15785
diff
changeset
|
960 if (f->output_data.x->saved_menu_event->type == ButtonRelease) |
|
feeb1f7c1cec
(pending_menu_activation): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15785
diff
changeset
|
961 pending_menu_activation = 1; |
|
15807
508ec69917b1
(pending_menu_activation): Don't initialize. Not static.
Richard M. Stallman <rms@gnu.org>
parents:
15795
diff
changeset
|
962 #endif |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
963 |
| 12661 | 964 /* Ignore this if we get it a second time. */ |
|
15710
85d87cd0f655
(x_activate_menubar): Allow any event, not just ButtonPress.
Karl Heuer <kwzh@gnu.org>
parents:
15628
diff
changeset
|
965 f->output_data.x->saved_menu_event->type = 0; |
| 12661 | 966 } |
| 967 | |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
968 /* This callback is invoked when the user selects a menubar cascade |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
969 pushbutton, but before the pulldown menu is posted. */ |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
970 |
| 49322 | 971 #ifndef USE_GTK |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
972 static void |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
973 popup_activate_callback (widget, id, client_data) |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
974 Widget widget; |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
975 LWLIB_ID id; |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
976 XtPointer client_data; |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
977 { |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
978 popup_activated_flag = 1; |
|
72854
f295b430aa3a
* xterm.c (x_initialize): Don't install Xt event timer here.
Chong Yidong <cyd@stupidchicken.com>
parents:
72757
diff
changeset
|
979 #ifdef USE_X_TOOLKIT |
|
f295b430aa3a
* xterm.c (x_initialize): Don't install Xt event timer here.
Chong Yidong <cyd@stupidchicken.com>
parents:
72757
diff
changeset
|
980 x_activate_timeout_atimer (); |
|
f295b430aa3a
* xterm.c (x_initialize): Don't install Xt event timer here.
Chong Yidong <cyd@stupidchicken.com>
parents:
72757
diff
changeset
|
981 #endif |
|
27425
e575223479a1
(popup_activated_flag): Make externally visible.
Gerd Moellmann <gerd@gnu.org>
parents:
27341
diff
changeset
|
982 } |
| 49322 | 983 #endif |
|
27425
e575223479a1
(popup_activated_flag): Make externally visible.
Gerd Moellmann <gerd@gnu.org>
parents:
27341
diff
changeset
|
984 |
|
e575223479a1
(popup_activated_flag): Make externally visible.
Gerd Moellmann <gerd@gnu.org>
parents:
27341
diff
changeset
|
985 /* This callback is invoked when a dialog or menu is finished being |
|
e575223479a1
(popup_activated_flag): Make externally visible.
Gerd Moellmann <gerd@gnu.org>
parents:
27341
diff
changeset
|
986 used and has been unposted. */ |
|
e575223479a1
(popup_activated_flag): Make externally visible.
Gerd Moellmann <gerd@gnu.org>
parents:
27341
diff
changeset
|
987 |
| 49322 | 988 #ifdef USE_GTK |
| 989 static void | |
| 990 popup_deactivate_callback (widget, client_data) | |
| 991 GtkWidget *widget; | |
| 992 gpointer client_data; | |
| 993 { | |
| 994 popup_activated_flag = 0; | |
| 995 } | |
| 996 #else | |
|
27425
e575223479a1
(popup_activated_flag): Make externally visible.
Gerd Moellmann <gerd@gnu.org>
parents:
27341
diff
changeset
|
997 static void |
|
e575223479a1
(popup_activated_flag): Make externally visible.
Gerd Moellmann <gerd@gnu.org>
parents:
27341
diff
changeset
|
998 popup_deactivate_callback (widget, id, client_data) |
|
e575223479a1
(popup_activated_flag): Make externally visible.
Gerd Moellmann <gerd@gnu.org>
parents:
27341
diff
changeset
|
999 Widget widget; |
|
e575223479a1
(popup_activated_flag): Make externally visible.
Gerd Moellmann <gerd@gnu.org>
parents:
27341
diff
changeset
|
1000 LWLIB_ID id; |
|
e575223479a1
(popup_activated_flag): Make externally visible.
Gerd Moellmann <gerd@gnu.org>
parents:
27341
diff
changeset
|
1001 XtPointer client_data; |
|
e575223479a1
(popup_activated_flag): Make externally visible.
Gerd Moellmann <gerd@gnu.org>
parents:
27341
diff
changeset
|
1002 { |
|
e575223479a1
(popup_activated_flag): Make externally visible.
Gerd Moellmann <gerd@gnu.org>
parents:
27341
diff
changeset
|
1003 popup_activated_flag = 0; |
| 118 | 1004 } |
| 49322 | 1005 #endif |
| 1006 | |
| 1007 | |
| 1008 /* Function that finds the frame for WIDGET and shows the HELP text | |
| 1009 for that widget. | |
| 1010 F is the frame if known, or NULL if not known. */ | |
| 1011 static void | |
| 1012 show_help_event (f, widget, help) | |
| 1013 FRAME_PTR f; | |
| 1014 xt_or_gtk_widget widget; | |
| 1015 Lisp_Object help; | |
|
27341
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
1016 { |
| 49322 | 1017 Lisp_Object frame; |
| 1018 | |
|
27341
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
1019 if (f) |
|
30472
0c982ed8515f
(menu_highlight_callback): Call show_help_echo directly
Gerd Moellmann <gerd@gnu.org>
parents:
30420
diff
changeset
|
1020 { |
|
0c982ed8515f
(menu_highlight_callback): Call show_help_echo directly
Gerd Moellmann <gerd@gnu.org>
parents:
30420
diff
changeset
|
1021 XSETFRAME (frame, f); |
|
0c982ed8515f
(menu_highlight_callback): Call show_help_echo directly
Gerd Moellmann <gerd@gnu.org>
parents:
30420
diff
changeset
|
1022 kbd_buffer_store_help_event (frame, help); |
|
0c982ed8515f
(menu_highlight_callback): Call show_help_echo directly
Gerd Moellmann <gerd@gnu.org>
parents:
30420
diff
changeset
|
1023 } |
|
27341
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
1024 else |
|
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
1025 { |
|
53325
8e8832ef3963
(show_help_event): Remove unused code.
Kim F. Storm <storm@cua.dk>
parents:
53069
diff
changeset
|
1026 #if 0 /* This code doesn't do anything useful. ++kfs */ |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1027 /* WIDGET is the popup menu. It's parent is the frame's |
|
27341
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
1028 widget. See which frame that is. */ |
| 49322 | 1029 xt_or_gtk_widget frame_widget = XtParent (widget); |
|
27341
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
1030 Lisp_Object tail; |
|
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
1031 |
|
90970
3371fc48749b
Replace uses of GC_* macros with the non-GC_ versions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
90951
diff
changeset
|
1032 for (tail = Vframe_list; CONSP (tail); tail = XCDR (tail)) |
|
27341
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
1033 { |
|
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
1034 frame = XCAR (tail); |
|
90970
3371fc48749b
Replace uses of GC_* macros with the non-GC_ versions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
90951
diff
changeset
|
1035 if (FRAMEP (frame) |
|
27341
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
1036 && (f = XFRAME (frame), |
|
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
1037 FRAME_X_P (f) && f->output_data.x->widget == frame_widget)) |
|
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
1038 break; |
|
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
1039 } |
|
53325
8e8832ef3963
(show_help_event): Remove unused code.
Kim F. Storm <storm@cua.dk>
parents:
53069
diff
changeset
|
1040 #endif |
|
30472
0c982ed8515f
(menu_highlight_callback): Call show_help_echo directly
Gerd Moellmann <gerd@gnu.org>
parents:
30420
diff
changeset
|
1041 show_help_echo (help, Qnil, Qnil, Qnil, 1); |
|
27341
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
1042 } |
|
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
1043 } |
|
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
1044 |
| 49322 | 1045 /* Callback called when menu items are highlighted/unhighlighted |
| 1046 while moving the mouse over them. WIDGET is the menu bar or menu | |
| 1047 popup widget. ID is its LWLIB_ID. CALL_DATA contains a pointer to | |
| 1048 the data structure for the menu item, or null in case of | |
| 1049 unhighlighting. */ | |
| 1050 | |
| 1051 #ifdef USE_GTK | |
| 1052 void | |
| 1053 menu_highlight_callback (widget, call_data) | |
| 1054 GtkWidget *widget; | |
| 1055 gpointer call_data; | |
| 1056 { | |
| 1057 xg_menu_item_cb_data *cb_data; | |
| 1058 Lisp_Object help; | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1059 |
| 49322 | 1060 cb_data = (xg_menu_item_cb_data*) g_object_get_data (G_OBJECT (widget), |
| 1061 XG_ITEM_DATA); | |
| 1062 if (! cb_data) return; | |
| 1063 | |
| 1064 help = call_data ? cb_data->help : Qnil; | |
| 1065 | |
| 1066 /* If popup_activated_flag is greater than 1 we are in a popup menu. | |
| 1067 Don't show help for them, they won't appear before the | |
| 1068 popup is popped down. */ | |
| 1069 if (popup_activated_flag <= 1) | |
| 1070 show_help_event (cb_data->cl_data->f, widget, help); | |
| 1071 } | |
| 1072 #else | |
| 1073 void | |
| 1074 menu_highlight_callback (widget, id, call_data) | |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1075 Widget widget; |
|
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1076 LWLIB_ID id; |
| 49322 | 1077 void *call_data; |
| 1078 { | |
| 1079 struct frame *f; | |
| 1080 Lisp_Object help; | |
| 1081 | |
| 1082 widget_value *wv = (widget_value *) call_data; | |
| 1083 | |
| 1084 help = wv ? wv->help : Qnil; | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1085 |
| 49322 | 1086 /* Determine the frame for the help event. */ |
| 1087 f = menubar_id_to_frame (id); | |
| 1088 | |
| 1089 show_help_event (f, widget, help); | |
| 1090 } | |
| 1091 #endif | |
| 1092 | |
| 1093 #ifdef USE_GTK | |
| 1094 /* Gtk calls callbacks just because we tell it what item should be | |
| 1095 selected in a radio group. If this variable is set to a non-zero | |
| 1096 value, we are creating menus and don't want callbacks right now. | |
| 1097 */ | |
| 1098 static int xg_crazy_callback_abort; | |
| 1099 | |
| 1100 /* This callback is called from the menu bar pulldown menu | |
| 1101 when the user makes a selection. | |
| 1102 Figure out what the user chose | |
| 1103 and put the appropriate events into the keyboard buffer. */ | |
| 1104 static void | |
| 1105 menubar_selection_callback (widget, client_data) | |
| 1106 GtkWidget *widget; | |
| 1107 gpointer client_data; | |
| 1108 { | |
| 1109 xg_menu_item_cb_data *cb_data = (xg_menu_item_cb_data*) client_data; | |
| 1110 | |
| 1111 if (xg_crazy_callback_abort) | |
| 1112 return; | |
| 1113 | |
| 1114 if (! cb_data || ! cb_data->cl_data || ! cb_data->cl_data->f) | |
| 1115 return; | |
| 1116 | |
|
67527
88807d05a058
* xmenu.c (menubar_selection_callback): Do nothing if the callback
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
64770
diff
changeset
|
1117 /* For a group of radio buttons, GTK calls the selection callback first |
|
88807d05a058
* xmenu.c (menubar_selection_callback): Do nothing if the callback
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
64770
diff
changeset
|
1118 for the item that was active before the selection and then for the one that |
|
88807d05a058
* xmenu.c (menubar_selection_callback): Do nothing if the callback
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
64770
diff
changeset
|
1119 is active after the selection. For C-h k this means we get the help on |
|
88807d05a058
* xmenu.c (menubar_selection_callback): Do nothing if the callback
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
64770
diff
changeset
|
1120 the deselected item and then the selected item is executed. Prevent that |
|
88807d05a058
* xmenu.c (menubar_selection_callback): Do nothing if the callback
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
64770
diff
changeset
|
1121 by ignoring the non-active item. */ |
|
88807d05a058
* xmenu.c (menubar_selection_callback): Do nothing if the callback
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
64770
diff
changeset
|
1122 if (GTK_IS_RADIO_MENU_ITEM (widget) |
|
88807d05a058
* xmenu.c (menubar_selection_callback): Do nothing if the callback
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
64770
diff
changeset
|
1123 && ! gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (widget))) |
|
88807d05a058
* xmenu.c (menubar_selection_callback): Do nothing if the callback
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
64770
diff
changeset
|
1124 return; |
|
88807d05a058
* xmenu.c (menubar_selection_callback): Do nothing if the callback
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
64770
diff
changeset
|
1125 |
|
59912
ef2f9fc4fd42
* xmenu.c (menubar_selection_callback): Force out GTK buffered
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
59415
diff
changeset
|
1126 /* When a menu is popped down, X generates a focus event (i.e. focus |
|
ef2f9fc4fd42
* xmenu.c (menubar_selection_callback): Force out GTK buffered
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
59415
diff
changeset
|
1127 goes back to the frame below the menu). Since GTK buffers events, |
|
ef2f9fc4fd42
* xmenu.c (menubar_selection_callback): Force out GTK buffered
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
59415
diff
changeset
|
1128 we force it out here before the menu selection event. Otherwise |
|
ef2f9fc4fd42
* xmenu.c (menubar_selection_callback): Force out GTK buffered
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
59415
diff
changeset
|
1129 sit-for will exit at once if the focus event follows the menu selection |
|
ef2f9fc4fd42
* xmenu.c (menubar_selection_callback): Force out GTK buffered
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
59415
diff
changeset
|
1130 event. */ |
|
ef2f9fc4fd42
* xmenu.c (menubar_selection_callback): Force out GTK buffered
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
59415
diff
changeset
|
1131 |
|
ef2f9fc4fd42
* xmenu.c (menubar_selection_callback): Force out GTK buffered
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
59415
diff
changeset
|
1132 BLOCK_INPUT; |
|
ef2f9fc4fd42
* xmenu.c (menubar_selection_callback): Force out GTK buffered
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
59415
diff
changeset
|
1133 while (gtk_events_pending ()) |
|
ef2f9fc4fd42
* xmenu.c (menubar_selection_callback): Force out GTK buffered
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
59415
diff
changeset
|
1134 gtk_main_iteration (); |
|
ef2f9fc4fd42
* xmenu.c (menubar_selection_callback): Force out GTK buffered
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
59415
diff
changeset
|
1135 UNBLOCK_INPUT; |
|
ef2f9fc4fd42
* xmenu.c (menubar_selection_callback): Force out GTK buffered
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
59415
diff
changeset
|
1136 |
| 49322 | 1137 find_and_call_menu_selection (cb_data->cl_data->f, |
| 1138 cb_data->cl_data->menu_bar_items_used, | |
| 1139 cb_data->cl_data->menu_bar_vector, | |
| 1140 cb_data->call_data); | |
| 1141 } | |
| 1142 | |
| 1143 #else /* not USE_GTK */ | |
| 1144 | |
| 1145 /* This callback is called from the menu bar pulldown menu | |
| 1146 when the user makes a selection. | |
| 1147 Figure out what the user chose | |
| 1148 and put the appropriate events into the keyboard buffer. */ | |
| 1149 static void | |
| 1150 menubar_selection_callback (widget, id, client_data) | |
| 1151 Widget widget; | |
| 1152 LWLIB_ID id; | |
| 1153 XtPointer client_data; | |
| 1154 { | |
| 1155 FRAME_PTR f; | |
| 1156 | |
| 1157 f = menubar_id_to_frame (id); | |
| 1158 if (!f) | |
| 1159 return; | |
| 1160 find_and_call_menu_selection (f, f->menu_bar_items_used, | |
| 1161 f->menu_bar_vector, client_data); | |
| 1162 } | |
| 1163 #endif /* not USE_GTK */ | |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1164 |
| 36933 | 1165 /* Recompute all the widgets of frame F, when the menu bar has been |
| 1166 changed. Value is non-zero if widgets were updated. */ | |
| 1167 | |
| 1168 static int | |
|
6481
55236c5bca7c
(update_frame_menubar): Function renamed from update_one_frame_psheets.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6439
diff
changeset
|
1169 update_frame_menubar (f) |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1170 FRAME_PTR f; |
|
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1171 { |
| 49322 | 1172 #ifdef USE_GTK |
| 1173 return xg_update_frame_menubar (f); | |
| 1174 #else | |
|
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1175 struct x_output *x; |
|
6200
01c57ae8ca57
(update_one_frame_psheets): Call EmacsFrameSetCharSize to
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6198
diff
changeset
|
1176 int columns, rows; |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1177 |
|
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1178 if (! FRAME_X_P (f)) |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1179 abort (); |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1180 |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1181 x = f->output_data.x; |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1182 |
| 36933 | 1183 if (!x->menubar_widget || XtIsManaged (x->menubar_widget)) |
| 1184 return 0; | |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1185 |
|
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1186 BLOCK_INPUT; |
| 36933 | 1187 /* Save the size of the frame because the pane widget doesn't accept |
| 1188 to resize itself. So force it. */ | |
|
51212
332134065648
Make (some) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50938
diff
changeset
|
1189 columns = FRAME_COLS (f); |
|
332134065648
Make (some) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50938
diff
changeset
|
1190 rows = FRAME_LINES (f); |
|
6200
01c57ae8ca57
(update_one_frame_psheets): Call EmacsFrameSetCharSize to
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6198
diff
changeset
|
1191 |
| 36933 | 1192 /* Do the voodoo which means "I'm changing lots of things, don't try |
| 1193 to refigure sizes until I'm done." */ | |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1194 lw_refigure_widget (x->column_widget, False); |
|
6200
01c57ae8ca57
(update_one_frame_psheets): Call EmacsFrameSetCharSize to
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6198
diff
changeset
|
1195 |
| 36933 | 1196 /* The order in which children are managed is the top to bottom |
| 1197 order in which they are displayed in the paned window. First, | |
| 1198 remove the text-area widget. */ | |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1199 XtUnmanageChild (x->edit_widget); |
|
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1200 |
| 36933 | 1201 /* Remove the menubar that is there now, and put up the menubar that |
| 1202 should be there. */ | |
| 1203 XtManageChild (x->menubar_widget); | |
| 1204 XtMapWidget (x->menubar_widget); | |
| 1205 XtVaSetValues (x->menubar_widget, XtNmappedWhenManaged, 1, NULL); | |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1206 |
|
9236
583bb9211b2b
(popup_get_selection): Remove BLOCK_INPUT, UNBLOCK_INPUT since the
Paul Reilly <pmr@pajato.com>
parents:
9233
diff
changeset
|
1207 /* Re-manage the text-area widget, and then thrash the sizes. */ |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1208 XtManageChild (x->edit_widget); |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1209 lw_refigure_widget (x->column_widget, True); |
|
6200
01c57ae8ca57
(update_one_frame_psheets): Call EmacsFrameSetCharSize to
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6198
diff
changeset
|
1210 |
|
01c57ae8ca57
(update_one_frame_psheets): Call EmacsFrameSetCharSize to
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6198
diff
changeset
|
1211 /* Force the pane widget to resize itself with the right values. */ |
|
01c57ae8ca57
(update_one_frame_psheets): Call EmacsFrameSetCharSize to
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6198
diff
changeset
|
1212 EmacsFrameSetCharSize (x->edit_widget, columns, rows); |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1213 UNBLOCK_INPUT; |
| 49322 | 1214 #endif |
| 36933 | 1215 return 1; |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1216 } |
|
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1217 |
|
12018
f5d820ad7a13
(set_frame_menubar): Always call update_frame_menubar.
Karl Heuer <kwzh@gnu.org>
parents:
11954
diff
changeset
|
1218 /* Set the contents of the menubar widgets of frame F. |
|
f5d820ad7a13
(set_frame_menubar): Always call update_frame_menubar.
Karl Heuer <kwzh@gnu.org>
parents:
11954
diff
changeset
|
1219 The argument FIRST_TIME is currently ignored; |
|
f5d820ad7a13
(set_frame_menubar): Always call update_frame_menubar.
Karl Heuer <kwzh@gnu.org>
parents:
11954
diff
changeset
|
1220 it is set the first time this is called, from initialize_frame_menubar. */ |
|
f5d820ad7a13
(set_frame_menubar): Always call update_frame_menubar.
Karl Heuer <kwzh@gnu.org>
parents:
11954
diff
changeset
|
1221 |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1222 void |
| 12661 | 1223 set_frame_menubar (f, first_time, deep_p) |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1224 FRAME_PTR f; |
|
6605
f5b781f33789
(set_frame_menubar): New arg, first_time.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6526
diff
changeset
|
1225 int first_time; |
| 12661 | 1226 int deep_p; |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1227 { |
|
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1228 xt_or_gtk_widget menubar_widget; |
| 49322 | 1229 #ifdef USE_X_TOOLKIT |
| 1230 LWLIB_ID id; | |
| 1231 #endif | |
|
25730
db88a4b84d91
(single_menu_item, Fx_popup_menu, Fx_popup_menu,
Gerd Moellmann <gerd@gnu.org>
parents:
25680
diff
changeset
|
1232 Lisp_Object items; |
|
9725
98d374d51f4d
(set_frame_menubar): Don't copy string during GC risk.
Karl Heuer <kwzh@gnu.org>
parents:
9649
diff
changeset
|
1233 widget_value *wv, *first_wv, *prev_wv = 0; |
|
56959
dc35c2e20d41
(update_submenu_strings): YAILOM.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56848
diff
changeset
|
1234 int i, last_i = 0; |
|
46753
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1235 int *submenu_start, *submenu_end; |
|
48946
2c4a754e02b6
(parse_single_submenu): Use individual keymap's prompt
Richard M. Stallman <rms@gnu.org>
parents:
48912
diff
changeset
|
1236 int *submenu_top_level_items, *submenu_n_panes; |
|
40477
a56267e601e4
Include coding.h and charset.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40239
diff
changeset
|
1237 |
|
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1238 if (! FRAME_X_P (f)) |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1239 abort (); |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1240 |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1241 menubar_widget = f->output_data.x->menubar_widget; |
|
11449
fca5a32f7806
(popup_get_selection): Queue up events that aren't
Richard M. Stallman <rms@gnu.org>
parents:
11266
diff
changeset
|
1242 |
|
16656
9cbbf721b91c
(Vmenu_updating_frame): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16411
diff
changeset
|
1243 XSETFRAME (Vmenu_updating_frame, f); |
|
9cbbf721b91c
(Vmenu_updating_frame): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16411
diff
changeset
|
1244 |
| 49322 | 1245 #ifdef USE_X_TOOLKIT |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12661
diff
changeset
|
1246 if (f->output_data.x->id == 0) |
|
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12661
diff
changeset
|
1247 f->output_data.x->id = next_menubar_widget_id++; |
|
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12661
diff
changeset
|
1248 id = f->output_data.x->id; |
| 49322 | 1249 #endif |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1250 |
| 12661 | 1251 if (! menubar_widget) |
| 1252 deep_p = 1; | |
|
15792
feeb1f7c1cec
(pending_menu_activation): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15785
diff
changeset
|
1253 else if (pending_menu_activation && !deep_p) |
|
15807
508ec69917b1
(pending_menu_activation): Don't initialize. Not static.
Richard M. Stallman <rms@gnu.org>
parents:
15795
diff
changeset
|
1254 deep_p = 1; |
|
508ec69917b1
(pending_menu_activation): Don't initialize. Not static.
Richard M. Stallman <rms@gnu.org>
parents:
15795
diff
changeset
|
1255 /* Make the first call for any given frame always go deep. */ |
|
508ec69917b1
(pending_menu_activation): Don't initialize. Not static.
Richard M. Stallman <rms@gnu.org>
parents:
15795
diff
changeset
|
1256 else if (!f->output_data.x->saved_menu_event && !deep_p) |
|
15792
feeb1f7c1cec
(pending_menu_activation): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15785
diff
changeset
|
1257 { |
|
feeb1f7c1cec
(pending_menu_activation): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15785
diff
changeset
|
1258 deep_p = 1; |
|
15807
508ec69917b1
(pending_menu_activation): Don't initialize. Not static.
Richard M. Stallman <rms@gnu.org>
parents:
15795
diff
changeset
|
1259 f->output_data.x->saved_menu_event = (XEvent*)xmalloc (sizeof (XEvent)); |
|
508ec69917b1
(pending_menu_activation): Don't initialize. Not static.
Richard M. Stallman <rms@gnu.org>
parents:
15795
diff
changeset
|
1260 f->output_data.x->saved_menu_event->type = 0; |
|
15792
feeb1f7c1cec
(pending_menu_activation): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15785
diff
changeset
|
1261 } |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1262 |
|
52981
54482f5ea7be
Remove tear off capability for GTK popup menus.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1263 #ifdef USE_GTK |
|
54482f5ea7be
Remove tear off capability for GTK popup menus.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1264 /* If we have detached menus, we must update deep so detached menus |
|
54482f5ea7be
Remove tear off capability for GTK popup menus.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1265 also gets updated. */ |
|
54482f5ea7be
Remove tear off capability for GTK popup menus.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1266 deep_p = deep_p || xg_have_tear_offs (); |
|
54482f5ea7be
Remove tear off capability for GTK popup menus.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1267 #endif |
|
54482f5ea7be
Remove tear off capability for GTK popup menus.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1268 |
| 12661 | 1269 if (deep_p) |
| 1270 { | |
| 1271 /* Make a widget-value tree representing the entire menu trees. */ | |
| 1272 | |
| 1273 struct buffer *prev = current_buffer; | |
| 1274 Lisp_Object buffer; | |
|
46293
1fb8f75062c6
Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents:
45803
diff
changeset
|
1275 int specpdl_count = SPECPDL_INDEX (); |
| 12661 | 1276 int previous_menu_items_used = f->menu_bar_items_used; |
| 1277 Lisp_Object *previous_items | |
| 1278 = (Lisp_Object *) alloca (previous_menu_items_used | |
| 1279 * sizeof (Lisp_Object)); | |
|
12634
eec80ea06395
(set_frame_menubar): If the Lisp-level menu bar menus
Richard M. Stallman <rms@gnu.org>
parents:
12625
diff
changeset
|
1280 |
|
17554
0a75fcee3cb8
(set_frame_menubar): When widget is new, forget records of old contents.
Richard M. Stallman <rms@gnu.org>
parents:
17364
diff
changeset
|
1281 /* If we are making a new widget, its contents are empty, |
|
0a75fcee3cb8
(set_frame_menubar): When widget is new, forget records of old contents.
Richard M. Stallman <rms@gnu.org>
parents:
17364
diff
changeset
|
1282 do always reinitialize them. */ |
|
0a75fcee3cb8
(set_frame_menubar): When widget is new, forget records of old contents.
Richard M. Stallman <rms@gnu.org>
parents:
17364
diff
changeset
|
1283 if (! menubar_widget) |
|
0a75fcee3cb8
(set_frame_menubar): When widget is new, forget records of old contents.
Richard M. Stallman <rms@gnu.org>
parents:
17364
diff
changeset
|
1284 previous_menu_items_used = 0; |
|
0a75fcee3cb8
(set_frame_menubar): When widget is new, forget records of old contents.
Richard M. Stallman <rms@gnu.org>
parents:
17364
diff
changeset
|
1285 |
| 12661 | 1286 buffer = XWINDOW (FRAME_SELECTED_WINDOW (f))->buffer; |
| 1287 specbind (Qinhibit_quit, Qt); | |
| 1288 /* Don't let the debugger step into this code | |
| 1289 because it is not reentrant. */ | |
| 1290 specbind (Qdebug_on_next_call, Qnil); | |
| 1291 | |
|
63147
9bde03db5726
* composite.c (compose_chars_in_text):
Kim F. Storm <storm@cua.dk>
parents:
63070
diff
changeset
|
1292 record_unwind_save_match_data (); |
| 12661 | 1293 if (NILP (Voverriding_local_map_menu_flag)) |
| 1294 { | |
| 1295 specbind (Qoverriding_terminal_local_map, Qnil); | |
| 1296 specbind (Qoverriding_local_map, Qnil); | |
| 1297 } | |
| 1298 | |
| 1299 set_buffer_internal_1 (XBUFFER (buffer)); | |
|
12634
eec80ea06395
(set_frame_menubar): If the Lisp-level menu bar menus
Richard M. Stallman <rms@gnu.org>
parents:
12625
diff
changeset
|
1300 |
| 12661 | 1301 /* Run the Lucid hook. */ |
|
36191
0cee3a77c592
(set_frame_menubar): Run acivate-menu-bar-hook with
Gerd Moellmann <gerd@gnu.org>
parents:
34038
diff
changeset
|
1302 safe_run_hooks (Qactivate_menubar_hook); |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1303 |
| 12661 | 1304 /* If it has changed current-menubar from previous value, |
| 1305 really recompute the menubar from the value. */ | |
| 1306 if (! NILP (Vlucid_menu_bar_dirty_flag)) | |
| 1307 call0 (Qrecompute_lucid_menubar); | |
| 14298 | 1308 safe_run_hooks (Qmenu_bar_update_hook); |
| 12661 | 1309 FRAME_MENU_BAR_ITEMS (f) = menu_bar_items (FRAME_MENU_BAR_ITEMS (f)); |
| 1310 | |
| 1311 items = FRAME_MENU_BAR_ITEMS (f); | |
| 1312 | |
| 1313 /* Save the frame's previous menu bar contents data. */ | |
|
38594
53ed5f089c9e
(set_frame_menubar): Take into account that
Gerd Moellmann <gerd@gnu.org>
parents:
37940
diff
changeset
|
1314 if (previous_menu_items_used) |
|
53ed5f089c9e
(set_frame_menubar): Take into account that
Gerd Moellmann <gerd@gnu.org>
parents:
37940
diff
changeset
|
1315 bcopy (XVECTOR (f->menu_bar_vector)->contents, previous_items, |
|
53ed5f089c9e
(set_frame_menubar): Take into account that
Gerd Moellmann <gerd@gnu.org>
parents:
37940
diff
changeset
|
1316 previous_menu_items_used * sizeof (Lisp_Object)); |
| 12661 | 1317 |
|
46753
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1318 /* Fill in menu_items with the current menu bar contents. |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1319 This can evaluate Lisp code. */ |
|
70085
93e99c27012e
(restore_menu_items, save_menu_items): New fns.
Richard M. Stallman <rms@gnu.org>
parents:
69017
diff
changeset
|
1320 save_menu_items (); |
|
93e99c27012e
(restore_menu_items, save_menu_items): New fns.
Richard M. Stallman <rms@gnu.org>
parents:
69017
diff
changeset
|
1321 |
| 12661 | 1322 menu_items = f->menu_bar_vector; |
|
38594
53ed5f089c9e
(set_frame_menubar): Take into account that
Gerd Moellmann <gerd@gnu.org>
parents:
37940
diff
changeset
|
1323 menu_items_allocated = VECTORP (menu_items) ? ASIZE (menu_items) : 0; |
|
46753
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1324 submenu_start = (int *) alloca (XVECTOR (items)->size * sizeof (int *)); |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1325 submenu_end = (int *) alloca (XVECTOR (items)->size * sizeof (int *)); |
|
48946
2c4a754e02b6
(parse_single_submenu): Use individual keymap's prompt
Richard M. Stallman <rms@gnu.org>
parents:
48912
diff
changeset
|
1326 submenu_n_panes = (int *) alloca (XVECTOR (items)->size * sizeof (int)); |
|
46753
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1327 submenu_top_level_items |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1328 = (int *) alloca (XVECTOR (items)->size * sizeof (int *)); |
| 12661 | 1329 init_menu_items (); |
|
15107
e025990722ca
(set_frame_menubar): FRAME_MENU_BAR_ITEMS now has four elements per item.
Richard M. Stallman <rms@gnu.org>
parents:
14741
diff
changeset
|
1330 for (i = 0; i < XVECTOR (items)->size; i += 4) |
| 12661 | 1331 { |
| 1332 Lisp_Object key, string, maps; | |
| 1333 | |
|
46753
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1334 last_i = i; |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1335 |
| 12661 | 1336 key = XVECTOR (items)->contents[i]; |
| 1337 string = XVECTOR (items)->contents[i + 1]; | |
| 1338 maps = XVECTOR (items)->contents[i + 2]; | |
| 1339 if (NILP (string)) | |
| 1340 break; | |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1341 |
|
46753
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1342 submenu_start[i] = menu_items_used; |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1343 |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1344 menu_items_n_panes = 0; |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1345 submenu_top_level_items[i] |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1346 = parse_single_submenu (key, string, maps); |
|
48946
2c4a754e02b6
(parse_single_submenu): Use individual keymap's prompt
Richard M. Stallman <rms@gnu.org>
parents:
48912
diff
changeset
|
1347 submenu_n_panes[i] = menu_items_n_panes; |
|
46753
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1348 |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1349 submenu_end[i] = menu_items_used; |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1350 } |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1351 |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1352 finish_menu_items (); |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1353 |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1354 /* Convert menu_items into widget_value trees |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1355 to display the menu. This cannot evaluate Lisp code. */ |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1356 |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1357 wv = xmalloc_widget_value (); |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1358 wv->name = "menubar"; |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1359 wv->value = 0; |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1360 wv->enabled = 1; |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1361 wv->button_type = BUTTON_TYPE_NONE; |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1362 wv->help = Qnil; |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1363 first_wv = wv; |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1364 |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1365 for (i = 0; i < last_i; i += 4) |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1366 { |
|
48946
2c4a754e02b6
(parse_single_submenu): Use individual keymap's prompt
Richard M. Stallman <rms@gnu.org>
parents:
48912
diff
changeset
|
1367 menu_items_n_panes = submenu_n_panes[i]; |
|
46753
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1368 wv = digest_single_submenu (submenu_start[i], submenu_end[i], |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1369 submenu_top_level_items[i]); |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1370 if (prev_wv) |
| 12661 | 1371 prev_wv->next = wv; |
| 1372 else | |
| 1373 first_wv->contents = wv; | |
| 1374 /* Don't set wv->name here; GC during the loop might relocate it. */ | |
| 1375 wv->enabled = 1; | |
| 24993 | 1376 wv->button_type = BUTTON_TYPE_NONE; |
| 12661 | 1377 prev_wv = wv; |
| 1378 } | |
| 1379 | |
| 1380 set_buffer_internal_1 (prev); | |
| 1381 | |
| 1382 /* If there has been no change in the Lisp-level contents | |
| 1383 of the menu bar, skip redisplaying it. Just exit. */ | |
| 1384 | |
| 70086 | 1385 /* Compare the new menu items with the ones computed last time. */ |
| 12661 | 1386 for (i = 0; i < previous_menu_items_used; i++) |
| 1387 if (menu_items_used == i | |
|
17364
573189779804
(Fx_popup_menu): Don't use Lisp_Object as integer.
Karl Heuer <kwzh@gnu.org>
parents:
16752
diff
changeset
|
1388 || (!EQ (previous_items[i], XVECTOR (menu_items)->contents[i]))) |
| 12661 | 1389 break; |
|
13654
645e14e39a2b
(set_frame_menubar): When called with deep_p == 0,
Richard M. Stallman <rms@gnu.org>
parents:
13489
diff
changeset
|
1390 if (i == menu_items_used && i == previous_menu_items_used && i != 0) |
| 12661 | 1391 { |
| 70086 | 1392 /* The menu items have not changed. Don't bother updating |
| 1393 the menus in any form, since it would be a no-op. */ | |
| 12661 | 1394 free_menubar_widget_value_tree (first_wv); |
|
48113
6a09e4b41337
(unuse_menu_items): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46753
diff
changeset
|
1395 discard_menu_items (); |
|
70085
93e99c27012e
(restore_menu_items, save_menu_items): New fns.
Richard M. Stallman <rms@gnu.org>
parents:
69017
diff
changeset
|
1396 unbind_to (specpdl_count, Qnil); |
| 12661 | 1397 return; |
| 1398 } | |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1399 |
| 70086 | 1400 /* The menu items are different, so store them in the frame. */ |
|
70085
93e99c27012e
(restore_menu_items, save_menu_items): New fns.
Richard M. Stallman <rms@gnu.org>
parents:
69017
diff
changeset
|
1401 f->menu_bar_vector = menu_items; |
|
93e99c27012e
(restore_menu_items, save_menu_items): New fns.
Richard M. Stallman <rms@gnu.org>
parents:
69017
diff
changeset
|
1402 f->menu_bar_items_used = menu_items_used; |
|
93e99c27012e
(restore_menu_items, save_menu_items): New fns.
Richard M. Stallman <rms@gnu.org>
parents:
69017
diff
changeset
|
1403 |
|
95647
0f6a0e86ee24
Remove platform-independent menu definitions.
Chong Yidong <cyd@stupidchicken.com>
parents:
94963
diff
changeset
|
1404 /* This undoes save_menu_items. */ |
|
70085
93e99c27012e
(restore_menu_items, save_menu_items): New fns.
Richard M. Stallman <rms@gnu.org>
parents:
69017
diff
changeset
|
1405 unbind_to (specpdl_count, Qnil); |
|
93e99c27012e
(restore_menu_items, save_menu_items): New fns.
Richard M. Stallman <rms@gnu.org>
parents:
69017
diff
changeset
|
1406 |
| 12661 | 1407 /* Now GC cannot happen during the lifetime of the widget_value, |
| 1408 so it's safe to store data from a Lisp_String. */ | |
| 1409 wv = first_wv->contents; | |
|
15107
e025990722ca
(set_frame_menubar): FRAME_MENU_BAR_ITEMS now has four elements per item.
Richard M. Stallman <rms@gnu.org>
parents:
14741
diff
changeset
|
1410 for (i = 0; i < XVECTOR (items)->size; i += 4) |
| 12661 | 1411 { |
| 1412 Lisp_Object string; | |
| 1413 string = XVECTOR (items)->contents[i + 1]; | |
| 1414 if (NILP (string)) | |
|
56846
5817080daeba
* xmenu.c (digest_single_submenu): Set lname and lkey in widget_value
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
56805
diff
changeset
|
1415 break; |
|
56847
6079dd23b546
Don't call ENCODE_MENU_STRING on top level menu names, GC may occur.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
56846
diff
changeset
|
1416 wv->name = (char *) SDATA (string); |
|
56846
5817080daeba
* xmenu.c (digest_single_submenu): Set lname and lkey in widget_value
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
56805
diff
changeset
|
1417 update_submenu_strings (wv->contents); |
|
5817080daeba
* xmenu.c (digest_single_submenu): Set lname and lkey in widget_value
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
56805
diff
changeset
|
1418 wv = wv->next; |
| 12661 | 1419 } |
| 1420 | |
| 1421 } | |
| 1422 else | |
| 1423 { | |
| 1424 /* Make a widget-value tree containing | |
| 1425 just the top level menu bar strings. */ | |
| 1426 | |
|
46753
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1427 wv = xmalloc_widget_value (); |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1428 wv->name = "menubar"; |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1429 wv->value = 0; |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1430 wv->enabled = 1; |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1431 wv->button_type = BUTTON_TYPE_NONE; |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1432 wv->help = Qnil; |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1433 first_wv = wv; |
|
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1434 |
| 12661 | 1435 items = FRAME_MENU_BAR_ITEMS (f); |
|
15107
e025990722ca
(set_frame_menubar): FRAME_MENU_BAR_ITEMS now has four elements per item.
Richard M. Stallman <rms@gnu.org>
parents:
14741
diff
changeset
|
1436 for (i = 0; i < XVECTOR (items)->size; i += 4) |
| 12661 | 1437 { |
| 1438 Lisp_Object string; | |
| 1439 | |
| 1440 string = XVECTOR (items)->contents[i + 1]; | |
| 1441 if (NILP (string)) | |
| 1442 break; | |
| 1443 | |
|
14546
bc0388a7c282
(xmalloc_widget_value): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14298
diff
changeset
|
1444 wv = xmalloc_widget_value (); |
|
56847
6079dd23b546
Don't call ENCODE_MENU_STRING on top level menu names, GC may occur.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
56846
diff
changeset
|
1445 wv->name = (char *) SDATA (string); |
| 12661 | 1446 wv->value = 0; |
| 1447 wv->enabled = 1; | |
| 24993 | 1448 wv->button_type = BUTTON_TYPE_NONE; |
|
42588
43a330df6213
(set_frame_menubar, xmenu_show):
Jason Rumney <jasonr@gnu.org>
parents:
42586
diff
changeset
|
1449 wv->help = Qnil; |
|
15785
9902d8a8a548
(set_frame_menubar): Use -1 for call_data
Richard M. Stallman <rms@gnu.org>
parents:
15710
diff
changeset
|
1450 /* This prevents lwlib from assuming this |
|
9902d8a8a548
(set_frame_menubar): Use -1 for call_data
Richard M. Stallman <rms@gnu.org>
parents:
15710
diff
changeset
|
1451 menu item is really supposed to be empty. */ |
|
9902d8a8a548
(set_frame_menubar): Use -1 for call_data
Richard M. Stallman <rms@gnu.org>
parents:
15710
diff
changeset
|
1452 /* The EMACS_INT cast avoids a warning. |
|
9902d8a8a548
(set_frame_menubar): Use -1 for call_data
Richard M. Stallman <rms@gnu.org>
parents:
15710
diff
changeset
|
1453 This value just has to be different from small integers. */ |
|
9902d8a8a548
(set_frame_menubar): Use -1 for call_data
Richard M. Stallman <rms@gnu.org>
parents:
15710
diff
changeset
|
1454 wv->call_data = (void *) (EMACS_INT) (-1); |
| 12661 | 1455 |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1456 if (prev_wv) |
| 12661 | 1457 prev_wv->next = wv; |
| 1458 else | |
| 1459 first_wv->contents = wv; | |
| 1460 prev_wv = wv; | |
| 1461 } | |
|
13654
645e14e39a2b
(set_frame_menubar): When called with deep_p == 0,
Richard M. Stallman <rms@gnu.org>
parents:
13489
diff
changeset
|
1462 |
|
645e14e39a2b
(set_frame_menubar): When called with deep_p == 0,
Richard M. Stallman <rms@gnu.org>
parents:
13489
diff
changeset
|
1463 /* Forget what we thought we knew about what is in the |
|
645e14e39a2b
(set_frame_menubar): When called with deep_p == 0,
Richard M. Stallman <rms@gnu.org>
parents:
13489
diff
changeset
|
1464 detailed contents of the menu bar menus. |
|
645e14e39a2b
(set_frame_menubar): When called with deep_p == 0,
Richard M. Stallman <rms@gnu.org>
parents:
13489
diff
changeset
|
1465 Changing the top level always destroys the contents. */ |
|
645e14e39a2b
(set_frame_menubar): When called with deep_p == 0,
Richard M. Stallman <rms@gnu.org>
parents:
13489
diff
changeset
|
1466 f->menu_bar_items_used = 0; |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1467 } |
|
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1468 |
| 12661 | 1469 /* Create or update the menu bar widget. */ |
|
11449
fca5a32f7806
(popup_get_selection): Queue up events that aren't
Richard M. Stallman <rms@gnu.org>
parents:
11266
diff
changeset
|
1470 |
|
fca5a32f7806
(popup_get_selection): Queue up events that aren't
Richard M. Stallman <rms@gnu.org>
parents:
11266
diff
changeset
|
1471 BLOCK_INPUT; |
|
fca5a32f7806
(popup_get_selection): Queue up events that aren't
Richard M. Stallman <rms@gnu.org>
parents:
11266
diff
changeset
|
1472 |
| 49322 | 1473 #ifdef USE_GTK |
| 1474 xg_crazy_callback_abort = 1; | |
| 1475 if (menubar_widget) | |
| 1476 { | |
|
52981
54482f5ea7be
Remove tear off capability for GTK popup menus.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1477 /* The fourth arg is DEEP_P, which says to consider the entire |
| 49322 | 1478 menu trees we supply, rather than just the menu bar item names. */ |
| 1479 xg_modify_menubar_widgets (menubar_widget, | |
| 1480 f, | |
| 1481 first_wv, | |
| 1482 deep_p, | |
| 1483 G_CALLBACK (menubar_selection_callback), | |
| 1484 G_CALLBACK (popup_deactivate_callback), | |
| 1485 G_CALLBACK (menu_highlight_callback)); | |
| 1486 } | |
| 1487 else | |
| 1488 { | |
| 1489 GtkWidget *wvbox = f->output_data.x->vbox_widget; | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1490 |
| 49322 | 1491 menubar_widget |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1492 = xg_create_widget ("menubar", "menubar", f, first_wv, |
| 49322 | 1493 G_CALLBACK (menubar_selection_callback), |
| 1494 G_CALLBACK (popup_deactivate_callback), | |
| 1495 G_CALLBACK (menu_highlight_callback)); | |
| 1496 | |
| 1497 f->output_data.x->menubar_widget = menubar_widget; | |
| 1498 } | |
| 1499 | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1500 |
| 49322 | 1501 #else /* not USE_GTK */ |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1502 if (menubar_widget) |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1503 { |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1504 /* Disable resizing (done for Motif!) */ |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12661
diff
changeset
|
1505 lw_allow_resizing (f->output_data.x->widget, False); |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1506 |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1507 /* The third arg is DEEP_P, which says to consider the entire |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1508 menu trees we supply, rather than just the menu bar item names. */ |
| 12661 | 1509 lw_modify_all_widgets (id, first_wv, deep_p); |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1510 |
|
9236
583bb9211b2b
(popup_get_selection): Remove BLOCK_INPUT, UNBLOCK_INPUT since the
Paul Reilly <pmr@pajato.com>
parents:
9233
diff
changeset
|
1511 /* Re-enable the edit widget to resize. */ |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12661
diff
changeset
|
1512 lw_allow_resizing (f->output_data.x->widget, True); |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1513 } |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1514 else |
|
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1515 { |
|
59102
0096c58ce34a
* xmenu.c (popup_get_selection): Pop down on C-g.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58824
diff
changeset
|
1516 char menuOverride[] = "Ctrl<KeyPress>g: MenuGadgetEscape()"; |
|
0096c58ce34a
* xmenu.c (popup_get_selection): Pop down on C-g.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58824
diff
changeset
|
1517 XtTranslations override = XtParseTranslationTable (menuOverride); |
|
0096c58ce34a
* xmenu.c (popup_get_selection): Pop down on C-g.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58824
diff
changeset
|
1518 |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1519 menubar_widget = lw_create_widget ("menubar", "menubar", id, first_wv, |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12661
diff
changeset
|
1520 f->output_data.x->column_widget, |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1521 0, |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1522 popup_activate_callback, |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1523 menubar_selection_callback, |
|
27341
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
1524 popup_deactivate_callback, |
|
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
1525 menu_highlight_callback); |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12661
diff
changeset
|
1526 f->output_data.x->menubar_widget = menubar_widget; |
|
59102
0096c58ce34a
* xmenu.c (popup_get_selection): Pop down on C-g.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58824
diff
changeset
|
1527 |
|
0096c58ce34a
* xmenu.c (popup_get_selection): Pop down on C-g.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58824
diff
changeset
|
1528 /* Make menu pop down on C-g. */ |
|
0096c58ce34a
* xmenu.c (popup_get_selection): Pop down on C-g.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58824
diff
changeset
|
1529 XtOverrideTranslations (menubar_widget, override); |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1530 } |
|
11898
a23359be806b
(set_frame_menubar): Set menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11655
diff
changeset
|
1531 |
|
a23359be806b
(set_frame_menubar): Set menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11655
diff
changeset
|
1532 { |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1533 int menubar_size |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12661
diff
changeset
|
1534 = (f->output_data.x->menubar_widget |
|
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12661
diff
changeset
|
1535 ? (f->output_data.x->menubar_widget->core.height |
|
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12661
diff
changeset
|
1536 + f->output_data.x->menubar_widget->core.border_width) |
|
11898
a23359be806b
(set_frame_menubar): Set menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11655
diff
changeset
|
1537 : 0); |
|
a23359be806b
(set_frame_menubar): Set menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11655
diff
changeset
|
1538 |
|
15943
16fb6dcfa4e8
(set_frame_menubar): Don't add ibw to menubar_size.
Richard M. Stallman <rms@gnu.org>
parents:
15912
diff
changeset
|
1539 #if 0 /* Experimentally, we now get the right results |
|
16fb6dcfa4e8
(set_frame_menubar): Don't add ibw to menubar_size.
Richard M. Stallman <rms@gnu.org>
parents:
15912
diff
changeset
|
1540 for -geometry -0-0 without this. 24 Aug 96, rms. */ |
|
13489
ddf90bfd3744
Don't include Xaw/Paned.h unless USE_LUCID is defined.
Richard M. Stallman <rms@gnu.org>
parents:
13071
diff
changeset
|
1541 #ifdef USE_LUCID |
|
11898
a23359be806b
(set_frame_menubar): Set menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11655
diff
changeset
|
1542 if (FRAME_EXTERNAL_MENU_BAR (f)) |
|
a23359be806b
(set_frame_menubar): Set menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11655
diff
changeset
|
1543 { |
|
a23359be806b
(set_frame_menubar): Set menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11655
diff
changeset
|
1544 Dimension ibw = 0; |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12661
diff
changeset
|
1545 XtVaGetValues (f->output_data.x->column_widget, |
|
11898
a23359be806b
(set_frame_menubar): Set menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11655
diff
changeset
|
1546 XtNinternalBorderWidth, &ibw, NULL); |
|
a23359be806b
(set_frame_menubar): Set menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11655
diff
changeset
|
1547 menubar_size += ibw; |
|
a23359be806b
(set_frame_menubar): Set menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11655
diff
changeset
|
1548 } |
|
13489
ddf90bfd3744
Don't include Xaw/Paned.h unless USE_LUCID is defined.
Richard M. Stallman <rms@gnu.org>
parents:
13071
diff
changeset
|
1549 #endif /* USE_LUCID */ |
|
15943
16fb6dcfa4e8
(set_frame_menubar): Don't add ibw to menubar_size.
Richard M. Stallman <rms@gnu.org>
parents:
15912
diff
changeset
|
1550 #endif /* 0 */ |
|
11898
a23359be806b
(set_frame_menubar): Set menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11655
diff
changeset
|
1551 |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12661
diff
changeset
|
1552 f->output_data.x->menubar_height = menubar_size; |
|
11898
a23359be806b
(set_frame_menubar): Set menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11655
diff
changeset
|
1553 } |
| 49322 | 1554 #endif /* not USE_GTK */ |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1555 |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1556 free_menubar_widget_value_tree (first_wv); |
|
36938
010e601743d5
(update_frame_menubar, set_frame_menubar, xmenu_show):
Gerd Moellmann <gerd@gnu.org>
parents:
36933
diff
changeset
|
1557 update_frame_menubar (f); |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1558 |
| 49322 | 1559 #ifdef USE_GTK |
| 1560 xg_crazy_callback_abort = 0; | |
| 1561 #endif | |
| 1562 | |
|
12634
eec80ea06395
(set_frame_menubar): If the Lisp-level menu bar menus
Richard M. Stallman <rms@gnu.org>
parents:
12625
diff
changeset
|
1563 UNBLOCK_INPUT; |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1564 } |
|
5897
5a68abc8f1f9
(free_frame_menubar) [USE_X_TOOLKIT]. New function to destroy the X Widget
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5896
diff
changeset
|
1565 |
| 14036 | 1566 /* Called from Fx_create_frame to create the initial menubar of a frame |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1567 before it is mapped, so that the window is mapped with the menubar already |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1568 there instead of us tacking it on later and thrashing the window after it |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1569 is visible. */ |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1570 |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1571 void |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1572 initialize_frame_menubar (f) |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1573 FRAME_PTR f; |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1574 { |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1575 /* This function is called before the first chance to redisplay |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1576 the frame. It has to be, so the frame will have the right size. */ |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1577 FRAME_MENU_BAR_ITEMS (f) = menu_bar_items (FRAME_MENU_BAR_ITEMS (f)); |
| 12661 | 1578 set_frame_menubar (f, 1, 1); |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1579 } |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1580 |
|
37022
d7d30cecd891
(free_frame_menubar) [USE_MOTIF]: If the shell widget's
Gerd Moellmann <gerd@gnu.org>
parents:
36958
diff
changeset
|
1581 |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1582 /* Get rid of the menu bar of frame F, and free its storage. |
| 49322 | 1583 This is used when deleting a frame, and when turning off the menu bar. |
| 1584 For GTK this function is in gtkutil.c. */ | |
| 1585 | |
| 1586 #ifndef USE_GTK | |
|
5897
5a68abc8f1f9
(free_frame_menubar) [USE_X_TOOLKIT]. New function to destroy the X Widget
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5896
diff
changeset
|
1587 void |
|
5a68abc8f1f9
(free_frame_menubar) [USE_X_TOOLKIT]. New function to destroy the X Widget
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5896
diff
changeset
|
1588 free_frame_menubar (f) |
|
5a68abc8f1f9
(free_frame_menubar) [USE_X_TOOLKIT]. New function to destroy the X Widget
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5896
diff
changeset
|
1589 FRAME_PTR f; |
|
5a68abc8f1f9
(free_frame_menubar) [USE_X_TOOLKIT]. New function to destroy the X Widget
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5896
diff
changeset
|
1590 { |
|
5a68abc8f1f9
(free_frame_menubar) [USE_X_TOOLKIT]. New function to destroy the X Widget
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5896
diff
changeset
|
1591 Widget menubar_widget; |
|
5a68abc8f1f9
(free_frame_menubar) [USE_X_TOOLKIT]. New function to destroy the X Widget
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5896
diff
changeset
|
1592 |
|
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1593 if (! FRAME_X_P (f)) |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1594 abort (); |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1595 |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12661
diff
changeset
|
1596 menubar_widget = f->output_data.x->menubar_widget; |
|
19624
c73494a6bcd3
(free_frame_menubar): Clear menubar_height field.
Richard M. Stallman <rms@gnu.org>
parents:
17709
diff
changeset
|
1597 |
|
c73494a6bcd3
(free_frame_menubar): Clear menubar_height field.
Richard M. Stallman <rms@gnu.org>
parents:
17709
diff
changeset
|
1598 f->output_data.x->menubar_height = 0; |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1599 |
|
5897
5a68abc8f1f9
(free_frame_menubar) [USE_X_TOOLKIT]. New function to destroy the X Widget
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5896
diff
changeset
|
1600 if (menubar_widget) |
|
5a68abc8f1f9
(free_frame_menubar) [USE_X_TOOLKIT]. New function to destroy the X Widget
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5896
diff
changeset
|
1601 { |
|
37022
d7d30cecd891
(free_frame_menubar) [USE_MOTIF]: If the shell widget's
Gerd Moellmann <gerd@gnu.org>
parents:
36958
diff
changeset
|
1602 #ifdef USE_MOTIF |
|
d7d30cecd891
(free_frame_menubar) [USE_MOTIF]: If the shell widget's
Gerd Moellmann <gerd@gnu.org>
parents:
36958
diff
changeset
|
1603 /* Removing the menu bar magically changes the shell widget's x |
|
d7d30cecd891
(free_frame_menubar) [USE_MOTIF]: If the shell widget's
Gerd Moellmann <gerd@gnu.org>
parents:
36958
diff
changeset
|
1604 and y position of (0, 0) which, when the menu bar is turned |
|
d7d30cecd891
(free_frame_menubar) [USE_MOTIF]: If the shell widget's
Gerd Moellmann <gerd@gnu.org>
parents:
36958
diff
changeset
|
1605 on again, leads to pull-down menuss appearing in strange |
|
d7d30cecd891
(free_frame_menubar) [USE_MOTIF]: If the shell widget's
Gerd Moellmann <gerd@gnu.org>
parents:
36958
diff
changeset
|
1606 positions near the upper-left corner of the display. This |
|
d7d30cecd891
(free_frame_menubar) [USE_MOTIF]: If the shell widget's
Gerd Moellmann <gerd@gnu.org>
parents:
36958
diff
changeset
|
1607 happens only with some window managers like twm and ctwm, |
|
d7d30cecd891
(free_frame_menubar) [USE_MOTIF]: If the shell widget's
Gerd Moellmann <gerd@gnu.org>
parents:
36958
diff
changeset
|
1608 but not with other like Motif's mwm or kwm, because the |
|
d7d30cecd891
(free_frame_menubar) [USE_MOTIF]: If the shell widget's
Gerd Moellmann <gerd@gnu.org>
parents:
36958
diff
changeset
|
1609 latter generate ConfigureNotify events when the menu bar |
|
d7d30cecd891
(free_frame_menubar) [USE_MOTIF]: If the shell widget's
Gerd Moellmann <gerd@gnu.org>
parents:
36958
diff
changeset
|
1610 is switched off, which fixes the shell position. */ |
|
d7d30cecd891
(free_frame_menubar) [USE_MOTIF]: If the shell widget's
Gerd Moellmann <gerd@gnu.org>
parents:
36958
diff
changeset
|
1611 Position x0, y0, x1, y1; |
|
d7d30cecd891
(free_frame_menubar) [USE_MOTIF]: If the shell widget's
Gerd Moellmann <gerd@gnu.org>
parents:
36958
diff
changeset
|
1612 #endif |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1613 |
|
5897
5a68abc8f1f9
(free_frame_menubar) [USE_X_TOOLKIT]. New function to destroy the X Widget
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5896
diff
changeset
|
1614 BLOCK_INPUT; |
|
37022
d7d30cecd891
(free_frame_menubar) [USE_MOTIF]: If the shell widget's
Gerd Moellmann <gerd@gnu.org>
parents:
36958
diff
changeset
|
1615 |
|
d7d30cecd891
(free_frame_menubar) [USE_MOTIF]: If the shell widget's
Gerd Moellmann <gerd@gnu.org>
parents:
36958
diff
changeset
|
1616 #ifdef USE_MOTIF |
|
37211
afa458ac7a62
(free_frame_menubar) [USE_MOTIF]: Preserve the
Gerd Moellmann <gerd@gnu.org>
parents:
37022
diff
changeset
|
1617 if (f->output_data.x->widget) |
|
afa458ac7a62
(free_frame_menubar) [USE_MOTIF]: Preserve the
Gerd Moellmann <gerd@gnu.org>
parents:
37022
diff
changeset
|
1618 XtVaGetValues (f->output_data.x->widget, XtNx, &x0, XtNy, &y0, NULL); |
|
37022
d7d30cecd891
(free_frame_menubar) [USE_MOTIF]: If the shell widget's
Gerd Moellmann <gerd@gnu.org>
parents:
36958
diff
changeset
|
1619 #endif |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1620 |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12661
diff
changeset
|
1621 lw_destroy_all_widgets ((LWLIB_ID) f->output_data.x->id); |
|
36457
b0905c60d1ab
(free_frame_menubar): Set the frame's menubar_widget to
Gerd Moellmann <gerd@gnu.org>
parents:
36191
diff
changeset
|
1622 f->output_data.x->menubar_widget = NULL; |
|
37022
d7d30cecd891
(free_frame_menubar) [USE_MOTIF]: If the shell widget's
Gerd Moellmann <gerd@gnu.org>
parents:
36958
diff
changeset
|
1623 |
|
d7d30cecd891
(free_frame_menubar) [USE_MOTIF]: If the shell widget's
Gerd Moellmann <gerd@gnu.org>
parents:
36958
diff
changeset
|
1624 #ifdef USE_MOTIF |
|
37211
afa458ac7a62
(free_frame_menubar) [USE_MOTIF]: Preserve the
Gerd Moellmann <gerd@gnu.org>
parents:
37022
diff
changeset
|
1625 if (f->output_data.x->widget) |
|
afa458ac7a62
(free_frame_menubar) [USE_MOTIF]: Preserve the
Gerd Moellmann <gerd@gnu.org>
parents:
37022
diff
changeset
|
1626 { |
|
afa458ac7a62
(free_frame_menubar) [USE_MOTIF]: Preserve the
Gerd Moellmann <gerd@gnu.org>
parents:
37022
diff
changeset
|
1627 XtVaGetValues (f->output_data.x->widget, XtNx, &x1, XtNy, &y1, NULL); |
|
afa458ac7a62
(free_frame_menubar) [USE_MOTIF]: Preserve the
Gerd Moellmann <gerd@gnu.org>
parents:
37022
diff
changeset
|
1628 if (x1 == 0 && y1 == 0) |
|
afa458ac7a62
(free_frame_menubar) [USE_MOTIF]: Preserve the
Gerd Moellmann <gerd@gnu.org>
parents:
37022
diff
changeset
|
1629 XtVaSetValues (f->output_data.x->widget, XtNx, x0, XtNy, y0, NULL); |
|
afa458ac7a62
(free_frame_menubar) [USE_MOTIF]: Preserve the
Gerd Moellmann <gerd@gnu.org>
parents:
37022
diff
changeset
|
1630 } |
|
37022
d7d30cecd891
(free_frame_menubar) [USE_MOTIF]: If the shell widget's
Gerd Moellmann <gerd@gnu.org>
parents:
36958
diff
changeset
|
1631 #endif |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1632 |
|
5897
5a68abc8f1f9
(free_frame_menubar) [USE_X_TOOLKIT]. New function to destroy the X Widget
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5896
diff
changeset
|
1633 UNBLOCK_INPUT; |
|
5a68abc8f1f9
(free_frame_menubar) [USE_X_TOOLKIT]. New function to destroy the X Widget
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5896
diff
changeset
|
1634 } |
|
5a68abc8f1f9
(free_frame_menubar) [USE_X_TOOLKIT]. New function to destroy the X Widget
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5896
diff
changeset
|
1635 } |
| 49322 | 1636 #endif /* not USE_GTK */ |
| 1637 | |
| 1638 #endif /* USE_X_TOOLKIT || USE_GTK */ | |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1639 |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1640 /* xmenu_show actually displays a menu using the panes and items in menu_items |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1641 and returns the value selected from it. |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1642 There are two versions of xmenu_show, one for Xt and one for Xlib. |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1643 Both assume input is blocked by the caller. */ |
| 118 | 1644 |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1645 /* F is the frame the menu is for. |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1646 X and Y are the frame-relative specified position, |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1647 relative to the inside upper left corner of the frame F. |
|
15839
e66ccb471d26
(xmenu_show): Set dummy.state.
Richard M. Stallman <rms@gnu.org>
parents:
15807
diff
changeset
|
1648 FOR_CLICK is nonzero if this menu was invoked for a mouse click. |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1649 KEYMAPS is 1 if this menu was specified with keymaps; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1650 in that case, we return a list containing the chosen item's value |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1651 and perhaps also the pane's prefix. |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1652 TITLE is the specified menu title. |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1653 ERROR is a place to store an error message string in case of failure. |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1654 (We return nil on failure, but the value doesn't actually matter.) */ |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1655 |
| 49322 | 1656 #if defined (USE_X_TOOLKIT) || defined (USE_GTK) |
| 1657 | |
| 1658 /* The item selected in the popup menu. */ | |
| 1659 static Lisp_Object *volatile menu_item_selection; | |
| 1660 | |
| 1661 #ifdef USE_GTK | |
| 1662 | |
| 1663 /* Used when position a popup menu. See menu_position_func and | |
| 1664 create_and_show_popup_menu below. */ | |
| 1665 struct next_popup_x_y | |
| 1666 { | |
|
49651
05ebf4266798
xterm.c (x_make_frame_visible): Call gtk_window_deiconify.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
1667 FRAME_PTR f; |
| 49322 | 1668 int x; |
| 1669 int y; | |
| 1670 }; | |
| 1671 | |
| 1672 /* The menu position function to use if we are not putting a popup | |
| 1673 menu where the pointer is. | |
| 1674 MENU is the menu to pop up. | |
| 1675 X and Y shall on exit contain x/y where the menu shall pop up. | |
| 1676 PUSH_IN is not documented in the GTK manual. | |
| 1677 USER_DATA is any data passed in when calling gtk_menu_popup. | |
| 1678 Here it points to a struct next_popup_x_y where the coordinates | |
|
49651
05ebf4266798
xterm.c (x_make_frame_visible): Call gtk_window_deiconify.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
1679 to store in *X and *Y are as well as the frame for the popup. |
| 49322 | 1680 |
| 1681 Here only X and Y are used. */ | |
| 1682 static void | |
| 1683 menu_position_func (menu, x, y, push_in, user_data) | |
| 1684 GtkMenu *menu; | |
| 1685 gint *x; | |
| 1686 gint *y; | |
| 1687 gboolean *push_in; | |
| 1688 gpointer user_data; | |
| 1689 { | |
|
49651
05ebf4266798
xterm.c (x_make_frame_visible): Call gtk_window_deiconify.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
1690 struct next_popup_x_y* data = (struct next_popup_x_y*)user_data; |
|
05ebf4266798
xterm.c (x_make_frame_visible): Call gtk_window_deiconify.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
1691 GtkRequisition req; |
|
05ebf4266798
xterm.c (x_make_frame_visible): Call gtk_window_deiconify.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
1692 int disp_width = FRAME_X_DISPLAY_INFO (data->f)->width; |
|
05ebf4266798
xterm.c (x_make_frame_visible): Call gtk_window_deiconify.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
1693 int disp_height = FRAME_X_DISPLAY_INFO (data->f)->height; |
| 58171 | 1694 |
|
49651
05ebf4266798
xterm.c (x_make_frame_visible): Call gtk_window_deiconify.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
1695 *x = data->x; |
|
05ebf4266798
xterm.c (x_make_frame_visible): Call gtk_window_deiconify.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
1696 *y = data->y; |
|
05ebf4266798
xterm.c (x_make_frame_visible): Call gtk_window_deiconify.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
1697 |
|
05ebf4266798
xterm.c (x_make_frame_visible): Call gtk_window_deiconify.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
1698 /* Check if there is room for the menu. If not, adjust x/y so that |
|
05ebf4266798
xterm.c (x_make_frame_visible): Call gtk_window_deiconify.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
1699 the menu is fully visible. */ |
|
05ebf4266798
xterm.c (x_make_frame_visible): Call gtk_window_deiconify.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
1700 gtk_widget_size_request (GTK_WIDGET (menu), &req); |
|
05ebf4266798
xterm.c (x_make_frame_visible): Call gtk_window_deiconify.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
1701 if (data->x + req.width > disp_width) |
|
05ebf4266798
xterm.c (x_make_frame_visible): Call gtk_window_deiconify.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
1702 *x -= data->x + req.width - disp_width; |
|
05ebf4266798
xterm.c (x_make_frame_visible): Call gtk_window_deiconify.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
1703 if (data->y + req.height > disp_height) |
|
05ebf4266798
xterm.c (x_make_frame_visible): Call gtk_window_deiconify.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
1704 *y -= data->y + req.height - disp_height; |
| 49322 | 1705 } |
| 1706 | |
| 1707 static void | |
| 1708 popup_selection_callback (widget, client_data) | |
| 1709 GtkWidget *widget; | |
| 1710 gpointer client_data; | |
| 1711 { | |
| 1712 xg_menu_item_cb_data *cb_data = (xg_menu_item_cb_data*) client_data; | |
| 1713 | |
| 1714 if (xg_crazy_callback_abort) return; | |
| 1715 if (cb_data) menu_item_selection = (Lisp_Object *) cb_data->call_data; | |
| 1716 } | |
| 1717 | |
|
58197
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1718 static Lisp_Object |
|
58215
8f529503ae83
* xmenu.c (pop_down_menu): Remove global variable current_menu,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58202
diff
changeset
|
1719 pop_down_menu (arg) |
|
8f529503ae83
* xmenu.c (pop_down_menu): Remove global variable current_menu,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58202
diff
changeset
|
1720 Lisp_Object arg; |
|
58197
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1721 { |
|
58215
8f529503ae83
* xmenu.c (pop_down_menu): Remove global variable current_menu,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58202
diff
changeset
|
1722 struct Lisp_Save_Value *p = XSAVE_VALUE (arg); |
|
8f529503ae83
* xmenu.c (pop_down_menu): Remove global variable current_menu,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58202
diff
changeset
|
1723 |
|
58197
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1724 popup_activated_flag = 0; |
|
58215
8f529503ae83
* xmenu.c (pop_down_menu): Remove global variable current_menu,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58202
diff
changeset
|
1725 BLOCK_INPUT; |
|
8f529503ae83
* xmenu.c (pop_down_menu): Remove global variable current_menu,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58202
diff
changeset
|
1726 gtk_widget_destroy (GTK_WIDGET (p->pointer)); |
|
8f529503ae83
* xmenu.c (pop_down_menu): Remove global variable current_menu,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58202
diff
changeset
|
1727 UNBLOCK_INPUT; |
|
58197
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1728 return Qnil; |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1729 } |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1730 |
| 49322 | 1731 /* Pop up the menu for frame F defined by FIRST_WV at X/Y and loop until the |
| 1732 menu pops down. | |
| 1733 menu_item_selection will be set to the selection. */ | |
| 1734 static void | |
| 1735 create_and_show_popup_menu (f, first_wv, x, y, for_click) | |
| 1736 FRAME_PTR f; | |
| 1737 widget_value *first_wv; | |
| 1738 int x; | |
| 1739 int y; | |
| 1740 int for_click; | |
| 1741 { | |
| 1742 int i; | |
| 1743 GtkWidget *menu; | |
| 1744 GtkMenuPositionFunc pos_func = 0; /* Pop up at pointer. */ | |
| 1745 struct next_popup_x_y popup_x_y; | |
|
58197
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1746 int specpdl_count = SPECPDL_INDEX (); |
| 49322 | 1747 |
|
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1748 if (! FRAME_X_P (f)) |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1749 abort (); |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1750 |
| 49322 | 1751 xg_crazy_callback_abort = 1; |
| 1752 menu = xg_create_widget ("popup", first_wv->name, f, first_wv, | |
| 1753 G_CALLBACK (popup_selection_callback), | |
| 1754 G_CALLBACK (popup_deactivate_callback), | |
| 1755 G_CALLBACK (menu_highlight_callback)); | |
| 1756 xg_crazy_callback_abort = 0; | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1757 |
| 49322 | 1758 if (! for_click) |
| 1759 { | |
| 1760 /* Not invoked by a click. pop up at x/y. */ | |
| 1761 pos_func = menu_position_func; | |
| 1762 | |
| 1763 /* Adjust coordinates to be root-window-relative. */ | |
|
51212
332134065648
Make (some) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50938
diff
changeset
|
1764 x += f->left_pos + FRAME_OUTER_TO_INNER_DIFF_X (f); |
|
332134065648
Make (some) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50938
diff
changeset
|
1765 y += f->top_pos + FRAME_OUTER_TO_INNER_DIFF_Y (f); |
| 49322 | 1766 |
| 1767 popup_x_y.x = x; | |
| 1768 popup_x_y.y = y; | |
|
49651
05ebf4266798
xterm.c (x_make_frame_visible): Call gtk_window_deiconify.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
1769 popup_x_y.f = f; |
|
59415
72adb36e240f
* xmenu.c (create_and_show_popup_menu): Pass zero as button to
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
59156
diff
changeset
|
1770 |
|
72adb36e240f
* xmenu.c (create_and_show_popup_menu): Pass zero as button to
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
59156
diff
changeset
|
1771 i = 0; /* gtk_menu_popup needs this to be 0 for a non-button popup. */ |
| 49322 | 1772 } |
|
59415
72adb36e240f
* xmenu.c (create_and_show_popup_menu): Pass zero as button to
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
59156
diff
changeset
|
1773 else |
|
72adb36e240f
* xmenu.c (create_and_show_popup_menu): Pass zero as button to
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
59156
diff
changeset
|
1774 { |
|
72adb36e240f
* xmenu.c (create_and_show_popup_menu): Pass zero as button to
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
59156
diff
changeset
|
1775 for (i = 0; i < 5; i++) |
|
72adb36e240f
* xmenu.c (create_and_show_popup_menu): Pass zero as button to
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
59156
diff
changeset
|
1776 if (FRAME_X_DISPLAY_INFO (f)->grabbed & (1 << i)) |
|
72adb36e240f
* xmenu.c (create_and_show_popup_menu): Pass zero as button to
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
59156
diff
changeset
|
1777 break; |
|
72adb36e240f
* xmenu.c (create_and_show_popup_menu): Pass zero as button to
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
59156
diff
changeset
|
1778 } |
|
61619
489414dfb069
Remove eol whitespace; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
60890
diff
changeset
|
1779 |
| 49322 | 1780 /* Display the menu. */ |
| 1781 gtk_widget_show_all (menu); | |
| 1782 gtk_menu_popup (GTK_MENU (menu), 0, 0, pos_func, &popup_x_y, i, 0); | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1783 |
|
58215
8f529503ae83
* xmenu.c (pop_down_menu): Remove global variable current_menu,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58202
diff
changeset
|
1784 record_unwind_protect (pop_down_menu, make_save_value (menu, 0)); |
|
58197
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1785 |
|
60890
a48e83530ac6
* xmenu.c (create_and_show_popup_menu): Just remove menu and return
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
60658
diff
changeset
|
1786 if (GTK_WIDGET_MAPPED (menu)) |
|
a48e83530ac6
* xmenu.c (create_and_show_popup_menu): Just remove menu and return
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
60658
diff
changeset
|
1787 { |
|
a48e83530ac6
* xmenu.c (create_and_show_popup_menu): Just remove menu and return
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
60658
diff
changeset
|
1788 /* Set this to one. popup_widget_loop increases it by one, so it becomes |
|
a48e83530ac6
* xmenu.c (create_and_show_popup_menu): Just remove menu and return
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
60658
diff
changeset
|
1789 two. show_help_echo uses this to detect popup menus. */ |
|
a48e83530ac6
* xmenu.c (create_and_show_popup_menu): Just remove menu and return
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
60658
diff
changeset
|
1790 popup_activated_flag = 1; |
|
a48e83530ac6
* xmenu.c (create_and_show_popup_menu): Just remove menu and return
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
60658
diff
changeset
|
1791 /* Process events that apply to the menu. */ |
|
a48e83530ac6
* xmenu.c (create_and_show_popup_menu): Just remove menu and return
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
60658
diff
changeset
|
1792 popup_widget_loop (1, menu); |
|
a48e83530ac6
* xmenu.c (create_and_show_popup_menu): Just remove menu and return
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
60658
diff
changeset
|
1793 } |
|
58197
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1794 |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1795 unbind_to (specpdl_count, Qnil); |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1796 |
| 49322 | 1797 /* Must reset this manually because the button release event is not passed |
| 1798 to Emacs event loop. */ | |
| 1799 FRAME_X_DISPLAY_INFO (f)->grabbed = 0; | |
| 1800 } | |
| 1801 | |
| 1802 #else /* not USE_GTK */ | |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1803 |
|
9336
d5ffd9c9edb0
(widget_id_tick): Move definition into conditional.
Richard M. Stallman <rms@gnu.org>
parents:
9236
diff
changeset
|
1804 /* We need a unique id for each widget handled by the Lucid Widget |
|
11918
da016ba65a6c
(xmenu_show, xdialog_show): Increment widget_id_tick
Karl Heuer <kwzh@gnu.org>
parents:
11907
diff
changeset
|
1805 library. |
|
da016ba65a6c
(xmenu_show, xdialog_show): Increment widget_id_tick
Karl Heuer <kwzh@gnu.org>
parents:
11907
diff
changeset
|
1806 |
|
da016ba65a6c
(xmenu_show, xdialog_show): Increment widget_id_tick
Karl Heuer <kwzh@gnu.org>
parents:
11907
diff
changeset
|
1807 For the main windows, and popup menus, we use this counter, |
| 12661 | 1808 which we increment each time after use. This starts from 1<<16. |
|
11918
da016ba65a6c
(xmenu_show, xdialog_show): Increment widget_id_tick
Karl Heuer <kwzh@gnu.org>
parents:
11907
diff
changeset
|
1809 |
| 12661 | 1810 For menu bars, we use numbers starting at 0, counted in |
| 1811 next_menubar_widget_id. */ | |
|
9336
d5ffd9c9edb0
(widget_id_tick): Move definition into conditional.
Richard M. Stallman <rms@gnu.org>
parents:
9236
diff
changeset
|
1812 LWLIB_ID widget_id_tick; |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
1813 |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1814 static void |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1815 popup_selection_callback (widget, id, client_data) |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1816 Widget widget; |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1817 LWLIB_ID id; |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1818 XtPointer client_data; |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1819 { |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1820 menu_item_selection = (Lisp_Object *) client_data; |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1821 } |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1822 |
|
58197
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1823 /* ARG is the LWLIB ID of the dialog box, represented |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1824 as a Lisp object as (HIGHPART . LOWPART). */ |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1825 |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1826 static Lisp_Object |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1827 pop_down_menu (arg) |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1828 Lisp_Object arg; |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1829 { |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1830 LWLIB_ID id = (XINT (XCAR (arg)) << 4 * sizeof (LWLIB_ID) |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1831 | XINT (XCDR (arg))); |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1832 |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1833 BLOCK_INPUT; |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1834 lw_destroy_all_widgets (id); |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1835 UNBLOCK_INPUT; |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1836 popup_activated_flag = 0; |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1837 |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1838 return Qnil; |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1839 } |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1840 |
| 49322 | 1841 /* Pop up the menu for frame F defined by FIRST_WV at X/Y and loop until the |
| 1842 menu pops down. | |
| 1843 menu_item_selection will be set to the selection. */ | |
| 1844 static void | |
| 1845 create_and_show_popup_menu (f, first_wv, x, y, for_click) | |
| 1846 FRAME_PTR f; | |
| 1847 widget_value *first_wv; | |
| 1848 int x; | |
| 1849 int y; | |
| 1850 int for_click; | |
| 1851 { | |
| 1852 int i; | |
| 1853 Arg av[2]; | |
| 1854 int ac = 0; | |
| 1855 XButtonPressedEvent dummy; | |
| 1856 LWLIB_ID menu_id; | |
| 1857 Widget menu; | |
| 1858 | |
|
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1859 if (! FRAME_X_P (f)) |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1860 abort (); |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1861 |
| 49322 | 1862 menu_id = widget_id_tick++; |
| 1863 menu = lw_create_widget ("popup", first_wv->name, menu_id, first_wv, | |
| 1864 f->output_data.x->widget, 1, 0, | |
| 1865 popup_selection_callback, | |
| 1866 popup_deactivate_callback, | |
| 1867 menu_highlight_callback); | |
| 1868 | |
| 1869 dummy.type = ButtonPress; | |
| 1870 dummy.serial = 0; | |
| 1871 dummy.send_event = 0; | |
| 1872 dummy.display = FRAME_X_DISPLAY (f); | |
| 1873 dummy.time = CurrentTime; | |
| 1874 dummy.root = FRAME_X_DISPLAY_INFO (f)->root_window; | |
| 1875 dummy.window = dummy.root; | |
| 1876 dummy.subwindow = dummy.root; | |
| 1877 dummy.x = x; | |
| 1878 dummy.y = y; | |
| 1879 | |
| 1880 /* Adjust coordinates to be root-window-relative. */ | |
|
51212
332134065648
Make (some) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50938
diff
changeset
|
1881 x += f->left_pos + FRAME_OUTER_TO_INNER_DIFF_X (f); |
|
332134065648
Make (some) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50938
diff
changeset
|
1882 y += f->top_pos + FRAME_OUTER_TO_INNER_DIFF_Y (f); |
| 49322 | 1883 |
| 1884 dummy.x_root = x; | |
| 1885 dummy.y_root = y; | |
| 1886 | |
| 1887 dummy.state = 0; | |
| 1888 dummy.button = 0; | |
| 1889 for (i = 0; i < 5; i++) | |
| 1890 if (FRAME_X_DISPLAY_INFO (f)->grabbed & (1 << i)) | |
| 1891 dummy.button = i; | |
| 1892 | |
| 1893 /* Don't allow any geometry request from the user. */ | |
| 1894 XtSetArg (av[ac], XtNgeometry, 0); ac++; | |
| 1895 XtSetValues (menu, av, ac); | |
| 1896 | |
| 1897 /* Display the menu. */ | |
| 1898 lw_popup_menu (menu, (XEvent *) &dummy); | |
| 1899 popup_activated_flag = 1; | |
|
72854
f295b430aa3a
* xterm.c (x_initialize): Don't install Xt event timer here.
Chong Yidong <cyd@stupidchicken.com>
parents:
72757
diff
changeset
|
1900 x_activate_timeout_atimer (); |
|
61619
489414dfb069
Remove eol whitespace; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
60890
diff
changeset
|
1901 |
|
58197
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1902 { |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1903 int fact = 4 * sizeof (LWLIB_ID); |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1904 int specpdl_count = SPECPDL_INDEX (); |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1905 record_unwind_protect (pop_down_menu, |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1906 Fcons (make_number (menu_id >> (fact)), |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1907 make_number (menu_id & ~(-1 << (fact))))); |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1908 |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1909 /* Process events that apply to the menu. */ |
|
59156
03a6e350cf4d
(popup_get_selection): Remove parameter down_on_keypress.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
59155
diff
changeset
|
1910 popup_get_selection ((XEvent *) 0, FRAME_X_DISPLAY_INFO (f), menu_id, 1); |
|
58197
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1911 |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1912 unbind_to (specpdl_count, Qnil); |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
1913 } |
| 49322 | 1914 } |
| 1915 | |
| 1916 #endif /* not USE_GTK */ | |
| 1917 | |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1918 static Lisp_Object |
|
11491
272baf4a077a
(xmenu_show, xdialog_show): Delete menubarp arg.
Richard M. Stallman <rms@gnu.org>
parents:
11449
diff
changeset
|
1919 xmenu_show (f, x, y, for_click, keymaps, title, error) |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1920 FRAME_PTR f; |
|
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1921 int x; |
|
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1922 int y; |
|
10757
2829c9840b0e
(xmenu_show, both versions): New arg for_click.
Richard M. Stallman <rms@gnu.org>
parents:
10716
diff
changeset
|
1923 int for_click; |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1924 int keymaps; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1925 Lisp_Object title; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1926 char **error; |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1927 { |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1928 int i; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1929 widget_value *wv, *save_wv = 0, *first_wv = 0, *prev_wv = 0; |
|
6291
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1930 widget_value **submenu_stack |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1931 = (widget_value **) alloca (menu_items_used * sizeof (widget_value *)); |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1932 Lisp_Object *subprefix_stack |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1933 = (Lisp_Object *) alloca (menu_items_used * sizeof (Lisp_Object)); |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1934 int submenu_depth = 0; |
|
6881
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
1935 |
|
7521
2971264ff9aa
(xmenu_show): Completely ignore nameless panes
Richard M. Stallman <rms@gnu.org>
parents:
7459
diff
changeset
|
1936 int first_pane; |
|
2971264ff9aa
(xmenu_show): Completely ignore nameless panes
Richard M. Stallman <rms@gnu.org>
parents:
7459
diff
changeset
|
1937 |
|
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1938 if (! FRAME_X_P (f)) |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1939 abort (); |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1940 |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1941 *error = NULL; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1942 |
|
7335
73d1276933e1
(xmenu_show): Disallow empty menus.
Karl Heuer <kwzh@gnu.org>
parents:
7334
diff
changeset
|
1943 if (menu_items_used <= MENU_ITEMS_PANE_LENGTH) |
|
73d1276933e1
(xmenu_show): Disallow empty menus.
Karl Heuer <kwzh@gnu.org>
parents:
7334
diff
changeset
|
1944 { |
|
73d1276933e1
(xmenu_show): Disallow empty menus.
Karl Heuer <kwzh@gnu.org>
parents:
7334
diff
changeset
|
1945 *error = "Empty menu"; |
|
73d1276933e1
(xmenu_show): Disallow empty menus.
Karl Heuer <kwzh@gnu.org>
parents:
7334
diff
changeset
|
1946 return Qnil; |
|
73d1276933e1
(xmenu_show): Disallow empty menus.
Karl Heuer <kwzh@gnu.org>
parents:
7334
diff
changeset
|
1947 } |
|
5896
b20145eafe0c
(xmenu_show) [USE_X_TOOLKIT]: return Qnil when val is null.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5881
diff
changeset
|
1948 |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1949 /* Create a tree of widget_value objects |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1950 representing the panes and their items. */ |
|
14546
bc0388a7c282
(xmalloc_widget_value): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14298
diff
changeset
|
1951 wv = xmalloc_widget_value (); |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1952 wv->name = "menu"; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1953 wv->value = 0; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1954 wv->enabled = 1; |
| 24993 | 1955 wv->button_type = BUTTON_TYPE_NONE; |
|
42588
43a330df6213
(set_frame_menubar, xmenu_show):
Jason Rumney <jasonr@gnu.org>
parents:
42586
diff
changeset
|
1956 wv->help =Qnil; |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1957 first_wv = wv; |
|
7521
2971264ff9aa
(xmenu_show): Completely ignore nameless panes
Richard M. Stallman <rms@gnu.org>
parents:
7459
diff
changeset
|
1958 first_pane = 1; |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1959 |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1960 /* Loop over all panes and items, filling in the tree. */ |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1961 i = 0; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1962 while (i < menu_items_used) |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1963 { |
|
6291
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1964 if (EQ (XVECTOR (menu_items)->contents[i], Qnil)) |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1965 { |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1966 submenu_stack[submenu_depth++] = save_wv; |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1967 save_wv = prev_wv; |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1968 prev_wv = 0; |
|
7521
2971264ff9aa
(xmenu_show): Completely ignore nameless panes
Richard M. Stallman <rms@gnu.org>
parents:
7459
diff
changeset
|
1969 first_pane = 1; |
|
6291
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1970 i++; |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1971 } |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1972 else if (EQ (XVECTOR (menu_items)->contents[i], Qlambda)) |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1973 { |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1974 prev_wv = save_wv; |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1975 save_wv = submenu_stack[--submenu_depth]; |
|
7521
2971264ff9aa
(xmenu_show): Completely ignore nameless panes
Richard M. Stallman <rms@gnu.org>
parents:
7459
diff
changeset
|
1976 first_pane = 0; |
|
6291
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1977 i++; |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1978 } |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1979 else if (EQ (XVECTOR (menu_items)->contents[i], Qt) |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1980 && submenu_depth != 0) |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1981 i += MENU_ITEMS_PANE_LENGTH; |
|
6746
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
1982 /* Ignore a nil in the item list. |
|
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
1983 It's meaningful only for dialog boxes. */ |
|
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
1984 else if (EQ (XVECTOR (menu_items)->contents[i], Qquote)) |
|
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
1985 i += 1; |
|
6291
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1986 else if (EQ (XVECTOR (menu_items)->contents[i], Qt)) |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1987 { |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1988 /* Create a new pane. */ |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1989 Lisp_Object pane_name, prefix; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1990 char *pane_string; |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1991 |
|
37940
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37929
diff
changeset
|
1992 pane_name = AREF (menu_items, i + MENU_ITEMS_PANE_NAME); |
|
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37929
diff
changeset
|
1993 prefix = AREF (menu_items, i + MENU_ITEMS_PANE_PREFIX); |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1994 |
|
23302
dcff2a4b6cb4
(single_submenu) [! HAVE_MULTILINGUAL_MENU]: Make
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
1995 #ifndef HAVE_MULTILINGUAL_MENU |
|
37940
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37929
diff
changeset
|
1996 if (STRINGP (pane_name) && STRING_MULTIBYTE (pane_name)) |
|
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37929
diff
changeset
|
1997 { |
|
60583
44c9c79a2c7a
(ENCODE_MENU_STRING): Explicitly use string_make_unibyte.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59914
diff
changeset
|
1998 pane_name = ENCODE_MENU_STRING (pane_name); |
|
91607
d1e53221c4aa
* xselect.c (x_handle_dnd_message):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91327
diff
changeset
|
1999 ASET (menu_items, i + MENU_ITEMS_PANE_NAME, pane_name); |
|
37940
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37929
diff
changeset
|
2000 } |
|
23302
dcff2a4b6cb4
(single_submenu) [! HAVE_MULTILINGUAL_MENU]: Make
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
2001 #endif |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2002 pane_string = (NILP (pane_name) |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
2003 ? "" : (char *) SDATA (pane_name)); |
|
6291
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
2004 /* If there is just one top-level pane, put all its items directly |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2005 under the top-level menu. */ |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2006 if (menu_items_n_panes == 1) |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2007 pane_string = ""; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2008 |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2009 /* If the pane has a meaningful name, |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2010 make the pane a top-level menu item |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2011 with its items as a submenu beneath it. */ |
|
7521
2971264ff9aa
(xmenu_show): Completely ignore nameless panes
Richard M. Stallman <rms@gnu.org>
parents:
7459
diff
changeset
|
2012 if (!keymaps && strcmp (pane_string, "")) |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2013 { |
|
14546
bc0388a7c282
(xmalloc_widget_value): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14298
diff
changeset
|
2014 wv = xmalloc_widget_value (); |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2015 if (save_wv) |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2016 save_wv->next = wv; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2017 else |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2018 first_wv->contents = wv; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2019 wv->name = pane_string; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2020 if (keymaps && !NILP (prefix)) |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2021 wv->name++; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2022 wv->value = 0; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2023 wv->enabled = 1; |
| 24993 | 2024 wv->button_type = BUTTON_TYPE_NONE; |
|
42588
43a330df6213
(set_frame_menubar, xmenu_show):
Jason Rumney <jasonr@gnu.org>
parents:
42586
diff
changeset
|
2025 wv->help = Qnil; |
|
7521
2971264ff9aa
(xmenu_show): Completely ignore nameless panes
Richard M. Stallman <rms@gnu.org>
parents:
7459
diff
changeset
|
2026 save_wv = wv; |
|
2971264ff9aa
(xmenu_show): Completely ignore nameless panes
Richard M. Stallman <rms@gnu.org>
parents:
7459
diff
changeset
|
2027 prev_wv = 0; |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2028 } |
|
7521
2971264ff9aa
(xmenu_show): Completely ignore nameless panes
Richard M. Stallman <rms@gnu.org>
parents:
7459
diff
changeset
|
2029 else if (first_pane) |
|
2971264ff9aa
(xmenu_show): Completely ignore nameless panes
Richard M. Stallman <rms@gnu.org>
parents:
7459
diff
changeset
|
2030 { |
|
2971264ff9aa
(xmenu_show): Completely ignore nameless panes
Richard M. Stallman <rms@gnu.org>
parents:
7459
diff
changeset
|
2031 save_wv = wv; |
|
2971264ff9aa
(xmenu_show): Completely ignore nameless panes
Richard M. Stallman <rms@gnu.org>
parents:
7459
diff
changeset
|
2032 prev_wv = 0; |
|
2971264ff9aa
(xmenu_show): Completely ignore nameless panes
Richard M. Stallman <rms@gnu.org>
parents:
7459
diff
changeset
|
2033 } |
|
2971264ff9aa
(xmenu_show): Completely ignore nameless panes
Richard M. Stallman <rms@gnu.org>
parents:
7459
diff
changeset
|
2034 first_pane = 0; |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2035 i += MENU_ITEMS_PANE_LENGTH; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2036 } |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2037 else |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2038 { |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2039 /* Create a new item within current pane. */ |
|
30472
0c982ed8515f
(menu_highlight_callback): Call show_help_echo directly
Gerd Moellmann <gerd@gnu.org>
parents:
30420
diff
changeset
|
2040 Lisp_Object item_name, enable, descrip, def, type, selected, help; |
|
37940
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37929
diff
changeset
|
2041 item_name = AREF (menu_items, i + MENU_ITEMS_ITEM_NAME); |
|
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37929
diff
changeset
|
2042 enable = AREF (menu_items, i + MENU_ITEMS_ITEM_ENABLE); |
|
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37929
diff
changeset
|
2043 descrip = AREF (menu_items, i + MENU_ITEMS_ITEM_EQUIV_KEY); |
|
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37929
diff
changeset
|
2044 def = AREF (menu_items, i + MENU_ITEMS_ITEM_DEFINITION); |
|
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37929
diff
changeset
|
2045 type = AREF (menu_items, i + MENU_ITEMS_ITEM_TYPE); |
|
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37929
diff
changeset
|
2046 selected = AREF (menu_items, i + MENU_ITEMS_ITEM_SELECTED); |
|
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37929
diff
changeset
|
2047 help = AREF (menu_items, i + MENU_ITEMS_ITEM_HELP); |
| 24993 | 2048 |
|
23302
dcff2a4b6cb4
(single_submenu) [! HAVE_MULTILINGUAL_MENU]: Make
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
2049 #ifndef HAVE_MULTILINGUAL_MENU |
| 24993 | 2050 if (STRINGP (item_name) && STRING_MULTIBYTE (item_name)) |
|
37940
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37929
diff
changeset
|
2051 { |
| 51404 | 2052 item_name = ENCODE_MENU_STRING (item_name); |
|
91607
d1e53221c4aa
* xselect.c (x_handle_dnd_message):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91327
diff
changeset
|
2053 ASET (menu_items, i + MENU_ITEMS_ITEM_NAME, item_name); |
|
37940
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37929
diff
changeset
|
2054 } |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2055 |
| 24993 | 2056 if (STRINGP (descrip) && STRING_MULTIBYTE (descrip)) |
|
37940
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37929
diff
changeset
|
2057 { |
| 51404 | 2058 descrip = ENCODE_MENU_STRING (descrip); |
|
91607
d1e53221c4aa
* xselect.c (x_handle_dnd_message):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91327
diff
changeset
|
2059 ASET (menu_items, i + MENU_ITEMS_ITEM_EQUIV_KEY, descrip); |
|
37940
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37929
diff
changeset
|
2060 } |
|
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37929
diff
changeset
|
2061 #endif /* not HAVE_MULTILINGUAL_MENU */ |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2062 |
|
14546
bc0388a7c282
(xmalloc_widget_value): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14298
diff
changeset
|
2063 wv = xmalloc_widget_value (); |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2064 if (prev_wv) |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2065 prev_wv->next = wv; |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2066 else |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2067 save_wv->contents = wv; |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
2068 wv->name = (char *) SDATA (item_name); |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2069 if (!NILP (descrip)) |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
2070 wv->key = (char *) SDATA (descrip); |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2071 wv->value = 0; |
|
10167
358d48409854
Don't include ../oldXMenu/XMenu.h if USE_X_TOOLKIT.
Richard M. Stallman <rms@gnu.org>
parents:
9725
diff
changeset
|
2072 /* If this item has a null value, |
|
358d48409854
Don't include ../oldXMenu/XMenu.h if USE_X_TOOLKIT.
Richard M. Stallman <rms@gnu.org>
parents:
9725
diff
changeset
|
2073 make the call_data null so that it won't display a box |
|
358d48409854
Don't include ../oldXMenu/XMenu.h if USE_X_TOOLKIT.
Richard M. Stallman <rms@gnu.org>
parents:
9725
diff
changeset
|
2074 when the mouse is on it. */ |
|
358d48409854
Don't include ../oldXMenu/XMenu.h if USE_X_TOOLKIT.
Richard M. Stallman <rms@gnu.org>
parents:
9725
diff
changeset
|
2075 wv->call_data |
|
358d48409854
Don't include ../oldXMenu/XMenu.h if USE_X_TOOLKIT.
Richard M. Stallman <rms@gnu.org>
parents:
9725
diff
changeset
|
2076 = (!NILP (def) ? (void *) &XVECTOR (menu_items)->contents[i] : 0); |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2077 wv->enabled = !NILP (enable); |
| 24993 | 2078 |
| 2079 if (NILP (type)) | |
| 2080 wv->button_type = BUTTON_TYPE_NONE; | |
| 2081 else if (EQ (type, QCtoggle)) | |
| 2082 wv->button_type = BUTTON_TYPE_TOGGLE; | |
| 2083 else if (EQ (type, QCradio)) | |
| 2084 wv->button_type = BUTTON_TYPE_RADIO; | |
| 2085 else | |
| 2086 abort (); | |
| 2087 | |
| 2088 wv->selected = !NILP (selected); | |
|
40477
a56267e601e4
Include coding.h and charset.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40239
diff
changeset
|
2089 |
|
41769
26c1876db9e3
(menu_highlight_callback): Use `help' field as Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
40993
diff
changeset
|
2090 if (! STRINGP (help)) |
|
26c1876db9e3
(menu_highlight_callback): Use `help' field as Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
40993
diff
changeset
|
2091 help = Qnil; |
|
26c1876db9e3
(menu_highlight_callback): Use `help' field as Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
40993
diff
changeset
|
2092 |
|
26c1876db9e3
(menu_highlight_callback): Use `help' field as Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
40993
diff
changeset
|
2093 wv->help = help; |
|
40477
a56267e601e4
Include coding.h and charset.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40239
diff
changeset
|
2094 |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2095 prev_wv = wv; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2096 |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2097 i += MENU_ITEMS_ITEM_LENGTH; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2098 } |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2099 } |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2100 |
|
9236
583bb9211b2b
(popup_get_selection): Remove BLOCK_INPUT, UNBLOCK_INPUT since the
Paul Reilly <pmr@pajato.com>
parents:
9233
diff
changeset
|
2101 /* Deal with the title, if it is non-nil. */ |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2102 if (!NILP (title)) |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2103 { |
|
14546
bc0388a7c282
(xmalloc_widget_value): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14298
diff
changeset
|
2104 widget_value *wv_title = xmalloc_widget_value (); |
|
bc0388a7c282
(xmalloc_widget_value): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14298
diff
changeset
|
2105 widget_value *wv_sep1 = xmalloc_widget_value (); |
|
bc0388a7c282
(xmalloc_widget_value): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14298
diff
changeset
|
2106 widget_value *wv_sep2 = xmalloc_widget_value (); |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2107 |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2108 wv_sep2->name = "--"; |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2109 wv_sep2->next = first_wv->contents; |
|
42588
43a330df6213
(set_frame_menubar, xmenu_show):
Jason Rumney <jasonr@gnu.org>
parents:
42586
diff
changeset
|
2110 wv_sep2->help = Qnil; |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2111 |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2112 wv_sep1->name = "--"; |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2113 wv_sep1->next = wv_sep2; |
|
42588
43a330df6213
(set_frame_menubar, xmenu_show):
Jason Rumney <jasonr@gnu.org>
parents:
42586
diff
changeset
|
2114 wv_sep1->help = Qnil; |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2115 |
|
23302
dcff2a4b6cb4
(single_submenu) [! HAVE_MULTILINGUAL_MENU]: Make
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
2116 #ifndef HAVE_MULTILINGUAL_MENU |
|
dcff2a4b6cb4
(single_submenu) [! HAVE_MULTILINGUAL_MENU]: Make
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
2117 if (STRING_MULTIBYTE (title)) |
| 51404 | 2118 title = ENCODE_MENU_STRING (title); |
|
23302
dcff2a4b6cb4
(single_submenu) [! HAVE_MULTILINGUAL_MENU]: Make
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
2119 #endif |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2120 |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
2121 wv_title->name = (char *) SDATA (title); |
|
40477
a56267e601e4
Include coding.h and charset.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40239
diff
changeset
|
2122 wv_title->enabled = TRUE; |
| 24993 | 2123 wv_title->button_type = BUTTON_TYPE_NONE; |
|
95730
c3a24b1a8412
(set_frame_menubar): Sync with version in xmenu.c.
Jason Rumney <jasonr@gnu.org>
parents:
95647
diff
changeset
|
2124 wv_title->help = Qnil; |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2125 wv_title->next = wv_sep1; |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2126 first_wv->contents = wv_title; |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2127 } |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2128 |
| 49322 | 2129 /* No selection has been chosen yet. */ |
| 2130 menu_item_selection = 0; | |
| 2131 | |
| 2132 /* Actually create and show the menu until popped down. */ | |
| 2133 create_and_show_popup_menu (f, first_wv, x, y, for_click); | |
|
8414
8a8d2cdd4218
(xmenu_show): Ignore any geometry resource from the user.
Richard M. Stallman <rms@gnu.org>
parents:
8269
diff
changeset
|
2134 |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2135 /* Free the widget_value objects we used to specify the contents. */ |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2136 free_menubar_widget_value_tree (first_wv); |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2137 |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2138 /* Find the selected item, and its pane, to return |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2139 the proper value. */ |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2140 if (menu_item_selection != 0) |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2141 { |
|
11655
a9f93ce6e1b4
(xmenu_show, menubar_selection_callback): Move declaration
Karl Heuer <kwzh@gnu.org>
parents:
11614
diff
changeset
|
2142 Lisp_Object prefix, entry; |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2143 |
|
31829
43566b0aec59
Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents:
31465
diff
changeset
|
2144 prefix = entry = Qnil; |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2145 i = 0; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2146 while (i < menu_items_used) |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2147 { |
|
6291
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
2148 if (EQ (XVECTOR (menu_items)->contents[i], Qnil)) |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
2149 { |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
2150 subprefix_stack[submenu_depth++] = prefix; |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
2151 prefix = entry; |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
2152 i++; |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
2153 } |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
2154 else if (EQ (XVECTOR (menu_items)->contents[i], Qlambda)) |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
2155 { |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
2156 prefix = subprefix_stack[--submenu_depth]; |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
2157 i++; |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
2158 } |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
2159 else if (EQ (XVECTOR (menu_items)->contents[i], Qt)) |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2160 { |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2161 prefix |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2162 = XVECTOR (menu_items)->contents[i + MENU_ITEMS_PANE_PREFIX]; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2163 i += MENU_ITEMS_PANE_LENGTH; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2164 } |
|
13071
2e514396cbc8
(popup_get_selection): Pop menu down if button is pressed
Richard M. Stallman <rms@gnu.org>
parents:
12747
diff
changeset
|
2165 /* Ignore a nil in the item list. |
|
2e514396cbc8
(popup_get_selection): Pop menu down if button is pressed
Richard M. Stallman <rms@gnu.org>
parents:
12747
diff
changeset
|
2166 It's meaningful only for dialog boxes. */ |
|
2e514396cbc8
(popup_get_selection): Pop menu down if button is pressed
Richard M. Stallman <rms@gnu.org>
parents:
12747
diff
changeset
|
2167 else if (EQ (XVECTOR (menu_items)->contents[i], Qquote)) |
|
2e514396cbc8
(popup_get_selection): Pop menu down if button is pressed
Richard M. Stallman <rms@gnu.org>
parents:
12747
diff
changeset
|
2168 i += 1; |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2169 else |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2170 { |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2171 entry |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2172 = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_VALUE]; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2173 if (menu_item_selection == &XVECTOR (menu_items)->contents[i]) |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2174 { |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2175 if (keymaps != 0) |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2176 { |
|
6291
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
2177 int j; |
|
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
2178 |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2179 entry = Fcons (entry, Qnil); |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2180 if (!NILP (prefix)) |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2181 entry = Fcons (prefix, entry); |
|
6291
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
2182 for (j = submenu_depth - 1; j >= 0; j--) |
|
6931
2d0ee7ef620a
(xmenu_show): Fix typo in last change.
Richard M. Stallman <rms@gnu.org>
parents:
6913
diff
changeset
|
2183 if (!NILP (subprefix_stack[j])) |
|
6913
f167828a3ec2
(xmenu_show): Don't cons on subprefix_stck[j] if nil.
Richard M. Stallman <rms@gnu.org>
parents:
6881
diff
changeset
|
2184 entry = Fcons (subprefix_stack[j], entry); |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2185 } |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2186 return entry; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2187 } |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2188 i += MENU_ITEMS_ITEM_LENGTH; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2189 } |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2190 } |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2191 } |
|
61984
2ce055c7db65
[not HAVE_X_TOOLKIT] (xmenu_show):
Richard M. Stallman <rms@gnu.org>
parents:
61620
diff
changeset
|
2192 else if (!for_click) |
|
2ce055c7db65
[not HAVE_X_TOOLKIT] (xmenu_show):
Richard M. Stallman <rms@gnu.org>
parents:
61620
diff
changeset
|
2193 /* Make "Cancel" equivalent to C-g. */ |
|
2ce055c7db65
[not HAVE_X_TOOLKIT] (xmenu_show):
Richard M. Stallman <rms@gnu.org>
parents:
61620
diff
changeset
|
2194 Fsignal (Qquit, Qnil); |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2195 |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2196 return Qnil; |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
2197 } |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2198 |
| 49322 | 2199 #ifdef USE_GTK |
| 2200 static void | |
| 2201 dialog_selection_callback (widget, client_data) | |
| 2202 GtkWidget *widget; | |
| 2203 gpointer client_data; | |
| 2204 { | |
| 2205 /* The EMACS_INT cast avoids a warning. There's no problem | |
| 2206 as long as pointers have enough bits to hold small integers. */ | |
| 2207 if ((int) (EMACS_INT) client_data != -1) | |
| 2208 menu_item_selection = (Lisp_Object *) client_data; | |
| 2209 | |
| 2210 popup_activated_flag = 0; | |
| 2211 } | |
| 2212 | |
| 2213 /* Pop up the dialog for frame F defined by FIRST_WV and loop until the | |
| 2214 dialog pops down. | |
| 2215 menu_item_selection will be set to the selection. */ | |
| 2216 static void | |
| 2217 create_and_show_dialog (f, first_wv) | |
| 2218 FRAME_PTR f; | |
| 2219 widget_value *first_wv; | |
| 2220 { | |
| 2221 GtkWidget *menu; | |
| 2222 | |
|
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
2223 if (! FRAME_X_P (f)) |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
2224 abort (); |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
2225 |
| 49322 | 2226 menu = xg_create_widget ("dialog", first_wv->name, f, first_wv, |
| 2227 G_CALLBACK (dialog_selection_callback), | |
| 2228 G_CALLBACK (popup_deactivate_callback), | |
| 2229 0); | |
| 2230 | |
| 2231 if (menu) | |
| 2232 { | |
|
58197
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2233 int specpdl_count = SPECPDL_INDEX (); |
|
58215
8f529503ae83
* xmenu.c (pop_down_menu): Remove global variable current_menu,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58202
diff
changeset
|
2234 record_unwind_protect (pop_down_menu, make_save_value (menu, 0)); |
|
58197
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2235 |
| 49322 | 2236 /* Display the menu. */ |
| 2237 gtk_widget_show_all (menu); | |
| 2238 | |
| 2239 /* Process events that apply to the menu. */ | |
|
58170
66ace4a9a250
(pop_down_menu): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58169
diff
changeset
|
2240 popup_widget_loop (1, menu); |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2241 |
|
58197
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2242 unbind_to (specpdl_count, Qnil); |
| 49322 | 2243 } |
| 2244 } | |
| 2245 | |
| 2246 #else /* not USE_GTK */ | |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2247 static void |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2248 dialog_selection_callback (widget, id, client_data) |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2249 Widget widget; |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2250 LWLIB_ID id; |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2251 XtPointer client_data; |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2252 { |
|
11266
3e93d8b99b05
(menubar_selection_callback, dialog_selection_callback)
Richard M. Stallman <rms@gnu.org>
parents:
11237
diff
changeset
|
2253 /* The EMACS_INT cast avoids a warning. There's no problem |
|
3e93d8b99b05
(menubar_selection_callback, dialog_selection_callback)
Richard M. Stallman <rms@gnu.org>
parents:
11237
diff
changeset
|
2254 as long as pointers have enough bits to hold small integers. */ |
|
3e93d8b99b05
(menubar_selection_callback, dialog_selection_callback)
Richard M. Stallman <rms@gnu.org>
parents:
11237
diff
changeset
|
2255 if ((int) (EMACS_INT) client_data != -1) |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2256 menu_item_selection = (Lisp_Object *) client_data; |
| 49322 | 2257 |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2258 BLOCK_INPUT; |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2259 lw_destroy_all_widgets (id); |
|
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2260 UNBLOCK_INPUT; |
|
11614
fdd0d5bdd8c6
(popup_get_selection): Use x_non_menubar_window_to_frame.
Karl Heuer <kwzh@gnu.org>
parents:
11528
diff
changeset
|
2261 popup_activated_flag = 0; |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2262 } |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
2263 |
| 49322 | 2264 |
| 2265 /* Pop up the dialog for frame F defined by FIRST_WV and loop until the | |
| 2266 dialog pops down. | |
| 2267 menu_item_selection will be set to the selection. */ | |
| 2268 static void | |
| 2269 create_and_show_dialog (f, first_wv) | |
| 2270 FRAME_PTR f; | |
| 2271 widget_value *first_wv; | |
| 2272 { | |
| 2273 LWLIB_ID dialog_id; | |
| 2274 | |
|
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
2275 if (!FRAME_X_P (f)) |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
2276 abort(); |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
2277 |
| 49322 | 2278 dialog_id = widget_id_tick++; |
| 2279 lw_create_widget (first_wv->name, "dialog", dialog_id, first_wv, | |
| 2280 f->output_data.x->widget, 1, 0, | |
| 2281 dialog_selection_callback, 0, 0); | |
| 2282 lw_modify_all_widgets (dialog_id, first_wv->contents, True); | |
| 2283 | |
| 2284 /* Display the dialog box. */ | |
| 2285 lw_pop_up_all_widgets (dialog_id); | |
| 2286 popup_activated_flag = 1; | |
|
72854
f295b430aa3a
* xterm.c (x_initialize): Don't install Xt event timer here.
Chong Yidong <cyd@stupidchicken.com>
parents:
72757
diff
changeset
|
2287 x_activate_timeout_atimer (); |
| 49322 | 2288 |
| 2289 /* Process events that apply to the dialog box. | |
| 2290 Also handle timers. */ | |
| 2291 { | |
| 2292 int count = SPECPDL_INDEX (); | |
| 2293 int fact = 4 * sizeof (LWLIB_ID); | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2294 |
| 49322 | 2295 /* xdialog_show_unwind is responsible for popping the dialog box down. */ |
|
58197
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2296 record_unwind_protect (pop_down_menu, |
| 49322 | 2297 Fcons (make_number (dialog_id >> (fact)), |
| 2298 make_number (dialog_id & ~(-1 << (fact))))); | |
| 2299 | |
|
57965
9b14127a651a
* eval.c (Feval): Remove check for INPUT_BLOCKED_P.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57928
diff
changeset
|
2300 popup_get_selection ((XEvent *) 0, FRAME_X_DISPLAY_INFO (f), |
|
59156
03a6e350cf4d
(popup_get_selection): Remove parameter down_on_keypress.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
59155
diff
changeset
|
2301 dialog_id, 1); |
| 49322 | 2302 |
| 2303 unbind_to (count, Qnil); | |
| 2304 } | |
| 2305 } | |
| 2306 | |
| 2307 #endif /* not USE_GTK */ | |
| 2308 | |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2309 static char * button_names [] = { |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2310 "button1", "button2", "button3", "button4", "button5", |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2311 "button6", "button7", "button8", "button9", "button10" }; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2312 |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2313 static Lisp_Object |
|
62661
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2314 xdialog_show (f, keymaps, title, header, error_name) |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2315 FRAME_PTR f; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2316 int keymaps; |
|
62661
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2317 Lisp_Object title, header; |
|
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2318 char **error_name; |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2319 { |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2320 int i, nb_buttons=0; |
|
6426
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2321 char dialog_name[6]; |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2322 |
|
25730
db88a4b84d91
(single_menu_item, Fx_popup_menu, Fx_popup_menu,
Gerd Moellmann <gerd@gnu.org>
parents:
25680
diff
changeset
|
2323 widget_value *wv, *first_wv = 0, *prev_wv = 0; |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2324 |
|
6746
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2325 /* Number of elements seen so far, before boundary. */ |
|
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2326 int left_count = 0; |
|
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2327 /* 1 means we've seen the boundary between left-hand elts and right-hand. */ |
|
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2328 int boundary_seen = 0; |
|
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2329 |
|
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
2330 if (! FRAME_X_P (f)) |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
2331 abort (); |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
2332 |
|
62661
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2333 *error_name = NULL; |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2334 |
|
6426
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2335 if (menu_items_n_panes > 1) |
|
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2336 { |
|
62661
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2337 *error_name = "Multiple panes in dialog box"; |
|
6426
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2338 return Qnil; |
|
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2339 } |
|
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2340 |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2341 /* Create a tree of widget_value objects |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2342 representing the text label and buttons. */ |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2343 { |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2344 Lisp_Object pane_name, prefix; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2345 char *pane_string; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2346 pane_name = XVECTOR (menu_items)->contents[MENU_ITEMS_PANE_NAME]; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2347 prefix = XVECTOR (menu_items)->contents[MENU_ITEMS_PANE_PREFIX]; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2348 pane_string = (NILP (pane_name) |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2349 ? "" : (char *) SDATA (pane_name)); |
|
14546
bc0388a7c282
(xmalloc_widget_value): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14298
diff
changeset
|
2350 prev_wv = xmalloc_widget_value (); |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2351 prev_wv->value = pane_string; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2352 if (keymaps && !NILP (prefix)) |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2353 prev_wv->name++; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2354 prev_wv->enabled = 1; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2355 prev_wv->name = "message"; |
|
42588
43a330df6213
(set_frame_menubar, xmenu_show):
Jason Rumney <jasonr@gnu.org>
parents:
42586
diff
changeset
|
2356 prev_wv->help = Qnil; |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2357 first_wv = prev_wv; |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2358 |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2359 /* Loop over all panes and items, filling in the tree. */ |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2360 i = MENU_ITEMS_PANE_LENGTH; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2361 while (i < menu_items_used) |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2362 { |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2363 |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2364 /* Create a new item within current pane. */ |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2365 Lisp_Object item_name, enable, descrip; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2366 item_name = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_NAME]; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2367 enable = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_ENABLE]; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2368 descrip |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2369 = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_EQUIV_KEY]; |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2370 |
|
6426
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2371 if (NILP (item_name)) |
|
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2372 { |
|
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2373 free_menubar_widget_value_tree (first_wv); |
|
62661
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2374 *error_name = "Submenu in dialog items"; |
|
6426
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2375 return Qnil; |
|
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2376 } |
|
6746
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2377 if (EQ (item_name, Qquote)) |
|
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2378 { |
|
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2379 /* This is the boundary between left-side elts |
|
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2380 and right-side elts. Stop incrementing right_count. */ |
|
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2381 boundary_seen = 1; |
|
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2382 i++; |
|
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2383 continue; |
|
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2384 } |
|
15912
afb0bb1cdbe6
(xdialog_show): Don't allow 9 buttons.
Richard M. Stallman <rms@gnu.org>
parents:
15839
diff
changeset
|
2385 if (nb_buttons >= 9) |
|
6426
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2386 { |
|
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2387 free_menubar_widget_value_tree (first_wv); |
|
62661
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2388 *error_name = "Too many dialog items"; |
|
6426
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2389 return Qnil; |
|
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2390 } |
|
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2391 |
|
14546
bc0388a7c282
(xmalloc_widget_value): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14298
diff
changeset
|
2392 wv = xmalloc_widget_value (); |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2393 prev_wv->next = wv; |
|
6426
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2394 wv->name = (char *) button_names[nb_buttons]; |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2395 if (!NILP (descrip)) |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
2396 wv->key = (char *) SDATA (descrip); |
|
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
2397 wv->value = (char *) SDATA (item_name); |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2398 wv->call_data = (void *) &XVECTOR (menu_items)->contents[i]; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2399 wv->enabled = !NILP (enable); |
|
42588
43a330df6213
(set_frame_menubar, xmenu_show):
Jason Rumney <jasonr@gnu.org>
parents:
42586
diff
changeset
|
2400 wv->help = Qnil; |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2401 prev_wv = wv; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2402 |
|
6746
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2403 if (! boundary_seen) |
|
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2404 left_count++; |
|
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2405 |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2406 nb_buttons++; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2407 i += MENU_ITEMS_ITEM_LENGTH; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2408 } |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2409 |
|
6746
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2410 /* If the boundary was not specified, |
|
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2411 by default put half on the left and half on the right. */ |
|
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2412 if (! boundary_seen) |
|
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2413 left_count = nb_buttons - nb_buttons / 2; |
|
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2414 |
|
14546
bc0388a7c282
(xmalloc_widget_value): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14298
diff
changeset
|
2415 wv = xmalloc_widget_value (); |
|
6426
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2416 wv->name = dialog_name; |
|
42588
43a330df6213
(set_frame_menubar, xmenu_show):
Jason Rumney <jasonr@gnu.org>
parents:
42586
diff
changeset
|
2417 wv->help = Qnil; |
|
62661
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2418 |
|
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2419 /* Frame title: 'Q' = Question, 'I' = Information. |
|
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2420 Can also have 'E' = Error if, one day, we want |
|
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2421 a popup for errors. */ |
|
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2422 if (NILP(header)) |
|
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2423 dialog_name[0] = 'Q'; |
|
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2424 else |
|
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2425 dialog_name[0] = 'I'; |
|
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2426 |
|
6426
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2427 /* Dialog boxes use a really stupid name encoding |
|
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2428 which specifies how many buttons to use |
|
62661
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2429 and how many buttons are on the right. */ |
|
6426
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2430 dialog_name[1] = '0' + nb_buttons; |
|
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2431 dialog_name[2] = 'B'; |
|
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2432 dialog_name[3] = 'R'; |
|
6746
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2433 /* Number of buttons to put on the right. */ |
|
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2434 dialog_name[4] = '0' + nb_buttons - left_count; |
|
6426
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2435 dialog_name[5] = 0; |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2436 wv->contents = first_wv; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2437 first_wv = wv; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2438 } |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2439 |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2440 /* No selection has been chosen yet. */ |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2441 menu_item_selection = 0; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2442 |
|
77513
5ac304d35ef8
(xdialog_show): Call Fredisplay before showing the dialog.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
75348
diff
changeset
|
2443 /* Force a redisplay before showing the dialog. If a frame is created |
|
5ac304d35ef8
(xdialog_show): Call Fredisplay before showing the dialog.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
75348
diff
changeset
|
2444 just before showing the dialog, its contents may not have been fully |
|
5ac304d35ef8
(xdialog_show): Call Fredisplay before showing the dialog.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
75348
diff
changeset
|
2445 drawn, as this depends on timing of events from the X server. Redisplay |
|
5ac304d35ef8
(xdialog_show): Call Fredisplay before showing the dialog.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
75348
diff
changeset
|
2446 is not done when a dialog is shown. If redisplay could be done in the |
|
5ac304d35ef8
(xdialog_show): Call Fredisplay before showing the dialog.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
75348
diff
changeset
|
2447 X event loop (i.e. the X event loop does not run in a signal handler) |
|
5ac304d35ef8
(xdialog_show): Call Fredisplay before showing the dialog.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
75348
diff
changeset
|
2448 this would not be needed. */ |
|
5ac304d35ef8
(xdialog_show): Call Fredisplay before showing the dialog.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
75348
diff
changeset
|
2449 Fredisplay (Qt); |
|
5ac304d35ef8
(xdialog_show): Call Fredisplay before showing the dialog.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
75348
diff
changeset
|
2450 |
| 49322 | 2451 /* Actually create and show the dialog. */ |
| 2452 create_and_show_dialog (f, first_wv); | |
| 2453 | |
| 2454 /* Free the widget_value objects we used to specify the contents. */ | |
| 2455 free_menubar_widget_value_tree (first_wv); | |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2456 |
| 49322 | 2457 /* Find the selected item, and its pane, to return |
| 2458 the proper value. */ | |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2459 if (menu_item_selection != 0) |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2460 { |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2461 Lisp_Object prefix; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2462 |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2463 prefix = Qnil; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2464 i = 0; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2465 while (i < menu_items_used) |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2466 { |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2467 Lisp_Object entry; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2468 |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2469 if (EQ (XVECTOR (menu_items)->contents[i], Qt)) |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2470 { |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2471 prefix |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2472 = XVECTOR (menu_items)->contents[i + MENU_ITEMS_PANE_PREFIX]; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2473 i += MENU_ITEMS_PANE_LENGTH; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2474 } |
|
31465
b58d8e366faa
(xdialog_show): When looking up the selection in
Gerd Moellmann <gerd@gnu.org>
parents:
31365
diff
changeset
|
2475 else if (EQ (XVECTOR (menu_items)->contents[i], Qquote)) |
|
b58d8e366faa
(xdialog_show): When looking up the selection in
Gerd Moellmann <gerd@gnu.org>
parents:
31365
diff
changeset
|
2476 { |
|
b58d8e366faa
(xdialog_show): When looking up the selection in
Gerd Moellmann <gerd@gnu.org>
parents:
31365
diff
changeset
|
2477 /* This is the boundary between left-side elts and |
|
b58d8e366faa
(xdialog_show): When looking up the selection in
Gerd Moellmann <gerd@gnu.org>
parents:
31365
diff
changeset
|
2478 right-side elts. */ |
|
b58d8e366faa
(xdialog_show): When looking up the selection in
Gerd Moellmann <gerd@gnu.org>
parents:
31365
diff
changeset
|
2479 ++i; |
|
b58d8e366faa
(xdialog_show): When looking up the selection in
Gerd Moellmann <gerd@gnu.org>
parents:
31365
diff
changeset
|
2480 } |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2481 else |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2482 { |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2483 entry |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2484 = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_VALUE]; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2485 if (menu_item_selection == &XVECTOR (menu_items)->contents[i]) |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2486 { |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2487 if (keymaps != 0) |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2488 { |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2489 entry = Fcons (entry, Qnil); |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2490 if (!NILP (prefix)) |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2491 entry = Fcons (prefix, entry); |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2492 } |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2493 return entry; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2494 } |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2495 i += MENU_ITEMS_ITEM_LENGTH; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2496 } |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2497 } |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2498 } |
|
59102
0096c58ce34a
* xmenu.c (popup_get_selection): Pop down on C-g.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58824
diff
changeset
|
2499 else |
|
0096c58ce34a
* xmenu.c (popup_get_selection): Pop down on C-g.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58824
diff
changeset
|
2500 /* Make "Cancel" equivalent to C-g. */ |
|
0096c58ce34a
* xmenu.c (popup_get_selection): Pop down on C-g.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58824
diff
changeset
|
2501 Fsignal (Qquit, Qnil); |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2502 |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2503 return Qnil; |
|
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2504 } |
|
30299
f2cd2bf063c9
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30215
diff
changeset
|
2505 |
| 49322 | 2506 #else /* not USE_X_TOOLKIT && not USE_GTK */ |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2507 |
|
27458
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2508 /* The frame of the last activated non-toolkit menu bar. |
|
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2509 Used to generate menu help events. */ |
|
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2510 |
|
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2511 static struct frame *menu_help_frame; |
|
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2512 |
|
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2513 |
|
30363
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2514 /* Show help HELP_STRING, or clear help if HELP_STRING is null. |
|
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2515 |
|
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2516 PANE is the pane number, and ITEM is the menu item number in |
|
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2517 the menu (currently not used). |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2518 |
|
30363
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2519 This cannot be done with generating a HELP_EVENT because |
|
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2520 XMenuActivate contains a loop that doesn't let Emacs process |
|
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2521 keyboard events. */ |
|
27458
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2522 |
|
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2523 static void |
|
30363
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2524 menu_help_callback (help_string, pane, item) |
|
27458
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2525 char *help_string; |
|
30363
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2526 int pane, item; |
|
27458
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2527 { |
|
30363
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2528 extern Lisp_Object Qmenu_item; |
|
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2529 Lisp_Object *first_item; |
|
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2530 Lisp_Object pane_name; |
|
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2531 Lisp_Object menu_object; |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2532 |
|
30363
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2533 first_item = XVECTOR (menu_items)->contents; |
|
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2534 if (EQ (first_item[0], Qt)) |
|
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2535 pane_name = first_item[MENU_ITEMS_PANE_NAME]; |
|
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2536 else if (EQ (first_item[0], Qquote)) |
|
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2537 /* This shouldn't happen, see xmenu_show. */ |
|
81273
13e433477b6c
(menu_help_callback): Use empty_unibyte_string, not empty_string.
Juanma Barranquero <lekktu@gmail.com>
parents:
77513
diff
changeset
|
2538 pane_name = empty_unibyte_string; |
|
30363
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2539 else |
|
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2540 pane_name = first_item[MENU_ITEMS_ITEM_NAME]; |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2541 |
|
30363
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2542 /* (menu-item MENU-NAME PANE-NUMBER) */ |
|
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2543 menu_object = Fcons (Qmenu_item, |
|
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2544 Fcons (pane_name, |
|
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2545 Fcons (make_number (pane), Qnil))); |
|
30299
f2cd2bf063c9
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30215
diff
changeset
|
2546 show_help_echo (help_string ? build_string (help_string) : Qnil, |
|
30363
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2547 Qnil, menu_object, make_number (item), 1); |
|
27458
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2548 } |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2549 |
|
58197
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2550 static Lisp_Object |
|
58215
8f529503ae83
* xmenu.c (pop_down_menu): Remove global variable current_menu,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58202
diff
changeset
|
2551 pop_down_menu (arg) |
|
8f529503ae83
* xmenu.c (pop_down_menu): Remove global variable current_menu,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58202
diff
changeset
|
2552 Lisp_Object arg; |
|
58197
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2553 { |
|
58215
8f529503ae83
* xmenu.c (pop_down_menu): Remove global variable current_menu,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58202
diff
changeset
|
2554 struct Lisp_Save_Value *p1 = XSAVE_VALUE (Fcar (arg)); |
|
8f529503ae83
* xmenu.c (pop_down_menu): Remove global variable current_menu,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58202
diff
changeset
|
2555 struct Lisp_Save_Value *p2 = XSAVE_VALUE (Fcdr (arg)); |
|
61619
489414dfb069
Remove eol whitespace; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
60890
diff
changeset
|
2556 |
|
58215
8f529503ae83
* xmenu.c (pop_down_menu): Remove global variable current_menu,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58202
diff
changeset
|
2557 FRAME_PTR f = p1->pointer; |
|
8f529503ae83
* xmenu.c (pop_down_menu): Remove global variable current_menu,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58202
diff
changeset
|
2558 XMenu *menu = p2->pointer; |
|
58197
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2559 |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2560 BLOCK_INPUT; |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2561 #ifndef MSDOS |
|
58215
8f529503ae83
* xmenu.c (pop_down_menu): Remove global variable current_menu,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58202
diff
changeset
|
2562 XUngrabPointer (FRAME_X_DISPLAY (f), CurrentTime); |
|
8f529503ae83
* xmenu.c (pop_down_menu): Remove global variable current_menu,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58202
diff
changeset
|
2563 XUngrabKeyboard (FRAME_X_DISPLAY (f), CurrentTime); |
|
58197
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2564 #endif |
|
58215
8f529503ae83
* xmenu.c (pop_down_menu): Remove global variable current_menu,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58202
diff
changeset
|
2565 XMenuDestroy (FRAME_X_DISPLAY (f), menu); |
|
58197
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2566 |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2567 #ifdef HAVE_X_WINDOWS |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2568 /* Assume the mouse has moved out of the X window. |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2569 If it has actually moved in, we will get an EnterNotify. */ |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2570 x_mouse_leave (FRAME_X_DISPLAY_INFO (f)); |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2571 |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2572 /* State that no mouse buttons are now held. |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2573 (The oldXMenu code doesn't track this info for us.) |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2574 That is not necessarily true, but the fiction leads to reasonable |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2575 results, and it is a pain to ask which are actually held now. */ |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2576 FRAME_X_DISPLAY_INFO (f)->grabbed = 0; |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2577 |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2578 #endif /* HAVE_X_WINDOWS */ |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2579 |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2580 UNBLOCK_INPUT; |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2581 |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2582 return Qnil; |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2583 } |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2584 |
|
27458
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2585 |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2586 static Lisp_Object |
|
11491
272baf4a077a
(xmenu_show, xdialog_show): Delete menubarp arg.
Richard M. Stallman <rms@gnu.org>
parents:
11449
diff
changeset
|
2587 xmenu_show (f, x, y, for_click, keymaps, title, error) |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2588 FRAME_PTR f; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2589 int x, y; |
|
10757
2829c9840b0e
(xmenu_show, both versions): New arg for_click.
Richard M. Stallman <rms@gnu.org>
parents:
10716
diff
changeset
|
2590 int for_click; |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2591 int keymaps; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2592 Lisp_Object title; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2593 char **error; |
| 118 | 2594 { |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2595 Window root; |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2596 XMenu *menu; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2597 int pane, selidx, lpane, status; |
|
58215
8f529503ae83
* xmenu.c (pop_down_menu): Remove global variable current_menu,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58202
diff
changeset
|
2598 Lisp_Object entry, pane_prefix; |
| 118 | 2599 char *datap; |
| 2600 int ulx, uly, width, height; | |
| 2601 int dispwidth, dispheight; | |
|
58824
8da33d42472e
* xmenu.c (Fx_popup_menu): Correct documentation about position.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58283
diff
changeset
|
2602 int i, j, lines, maxlines; |
|
6881
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2603 int maxwidth; |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2604 int dummy_int; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2605 unsigned int dummy_uint; |
|
58197
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2606 int specpdl_count = SPECPDL_INDEX (); |
|
1082
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
2607 |
|
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
2608 if (! FRAME_X_P (f)) |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
2609 abort (); |
|
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
2610 |
|
3747
6506b2fd475a
(xmenu_show): Store 0 in *ERROR at the beginning.
Richard M. Stallman <rms@gnu.org>
parents:
3501
diff
changeset
|
2611 *error = 0; |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2612 if (menu_items_n_panes == 0) |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2613 return Qnil; |
|
1082
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
2614 |
|
7335
73d1276933e1
(xmenu_show): Disallow empty menus.
Karl Heuer <kwzh@gnu.org>
parents:
7334
diff
changeset
|
2615 if (menu_items_used <= MENU_ITEMS_PANE_LENGTH) |
|
73d1276933e1
(xmenu_show): Disallow empty menus.
Karl Heuer <kwzh@gnu.org>
parents:
7334
diff
changeset
|
2616 { |
|
73d1276933e1
(xmenu_show): Disallow empty menus.
Karl Heuer <kwzh@gnu.org>
parents:
7334
diff
changeset
|
2617 *error = "Empty menu"; |
|
73d1276933e1
(xmenu_show): Disallow empty menus.
Karl Heuer <kwzh@gnu.org>
parents:
7334
diff
changeset
|
2618 return Qnil; |
|
73d1276933e1
(xmenu_show): Disallow empty menus.
Karl Heuer <kwzh@gnu.org>
parents:
7334
diff
changeset
|
2619 } |
|
73d1276933e1
(xmenu_show): Disallow empty menus.
Karl Heuer <kwzh@gnu.org>
parents:
7334
diff
changeset
|
2620 |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2621 /* Figure out which root window F is on. */ |
|
9608
1a85137cb257
Use FRAME_X_DISPLAY, not XDISPLAY or x_current_display.
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2622 XGetGeometry (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), &root, |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2623 &dummy_int, &dummy_int, &dummy_uint, &dummy_uint, |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2624 &dummy_uint, &dummy_uint); |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
2625 |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2626 /* Make the menu on that window. */ |
|
9608
1a85137cb257
Use FRAME_X_DISPLAY, not XDISPLAY or x_current_display.
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2627 menu = XMenuCreate (FRAME_X_DISPLAY (f), root, "emacs"); |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2628 if (menu == NULL) |
| 118 | 2629 { |
| 2630 *error = "Can't create menu"; | |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2631 return Qnil; |
| 118 | 2632 } |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2633 |
|
67743
3c879987313f
(xmenu_show): Call inhibit_garbage_collection.
Richard M. Stallman <rms@gnu.org>
parents:
67703
diff
changeset
|
2634 /* Don't GC while we prepare and show the menu, |
|
3c879987313f
(xmenu_show): Call inhibit_garbage_collection.
Richard M. Stallman <rms@gnu.org>
parents:
67703
diff
changeset
|
2635 because we give the oldxmenu library pointers to the |
|
3c879987313f
(xmenu_show): Call inhibit_garbage_collection.
Richard M. Stallman <rms@gnu.org>
parents:
67703
diff
changeset
|
2636 contents of strings. */ |
|
3c879987313f
(xmenu_show): Call inhibit_garbage_collection.
Richard M. Stallman <rms@gnu.org>
parents:
67703
diff
changeset
|
2637 inhibit_garbage_collection (); |
|
3c879987313f
(xmenu_show): Call inhibit_garbage_collection.
Richard M. Stallman <rms@gnu.org>
parents:
67703
diff
changeset
|
2638 |
| 9572 | 2639 #ifdef HAVE_X_WINDOWS |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2640 /* Adjust coordinates to relative to the outer (window manager) window. */ |
|
58824
8da33d42472e
* xmenu.c (Fx_popup_menu): Correct documentation about position.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58283
diff
changeset
|
2641 x += FRAME_OUTER_TO_INNER_DIFF_X (f); |
|
8da33d42472e
* xmenu.c (Fx_popup_menu): Correct documentation about position.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58283
diff
changeset
|
2642 y += FRAME_OUTER_TO_INNER_DIFF_Y (f); |
| 9572 | 2643 #endif /* HAVE_X_WINDOWS */ |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2644 |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2645 /* Adjust coordinates to be root-window-relative. */ |
|
51212
332134065648
Make (some) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50938
diff
changeset
|
2646 x += f->left_pos; |
|
332134065648
Make (some) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50938
diff
changeset
|
2647 y += f->top_pos; |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2648 |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2649 /* Create all the necessary panes and their items. */ |
|
58824
8da33d42472e
* xmenu.c (Fx_popup_menu): Correct documentation about position.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58283
diff
changeset
|
2650 maxlines = lines = i = 0; |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2651 while (i < menu_items_used) |
| 118 | 2652 { |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2653 if (EQ (XVECTOR (menu_items)->contents[i], Qt)) |
| 118 | 2654 { |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2655 /* Create a new pane. */ |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2656 Lisp_Object pane_name, prefix; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2657 char *pane_string; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2658 |
|
58824
8da33d42472e
* xmenu.c (Fx_popup_menu): Correct documentation about position.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58283
diff
changeset
|
2659 maxlines = max (maxlines, lines); |
|
8da33d42472e
* xmenu.c (Fx_popup_menu): Correct documentation about position.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58283
diff
changeset
|
2660 lines = 0; |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2661 pane_name = XVECTOR (menu_items)->contents[i + MENU_ITEMS_PANE_NAME]; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2662 prefix = XVECTOR (menu_items)->contents[i + MENU_ITEMS_PANE_PREFIX]; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2663 pane_string = (NILP (pane_name) |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
2664 ? "" : (char *) SDATA (pane_name)); |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2665 if (keymaps && !NILP (prefix)) |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2666 pane_string++; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2667 |
|
9608
1a85137cb257
Use FRAME_X_DISPLAY, not XDISPLAY or x_current_display.
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2668 lpane = XMenuAddPane (FRAME_X_DISPLAY (f), menu, pane_string, TRUE); |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2669 if (lpane == XM_FAILURE) |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2670 { |
|
9608
1a85137cb257
Use FRAME_X_DISPLAY, not XDISPLAY or x_current_display.
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2671 XMenuDestroy (FRAME_X_DISPLAY (f), menu); |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2672 *error = "Can't create pane"; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2673 return Qnil; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2674 } |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2675 i += MENU_ITEMS_PANE_LENGTH; |
|
6881
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2676 |
|
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2677 /* Find the width of the widest item in this pane. */ |
|
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2678 maxwidth = 0; |
|
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2679 j = i; |
|
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2680 while (j < menu_items_used) |
|
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2681 { |
|
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2682 Lisp_Object item; |
|
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2683 item = XVECTOR (menu_items)->contents[j]; |
|
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2684 if (EQ (item, Qt)) |
|
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2685 break; |
|
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2686 if (NILP (item)) |
|
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2687 { |
|
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2688 j++; |
|
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2689 continue; |
|
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2690 } |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
2691 width = SBYTES (item); |
|
6881
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2692 if (width > maxwidth) |
|
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2693 maxwidth = width; |
|
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2694 |
|
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2695 j += MENU_ITEMS_ITEM_LENGTH; |
|
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2696 } |
| 118 | 2697 } |
|
6746
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2698 /* Ignore a nil in the item list. |
|
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2699 It's meaningful only for dialog boxes. */ |
|
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2700 else if (EQ (XVECTOR (menu_items)->contents[i], Qquote)) |
|
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2701 i += 1; |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2702 else |
| 118 | 2703 { |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2704 /* Create a new item within current pane. */ |
|
27458
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2705 Lisp_Object item_name, enable, descrip, help; |
|
6881
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2706 unsigned char *item_data; |
|
27458
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2707 char *help_string; |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2708 |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2709 item_name = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_NAME]; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2710 enable = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_ENABLE]; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2711 descrip |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2712 = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_EQUIV_KEY]; |
|
27458
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2713 help = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_HELP]; |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
2714 help_string = STRINGP (help) ? SDATA (help) : NULL; |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2715 |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2716 if (!NILP (descrip)) |
|
6881
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2717 { |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
2718 int gap = maxwidth - SBYTES (item_name); |
|
6881
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2719 /* if alloca is fast, use that to make the space, |
|
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2720 to reduce gc needs. */ |
|
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2721 item_data |
|
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2722 = (unsigned char *) alloca (maxwidth |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
2723 + SBYTES (descrip) + 1); |
|
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
2724 bcopy (SDATA (item_name), item_data, |
|
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
2725 SBYTES (item_name)); |
|
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
2726 for (j = SCHARS (item_name); j < maxwidth; j++) |
|
6881
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2727 item_data[j] = ' '; |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
2728 bcopy (SDATA (descrip), item_data + j, |
|
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
2729 SBYTES (descrip)); |
|
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
2730 item_data[j + SBYTES (descrip)] = 0; |
|
6881
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2731 } |
|
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2732 else |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
2733 item_data = SDATA (item_name); |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2734 |
|
9608
1a85137cb257
Use FRAME_X_DISPLAY, not XDISPLAY or x_current_display.
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2735 if (XMenuAddSelection (FRAME_X_DISPLAY (f), |
|
1a85137cb257
Use FRAME_X_DISPLAY, not XDISPLAY or x_current_display.
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2736 menu, lpane, 0, item_data, |
|
27458
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2737 !NILP (enable), help_string) |
| 118 | 2738 == XM_FAILURE) |
| 2739 { | |
|
9608
1a85137cb257
Use FRAME_X_DISPLAY, not XDISPLAY or x_current_display.
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2740 XMenuDestroy (FRAME_X_DISPLAY (f), menu); |
| 118 | 2741 *error = "Can't add selection to menu"; |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2742 return Qnil; |
| 118 | 2743 } |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2744 i += MENU_ITEMS_ITEM_LENGTH; |
|
58824
8da33d42472e
* xmenu.c (Fx_popup_menu): Correct documentation about position.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58283
diff
changeset
|
2745 lines++; |
| 118 | 2746 } |
| 2747 } | |
|
6881
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2748 |
|
58824
8da33d42472e
* xmenu.c (Fx_popup_menu): Correct documentation about position.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58283
diff
changeset
|
2749 maxlines = max (maxlines, lines); |
|
8da33d42472e
* xmenu.c (Fx_popup_menu): Correct documentation about position.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58283
diff
changeset
|
2750 |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2751 /* All set and ready to fly. */ |
|
9608
1a85137cb257
Use FRAME_X_DISPLAY, not XDISPLAY or x_current_display.
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2752 XMenuRecompute (FRAME_X_DISPLAY (f), menu); |
|
37255
ff709975abaf
(xmenu_show): Use FRAME_X_SCREEN_NUMBER.
Gerd Moellmann <gerd@gnu.org>
parents:
37211
diff
changeset
|
2753 dispwidth = DisplayWidth (FRAME_X_DISPLAY (f), FRAME_X_SCREEN_NUMBER (f)); |
|
ff709975abaf
(xmenu_show): Use FRAME_X_SCREEN_NUMBER.
Gerd Moellmann <gerd@gnu.org>
parents:
37211
diff
changeset
|
2754 dispheight = DisplayHeight (FRAME_X_DISPLAY (f), FRAME_X_SCREEN_NUMBER (f)); |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2755 x = min (x, dispwidth); |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2756 y = min (y, dispheight); |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2757 x = max (x, 1); |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2758 y = max (y, 1); |
|
9608
1a85137cb257
Use FRAME_X_DISPLAY, not XDISPLAY or x_current_display.
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2759 XMenuLocate (FRAME_X_DISPLAY (f), menu, 0, 0, x, y, |
| 118 | 2760 &ulx, &uly, &width, &height); |
| 2761 if (ulx+width > dispwidth) | |
| 2762 { | |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2763 x -= (ulx + width) - dispwidth; |
| 118 | 2764 ulx = dispwidth - width; |
| 2765 } | |
| 2766 if (uly+height > dispheight) | |
| 2767 { | |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2768 y -= (uly + height) - dispheight; |
| 118 | 2769 uly = dispheight - height; |
| 2770 } | |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2771 if (ulx < 0) x -= ulx; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2772 if (uly < 0) y -= uly; |
|
6526
95661fd7a320
(xmenu_show): Enable asynchronous events.
Karl Heuer <kwzh@gnu.org>
parents:
6481
diff
changeset
|
2773 |
|
58824
8da33d42472e
* xmenu.c (Fx_popup_menu): Correct documentation about position.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58283
diff
changeset
|
2774 if (! for_click) |
|
8da33d42472e
* xmenu.c (Fx_popup_menu): Correct documentation about position.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58283
diff
changeset
|
2775 { |
|
8da33d42472e
* xmenu.c (Fx_popup_menu): Correct documentation about position.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58283
diff
changeset
|
2776 /* If position was not given by a mouse click, adjust so upper left |
|
8da33d42472e
* xmenu.c (Fx_popup_menu): Correct documentation about position.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58283
diff
changeset
|
2777 corner of the menu as a whole ends up at given coordinates. This |
|
8da33d42472e
* xmenu.c (Fx_popup_menu): Correct documentation about position.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58283
diff
changeset
|
2778 is what x-popup-menu says in its documentation. */ |
|
8da33d42472e
* xmenu.c (Fx_popup_menu): Correct documentation about position.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58283
diff
changeset
|
2779 x += width/2; |
|
8da33d42472e
* xmenu.c (Fx_popup_menu): Correct documentation about position.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58283
diff
changeset
|
2780 y += 1.5*height/(maxlines+2); |
|
8da33d42472e
* xmenu.c (Fx_popup_menu): Correct documentation about position.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58283
diff
changeset
|
2781 } |
|
8da33d42472e
* xmenu.c (Fx_popup_menu): Correct documentation about position.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58283
diff
changeset
|
2782 |
|
6526
95661fd7a320
(xmenu_show): Enable asynchronous events.
Karl Heuer <kwzh@gnu.org>
parents:
6481
diff
changeset
|
2783 XMenuSetAEQ (menu, TRUE); |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2784 XMenuSetFreeze (menu, TRUE); |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2785 pane = selidx = 0; |
|
27458
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2786 |
|
58168
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
2787 #ifndef MSDOS |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
2788 XMenuActivateSetWaitFunction (x_menu_wait_for_event, FRAME_X_DISPLAY (f)); |
|
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
2789 #endif |
|
61619
489414dfb069
Remove eol whitespace; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
60890
diff
changeset
|
2790 |
|
58215
8f529503ae83
* xmenu.c (pop_down_menu): Remove global variable current_menu,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58202
diff
changeset
|
2791 record_unwind_protect (pop_down_menu, |
|
8f529503ae83
* xmenu.c (pop_down_menu): Remove global variable current_menu,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58202
diff
changeset
|
2792 Fcons (make_save_value (f, 0), |
|
8f529503ae83
* xmenu.c (pop_down_menu): Remove global variable current_menu,
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58202
diff
changeset
|
2793 make_save_value (menu, 0))); |
|
58168
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
2794 |
|
27458
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2795 /* Help display under X won't work because XMenuActivate contains |
|
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2796 a loop that doesn't give Emacs a chance to process it. */ |
|
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2797 menu_help_frame = f; |
|
9608
1a85137cb257
Use FRAME_X_DISPLAY, not XDISPLAY or x_current_display.
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2798 status = XMenuActivate (FRAME_X_DISPLAY (f), menu, &pane, &selidx, |
|
58197
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2799 x, y, ButtonReleaseMask, &datap, |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2800 menu_help_callback); |
|
10167
358d48409854
Don't include ../oldXMenu/XMenu.h if USE_X_TOOLKIT.
Richard M. Stallman <rms@gnu.org>
parents:
9725
diff
changeset
|
2801 |
| 118 | 2802 switch (status) |
| 2803 { | |
| 2804 case XM_SUCCESS: | |
| 2805 #ifdef XDEBUG | |
| 2806 fprintf (stderr, "pane= %d line = %d\n", panes, selidx); | |
| 2807 #endif | |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2808 |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2809 /* Find the item number SELIDX in pane number PANE. */ |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2810 i = 0; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2811 while (i < menu_items_used) |
|
2747
f258c79c9162
(Fx_popup_menu): Add a vector of prefix keys for the panes.
Richard M. Stallman <rms@gnu.org>
parents:
2514
diff
changeset
|
2812 { |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2813 if (EQ (XVECTOR (menu_items)->contents[i], Qt)) |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2814 { |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2815 if (pane == 0) |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2816 pane_prefix |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2817 = XVECTOR (menu_items)->contents[i + MENU_ITEMS_PANE_PREFIX]; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2818 pane--; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2819 i += MENU_ITEMS_PANE_LENGTH; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2820 } |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2821 else |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2822 { |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2823 if (pane == -1) |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2824 { |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2825 if (selidx == 0) |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2826 { |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2827 entry |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2828 = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_VALUE]; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2829 if (keymaps != 0) |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2830 { |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2831 entry = Fcons (entry, Qnil); |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2832 if (!NILP (pane_prefix)) |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2833 entry = Fcons (pane_prefix, entry); |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2834 } |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2835 break; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2836 } |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2837 selidx--; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2838 } |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2839 i += MENU_ITEMS_ITEM_LENGTH; |
|
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2840 } |
|
2747
f258c79c9162
(Fx_popup_menu): Add a vector of prefix keys for the panes.
Richard M. Stallman <rms@gnu.org>
parents:
2514
diff
changeset
|
2841 } |
| 118 | 2842 break; |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2843 |
| 118 | 2844 case XM_FAILURE: |
| 2845 *error = "Can't activate menu"; | |
| 2846 case XM_IA_SELECT: | |
|
59102
0096c58ce34a
* xmenu.c (popup_get_selection): Pop down on C-g.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58824
diff
changeset
|
2847 entry = Qnil; |
|
0096c58ce34a
* xmenu.c (popup_get_selection): Pop down on C-g.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58824
diff
changeset
|
2848 break; |
| 118 | 2849 case XM_NO_SELECT: |
|
61984
2ce055c7db65
[not HAVE_X_TOOLKIT] (xmenu_show):
Richard M. Stallman <rms@gnu.org>
parents:
61620
diff
changeset
|
2850 /* Make "Cancel" equivalent to C-g unless FOR_CLICK (which means |
|
2ce055c7db65
[not HAVE_X_TOOLKIT] (xmenu_show):
Richard M. Stallman <rms@gnu.org>
parents:
61620
diff
changeset
|
2851 the menu was invoked with a mouse event as POSITION). */ |
|
59102
0096c58ce34a
* xmenu.c (popup_get_selection): Pop down on C-g.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58824
diff
changeset
|
2852 if (! for_click) |
|
0096c58ce34a
* xmenu.c (popup_get_selection): Pop down on C-g.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58824
diff
changeset
|
2853 Fsignal (Qquit, Qnil); |
| 118 | 2854 entry = Qnil; |
| 2855 break; | |
| 2856 } | |
|
58197
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2857 |
|
6c24ca598cb1
* xmenu.c (unuse_menu_items, pop_down_menu): Arg is of type
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
58171
diff
changeset
|
2858 unbind_to (specpdl_count, Qnil); |
|
7208
2d3c771ff861
(xdialog_show): Clear x_mouse_grabbed.
Richard M. Stallman <rms@gnu.org>
parents:
7175
diff
changeset
|
2859 |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2860 return entry; |
| 118 | 2861 } |
|
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2862 |
|
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
2863 #endif /* not USE_X_TOOLKIT */ |
|
14741
9f9c4d4581e4
Put most of file into HAVE_MENUS conditional.
Richard M. Stallman <rms@gnu.org>
parents:
14553
diff
changeset
|
2864 |
|
9f9c4d4581e4
Put most of file into HAVE_MENUS conditional.
Richard M. Stallman <rms@gnu.org>
parents:
14553
diff
changeset
|
2865 #endif /* HAVE_MENUS */ |
|
73788
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73715
diff
changeset
|
2866 |
|
73941
b662c7bb9e5f
(popup_activated): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73788
diff
changeset
|
2867 /* Detect if a dialog or menu has been posted. */ |
|
b662c7bb9e5f
(popup_activated): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73788
diff
changeset
|
2868 |
|
b662c7bb9e5f
(popup_activated): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73788
diff
changeset
|
2869 int |
|
b662c7bb9e5f
(popup_activated): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73788
diff
changeset
|
2870 popup_activated () |
|
b662c7bb9e5f
(popup_activated): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73788
diff
changeset
|
2871 { |
|
b662c7bb9e5f
(popup_activated): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73788
diff
changeset
|
2872 return popup_activated_flag; |
|
b662c7bb9e5f
(popup_activated): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73788
diff
changeset
|
2873 } |
|
73788
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73715
diff
changeset
|
2874 |
|
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73715
diff
changeset
|
2875 /* The following is used by delayed window autoselection. */ |
|
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73715
diff
changeset
|
2876 |
|
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73715
diff
changeset
|
2877 DEFUN ("menu-or-popup-active-p", Fmenu_or_popup_active_p, Smenu_or_popup_active_p, 0, 0, 0, |
|
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73715
diff
changeset
|
2878 doc: /* Return t if a menu or popup dialog is active. */) |
|
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73715
diff
changeset
|
2879 () |
|
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73715
diff
changeset
|
2880 { |
|
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73715
diff
changeset
|
2881 #ifdef HAVE_MENUS |
|
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73715
diff
changeset
|
2882 return (popup_activated ()) ? Qt : Qnil; |
|
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73715
diff
changeset
|
2883 #else |
|
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73715
diff
changeset
|
2884 return Qnil; |
|
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73715
diff
changeset
|
2885 #endif /* HAVE_MENUS */ |
|
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73715
diff
changeset
|
2886 } |
|
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2887 |
| 21514 | 2888 void |
| 118 | 2889 syms_of_xmenu () |
| 2890 { | |
|
12625
e2831d2f5b09
(syms_of_xmenu): Set up Qdebug_on_next_call.
Richard M. Stallman <rms@gnu.org>
parents:
12432
diff
changeset
|
2891 Qdebug_on_next_call = intern ("debug-on-next-call"); |
|
e2831d2f5b09
(syms_of_xmenu): Set up Qdebug_on_next_call.
Richard M. Stallman <rms@gnu.org>
parents:
12432
diff
changeset
|
2892 staticpro (&Qdebug_on_next_call); |
|
e2831d2f5b09
(syms_of_xmenu): Set up Qdebug_on_next_call.
Richard M. Stallman <rms@gnu.org>
parents:
12432
diff
changeset
|
2893 |
|
9336
d5ffd9c9edb0
(widget_id_tick): Move definition into conditional.
Richard M. Stallman <rms@gnu.org>
parents:
9236
diff
changeset
|
2894 #ifdef USE_X_TOOLKIT |
|
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2895 widget_id_tick = (1<<16); |
| 12661 | 2896 next_menubar_widget_id = 1; |
|
9336
d5ffd9c9edb0
(widget_id_tick): Move definition into conditional.
Richard M. Stallman <rms@gnu.org>
parents:
9236
diff
changeset
|
2897 #endif |
|
d5ffd9c9edb0
(widget_id_tick): Move definition into conditional.
Richard M. Stallman <rms@gnu.org>
parents:
9236
diff
changeset
|
2898 |
| 118 | 2899 defsubr (&Sx_popup_menu); |
|
73697
54a6e7ed953c
(Fmenu_or_popup_active_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
73662
diff
changeset
|
2900 defsubr (&Smenu_or_popup_active_p); |
|
71057
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
2901 |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
2902 #if defined (USE_GTK) || defined (USE_X_TOOLKIT) |
| 83542 | 2903 defsubr (&Sx_menu_bar_open_internal); |
| 2904 Ffset (intern ("accelerate-menu"), | |
| 2905 intern (Sx_menu_bar_open_internal.symbol_name)); | |
|
71057
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
2906 #endif |
|
07d4cb17def5
(Fmenu_bar_start): New function for USE_GTK and USE_X_TOOLKIT.
Jan Dj?rv <jan.h.d@swipnet.se>
parents:
70328
diff
changeset
|
2907 |
|
14741
9f9c4d4581e4
Put most of file into HAVE_MENUS conditional.
Richard M. Stallman <rms@gnu.org>
parents:
14553
diff
changeset
|
2908 #ifdef HAVE_MENUS |
|
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2909 defsubr (&Sx_popup_dialog); |
|
14741
9f9c4d4581e4
Put most of file into HAVE_MENUS conditional.
Richard M. Stallman <rms@gnu.org>
parents:
14553
diff
changeset
|
2910 #endif |
| 118 | 2911 } |
| 52401 | 2912 |
| 2913 /* arch-tag: 92ea573c-398e-496e-ac73-2436f7d63242 | |
| 2914 (do not change this comment) */ |
