annotate src/xmenu.c @ 97198:cf43f4e3ecc8

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