Mercurial > emacs
annotate src/xmenu.c @ 107894:9b05dc529495
Fix duplicate entries in cedet's loaddefs.el files.
* emacs-lisp/autoload.el (autoload-file-load-name): Be more clever.
Should make most file-local generated-autoload-file unnecessary.
(print-readably): Silence warnings.
(autoload-find-destination): Take load-name as an arg to make sure
it's the same as the one that will be in the file.
(autoload-generate-file-autoloads): Adjust to above changes.
Try to make the dataflow a bit simpler.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Sun, 18 Apr 2010 17:45:44 -0400 |
parents | faaa7a6517a8 |
children | b5f73bf59a4f |
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, |
106815 | 3 2004, 2005, 2006, 2007, 2008, 2009, 2010 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> |
105669
68dd71358159
* alloc.c: Do not define struct catchtag.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
102628
diff
changeset
|
40 #include <setjmp.h> |
39988
eac4e9ae201c
Change doc-string comments to `new style' [w/`doc:' keyword].
Miles Bader <miles@gnu.org>
parents:
39914
diff
changeset
|
41 |
118 | 42 #include "lisp.h" |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32179
diff
changeset
|
43 #include "keyboard.h" |
39690
38c1890338cc
(keymap_panes, Fx_popup_menu): Use Fkeymap_prompt.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
44 #include "keymap.h" |
770 | 45 #include "frame.h" |
83004
7900111db01c
Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents:
53325
diff
changeset
|
46 #include "termhooks.h" |
118 | 47 #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
|
48 #include "blockinput.h" |
12661 | 49 #include "buffer.h" |
40477
a56267e601e4
Include coding.h and charset.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40239
diff
changeset
|
50 #include "charset.h" |
a56267e601e4
Include coding.h and charset.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40239
diff
changeset
|
51 #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
|
52 #include "sysselect.h" |
118 | 53 |
10502
1b08df5c5e4a
[MSDOS]: #include msdos.h.
Richard M. Stallman <rms@gnu.org>
parents:
10167
diff
changeset
|
54 #ifdef MSDOS |
1b08df5c5e4a
[MSDOS]: #include msdos.h.
Richard M. Stallman <rms@gnu.org>
parents:
10167
diff
changeset
|
55 #include "msdos.h" |
1b08df5c5e4a
[MSDOS]: #include msdos.h.
Richard M. Stallman <rms@gnu.org>
parents:
10167
diff
changeset
|
56 #endif |
1b08df5c5e4a
[MSDOS]: #include msdos.h.
Richard M. Stallman <rms@gnu.org>
parents:
10167
diff
changeset
|
57 |
9572 | 58 #ifdef HAVE_X_WINDOWS |
118 | 59 /* This may include sys/types.h, and that somehow loses |
60 if this is not done before the other system files. */ | |
61 #include "xterm.h" | |
9572 | 62 #endif |
118 | 63 |
64 /* Load sys/types.h if not already loaded. | |
65 In some systems loading it twice is suicidal. */ | |
66 #ifndef makedev | |
67 #include <sys/types.h> | |
68 #endif | |
69 | |
70 #include "dispextern.h" | |
71 | |
9572 | 72 #ifdef HAVE_X_WINDOWS |
51404 | 73 /* Defining HAVE_MULTILINGUAL_MENU would mean that the toolkit menu |
74 code accepts the Emacs internal encoding. */ | |
23302
dcff2a4b6cb4
(single_submenu) [! HAVE_MULTILINGUAL_MENU]: Make
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
75 #undef HAVE_MULTILINGUAL_MENU |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
76 #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
|
77 #include "widget.h" |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
78 #include <X11/Xlib.h> |
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
79 #include <X11/IntrinsicP.h> |
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
80 #include <X11/CoreP.h> |
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
81 #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
|
82 #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
|
83 #ifdef USE_LUCID |
107804
24c4451bcaf7
Lucid menus can now use Xft for fonts.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
84 #include "xsettings.h" |
24c4451bcaf7
Lucid menus can now use Xft for fonts.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
85 #include "../lwlib/xlwmenu.h" |
81370
a5376379eaae
Link to xaw3d if available.
Chong Yidong <cyd@stupidchicken.com>
parents:
81273
diff
changeset
|
86 #ifdef HAVE_XAW3D |
a5376379eaae
Link to xaw3d if available.
Chong Yidong <cyd@stupidchicken.com>
parents:
81273
diff
changeset
|
87 #include <X11/Xaw3d/Paned.h> |
a5376379eaae
Link to xaw3d if available.
Chong Yidong <cyd@stupidchicken.com>
parents:
81273
diff
changeset
|
88 #else /* !HAVE_XAW3D */ |
11898
a23359be806b
(set_frame_menubar): Set menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11655
diff
changeset
|
89 #include <X11/Xaw/Paned.h> |
81370
a5376379eaae
Link to xaw3d if available.
Chong Yidong <cyd@stupidchicken.com>
parents:
81273
diff
changeset
|
90 #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
|
91 #endif /* USE_LUCID */ |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
92 #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
|
93 #else /* not USE_X_TOOLKIT */ |
49322 | 94 #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
|
95 #include "../oldXMenu/XMenu.h" |
49322 | 96 #endif |
10167
358d48409854
Don't include ../oldXMenu/XMenu.h if USE_X_TOOLKIT.
Richard M. Stallman <rms@gnu.org>
parents:
9725
diff
changeset
|
97 #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
|
98 #endif /* HAVE_X_WINDOWS */ |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
99 |
96608 | 100 #ifdef USE_GTK |
101 #include "gtkutil.h" | |
102 #endif | |
103 | |
104 #include "menu.h" | |
105 | |
118 | 106 #ifndef TRUE |
107 #define TRUE 1 | |
108 #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
|
109 #endif /* no TRUE */ |
118 | 110 |
12625
e2831d2f5b09
(syms_of_xmenu): Set up Qdebug_on_next_call.
Richard M. Stallman <rms@gnu.org>
parents:
12432
diff
changeset
|
111 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
|
112 |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
113 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
|
114 |
21242
10e1764f84b8
Don't include puresize.h any more as code that needs it
Richard M. Stallman <rms@gnu.org>
parents:
21178
diff
changeset
|
115 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
|
116 |
12661 | 117 extern Lisp_Object Voverriding_local_map; |
118 extern Lisp_Object Voverriding_local_map_menu_flag; | |
119 | |
120 extern Lisp_Object Qoverriding_local_map, Qoverriding_terminal_local_map; | |
121 | |
122 extern Lisp_Object Qmenu_bar_update_hook; | |
123 | |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
124 #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
|
125 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
|
126 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
|
127 |
62661
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
128 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
|
129 char **)); |
57814
1f473607c4a9
* xmenu.c: Add prototypes for forward function declarations.
Jan Djärv <jan.h.d@swipnet.se>
parents:
56959
diff
changeset
|
130 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
|
131 LWLIB_ID, int)); |
49322 | 132 #endif /* USE_X_TOOLKIT */ |
133 | |
134 #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
|
135 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
|
136 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
|
137 char **)); |
24993 | 138 #endif |
139 | |
36933 | 140 static int update_frame_menubar P_ ((struct frame *)); |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
141 |
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
142 /* 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
|
143 Xt on behalf of one of the widget sets. */ |
49322 | 144 static int popup_activated_flag; |
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
145 |
12661 | 146 static int next_menubar_widget_id; |
15792
feeb1f7c1cec
(pending_menu_activation): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15785
diff
changeset
|
147 |
97204 | 148 /* For NS and NTGUI, these prototypes are defined in keyboard.h. */ |
149 #if defined (USE_X_TOOLKIT) || defined (USE_GTK) | |
150 extern widget_value *xmalloc_widget_value P_ ((void)); | |
151 extern widget_value *digest_single_submenu P_ ((int, int, int)); | |
152 #endif | |
153 | |
15807
508ec69917b1
(pending_menu_activation): Don't initialize. Not static.
Richard M. Stallman <rms@gnu.org>
parents:
15795
diff
changeset
|
154 /* 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
|
155 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
|
156 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
|
157 |
508ec69917b1
(pending_menu_activation): Don't initialize. Not static.
Richard M. Stallman <rms@gnu.org>
parents:
15795
diff
changeset
|
158 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
|
159 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
|
160 |
508ec69917b1
(pending_menu_activation): Don't initialize. Not static.
Richard M. Stallman <rms@gnu.org>
parents:
15795
diff
changeset
|
161 int pending_menu_activation; |
11237
7c968b691ff0
(frame_vector): New static variable.
Richard M. Stallman <rms@gnu.org>
parents:
11125
diff
changeset
|
162 |
12661 | 163 #ifdef USE_X_TOOLKIT |
164 | |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12661
diff
changeset
|
165 /* 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
|
166 |
12661 | 167 static struct frame * |
168 menubar_id_to_frame (id) | |
169 LWLIB_ID id; | |
11237
7c968b691ff0
(frame_vector): New static variable.
Richard M. Stallman <rms@gnu.org>
parents:
11125
diff
changeset
|
170 { |
12661 | 171 Lisp_Object tail, frame; |
172 FRAME_PTR f; | |
11237
7c968b691ff0
(frame_vector): New static variable.
Richard M. Stallman <rms@gnu.org>
parents:
11125
diff
changeset
|
173 |
90970
3371fc48749b
Replace uses of GC_* macros with the non-GC_ versions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
90951
diff
changeset
|
174 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
|
175 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25322
diff
changeset
|
176 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
|
177 if (!FRAMEP (frame)) |
12661 | 178 continue; |
179 f = XFRAME (frame); | |
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
180 if (!FRAME_WINDOW_P (f)) |
12661 | 181 continue; |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12661
diff
changeset
|
182 if (f->output_data.x->id == id) |
12661 | 183 return f; |
11237
7c968b691ff0
(frame_vector): New static variable.
Richard M. Stallman <rms@gnu.org>
parents:
11125
diff
changeset
|
184 } |
12661 | 185 return 0; |
186 } | |
11237
7c968b691ff0
(frame_vector): New static variable.
Richard M. Stallman <rms@gnu.org>
parents:
11125
diff
changeset
|
187 |
12661 | 188 #endif |
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
189 |
49302
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
190 #ifdef HAVE_X_WINDOWS |
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
191 /* 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
|
192 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
|
193 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
|
194 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
|
195 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
|
196 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
|
197 sure it is the edit window. */ |
105923
1011707400d3
* menu.c (Fx_popup_menu): Consolidate versions from xmenu.c,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105903
diff
changeset
|
198 void |
53069
1218a42792ea
Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52981
diff
changeset
|
199 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
|
200 FRAME_PTR f; |
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
201 int *x; |
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
202 int *y; |
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
203 { |
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
204 Window root, dummy_window; |
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
205 int dummy; |
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
206 |
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
207 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
|
208 abort (); |
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
209 |
49302
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
210 BLOCK_INPUT; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
211 |
49302
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
212 XQueryPointer (FRAME_X_DISPLAY (f), |
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
213 DefaultRootWindow (FRAME_X_DISPLAY (f)), |
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
214 |
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
215 /* 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
|
216 &root, |
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
217 |
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
218 /* 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
|
219 &dummy_window, |
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
220 |
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
221 /* 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
|
222 x, y, |
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
223 |
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
224 /* 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
|
225 &dummy, &dummy, |
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
226 |
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
227 /* 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
|
228 we don't care. */ |
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
229 (unsigned int *) &dummy); |
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
230 |
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
231 UNBLOCK_INPUT; |
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
232 |
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
233 /* 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
|
234 coordinates. Translate. */ |
51212
332134065648
Make (some) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50938
diff
changeset
|
235 *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
|
236 *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
|
237 } |
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 #endif /* HAVE_X_WINDOWS */ |
17a9a82ad89f
(mouse_position_for_popup): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49116
diff
changeset
|
240 |
14741
9f9c4d4581e4
Put most of file into HAVE_MENUS conditional.
Richard M. Stallman <rms@gnu.org>
parents:
14553
diff
changeset
|
241 #ifdef HAVE_MENUS |
9f9c4d4581e4
Put most of file into HAVE_MENUS conditional.
Richard M. Stallman <rms@gnu.org>
parents:
14553
diff
changeset
|
242 |
62661
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
243 DEFUN ("x-popup-dialog", Fx_popup_dialog, Sx_popup_dialog, 2, 3, 0, |
40993 | 244 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
|
245 POSITION specifies which frame to use. |
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
246 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
|
247 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
|
248 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
|
249 |
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
250 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
|
251 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
|
252 Each ITEM is a cons cell (STRING . VALUE). |
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
253 The return value is VALUE from the chosen item. |
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
254 |
91951fb5b9e5
Put doc strings in comments.
Gerd Moellmann <gerd@gnu.org>
parents:
39690
diff
changeset
|
255 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
|
256 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
|
257 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
|
258 \(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
|
259 |
62661
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
260 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
|
261 otherwise it is "Question". |
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
262 |
62090
cd1e4bc8e488
(Fx_popup_menu, Fx_popup_dialog): Doc fixes.
Luc Teirlinck <teirllm@auburn.edu>
parents:
62012
diff
changeset
|
263 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
|
264 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
|
265 `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
|
266 (position, contents, header) |
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
267 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
|
268 { |
40477
a56267e601e4
Include coding.h and charset.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40239
diff
changeset
|
269 FRAME_PTR f = NULL; |
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
270 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
|
271 |
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
272 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
|
273 |
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
274 /* 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
|
275 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
|
276 || (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
|
277 || 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
|
278 { |
6653
14a0a3fe93fd
(Fx_popup_dialog): If POSITION is t, use selected frame.
Richard M. Stallman <rms@gnu.org>
parents:
6625
diff
changeset
|
279 #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
|
280 /* 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
|
281 FRAME_PTR new_f = SELECTED_FRAME (); |
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
282 Lisp_Object bar_window; |
40477
a56267e601e4
Include coding.h and charset.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40239
diff
changeset
|
283 enum scroll_bar_part part; |
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
284 unsigned long time; |
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
285 Lisp_Object x, y; |
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
286 |
11125
dc78213dd2b3
(Fx_popup_menu): Pass 1 for `insist' arg.
Richard M. Stallman <rms@gnu.org>
parents:
10835
diff
changeset
|
287 (*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
|
288 |
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
289 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
|
290 XSETFRAME (window, new_f); |
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
291 else |
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
292 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
|
293 #endif |
11907
0f03ad1cac1e
(Fx_popup_dialog): Treat (menu-bar) like t, for POSITION.
Karl Heuer <kwzh@gnu.org>
parents:
11898
diff
changeset
|
294 window = selected_window; |
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
295 } |
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
296 else if (CONSP (position)) |
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
297 { |
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
298 Lisp_Object tem; |
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
299 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
|
300 if (CONSP (tem)) |
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
301 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
|
302 else |
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
303 { |
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
304 tem = Fcar (Fcdr (position)); /* EVENT_START (position) */ |
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
305 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
|
306 } |
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
307 } |
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
308 else if (WINDOWP (position) || FRAMEP (position)) |
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
309 window = position; |
15807
508ec69917b1
(pending_menu_activation): Don't initialize. Not static.
Richard M. Stallman <rms@gnu.org>
parents:
15795
diff
changeset
|
310 else |
508ec69917b1
(pending_menu_activation): Don't initialize. Not static.
Richard M. Stallman <rms@gnu.org>
parents:
15795
diff
changeset
|
311 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
|
312 |
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
313 /* 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
|
314 |
9102
7a73653817de
(menu_item_enabled_p, single_keymap_panes, Fx_popup_menu, Fx_popup_dialog):
Karl Heuer <kwzh@gnu.org>
parents:
8849
diff
changeset
|
315 if (FRAMEP (window)) |
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
316 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
|
317 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
|
318 { |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40477
diff
changeset
|
319 CHECK_LIVE_WINDOW (window); |
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
320 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
|
321 } |
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
322 else |
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
323 /* ??? 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
|
324 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
|
325 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
|
326 |
97645
229acec13840
(Fx_popup_dialog, Fx_popup_menu, xmenu_show): Allow MSDOS frames along with
Eli Zaretskii <eliz@gnu.org>
parents:
97204
diff
changeset
|
327 if (! FRAME_X_P (f) && ! FRAME_MSDOS_P (f)) |
229acec13840
(Fx_popup_dialog, Fx_popup_menu, xmenu_show): Allow MSDOS frames along with
Eli Zaretskii <eliz@gnu.org>
parents:
97204
diff
changeset
|
328 error ("Can not put X dialog on this terminal"); |
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
329 |
102628
94c85c1ce9d8
(xdialog_show): Move Fredisplay call ...
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
330 /* Force a redisplay before showing the dialog. If a frame is created |
94c85c1ce9d8
(xdialog_show): Move Fredisplay call ...
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
331 just before showing the dialog, its contents may not have been fully |
94c85c1ce9d8
(xdialog_show): Move Fredisplay call ...
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
332 drawn, as this depends on timing of events from the X server. Redisplay |
94c85c1ce9d8
(xdialog_show): Move Fredisplay call ...
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
333 is not done when a dialog is shown. If redisplay could be done in the |
94c85c1ce9d8
(xdialog_show): Move Fredisplay call ...
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
334 X event loop (i.e. the X event loop does not run in a signal handler) |
94c85c1ce9d8
(xdialog_show): Move Fredisplay call ...
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
335 this would not be needed. |
94c85c1ce9d8
(xdialog_show): Move Fredisplay call ...
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
336 |
94c85c1ce9d8
(xdialog_show): Move Fredisplay call ...
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
337 Do this before creating the widget value that points to Lisp |
94c85c1ce9d8
(xdialog_show): Move Fredisplay call ...
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
338 string contents, because Fredisplay may GC and relocate them. */ |
94c85c1ce9d8
(xdialog_show): Move Fredisplay call ...
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
339 Fredisplay (Qt); |
94c85c1ce9d8
(xdialog_show): Move Fredisplay call ...
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
100951
diff
changeset
|
340 |
49322 | 341 #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
|
342 /* Display a menu with these alternatives |
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
343 in the middle of frame F. */ |
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
344 { |
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
345 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
|
346 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
|
347 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
|
348 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
|
349 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
|
350 |
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
351 return Fx_popup_menu (newpos, |
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
352 Fcons (Fcar (contents), Fcons (contents, Qnil))); |
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
353 } |
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
354 #else |
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
355 { |
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
356 Lisp_Object title; |
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
357 char *error_name; |
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
358 Lisp_Object selection; |
48113
6a09e4b41337
(unuse_menu_items): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46753
diff
changeset
|
359 int specpdl_count = SPECPDL_INDEX (); |
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
360 |
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
361 /* 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
|
362 title = Fcar (contents); |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40477
diff
changeset
|
363 CHECK_STRING (title); |
48113
6a09e4b41337
(unuse_menu_items): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46753
diff
changeset
|
364 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
|
365 |
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
|
366 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
|
367 /* 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
|
368 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
|
369 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
|
370 contents = Fcons (title, Fcons (Fcons (build_string ("Ok"), Qt), Qnil)); |
58171 | 371 |
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
372 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
|
373 |
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
374 /* Display them in a dialog box. */ |
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
375 BLOCK_INPUT; |
62661
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
376 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
|
377 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
|
378 |
48113
6a09e4b41337
(unuse_menu_items): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46753
diff
changeset
|
379 unbind_to (specpdl_count, Qnil); |
6439
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
380 discard_menu_items (); |
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
381 |
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
382 if (error_name) error (error_name); |
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
383 return selection; |
463b12ba8260
(xdialog_show): Delete args x, y.
Richard M. Stallman <rms@gnu.org>
parents:
6426
diff
changeset
|
384 } |
6325
d6817c9c0413
Undo previous change. Instead:
Richard M. Stallman <rms@gnu.org>
parents:
6324
diff
changeset
|
385 #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
|
386 } |
58168
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
387 |
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
388 |
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
389 #ifndef MSDOS |
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
390 |
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
|
391 /* 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
|
392 |
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
|
393 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
|
394 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
|
395 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
|
396 { |
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
|
397 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
|
398 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
|
399 #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
|
400 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
|
401 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
|
402 #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
|
403 } |
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
|
404 |
58168
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
405 /* 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
|
406 |
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
|
407 void |
58168
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
408 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
|
409 { |
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
410 /* 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
|
411 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
|
412 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
|
413 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
|
414 |
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
415 while ( |
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
416 #ifdef USE_X_TOOLKIT |
58170
66ace4a9a250
(pop_down_menu): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
58169
diff
changeset
|
417 ! 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
|
418 #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
|
419 ! 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
|
420 #else |
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
421 ! 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
|
422 #endif |
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
423 ) |
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
424 { |
105936
45191c90be7e
Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105931
diff
changeset
|
425 EMACS_TIME next_time = timer_check (1), *ntp; |
58168
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
426 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
|
427 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
|
428 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
|
429 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
|
430 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
|
431 |
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
432 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
|
433 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
|
434 { |
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
435 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
|
436 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
|
437 if (fd > n) n = fd; |
106057
385ba537122c
*** empty log message ***
Jan Djärv <jan.h.d@swipnet.se>
parents:
106056
diff
changeset
|
438 XFlush (dpyinfo->display); |
58168
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
439 } |
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
440 |
105936
45191c90be7e
Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105931
diff
changeset
|
441 if (secs < 0 && usecs < 0) |
45191c90be7e
Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105931
diff
changeset
|
442 ntp = 0; |
45191c90be7e
Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105931
diff
changeset
|
443 else |
45191c90be7e
Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105931
diff
changeset
|
444 ntp = &next_time; |
45191c90be7e
Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105931
diff
changeset
|
445 |
45191c90be7e
Bug #4574. Common code for file/font dialog. Handle timers with glib-timers.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105931
diff
changeset
|
446 select (n + 1, &read_fds, (SELECT_TYPE *)0, (SELECT_TYPE *)0, ntp); |
58168
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
447 } |
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
448 } |
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
449 #endif /* ! MSDOS */ |
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
450 |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
451 |
49322 | 452 #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
|
453 |
58170
66ace4a9a250
(pop_down_menu): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
58169
diff
changeset
|
454 #ifdef USE_X_TOOLKIT |
66ace4a9a250
(pop_down_menu): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
58169
diff
changeset
|
455 |
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
456 /* Loop in Xt until the menu pulldown or dialog popup has been |
13821 | 457 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
|
458 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
|
459 |
11954
4117d74ba254
(popup_get_selection): Force deactivation if key pressed.
Karl Heuer <kwzh@gnu.org>
parents:
11918
diff
changeset
|
460 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
|
461 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
|
462 |
48912
b0b74923fe41
(popup_get_selection): Now static. New arg DO_TIMERS.
Richard M. Stallman <rms@gnu.org>
parents:
48329
diff
changeset
|
463 static void |
59156
03a6e350cf4d
(popup_get_selection): Remove parameter down_on_keypress.
Jan Djärv <jan.h.d@swipnet.se>
parents:
59155
diff
changeset
|
464 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
|
465 XEvent *initial_event; |
11449
fca5a32f7806
(popup_get_selection): Queue up events that aren't
Richard M. Stallman <rms@gnu.org>
parents:
11266
diff
changeset
|
466 struct x_display_info *dpyinfo; |
11954
4117d74ba254
(popup_get_selection): Force deactivation if key pressed.
Karl Heuer <kwzh@gnu.org>
parents:
11918
diff
changeset
|
467 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
|
468 int do_timers; |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
469 { |
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
470 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
|
471 |
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Djärv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
472 while (popup_activated_flag) |
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
473 { |
59107 | 474 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
|
475 { |
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Djärv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
476 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
|
477 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
|
478 } |
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Djärv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
479 else |
58168
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
480 { |
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
481 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
|
482 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
|
483 } |
49116
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Djärv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
484 |
15628
f74c79dcaf8d
(popup_get_selection): For a ButtonRelease on the proper
Karl Heuer <kwzh@gnu.org>
parents:
15428
diff
changeset
|
485 /* 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
|
486 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
|
487 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
|
488 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
|
489 && 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
|
490 { |
f74c79dcaf8d
(popup_get_selection): For a ButtonRelease on the proper
Karl Heuer <kwzh@gnu.org>
parents:
15428
diff
changeset
|
491 dpyinfo->grabbed &= ~(1 << event.xbutton.button); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
492 #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
|
493 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
|
494 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
|
495 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
|
496 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
|
497 /* 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
|
498 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
|
499 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
|
500 event.xbutton.state = 0; |
15839
e66ccb471d26
(xmenu_show): Set dummy.state.
Richard M. Stallman <rms@gnu.org>
parents:
15807
diff
changeset
|
501 #endif |
15628
f74c79dcaf8d
(popup_get_selection): For a ButtonRelease on the proper
Karl Heuer <kwzh@gnu.org>
parents:
15428
diff
changeset
|
502 } |
59155
6690f246cffe
* xmenu.c (popup_get_selection): Only pop down dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
59107
diff
changeset
|
503 /* 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
|
504 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
|
505 && 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
|
506 { |
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Djärv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
507 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
|
508 |
59155
6690f246cffe
* xmenu.c (popup_get_selection): Only pop down dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
59107
diff
changeset
|
509 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
|
510 || 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
|
511 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
|
512 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
513 |
49116
8c37b25a7f02
(Fx_popup_menu): If popping up at mouse position,
Jan Djärv <jan.h.d@swipnet.se>
parents:
48946
diff
changeset
|
514 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
|
515 } |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
516 } |
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
517 |
83542 | 518 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
|
519 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
|
520 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
|
521 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
|
522 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
|
523 |
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
|
524 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
|
525 (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
|
526 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
|
527 { |
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
|
528 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
|
529 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
|
530 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
|
531 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
|
532 |
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
|
533 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
|
534 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
|
535 |
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
|
536 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
|
537 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
|
538 { |
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
|
539 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
|
540 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
|
541 |
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
|
542 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
|
543 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
|
544 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
|
545 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
|
546 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
|
547 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
|
548 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
|
549 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
|
550 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
|
551 |
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
|
552 #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
|
553 { |
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
|
554 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
|
555 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
|
556 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
|
557 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
|
558 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
|
559 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
|
560 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
|
561 } |
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
|
562 #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
|
563 |
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
|
564 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
|
565 /* 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
|
566 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
|
567 |
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
|
568 /* 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
|
569 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
|
570 &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
|
571 |
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
|
572 /* 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
|
573 &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
|
574 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
|
575 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
|
576 |
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
|
577 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
|
578 { |
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
|
579 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
|
580 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
|
581 |
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
|
582 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
|
583 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
|
584 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
|
585 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
|
586 } |
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
|
587 } |
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
|
588 |
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
|
589 UNBLOCK_INPUT; |
71094
bff9557e8c24
(Fmenu_bar_start): Return a value.
Andreas Schwab <schwab@suse.de>
parents:
71057
diff
changeset
|
590 |
bff9557e8c24
(Fmenu_bar_start): Return a value.
Andreas Schwab <schwab@suse.de>
parents:
71057
diff
changeset
|
591 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
|
592 } |
49322 | 593 #endif /* USE_X_TOOLKIT */ |
594 | |
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
|
595 |
49322 | 596 #ifdef USE_GTK |
83542 | 597 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
|
598 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
|
599 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
|
600 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
|
601 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
|
602 |
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
|
603 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
|
604 (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
|
605 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
|
606 { |
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
|
607 GtkWidget *menubar; |
73662
ea2e12adb144
* xmenu.c (Fmenu_bar_open): Declare variable before BLOCK_INPUT to
Chong Yidong <cyd@stupidchicken.com>
parents:
73320
diff
changeset
|
608 FRAME_PTR f; |
ea2e12adb144
* xmenu.c (Fmenu_bar_open): Declare variable before BLOCK_INPUT to
Chong Yidong <cyd@stupidchicken.com>
parents:
73320
diff
changeset
|
609 |
73715 | 610 /* gcc 2.95 doesn't accept the FRAME_PTR declaration after |
611 BLOCK_INPUT. */ | |
612 | |
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
|
613 BLOCK_INPUT; |
73662
ea2e12adb144
* xmenu.c (Fmenu_bar_open): Declare variable before BLOCK_INPUT to
Chong Yidong <cyd@stupidchicken.com>
parents:
73320
diff
changeset
|
614 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
|
615 |
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
|
616 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
|
617 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
|
618 |
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
|
619 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
|
620 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
|
621 { |
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
|
622 /* 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
|
623 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
|
624 |
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
|
625 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
|
626 { |
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
|
627 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
|
628 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
|
629 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
|
630 } |
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
|
631 } |
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
|
632 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
|
633 |
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
|
634 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
|
635 } |
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
|
636 |
49322 | 637 /* Loop util popup_activated_flag is set to zero in a callback. |
638 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
|
639 |
49322 | 640 static void |
58170
66ace4a9a250
(pop_down_menu): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
58169
diff
changeset
|
641 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
|
642 int do_timers; |
58170
66ace4a9a250
(pop_down_menu): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
58169
diff
changeset
|
643 GtkWidget *widget; |
49322 | 644 { |
645 ++popup_activated_flag; | |
646 | |
647 /* Process events in the Gtk event loop until done. */ | |
648 while (popup_activated_flag) | |
649 { | |
58168
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
650 if (do_timers) x_menu_wait_for_event (0); |
49322 | 651 gtk_main_iteration (); |
652 } | |
653 } | |
654 #endif | |
655 | |
12661 | 656 /* Activate the menu bar of frame F. |
657 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
|
658 MENU_BAR_ACTIVATE_EVENT out of the Emacs event queue. |
12661 | 659 |
660 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
|
661 that was saved in saved_menu_event. |
12661 | 662 That makes the toolkit do its thing. |
663 | |
664 But first we recompute the menu bar contents (the whole tree). | |
665 | |
666 The reason for saving the button event until here, instead of | |
667 passing it to the toolkit right away, is that we can safely | |
668 execute Lisp code. */ | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
669 |
21514 | 670 void |
12661 | 671 x_activate_menubar (f) |
672 FRAME_PTR f; | |
673 { | |
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
674 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
|
675 abort (); |
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
676 |
15710
85d87cd0f655
(x_activate_menubar): Allow any event, not just ButtonPress.
Karl Heuer <kwzh@gnu.org>
parents:
15628
diff
changeset
|
677 if (!f->output_data.x->saved_menu_event->type) |
12661 | 678 return; |
679 | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
680 #ifdef USE_GTK |
53069
1218a42792ea
Implement multiple display handling for GTK.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52981
diff
changeset
|
681 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
|
682 f->output_data.x->saved_menu_event->xany.window)) |
49322 | 683 return; |
684 #endif | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
685 |
15807
508ec69917b1
(pending_menu_activation): Don't initialize. Not static.
Richard M. Stallman <rms@gnu.org>
parents:
15795
diff
changeset
|
686 set_frame_menubar (f, 0, 1); |
12661 | 687 BLOCK_INPUT; |
49322 | 688 #ifdef USE_GTK |
689 XPutBackEvent (f->output_data.x->display_info->display, | |
690 f->output_data.x->saved_menu_event); | |
691 popup_activated_flag = 1; | |
692 #else | |
48113
6a09e4b41337
(unuse_menu_items): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46753
diff
changeset
|
693 XtDispatchEvent (f->output_data.x->saved_menu_event); |
49322 | 694 #endif |
12661 | 695 UNBLOCK_INPUT; |
15807
508ec69917b1
(pending_menu_activation): Don't initialize. Not static.
Richard M. Stallman <rms@gnu.org>
parents:
15795
diff
changeset
|
696 #ifdef USE_MOTIF |
15792
feeb1f7c1cec
(pending_menu_activation): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15785
diff
changeset
|
697 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
|
698 pending_menu_activation = 1; |
15807
508ec69917b1
(pending_menu_activation): Don't initialize. Not static.
Richard M. Stallman <rms@gnu.org>
parents:
15795
diff
changeset
|
699 #endif |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
700 |
12661 | 701 /* 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
|
702 f->output_data.x->saved_menu_event->type = 0; |
12661 | 703 } |
704 | |
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
705 /* 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
|
706 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
|
707 |
49322 | 708 #ifndef USE_GTK |
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
709 static void |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
710 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
|
711 Widget widget; |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
712 LWLIB_ID id; |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
713 XtPointer client_data; |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
714 { |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
715 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
|
716 #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
|
717 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
|
718 #endif |
27425
e575223479a1
(popup_activated_flag): Make externally visible.
Gerd Moellmann <gerd@gnu.org>
parents:
27341
diff
changeset
|
719 } |
49322 | 720 #endif |
27425
e575223479a1
(popup_activated_flag): Make externally visible.
Gerd Moellmann <gerd@gnu.org>
parents:
27341
diff
changeset
|
721 |
e575223479a1
(popup_activated_flag): Make externally visible.
Gerd Moellmann <gerd@gnu.org>
parents:
27341
diff
changeset
|
722 /* 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
|
723 used and has been unposted. */ |
e575223479a1
(popup_activated_flag): Make externally visible.
Gerd Moellmann <gerd@gnu.org>
parents:
27341
diff
changeset
|
724 |
49322 | 725 #ifdef USE_GTK |
726 static void | |
727 popup_deactivate_callback (widget, client_data) | |
728 GtkWidget *widget; | |
729 gpointer client_data; | |
730 { | |
731 popup_activated_flag = 0; | |
732 } | |
733 #else | |
27425
e575223479a1
(popup_activated_flag): Make externally visible.
Gerd Moellmann <gerd@gnu.org>
parents:
27341
diff
changeset
|
734 static void |
e575223479a1
(popup_activated_flag): Make externally visible.
Gerd Moellmann <gerd@gnu.org>
parents:
27341
diff
changeset
|
735 popup_deactivate_callback (widget, id, client_data) |
e575223479a1
(popup_activated_flag): Make externally visible.
Gerd Moellmann <gerd@gnu.org>
parents:
27341
diff
changeset
|
736 Widget widget; |
e575223479a1
(popup_activated_flag): Make externally visible.
Gerd Moellmann <gerd@gnu.org>
parents:
27341
diff
changeset
|
737 LWLIB_ID id; |
e575223479a1
(popup_activated_flag): Make externally visible.
Gerd Moellmann <gerd@gnu.org>
parents:
27341
diff
changeset
|
738 XtPointer client_data; |
e575223479a1
(popup_activated_flag): Make externally visible.
Gerd Moellmann <gerd@gnu.org>
parents:
27341
diff
changeset
|
739 { |
e575223479a1
(popup_activated_flag): Make externally visible.
Gerd Moellmann <gerd@gnu.org>
parents:
27341
diff
changeset
|
740 popup_activated_flag = 0; |
118 | 741 } |
49322 | 742 #endif |
743 | |
744 | |
745 /* Function that finds the frame for WIDGET and shows the HELP text | |
746 for that widget. | |
747 F is the frame if known, or NULL if not known. */ | |
748 static void | |
749 show_help_event (f, widget, help) | |
750 FRAME_PTR f; | |
751 xt_or_gtk_widget widget; | |
752 Lisp_Object help; | |
27341
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
753 { |
49322 | 754 Lisp_Object frame; |
755 | |
27341
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
756 if (f) |
30472
0c982ed8515f
(menu_highlight_callback): Call show_help_echo directly
Gerd Moellmann <gerd@gnu.org>
parents:
30420
diff
changeset
|
757 { |
0c982ed8515f
(menu_highlight_callback): Call show_help_echo directly
Gerd Moellmann <gerd@gnu.org>
parents:
30420
diff
changeset
|
758 XSETFRAME (frame, f); |
0c982ed8515f
(menu_highlight_callback): Call show_help_echo directly
Gerd Moellmann <gerd@gnu.org>
parents:
30420
diff
changeset
|
759 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
|
760 } |
27341
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
761 else |
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
762 { |
53325
8e8832ef3963
(show_help_event): Remove unused code.
Kim F. Storm <storm@cua.dk>
parents:
53069
diff
changeset
|
763 #if 0 /* This code doesn't do anything useful. ++kfs */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
764 /* 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
|
765 widget. See which frame that is. */ |
49322 | 766 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
|
767 Lisp_Object tail; |
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
768 |
90970
3371fc48749b
Replace uses of GC_* macros with the non-GC_ versions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
90951
diff
changeset
|
769 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
|
770 { |
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
771 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
|
772 if (FRAMEP (frame) |
27341
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
773 && (f = XFRAME (frame), |
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
774 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
|
775 break; |
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
776 } |
53325
8e8832ef3963
(show_help_event): Remove unused code.
Kim F. Storm <storm@cua.dk>
parents:
53069
diff
changeset
|
777 #endif |
30472
0c982ed8515f
(menu_highlight_callback): Call show_help_echo directly
Gerd Moellmann <gerd@gnu.org>
parents:
30420
diff
changeset
|
778 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
|
779 } |
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
780 } |
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
781 |
49322 | 782 /* Callback called when menu items are highlighted/unhighlighted |
783 while moving the mouse over them. WIDGET is the menu bar or menu | |
784 popup widget. ID is its LWLIB_ID. CALL_DATA contains a pointer to | |
785 the data structure for the menu item, or null in case of | |
786 unhighlighting. */ | |
787 | |
788 #ifdef USE_GTK | |
789 void | |
790 menu_highlight_callback (widget, call_data) | |
791 GtkWidget *widget; | |
792 gpointer call_data; | |
793 { | |
794 xg_menu_item_cb_data *cb_data; | |
795 Lisp_Object help; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
796 |
49322 | 797 cb_data = (xg_menu_item_cb_data*) g_object_get_data (G_OBJECT (widget), |
798 XG_ITEM_DATA); | |
799 if (! cb_data) return; | |
800 | |
801 help = call_data ? cb_data->help : Qnil; | |
802 | |
803 /* If popup_activated_flag is greater than 1 we are in a popup menu. | |
804 Don't show help for them, they won't appear before the | |
805 popup is popped down. */ | |
806 if (popup_activated_flag <= 1) | |
807 show_help_event (cb_data->cl_data->f, widget, help); | |
808 } | |
809 #else | |
810 void | |
811 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
|
812 Widget widget; |
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
813 LWLIB_ID id; |
49322 | 814 void *call_data; |
815 { | |
816 struct frame *f; | |
817 Lisp_Object help; | |
818 | |
819 widget_value *wv = (widget_value *) call_data; | |
820 | |
821 help = wv ? wv->help : Qnil; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
822 |
49322 | 823 /* Determine the frame for the help event. */ |
824 f = menubar_id_to_frame (id); | |
825 | |
826 show_help_event (f, widget, help); | |
827 } | |
828 #endif | |
829 | |
830 #ifdef USE_GTK | |
831 /* Gtk calls callbacks just because we tell it what item should be | |
832 selected in a radio group. If this variable is set to a non-zero | |
833 value, we are creating menus and don't want callbacks right now. | |
834 */ | |
835 static int xg_crazy_callback_abort; | |
836 | |
837 /* This callback is called from the menu bar pulldown menu | |
838 when the user makes a selection. | |
839 Figure out what the user chose | |
840 and put the appropriate events into the keyboard buffer. */ | |
841 static void | |
842 menubar_selection_callback (widget, client_data) | |
843 GtkWidget *widget; | |
844 gpointer client_data; | |
845 { | |
846 xg_menu_item_cb_data *cb_data = (xg_menu_item_cb_data*) client_data; | |
847 | |
848 if (xg_crazy_callback_abort) | |
849 return; | |
850 | |
851 if (! cb_data || ! cb_data->cl_data || ! cb_data->cl_data->f) | |
852 return; | |
853 | |
67527
88807d05a058
* xmenu.c (menubar_selection_callback): Do nothing if the callback
Jan Djärv <jan.h.d@swipnet.se>
parents:
64770
diff
changeset
|
854 /* 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
|
855 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
|
856 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
|
857 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
|
858 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
|
859 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
|
860 && ! 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
|
861 return; |
88807d05a058
* xmenu.c (menubar_selection_callback): Do nothing if the callback
Jan Djärv <jan.h.d@swipnet.se>
parents:
64770
diff
changeset
|
862 |
59912
ef2f9fc4fd42
* xmenu.c (menubar_selection_callback): Force out GTK buffered
Jan Djärv <jan.h.d@swipnet.se>
parents:
59415
diff
changeset
|
863 /* 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
|
864 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
|
865 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
|
866 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
|
867 event. */ |
ef2f9fc4fd42
* xmenu.c (menubar_selection_callback): Force out GTK buffered
Jan Djärv <jan.h.d@swipnet.se>
parents:
59415
diff
changeset
|
868 |
ef2f9fc4fd42
* xmenu.c (menubar_selection_callback): Force out GTK buffered
Jan Djärv <jan.h.d@swipnet.se>
parents:
59415
diff
changeset
|
869 BLOCK_INPUT; |
ef2f9fc4fd42
* xmenu.c (menubar_selection_callback): Force out GTK buffered
Jan Djärv <jan.h.d@swipnet.se>
parents:
59415
diff
changeset
|
870 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
|
871 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
|
872 UNBLOCK_INPUT; |
ef2f9fc4fd42
* xmenu.c (menubar_selection_callback): Force out GTK buffered
Jan Djärv <jan.h.d@swipnet.se>
parents:
59415
diff
changeset
|
873 |
49322 | 874 find_and_call_menu_selection (cb_data->cl_data->f, |
875 cb_data->cl_data->menu_bar_items_used, | |
876 cb_data->cl_data->menu_bar_vector, | |
877 cb_data->call_data); | |
878 } | |
879 | |
880 #else /* not USE_GTK */ | |
881 | |
882 /* This callback is called from the menu bar pulldown menu | |
883 when the user makes a selection. | |
884 Figure out what the user chose | |
885 and put the appropriate events into the keyboard buffer. */ | |
886 static void | |
887 menubar_selection_callback (widget, id, client_data) | |
888 Widget widget; | |
889 LWLIB_ID id; | |
890 XtPointer client_data; | |
891 { | |
892 FRAME_PTR f; | |
893 | |
894 f = menubar_id_to_frame (id); | |
895 if (!f) | |
896 return; | |
897 find_and_call_menu_selection (f, f->menu_bar_items_used, | |
898 f->menu_bar_vector, client_data); | |
899 } | |
900 #endif /* not USE_GTK */ | |
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
901 |
36933 | 902 /* Recompute all the widgets of frame F, when the menu bar has been |
903 changed. Value is non-zero if widgets were updated. */ | |
904 | |
905 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
|
906 update_frame_menubar (f) |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
907 FRAME_PTR f; |
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
908 { |
49322 | 909 #ifdef USE_GTK |
910 return xg_update_frame_menubar (f); | |
911 #else | |
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
912 struct x_output *x; |
6200
01c57ae8ca57
(update_one_frame_psheets): Call EmacsFrameSetCharSize to
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6198
diff
changeset
|
913 int columns, rows; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
914 |
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
915 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
|
916 abort (); |
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
917 |
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
918 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
|
919 |
36933 | 920 if (!x->menubar_widget || XtIsManaged (x->menubar_widget)) |
921 return 0; | |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
922 |
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
923 BLOCK_INPUT; |
36933 | 924 /* Save the size of the frame because the pane widget doesn't accept |
925 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
|
926 columns = FRAME_COLS (f); |
332134065648
Make (some) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50938
diff
changeset
|
927 rows = FRAME_LINES (f); |
6200
01c57ae8ca57
(update_one_frame_psheets): Call EmacsFrameSetCharSize to
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6198
diff
changeset
|
928 |
36933 | 929 /* Do the voodoo which means "I'm changing lots of things, don't try |
930 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
|
931 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
|
932 |
36933 | 933 /* The order in which children are managed is the top to bottom |
934 order in which they are displayed in the paned window. First, | |
935 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
|
936 XtUnmanageChild (x->edit_widget); |
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
937 |
36933 | 938 /* Remove the menubar that is there now, and put up the menubar that |
939 should be there. */ | |
940 XtManageChild (x->menubar_widget); | |
941 XtMapWidget (x->menubar_widget); | |
942 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
|
943 |
9236
583bb9211b2b
(popup_get_selection): Remove BLOCK_INPUT, UNBLOCK_INPUT since the
Paul Reilly <pmr@pajato.com>
parents:
9233
diff
changeset
|
944 /* 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
|
945 XtManageChild (x->edit_widget); |
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
946 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
|
947 |
01c57ae8ca57
(update_one_frame_psheets): Call EmacsFrameSetCharSize to
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6198
diff
changeset
|
948 /* 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
|
949 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
|
950 UNBLOCK_INPUT; |
49322 | 951 #endif |
36933 | 952 return 1; |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
953 } |
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
954 |
107804
24c4451bcaf7
Lucid menus can now use Xft for fonts.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
955 #ifdef USE_LUCID |
24c4451bcaf7
Lucid menus can now use Xft for fonts.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
956 static void |
107827
aa85632b7860
Use XFT in Lucid dialogs if available.
Jan D. <jan.h.d@swipnet.se>
parents:
107804
diff
changeset
|
957 apply_systemfont_to_dialog (w) |
aa85632b7860
Use XFT in Lucid dialogs if available.
Jan D. <jan.h.d@swipnet.se>
parents:
107804
diff
changeset
|
958 Widget w; |
aa85632b7860
Use XFT in Lucid dialogs if available.
Jan D. <jan.h.d@swipnet.se>
parents:
107804
diff
changeset
|
959 { |
aa85632b7860
Use XFT in Lucid dialogs if available.
Jan D. <jan.h.d@swipnet.se>
parents:
107804
diff
changeset
|
960 const char *fn = xsettings_get_system_normal_font (); |
aa85632b7860
Use XFT in Lucid dialogs if available.
Jan D. <jan.h.d@swipnet.se>
parents:
107804
diff
changeset
|
961 if (fn) |
aa85632b7860
Use XFT in Lucid dialogs if available.
Jan D. <jan.h.d@swipnet.se>
parents:
107804
diff
changeset
|
962 { |
aa85632b7860
Use XFT in Lucid dialogs if available.
Jan D. <jan.h.d@swipnet.se>
parents:
107804
diff
changeset
|
963 XrmDatabase db = XtDatabase (XtDisplay (w)); |
aa85632b7860
Use XFT in Lucid dialogs if available.
Jan D. <jan.h.d@swipnet.se>
parents:
107804
diff
changeset
|
964 if (db) |
aa85632b7860
Use XFT in Lucid dialogs if available.
Jan D. <jan.h.d@swipnet.se>
parents:
107804
diff
changeset
|
965 XrmPutStringResource (&db, "*dialog.faceName", fn); |
aa85632b7860
Use XFT in Lucid dialogs if available.
Jan D. <jan.h.d@swipnet.se>
parents:
107804
diff
changeset
|
966 } |
aa85632b7860
Use XFT in Lucid dialogs if available.
Jan D. <jan.h.d@swipnet.se>
parents:
107804
diff
changeset
|
967 } |
aa85632b7860
Use XFT in Lucid dialogs if available.
Jan D. <jan.h.d@swipnet.se>
parents:
107804
diff
changeset
|
968 |
aa85632b7860
Use XFT in Lucid dialogs if available.
Jan D. <jan.h.d@swipnet.se>
parents:
107804
diff
changeset
|
969 static void |
107804
24c4451bcaf7
Lucid menus can now use Xft for fonts.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
970 apply_systemfont_to_menu (w) |
24c4451bcaf7
Lucid menus can now use Xft for fonts.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
971 Widget w; |
24c4451bcaf7
Lucid menus can now use Xft for fonts.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
972 { |
24c4451bcaf7
Lucid menus can now use Xft for fonts.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
973 const char *fn = xsettings_get_system_normal_font (); |
24c4451bcaf7
Lucid menus can now use Xft for fonts.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
974 int defflt; |
24c4451bcaf7
Lucid menus can now use Xft for fonts.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
975 |
24c4451bcaf7
Lucid menus can now use Xft for fonts.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
976 if (!fn) return; |
24c4451bcaf7
Lucid menus can now use Xft for fonts.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
977 |
24c4451bcaf7
Lucid menus can now use Xft for fonts.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
978 if (XtIsShell (w)) /* popup menu */ |
24c4451bcaf7
Lucid menus can now use Xft for fonts.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
979 { |
107827
aa85632b7860
Use XFT in Lucid dialogs if available.
Jan D. <jan.h.d@swipnet.se>
parents:
107804
diff
changeset
|
980 Widget *childs = NULL; |
107878
faaa7a6517a8
* xmenu.c (apply_systemfont_to_menu): *childs was incorrectly used.
Jan D <jan.h.d@swipnet.se>
parents:
107827
diff
changeset
|
981 |
107827
aa85632b7860
Use XFT in Lucid dialogs if available.
Jan D. <jan.h.d@swipnet.se>
parents:
107804
diff
changeset
|
982 XtVaGetValues (w, XtNchildren, &childs, NULL); |
107878
faaa7a6517a8
* xmenu.c (apply_systemfont_to_menu): *childs was incorrectly used.
Jan D <jan.h.d@swipnet.se>
parents:
107827
diff
changeset
|
983 if (*childs) w = *childs; |
107804
24c4451bcaf7
Lucid menus can now use Xft for fonts.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
984 } |
24c4451bcaf7
Lucid menus can now use Xft for fonts.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
985 |
24c4451bcaf7
Lucid menus can now use Xft for fonts.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
986 /* Only use system font if the default is used for the menu. */ |
24c4451bcaf7
Lucid menus can now use Xft for fonts.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
987 XtVaGetValues (w, XtNdefaultFace, &defflt, NULL); |
24c4451bcaf7
Lucid menus can now use Xft for fonts.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
988 if (defflt) |
24c4451bcaf7
Lucid menus can now use Xft for fonts.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
989 XtVaSetValues (w, XtNfaceName, fn, NULL); |
24c4451bcaf7
Lucid menus can now use Xft for fonts.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
990 } |
24c4451bcaf7
Lucid menus can now use Xft for fonts.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
991 #endif |
24c4451bcaf7
Lucid menus can now use Xft for fonts.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
992 |
12018
f5d820ad7a13
(set_frame_menubar): Always call update_frame_menubar.
Karl Heuer <kwzh@gnu.org>
parents:
11954
diff
changeset
|
993 /* 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
|
994 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
|
995 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
|
996 |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
997 void |
12661 | 998 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
|
999 FRAME_PTR f; |
6605
f5b781f33789
(set_frame_menubar): New arg, first_time.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6526
diff
changeset
|
1000 int first_time; |
12661 | 1001 int deep_p; |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1002 { |
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1003 xt_or_gtk_widget menubar_widget; |
49322 | 1004 #ifdef USE_X_TOOLKIT |
1005 LWLIB_ID id; | |
1006 #endif | |
25730
db88a4b84d91
(single_menu_item, Fx_popup_menu, Fx_popup_menu,
Gerd Moellmann <gerd@gnu.org>
parents:
25680
diff
changeset
|
1007 Lisp_Object items; |
9725
98d374d51f4d
(set_frame_menubar): Don't copy string during GC risk.
Karl Heuer <kwzh@gnu.org>
parents:
9649
diff
changeset
|
1008 widget_value *wv, *first_wv, *prev_wv = 0; |
56959
dc35c2e20d41
(update_submenu_strings): YAILOM.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
56848
diff
changeset
|
1009 int i, last_i = 0; |
46753
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1010 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
|
1011 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
|
1012 |
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1013 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
|
1014 abort (); |
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1015 |
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1016 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
|
1017 |
16656
9cbbf721b91c
(Vmenu_updating_frame): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16411
diff
changeset
|
1018 XSETFRAME (Vmenu_updating_frame, f); |
9cbbf721b91c
(Vmenu_updating_frame): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
16411
diff
changeset
|
1019 |
49322 | 1020 #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
|
1021 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
|
1022 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
|
1023 id = f->output_data.x->id; |
49322 | 1024 #endif |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1025 |
12661 | 1026 if (! menubar_widget) |
1027 deep_p = 1; | |
15792
feeb1f7c1cec
(pending_menu_activation): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15785
diff
changeset
|
1028 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
|
1029 deep_p = 1; |
508ec69917b1
(pending_menu_activation): Don't initialize. Not static.
Richard M. Stallman <rms@gnu.org>
parents:
15795
diff
changeset
|
1030 /* 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
|
1031 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
|
1032 { |
feeb1f7c1cec
(pending_menu_activation): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15785
diff
changeset
|
1033 deep_p = 1; |
15807
508ec69917b1
(pending_menu_activation): Don't initialize. Not static.
Richard M. Stallman <rms@gnu.org>
parents:
15795
diff
changeset
|
1034 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
|
1035 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
|
1036 } |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1037 |
52981
54482f5ea7be
Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1038 #ifdef USE_GTK |
54482f5ea7be
Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1039 /* 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
|
1040 also gets updated. */ |
54482f5ea7be
Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1041 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
|
1042 #endif |
54482f5ea7be
Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1043 |
12661 | 1044 if (deep_p) |
1045 { | |
1046 /* Make a widget-value tree representing the entire menu trees. */ | |
1047 | |
1048 struct buffer *prev = current_buffer; | |
1049 Lisp_Object buffer; | |
46293
1fb8f75062c6
Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents:
45803
diff
changeset
|
1050 int specpdl_count = SPECPDL_INDEX (); |
12661 | 1051 int previous_menu_items_used = f->menu_bar_items_used; |
1052 Lisp_Object *previous_items | |
1053 = (Lisp_Object *) alloca (previous_menu_items_used | |
1054 * 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
|
1055 |
17554
0a75fcee3cb8
(set_frame_menubar): When widget is new, forget records of old contents.
Richard M. Stallman <rms@gnu.org>
parents:
17364
diff
changeset
|
1056 /* 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
|
1057 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
|
1058 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
|
1059 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
|
1060 |
12661 | 1061 buffer = XWINDOW (FRAME_SELECTED_WINDOW (f))->buffer; |
1062 specbind (Qinhibit_quit, Qt); | |
1063 /* Don't let the debugger step into this code | |
1064 because it is not reentrant. */ | |
1065 specbind (Qdebug_on_next_call, Qnil); | |
1066 | |
63147
9bde03db5726
* composite.c (compose_chars_in_text):
Kim F. Storm <storm@cua.dk>
parents:
63070
diff
changeset
|
1067 record_unwind_save_match_data (); |
12661 | 1068 if (NILP (Voverriding_local_map_menu_flag)) |
1069 { | |
1070 specbind (Qoverriding_terminal_local_map, Qnil); | |
1071 specbind (Qoverriding_local_map, Qnil); | |
1072 } | |
1073 | |
1074 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
|
1075 |
12661 | 1076 /* Run the Lucid hook. */ |
36191
0cee3a77c592
(set_frame_menubar): Run acivate-menu-bar-hook with
Gerd Moellmann <gerd@gnu.org>
parents:
34038
diff
changeset
|
1077 safe_run_hooks (Qactivate_menubar_hook); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1078 |
12661 | 1079 /* If it has changed current-menubar from previous value, |
1080 really recompute the menubar from the value. */ | |
1081 if (! NILP (Vlucid_menu_bar_dirty_flag)) | |
1082 call0 (Qrecompute_lucid_menubar); | |
14298 | 1083 safe_run_hooks (Qmenu_bar_update_hook); |
12661 | 1084 FRAME_MENU_BAR_ITEMS (f) = menu_bar_items (FRAME_MENU_BAR_ITEMS (f)); |
1085 | |
1086 items = FRAME_MENU_BAR_ITEMS (f); | |
1087 | |
1088 /* 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
|
1089 if (previous_menu_items_used) |
53ed5f089c9e
(set_frame_menubar): Take into account that
Gerd Moellmann <gerd@gnu.org>
parents:
37940
diff
changeset
|
1090 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
|
1091 previous_menu_items_used * sizeof (Lisp_Object)); |
12661 | 1092 |
46753
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1093 /* 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
|
1094 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
|
1095 save_menu_items (); |
93e99c27012e
(restore_menu_items, save_menu_items): New fns.
Richard M. Stallman <rms@gnu.org>
parents:
69017
diff
changeset
|
1096 |
12661 | 1097 menu_items = f->menu_bar_vector; |
38594
53ed5f089c9e
(set_frame_menubar): Take into account that
Gerd Moellmann <gerd@gnu.org>
parents:
37940
diff
changeset
|
1098 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
|
1099 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
|
1100 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
|
1101 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
|
1102 submenu_top_level_items |
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1103 = (int *) alloca (XVECTOR (items)->size * sizeof (int *)); |
12661 | 1104 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
|
1105 for (i = 0; i < XVECTOR (items)->size; i += 4) |
12661 | 1106 { |
1107 Lisp_Object key, string, maps; | |
1108 | |
46753
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1109 last_i = i; |
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1110 |
12661 | 1111 key = XVECTOR (items)->contents[i]; |
1112 string = XVECTOR (items)->contents[i + 1]; | |
1113 maps = XVECTOR (items)->contents[i + 2]; | |
1114 if (NILP (string)) | |
1115 break; | |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1116 |
46753
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1117 submenu_start[i] = menu_items_used; |
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1118 |
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1119 menu_items_n_panes = 0; |
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1120 submenu_top_level_items[i] |
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1121 = 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
|
1122 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
|
1123 |
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1124 submenu_end[i] = menu_items_used; |
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1125 } |
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1126 |
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1127 finish_menu_items (); |
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1128 |
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1129 /* 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
|
1130 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
|
1131 |
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1132 wv = xmalloc_widget_value (); |
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1133 wv->name = "menubar"; |
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1134 wv->value = 0; |
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1135 wv->enabled = 1; |
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1136 wv->button_type = BUTTON_TYPE_NONE; |
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1137 wv->help = Qnil; |
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1138 first_wv = wv; |
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1139 |
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1140 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
|
1141 { |
48946
2c4a754e02b6
(parse_single_submenu): Use individual keymap's prompt
Richard M. Stallman <rms@gnu.org>
parents:
48912
diff
changeset
|
1142 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
|
1143 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
|
1144 submenu_top_level_items[i]); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1145 if (prev_wv) |
12661 | 1146 prev_wv->next = wv; |
1147 else | |
1148 first_wv->contents = wv; | |
1149 /* Don't set wv->name here; GC during the loop might relocate it. */ | |
1150 wv->enabled = 1; | |
24993 | 1151 wv->button_type = BUTTON_TYPE_NONE; |
12661 | 1152 prev_wv = wv; |
1153 } | |
1154 | |
1155 set_buffer_internal_1 (prev); | |
1156 | |
1157 /* If there has been no change in the Lisp-level contents | |
1158 of the menu bar, skip redisplaying it. Just exit. */ | |
1159 | |
70086 | 1160 /* Compare the new menu items with the ones computed last time. */ |
12661 | 1161 for (i = 0; i < previous_menu_items_used; i++) |
1162 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
|
1163 || (!EQ (previous_items[i], XVECTOR (menu_items)->contents[i]))) |
12661 | 1164 break; |
13654
645e14e39a2b
(set_frame_menubar): When called with deep_p == 0,
Richard M. Stallman <rms@gnu.org>
parents:
13489
diff
changeset
|
1165 if (i == menu_items_used && i == previous_menu_items_used && i != 0) |
12661 | 1166 { |
70086 | 1167 /* The menu items have not changed. Don't bother updating |
1168 the menus in any form, since it would be a no-op. */ | |
12661 | 1169 free_menubar_widget_value_tree (first_wv); |
48113
6a09e4b41337
(unuse_menu_items): New fun.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46753
diff
changeset
|
1170 discard_menu_items (); |
70085
93e99c27012e
(restore_menu_items, save_menu_items): New fns.
Richard M. Stallman <rms@gnu.org>
parents:
69017
diff
changeset
|
1171 unbind_to (specpdl_count, Qnil); |
12661 | 1172 return; |
1173 } | |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1174 |
70086 | 1175 /* 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
|
1176 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
|
1177 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
|
1178 |
95647
0f6a0e86ee24
Remove platform-independent menu definitions.
Chong Yidong <cyd@stupidchicken.com>
parents:
94963
diff
changeset
|
1179 /* 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
|
1180 unbind_to (specpdl_count, Qnil); |
93e99c27012e
(restore_menu_items, save_menu_items): New fns.
Richard M. Stallman <rms@gnu.org>
parents:
69017
diff
changeset
|
1181 |
12661 | 1182 /* Now GC cannot happen during the lifetime of the widget_value, |
1183 so it's safe to store data from a Lisp_String. */ | |
1184 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
|
1185 for (i = 0; i < XVECTOR (items)->size; i += 4) |
12661 | 1186 { |
1187 Lisp_Object string; | |
1188 string = XVECTOR (items)->contents[i + 1]; | |
1189 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
|
1190 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
|
1191 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
|
1192 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
|
1193 wv = wv->next; |
12661 | 1194 } |
1195 | |
1196 } | |
1197 else | |
1198 { | |
1199 /* Make a widget-value tree containing | |
1200 just the top level menu bar strings. */ | |
1201 | |
46753
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1202 wv = xmalloc_widget_value (); |
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1203 wv->name = "menubar"; |
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1204 wv->value = 0; |
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1205 wv->enabled = 1; |
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1206 wv->button_type = BUTTON_TYPE_NONE; |
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1207 wv->help = Qnil; |
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1208 first_wv = wv; |
5e95e401d481
(set_frame_menubar): First parse all submenus,
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1209 |
12661 | 1210 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
|
1211 for (i = 0; i < XVECTOR (items)->size; i += 4) |
12661 | 1212 { |
1213 Lisp_Object string; | |
1214 | |
1215 string = XVECTOR (items)->contents[i + 1]; | |
1216 if (NILP (string)) | |
1217 break; | |
1218 | |
14546
bc0388a7c282
(xmalloc_widget_value): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14298
diff
changeset
|
1219 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
|
1220 wv->name = (char *) SDATA (string); |
12661 | 1221 wv->value = 0; |
1222 wv->enabled = 1; | |
24993 | 1223 wv->button_type = BUTTON_TYPE_NONE; |
42588
43a330df6213
(set_frame_menubar, xmenu_show):
Jason Rumney <jasonr@gnu.org>
parents:
42586
diff
changeset
|
1224 wv->help = Qnil; |
15785
9902d8a8a548
(set_frame_menubar): Use -1 for call_data
Richard M. Stallman <rms@gnu.org>
parents:
15710
diff
changeset
|
1225 /* 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
|
1226 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
|
1227 /* 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
|
1228 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
|
1229 wv->call_data = (void *) (EMACS_INT) (-1); |
12661 | 1230 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1231 if (prev_wv) |
12661 | 1232 prev_wv->next = wv; |
1233 else | |
1234 first_wv->contents = wv; | |
1235 prev_wv = wv; | |
1236 } | |
13654
645e14e39a2b
(set_frame_menubar): When called with deep_p == 0,
Richard M. Stallman <rms@gnu.org>
parents:
13489
diff
changeset
|
1237 |
645e14e39a2b
(set_frame_menubar): When called with deep_p == 0,
Richard M. Stallman <rms@gnu.org>
parents:
13489
diff
changeset
|
1238 /* 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
|
1239 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
|
1240 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
|
1241 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
|
1242 } |
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1243 |
12661 | 1244 /* 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
|
1245 |
fca5a32f7806
(popup_get_selection): Queue up events that aren't
Richard M. Stallman <rms@gnu.org>
parents:
11266
diff
changeset
|
1246 BLOCK_INPUT; |
fca5a32f7806
(popup_get_selection): Queue up events that aren't
Richard M. Stallman <rms@gnu.org>
parents:
11266
diff
changeset
|
1247 |
49322 | 1248 #ifdef USE_GTK |
1249 xg_crazy_callback_abort = 1; | |
1250 if (menubar_widget) | |
1251 { | |
52981
54482f5ea7be
Remove tear off capability for GTK popup menus.
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
1252 /* The fourth arg is DEEP_P, which says to consider the entire |
49322 | 1253 menu trees we supply, rather than just the menu bar item names. */ |
1254 xg_modify_menubar_widgets (menubar_widget, | |
1255 f, | |
1256 first_wv, | |
1257 deep_p, | |
1258 G_CALLBACK (menubar_selection_callback), | |
1259 G_CALLBACK (popup_deactivate_callback), | |
1260 G_CALLBACK (menu_highlight_callback)); | |
1261 } | |
1262 else | |
1263 { | |
1264 GtkWidget *wvbox = f->output_data.x->vbox_widget; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1265 |
49322 | 1266 menubar_widget |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1267 = xg_create_widget ("menubar", "menubar", f, first_wv, |
49322 | 1268 G_CALLBACK (menubar_selection_callback), |
1269 G_CALLBACK (popup_deactivate_callback), | |
1270 G_CALLBACK (menu_highlight_callback)); | |
1271 | |
1272 f->output_data.x->menubar_widget = menubar_widget; | |
1273 } | |
1274 | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1275 |
49322 | 1276 #else /* not USE_GTK */ |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1277 if (menubar_widget) |
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1278 { |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1279 /* 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
|
1280 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
|
1281 |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1282 /* 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
|
1283 menu trees we supply, rather than just the menu bar item names. */ |
12661 | 1284 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
|
1285 |
9236
583bb9211b2b
(popup_get_selection): Remove BLOCK_INPUT, UNBLOCK_INPUT since the
Paul Reilly <pmr@pajato.com>
parents:
9233
diff
changeset
|
1286 /* 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
|
1287 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
|
1288 } |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1289 else |
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1290 { |
59102
0096c58ce34a
* xmenu.c (popup_get_selection): Pop down on C-g.
Jan Djärv <jan.h.d@swipnet.se>
parents:
58824
diff
changeset
|
1291 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
|
1292 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
|
1293 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1294 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
|
1295 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
|
1296 0, |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1297 popup_activate_callback, |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1298 menubar_selection_callback, |
27341
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
1299 popup_deactivate_callback, |
ab22130d8fe3
(enum menu_item_idx): New enumeration replacing defines
Gerd Moellmann <gerd@gnu.org>
parents:
26729
diff
changeset
|
1300 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
|
1301 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
|
1302 |
0096c58ce34a
* xmenu.c (popup_get_selection): Pop down on C-g.
Jan Djärv <jan.h.d@swipnet.se>
parents:
58824
diff
changeset
|
1303 /* 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
|
1304 XtOverrideTranslations (menubar_widget, override); |
107804
24c4451bcaf7
Lucid menus can now use Xft for fonts.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
1305 apply_systemfont_to_menu (menubar_widget); |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1306 } |
11898
a23359be806b
(set_frame_menubar): Set menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11655
diff
changeset
|
1307 |
a23359be806b
(set_frame_menubar): Set menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11655
diff
changeset
|
1308 { |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1309 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
|
1310 = (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
|
1311 ? (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
|
1312 + 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
|
1313 : 0); |
a23359be806b
(set_frame_menubar): Set menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11655
diff
changeset
|
1314 |
105693
964ff7cbc8a6
Fix resize due to font change on a maximized/xmonad-controlled frame.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
1315 #if 1 /* Experimentally, we now get the right results |
964ff7cbc8a6
Fix resize due to font change on a maximized/xmonad-controlled frame.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
1316 for -geometry -0-0 without this. 24 Aug 96, rms. |
964ff7cbc8a6
Fix resize due to font change on a maximized/xmonad-controlled frame.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
1317 Maybe so, but the menu bar size is missing the pixels so the |
964ff7cbc8a6
Fix resize due to font change on a maximized/xmonad-controlled frame.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
1318 WM size hints are off by theses pixel. Jan D, oct 2009. */ |
13489
ddf90bfd3744
Don't include Xaw/Paned.h unless USE_LUCID is defined.
Richard M. Stallman <rms@gnu.org>
parents:
13071
diff
changeset
|
1319 #ifdef USE_LUCID |
11898
a23359be806b
(set_frame_menubar): Set menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11655
diff
changeset
|
1320 if (FRAME_EXTERNAL_MENU_BAR (f)) |
a23359be806b
(set_frame_menubar): Set menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11655
diff
changeset
|
1321 { |
a23359be806b
(set_frame_menubar): Set menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11655
diff
changeset
|
1322 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
|
1323 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
|
1324 XtNinternalBorderWidth, &ibw, NULL); |
a23359be806b
(set_frame_menubar): Set menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11655
diff
changeset
|
1325 menubar_size += ibw; |
a23359be806b
(set_frame_menubar): Set menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11655
diff
changeset
|
1326 } |
13489
ddf90bfd3744
Don't include Xaw/Paned.h unless USE_LUCID is defined.
Richard M. Stallman <rms@gnu.org>
parents:
13071
diff
changeset
|
1327 #endif /* USE_LUCID */ |
105693
964ff7cbc8a6
Fix resize due to font change on a maximized/xmonad-controlled frame.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105669
diff
changeset
|
1328 #endif /* 1 */ |
11898
a23359be806b
(set_frame_menubar): Set menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11655
diff
changeset
|
1329 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12661
diff
changeset
|
1330 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
|
1331 } |
49322 | 1332 #endif /* not USE_GTK */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1333 |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1334 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
|
1335 update_frame_menubar (f); |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1336 |
49322 | 1337 #ifdef USE_GTK |
1338 xg_crazy_callback_abort = 0; | |
1339 #endif | |
1340 | |
12634
eec80ea06395
(set_frame_menubar): If the Lisp-level menu bar menus
Richard M. Stallman <rms@gnu.org>
parents:
12625
diff
changeset
|
1341 UNBLOCK_INPUT; |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1342 } |
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
|
1343 |
14036 | 1344 /* 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
|
1345 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
|
1346 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
|
1347 is visible. */ |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1348 |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1349 void |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1350 initialize_frame_menubar (f) |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1351 FRAME_PTR f; |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1352 { |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1353 /* 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
|
1354 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
|
1355 FRAME_MENU_BAR_ITEMS (f) = menu_bar_items (FRAME_MENU_BAR_ITEMS (f)); |
12661 | 1356 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
|
1357 } |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1358 |
37022
d7d30cecd891
(free_frame_menubar) [USE_MOTIF]: If the shell widget's
Gerd Moellmann <gerd@gnu.org>
parents:
36958
diff
changeset
|
1359 |
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1360 /* Get rid of the menu bar of frame F, and free its storage. |
49322 | 1361 This is used when deleting a frame, and when turning off the menu bar. |
1362 For GTK this function is in gtkutil.c. */ | |
1363 | |
1364 #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
|
1365 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
|
1366 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
|
1367 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
|
1368 { |
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
|
1369 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
|
1370 |
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1371 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
|
1372 abort (); |
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1373 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12661
diff
changeset
|
1374 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
|
1375 |
c73494a6bcd3
(free_frame_menubar): Clear menubar_height field.
Richard M. Stallman <rms@gnu.org>
parents:
17709
diff
changeset
|
1376 f->output_data.x->menubar_height = 0; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1377 |
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
|
1378 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
|
1379 { |
37022
d7d30cecd891
(free_frame_menubar) [USE_MOTIF]: If the shell widget's
Gerd Moellmann <gerd@gnu.org>
parents:
36958
diff
changeset
|
1380 #ifdef USE_MOTIF |
d7d30cecd891
(free_frame_menubar) [USE_MOTIF]: If the shell widget's
Gerd Moellmann <gerd@gnu.org>
parents:
36958
diff
changeset
|
1381 /* 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
|
1382 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
|
1383 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
|
1384 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
|
1385 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
|
1386 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
|
1387 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
|
1388 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
|
1389 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
|
1390 #endif |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1391 |
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
|
1392 BLOCK_INPUT; |
37022
d7d30cecd891
(free_frame_menubar) [USE_MOTIF]: If the shell widget's
Gerd Moellmann <gerd@gnu.org>
parents:
36958
diff
changeset
|
1393 |
d7d30cecd891
(free_frame_menubar) [USE_MOTIF]: If the shell widget's
Gerd Moellmann <gerd@gnu.org>
parents:
36958
diff
changeset
|
1394 #ifdef USE_MOTIF |
37211
afa458ac7a62
(free_frame_menubar) [USE_MOTIF]: Preserve the
Gerd Moellmann <gerd@gnu.org>
parents:
37022
diff
changeset
|
1395 if (f->output_data.x->widget) |
afa458ac7a62
(free_frame_menubar) [USE_MOTIF]: Preserve the
Gerd Moellmann <gerd@gnu.org>
parents:
37022
diff
changeset
|
1396 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
|
1397 #endif |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1398 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12661
diff
changeset
|
1399 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
|
1400 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
|
1401 |
d7d30cecd891
(free_frame_menubar) [USE_MOTIF]: If the shell widget's
Gerd Moellmann <gerd@gnu.org>
parents:
36958
diff
changeset
|
1402 #ifdef USE_MOTIF |
37211
afa458ac7a62
(free_frame_menubar) [USE_MOTIF]: Preserve the
Gerd Moellmann <gerd@gnu.org>
parents:
37022
diff
changeset
|
1403 if (f->output_data.x->widget) |
afa458ac7a62
(free_frame_menubar) [USE_MOTIF]: Preserve the
Gerd Moellmann <gerd@gnu.org>
parents:
37022
diff
changeset
|
1404 { |
afa458ac7a62
(free_frame_menubar) [USE_MOTIF]: Preserve the
Gerd Moellmann <gerd@gnu.org>
parents:
37022
diff
changeset
|
1405 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
|
1406 if (x1 == 0 && y1 == 0) |
afa458ac7a62
(free_frame_menubar) [USE_MOTIF]: Preserve the
Gerd Moellmann <gerd@gnu.org>
parents:
37022
diff
changeset
|
1407 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
|
1408 } |
37022
d7d30cecd891
(free_frame_menubar) [USE_MOTIF]: If the shell widget's
Gerd Moellmann <gerd@gnu.org>
parents:
36958
diff
changeset
|
1409 #endif |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1410 |
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
|
1411 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
|
1412 } |
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
|
1413 } |
49322 | 1414 #endif /* not USE_GTK */ |
1415 | |
1416 #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
|
1417 |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1418 /* 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
|
1419 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
|
1420 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
|
1421 Both assume input is blocked by the caller. */ |
118 | 1422 |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1423 /* 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
|
1424 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
|
1425 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
|
1426 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
|
1427 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
|
1428 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
|
1429 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
|
1430 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
|
1431 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
|
1432 (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
|
1433 |
49322 | 1434 #if defined (USE_X_TOOLKIT) || defined (USE_GTK) |
1435 | |
1436 /* The item selected in the popup menu. */ | |
1437 static Lisp_Object *volatile menu_item_selection; | |
1438 | |
1439 #ifdef USE_GTK | |
1440 | |
1441 /* Used when position a popup menu. See menu_position_func and | |
1442 create_and_show_popup_menu below. */ | |
1443 struct next_popup_x_y | |
1444 { | |
49651
05ebf4266798
xterm.c (x_make_frame_visible): Call gtk_window_deiconify.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
1445 FRAME_PTR f; |
49322 | 1446 int x; |
1447 int y; | |
1448 }; | |
1449 | |
1450 /* The menu position function to use if we are not putting a popup | |
1451 menu where the pointer is. | |
1452 MENU is the menu to pop up. | |
1453 X and Y shall on exit contain x/y where the menu shall pop up. | |
1454 PUSH_IN is not documented in the GTK manual. | |
1455 USER_DATA is any data passed in when calling gtk_menu_popup. | |
1456 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
|
1457 to store in *X and *Y are as well as the frame for the popup. |
49322 | 1458 |
1459 Here only X and Y are used. */ | |
1460 static void | |
1461 menu_position_func (menu, x, y, push_in, user_data) | |
1462 GtkMenu *menu; | |
1463 gint *x; | |
1464 gint *y; | |
1465 gboolean *push_in; | |
1466 gpointer user_data; | |
1467 { | |
49651
05ebf4266798
xterm.c (x_make_frame_visible): Call gtk_window_deiconify.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
1468 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
|
1469 GtkRequisition req; |
98224
25a5f64dd9db
(menu_position_func): Use x_display_pixel_height and
Chong Yidong <cyd@stupidchicken.com>
parents:
98035
diff
changeset
|
1470 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (data->f); |
25a5f64dd9db
(menu_position_func): Use x_display_pixel_height and
Chong Yidong <cyd@stupidchicken.com>
parents:
98035
diff
changeset
|
1471 int disp_width = x_display_pixel_width (dpyinfo); |
25a5f64dd9db
(menu_position_func): Use x_display_pixel_height and
Chong Yidong <cyd@stupidchicken.com>
parents:
98035
diff
changeset
|
1472 int disp_height = x_display_pixel_height (dpyinfo); |
58171 | 1473 |
49651
05ebf4266798
xterm.c (x_make_frame_visible): Call gtk_window_deiconify.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
1474 *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
|
1475 *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
|
1476 |
05ebf4266798
xterm.c (x_make_frame_visible): Call gtk_window_deiconify.
Jan Djärv <jan.h.d@swipnet.se>
parents:
49600
diff
changeset
|
1477 /* 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
|
1478 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
|
1479 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
|
1480 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
|
1481 *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
|
1482 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
|
1483 *y -= data->y + req.height - disp_height; |
49322 | 1484 } |
1485 | |
1486 static void | |
1487 popup_selection_callback (widget, client_data) | |
1488 GtkWidget *widget; | |
1489 gpointer client_data; | |
1490 { | |
1491 xg_menu_item_cb_data *cb_data = (xg_menu_item_cb_data*) client_data; | |
1492 | |
1493 if (xg_crazy_callback_abort) return; | |
1494 if (cb_data) menu_item_selection = (Lisp_Object *) cb_data->call_data; | |
1495 } | |
1496 | |
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
|
1497 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
|
1498 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
|
1499 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
|
1500 { |
58215
8f529503ae83
* xmenu.c (pop_down_menu): Remove global variable current_menu,
Jan Djärv <jan.h.d@swipnet.se>
parents:
58202
diff
changeset
|
1501 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
|
1502 |
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
|
1503 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
|
1504 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
|
1505 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
|
1506 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
|
1507 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
|
1508 } |
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
|
1509 |
49322 | 1510 /* Pop up the menu for frame F defined by FIRST_WV at X/Y and loop until the |
1511 menu pops down. | |
1512 menu_item_selection will be set to the selection. */ | |
1513 static void | |
105891
07c792840800
* xmenu.c (Fx_popup_menu): Extract event timestamp. Pass it to
Chong Yidong <cyd@stupidchicken.com>
parents:
105877
diff
changeset
|
1514 create_and_show_popup_menu (f, first_wv, x, y, for_click, timestamp) |
49322 | 1515 FRAME_PTR f; |
1516 widget_value *first_wv; | |
1517 int x; | |
1518 int y; | |
1519 int for_click; | |
105891
07c792840800
* xmenu.c (Fx_popup_menu): Extract event timestamp. Pass it to
Chong Yidong <cyd@stupidchicken.com>
parents:
105877
diff
changeset
|
1520 EMACS_UINT timestamp; |
49322 | 1521 { |
1522 int i; | |
1523 GtkWidget *menu; | |
1524 GtkMenuPositionFunc pos_func = 0; /* Pop up at pointer. */ | |
1525 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
|
1526 int specpdl_count = SPECPDL_INDEX (); |
49322 | 1527 |
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1528 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
|
1529 abort (); |
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1530 |
49322 | 1531 xg_crazy_callback_abort = 1; |
1532 menu = xg_create_widget ("popup", first_wv->name, f, first_wv, | |
1533 G_CALLBACK (popup_selection_callback), | |
1534 G_CALLBACK (popup_deactivate_callback), | |
1535 G_CALLBACK (menu_highlight_callback)); | |
1536 xg_crazy_callback_abort = 0; | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1537 |
49322 | 1538 if (! for_click) |
1539 { | |
1540 /* Not invoked by a click. pop up at x/y. */ | |
1541 pos_func = menu_position_func; | |
1542 | |
1543 /* 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
|
1544 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
|
1545 y += f->top_pos + FRAME_OUTER_TO_INNER_DIFF_Y (f); |
49322 | 1546 |
1547 popup_x_y.x = x; | |
1548 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
|
1549 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
|
1550 |
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
|
1551 i = 0; /* gtk_menu_popup needs this to be 0 for a non-button popup. */ |
49322 | 1552 } |
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
|
1553 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
|
1554 { |
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
|
1555 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
|
1556 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
|
1557 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
|
1558 } |
61619
489414dfb069
Remove eol whitespace; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
60890
diff
changeset
|
1559 |
49322 | 1560 /* Display the menu. */ |
1561 gtk_widget_show_all (menu); | |
105903
28d5dd02302d
* xmenu.c (Fx_popup_menu): Hide any tooltip before opening a menu.
Chong Yidong <cyd@stupidchicken.com>
parents:
105895
diff
changeset
|
1562 |
105891
07c792840800
* xmenu.c (Fx_popup_menu): Extract event timestamp. Pass it to
Chong Yidong <cyd@stupidchicken.com>
parents:
105877
diff
changeset
|
1563 gtk_menu_popup (GTK_MENU (menu), 0, 0, pos_func, &popup_x_y, i, |
105895 | 1564 timestamp > 0 ? timestamp : gtk_get_current_event_time()); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1565 |
58215
8f529503ae83
* xmenu.c (pop_down_menu): Remove global variable current_menu,
Jan Djärv <jan.h.d@swipnet.se>
parents:
58202
diff
changeset
|
1566 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
|
1567 |
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
|
1568 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
|
1569 { |
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
|
1570 /* 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
|
1571 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
|
1572 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
|
1573 /* 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
|
1574 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
|
1575 } |
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
|
1576 |
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
|
1577 unbind_to (specpdl_count, Qnil); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1578 |
49322 | 1579 /* Must reset this manually because the button release event is not passed |
1580 to Emacs event loop. */ | |
1581 FRAME_X_DISPLAY_INFO (f)->grabbed = 0; | |
1582 } | |
1583 | |
1584 #else /* not USE_GTK */ | |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1585 |
9336
d5ffd9c9edb0
(widget_id_tick): Move definition into conditional.
Richard M. Stallman <rms@gnu.org>
parents:
9236
diff
changeset
|
1586 /* 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
|
1587 library. |
da016ba65a6c
(xmenu_show, xdialog_show): Increment widget_id_tick
Karl Heuer <kwzh@gnu.org>
parents:
11907
diff
changeset
|
1588 |
da016ba65a6c
(xmenu_show, xdialog_show): Increment widget_id_tick
Karl Heuer <kwzh@gnu.org>
parents:
11907
diff
changeset
|
1589 For the main windows, and popup menus, we use this counter, |
12661 | 1590 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
|
1591 |
12661 | 1592 For menu bars, we use numbers starting at 0, counted in |
1593 next_menubar_widget_id. */ | |
9336
d5ffd9c9edb0
(widget_id_tick): Move definition into conditional.
Richard M. Stallman <rms@gnu.org>
parents:
9236
diff
changeset
|
1594 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
|
1595 |
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1596 static void |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1597 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
|
1598 Widget widget; |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1599 LWLIB_ID id; |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1600 XtPointer client_data; |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1601 { |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1602 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
|
1603 } |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1604 |
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
|
1605 /* 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
|
1606 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
|
1607 |
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
|
1608 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
|
1609 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
|
1610 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
|
1611 { |
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
|
1612 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
|
1613 | 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
|
1614 |
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
|
1615 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
|
1616 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
|
1617 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
|
1618 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
|
1619 |
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
|
1620 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
|
1621 } |
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
|
1622 |
49322 | 1623 /* Pop up the menu for frame F defined by FIRST_WV at X/Y and loop until the |
1624 menu pops down. | |
1625 menu_item_selection will be set to the selection. */ | |
1626 static void | |
105891
07c792840800
* xmenu.c (Fx_popup_menu): Extract event timestamp. Pass it to
Chong Yidong <cyd@stupidchicken.com>
parents:
105877
diff
changeset
|
1627 create_and_show_popup_menu (f, first_wv, x, y, for_click, timestamp) |
49322 | 1628 FRAME_PTR f; |
1629 widget_value *first_wv; | |
1630 int x; | |
1631 int y; | |
1632 int for_click; | |
105891
07c792840800
* xmenu.c (Fx_popup_menu): Extract event timestamp. Pass it to
Chong Yidong <cyd@stupidchicken.com>
parents:
105877
diff
changeset
|
1633 EMACS_UINT timestamp; |
49322 | 1634 { |
1635 int i; | |
1636 Arg av[2]; | |
1637 int ac = 0; | |
1638 XButtonPressedEvent dummy; | |
1639 LWLIB_ID menu_id; | |
1640 Widget menu; | |
1641 | |
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1642 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
|
1643 abort (); |
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1644 |
49322 | 1645 menu_id = widget_id_tick++; |
1646 menu = lw_create_widget ("popup", first_wv->name, menu_id, first_wv, | |
1647 f->output_data.x->widget, 1, 0, | |
1648 popup_selection_callback, | |
1649 popup_deactivate_callback, | |
1650 menu_highlight_callback); | |
1651 | |
107804
24c4451bcaf7
Lucid menus can now use Xft for fonts.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
1652 apply_systemfont_to_menu (menu); |
24c4451bcaf7
Lucid menus can now use Xft for fonts.
Jan D. <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
1653 |
49322 | 1654 dummy.type = ButtonPress; |
1655 dummy.serial = 0; | |
1656 dummy.send_event = 0; | |
1657 dummy.display = FRAME_X_DISPLAY (f); | |
1658 dummy.time = CurrentTime; | |
1659 dummy.root = FRAME_X_DISPLAY_INFO (f)->root_window; | |
1660 dummy.window = dummy.root; | |
1661 dummy.subwindow = dummy.root; | |
1662 dummy.x = x; | |
1663 dummy.y = y; | |
1664 | |
1665 /* 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
|
1666 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
|
1667 y += f->top_pos + FRAME_OUTER_TO_INNER_DIFF_Y (f); |
49322 | 1668 |
1669 dummy.x_root = x; | |
1670 dummy.y_root = y; | |
1671 | |
1672 dummy.state = 0; | |
1673 dummy.button = 0; | |
1674 for (i = 0; i < 5; i++) | |
1675 if (FRAME_X_DISPLAY_INFO (f)->grabbed & (1 << i)) | |
1676 dummy.button = i; | |
1677 | |
1678 /* Don't allow any geometry request from the user. */ | |
1679 XtSetArg (av[ac], XtNgeometry, 0); ac++; | |
1680 XtSetValues (menu, av, ac); | |
1681 | |
1682 /* Display the menu. */ | |
1683 lw_popup_menu (menu, (XEvent *) &dummy); | |
1684 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
|
1685 x_activate_timeout_atimer (); |
61619
489414dfb069
Remove eol whitespace; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
60890
diff
changeset
|
1686 |
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
|
1687 { |
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
|
1688 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
|
1689 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
|
1690 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
|
1691 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
|
1692 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
|
1693 |
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
|
1694 /* 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
|
1695 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
|
1696 |
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
|
1697 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
|
1698 } |
49322 | 1699 } |
1700 | |
1701 #endif /* not USE_GTK */ | |
1702 | |
105923
1011707400d3
* menu.c (Fx_popup_menu): Consolidate versions from xmenu.c,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105903
diff
changeset
|
1703 Lisp_Object |
1011707400d3
* menu.c (Fx_popup_menu): Consolidate versions from xmenu.c,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105903
diff
changeset
|
1704 xmenu_show (FRAME_PTR f, int x, int y, int for_click, int keymaps, |
1011707400d3
* menu.c (Fx_popup_menu): Consolidate versions from xmenu.c,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105903
diff
changeset
|
1705 Lisp_Object title, char **error, EMACS_UINT timestamp) |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1706 { |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1707 int i; |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1708 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
|
1709 widget_value **submenu_stack |
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1710 = (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
|
1711 Lisp_Object *subprefix_stack |
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1712 = (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
|
1713 int submenu_depth = 0; |
6881
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
1714 |
7521
2971264ff9aa
(xmenu_show): Completely ignore nameless panes
Richard M. Stallman <rms@gnu.org>
parents:
7459
diff
changeset
|
1715 int first_pane; |
2971264ff9aa
(xmenu_show): Completely ignore nameless panes
Richard M. Stallman <rms@gnu.org>
parents:
7459
diff
changeset
|
1716 |
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1717 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
|
1718 abort (); |
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
1719 |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1720 *error = NULL; |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1721 |
7335
73d1276933e1
(xmenu_show): Disallow empty menus.
Karl Heuer <kwzh@gnu.org>
parents:
7334
diff
changeset
|
1722 if (menu_items_used <= MENU_ITEMS_PANE_LENGTH) |
73d1276933e1
(xmenu_show): Disallow empty menus.
Karl Heuer <kwzh@gnu.org>
parents:
7334
diff
changeset
|
1723 { |
73d1276933e1
(xmenu_show): Disallow empty menus.
Karl Heuer <kwzh@gnu.org>
parents:
7334
diff
changeset
|
1724 *error = "Empty menu"; |
73d1276933e1
(xmenu_show): Disallow empty menus.
Karl Heuer <kwzh@gnu.org>
parents:
7334
diff
changeset
|
1725 return Qnil; |
73d1276933e1
(xmenu_show): Disallow empty menus.
Karl Heuer <kwzh@gnu.org>
parents:
7334
diff
changeset
|
1726 } |
5896
b20145eafe0c
(xmenu_show) [USE_X_TOOLKIT]: return Qnil when val is null.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5881
diff
changeset
|
1727 |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1728 /* 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
|
1729 representing the panes and their items. */ |
14546
bc0388a7c282
(xmalloc_widget_value): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14298
diff
changeset
|
1730 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
|
1731 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
|
1732 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
|
1733 wv->enabled = 1; |
24993 | 1734 wv->button_type = BUTTON_TYPE_NONE; |
42588
43a330df6213
(set_frame_menubar, xmenu_show):
Jason Rumney <jasonr@gnu.org>
parents:
42586
diff
changeset
|
1735 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
|
1736 first_wv = wv; |
7521
2971264ff9aa
(xmenu_show): Completely ignore nameless panes
Richard M. Stallman <rms@gnu.org>
parents:
7459
diff
changeset
|
1737 first_pane = 1; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1738 |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1739 /* 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
|
1740 i = 0; |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1741 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
|
1742 { |
6291
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1743 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
|
1744 { |
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1745 submenu_stack[submenu_depth++] = save_wv; |
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1746 save_wv = prev_wv; |
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1747 prev_wv = 0; |
7521
2971264ff9aa
(xmenu_show): Completely ignore nameless panes
Richard M. Stallman <rms@gnu.org>
parents:
7459
diff
changeset
|
1748 first_pane = 1; |
6291
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1749 i++; |
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1750 } |
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1751 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
|
1752 { |
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1753 prev_wv = save_wv; |
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1754 save_wv = submenu_stack[--submenu_depth]; |
7521
2971264ff9aa
(xmenu_show): Completely ignore nameless panes
Richard M. Stallman <rms@gnu.org>
parents:
7459
diff
changeset
|
1755 first_pane = 0; |
6291
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1756 i++; |
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1757 } |
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1758 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
|
1759 && submenu_depth != 0) |
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1760 i += MENU_ITEMS_PANE_LENGTH; |
6746
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
1761 /* Ignore a nil in the item list. |
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
1762 It's meaningful only for dialog boxes. */ |
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
1763 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
|
1764 i += 1; |
6291
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1765 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
|
1766 { |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1767 /* 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
|
1768 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
|
1769 char *pane_string; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1770 |
37940
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37864
diff
changeset
|
1771 pane_name = AREF (menu_items, i + MENU_ITEMS_PANE_NAME); |
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37864
diff
changeset
|
1772 prefix = AREF (menu_items, i + MENU_ITEMS_PANE_PREFIX); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1773 |
23302
dcff2a4b6cb4
(single_submenu) [! HAVE_MULTILINGUAL_MENU]: Make
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
1774 #ifndef HAVE_MULTILINGUAL_MENU |
37940
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37864
diff
changeset
|
1775 if (STRINGP (pane_name) && STRING_MULTIBYTE (pane_name)) |
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37864
diff
changeset
|
1776 { |
60583
44c9c79a2c7a
(ENCODE_MENU_STRING): Explicitly use string_make_unibyte.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59914
diff
changeset
|
1777 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
|
1778 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:
37864
diff
changeset
|
1779 } |
23302
dcff2a4b6cb4
(single_submenu) [! HAVE_MULTILINGUAL_MENU]: Make
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
1780 #endif |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1781 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
|
1782 ? "" : (char *) SDATA (pane_name)); |
6291
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1783 /* 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
|
1784 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
|
1785 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
|
1786 pane_string = ""; |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1787 |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1788 /* 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
|
1789 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
|
1790 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
|
1791 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
|
1792 { |
14546
bc0388a7c282
(xmalloc_widget_value): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14298
diff
changeset
|
1793 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
|
1794 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
|
1795 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
|
1796 else |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1797 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
|
1798 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
|
1799 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
|
1800 wv->name++; |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1801 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
|
1802 wv->enabled = 1; |
24993 | 1803 wv->button_type = BUTTON_TYPE_NONE; |
42588
43a330df6213
(set_frame_menubar, xmenu_show):
Jason Rumney <jasonr@gnu.org>
parents:
42586
diff
changeset
|
1804 wv->help = Qnil; |
7521
2971264ff9aa
(xmenu_show): Completely ignore nameless panes
Richard M. Stallman <rms@gnu.org>
parents:
7459
diff
changeset
|
1805 save_wv = wv; |
2971264ff9aa
(xmenu_show): Completely ignore nameless panes
Richard M. Stallman <rms@gnu.org>
parents:
7459
diff
changeset
|
1806 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
|
1807 } |
7521
2971264ff9aa
(xmenu_show): Completely ignore nameless panes
Richard M. Stallman <rms@gnu.org>
parents:
7459
diff
changeset
|
1808 else if (first_pane) |
2971264ff9aa
(xmenu_show): Completely ignore nameless panes
Richard M. Stallman <rms@gnu.org>
parents:
7459
diff
changeset
|
1809 { |
2971264ff9aa
(xmenu_show): Completely ignore nameless panes
Richard M. Stallman <rms@gnu.org>
parents:
7459
diff
changeset
|
1810 save_wv = wv; |
2971264ff9aa
(xmenu_show): Completely ignore nameless panes
Richard M. Stallman <rms@gnu.org>
parents:
7459
diff
changeset
|
1811 prev_wv = 0; |
2971264ff9aa
(xmenu_show): Completely ignore nameless panes
Richard M. Stallman <rms@gnu.org>
parents:
7459
diff
changeset
|
1812 } |
2971264ff9aa
(xmenu_show): Completely ignore nameless panes
Richard M. Stallman <rms@gnu.org>
parents:
7459
diff
changeset
|
1813 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
|
1814 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
|
1815 } |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1816 else |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1817 { |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1818 /* 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
|
1819 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:
37864
diff
changeset
|
1820 item_name = AREF (menu_items, i + MENU_ITEMS_ITEM_NAME); |
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37864
diff
changeset
|
1821 enable = AREF (menu_items, i + MENU_ITEMS_ITEM_ENABLE); |
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37864
diff
changeset
|
1822 descrip = AREF (menu_items, i + MENU_ITEMS_ITEM_EQUIV_KEY); |
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37864
diff
changeset
|
1823 def = AREF (menu_items, i + MENU_ITEMS_ITEM_DEFINITION); |
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37864
diff
changeset
|
1824 type = AREF (menu_items, i + MENU_ITEMS_ITEM_TYPE); |
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37864
diff
changeset
|
1825 selected = AREF (menu_items, i + MENU_ITEMS_ITEM_SELECTED); |
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37864
diff
changeset
|
1826 help = AREF (menu_items, i + MENU_ITEMS_ITEM_HELP); |
24993 | 1827 |
23302
dcff2a4b6cb4
(single_submenu) [! HAVE_MULTILINGUAL_MENU]: Make
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
1828 #ifndef HAVE_MULTILINGUAL_MENU |
24993 | 1829 if (STRINGP (item_name) && STRING_MULTIBYTE (item_name)) |
37940
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37864
diff
changeset
|
1830 { |
51404 | 1831 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
|
1832 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:
37864
diff
changeset
|
1833 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1834 |
24993 | 1835 if (STRINGP (descrip) && STRING_MULTIBYTE (descrip)) |
37940
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37864
diff
changeset
|
1836 { |
51404 | 1837 descrip = ENCODE_MENU_STRING (descrip); |
91607
d1e53221c4aa
* xselect.c (x_handle_dnd_message):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
91327
diff
changeset
|
1838 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:
37864
diff
changeset
|
1839 } |
e76f885709fc
(single_submenu, xmenu_show) [!HAVE_MULTILINGUAL_MENU]:
Gerd Moellmann <gerd@gnu.org>
parents:
37864
diff
changeset
|
1840 #endif /* not HAVE_MULTILINGUAL_MENU */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1841 |
14546
bc0388a7c282
(xmalloc_widget_value): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14298
diff
changeset
|
1842 wv = xmalloc_widget_value (); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1843 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
|
1844 prev_wv->next = wv; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1845 else |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1846 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
|
1847 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
|
1848 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
|
1849 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
|
1850 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
|
1851 /* 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
|
1852 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
|
1853 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
|
1854 wv->call_data |
358d48409854
Don't include ../oldXMenu/XMenu.h if USE_X_TOOLKIT.
Richard M. Stallman <rms@gnu.org>
parents:
9725
diff
changeset
|
1855 = (!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
|
1856 wv->enabled = !NILP (enable); |
24993 | 1857 |
1858 if (NILP (type)) | |
1859 wv->button_type = BUTTON_TYPE_NONE; | |
1860 else if (EQ (type, QCtoggle)) | |
1861 wv->button_type = BUTTON_TYPE_TOGGLE; | |
1862 else if (EQ (type, QCradio)) | |
1863 wv->button_type = BUTTON_TYPE_RADIO; | |
1864 else | |
1865 abort (); | |
1866 | |
1867 wv->selected = !NILP (selected); | |
40477
a56267e601e4
Include coding.h and charset.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40239
diff
changeset
|
1868 |
41769
26c1876db9e3
(menu_highlight_callback): Use `help' field as Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
40993
diff
changeset
|
1869 if (! STRINGP (help)) |
26c1876db9e3
(menu_highlight_callback): Use `help' field as Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
40993
diff
changeset
|
1870 help = Qnil; |
26c1876db9e3
(menu_highlight_callback): Use `help' field as Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
40993
diff
changeset
|
1871 |
26c1876db9e3
(menu_highlight_callback): Use `help' field as Lisp_Object.
Richard M. Stallman <rms@gnu.org>
parents:
40993
diff
changeset
|
1872 wv->help = help; |
40477
a56267e601e4
Include coding.h and charset.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40239
diff
changeset
|
1873 |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1874 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
|
1875 |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1876 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
|
1877 } |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1878 } |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1879 |
9236
583bb9211b2b
(popup_get_selection): Remove BLOCK_INPUT, UNBLOCK_INPUT since the
Paul Reilly <pmr@pajato.com>
parents:
9233
diff
changeset
|
1880 /* 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
|
1881 if (!NILP (title)) |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1882 { |
14546
bc0388a7c282
(xmalloc_widget_value): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14298
diff
changeset
|
1883 widget_value *wv_title = xmalloc_widget_value (); |
bc0388a7c282
(xmalloc_widget_value): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14298
diff
changeset
|
1884 widget_value *wv_sep1 = xmalloc_widget_value (); |
bc0388a7c282
(xmalloc_widget_value): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14298
diff
changeset
|
1885 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
|
1886 |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1887 wv_sep2->name = "--"; |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1888 wv_sep2->next = first_wv->contents; |
42588
43a330df6213
(set_frame_menubar, xmenu_show):
Jason Rumney <jasonr@gnu.org>
parents:
42586
diff
changeset
|
1889 wv_sep2->help = Qnil; |
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1890 |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1891 wv_sep1->name = "--"; |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1892 wv_sep1->next = wv_sep2; |
42588
43a330df6213
(set_frame_menubar, xmenu_show):
Jason Rumney <jasonr@gnu.org>
parents:
42586
diff
changeset
|
1893 wv_sep1->help = Qnil; |
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1894 |
23302
dcff2a4b6cb4
(single_submenu) [! HAVE_MULTILINGUAL_MENU]: Make
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
1895 #ifndef HAVE_MULTILINGUAL_MENU |
dcff2a4b6cb4
(single_submenu) [! HAVE_MULTILINGUAL_MENU]: Make
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
1896 if (STRING_MULTIBYTE (title)) |
51404 | 1897 title = ENCODE_MENU_STRING (title); |
23302
dcff2a4b6cb4
(single_submenu) [! HAVE_MULTILINGUAL_MENU]: Make
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
1898 #endif |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
1899 |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
1900 wv_title->name = (char *) SDATA (title); |
40477
a56267e601e4
Include coding.h and charset.h.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40239
diff
changeset
|
1901 wv_title->enabled = TRUE; |
24993 | 1902 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
|
1903 wv_title->help = Qnil; |
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1904 wv_title->next = wv_sep1; |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1905 first_wv->contents = wv_title; |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1906 } |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1907 |
49322 | 1908 /* No selection has been chosen yet. */ |
1909 menu_item_selection = 0; | |
1910 | |
1911 /* Actually create and show the menu until popped down. */ | |
105891
07c792840800
* xmenu.c (Fx_popup_menu): Extract event timestamp. Pass it to
Chong Yidong <cyd@stupidchicken.com>
parents:
105877
diff
changeset
|
1912 create_and_show_popup_menu (f, first_wv, x, y, for_click, timestamp); |
8414
8a8d2cdd4218
(xmenu_show): Ignore any geometry resource from the user.
Richard M. Stallman <rms@gnu.org>
parents:
8269
diff
changeset
|
1913 |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1914 /* 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
|
1915 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
|
1916 |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1917 /* 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
|
1918 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
|
1919 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
|
1920 { |
11655
a9f93ce6e1b4
(xmenu_show, menubar_selection_callback): Move declaration
Karl Heuer <kwzh@gnu.org>
parents:
11614
diff
changeset
|
1921 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
|
1922 |
31829
43566b0aec59
Avoid some more compiler warnings.
Gerd Moellmann <gerd@gnu.org>
parents:
31465
diff
changeset
|
1923 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
|
1924 i = 0; |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1925 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
|
1926 { |
6291
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1927 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
|
1928 { |
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1929 subprefix_stack[submenu_depth++] = prefix; |
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1930 prefix = entry; |
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1931 i++; |
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1932 } |
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1933 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
|
1934 { |
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1935 prefix = subprefix_stack[--submenu_depth]; |
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1936 i++; |
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1937 } |
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1938 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
|
1939 { |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1940 prefix |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1941 = 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
|
1942 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
|
1943 } |
13071
2e514396cbc8
(popup_get_selection): Pop menu down if button is pressed
Richard M. Stallman <rms@gnu.org>
parents:
12747
diff
changeset
|
1944 /* 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
|
1945 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
|
1946 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
|
1947 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
|
1948 else |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1949 { |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1950 entry |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1951 = 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
|
1952 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
|
1953 { |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1954 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
|
1955 { |
6291
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1956 int j; |
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1957 |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1958 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
|
1959 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
|
1960 entry = Fcons (prefix, entry); |
6291
38ec8e76594f
(Fx_popup_menu): If POSITION is nil,
Richard M. Stallman <rms@gnu.org>
parents:
6200
diff
changeset
|
1961 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
|
1962 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
|
1963 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
|
1964 } |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1965 return entry; |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1966 } |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1967 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
|
1968 } |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1969 } |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1970 } |
61984
2ce055c7db65
[not HAVE_X_TOOLKIT] (xmenu_show):
Richard M. Stallman <rms@gnu.org>
parents:
61620
diff
changeset
|
1971 else if (!for_click) |
2ce055c7db65
[not HAVE_X_TOOLKIT] (xmenu_show):
Richard M. Stallman <rms@gnu.org>
parents:
61620
diff
changeset
|
1972 /* Make "Cancel" equivalent to C-g. */ |
2ce055c7db65
[not HAVE_X_TOOLKIT] (xmenu_show):
Richard M. Stallman <rms@gnu.org>
parents:
61620
diff
changeset
|
1973 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
|
1974 |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
1975 return Qnil; |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
1976 } |
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
1977 |
49322 | 1978 #ifdef USE_GTK |
1979 static void | |
1980 dialog_selection_callback (widget, client_data) | |
1981 GtkWidget *widget; | |
1982 gpointer client_data; | |
1983 { | |
1984 /* The EMACS_INT cast avoids a warning. There's no problem | |
1985 as long as pointers have enough bits to hold small integers. */ | |
1986 if ((int) (EMACS_INT) client_data != -1) | |
1987 menu_item_selection = (Lisp_Object *) client_data; | |
1988 | |
1989 popup_activated_flag = 0; | |
1990 } | |
1991 | |
1992 /* Pop up the dialog for frame F defined by FIRST_WV and loop until the | |
1993 dialog pops down. | |
1994 menu_item_selection will be set to the selection. */ | |
1995 static void | |
1996 create_and_show_dialog (f, first_wv) | |
1997 FRAME_PTR f; | |
1998 widget_value *first_wv; | |
1999 { | |
2000 GtkWidget *menu; | |
2001 | |
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
2002 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
|
2003 abort (); |
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
2004 |
49322 | 2005 menu = xg_create_widget ("dialog", first_wv->name, f, first_wv, |
2006 G_CALLBACK (dialog_selection_callback), | |
2007 G_CALLBACK (popup_deactivate_callback), | |
2008 0); | |
2009 | |
2010 if (menu) | |
2011 { | |
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
|
2012 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
|
2013 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
|
2014 |
49322 | 2015 /* Display the menu. */ |
2016 gtk_widget_show_all (menu); | |
2017 | |
2018 /* 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
|
2019 popup_widget_loop (1, menu); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2020 |
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
|
2021 unbind_to (specpdl_count, Qnil); |
49322 | 2022 } |
2023 } | |
2024 | |
2025 #else /* not USE_GTK */ | |
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2026 static void |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2027 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
|
2028 Widget widget; |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2029 LWLIB_ID id; |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2030 XtPointer client_data; |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2031 { |
11266
3e93d8b99b05
(menubar_selection_callback, dialog_selection_callback)
Richard M. Stallman <rms@gnu.org>
parents:
11237
diff
changeset
|
2032 /* 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
|
2033 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
|
2034 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
|
2035 menu_item_selection = (Lisp_Object *) client_data; |
49322 | 2036 |
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2037 BLOCK_INPUT; |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2038 lw_destroy_all_widgets (id); |
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2039 UNBLOCK_INPUT; |
11614
fdd0d5bdd8c6
(popup_get_selection): Use x_non_menubar_window_to_frame.
Karl Heuer <kwzh@gnu.org>
parents:
11528
diff
changeset
|
2040 popup_activated_flag = 0; |
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2041 } |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
2042 |
49322 | 2043 |
2044 /* Pop up the dialog for frame F defined by FIRST_WV and loop until the | |
2045 dialog pops down. | |
2046 menu_item_selection will be set to the selection. */ | |
2047 static void | |
2048 create_and_show_dialog (f, first_wv) | |
2049 FRAME_PTR f; | |
2050 widget_value *first_wv; | |
2051 { | |
2052 LWLIB_ID dialog_id; | |
2053 | |
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
2054 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
|
2055 abort(); |
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
2056 |
49322 | 2057 dialog_id = widget_id_tick++; |
107827
aa85632b7860
Use XFT in Lucid dialogs if available.
Jan D. <jan.h.d@swipnet.se>
parents:
107804
diff
changeset
|
2058 #ifdef HAVE_XFT |
aa85632b7860
Use XFT in Lucid dialogs if available.
Jan D. <jan.h.d@swipnet.se>
parents:
107804
diff
changeset
|
2059 apply_systemfont_to_dialog (f->output_data.x->widget); |
aa85632b7860
Use XFT in Lucid dialogs if available.
Jan D. <jan.h.d@swipnet.se>
parents:
107804
diff
changeset
|
2060 #endif |
49322 | 2061 lw_create_widget (first_wv->name, "dialog", dialog_id, first_wv, |
2062 f->output_data.x->widget, 1, 0, | |
2063 dialog_selection_callback, 0, 0); | |
2064 lw_modify_all_widgets (dialog_id, first_wv->contents, True); | |
2065 /* Display the dialog box. */ | |
2066 lw_pop_up_all_widgets (dialog_id); | |
2067 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
|
2068 x_activate_timeout_atimer (); |
49322 | 2069 |
2070 /* Process events that apply to the dialog box. | |
2071 Also handle timers. */ | |
2072 { | |
2073 int count = SPECPDL_INDEX (); | |
2074 int fact = 4 * sizeof (LWLIB_ID); | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2075 |
49322 | 2076 /* 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
|
2077 record_unwind_protect (pop_down_menu, |
49322 | 2078 Fcons (make_number (dialog_id >> (fact)), |
2079 make_number (dialog_id & ~(-1 << (fact))))); | |
2080 | |
57965
9b14127a651a
* eval.c (Feval): Remove check for INPUT_BLOCKED_P.
Jan Djärv <jan.h.d@swipnet.se>
parents:
57928
diff
changeset
|
2081 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
|
2082 dialog_id, 1); |
49322 | 2083 |
2084 unbind_to (count, Qnil); | |
2085 } | |
2086 } | |
2087 | |
2088 #endif /* not USE_GTK */ | |
2089 | |
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2090 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
|
2091 "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
|
2092 "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
|
2093 |
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2094 static Lisp_Object |
62661
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2095 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
|
2096 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
|
2097 int keymaps; |
62661
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2098 Lisp_Object title, header; |
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2099 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
|
2100 { |
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2101 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
|
2102 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
|
2103 |
25730
db88a4b84d91
(single_menu_item, Fx_popup_menu, Fx_popup_menu,
Gerd Moellmann <gerd@gnu.org>
parents:
25680
diff
changeset
|
2104 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
|
2105 |
6746
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2106 /* Number of elements seen so far, before boundary. */ |
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2107 int left_count = 0; |
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2108 /* 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
|
2109 int boundary_seen = 0; |
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2110 |
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
2111 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
|
2112 abort (); |
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
2113 |
62661
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2114 *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
|
2115 |
6426
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2116 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
|
2117 { |
62661
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2118 *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
|
2119 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
|
2120 } |
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2121 |
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2122 /* 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
|
2123 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
|
2124 { |
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2125 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
|
2126 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
|
2127 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
|
2128 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
|
2129 pane_string = (NILP (pane_name) |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2130 ? "" : (char *) SDATA (pane_name)); |
14546
bc0388a7c282
(xmalloc_widget_value): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14298
diff
changeset
|
2131 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
|
2132 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
|
2133 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
|
2134 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
|
2135 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
|
2136 prev_wv->name = "message"; |
42588
43a330df6213
(set_frame_menubar, xmenu_show):
Jason Rumney <jasonr@gnu.org>
parents:
42586
diff
changeset
|
2137 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
|
2138 first_wv = prev_wv; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2139 |
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2140 /* 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
|
2141 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
|
2142 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
|
2143 { |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2144 |
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2145 /* 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
|
2146 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
|
2147 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
|
2148 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
|
2149 descrip |
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2150 = XVECTOR (menu_items)->contents[i + MENU_ITEMS_ITEM_EQUIV_KEY]; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2151 |
6426
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2152 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
|
2153 { |
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2154 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
|
2155 *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
|
2156 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
|
2157 } |
6746
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2158 if (EQ (item_name, Qquote)) |
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2159 { |
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2160 /* This is the boundary between left-side elts |
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2161 and right-side elts. Stop incrementing right_count. */ |
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2162 boundary_seen = 1; |
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2163 i++; |
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2164 continue; |
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2165 } |
15912
afb0bb1cdbe6
(xdialog_show): Don't allow 9 buttons.
Richard M. Stallman <rms@gnu.org>
parents:
15839
diff
changeset
|
2166 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
|
2167 { |
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2168 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
|
2169 *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
|
2170 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
|
2171 } |
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2172 |
14546
bc0388a7c282
(xmalloc_widget_value): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14298
diff
changeset
|
2173 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
|
2174 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
|
2175 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
|
2176 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
|
2177 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
|
2178 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
|
2179 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
|
2180 wv->enabled = !NILP (enable); |
42588
43a330df6213
(set_frame_menubar, xmenu_show):
Jason Rumney <jasonr@gnu.org>
parents:
42586
diff
changeset
|
2181 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
|
2182 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
|
2183 |
6746
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2184 if (! boundary_seen) |
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2185 left_count++; |
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2186 |
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2187 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
|
2188 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
|
2189 } |
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2190 |
6746
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2191 /* If the boundary was not specified, |
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2192 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
|
2193 if (! boundary_seen) |
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2194 left_count = nb_buttons - nb_buttons / 2; |
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2195 |
14546
bc0388a7c282
(xmalloc_widget_value): New function.
Richard M. Stallman <rms@gnu.org>
parents:
14298
diff
changeset
|
2196 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
|
2197 wv->name = dialog_name; |
42588
43a330df6213
(set_frame_menubar, xmenu_show):
Jason Rumney <jasonr@gnu.org>
parents:
42586
diff
changeset
|
2198 wv->help = Qnil; |
62661
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2199 |
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2200 /* 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
|
2201 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
|
2202 a popup for errors. */ |
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2203 if (NILP(header)) |
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2204 dialog_name[0] = 'Q'; |
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2205 else |
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2206 dialog_name[0] = 'I'; |
0db5674a79de
(Fx_popup_dialog): Add a third boolean argument to
Nick Roberts <nickrob@snap.net.nz>
parents:
62216
diff
changeset
|
2207 |
6426
1f1388aa2d44
(Fx_popup_dialog): Don't fail to set X, Y from POSITION.
Richard M. Stallman <rms@gnu.org>
parents:
6424
diff
changeset
|
2208 /* 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
|
2209 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
|
2210 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
|
2211 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
|
2212 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
|
2213 dialog_name[3] = 'R'; |
6746
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2214 /* Number of buttons to put on the right. */ |
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2215 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
|
2216 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
|
2217 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
|
2218 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
|
2219 } |
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2220 |
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2221 /* 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
|
2222 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
|
2223 |
49322 | 2224 /* Actually create and show the dialog. */ |
2225 create_and_show_dialog (f, first_wv); | |
2226 | |
2227 /* Free the widget_value objects we used to specify the contents. */ | |
2228 free_menubar_widget_value_tree (first_wv); | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2229 |
49322 | 2230 /* Find the selected item, and its pane, to return |
2231 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
|
2232 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
|
2233 { |
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2234 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
|
2235 |
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2236 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
|
2237 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
|
2238 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
|
2239 { |
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2240 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
|
2241 |
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2242 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
|
2243 { |
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2244 prefix |
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2245 = 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
|
2246 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
|
2247 } |
31465
b58d8e366faa
(xdialog_show): When looking up the selection in
Gerd Moellmann <gerd@gnu.org>
parents:
31365
diff
changeset
|
2248 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
|
2249 { |
b58d8e366faa
(xdialog_show): When looking up the selection in
Gerd Moellmann <gerd@gnu.org>
parents:
31365
diff
changeset
|
2250 /* 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
|
2251 right-side elts. */ |
b58d8e366faa
(xdialog_show): When looking up the selection in
Gerd Moellmann <gerd@gnu.org>
parents:
31365
diff
changeset
|
2252 ++i; |
b58d8e366faa
(xdialog_show): When looking up the selection in
Gerd Moellmann <gerd@gnu.org>
parents:
31365
diff
changeset
|
2253 } |
6307
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2254 else |
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2255 { |
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2256 entry |
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2257 = 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
|
2258 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
|
2259 { |
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2260 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
|
2261 { |
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2262 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
|
2263 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
|
2264 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
|
2265 } |
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2266 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
|
2267 } |
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2268 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
|
2269 } |
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2270 } |
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2271 } |
59102
0096c58ce34a
* xmenu.c (popup_get_selection): Pop down on C-g.
Jan Djärv <jan.h.d@swipnet.se>
parents:
58824
diff
changeset
|
2272 else |
0096c58ce34a
* xmenu.c (popup_get_selection): Pop down on C-g.
Jan Djärv <jan.h.d@swipnet.se>
parents:
58824
diff
changeset
|
2273 /* 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
|
2274 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
|
2275 |
1f9fa4022502
(xdialog_show): New function to handle the display of dialog boxes.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6291
diff
changeset
|
2276 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
|
2277 } |
30299
f2cd2bf063c9
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30215
diff
changeset
|
2278 |
49322 | 2279 #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
|
2280 |
27458
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2281 /* 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
|
2282 Used to generate menu help events. */ |
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2283 |
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2284 static struct frame *menu_help_frame; |
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2285 |
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2286 |
30363
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2287 /* 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
|
2288 |
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2289 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
|
2290 the menu (currently not used). |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2291 |
30363
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2292 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
|
2293 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
|
2294 keyboard events. */ |
27458
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2295 |
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2296 static void |
30363
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2297 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
|
2298 char *help_string; |
30363
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2299 int pane, item; |
27458
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2300 { |
30363
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2301 extern Lisp_Object Qmenu_item; |
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2302 Lisp_Object *first_item; |
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2303 Lisp_Object pane_name; |
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2304 Lisp_Object menu_object; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2305 |
30363
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2306 first_item = XVECTOR (menu_items)->contents; |
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2307 if (EQ (first_item[0], Qt)) |
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2308 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
|
2309 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
|
2310 /* 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
|
2311 pane_name = empty_unibyte_string; |
30363
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2312 else |
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2313 pane_name = first_item[MENU_ITEMS_ITEM_NAME]; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2314 |
30363
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2315 /* (menu-item MENU-NAME PANE-NUMBER) */ |
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2316 menu_object = Fcons (Qmenu_item, |
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2317 Fcons (pane_name, |
8f11e306dc02
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30299
diff
changeset
|
2318 Fcons (make_number (pane), Qnil))); |
30299
f2cd2bf063c9
(menu_help_callback): Call show_help_echo with
Gerd Moellmann <gerd@gnu.org>
parents:
30215
diff
changeset
|
2319 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
|
2320 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
|
2321 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2322 |
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
|
2323 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
|
2324 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
|
2325 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
|
2326 { |
58215
8f529503ae83
* xmenu.c (pop_down_menu): Remove global variable current_menu,
Jan Djärv <jan.h.d@swipnet.se>
parents:
58202
diff
changeset
|
2327 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
|
2328 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
|
2329 |
58215
8f529503ae83
* xmenu.c (pop_down_menu): Remove global variable current_menu,
Jan Djärv <jan.h.d@swipnet.se>
parents:
58202
diff
changeset
|
2330 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
|
2331 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
|
2332 |
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
|
2333 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
|
2334 #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
|
2335 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
|
2336 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
|
2337 #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
|
2338 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
|
2339 |
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
|
2340 #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
|
2341 /* 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
|
2342 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
|
2343 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
|
2344 |
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
|
2345 /* 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
|
2346 (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
|
2347 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
|
2348 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
|
2349 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
|
2350 |
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
|
2351 #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
|
2352 |
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
|
2353 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
|
2354 |
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
|
2355 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
|
2356 } |
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
|
2357 |
27458
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2358 |
105931
a5db20cb0a5a
xmenu.c (xmenu_show): Must not be static after 2009-11-09 changes.
Jan Djärv <jan.h.d@swipnet.se>
parents:
105923
diff
changeset
|
2359 Lisp_Object |
105891
07c792840800
* xmenu.c (Fx_popup_menu): Extract event timestamp. Pass it to
Chong Yidong <cyd@stupidchicken.com>
parents:
105877
diff
changeset
|
2360 xmenu_show (f, x, y, for_click, keymaps, title, error, timestamp) |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2361 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
|
2362 int x, y; |
10757
2829c9840b0e
(xmenu_show, both versions): New arg for_click.
Richard M. Stallman <rms@gnu.org>
parents:
10716
diff
changeset
|
2363 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
|
2364 int keymaps; |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2365 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
|
2366 char **error; |
105891
07c792840800
* xmenu.c (Fx_popup_menu): Extract event timestamp. Pass it to
Chong Yidong <cyd@stupidchicken.com>
parents:
105877
diff
changeset
|
2367 EMACS_UINT timestamp; |
118 | 2368 { |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2369 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
|
2370 XMenu *menu; |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2371 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
|
2372 Lisp_Object entry, pane_prefix; |
118 | 2373 char *datap; |
2374 int ulx, uly, width, height; | |
2375 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
|
2376 int i, j, lines, maxlines; |
6881
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2377 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
|
2378 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
|
2379 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
|
2380 int specpdl_count = SPECPDL_INDEX (); |
1082
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
2381 |
97645
229acec13840
(Fx_popup_dialog, Fx_popup_menu, xmenu_show): Allow MSDOS frames along with
Eli Zaretskii <eliz@gnu.org>
parents:
97204
diff
changeset
|
2382 if (! FRAME_X_P (f) && ! FRAME_MSDOS_P (f)) |
83370
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
2383 abort (); |
5272862a4865
Fix crashes in xdialog_show (and other places) with xterm-mouse-mode.
Karoly Lorentey <lorentey@elte.hu>
parents:
83353
diff
changeset
|
2384 |
3747
6506b2fd475a
(xmenu_show): Store 0 in *ERROR at the beginning.
Richard M. Stallman <rms@gnu.org>
parents:
3501
diff
changeset
|
2385 *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
|
2386 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
|
2387 return Qnil; |
1082
d24afc1bef38
(xmenu_show): If no panes, just return.
Richard M. Stallman <rms@gnu.org>
parents:
975
diff
changeset
|
2388 |
7335
73d1276933e1
(xmenu_show): Disallow empty menus.
Karl Heuer <kwzh@gnu.org>
parents:
7334
diff
changeset
|
2389 if (menu_items_used <= MENU_ITEMS_PANE_LENGTH) |
73d1276933e1
(xmenu_show): Disallow empty menus.
Karl Heuer <kwzh@gnu.org>
parents:
7334
diff
changeset
|
2390 { |
73d1276933e1
(xmenu_show): Disallow empty menus.
Karl Heuer <kwzh@gnu.org>
parents:
7334
diff
changeset
|
2391 *error = "Empty menu"; |
73d1276933e1
(xmenu_show): Disallow empty menus.
Karl Heuer <kwzh@gnu.org>
parents:
7334
diff
changeset
|
2392 return Qnil; |
73d1276933e1
(xmenu_show): Disallow empty menus.
Karl Heuer <kwzh@gnu.org>
parents:
7334
diff
changeset
|
2393 } |
73d1276933e1
(xmenu_show): Disallow empty menus.
Karl Heuer <kwzh@gnu.org>
parents:
7334
diff
changeset
|
2394 |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2395 /* 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
|
2396 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
|
2397 &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
|
2398 &dummy_uint, &dummy_uint); |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
2399 |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2400 /* 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
|
2401 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
|
2402 if (menu == NULL) |
118 | 2403 { |
2404 *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
|
2405 return Qnil; |
118 | 2406 } |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2407 |
67743
3c879987313f
(xmenu_show): Call inhibit_garbage_collection.
Richard M. Stallman <rms@gnu.org>
parents:
67703
diff
changeset
|
2408 /* 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
|
2409 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
|
2410 contents of strings. */ |
3c879987313f
(xmenu_show): Call inhibit_garbage_collection.
Richard M. Stallman <rms@gnu.org>
parents:
67703
diff
changeset
|
2411 inhibit_garbage_collection (); |
3c879987313f
(xmenu_show): Call inhibit_garbage_collection.
Richard M. Stallman <rms@gnu.org>
parents:
67703
diff
changeset
|
2412 |
9572 | 2413 #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
|
2414 /* 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
|
2415 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
|
2416 y += FRAME_OUTER_TO_INNER_DIFF_Y (f); |
9572 | 2417 #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
|
2418 |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2419 /* 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
|
2420 x += f->left_pos; |
332134065648
Make (some) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50938
diff
changeset
|
2421 y += f->top_pos; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2422 |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2423 /* 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
|
2424 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
|
2425 while (i < menu_items_used) |
118 | 2426 { |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2427 if (EQ (XVECTOR (menu_items)->contents[i], Qt)) |
118 | 2428 { |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2429 /* 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
|
2430 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
|
2431 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
|
2432 |
58824
8da33d42472e
* xmenu.c (Fx_popup_menu): Correct documentation about position.
Jan Djärv <jan.h.d@swipnet.se>
parents:
58283
diff
changeset
|
2433 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
|
2434 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
|
2435 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
|
2436 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
|
2437 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
|
2438 ? "" : (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
|
2439 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
|
2440 pane_string++; |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2441 |
9608
1a85137cb257
Use FRAME_X_DISPLAY, not XDISPLAY or x_current_display.
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2442 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
|
2443 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
|
2444 { |
9608
1a85137cb257
Use FRAME_X_DISPLAY, not XDISPLAY or x_current_display.
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2445 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
|
2446 *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
|
2447 return Qnil; |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2448 } |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2449 i += MENU_ITEMS_PANE_LENGTH; |
6881
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2450 |
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2451 /* 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
|
2452 maxwidth = 0; |
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2453 j = i; |
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2454 while (j < menu_items_used) |
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2455 { |
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2456 Lisp_Object item; |
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2457 item = XVECTOR (menu_items)->contents[j]; |
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2458 if (EQ (item, Qt)) |
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2459 break; |
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2460 if (NILP (item)) |
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2461 { |
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2462 j++; |
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2463 continue; |
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2464 } |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
2465 width = SBYTES (item); |
6881
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2466 if (width > maxwidth) |
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2467 maxwidth = width; |
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2468 |
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2469 j += MENU_ITEMS_ITEM_LENGTH; |
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2470 } |
118 | 2471 } |
6746
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2472 /* Ignore a nil in the item list. |
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2473 It's meaningful only for dialog boxes. */ |
cda1ce7952ca
(Fx_popup_dialog): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6656
diff
changeset
|
2474 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
|
2475 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
|
2476 else |
118 | 2477 { |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2478 /* 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
|
2479 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
|
2480 unsigned char *item_data; |
27458
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2481 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
|
2482 |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2483 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
|
2484 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
|
2485 descrip |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2486 = 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
|
2487 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
|
2488 help_string = STRINGP (help) ? SDATA (help) : NULL; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2489 |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2490 if (!NILP (descrip)) |
6881
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2491 { |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
2492 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
|
2493 /* 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
|
2494 to reduce gc needs. */ |
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2495 item_data |
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2496 = (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
|
2497 + 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
|
2498 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
|
2499 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
|
2500 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
|
2501 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
|
2502 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
|
2503 SBYTES (descrip)); |
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
2504 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
|
2505 } |
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2506 else |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
2507 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
|
2508 |
9608
1a85137cb257
Use FRAME_X_DISPLAY, not XDISPLAY or x_current_display.
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2509 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
|
2510 menu, lpane, 0, item_data, |
27458
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2511 !NILP (enable), help_string) |
118 | 2512 == XM_FAILURE) |
2513 { | |
9608
1a85137cb257
Use FRAME_X_DISPLAY, not XDISPLAY or x_current_display.
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2514 XMenuDestroy (FRAME_X_DISPLAY (f), menu); |
118 | 2515 *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
|
2516 return Qnil; |
118 | 2517 } |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2518 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
|
2519 lines++; |
118 | 2520 } |
2521 } | |
6881
796416bd7f7e
(last_menu_bar_item_end): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
6764
diff
changeset
|
2522 |
58824
8da33d42472e
* xmenu.c (Fx_popup_menu): Correct documentation about position.
Jan Djärv <jan.h.d@swipnet.se>
parents:
58283
diff
changeset
|
2523 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
|
2524 |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2525 /* 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
|
2526 XMenuRecompute (FRAME_X_DISPLAY (f), menu); |
37255
ff709975abaf
(xmenu_show): Use FRAME_X_SCREEN_NUMBER.
Gerd Moellmann <gerd@gnu.org>
parents:
37211
diff
changeset
|
2527 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
|
2528 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
|
2529 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
|
2530 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
|
2531 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
|
2532 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
|
2533 XMenuLocate (FRAME_X_DISPLAY (f), menu, 0, 0, x, y, |
118 | 2534 &ulx, &uly, &width, &height); |
2535 if (ulx+width > dispwidth) | |
2536 { | |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2537 x -= (ulx + width) - dispwidth; |
118 | 2538 ulx = dispwidth - width; |
2539 } | |
2540 if (uly+height > dispheight) | |
2541 { | |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2542 y -= (uly + height) - dispheight; |
118 | 2543 uly = dispheight - height; |
2544 } | |
98035
611a022eaebb
(xmenu_show) [!HAVE_X_WINDOWS]: If frame has a minibuffer, don't let lower
Eli Zaretskii <eliz@gnu.org>
parents:
97645
diff
changeset
|
2545 #ifndef HAVE_X_WINDOWS |
611a022eaebb
(xmenu_show) [!HAVE_X_WINDOWS]: If frame has a minibuffer, don't let lower
Eli Zaretskii <eliz@gnu.org>
parents:
97645
diff
changeset
|
2546 if (FRAME_HAS_MINIBUF_P (f) && uly+height > dispheight - 1) |
611a022eaebb
(xmenu_show) [!HAVE_X_WINDOWS]: If frame has a minibuffer, don't let lower
Eli Zaretskii <eliz@gnu.org>
parents:
97645
diff
changeset
|
2547 { |
611a022eaebb
(xmenu_show) [!HAVE_X_WINDOWS]: If frame has a minibuffer, don't let lower
Eli Zaretskii <eliz@gnu.org>
parents:
97645
diff
changeset
|
2548 /* Move the menu away of the echo area, to avoid overwriting the |
611a022eaebb
(xmenu_show) [!HAVE_X_WINDOWS]: If frame has a minibuffer, don't let lower
Eli Zaretskii <eliz@gnu.org>
parents:
97645
diff
changeset
|
2549 menu with help echo messages or vice versa. */ |
611a022eaebb
(xmenu_show) [!HAVE_X_WINDOWS]: If frame has a minibuffer, don't let lower
Eli Zaretskii <eliz@gnu.org>
parents:
97645
diff
changeset
|
2550 if (BUFFERP (echo_area_buffer[0]) && WINDOWP (echo_area_window)) |
611a022eaebb
(xmenu_show) [!HAVE_X_WINDOWS]: If frame has a minibuffer, don't let lower
Eli Zaretskii <eliz@gnu.org>
parents:
97645
diff
changeset
|
2551 { |
611a022eaebb
(xmenu_show) [!HAVE_X_WINDOWS]: If frame has a minibuffer, don't let lower
Eli Zaretskii <eliz@gnu.org>
parents:
97645
diff
changeset
|
2552 y -= WINDOW_TOTAL_LINES (XWINDOW (echo_area_window)); |
611a022eaebb
(xmenu_show) [!HAVE_X_WINDOWS]: If frame has a minibuffer, don't let lower
Eli Zaretskii <eliz@gnu.org>
parents:
97645
diff
changeset
|
2553 uly -= WINDOW_TOTAL_LINES (XWINDOW (echo_area_window)); |
611a022eaebb
(xmenu_show) [!HAVE_X_WINDOWS]: If frame has a minibuffer, don't let lower
Eli Zaretskii <eliz@gnu.org>
parents:
97645
diff
changeset
|
2554 } |
611a022eaebb
(xmenu_show) [!HAVE_X_WINDOWS]: If frame has a minibuffer, don't let lower
Eli Zaretskii <eliz@gnu.org>
parents:
97645
diff
changeset
|
2555 else |
611a022eaebb
(xmenu_show) [!HAVE_X_WINDOWS]: If frame has a minibuffer, don't let lower
Eli Zaretskii <eliz@gnu.org>
parents:
97645
diff
changeset
|
2556 { |
611a022eaebb
(xmenu_show) [!HAVE_X_WINDOWS]: If frame has a minibuffer, don't let lower
Eli Zaretskii <eliz@gnu.org>
parents:
97645
diff
changeset
|
2557 y--; |
611a022eaebb
(xmenu_show) [!HAVE_X_WINDOWS]: If frame has a minibuffer, don't let lower
Eli Zaretskii <eliz@gnu.org>
parents:
97645
diff
changeset
|
2558 uly--; |
611a022eaebb
(xmenu_show) [!HAVE_X_WINDOWS]: If frame has a minibuffer, don't let lower
Eli Zaretskii <eliz@gnu.org>
parents:
97645
diff
changeset
|
2559 } |
611a022eaebb
(xmenu_show) [!HAVE_X_WINDOWS]: If frame has a minibuffer, don't let lower
Eli Zaretskii <eliz@gnu.org>
parents:
97645
diff
changeset
|
2560 } |
611a022eaebb
(xmenu_show) [!HAVE_X_WINDOWS]: If frame has a minibuffer, don't let lower
Eli Zaretskii <eliz@gnu.org>
parents:
97645
diff
changeset
|
2561 #endif |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2562 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
|
2563 if (uly < 0) y -= uly; |
6526
95661fd7a320
(xmenu_show): Enable asynchronous events.
Karl Heuer <kwzh@gnu.org>
parents:
6481
diff
changeset
|
2564 |
58824
8da33d42472e
* xmenu.c (Fx_popup_menu): Correct documentation about position.
Jan Djärv <jan.h.d@swipnet.se>
parents:
58283
diff
changeset
|
2565 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
|
2566 { |
8da33d42472e
* xmenu.c (Fx_popup_menu): Correct documentation about position.
Jan Djärv <jan.h.d@swipnet.se>
parents:
58283
diff
changeset
|
2567 /* 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
|
2568 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
|
2569 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
|
2570 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
|
2571 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
|
2572 } |
8da33d42472e
* xmenu.c (Fx_popup_menu): Correct documentation about position.
Jan Djärv <jan.h.d@swipnet.se>
parents:
58283
diff
changeset
|
2573 |
6526
95661fd7a320
(xmenu_show): Enable asynchronous events.
Karl Heuer <kwzh@gnu.org>
parents:
6481
diff
changeset
|
2574 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
|
2575 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
|
2576 pane = selidx = 0; |
27458
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2577 |
58168
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
2578 #ifndef MSDOS |
ab22e6ae6fac
* xmenu.c (x_menu_wait_for_event): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents:
57965
diff
changeset
|
2579 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
|
2580 #endif |
61619
489414dfb069
Remove eol whitespace; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
60890
diff
changeset
|
2581 |
58215
8f529503ae83
* xmenu.c (pop_down_menu): Remove global variable current_menu,
Jan Djärv <jan.h.d@swipnet.se>
parents:
58202
diff
changeset
|
2582 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
|
2583 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
|
2584 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
|
2585 |
27458
2bfd43d89c8e
(xmenu_show) [!USE_X_TOOLKIT]: Pass help to
Gerd Moellmann <gerd@gnu.org>
parents:
27425
diff
changeset
|
2586 /* 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
|
2587 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
|
2588 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
|
2589 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
|
2590 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
|
2591 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
|
2592 |
118 | 2593 switch (status) |
2594 { | |
2595 case XM_SUCCESS: | |
2596 #ifdef XDEBUG | |
2597 fprintf (stderr, "pane= %d line = %d\n", panes, selidx); | |
2598 #endif | |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2599 |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2600 /* 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
|
2601 i = 0; |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2602 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
|
2603 { |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2604 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
|
2605 { |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2606 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
|
2607 pane_prefix |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2608 = 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
|
2609 pane--; |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2610 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
|
2611 } |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2612 else |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2613 { |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2614 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
|
2615 { |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2616 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
|
2617 { |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2618 entry |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2619 = 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
|
2620 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
|
2621 { |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2622 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
|
2623 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
|
2624 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
|
2625 } |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2626 break; |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2627 } |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2628 selidx--; |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2629 } |
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2630 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
|
2631 } |
2747
f258c79c9162
(Fx_popup_menu): Add a vector of prefix keys for the panes.
Richard M. Stallman <rms@gnu.org>
parents:
2514
diff
changeset
|
2632 } |
118 | 2633 break; |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2634 |
118 | 2635 case XM_FAILURE: |
2636 *error = "Can't activate menu"; | |
2637 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
|
2638 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
|
2639 break; |
118 | 2640 case XM_NO_SELECT: |
61984
2ce055c7db65
[not HAVE_X_TOOLKIT] (xmenu_show):
Richard M. Stallman <rms@gnu.org>
parents:
61620
diff
changeset
|
2641 /* 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
|
2642 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
|
2643 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
|
2644 Fsignal (Qquit, Qnil); |
118 | 2645 entry = Qnil; |
2646 break; | |
2647 } | |
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
|
2648 |
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
|
2649 unbind_to (specpdl_count, Qnil); |
7208
2d3c771ff861
(xdialog_show): Clear x_mouse_grabbed.
Richard M. Stallman <rms@gnu.org>
parents:
7175
diff
changeset
|
2650 |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2651 return entry; |
118 | 2652 } |
9233
746cc6b0d28f
(widget_id_tick): Renamed from popup_id_tick.
Paul Reilly <pmr@pajato.com>
parents:
9102
diff
changeset
|
2653 |
5673
7035bc81858b
Find lwlib.h and xlwmenuP.h in ../lwlib.
Richard M. Stallman <rms@gnu.org>
parents:
5602
diff
changeset
|
2654 #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
|
2655 |
9f9c4d4581e4
Put most of file into HAVE_MENUS conditional.
Richard M. Stallman <rms@gnu.org>
parents:
14553
diff
changeset
|
2656 #endif /* HAVE_MENUS */ |
73788
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73715
diff
changeset
|
2657 |
73941
b662c7bb9e5f
(popup_activated): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73788
diff
changeset
|
2658 /* 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
|
2659 |
b662c7bb9e5f
(popup_activated): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73788
diff
changeset
|
2660 int |
b662c7bb9e5f
(popup_activated): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73788
diff
changeset
|
2661 popup_activated () |
b662c7bb9e5f
(popup_activated): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73788
diff
changeset
|
2662 { |
b662c7bb9e5f
(popup_activated): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73788
diff
changeset
|
2663 return popup_activated_flag; |
b662c7bb9e5f
(popup_activated): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73788
diff
changeset
|
2664 } |
73788
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73715
diff
changeset
|
2665 |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73715
diff
changeset
|
2666 /* 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
|
2667 |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73715
diff
changeset
|
2668 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
|
2669 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
|
2670 () |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73715
diff
changeset
|
2671 { |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73715
diff
changeset
|
2672 #ifdef HAVE_MENUS |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73715
diff
changeset
|
2673 return (popup_activated ()) ? Qt : Qnil; |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73715
diff
changeset
|
2674 #else |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73715
diff
changeset
|
2675 return Qnil; |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73715
diff
changeset
|
2676 #endif /* HAVE_MENUS */ |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73715
diff
changeset
|
2677 } |
6058
662b9cd767fe
(Fx_popup_menu): Allow t as position, meaning use mouse pos.
Richard M. Stallman <rms@gnu.org>
parents:
6018
diff
changeset
|
2678 |
21514 | 2679 void |
118 | 2680 syms_of_xmenu () |
2681 { | |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105693
diff
changeset
|
2682 Qdebug_on_next_call = intern_c_string ("debug-on-next-call"); |
12625
e2831d2f5b09
(syms_of_xmenu): Set up Qdebug_on_next_call.
Richard M. Stallman <rms@gnu.org>
parents:
12432
diff
changeset
|
2683 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
|
2684 |
9336
d5ffd9c9edb0
(widget_id_tick): Move definition into conditional.
Richard M. Stallman <rms@gnu.org>
parents:
9236
diff
changeset
|
2685 #ifdef USE_X_TOOLKIT |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49322
diff
changeset
|
2686 widget_id_tick = (1<<16); |
12661 | 2687 next_menubar_widget_id = 1; |
9336
d5ffd9c9edb0
(widget_id_tick): Move definition into conditional.
Richard M. Stallman <rms@gnu.org>
parents:
9236
diff
changeset
|
2688 #endif |
d5ffd9c9edb0
(widget_id_tick): Move definition into conditional.
Richard M. Stallman <rms@gnu.org>
parents:
9236
diff
changeset
|
2689 |
73697
54a6e7ed953c
(Fmenu_or_popup_active_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
73662
diff
changeset
|
2690 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
|
2691 |
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
|
2692 #if defined (USE_GTK) || defined (USE_X_TOOLKIT) |
83542 | 2693 defsubr (&Sx_menu_bar_open_internal); |
105877
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105693
diff
changeset
|
2694 Ffset (intern_c_string ("accelerate-menu"), |
21bdda3ded62
* xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
105693
diff
changeset
|
2695 intern_c_string (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
|
2696 #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
|
2697 |
14741
9f9c4d4581e4
Put most of file into HAVE_MENUS conditional.
Richard M. Stallman <rms@gnu.org>
parents:
14553
diff
changeset
|
2698 #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
|
2699 defsubr (&Sx_popup_dialog); |
14741
9f9c4d4581e4
Put most of file into HAVE_MENUS conditional.
Richard M. Stallman <rms@gnu.org>
parents:
14553
diff
changeset
|
2700 #endif |
118 | 2701 } |
52401 | 2702 |
2703 /* arch-tag: 92ea573c-398e-496e-ac73-2436f7d63242 | |
2704 (do not change this comment) */ |