annotate src/xmenu.c @ 106057:385ba537122c

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