Mercurial > emacs
annotate src/w32menu.c @ 95412:f8723a1032ed
(calendar-dedicate-diary): Update for diary-display-function replacing
diary-display-hook.
author | Glenn Morris <rgm@gnu.org> |
---|---|
date | Fri, 30 May 2008 02:58:01 +0000 |
parents | 8971ddf55736 |
children | f8644ed7e357 |
rev | line source |
---|---|
16884
36babc489b0c
Change all uses of win95, winnt, and win32
Geoff Voelker <voelker@cs.washington.edu>
parents:
16860
diff
changeset
|
1 /* Menu support for GNU Emacs on the Microsoft W32 API. |
75227
e90d04cd455a
Update copyright for years from Emacs 21 to present (mainly adding
Glenn Morris <rgm@gnu.org>
parents:
73788
diff
changeset
|
2 Copyright (C) 1986, 1988, 1993, 1994, 1996, 1998, 1999, 2001, 2002, |
79759 | 3 2003, 2004, 2005, 2006, 2007, 2008 |
4 Free Software Foundation, Inc. | |
13434 | 5 |
6 This file is part of GNU Emacs. | |
7 | |
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93979
diff
changeset
|
8 GNU Emacs is free software: you can redistribute it and/or modify |
13434 | 9 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:
93979
diff
changeset
|
10 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:
93979
diff
changeset
|
11 (at your option) any later version. |
13434 | 12 |
13 GNU Emacs is distributed in the hope that it will be useful, | |
14 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 GNU General Public License for more details. | |
17 | |
18 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:
93979
diff
changeset
|
19 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ |
13434 | 20 |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25646
diff
changeset
|
21 #include <config.h> |
83572
244d6216c056
(Fx_popup_menu): Use terminal specific mouse_position_hook.
Jason Rumney <jasonr@gnu.org>
parents:
76086
diff
changeset
|
22 |
13434 | 23 #include <signal.h> |
24 #include <stdio.h> | |
78015
cf89ff54912e
(add_menu_item): Escape `&' characters in menu items and their keybindings.
Eli Zaretskii <eliz@gnu.org>
parents:
76086
diff
changeset
|
25 #include <mbstring.h> |
83572
244d6216c056
(Fx_popup_menu): Use terminal specific mouse_position_hook.
Jason Rumney <jasonr@gnu.org>
parents:
76086
diff
changeset
|
26 |
13434 | 27 #include "lisp.h" |
31114
cd392fdf0e9f
Include keyboard.h before frame.h. Fix compile
Andrew Innes <andrewi@gnu.org>
parents:
30989
diff
changeset
|
28 #include "keyboard.h" |
39690
38c1890338cc
(keymap_panes, Fx_popup_menu): Use Fkeymap_prompt.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
29 #include "keymap.h" |
13434 | 30 #include "frame.h" |
83572
244d6216c056
(Fx_popup_menu): Use terminal specific mouse_position_hook.
Jason Rumney <jasonr@gnu.org>
parents:
76086
diff
changeset
|
31 #include "termhooks.h" |
13434 | 32 #include "window.h" |
33 #include "blockinput.h" | |
15276 | 34 #include "buffer.h" |
29320
33aa00975055
(single_submenu, w32_menu_show): Call ENCODE_SYSTEM on menu strings.
Jason Rumney <jasonr@gnu.org>
parents:
28275
diff
changeset
|
35 #include "charset.h" |
90928 | 36 #include "character.h" |
29320
33aa00975055
(single_submenu, w32_menu_show): Call ENCODE_SYSTEM on menu strings.
Jason Rumney <jasonr@gnu.org>
parents:
28275
diff
changeset
|
37 #include "coding.h" |
13434 | 38 |
39 /* This may include sys/types.h, and that somehow loses | |
40 if this is not done before the other system files. */ | |
41 #include "w32term.h" | |
42 | |
43 /* Load sys/types.h if not already loaded. | |
44 In some systems loading it twice is suicidal. */ | |
45 #ifndef makedev | |
46 #include <sys/types.h> | |
47 #endif | |
48 | |
49 #include "dispextern.h" | |
50 | |
33971
c33b80a45f6a
(add_menu_item): Reset menu item text when changing type to radio button.
Jason Rumney <jasonr@gnu.org>
parents:
32988
diff
changeset
|
51 #undef HAVE_DIALOGS /* TODO: Implement native dialogs. */ |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
52 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
53 /******************************************************************/ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
54 /* Definitions copied from lwlib.h */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
55 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
56 typedef void * XtPointer; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
57 typedef char Boolean; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
58 |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
59 enum button_type |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
60 { |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
61 BUTTON_TYPE_NONE, |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
62 BUTTON_TYPE_TOGGLE, |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
63 BUTTON_TYPE_RADIO |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
64 }; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
65 |
41908
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
66 /* This structure is based on the one in ../lwlib/lwlib.h, modified |
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
67 for Windows. */ |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
68 typedef struct _widget_value |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
69 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
70 /* name of widget */ |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
71 Lisp_Object lname; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
72 char* name; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
73 /* value (meaning depend on widget type) */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
74 char* value; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
75 /* keyboard equivalent. no implications for XtTranslations */ |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
76 Lisp_Object lkey; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
77 char* key; |
41908
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
78 /* Help string or nil if none. |
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
79 GC finds this string through the frame's menu_bar_vector |
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
80 or through menu_items. */ |
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
81 Lisp_Object help; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
82 /* true if enabled */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
83 Boolean enabled; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
84 /* true if selected */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
85 Boolean selected; |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
86 /* The type of a button. */ |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
87 enum button_type button_type; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
88 /* true if menu title */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
89 Boolean title; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
90 #if 0 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
91 /* true if was edited (maintained by get_value) */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
92 Boolean edited; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
93 /* true if has changed (maintained by lw library) */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
94 change_type change; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
95 /* true if this widget itself has changed, |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
96 but not counting the other widgets found in the `next' field. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
97 change_type this_one_change; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
98 #endif |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
99 /* Contents of the sub-widgets, also selected slot for checkbox */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
100 struct _widget_value* contents; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
101 /* data passed to callback */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
102 XtPointer call_data; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
103 /* next one in the list */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
104 struct _widget_value* next; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
105 #if 0 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
106 /* slot for the toolkit dependent part. Always initialize to NULL. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
107 void* toolkit_data; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
108 /* tell us if we should free the toolkit data slot when freeing the |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
109 widget_value itself. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
110 Boolean free_toolkit_data; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
111 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
112 /* we resource the widget_value structures; this points to the next |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
113 one on the free list if this one has been deallocated. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
114 */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
115 struct _widget_value *free_list; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
116 #endif |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
117 } widget_value; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
118 |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
119 /* Local memory management */ |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
120 #define local_heap (GetProcessHeap ()) |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
121 #define local_alloc(n) (HeapAlloc (local_heap, HEAP_ZERO_MEMORY, (n))) |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
122 #define local_free(p) (HeapFree (local_heap, 0, ((LPVOID) (p)))) |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
123 |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
124 #define malloc_widget_value() ((widget_value *) local_alloc (sizeof (widget_value))) |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
125 #define free_widget_value(wv) (local_free ((wv))) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
126 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
127 /******************************************************************/ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
128 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
129 #ifndef TRUE |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
130 #define TRUE 1 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
131 #define FALSE 0 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
132 #endif /* no TRUE */ |
13434 | 133 |
76074
5978a80d504e
(current_popup_menu): Make available globally.
Jason Rumney <jasonr@gnu.org>
parents:
75227
diff
changeset
|
134 HMENU current_popup_menu; |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
135 |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46815
diff
changeset
|
136 void syms_of_w32menu (); |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48375
diff
changeset
|
137 void globals_of_w32menu (); |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46815
diff
changeset
|
138 |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46815
diff
changeset
|
139 typedef BOOL (WINAPI * GetMenuItemInfoA_Proc) ( |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46815
diff
changeset
|
140 IN HMENU, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46815
diff
changeset
|
141 IN UINT, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46815
diff
changeset
|
142 IN BOOL, |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
143 IN OUT LPMENUITEMINFOA); |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46815
diff
changeset
|
144 typedef BOOL (WINAPI * SetMenuItemInfoA_Proc) ( |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46815
diff
changeset
|
145 IN HMENU, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46815
diff
changeset
|
146 IN UINT, |
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46815
diff
changeset
|
147 IN BOOL, |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
148 IN LPCMENUITEMINFOA); |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46815
diff
changeset
|
149 |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
150 GetMenuItemInfoA_Proc get_menu_item_info = NULL; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
151 SetMenuItemInfoA_Proc set_menu_item_info = NULL; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
152 AppendMenuW_Proc unicode_append_menu = NULL; |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
153 |
72773
15d914de92fd
* src/macmenu.c (Vmenu_updating_frame, syms_of_xmenu):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
72260
diff
changeset
|
154 Lisp_Object Qdebug_on_next_call; |
21612
24a01af0cd38
(Vmenu_updating_frame): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21450
diff
changeset
|
155 |
72773
15d914de92fd
* src/macmenu.c (Vmenu_updating_frame, syms_of_xmenu):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
72260
diff
changeset
|
156 extern Lisp_Object Vmenu_updating_frame; |
15276 | 157 |
13434 | 158 extern Lisp_Object Qmenu_bar; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
159 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
160 extern Lisp_Object QCtoggle, QCradio; |
13434 | 161 |
15276 | 162 extern Lisp_Object Voverriding_local_map; |
163 extern Lisp_Object Voverriding_local_map_menu_flag; | |
164 | |
165 extern Lisp_Object Qoverriding_local_map, Qoverriding_terminal_local_map; | |
166 | |
167 extern Lisp_Object Qmenu_bar_update_hook; | |
168 | |
93979
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
169 void set_frame_menubar P_ ((FRAME_PTR, int, int)); |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
170 |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
171 static void push_menu_item P_ ((Lisp_Object, Lisp_Object, Lisp_Object, |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
172 Lisp_Object, Lisp_Object, Lisp_Object, |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
173 Lisp_Object, Lisp_Object)); |
41637
d797ce338b4b
(add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents:
41251
diff
changeset
|
174 #ifdef HAVE_DIALOGS |
93979
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
175 static Lisp_Object w32_dialog_show P_ ((FRAME_PTR, int, Lisp_Object, char**)); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
176 #else |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
177 static int is_simple_dialog P_ ((Lisp_Object)); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
178 static Lisp_Object simple_dialog_show P_ ((FRAME_PTR, Lisp_Object, Lisp_Object)); |
41637
d797ce338b4b
(add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents:
41251
diff
changeset
|
179 #endif |
93979
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
180 static Lisp_Object w32_menu_show P_ ((FRAME_PTR, int, int, int, int, |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
181 Lisp_Object, char **)); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
182 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
183 static void keymap_panes P_ ((Lisp_Object *, int, int)); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
184 static void single_keymap_panes P_ ((Lisp_Object, Lisp_Object, Lisp_Object, |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
185 int, int)); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
186 static void single_menu_item P_ ((Lisp_Object, Lisp_Object, |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
187 Lisp_Object *, int, int)); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
188 static void list_of_panes P_ ((Lisp_Object)); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
189 static void list_of_items P_ ((Lisp_Object)); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
190 void w32_free_menu_strings P_((HWND)); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
191 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
192 /* This holds a Lisp vector that holds the results of decoding |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
193 the keymaps or alist-of-alists that specify a menu. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
194 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
195 It describes the panes and items within the panes. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
196 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
197 Each pane is described by 3 elements in the vector: |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
198 t, the pane name, the pane's prefix key. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
199 Then follow the pane's items, with 5 elements per item: |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
200 the item string, the enable flag, the item's value, |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
201 the definition, and the equivalent keyboard key's description string. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
202 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
203 In some cases, multiple levels of menus may be described. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
204 A single vector slot containing nil indicates the start of a submenu. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
205 A single vector slot containing lambda indicates the end of a submenu. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
206 The submenu follows a menu item which is the way to reach the submenu. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
207 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
208 A single vector slot containing quote indicates that the |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
209 following items should appear on the right of a dialog box. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
210 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
211 Using a Lisp vector to hold this information while we decode it |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
212 takes care of protecting all the data from GC. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
213 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
214 #define MENU_ITEMS_PANE_NAME 1 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
215 #define MENU_ITEMS_PANE_PREFIX 2 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
216 #define MENU_ITEMS_PANE_LENGTH 3 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
217 |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
218 enum menu_item_idx |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
219 { |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
220 MENU_ITEMS_ITEM_NAME = 0, |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
221 MENU_ITEMS_ITEM_ENABLE, |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
222 MENU_ITEMS_ITEM_VALUE, |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
223 MENU_ITEMS_ITEM_EQUIV_KEY, |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
224 MENU_ITEMS_ITEM_DEFINITION, |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
225 MENU_ITEMS_ITEM_TYPE, |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
226 MENU_ITEMS_ITEM_SELECTED, |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
227 MENU_ITEMS_ITEM_HELP, |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
228 MENU_ITEMS_ITEM_LENGTH |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
229 }; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
230 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
231 static Lisp_Object menu_items; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
232 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
233 /* Number of slots currently allocated in menu_items. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
234 static int menu_items_allocated; |
13434 | 235 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
236 /* This is the index in menu_items of the first empty slot. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
237 static int menu_items_used; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
238 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
239 /* The number of panes currently recorded in menu_items, |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
240 excluding those within submenus. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
241 static int menu_items_n_panes; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
242 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
243 /* Current depth within submenus. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
244 static int menu_items_submenu_depth; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
245 |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
246 static int next_menubar_widget_id; |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
247 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
248 /* This is set nonzero after the user activates the menu bar, and set |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
249 to zero again after the menu bars are redisplayed by prepare_menu_bar. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
250 While it is nonzero, all calls to set_frame_menubar go deep. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
251 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
252 I don't understand why this is needed, but it does seem to be |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
253 needed on Motif, according to Marcus Daniels <marcus@sysc.pdx.edu>. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
254 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
255 int pending_menu_activation; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
256 |
13434 | 257 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
258 /* Return the frame whose ->output_data.w32->menubar_widget equals |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
259 ID, or 0 if none. */ |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
260 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
261 static struct frame * |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
262 menubar_id_to_frame (id) |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
263 HMENU id; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
264 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
265 Lisp_Object tail, frame; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
266 FRAME_PTR f; |
13434 | 267 |
90970
3371fc48749b
Replace uses of GC_* macros with the non-GC_ versions.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
90951
diff
changeset
|
268 for (tail = Vframe_list; CONSP (tail); tail = XCDR (tail)) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
269 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
22750
diff
changeset
|
270 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
|
271 if (!FRAMEP (frame)) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
272 continue; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
273 f = XFRAME (frame); |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
274 if (!FRAME_WINDOW_P (f)) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
275 continue; |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
276 if (f->output_data.w32->menubar_widget == id) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
277 return f; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
278 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
279 return 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
280 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
281 |
13434 | 282 /* Initialize the menu_items structure if we haven't already done so. |
283 Also mark it as currently empty. */ | |
284 | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
285 static void |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
286 init_menu_items () |
13434 | 287 { |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
288 if (NILP (menu_items)) |
13434 | 289 { |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
290 menu_items_allocated = 60; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
291 menu_items = Fmake_vector (make_number (menu_items_allocated), Qnil); |
13434 | 292 } |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
293 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
294 menu_items_used = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
295 menu_items_n_panes = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
296 menu_items_submenu_depth = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
297 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
298 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
299 /* Call at the end of generating the data in menu_items. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
300 This fills in the number of items in the last pane. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
301 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
302 static void |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
303 finish_menu_items () |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
304 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
305 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
306 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
307 /* Call when finished using the data for the current menu |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
308 in menu_items. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
309 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
310 static void |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
311 discard_menu_items () |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
312 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
313 /* Free the structure if it is especially large. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
314 Otherwise, hold on to it, to save time. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
315 if (menu_items_allocated > 200) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
316 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
317 menu_items = Qnil; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
318 menu_items_allocated = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
319 } |
13434 | 320 } |
321 | |
322 /* Make the menu_items vector twice as large. */ | |
323 | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
324 static void |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
325 grow_menu_items () |
13434 | 326 { |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
327 menu_items_allocated *= 2; |
85247
205db480c6db
(grow_menu_items): Use larger_vector.
Eli Zaretskii <eliz@gnu.org>
parents:
83648
diff
changeset
|
328 menu_items = larger_vector (menu_items, menu_items_allocated, Qnil); |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
329 } |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
330 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
331 /* Begin a submenu. */ |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
332 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
333 static void |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
334 push_submenu_start () |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
335 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
336 if (menu_items_used + 1 > menu_items_allocated) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
337 grow_menu_items (); |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
338 |
91773
5560603238a5
(push_submenu_start, push_submenu_end, push_left_right_boundary, push_menu_pane,
Juanma Barranquero <lekktu@gmail.com>
parents:
91327
diff
changeset
|
339 ASET (menu_items, menu_items_used, Qnil); |
5560603238a5
(push_submenu_start, push_submenu_end, push_left_right_boundary, push_menu_pane,
Juanma Barranquero <lekktu@gmail.com>
parents:
91327
diff
changeset
|
340 menu_items_used++; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
341 menu_items_submenu_depth++; |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
342 } |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
343 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
344 /* End a submenu. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
345 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
346 static void |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
347 push_submenu_end () |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
348 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
349 if (menu_items_used + 1 > menu_items_allocated) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
350 grow_menu_items (); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
351 |
91773
5560603238a5
(push_submenu_start, push_submenu_end, push_left_right_boundary, push_menu_pane,
Juanma Barranquero <lekktu@gmail.com>
parents:
91327
diff
changeset
|
352 ASET (menu_items, menu_items_used, Qlambda); |
5560603238a5
(push_submenu_start, push_submenu_end, push_left_right_boundary, push_menu_pane,
Juanma Barranquero <lekktu@gmail.com>
parents:
91327
diff
changeset
|
353 menu_items_used++; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
354 menu_items_submenu_depth--; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
355 } |
13434 | 356 |
357 /* Indicate boundary between left and right. */ | |
358 | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
359 static void |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
360 push_left_right_boundary () |
13434 | 361 { |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
362 if (menu_items_used + 1 > menu_items_allocated) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
363 grow_menu_items (); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
364 |
91773
5560603238a5
(push_submenu_start, push_submenu_end, push_left_right_boundary, push_menu_pane,
Juanma Barranquero <lekktu@gmail.com>
parents:
91327
diff
changeset
|
365 ASET (menu_items, menu_items_used, Qquote); |
5560603238a5
(push_submenu_start, push_submenu_end, push_left_right_boundary, push_menu_pane,
Juanma Barranquero <lekktu@gmail.com>
parents:
91327
diff
changeset
|
366 menu_items_used++; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
367 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
368 |
41251
e6612d08452f
(w32_menu_show, push_menu_pane): Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
41108
diff
changeset
|
369 /* Start a new menu pane in menu_items. |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
370 NAME is the pane name. PREFIX_VEC is a prefix key for this pane. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
371 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
372 static void |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
373 push_menu_pane (name, prefix_vec) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
374 Lisp_Object name, prefix_vec; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
375 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
376 if (menu_items_used + MENU_ITEMS_PANE_LENGTH > menu_items_allocated) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
377 grow_menu_items (); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
378 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
379 if (menu_items_submenu_depth == 0) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
380 menu_items_n_panes++; |
91773
5560603238a5
(push_submenu_start, push_submenu_end, push_left_right_boundary, push_menu_pane,
Juanma Barranquero <lekktu@gmail.com>
parents:
91327
diff
changeset
|
381 ASET (menu_items, menu_items_used, Qt); menu_items_used++; |
5560603238a5
(push_submenu_start, push_submenu_end, push_left_right_boundary, push_menu_pane,
Juanma Barranquero <lekktu@gmail.com>
parents:
91327
diff
changeset
|
382 ASET (menu_items, menu_items_used, name); menu_items_used++; |
5560603238a5
(push_submenu_start, push_submenu_end, push_left_right_boundary, push_menu_pane,
Juanma Barranquero <lekktu@gmail.com>
parents:
91327
diff
changeset
|
383 ASET (menu_items, menu_items_used, prefix_vec); menu_items_used++; |
13434 | 384 } |
385 | |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
386 /* Push one menu item into the current pane. NAME is the string to |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
387 display. ENABLE if non-nil means this item can be selected. KEY |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
388 is the key generated by choosing this item, or nil if this item |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
389 doesn't really have a definition. DEF is the definition of this |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
390 item. EQUIV is the textual description of the keyboard equivalent |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
391 for this item (or nil if none). TYPE is the type of this menu |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
392 item, one of nil, `toggle' or `radio'. */ |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
393 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
394 static void |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
395 push_menu_item (name, enable, key, def, equiv, type, selected, help) |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
396 Lisp_Object name, enable, key, def, equiv, type, selected, help; |
13434 | 397 { |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
398 if (menu_items_used + MENU_ITEMS_ITEM_LENGTH > menu_items_allocated) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
399 grow_menu_items (); |
13434 | 400 |
91773
5560603238a5
(push_submenu_start, push_submenu_end, push_left_right_boundary, push_menu_pane,
Juanma Barranquero <lekktu@gmail.com>
parents:
91327
diff
changeset
|
401 ASET (menu_items, menu_items_used, name); menu_items_used++; |
5560603238a5
(push_submenu_start, push_submenu_end, push_left_right_boundary, push_menu_pane,
Juanma Barranquero <lekktu@gmail.com>
parents:
91327
diff
changeset
|
402 ASET (menu_items, menu_items_used, enable); menu_items_used++; |
5560603238a5
(push_submenu_start, push_submenu_end, push_left_right_boundary, push_menu_pane,
Juanma Barranquero <lekktu@gmail.com>
parents:
91327
diff
changeset
|
403 ASET (menu_items, menu_items_used, key); menu_items_used++; |
5560603238a5
(push_submenu_start, push_submenu_end, push_left_right_boundary, push_menu_pane,
Juanma Barranquero <lekktu@gmail.com>
parents:
91327
diff
changeset
|
404 ASET (menu_items, menu_items_used, equiv); menu_items_used++; |
5560603238a5
(push_submenu_start, push_submenu_end, push_left_right_boundary, push_menu_pane,
Juanma Barranquero <lekktu@gmail.com>
parents:
91327
diff
changeset
|
405 ASET (menu_items, menu_items_used, def); menu_items_used++; |
5560603238a5
(push_submenu_start, push_submenu_end, push_left_right_boundary, push_menu_pane,
Juanma Barranquero <lekktu@gmail.com>
parents:
91327
diff
changeset
|
406 ASET (menu_items, menu_items_used, type); menu_items_used++; |
5560603238a5
(push_submenu_start, push_submenu_end, push_left_right_boundary, push_menu_pane,
Juanma Barranquero <lekktu@gmail.com>
parents:
91327
diff
changeset
|
407 ASET (menu_items, menu_items_used, selected); menu_items_used++; |
5560603238a5
(push_submenu_start, push_submenu_end, push_left_right_boundary, push_menu_pane,
Juanma Barranquero <lekktu@gmail.com>
parents:
91327
diff
changeset
|
408 ASET (menu_items, menu_items_used, help); menu_items_used++; |
13434 | 409 } |
410 | |
411 /* Look through KEYMAPS, a vector of keymaps that is NMAPS long, | |
412 and generate menu panes for them in menu_items. | |
413 If NOTREAL is nonzero, | |
414 don't bother really computing whether an item is enabled. */ | |
415 | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
416 static void |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
417 keymap_panes (keymaps, nmaps, notreal) |
13434 | 418 Lisp_Object *keymaps; |
419 int nmaps; | |
420 int notreal; | |
421 { | |
422 int mapno; | |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
423 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
424 init_menu_items (); |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
425 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
426 /* Loop over the given keymaps, making a pane for each map. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
427 But don't make a pane that is empty--ignore that map instead. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
428 P is the number of panes we have made so far. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
429 for (mapno = 0; mapno < nmaps; mapno++) |
30989
2152817050ff
(keymap_panes): Pass the keymap's prompt as the pane name to
Jason Rumney <jasonr@gnu.org>
parents:
30238
diff
changeset
|
430 single_keymap_panes (keymaps[mapno], |
39690
38c1890338cc
(keymap_panes, Fx_popup_menu): Use Fkeymap_prompt.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
431 Fkeymap_prompt (keymaps[mapno]), Qnil, notreal, 10); |
13434 | 432 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
433 finish_menu_items (); |
13434 | 434 } |
435 | |
436 /* This is a recursive subroutine of keymap_panes. | |
437 It handles one keymap, KEYMAP. | |
438 The other arguments are passed along | |
439 or point to local variables of the previous function. | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
440 If NOTREAL is nonzero, only check for equivalent key bindings, don't |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
441 evaluate expressions in menu items and don't make any menu. |
13434 | 442 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
443 If we encounter submenus deeper than MAXDEPTH levels, ignore them. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
444 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
445 static void |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
446 single_keymap_panes (keymap, pane_name, prefix, notreal, maxdepth) |
13434 | 447 Lisp_Object keymap; |
448 Lisp_Object pane_name; | |
449 Lisp_Object prefix; | |
450 int notreal; | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
451 int maxdepth; |
13434 | 452 { |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
453 Lisp_Object pending_maps = Qnil; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
454 Lisp_Object tail, item; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
455 struct gcpro gcpro1, gcpro2; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
456 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
457 if (maxdepth <= 0) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
458 return; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
459 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
460 push_menu_pane (pane_name, prefix); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
461 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
22750
diff
changeset
|
462 for (tail = keymap; CONSP (tail); tail = XCDR (tail)) |
13434 | 463 { |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
464 GCPRO2 (keymap, pending_maps); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
465 /* Look at each key binding, and if it is a menu item add it |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
466 to this menu. */ |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
22750
diff
changeset
|
467 item = XCAR (tail); |
13434 | 468 if (CONSP (item)) |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
22750
diff
changeset
|
469 single_menu_item (XCAR (item), XCDR (item), |
27932
a590f8d0dbd2
[HAVE_BOXES]: Remove #undef.
Jason Rumney <jasonr@gnu.org>
parents:
27896
diff
changeset
|
470 &pending_maps, notreal, maxdepth); |
13434 | 471 else if (VECTORP (item)) |
472 { | |
473 /* Loop over the char values represented in the vector. */ | |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
474 int len = ASIZE (item); |
13434 | 475 int c; |
476 for (c = 0; c < len; c++) | |
477 { | |
478 Lisp_Object character; | |
479 XSETFASTINT (character, c); | |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
480 single_menu_item (character, AREF (item, c), |
27932
a590f8d0dbd2
[HAVE_BOXES]: Remove #undef.
Jason Rumney <jasonr@gnu.org>
parents:
27896
diff
changeset
|
481 &pending_maps, notreal, maxdepth); |
13434 | 482 } |
483 } | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
484 UNGCPRO; |
13434 | 485 } |
486 | |
487 /* Process now any submenus which want to be panes at this level. */ | |
488 while (!NILP (pending_maps)) | |
489 { | |
490 Lisp_Object elt, eltcdr, string; | |
491 elt = Fcar (pending_maps); | |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
22750
diff
changeset
|
492 eltcdr = XCDR (elt); |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
22750
diff
changeset
|
493 string = XCAR (eltcdr); |
13434 | 494 /* We no longer discard the @ from the beginning of the string here. |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
495 Instead, we do this in w32_menu_show. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
496 single_keymap_panes (Fcar (elt), string, |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
22750
diff
changeset
|
497 XCDR (eltcdr), notreal, maxdepth - 1); |
13434 | 498 pending_maps = Fcdr (pending_maps); |
499 } | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
500 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
501 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
502 /* This is a subroutine of single_keymap_panes that handles one |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
503 keymap entry. |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
504 KEY is a key in a keymap and ITEM is its binding. |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
505 PENDING_MAPS_PTR points to a list of keymaps waiting to be made into |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
506 separate panes. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
507 If NOTREAL is nonzero, only check for equivalent key bindings, don't |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
508 evaluate expressions in menu items and don't make any menu. |
27932
a590f8d0dbd2
[HAVE_BOXES]: Remove #undef.
Jason Rumney <jasonr@gnu.org>
parents:
27896
diff
changeset
|
509 If we encounter submenus deeper than MAXDEPTH levels, ignore them. */ |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
510 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
511 static void |
27932
a590f8d0dbd2
[HAVE_BOXES]: Remove #undef.
Jason Rumney <jasonr@gnu.org>
parents:
27896
diff
changeset
|
512 single_menu_item (key, item, pending_maps_ptr, notreal, maxdepth) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
513 Lisp_Object key, item; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
514 Lisp_Object *pending_maps_ptr; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
515 int maxdepth, notreal; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
516 { |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
517 Lisp_Object map, item_string, enabled; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
518 struct gcpro gcpro1, gcpro2; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
519 int res; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
520 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
521 /* Parse the menu item and leave the result in item_properties. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
522 GCPRO2 (key, item); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
523 res = parse_menu_item (item, notreal, 0); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
524 UNGCPRO; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
525 if (!res) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
526 return; /* Not a menu item. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
527 |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
528 map = AREF (item_properties, ITEM_PROPERTY_MAP); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
529 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
530 if (notreal) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
531 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
532 /* We don't want to make a menu, just traverse the keymaps to |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
533 precompute equivalent key bindings. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
534 if (!NILP (map)) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
535 single_keymap_panes (map, Qnil, key, 1, maxdepth - 1); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
536 return; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
537 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
538 |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
539 enabled = AREF (item_properties, ITEM_PROPERTY_ENABLE); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
540 item_string = AREF (item_properties, ITEM_PROPERTY_NAME); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
541 |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
542 if (!NILP (map) && SREF (item_string, 0) == '@') |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
543 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
544 if (!NILP (enabled)) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
545 /* An enabled separate pane. Remember this to handle it later. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
546 *pending_maps_ptr = Fcons (Fcons (map, Fcons (item_string, key)), |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
547 *pending_maps_ptr); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
548 return; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
549 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
550 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
551 push_menu_item (item_string, enabled, key, |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
552 AREF (item_properties, ITEM_PROPERTY_DEF), |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
553 AREF (item_properties, ITEM_PROPERTY_KEYEQ), |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
554 AREF (item_properties, ITEM_PROPERTY_TYPE), |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
555 AREF (item_properties, ITEM_PROPERTY_SELECTED), |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
556 AREF (item_properties, ITEM_PROPERTY_HELP)); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
557 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
558 /* Display a submenu using the toolkit. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
559 if (! (NILP (map) || NILP (enabled))) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
560 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
561 push_submenu_start (); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
562 single_keymap_panes (map, Qnil, key, 0, maxdepth - 1); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
563 push_submenu_end (); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
564 } |
13434 | 565 } |
566 | |
14036 | 567 /* Push all the panes and items of a menu described by the |
13434 | 568 alist-of-alists MENU. |
569 This handles old-fashioned calls to x-popup-menu. */ | |
570 | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
571 static void |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
572 list_of_panes (menu) |
13434 | 573 Lisp_Object menu; |
574 { | |
575 Lisp_Object tail; | |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
576 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
577 init_menu_items (); |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
578 |
85372
f7d19cfed7da
* xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85247
diff
changeset
|
579 for (tail = menu; CONSP (tail); tail = XCDR (tail)) |
13434 | 580 { |
581 Lisp_Object elt, pane_name, pane_data; | |
85372
f7d19cfed7da
* xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85247
diff
changeset
|
582 elt = XCAR (tail); |
13434 | 583 pane_name = Fcar (elt); |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40476
diff
changeset
|
584 CHECK_STRING (pane_name); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
585 push_menu_pane (pane_name, Qnil); |
13434 | 586 pane_data = Fcdr (elt); |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40476
diff
changeset
|
587 CHECK_CONS (pane_data); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
588 list_of_items (pane_data); |
13434 | 589 } |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
590 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
591 finish_menu_items (); |
13434 | 592 } |
593 | |
594 /* Push the items in a single pane defined by the alist PANE. */ | |
595 | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
596 static void |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
597 list_of_items (pane) |
13434 | 598 Lisp_Object pane; |
599 { | |
600 Lisp_Object tail, item, item1; | |
601 | |
85372
f7d19cfed7da
* xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85247
diff
changeset
|
602 for (tail = pane; CONSP (tail); tail = XCDR (tail)) |
13434 | 603 { |
85372
f7d19cfed7da
* xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
85247
diff
changeset
|
604 item = XCAR (tail); |
13434 | 605 if (STRINGP (item)) |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
606 push_menu_item (item, Qnil, Qnil, Qt, Qnil, Qnil, Qnil, Qnil); |
13434 | 607 else if (NILP (item)) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
608 push_left_right_boundary (); |
13434 | 609 else |
610 { | |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40476
diff
changeset
|
611 CHECK_CONS (item); |
13434 | 612 item1 = Fcar (item); |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40476
diff
changeset
|
613 CHECK_STRING (item1); |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
614 push_menu_item (item1, Qt, Fcdr (item), Qt, Qnil, Qnil, Qnil, Qnil); |
13434 | 615 } |
616 } | |
617 } | |
618 | |
619 DEFUN ("x-popup-menu", Fx_popup_menu, Sx_popup_menu, 2, 2, 0, | |
40962
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
620 doc: /* Pop up a deck-of-cards menu and return user's selection. |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
621 POSITION is a position specification. This is either a mouse button |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
622 event or a list ((XOFFSET YOFFSET) WINDOW) where XOFFSET and YOFFSET |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
623 are positions in pixels from the top left corner of WINDOW's frame |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
624 \(WINDOW may be a frame object instead of a window). This controls the |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
625 position of the center of the first line in the first pane of the |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
626 menu, not the top left of the menu as a whole. If POSITION is t, it |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
627 means to use the current mouse position. |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
628 |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
629 MENU is a specifier for a menu. For the simplest case, MENU is a keymap. |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
630 The menu items come from key bindings that have a menu string as well as |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
631 a definition; actually, the \"definition\" in such a key binding looks like |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
632 \(STRING . REAL-DEFINITION). To give the menu a title, put a string into |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
633 the keymap as a top-level element. |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
634 |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
635 If REAL-DEFINITION is nil, that puts a nonselectable string in the menu. |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
636 Otherwise, REAL-DEFINITION should be a valid key binding definition. |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
637 |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
638 You can also use a list of keymaps as MENU. Then each keymap makes a |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
639 separate pane. When MENU is a keymap or a list of keymaps, the return |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
640 value is a list of events. |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
641 |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
642 Alternatively, you can specify a menu of multiple panes with a list of |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
643 the form (TITLE PANE1 PANE2...), where each pane is a list of |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
644 form (TITLE ITEM1 ITEM2...). |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
645 Each ITEM is normally a cons cell (STRING . VALUE); but a string can |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
646 appear as an item--that makes a nonselectable line in the menu. |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
647 With this form of menu, the return value is VALUE from the chosen item. |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
648 |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
649 If POSITION is nil, don't display the menu at all, just precalculate the |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
650 cached information about equivalent key sequences. */) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
651 (position, menu) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
652 Lisp_Object position, menu; |
13434 | 653 { |
654 Lisp_Object keymap, tem; | |
40476
18b1b133e5c1
(Fx_popup_menu): Explicitly init f, xpos, and ypos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40119
diff
changeset
|
655 int xpos = 0, ypos = 0; |
13434 | 656 Lisp_Object title; |
657 char *error_name; | |
658 Lisp_Object selection; | |
40476
18b1b133e5c1
(Fx_popup_menu): Explicitly init f, xpos, and ypos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40119
diff
changeset
|
659 FRAME_PTR f = NULL; |
13434 | 660 Lisp_Object x, y, window; |
661 int keymaps = 0; | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
662 int for_click = 0; |
13434 | 663 struct gcpro gcpro1; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
664 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
665 #ifdef HAVE_MENUS |
13434 | 666 if (! NILP (position)) |
667 { | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
668 check_w32 (); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
669 |
13434 | 670 /* Decode the first argument: find the window and the coordinates. */ |
16860
247f0b107588
(x-popup-menu): Pass in insist flag to mouse_position_hook.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16729
diff
changeset
|
671 if (EQ (position, Qt) |
32671
bbd3be4db5f2
(add_menu_item): Do not use MF_OWNERDRAW for titles, as it has stopped working.
Jason Rumney <jasonr@gnu.org>
parents:
31114
diff
changeset
|
672 || (CONSP (position) && (EQ (XCAR (position), Qmenu_bar) |
bbd3be4db5f2
(add_menu_item): Do not use MF_OWNERDRAW for titles, as it has stopped working.
Jason Rumney <jasonr@gnu.org>
parents:
31114
diff
changeset
|
673 || EQ (XCAR (position), Qtool_bar)))) |
13434 | 674 { |
675 /* Use the mouse's current position. */ | |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
676 FRAME_PTR new_f = SELECTED_FRAME (); |
13434 | 677 Lisp_Object bar_window; |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
678 enum scroll_bar_part part; |
13434 | 679 unsigned long time; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
680 |
83572
244d6216c056
(Fx_popup_menu): Use terminal specific mouse_position_hook.
Jason Rumney <jasonr@gnu.org>
parents:
76086
diff
changeset
|
681 if (FRAME_TERMINAL (new_f)->mouse_position_hook) |
244d6216c056
(Fx_popup_menu): Use terminal specific mouse_position_hook.
Jason Rumney <jasonr@gnu.org>
parents:
76086
diff
changeset
|
682 (*FRAME_TERMINAL (new_f)->mouse_position_hook) (&new_f, 1, &bar_window, |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
683 &part, &x, &y, &time); |
13434 | 684 if (new_f != 0) |
685 XSETFRAME (window, new_f); | |
686 else | |
687 { | |
688 window = selected_window; | |
689 XSETFASTINT (x, 0); | |
690 XSETFASTINT (y, 0); | |
691 } | |
692 } | |
693 else | |
694 { | |
695 tem = Fcar (position); | |
696 if (CONSP (tem)) | |
697 { | |
698 window = Fcar (Fcdr (position)); | |
699 x = Fcar (tem); | |
700 y = Fcar (Fcdr (tem)); | |
701 } | |
702 else | |
703 { | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
704 for_click = 1; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
705 tem = Fcar (Fcdr (position)); /* EVENT_START (position) */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
706 window = Fcar (tem); /* POSN_WINDOW (tem) */ |
13434 | 707 tem = Fcar (Fcdr (Fcdr (tem))); /* POSN_WINDOW_POSN (tem) */ |
708 x = Fcar (tem); | |
709 y = Fcdr (tem); | |
710 } | |
711 } | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
712 |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40476
diff
changeset
|
713 CHECK_NUMBER (x); |
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40476
diff
changeset
|
714 CHECK_NUMBER (y); |
13434 | 715 |
716 /* Decode where to put the menu. */ | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
717 |
13434 | 718 if (FRAMEP (window)) |
719 { | |
720 f = XFRAME (window); | |
721 xpos = 0; | |
722 ypos = 0; | |
723 } | |
724 else if (WINDOWP (window)) | |
725 { | |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40476
diff
changeset
|
726 CHECK_LIVE_WINDOW (window); |
13434 | 727 f = XFRAME (WINDOW_FRAME (XWINDOW (window))); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
728 |
51206
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
49600
diff
changeset
|
729 xpos = WINDOW_LEFT_EDGE_X (XWINDOW (window)); |
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
49600
diff
changeset
|
730 ypos = WINDOW_TOP_EDGE_Y (XWINDOW (window)); |
13434 | 731 } |
732 else | |
733 /* ??? Not really clean; should be CHECK_WINDOW_OR_FRAME, | |
734 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:
40476
diff
changeset
|
735 CHECK_WINDOW (window); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
736 |
13434 | 737 xpos += XINT (x); |
738 ypos += XINT (y); | |
21612
24a01af0cd38
(Vmenu_updating_frame): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21450
diff
changeset
|
739 |
24a01af0cd38
(Vmenu_updating_frame): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21450
diff
changeset
|
740 XSETFRAME (Vmenu_updating_frame, f); |
13434 | 741 } |
67704
06f3a72bffb2
(Fx_popup_menu): Add `else' to set Vmenu_updating_frame to nil
Juri Linkov <juri@jurta.org>
parents:
65301
diff
changeset
|
742 else |
06f3a72bffb2
(Fx_popup_menu): Add `else' to set Vmenu_updating_frame to nil
Juri Linkov <juri@jurta.org>
parents:
65301
diff
changeset
|
743 Vmenu_updating_frame = Qnil; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
744 #endif /* HAVE_MENUS */ |
21612
24a01af0cd38
(Vmenu_updating_frame): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21450
diff
changeset
|
745 |
13434 | 746 title = Qnil; |
747 GCPRO1 (title); | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
748 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
749 /* Decode the menu items from what was specified. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
750 |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32671
diff
changeset
|
751 keymap = get_keymap (menu, 0, 0); |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32671
diff
changeset
|
752 if (CONSP (keymap)) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
753 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
754 /* We were given a keymap. Extract menu info from the keymap. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
755 Lisp_Object prompt; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
756 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
757 /* Extract the detailed info to make one pane. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
758 keymap_panes (&menu, 1, NILP (position)); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
759 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
760 /* Search for a string appearing directly as an element of the keymap. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
761 That string is the title of the menu. */ |
39690
38c1890338cc
(keymap_panes, Fx_popup_menu): Use Fkeymap_prompt.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
762 prompt = Fkeymap_prompt (keymap); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
763 if (NILP (title) && !NILP (prompt)) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
764 title = prompt; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
765 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
766 /* Make that be the pane title of the first pane. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
767 if (!NILP (prompt) && menu_items_n_panes >= 0) |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
768 ASET (menu_items, MENU_ITEMS_PANE_NAME, prompt); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
769 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
770 keymaps = 1; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
771 } |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32671
diff
changeset
|
772 else if (CONSP (menu) && KEYMAPP (XCAR (menu))) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
773 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
774 /* We were given a list of keymaps. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
775 int nmaps = XFASTINT (Flength (menu)); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
776 Lisp_Object *maps |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
777 = (Lisp_Object *) alloca (nmaps * sizeof (Lisp_Object)); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
778 int i; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
779 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
780 title = Qnil; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
781 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
782 /* The first keymap that has a prompt string |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
783 supplies the menu title. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
784 for (tem = menu, i = 0; CONSP (tem); tem = Fcdr (tem)) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
785 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
786 Lisp_Object prompt; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
787 |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32671
diff
changeset
|
788 maps[i++] = keymap = get_keymap (Fcar (tem), 1, 0); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
789 |
39690
38c1890338cc
(keymap_panes, Fx_popup_menu): Use Fkeymap_prompt.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
790 prompt = Fkeymap_prompt (keymap); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
791 if (NILP (title) && !NILP (prompt)) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
792 title = prompt; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
793 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
794 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
795 /* Extract the detailed info to make one pane. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
796 keymap_panes (maps, nmaps, NILP (position)); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
797 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
798 /* Make the title be the pane title of the first pane. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
799 if (!NILP (title) && menu_items_n_panes >= 0) |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
800 ASET (menu_items, MENU_ITEMS_PANE_NAME, title); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
801 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
802 keymaps = 1; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
803 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
804 else |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
805 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
806 /* We were given an old-fashioned menu. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
807 title = Fcar (menu); |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40476
diff
changeset
|
808 CHECK_STRING (title); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
809 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
810 list_of_panes (Fcdr (menu)); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
811 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
812 keymaps = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
813 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
814 |
13434 | 815 if (NILP (position)) |
816 { | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
817 discard_menu_items (); |
13434 | 818 UNGCPRO; |
819 return Qnil; | |
820 } | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
821 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
822 #ifdef HAVE_MENUS |
69443
c5278c858018
(Fx_popup_menu): Call w32_free_menu_strings when
Jason Rumney <jasonr@gnu.org>
parents:
68651
diff
changeset
|
823 /* If resources from a previous popup menu still exist, does nothing |
c5278c858018
(Fx_popup_menu): Call w32_free_menu_strings when
Jason Rumney <jasonr@gnu.org>
parents:
68651
diff
changeset
|
824 until the `menu_free_timer' has freed them (see w32fns.c). This |
c5278c858018
(Fx_popup_menu): Call w32_free_menu_strings when
Jason Rumney <jasonr@gnu.org>
parents:
68651
diff
changeset
|
825 can occur if you press ESC or click outside a menu without selecting |
c5278c858018
(Fx_popup_menu): Call w32_free_menu_strings when
Jason Rumney <jasonr@gnu.org>
parents:
68651
diff
changeset
|
826 a menu item. |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
827 */ |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
828 if (current_popup_menu) |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
829 { |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
830 discard_menu_items (); |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
831 UNGCPRO; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
832 return Qnil; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
833 } |
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
834 |
13434 | 835 /* Display them in a menu. */ |
836 BLOCK_INPUT; | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
837 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
838 selection = w32_menu_show (f, xpos, ypos, for_click, |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
839 keymaps, title, &error_name); |
13434 | 840 UNBLOCK_INPUT; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
841 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
842 discard_menu_items (); |
69443
c5278c858018
(Fx_popup_menu): Call w32_free_menu_strings when
Jason Rumney <jasonr@gnu.org>
parents:
68651
diff
changeset
|
843 |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
844 #endif /* HAVE_MENUS */ |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
845 |
13434 | 846 UNGCPRO; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
847 |
13434 | 848 if (error_name) error (error_name); |
849 return selection; | |
850 } | |
851 | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
852 #ifdef HAVE_MENUS |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
853 |
62670
5ba03d610746
(Fx_popup_dialog): Allow 3rd optional argument.
Nick Roberts <nickrob@snap.net.nz>
parents:
62668
diff
changeset
|
854 DEFUN ("x-popup-dialog", Fx_popup_dialog, Sx_popup_dialog, 2, 3, 0, |
40962
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
855 doc: /* Pop up a dialog box and return user's selection. |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
856 POSITION specifies which frame to use. |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
857 This is normally a mouse button event or a window or frame. |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
858 If POSITION is t, it means to use the frame the mouse is on. |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
859 The dialog box appears in the middle of the specified frame. |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
860 |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
861 CONTENTS specifies the alternatives to display in the dialog box. |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
862 It is a list of the form (TITLE ITEM1 ITEM2...). |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
863 Each ITEM is a cons cell (STRING . VALUE). |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
864 The return value is VALUE from the chosen item. |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
865 |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
866 An ITEM may also be just a string--that makes a nonselectable item. |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
867 An ITEM may also be nil--that means to put all preceding items |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
868 on the left of the dialog box and all following items on the right. |
62668
d126643d7af1
(Fx_popup_dialog): Add a third boolean argument to select frame title
Nick Roberts <nickrob@snap.net.nz>
parents:
56973
diff
changeset
|
869 \(By default, approximately half appear on each side.) |
d126643d7af1
(Fx_popup_dialog): Add a third boolean argument to select frame title
Nick Roberts <nickrob@snap.net.nz>
parents:
56973
diff
changeset
|
870 |
d126643d7af1
(Fx_popup_dialog): Add a third boolean argument to select frame title
Nick Roberts <nickrob@snap.net.nz>
parents:
56973
diff
changeset
|
871 If HEADER is non-nil, the frame title for the box is "Information", |
d126643d7af1
(Fx_popup_dialog): Add a third boolean argument to select frame title
Nick Roberts <nickrob@snap.net.nz>
parents:
56973
diff
changeset
|
872 otherwise it is "Question". */) |
d126643d7af1
(Fx_popup_dialog): Add a third boolean argument to select frame title
Nick Roberts <nickrob@snap.net.nz>
parents:
56973
diff
changeset
|
873 (position, contents, header) |
d126643d7af1
(Fx_popup_dialog): Add a third boolean argument to select frame title
Nick Roberts <nickrob@snap.net.nz>
parents:
56973
diff
changeset
|
874 Lisp_Object position, contents, header; |
13434 | 875 { |
40476
18b1b133e5c1
(Fx_popup_menu): Explicitly init f, xpos, and ypos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40119
diff
changeset
|
876 FRAME_PTR f = NULL; |
13434 | 877 Lisp_Object window; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
878 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
879 check_w32 (); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
880 |
13434 | 881 /* Decode the first argument: find the window or frame to use. */ |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
882 if (EQ (position, Qt) |
32671
bbd3be4db5f2
(add_menu_item): Do not use MF_OWNERDRAW for titles, as it has stopped working.
Jason Rumney <jasonr@gnu.org>
parents:
31114
diff
changeset
|
883 || (CONSP (position) && (EQ (XCAR (position), Qmenu_bar) |
bbd3be4db5f2
(add_menu_item): Do not use MF_OWNERDRAW for titles, as it has stopped working.
Jason Rumney <jasonr@gnu.org>
parents:
31114
diff
changeset
|
884 || EQ (XCAR (position), Qtool_bar)))) |
13434 | 885 { |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
886 #if 0 /* Using the frame the mouse is on may not be right. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
887 /* Use the mouse's current position. */ |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
888 FRAME_PTR new_f = SELECTED_FRAME (); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
889 Lisp_Object bar_window; |
31114
cd392fdf0e9f
Include keyboard.h before frame.h. Fix compile
Andrew Innes <andrewi@gnu.org>
parents:
30989
diff
changeset
|
890 enum scroll_bar_part part; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
891 unsigned long time; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
892 Lisp_Object x, y; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
893 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
894 (*mouse_position_hook) (&new_f, 1, &bar_window, &part, &x, &y, &time); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
895 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
896 if (new_f != 0) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
897 XSETFRAME (window, new_f); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
898 else |
13434 | 899 window = selected_window; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
900 #endif |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
901 window = selected_window; |
13434 | 902 } |
903 else if (CONSP (position)) | |
904 { | |
905 Lisp_Object tem; | |
906 tem = Fcar (position); | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
907 if (CONSP (tem)) |
13434 | 908 window = Fcar (Fcdr (position)); |
909 else | |
910 { | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
911 tem = Fcar (Fcdr (position)); /* EVENT_START (position) */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
912 window = Fcar (tem); /* POSN_WINDOW (tem) */ |
13434 | 913 } |
914 } | |
915 else if (WINDOWP (position) || FRAMEP (position)) | |
916 window = position; | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
917 else |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
918 window = Qnil; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
919 |
13434 | 920 /* Decode where to put the menu. */ |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
921 |
13434 | 922 if (FRAMEP (window)) |
923 f = XFRAME (window); | |
924 else if (WINDOWP (window)) | |
925 { | |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40476
diff
changeset
|
926 CHECK_LIVE_WINDOW (window); |
13434 | 927 f = XFRAME (WINDOW_FRAME (XWINDOW (window))); |
928 } | |
929 else | |
930 /* ??? Not really clean; should be CHECK_WINDOW_OR_FRAME, | |
931 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:
40476
diff
changeset
|
932 CHECK_WINDOW (window); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
933 |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
934 #ifndef HAVE_DIALOGS |
93979
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
935 |
13434 | 936 { |
93979
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
937 /* Handle simple Yes/No choices as MessageBox popups. */ |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
938 if (is_simple_dialog (contents)) |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
939 return simple_dialog_show (f, contents, header); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
940 else |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
941 { |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
942 /* Display a menu with these alternatives |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
943 in the middle of frame F. */ |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
944 Lisp_Object x, y, frame, newpos; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
945 XSETFRAME (frame, f); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
946 XSETINT (x, x_pixel_width (f) / 2); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
947 XSETINT (y, x_pixel_height (f) / 2); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
948 newpos = Fcons (Fcons (x, Fcons (y, Qnil)), Fcons (frame, Qnil)); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
949 return Fx_popup_menu (newpos, |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
950 Fcons (Fcar (contents), Fcons (contents, Qnil))); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
951 } |
13434 | 952 } |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
953 #else /* HAVE_DIALOGS */ |
13434 | 954 { |
955 Lisp_Object title; | |
956 char *error_name; | |
957 Lisp_Object selection; | |
958 | |
959 /* Decode the dialog items from what was specified. */ | |
960 title = Fcar (contents); | |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40476
diff
changeset
|
961 CHECK_STRING (title); |
13434 | 962 |
963 list_of_panes (Fcons (contents, Qnil)); | |
964 | |
965 /* Display them in a dialog box. */ | |
966 BLOCK_INPUT; | |
62668
d126643d7af1
(Fx_popup_dialog): Add a third boolean argument to select frame title
Nick Roberts <nickrob@snap.net.nz>
parents:
56973
diff
changeset
|
967 selection = w32_dialog_show (f, 0, title, header, &error_name); |
13434 | 968 UNBLOCK_INPUT; |
969 | |
970 discard_menu_items (); | |
971 | |
972 if (error_name) error (error_name); | |
973 return selection; | |
974 } | |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
975 #endif /* HAVE_DIALOGS */ |
13434 | 976 } |
977 | |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
978 /* Activate the menu bar of frame F. |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
979 This is called from keyboard.c when it gets the |
45803
9484de301252
Rename enum event_kind items.
Pavel Janík <Pavel@Janik.cz>
parents:
43471
diff
changeset
|
980 MENU_BAR_ACTIVATE_EVENT out of the Emacs event queue. |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
981 |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
982 To activate the menu bar, we signal to the input thread that it can |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
983 return from the WM_INITMENU message, allowing the normal Windows |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
984 processing of the menus. |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
985 |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
986 But first we recompute the menu bar contents (the whole tree). |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
987 |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
988 This way we can safely execute Lisp code. */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
989 |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
990 void |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
991 x_activate_menubar (f) |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
992 FRAME_PTR f; |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
993 { |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
994 set_frame_menubar (f, 0, 1); |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
995 |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
996 /* Lock out further menubar changes while active. */ |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
997 f->output_data.w32->menubar_active = 1; |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
998 |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
999 /* Signal input thread to return from WM_INITMENU. */ |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1000 complete_deferred_msg (FRAME_W32_WINDOW (f), WM_INITMENU, 0); |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1001 } |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1002 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1003 /* This callback is called from the menu bar pulldown menu |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1004 when the user makes a selection. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1005 Figure out what the user chose |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1006 and put the appropriate events into the keyboard buffer. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1007 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1008 void |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1009 menubar_selection_callback (FRAME_PTR f, void * client_data) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1010 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1011 Lisp_Object prefix, entry; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1012 Lisp_Object vector; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1013 Lisp_Object *subprefix_stack; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1014 int submenu_depth = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1015 int i; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1016 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1017 if (!f) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1018 return; |
38371
eb915f0b1d6e
(menubar_selection_callback, w32_menu_show): Initialize `entry' to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
36677
diff
changeset
|
1019 entry = Qnil; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1020 subprefix_stack = (Lisp_Object *) alloca (f->menu_bar_items_used * sizeof (Lisp_Object)); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1021 vector = f->menu_bar_vector; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1022 prefix = Qnil; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1023 i = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1024 while (i < f->menu_bar_items_used) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1025 { |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1026 if (EQ (AREF (vector, i), Qnil)) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1027 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1028 subprefix_stack[submenu_depth++] = prefix; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1029 prefix = entry; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1030 i++; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1031 } |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1032 else if (EQ (AREF (vector, i), Qlambda)) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1033 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1034 prefix = subprefix_stack[--submenu_depth]; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1035 i++; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1036 } |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1037 else if (EQ (AREF (vector, i), Qt)) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1038 { |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1039 prefix = AREF (vector, i + MENU_ITEMS_PANE_PREFIX); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1040 i += MENU_ITEMS_PANE_LENGTH; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1041 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1042 else |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1043 { |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1044 entry = AREF (vector, i + MENU_ITEMS_ITEM_VALUE); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1045 /* The EMACS_INT cast avoids a warning. There's no problem |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1046 as long as pointers have enough bits to hold small integers. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1047 if ((int) (EMACS_INT) client_data == i) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1048 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1049 int j; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1050 struct input_event buf; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1051 Lisp_Object frame; |
51573
861a49cd70cf
(menubar_selection_callback): Don't pass uninitialized
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51206
diff
changeset
|
1052 EVENT_INIT (buf); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1053 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1054 XSETFRAME (frame, f); |
30178
6d045b9631ad
(menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents:
30145
diff
changeset
|
1055 buf.kind = MENU_BAR_EVENT; |
6d045b9631ad
(menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents:
30145
diff
changeset
|
1056 buf.frame_or_window = frame; |
6d045b9631ad
(menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents:
30145
diff
changeset
|
1057 buf.arg = frame; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1058 kbd_buffer_store_event (&buf); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1059 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1060 for (j = 0; j < submenu_depth; j++) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1061 if (!NILP (subprefix_stack[j])) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1062 { |
30178
6d045b9631ad
(menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents:
30145
diff
changeset
|
1063 buf.kind = MENU_BAR_EVENT; |
6d045b9631ad
(menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents:
30145
diff
changeset
|
1064 buf.frame_or_window = frame; |
6d045b9631ad
(menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents:
30145
diff
changeset
|
1065 buf.arg = subprefix_stack[j]; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1066 kbd_buffer_store_event (&buf); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1067 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1068 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1069 if (!NILP (prefix)) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1070 { |
30178
6d045b9631ad
(menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents:
30145
diff
changeset
|
1071 buf.kind = MENU_BAR_EVENT; |
6d045b9631ad
(menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents:
30145
diff
changeset
|
1072 buf.frame_or_window = frame; |
6d045b9631ad
(menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents:
30145
diff
changeset
|
1073 buf.arg = prefix; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1074 kbd_buffer_store_event (&buf); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1075 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1076 |
30178
6d045b9631ad
(menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents:
30145
diff
changeset
|
1077 buf.kind = MENU_BAR_EVENT; |
6d045b9631ad
(menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents:
30145
diff
changeset
|
1078 buf.frame_or_window = frame; |
6d045b9631ad
(menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents:
30145
diff
changeset
|
1079 buf.arg = entry; |
76074
5978a80d504e
(current_popup_menu): Make available globally.
Jason Rumney <jasonr@gnu.org>
parents:
75227
diff
changeset
|
1080 /* Free memory used by owner-drawn and help-echo strings. */ |
5978a80d504e
(current_popup_menu): Make available globally.
Jason Rumney <jasonr@gnu.org>
parents:
75227
diff
changeset
|
1081 w32_free_menu_strings (FRAME_W32_WINDOW (f)); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1082 kbd_buffer_store_event (&buf); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1083 |
43471
20574c51c791
(menubar_selection_callback): Free the menu and
Jason Rumney <jasonr@gnu.org>
parents:
42613
diff
changeset
|
1084 f->output_data.w32->menubar_active = 0; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1085 return; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1086 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1087 i += MENU_ITEMS_ITEM_LENGTH; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1088 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1089 } |
43471
20574c51c791
(menubar_selection_callback): Free the menu and
Jason Rumney <jasonr@gnu.org>
parents:
42613
diff
changeset
|
1090 /* Free memory used by owner-drawn and help-echo strings. */ |
20574c51c791
(menubar_selection_callback): Free the menu and
Jason Rumney <jasonr@gnu.org>
parents:
42613
diff
changeset
|
1091 w32_free_menu_strings (FRAME_W32_WINDOW (f)); |
20574c51c791
(menubar_selection_callback): Free the menu and
Jason Rumney <jasonr@gnu.org>
parents:
42613
diff
changeset
|
1092 f->output_data.w32->menubar_active = 0; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1093 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1094 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1095 /* Allocate a widget_value, blocking input. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1096 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1097 widget_value * |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1098 xmalloc_widget_value () |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1099 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1100 widget_value *value; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1101 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1102 BLOCK_INPUT; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1103 value = malloc_widget_value (); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1104 UNBLOCK_INPUT; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1105 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1106 return value; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1107 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1108 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1109 /* This recursively calls free_widget_value on the tree of widgets. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1110 It must free all data that was malloc'ed for these widget_values. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1111 In Emacs, many slots are pointers into the data of Lisp_Strings, and |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1112 must be left alone. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1113 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1114 void |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1115 free_menubar_widget_value_tree (wv) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1116 widget_value *wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1117 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1118 if (! wv) return; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
1119 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1120 wv->name = wv->value = wv->key = (char *) 0xDEADBEEF; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1121 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1122 if (wv->contents && (wv->contents != (widget_value*)1)) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1123 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1124 free_menubar_widget_value_tree (wv->contents); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1125 wv->contents = (widget_value *) 0xDEADBEEF; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1126 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1127 if (wv->next) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1128 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1129 free_menubar_widget_value_tree (wv->next); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1130 wv->next = (widget_value *) 0xDEADBEEF; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1131 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1132 BLOCK_INPUT; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1133 free_widget_value (wv); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1134 UNBLOCK_INPUT; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1135 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1136 |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1137 /* Set up data i menu_items for a menu bar item |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1138 whose event type is ITEM_KEY (with string ITEM_NAME) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1139 and whose contents come from the list of keymaps MAPS. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1140 |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1141 static int |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1142 parse_single_submenu (item_key, item_name, maps) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1143 Lisp_Object item_key, item_name, maps; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1144 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1145 Lisp_Object length; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1146 int len; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1147 Lisp_Object *mapvec; |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1148 int i; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1149 int top_level_items = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1150 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1151 length = Flength (maps); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1152 len = XINT (length); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1153 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1154 /* Convert the list MAPS into a vector MAPVEC. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1155 mapvec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object)); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1156 for (i = 0; i < len; i++) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1157 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1158 mapvec[i] = Fcar (maps); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1159 maps = Fcdr (maps); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1160 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1161 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1162 /* Loop over the given keymaps, making a pane for each map. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1163 But don't make a pane that is empty--ignore that map instead. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1164 for (i = 0; i < len; i++) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1165 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1166 if (SYMBOLP (mapvec[i]) |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32671
diff
changeset
|
1167 || (CONSP (mapvec[i]) && !KEYMAPP (mapvec[i]))) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1168 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1169 /* Here we have a command at top level in the menu bar |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1170 as opposed to a submenu. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1171 top_level_items = 1; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1172 push_menu_pane (Qnil, Qnil); |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1173 push_menu_item (item_name, Qt, item_key, mapvec[i], |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1174 Qnil, Qnil, Qnil, Qnil); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1175 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1176 else |
49348
08ac5c346b16
(digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
1177 { |
08ac5c346b16
(digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
1178 Lisp_Object prompt; |
08ac5c346b16
(digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
1179 prompt = Fkeymap_prompt (mapvec[i]); |
08ac5c346b16
(digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
1180 single_keymap_panes (mapvec[i], |
08ac5c346b16
(digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
1181 !NILP (prompt) ? prompt : item_name, |
08ac5c346b16
(digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
1182 item_key, 0, 10); |
08ac5c346b16
(digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
1183 } |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1184 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
1185 |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1186 return top_level_items; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1187 } |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1188 |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1189 |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1190 /* Create a tree of widget_value objects |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1191 representing the panes and items |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1192 in menu_items starting at index START, up to index END. */ |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1193 |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1194 static widget_value * |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1195 digest_single_submenu (start, end, top_level_items) |
49348
08ac5c346b16
(digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
1196 int start, end, top_level_items; |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1197 { |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1198 widget_value *wv, *prev_wv, *save_wv, *first_wv; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1199 int i; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1200 int submenu_depth = 0; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1201 widget_value **submenu_stack; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1202 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1203 submenu_stack |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1204 = (widget_value **) alloca (menu_items_used * sizeof (widget_value *)); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1205 wv = xmalloc_widget_value (); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1206 wv->name = "menu"; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1207 wv->value = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1208 wv->enabled = 1; |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1209 wv->button_type = BUTTON_TYPE_NONE; |
42589
ac09ecabe088
(single_submenu, set_frame_menubar, w32_menu_show):
Jason Rumney <jasonr@gnu.org>
parents:
42584
diff
changeset
|
1210 wv->help = Qnil; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1211 first_wv = wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1212 save_wv = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1213 prev_wv = 0; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
1214 |
49348
08ac5c346b16
(digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
1215 /* Loop over all panes and items made by the preceding call |
08ac5c346b16
(digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
1216 to parse_single_submenu and construct a tree of widget_value objects. |
08ac5c346b16
(digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
1217 Ignore the panes and items used by previous calls to |
08ac5c346b16
(digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
1218 digest_single_submenu, even though those are also in menu_items. */ |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1219 i = start; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1220 while (i < end) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1221 { |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1222 if (EQ (AREF (menu_items, i), Qnil)) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1223 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1224 submenu_stack[submenu_depth++] = save_wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1225 save_wv = prev_wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1226 prev_wv = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1227 i++; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1228 } |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1229 else if (EQ (AREF (menu_items, i), Qlambda)) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1230 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1231 prev_wv = save_wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1232 save_wv = submenu_stack[--submenu_depth]; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1233 i++; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1234 } |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1235 else if (EQ (AREF (menu_items, i), Qt) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1236 && submenu_depth != 0) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1237 i += MENU_ITEMS_PANE_LENGTH; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1238 /* Ignore a nil in the item list. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1239 It's meaningful only for dialog boxes. */ |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1240 else if (EQ (AREF (menu_items, i), Qquote)) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1241 i += 1; |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1242 else if (EQ (AREF (menu_items, i), Qt)) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1243 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1244 /* Create a new pane. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1245 Lisp_Object pane_name, prefix; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1246 char *pane_string; |
40119
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1247 |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1248 pane_name = AREF (menu_items, i + MENU_ITEMS_PANE_NAME); |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1249 prefix = AREF (menu_items, i + MENU_ITEMS_PANE_PREFIX); |
40119
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1250 |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1251 if (STRINGP (pane_name)) |
40119
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1252 { |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1253 if (unicode_append_menu) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1254 /* Encode as UTF-8 for now. */ |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1255 pane_name = ENCODE_UTF_8 (pane_name); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1256 else if (STRING_MULTIBYTE (pane_name)) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1257 pane_name = ENCODE_SYSTEM (pane_name); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1258 |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1259 ASET (menu_items, i + MENU_ITEMS_PANE_NAME, pane_name); |
40119
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1260 } |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1261 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1262 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
|
1263 ? "" : (char *) SDATA (pane_name)); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1264 /* If there is just one top-level pane, put all its items directly |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1265 under the top-level menu. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1266 if (menu_items_n_panes == 1) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1267 pane_string = ""; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1268 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1269 /* If the pane has a meaningful name, |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1270 make the pane a top-level menu item |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1271 with its items as a submenu beneath it. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1272 if (strcmp (pane_string, "")) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1273 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1274 wv = xmalloc_widget_value (); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1275 if (save_wv) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1276 save_wv->next = wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1277 else |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1278 first_wv->contents = wv; |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1279 wv->lname = pane_name; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1280 /* Set value to 1 so update_submenu_strings can handle '@' */ |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1281 wv->value = (char *) 1; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1282 wv->enabled = 1; |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1283 wv->button_type = BUTTON_TYPE_NONE; |
42589
ac09ecabe088
(single_submenu, set_frame_menubar, w32_menu_show):
Jason Rumney <jasonr@gnu.org>
parents:
42584
diff
changeset
|
1284 wv->help = Qnil; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1285 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1286 save_wv = wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1287 prev_wv = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1288 i += MENU_ITEMS_PANE_LENGTH; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1289 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1290 else |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1291 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1292 /* Create a new item within current pane. */ |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1293 Lisp_Object item_name, enable, descrip, def, type, selected; |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1294 Lisp_Object help; |
28275
2c8492145fc8
(single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents:
27932
diff
changeset
|
1295 |
40119
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1296 item_name = AREF (menu_items, i + MENU_ITEMS_ITEM_NAME); |
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1297 enable = AREF (menu_items, i + MENU_ITEMS_ITEM_ENABLE); |
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1298 descrip = AREF (menu_items, i + MENU_ITEMS_ITEM_EQUIV_KEY); |
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1299 def = AREF (menu_items, i + MENU_ITEMS_ITEM_DEFINITION); |
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1300 type = AREF (menu_items, i + MENU_ITEMS_ITEM_TYPE); |
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1301 selected = AREF (menu_items, i + MENU_ITEMS_ITEM_SELECTED); |
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1302 help = AREF (menu_items, i + MENU_ITEMS_ITEM_HELP); |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1303 |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1304 if (STRINGP (item_name)) |
40119
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1305 { |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1306 if (unicode_append_menu) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1307 item_name = ENCODE_UTF_8 (item_name); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1308 else if (STRING_MULTIBYTE (item_name)) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1309 item_name = ENCODE_SYSTEM (item_name); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1310 |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1311 ASET (menu_items, i + MENU_ITEMS_ITEM_NAME, item_name); |
40119
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1312 } |
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1313 |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1314 if (STRINGP (descrip) && STRING_MULTIBYTE (descrip)) |
40119
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1315 { |
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1316 descrip = ENCODE_SYSTEM (descrip); |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1317 ASET (menu_items, i + MENU_ITEMS_ITEM_EQUIV_KEY, descrip); |
40119
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1318 } |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1319 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1320 wv = xmalloc_widget_value (); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
1321 if (prev_wv) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1322 prev_wv->next = wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1323 else |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1324 save_wv->contents = wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1325 |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1326 wv->lname = item_name; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1327 if (!NILP (descrip)) |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1328 wv->lkey = descrip; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1329 wv->value = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1330 /* The EMACS_INT cast avoids a warning. There's no problem |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1331 as long as pointers have enough bits to hold small integers. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1332 wv->call_data = (!NILP (def) ? (void *) (EMACS_INT) i : 0); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1333 wv->enabled = !NILP (enable); |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1334 |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1335 if (NILP (type)) |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1336 wv->button_type = BUTTON_TYPE_NONE; |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1337 else if (EQ (type, QCradio)) |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1338 wv->button_type = BUTTON_TYPE_RADIO; |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1339 else if (EQ (type, QCtoggle)) |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1340 wv->button_type = BUTTON_TYPE_TOGGLE; |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1341 else |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1342 abort (); |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1343 |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1344 wv->selected = !NILP (selected); |
41908
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
1345 if (!STRINGP (help)) |
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
1346 help = Qnil; |
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
1347 |
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
1348 wv->help = help; |
28275
2c8492145fc8
(single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents:
27932
diff
changeset
|
1349 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1350 prev_wv = wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1351 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1352 i += MENU_ITEMS_ITEM_LENGTH; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1353 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1354 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1355 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1356 /* If we have just one "menu item" |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1357 that was originally a button, return it by itself. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1358 if (top_level_items && first_wv->contents && first_wv->contents->next == 0) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1359 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1360 wv = first_wv->contents; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1361 free_widget_value (first_wv); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1362 return wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1363 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1364 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1365 return first_wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1366 } |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1367 |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1368 |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1369 /* Walk through the widget_value tree starting at FIRST_WV and update |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1370 the char * pointers from the corresponding lisp values. |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1371 We do this after building the whole tree, since GC may happen while the |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1372 tree is constructed, and small strings are relocated. So we must wait |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1373 until no GC can happen before storing pointers into lisp values. */ |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1374 static void |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1375 update_submenu_strings (first_wv) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1376 widget_value *first_wv; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1377 { |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1378 widget_value *wv; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1379 |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1380 for (wv = first_wv; wv; wv = wv->next) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1381 { |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1382 if (wv->lname && ! NILP (wv->lname)) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1383 { |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1384 wv->name = SDATA (wv->lname); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1385 |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1386 /* Ignore the @ that means "separate pane". |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1387 This is a kludge, but this isn't worth more time. */ |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1388 if (wv->value == (char *)1) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1389 { |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1390 if (wv->name[0] == '@') |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1391 wv->name++; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1392 wv->value = 0; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1393 } |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1394 } |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1395 |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1396 if (wv->lkey && ! NILP (wv->lkey)) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1397 wv->key = SDATA (wv->lkey); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1398 |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1399 if (wv->contents) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1400 update_submenu_strings (wv->contents); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1401 } |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1402 } |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1403 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1404 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1405 /* Set the contents of the menubar widgets of frame F. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1406 The argument FIRST_TIME is currently ignored; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1407 it is set the first time this is called, from initialize_frame_menubar. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1408 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1409 void |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1410 set_frame_menubar (f, first_time, deep_p) |
13434 | 1411 FRAME_PTR f; |
1412 int first_time; | |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1413 int deep_p; |
13434 | 1414 { |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1415 HMENU menubar_widget = f->output_data.w32->menubar_widget; |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1416 Lisp_Object items; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1417 widget_value *wv, *first_wv, *prev_wv = 0; |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1418 int i, last_i; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1419 int *submenu_start, *submenu_end; |
49348
08ac5c346b16
(digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
1420 int *submenu_top_level_items, *submenu_n_panes; |
21612
24a01af0cd38
(Vmenu_updating_frame): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21450
diff
changeset
|
1421 |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1422 /* We must not change the menubar when actually in use. */ |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1423 if (f->output_data.w32->menubar_active) |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1424 return; |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1425 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1426 XSETFRAME (Vmenu_updating_frame, f); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1427 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1428 if (! menubar_widget) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1429 deep_p = 1; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1430 else if (pending_menu_activation && !deep_p) |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1431 deep_p = 1; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1432 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1433 if (deep_p) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1434 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1435 /* Make a widget-value tree representing the entire menu trees. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1436 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1437 struct buffer *prev = current_buffer; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1438 Lisp_Object buffer; |
46293
1fb8f75062c6
Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents:
45803
diff
changeset
|
1439 int specpdl_count = SPECPDL_INDEX (); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1440 int previous_menu_items_used = f->menu_bar_items_used; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1441 Lisp_Object *previous_items |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1442 = (Lisp_Object *) alloca (previous_menu_items_used |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1443 * sizeof (Lisp_Object)); |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1444 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1445 /* If we are making a new widget, its contents are empty, |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1446 do always reinitialize them. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1447 if (! menubar_widget) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1448 previous_menu_items_used = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1449 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1450 buffer = XWINDOW (FRAME_SELECTED_WINDOW (f))->buffer; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1451 specbind (Qinhibit_quit, Qt); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1452 /* Don't let the debugger step into this code |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1453 because it is not reentrant. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1454 specbind (Qdebug_on_next_call, Qnil); |
15276 | 1455 |
63147
9bde03db5726
* composite.c (compose_chars_in_text):
Kim F. Storm <storm@cua.dk>
parents:
62670
diff
changeset
|
1456 record_unwind_save_match_data (); |
9bde03db5726
* composite.c (compose_chars_in_text):
Kim F. Storm <storm@cua.dk>
parents:
62670
diff
changeset
|
1457 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1458 if (NILP (Voverriding_local_map_menu_flag)) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1459 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1460 specbind (Qoverriding_terminal_local_map, Qnil); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1461 specbind (Qoverriding_local_map, Qnil); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1462 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1463 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1464 set_buffer_internal_1 (XBUFFER (buffer)); |
15276 | 1465 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1466 /* Run the Lucid hook. */ |
36313
77093a87f2de
* w32menu.c (set_frame_menubar): Run activate-menu-bar-hook with
Jason Rumney <jasonr@gnu.org>
parents:
33971
diff
changeset
|
1467 safe_run_hooks (Qactivate_menubar_hook); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1468 /* If it has changed current-menubar from previous value, |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1469 really recompute the menubar from the value. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1470 if (! NILP (Vlucid_menu_bar_dirty_flag)) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1471 call0 (Qrecompute_lucid_menubar); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1472 safe_run_hooks (Qmenu_bar_update_hook); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1473 FRAME_MENU_BAR_ITEMS (f) = menu_bar_items (FRAME_MENU_BAR_ITEMS (f)); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1474 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1475 items = FRAME_MENU_BAR_ITEMS (f); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1476 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1477 /* Save the frame's previous menu bar contents data. */ |
39507
24530f82048e
(set_frame_menubar): Take into account that
Andrew Innes <andrewi@gnu.org>
parents:
38371
diff
changeset
|
1478 if (previous_menu_items_used) |
24530f82048e
(set_frame_menubar): Take into account that
Andrew Innes <andrewi@gnu.org>
parents:
38371
diff
changeset
|
1479 bcopy (XVECTOR (f->menu_bar_vector)->contents, previous_items, |
24530f82048e
(set_frame_menubar): Take into account that
Andrew Innes <andrewi@gnu.org>
parents:
38371
diff
changeset
|
1480 previous_menu_items_used * sizeof (Lisp_Object)); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1481 |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1482 /* Fill in menu_items with the current menu bar contents. |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1483 This can evaluate Lisp code. */ |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1484 menu_items = f->menu_bar_vector; |
39507
24530f82048e
(set_frame_menubar): Take into account that
Andrew Innes <andrewi@gnu.org>
parents:
38371
diff
changeset
|
1485 menu_items_allocated = VECTORP (menu_items) ? ASIZE (menu_items) : 0; |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1486 submenu_start = (int *) alloca (XVECTOR (items)->size * sizeof (int *)); |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1487 submenu_end = (int *) alloca (XVECTOR (items)->size * sizeof (int *)); |
49348
08ac5c346b16
(digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
1488 submenu_n_panes = (int *) alloca (XVECTOR (items)->size * sizeof (int)); |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1489 submenu_top_level_items |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1490 = (int *) alloca (XVECTOR (items)->size * sizeof (int *)); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1491 init_menu_items (); |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1492 for (i = 0; i < ASIZE (items); i += 4) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1493 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1494 Lisp_Object key, string, maps; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1495 |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1496 last_i = i; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1497 |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1498 key = AREF (items, i); |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1499 string = AREF (items, i + 1); |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1500 maps = AREF (items, i + 2); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1501 if (NILP (string)) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1502 break; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1503 |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1504 submenu_start[i] = menu_items_used; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1505 |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1506 menu_items_n_panes = 0; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1507 submenu_top_level_items[i] |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1508 = parse_single_submenu (key, string, maps); |
49348
08ac5c346b16
(digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
1509 submenu_n_panes[i] = menu_items_n_panes; |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1510 |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1511 submenu_end[i] = menu_items_used; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1512 } |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1513 |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1514 finish_menu_items (); |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1515 |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1516 /* Convert menu_items into widget_value trees |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1517 to display the menu. This cannot evaluate Lisp code. */ |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1518 |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1519 wv = xmalloc_widget_value (); |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1520 wv->name = "menubar"; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1521 wv->value = 0; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1522 wv->enabled = 1; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1523 wv->button_type = BUTTON_TYPE_NONE; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1524 wv->help = Qnil; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1525 first_wv = wv; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1526 |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1527 for (i = 0; i < last_i; i += 4) |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1528 { |
49348
08ac5c346b16
(digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
1529 menu_items_n_panes = submenu_n_panes[i]; |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1530 wv = digest_single_submenu (submenu_start[i], submenu_end[i], |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1531 submenu_top_level_items[i]); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
1532 if (prev_wv) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1533 prev_wv->next = wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1534 else |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1535 first_wv->contents = wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1536 /* Don't set wv->name here; GC during the loop might relocate it. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1537 wv->enabled = 1; |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1538 wv->button_type = BUTTON_TYPE_NONE; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1539 prev_wv = wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1540 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1541 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1542 set_buffer_internal_1 (prev); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1543 unbind_to (specpdl_count, Qnil); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1544 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1545 /* If there has been no change in the Lisp-level contents |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1546 of the menu bar, skip redisplaying it. Just exit. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1547 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1548 for (i = 0; i < previous_menu_items_used; i++) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1549 if (menu_items_used == i |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1550 || (!EQ (previous_items[i], AREF (menu_items, i)))) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1551 break; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1552 if (i == menu_items_used && i == previous_menu_items_used && i != 0) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1553 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1554 free_menubar_widget_value_tree (first_wv); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1555 menu_items = Qnil; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1556 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1557 return; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1558 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1559 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1560 /* Now GC cannot happen during the lifetime of the widget_value, |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1561 so it's safe to store data from a Lisp_String, as long as |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1562 local copies are made when the actual menu is created. |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1563 Windows takes care of this for normal string items, but |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1564 not for owner-drawn items or additional item-info. */ |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1565 wv = first_wv->contents; |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1566 for (i = 0; i < ASIZE (items); i += 4) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1567 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1568 Lisp_Object string; |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1569 string = AREF (items, i + 1); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1570 if (NILP (string)) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1571 break; |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
1572 wv->name = (char *) SDATA (string); |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1573 update_submenu_strings (wv->contents); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1574 wv = wv->next; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1575 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1576 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1577 f->menu_bar_vector = menu_items; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1578 f->menu_bar_items_used = menu_items_used; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1579 menu_items = Qnil; |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1580 } |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1581 else |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1582 { |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1583 /* Make a widget-value tree containing |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1584 just the top level menu bar strings. */ |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1585 |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1586 wv = xmalloc_widget_value (); |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1587 wv->name = "menubar"; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1588 wv->value = 0; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1589 wv->enabled = 1; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1590 wv->button_type = BUTTON_TYPE_NONE; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1591 wv->help = Qnil; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1592 first_wv = wv; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1593 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1594 items = FRAME_MENU_BAR_ITEMS (f); |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1595 for (i = 0; i < ASIZE (items); i += 4) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1596 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1597 Lisp_Object string; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1598 |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1599 string = AREF (items, i + 1); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1600 if (NILP (string)) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1601 break; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1602 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1603 wv = xmalloc_widget_value (); |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
1604 wv->name = (char *) SDATA (string); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1605 wv->value = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1606 wv->enabled = 1; |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1607 wv->button_type = BUTTON_TYPE_NONE; |
42589
ac09ecabe088
(single_submenu, set_frame_menubar, w32_menu_show):
Jason Rumney <jasonr@gnu.org>
parents:
42584
diff
changeset
|
1608 wv->help = Qnil; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1609 /* This prevents lwlib from assuming this |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1610 menu item is really supposed to be empty. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1611 /* The EMACS_INT cast avoids a warning. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1612 This value just has to be different from small integers. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1613 wv->call_data = (void *) (EMACS_INT) (-1); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1614 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
1615 if (prev_wv) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1616 prev_wv->next = wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1617 else |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1618 first_wv->contents = wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1619 prev_wv = wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1620 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1621 |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1622 /* Forget what we thought we knew about what is in the |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1623 detailed contents of the menu bar menus. |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1624 Changing the top level always destroys the contents. */ |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1625 f->menu_bar_items_used = 0; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1626 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1627 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1628 /* Create or update the menu bar widget. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1629 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1630 BLOCK_INPUT; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1631 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1632 if (menubar_widget) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1633 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1634 /* Empty current menubar, rather than creating a fresh one. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1635 while (DeleteMenu (menubar_widget, 0, MF_BYPOSITION)) |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1636 ; |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1637 } |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1638 else |
13434 | 1639 { |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1640 menubar_widget = CreateMenu (); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1641 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1642 fill_in_menu (menubar_widget, first_wv->contents); |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1643 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1644 free_menubar_widget_value_tree (first_wv); |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1645 |
13434 | 1646 { |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1647 HMENU old_widget = f->output_data.w32->menubar_widget; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1648 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1649 f->output_data.w32->menubar_widget = menubar_widget; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1650 SetMenu (FRAME_W32_WINDOW (f), f->output_data.w32->menubar_widget); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
1651 /* Causes flicker when menu bar is updated |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1652 DrawMenuBar (FRAME_W32_WINDOW (f)); */ |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1653 |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1654 /* Force the window size to be recomputed so that the frame's text |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1655 area remains the same, if menubar has just been created. */ |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1656 if (old_widget == NULL) |
51206
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
49600
diff
changeset
|
1657 x_set_window_size (f, 0, FRAME_COLS (f), FRAME_LINES (f)); |
13434 | 1658 } |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1659 |
13434 | 1660 UNBLOCK_INPUT; |
1661 } | |
1662 | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1663 /* Called from Fx_create_frame to create the initial menubar of a frame |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1664 before it is mapped, so that the window is mapped with the menubar already |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1665 there instead of us tacking it on later and thrashing the window after it |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1666 is visible. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1667 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1668 void |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1669 initialize_frame_menubar (f) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1670 FRAME_PTR f; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1671 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1672 /* This function is called before the first chance to redisplay |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1673 the frame. It has to be, so the frame will have the right size. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1674 FRAME_MENU_BAR_ITEMS (f) = menu_bar_items (FRAME_MENU_BAR_ITEMS (f)); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1675 set_frame_menubar (f, 1, 1); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1676 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1677 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1678 /* Get rid of the menu bar of frame F, and free its storage. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1679 This is used when deleting a frame, and when turning off the menu bar. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1680 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1681 void |
13434 | 1682 free_frame_menubar (f) |
1683 FRAME_PTR f; | |
1684 { | |
1685 BLOCK_INPUT; | |
1686 | |
1687 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15276
diff
changeset
|
1688 HMENU old = GetMenu (FRAME_W32_WINDOW (f)); |
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15276
diff
changeset
|
1689 SetMenu (FRAME_W32_WINDOW (f), NULL); |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1690 f->output_data.w32->menubar_widget = NULL; |
13434 | 1691 DestroyMenu (old); |
1692 } | |
40119
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1693 |
13434 | 1694 UNBLOCK_INPUT; |
1695 } | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1696 |
13434 | 1697 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1698 /* w32_menu_show actually displays a menu using the panes and items in |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1699 menu_items and returns the value selected from it; we assume input |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1700 is blocked by the caller. */ |
13434 | 1701 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1702 /* F is the frame the menu is for. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1703 X and Y are the frame-relative specified position, |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1704 relative to the inside upper left corner of the frame F. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1705 FOR_CLICK is nonzero if this menu was invoked for a mouse click. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1706 KEYMAPS is 1 if this menu was specified with keymaps; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1707 in that case, we return a list containing the chosen item's value |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1708 and perhaps also the pane's prefix. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1709 TITLE is the specified menu title. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1710 ERROR is a place to store an error message string in case of failure. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1711 (We return nil on failure, but the value doesn't actually matter.) */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1712 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1713 static Lisp_Object |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1714 w32_menu_show (f, x, y, for_click, keymaps, title, error) |
13434 | 1715 FRAME_PTR f; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1716 int x; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1717 int y; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1718 int for_click; |
13434 | 1719 int keymaps; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1720 Lisp_Object title; |
13434 | 1721 char **error; |
1722 { | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1723 int i; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1724 int menu_item_selection; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1725 HMENU menu; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1726 POINT pos; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1727 widget_value *wv, *save_wv = 0, *first_wv = 0, *prev_wv = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1728 widget_value **submenu_stack |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1729 = (widget_value **) alloca (menu_items_used * sizeof (widget_value *)); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1730 Lisp_Object *subprefix_stack |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1731 = (Lisp_Object *) alloca (menu_items_used * sizeof (Lisp_Object)); |
13434 | 1732 int submenu_depth = 0; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1733 int first_pane; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1734 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1735 *error = NULL; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1736 |
13434 | 1737 if (menu_items_used <= MENU_ITEMS_PANE_LENGTH) |
1738 { | |
1739 *error = "Empty menu"; | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1740 return Qnil; |
13434 | 1741 } |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1742 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1743 /* Create a tree of widget_value objects |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1744 representing the panes and their items. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1745 wv = xmalloc_widget_value (); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1746 wv->name = "menu"; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1747 wv->value = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1748 wv->enabled = 1; |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1749 wv->button_type = BUTTON_TYPE_NONE; |
42613 | 1750 wv->help = Qnil; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1751 first_wv = wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1752 first_pane = 1; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
1753 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1754 /* Loop over all panes and items, filling in the tree. */ |
13434 | 1755 i = 0; |
1756 while (i < menu_items_used) | |
1757 { | |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1758 if (EQ (AREF (menu_items, i), Qnil)) |
13434 | 1759 { |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1760 submenu_stack[submenu_depth++] = save_wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1761 save_wv = prev_wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1762 prev_wv = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1763 first_pane = 1; |
13434 | 1764 i++; |
1765 } | |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1766 else if (EQ (AREF (menu_items, i), Qlambda)) |
13434 | 1767 { |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1768 prev_wv = save_wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1769 save_wv = submenu_stack[--submenu_depth]; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1770 first_pane = 0; |
13434 | 1771 i++; |
1772 } | |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1773 else if (EQ (AREF (menu_items, i), Qt) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1774 && submenu_depth != 0) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1775 i += MENU_ITEMS_PANE_LENGTH; |
13434 | 1776 /* Ignore a nil in the item list. |
1777 It's meaningful only for dialog boxes. */ | |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1778 else if (EQ (AREF (menu_items, i), Qquote)) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1779 i += 1; |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1780 else if (EQ (AREF (menu_items, i), Qt)) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1781 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1782 /* Create a new pane. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1783 Lisp_Object pane_name, prefix; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1784 char *pane_string; |
40119
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1785 pane_name = AREF (menu_items, i + MENU_ITEMS_PANE_NAME); |
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1786 prefix = AREF (menu_items, i + MENU_ITEMS_PANE_PREFIX); |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1787 |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1788 if (STRINGP (pane_name)) |
40119
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1789 { |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1790 if (unicode_append_menu) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1791 pane_name = ENCODE_UTF_8 (pane_name); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1792 else if (STRING_MULTIBYTE (pane_name)) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1793 pane_name = ENCODE_SYSTEM (pane_name); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1794 |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1795 ASET (menu_items, i + MENU_ITEMS_PANE_NAME, pane_name); |
40119
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1796 } |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1797 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1798 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
|
1799 ? "" : (char *) SDATA (pane_name)); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1800 /* If there is just one top-level pane, put all its items directly |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1801 under the top-level menu. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1802 if (menu_items_n_panes == 1) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1803 pane_string = ""; |
13434 | 1804 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1805 /* If the pane has a meaningful name, |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1806 make the pane a top-level menu item |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1807 with its items as a submenu beneath it. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1808 if (!keymaps && strcmp (pane_string, "")) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1809 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1810 wv = xmalloc_widget_value (); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1811 if (save_wv) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1812 save_wv->next = wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1813 else |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1814 first_wv->contents = wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1815 wv->name = pane_string; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1816 if (keymaps && !NILP (prefix)) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1817 wv->name++; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1818 wv->value = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1819 wv->enabled = 1; |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1820 wv->button_type = BUTTON_TYPE_NONE; |
42589
ac09ecabe088
(single_submenu, set_frame_menubar, w32_menu_show):
Jason Rumney <jasonr@gnu.org>
parents:
42584
diff
changeset
|
1821 wv->help = Qnil; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1822 save_wv = wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1823 prev_wv = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1824 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1825 else if (first_pane) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1826 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1827 save_wv = wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1828 prev_wv = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1829 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1830 first_pane = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1831 i += MENU_ITEMS_PANE_LENGTH; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1832 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1833 else |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1834 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1835 /* Create a new item within current pane. */ |
27896
75f296b1a872
(single_submenu): Set up help string.
Jason Rumney <jasonr@gnu.org>
parents:
27400
diff
changeset
|
1836 Lisp_Object item_name, enable, descrip, def, type, selected, help; |
75f296b1a872
(single_submenu): Set up help string.
Jason Rumney <jasonr@gnu.org>
parents:
27400
diff
changeset
|
1837 |
40119
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1838 item_name = AREF (menu_items, i + MENU_ITEMS_ITEM_NAME); |
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1839 enable = AREF (menu_items, i + MENU_ITEMS_ITEM_ENABLE); |
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1840 descrip = AREF (menu_items, i + MENU_ITEMS_ITEM_EQUIV_KEY); |
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1841 def = AREF (menu_items, i + MENU_ITEMS_ITEM_DEFINITION); |
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1842 type = AREF (menu_items, i + MENU_ITEMS_ITEM_TYPE); |
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1843 selected = AREF (menu_items, i + MENU_ITEMS_ITEM_SELECTED); |
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1844 help = AREF (menu_items, i + MENU_ITEMS_ITEM_HELP); |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1845 |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1846 if (STRINGP (item_name)) |
40119
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1847 { |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1848 if (unicode_append_menu) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1849 item_name = ENCODE_UTF_8 (item_name); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1850 else if (STRING_MULTIBYTE (item_name)) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1851 item_name = ENCODE_SYSTEM (item_name); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1852 |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1853 ASET (menu_items, i + MENU_ITEMS_ITEM_NAME, item_name); |
40119
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1854 } |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1855 |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1856 if (STRINGP (descrip) && STRING_MULTIBYTE (descrip)) |
40119
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1857 { |
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1858 descrip = ENCODE_SYSTEM (descrip); |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1859 ASET (menu_items, i + MENU_ITEMS_ITEM_EQUIV_KEY, descrip); |
40119
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
1860 } |
13434 | 1861 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1862 wv = xmalloc_widget_value (); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
1863 if (prev_wv) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1864 prev_wv->next = wv; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
1865 else |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1866 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
|
1867 wv->name = (char *) SDATA (item_name); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1868 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
|
1869 wv->key = (char *) SDATA (descrip); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1870 wv->value = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1871 /* Use the contents index as call_data, since we are |
41251
e6612d08452f
(w32_menu_show, push_menu_pane): Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
41108
diff
changeset
|
1872 restricted to 16-bits. */ |
22737
41e01b5de7cc
(w32_menu_show): Set widget call_data to 0 if definition is nil.
Andrew Innes <andrewi@gnu.org>
parents:
21741
diff
changeset
|
1873 wv->call_data = !NILP (def) ? (void *) (EMACS_INT) i : 0; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1874 wv->enabled = !NILP (enable); |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1875 |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1876 if (NILP (type)) |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1877 wv->button_type = BUTTON_TYPE_NONE; |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1878 else if (EQ (type, QCtoggle)) |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1879 wv->button_type = BUTTON_TYPE_TOGGLE; |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1880 else if (EQ (type, QCradio)) |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1881 wv->button_type = BUTTON_TYPE_RADIO; |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1882 else |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1883 abort (); |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1884 |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1885 wv->selected = !NILP (selected); |
41908
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
1886 if (!STRINGP (help)) |
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
1887 help = Qnil; |
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
1888 |
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
1889 wv->help = help; |
28275
2c8492145fc8
(single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents:
27932
diff
changeset
|
1890 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1891 prev_wv = wv; |
13434 | 1892 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1893 i += MENU_ITEMS_ITEM_LENGTH; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1894 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1895 } |
13434 | 1896 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1897 /* Deal with the title, if it is non-nil. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1898 if (!NILP (title)) |
13434 | 1899 { |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1900 widget_value *wv_title = xmalloc_widget_value (); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1901 widget_value *wv_sep = xmalloc_widget_value (); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1902 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1903 /* Maybe replace this separator with a bitmap or owner-draw item |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1904 so that it looks better. Having two separators looks odd. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1905 wv_sep->name = "--"; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1906 wv_sep->next = first_wv->contents; |
42589
ac09ecabe088
(single_submenu, set_frame_menubar, w32_menu_show):
Jason Rumney <jasonr@gnu.org>
parents:
42584
diff
changeset
|
1907 wv_sep->help = Qnil; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1908 |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1909 if (unicode_append_menu) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1910 title = ENCODE_UTF_8 (title); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1911 else if (STRING_MULTIBYTE (title)) |
29320
33aa00975055
(single_submenu, w32_menu_show): Call ENCODE_SYSTEM on menu strings.
Jason Rumney <jasonr@gnu.org>
parents:
28275
diff
changeset
|
1912 title = ENCODE_SYSTEM (title); |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1913 |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
1914 wv_title->name = (char *) SDATA (title); |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32671
diff
changeset
|
1915 wv_title->enabled = TRUE; |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32671
diff
changeset
|
1916 wv_title->title = TRUE; |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1917 wv_title->button_type = BUTTON_TYPE_NONE; |
42589
ac09ecabe088
(single_submenu, set_frame_menubar, w32_menu_show):
Jason Rumney <jasonr@gnu.org>
parents:
42584
diff
changeset
|
1918 wv_title->help = Qnil; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1919 wv_title->next = wv_sep; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1920 first_wv->contents = wv_title; |
13434 | 1921 } |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1922 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1923 /* Actually create the menu. */ |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1924 current_popup_menu = menu = CreatePopupMenu (); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1925 fill_in_menu (menu, first_wv->contents); |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1926 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1927 /* Adjust coordinates to be root-window-relative. */ |
13434 | 1928 pos.x = x; |
1929 pos.y = y; | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15276
diff
changeset
|
1930 ClientToScreen (FRAME_W32_WINDOW (f), &pos); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1931 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1932 /* No selection has been chosen yet. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1933 menu_item_selection = 0; |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1934 |
13434 | 1935 /* Display the menu. */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
1936 menu_item_selection = SendMessage (FRAME_W32_WINDOW (f), |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1937 WM_EMACS_TRACKPOPUPMENU, |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1938 (WPARAM)menu, (LPARAM)&pos); |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1939 |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1940 /* Clean up extraneous mouse events which might have been generated |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1941 during the call. */ |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1942 discard_mouse_events (); |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
1943 |
30238
4a3b87cc6f04
(w32_menu_show): Call free_menubar_widget_value_tree after menu is
Jason Rumney <jasonr@gnu.org>
parents:
30178
diff
changeset
|
1944 /* Free the widget_value objects we used to specify the contents. */ |
4a3b87cc6f04
(w32_menu_show): Call free_menubar_widget_value_tree after menu is
Jason Rumney <jasonr@gnu.org>
parents:
30178
diff
changeset
|
1945 free_menubar_widget_value_tree (first_wv); |
4a3b87cc6f04
(w32_menu_show): Call free_menubar_widget_value_tree after menu is
Jason Rumney <jasonr@gnu.org>
parents:
30178
diff
changeset
|
1946 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1947 DestroyMenu (menu); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1948 |
76080
077c9ec8eca6
* w32menu.c (Fx_popup_menu): Don't free menu strings here.
Jason Rumney <jasonr@gnu.org>
parents:
76074
diff
changeset
|
1949 /* Free the owner-drawn and help-echo menu strings. */ |
077c9ec8eca6
* w32menu.c (Fx_popup_menu): Don't free menu strings here.
Jason Rumney <jasonr@gnu.org>
parents:
76074
diff
changeset
|
1950 w32_free_menu_strings (FRAME_W32_WINDOW (f)); |
76086
da9b24e47b34
(w32_menu_show): Mark the frame's menu as inactive when popup menu
Jason Rumney <jasonr@gnu.org>
parents:
76080
diff
changeset
|
1951 f->output_data.w32->menubar_active = 0; |
76080
077c9ec8eca6
* w32menu.c (Fx_popup_menu): Don't free menu strings here.
Jason Rumney <jasonr@gnu.org>
parents:
76074
diff
changeset
|
1952 |
13434 | 1953 /* Find the selected item, and its pane, to return |
1954 the proper value. */ | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1955 if (menu_item_selection != 0) |
13434 | 1956 { |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1957 Lisp_Object prefix, entry; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1958 |
38371
eb915f0b1d6e
(menubar_selection_callback, w32_menu_show): Initialize `entry' to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
36677
diff
changeset
|
1959 prefix = entry = Qnil; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1960 i = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1961 while (i < menu_items_used) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1962 { |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1963 if (EQ (AREF (menu_items, i), Qnil)) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1964 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1965 subprefix_stack[submenu_depth++] = prefix; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1966 prefix = entry; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1967 i++; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1968 } |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1969 else if (EQ (AREF (menu_items, i), Qlambda)) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1970 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1971 prefix = subprefix_stack[--submenu_depth]; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1972 i++; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1973 } |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1974 else if (EQ (AREF (menu_items, i), Qt)) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1975 { |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1976 prefix = AREF (menu_items, i + MENU_ITEMS_PANE_PREFIX); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1977 i += MENU_ITEMS_PANE_LENGTH; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1978 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1979 /* Ignore a nil in the item list. |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1980 It's meaningful only for dialog boxes. */ |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1981 else if (EQ (AREF (menu_items, i), Qquote)) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1982 i += 1; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1983 else |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1984 { |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1985 entry = AREF (menu_items, i + MENU_ITEMS_ITEM_VALUE); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1986 if (menu_item_selection == i) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1987 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1988 if (keymaps != 0) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1989 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1990 int j; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1991 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1992 entry = Fcons (entry, Qnil); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1993 if (!NILP (prefix)) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1994 entry = Fcons (prefix, entry); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1995 for (j = submenu_depth - 1; j >= 0; j--) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1996 if (!NILP (subprefix_stack[j])) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1997 entry = Fcons (subprefix_stack[j], entry); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1998 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1999 return entry; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2000 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2001 i += MENU_ITEMS_ITEM_LENGTH; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2002 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2003 } |
13434 | 2004 } |
72260
6e63f47b8977
(w32_menu_show, w32_dialog_show): Call Fsignal to quit
Jason Rumney <jasonr@gnu.org>
parents:
69443
diff
changeset
|
2005 else if (!for_click) |
6e63f47b8977
(w32_menu_show, w32_dialog_show): Call Fsignal to quit
Jason Rumney <jasonr@gnu.org>
parents:
69443
diff
changeset
|
2006 /* Make "Cancel" equivalent to C-g. */ |
6e63f47b8977
(w32_menu_show, w32_dialog_show): Call Fsignal to quit
Jason Rumney <jasonr@gnu.org>
parents:
69443
diff
changeset
|
2007 Fsignal (Qquit, Qnil); |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
2008 |
13434 | 2009 return Qnil; |
2010 } | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2011 |
13434 | 2012 |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2013 #ifdef HAVE_DIALOGS |
93979
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2014 /* TODO: On Windows, there are two ways of defining a dialog. |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2015 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2016 1. Create a predefined dialog resource and include it in nt/emacs.rc. |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2017 Using this method, we could then set the titles and make unneeded |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2018 buttons invisible before displaying the dialog. Everything would |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2019 be a fixed size though, so there is a risk that text does not |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2020 fit on a button. |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2021 2. Create the dialog template in memory on the fly. This allows us |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2022 to size the dialog and buttons dynamically, probably giving more |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2023 natural looking results for dialogs with few buttons, and eliminating |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2024 the problem of text overflowing the buttons. But the API for this is |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2025 quite complex - structures have to be allocated in particular ways, |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2026 text content is tacked onto the end of structures in variable length |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2027 arrays with further structures tacked on after these, there are |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2028 certain alignment requirements for all this, and we have to |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2029 measure all the text and convert to "dialog coordinates" to figure |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2030 out how big to make everything. |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2031 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2032 For now, we'll just stick with menus for dialogs that are more |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2033 complicated than simple yes/no type questions for which we can use |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2034 the MessageBox function. |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2035 */ |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2036 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2037 static char * button_names [] = { |
13434 | 2038 "button1", "button2", "button3", "button4", "button5", |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2039 "button6", "button7", "button8", "button9", "button10" }; |
13434 | 2040 |
2041 static Lisp_Object | |
62668
d126643d7af1
(Fx_popup_dialog): Add a third boolean argument to select frame title
Nick Roberts <nickrob@snap.net.nz>
parents:
56973
diff
changeset
|
2042 w32_dialog_show (f, keymaps, title, header, error) |
13434 | 2043 FRAME_PTR f; |
2044 int keymaps; | |
62668
d126643d7af1
(Fx_popup_dialog): Add a third boolean argument to select frame title
Nick Roberts <nickrob@snap.net.nz>
parents:
56973
diff
changeset
|
2045 Lisp_Object title, header; |
13434 | 2046 char **error; |
2047 { | |
2048 int i, nb_buttons=0; | |
2049 char dialog_name[6]; | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2050 int menu_item_selection; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2051 |
38371
eb915f0b1d6e
(menubar_selection_callback, w32_menu_show): Initialize `entry' to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
36677
diff
changeset
|
2052 widget_value *wv, *first_wv = 0, *prev_wv = 0; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2053 |
13434 | 2054 /* Number of elements seen so far, before boundary. */ |
2055 int left_count = 0; | |
2056 /* 1 means we've seen the boundary between left-hand elts and right-hand. */ | |
2057 int boundary_seen = 0; | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2058 |
13434 | 2059 *error = NULL; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2060 |
13434 | 2061 if (menu_items_n_panes > 1) |
2062 { | |
2063 *error = "Multiple panes in dialog box"; | |
2064 return Qnil; | |
2065 } | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2066 |
13434 | 2067 /* Create a tree of widget_value objects |
2068 representing the text label and buttons. */ | |
2069 { | |
2070 Lisp_Object pane_name, prefix; | |
2071 char *pane_string; | |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
2072 pane_name = AREF (menu_items, MENU_ITEMS_PANE_NAME); |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
2073 prefix = AREF (menu_items, MENU_ITEMS_PANE_PREFIX); |
13434 | 2074 pane_string = (NILP (pane_name) |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
2075 ? "" : (char *) SDATA (pane_name)); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2076 prev_wv = xmalloc_widget_value (); |
13434 | 2077 prev_wv->value = pane_string; |
2078 if (keymaps && !NILP (prefix)) | |
2079 prev_wv->name++; | |
2080 prev_wv->enabled = 1; | |
2081 prev_wv->name = "message"; | |
42589
ac09ecabe088
(single_submenu, set_frame_menubar, w32_menu_show):
Jason Rumney <jasonr@gnu.org>
parents:
42584
diff
changeset
|
2082 prev_wv->help = Qnil; |
13434 | 2083 first_wv = prev_wv; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
2084 |
13434 | 2085 /* Loop over all panes and items, filling in the tree. */ |
2086 i = MENU_ITEMS_PANE_LENGTH; | |
2087 while (i < menu_items_used) | |
2088 { | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
2089 |
13434 | 2090 /* Create a new item within current pane. */ |
27896
75f296b1a872
(single_submenu): Set up help string.
Jason Rumney <jasonr@gnu.org>
parents:
27400
diff
changeset
|
2091 Lisp_Object item_name, enable, descrip, help; |
75f296b1a872
(single_submenu): Set up help string.
Jason Rumney <jasonr@gnu.org>
parents:
27400
diff
changeset
|
2092 |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
2093 item_name = AREF (menu_items, i + MENU_ITEMS_ITEM_NAME); |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
2094 enable = AREF (menu_items, i + MENU_ITEMS_ITEM_ENABLE); |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
2095 descrip = AREF (menu_items, i + MENU_ITEMS_ITEM_EQUIV_KEY); |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
2096 help = AREF (menu_items, i + MENU_ITEMS_ITEM_HELP); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
2097 |
13434 | 2098 if (NILP (item_name)) |
2099 { | |
2100 free_menubar_widget_value_tree (first_wv); | |
2101 *error = "Submenu in dialog items"; | |
2102 return Qnil; | |
2103 } | |
2104 if (EQ (item_name, Qquote)) | |
2105 { | |
2106 /* This is the boundary between left-side elts | |
2107 and right-side elts. Stop incrementing right_count. */ | |
2108 boundary_seen = 1; | |
2109 i++; | |
2110 continue; | |
2111 } | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2112 if (nb_buttons >= 9) |
13434 | 2113 { |
2114 free_menubar_widget_value_tree (first_wv); | |
2115 *error = "Too many dialog items"; | |
2116 return Qnil; | |
2117 } | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2118 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2119 wv = xmalloc_widget_value (); |
13434 | 2120 prev_wv->next = wv; |
2121 wv->name = (char *) button_names[nb_buttons]; | |
2122 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
|
2123 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
|
2124 wv->value = (char *) SDATA (item_name); |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
2125 wv->call_data = (void *) &AREF (menu_items, i); |
13434 | 2126 wv->enabled = !NILP (enable); |
42589
ac09ecabe088
(single_submenu, set_frame_menubar, w32_menu_show):
Jason Rumney <jasonr@gnu.org>
parents:
42584
diff
changeset
|
2127 wv->help = Qnil; |
13434 | 2128 prev_wv = wv; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2129 |
13434 | 2130 if (! boundary_seen) |
2131 left_count++; | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2132 |
13434 | 2133 nb_buttons++; |
2134 i += MENU_ITEMS_ITEM_LENGTH; | |
2135 } | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2136 |
13434 | 2137 /* If the boundary was not specified, |
2138 by default put half on the left and half on the right. */ | |
2139 if (! boundary_seen) | |
2140 left_count = nb_buttons - nb_buttons / 2; | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2141 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2142 wv = xmalloc_widget_value (); |
13434 | 2143 wv->name = dialog_name; |
42589
ac09ecabe088
(single_submenu, set_frame_menubar, w32_menu_show):
Jason Rumney <jasonr@gnu.org>
parents:
42584
diff
changeset
|
2144 wv->help = Qnil; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2145 |
62668
d126643d7af1
(Fx_popup_dialog): Add a third boolean argument to select frame title
Nick Roberts <nickrob@snap.net.nz>
parents:
56973
diff
changeset
|
2146 /* Frame title: 'Q' = Question, 'I' = Information. |
d126643d7af1
(Fx_popup_dialog): Add a third boolean argument to select frame title
Nick Roberts <nickrob@snap.net.nz>
parents:
56973
diff
changeset
|
2147 Can also have 'E' = Error if, one day, we want |
d126643d7af1
(Fx_popup_dialog): Add a third boolean argument to select frame title
Nick Roberts <nickrob@snap.net.nz>
parents:
56973
diff
changeset
|
2148 a popup for errors. */ |
d126643d7af1
(Fx_popup_dialog): Add a third boolean argument to select frame title
Nick Roberts <nickrob@snap.net.nz>
parents:
56973
diff
changeset
|
2149 if (NILP(header)) |
d126643d7af1
(Fx_popup_dialog): Add a third boolean argument to select frame title
Nick Roberts <nickrob@snap.net.nz>
parents:
56973
diff
changeset
|
2150 dialog_name[0] = 'Q'; |
d126643d7af1
(Fx_popup_dialog): Add a third boolean argument to select frame title
Nick Roberts <nickrob@snap.net.nz>
parents:
56973
diff
changeset
|
2151 else |
d126643d7af1
(Fx_popup_dialog): Add a third boolean argument to select frame title
Nick Roberts <nickrob@snap.net.nz>
parents:
56973
diff
changeset
|
2152 dialog_name[0] = 'I'; |
d126643d7af1
(Fx_popup_dialog): Add a third boolean argument to select frame title
Nick Roberts <nickrob@snap.net.nz>
parents:
56973
diff
changeset
|
2153 |
13434 | 2154 /* Dialog boxes use a really stupid name encoding |
2155 which specifies how many buttons to use | |
62668
d126643d7af1
(Fx_popup_dialog): Add a third boolean argument to select frame title
Nick Roberts <nickrob@snap.net.nz>
parents:
56973
diff
changeset
|
2156 and how many buttons are on the right. */ |
13434 | 2157 dialog_name[1] = '0' + nb_buttons; |
2158 dialog_name[2] = 'B'; | |
2159 dialog_name[3] = 'R'; | |
2160 /* Number of buttons to put on the right. */ | |
2161 dialog_name[4] = '0' + nb_buttons - left_count; | |
2162 dialog_name[5] = 0; | |
2163 wv->contents = first_wv; | |
2164 first_wv = wv; | |
2165 } | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2166 |
13434 | 2167 /* Actually create the dialog. */ |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2168 dialog_id = widget_id_tick++; |
13434 | 2169 menu = lw_create_widget (first_wv->name, "dialog", dialog_id, first_wv, |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15276
diff
changeset
|
2170 f->output_data.w32->widget, 1, 0, |
13434 | 2171 dialog_selection_callback, 0); |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32671
diff
changeset
|
2172 lw_modify_all_widgets (dialog_id, first_wv->contents, TRUE); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2173 |
13434 | 2174 /* Free the widget_value objects we used to specify the contents. */ |
2175 free_menubar_widget_value_tree (first_wv); | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2176 |
13434 | 2177 /* No selection has been chosen yet. */ |
2178 menu_item_selection = 0; | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2179 |
13434 | 2180 /* Display the menu. */ |
2181 lw_pop_up_all_widgets (dialog_id); | |
2182 | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2183 /* Process events that apply to the menu. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2184 popup_get_selection ((XEvent *) 0, FRAME_X_DISPLAY_INFO (f), dialog_id); |
13434 | 2185 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
2186 lw_destroy_all_widgets (dialog_id); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2187 |
13434 | 2188 /* Find the selected item, and its pane, to return |
2189 the proper value. */ | |
2190 if (menu_item_selection != 0) | |
2191 { | |
2192 Lisp_Object prefix; | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2193 |
13434 | 2194 prefix = Qnil; |
2195 i = 0; | |
2196 while (i < menu_items_used) | |
2197 { | |
2198 Lisp_Object entry; | |
2199 | |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
2200 if (EQ (AREF (menu_items, i), Qt)) |
13434 | 2201 { |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
2202 prefix = AREF (menu_items, i + MENU_ITEMS_PANE_PREFIX); |
13434 | 2203 i += MENU_ITEMS_PANE_LENGTH; |
2204 } | |
2205 else | |
2206 { | |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
2207 entry = AREF (menu_items, i + MENU_ITEMS_ITEM_VALUE); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2208 if (menu_item_selection == i) |
13434 | 2209 { |
2210 if (keymaps != 0) | |
2211 { | |
2212 entry = Fcons (entry, Qnil); | |
2213 if (!NILP (prefix)) | |
2214 entry = Fcons (prefix, entry); | |
2215 } | |
2216 return entry; | |
2217 } | |
2218 i += MENU_ITEMS_ITEM_LENGTH; | |
2219 } | |
2220 } | |
2221 } | |
72260
6e63f47b8977
(w32_menu_show, w32_dialog_show): Call Fsignal to quit
Jason Rumney <jasonr@gnu.org>
parents:
69443
diff
changeset
|
2222 else |
6e63f47b8977
(w32_menu_show, w32_dialog_show): Call Fsignal to quit
Jason Rumney <jasonr@gnu.org>
parents:
69443
diff
changeset
|
2223 /* Make "Cancel" equivalent to C-g. */ |
6e63f47b8977
(w32_menu_show, w32_dialog_show): Call Fsignal to quit
Jason Rumney <jasonr@gnu.org>
parents:
69443
diff
changeset
|
2224 Fsignal (Qquit, Qnil); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2225 |
13434 | 2226 return Qnil; |
2227 } | |
93979
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2228 #else /* !HAVE_DIALOGS */ |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2229 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2230 /* Currently we only handle Yes No dialogs (y-or-n-p and yes-or-no-p) as |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2231 simple dialogs. We could handle a few more, but I'm not aware of |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2232 anywhere in Emacs that uses the other specific dialog choices that |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2233 MessageBox provides. */ |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2234 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2235 static int is_simple_dialog (contents) |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2236 Lisp_Object contents; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2237 { |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2238 Lisp_Object options = XCDR (contents); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2239 Lisp_Object name, yes, no, other; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2240 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2241 yes = build_string ("Yes"); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2242 no = build_string ("No"); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2243 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2244 if (!CONSP (options)) |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2245 return 0; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2246 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2247 name = XCAR (XCAR (options)); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2248 if (!CONSP (options)) |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2249 return 0; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2250 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2251 if (!NILP (Fstring_equal (name, yes))) |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2252 other = no; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2253 else if (!NILP (Fstring_equal (name, no))) |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2254 other = yes; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2255 else |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2256 return 0; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2257 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2258 options = XCDR (options); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2259 if (!CONSP (options)) |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2260 return 0; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2261 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2262 name = XCAR (XCAR (options)); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2263 if (NILP (Fstring_equal (name, other))) |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2264 return 0; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2265 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2266 /* Check there are no more options. */ |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2267 options = XCDR (options); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2268 return !(CONSP (options)); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2269 } |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2270 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2271 static Lisp_Object simple_dialog_show (f, contents, header) |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2272 FRAME_PTR f; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2273 Lisp_Object contents, header; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2274 { |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2275 int answer; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2276 UINT type; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2277 char *text, *title; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2278 Lisp_Object lispy_answer = Qnil, temp = XCAR (contents); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2279 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2280 if (STRINGP (temp)) |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2281 text = SDATA (temp); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2282 else |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2283 text = ""; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2284 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2285 if (NILP (header)) |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2286 { |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2287 title = "Question"; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2288 type = MB_ICONQUESTION; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2289 } |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2290 else |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2291 { |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2292 title = "Information"; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2293 type = MB_ICONINFORMATION; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2294 } |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2295 type |= MB_YESNO; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2296 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2297 /* Since we only handle Yes/No dialogs, and we already checked |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2298 is_simple_dialog, we don't need to worry about checking contents |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2299 to see what type of dialog to use. */ |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2300 answer = MessageBox (FRAME_W32_WINDOW (f), text, title, type); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2301 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2302 if (answer == IDYES) |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2303 lispy_answer = build_string ("Yes"); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2304 else if (answer == IDNO) |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2305 lispy_answer = build_string ("No"); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2306 else |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2307 Fsignal (Qquit, Qnil); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2308 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2309 for (temp = XCDR (contents); CONSP (temp); temp = XCDR (temp)) |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2310 { |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2311 Lisp_Object item, name, value; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2312 item = XCAR (temp); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2313 if (CONSP (item)) |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2314 { |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2315 name = XCAR (item); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2316 value = XCDR (item); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2317 } |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2318 else |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2319 { |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2320 name = item; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2321 value = Qnil; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2322 } |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2323 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2324 if (!NILP (Fstring_equal (name, lispy_answer))) |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2325 { |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2326 return value; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2327 } |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2328 } |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2329 Fsignal (Qquit, Qnil); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2330 return Qnil; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2331 } |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
2332 #endif /* !HAVE_DIALOGS */ |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2333 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2334 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2335 /* Is this item a separator? */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2336 static int |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2337 name_is_separator (name) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2338 char *name; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2339 { |
38371
eb915f0b1d6e
(menubar_selection_callback, w32_menu_show): Initialize `entry' to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
36677
diff
changeset
|
2340 char *start = name; |
eb915f0b1d6e
(menubar_selection_callback, w32_menu_show): Initialize `entry' to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
36677
diff
changeset
|
2341 |
eb915f0b1d6e
(menubar_selection_callback, w32_menu_show): Initialize `entry' to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
36677
diff
changeset
|
2342 /* Check if name string consists of only dashes ('-'). */ |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2343 while (*name == '-') name++; |
38371
eb915f0b1d6e
(menubar_selection_callback, w32_menu_show): Initialize `entry' to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
36677
diff
changeset
|
2344 /* Separators can also be of the form "--:TripleSuperMegaEtched" |
eb915f0b1d6e
(menubar_selection_callback, w32_menu_show): Initialize `entry' to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
36677
diff
changeset
|
2345 or "--deep-shadow". We don't implement them yet, se we just treat |
eb915f0b1d6e
(menubar_selection_callback, w32_menu_show): Initialize `entry' to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
36677
diff
changeset
|
2346 them like normal separators. */ |
eb915f0b1d6e
(menubar_selection_callback, w32_menu_show): Initialize `entry' to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
36677
diff
changeset
|
2347 return (*name == '\0' || start + 2 == name); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2348 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2349 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2350 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2351 /* Indicate boundary between left and right. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2352 static int |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2353 add_left_right_boundary (HMENU menu) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2354 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2355 return AppendMenu (menu, MF_MENUBARBREAK, 0, NULL); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2356 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2357 |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2358 /* UTF8: 0xxxxxxx, 110xxxxx 10xxxxxx, 1110xxxx, 10xxxxxx, 10xxxxxx */ |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2359 static void |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2360 utf8to16 (unsigned char * src, int len, WCHAR * dest) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2361 { |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2362 while (len > 0) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2363 { |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2364 int utf16; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2365 if (*src < 0x80) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2366 { |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2367 *dest = (WCHAR) *src; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2368 dest++; src++; len--; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2369 } |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2370 /* Since we might get >3 byte sequences which we don't handle, ignore the extra parts. */ |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2371 else if (*src < 0xC0) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2372 { |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2373 src++; len--; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2374 } |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2375 /* 2 char UTF-8 sequence. */ |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2376 else if (*src < 0xE0) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2377 { |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2378 *dest = (WCHAR) (((*src & 0x1f) << 6) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2379 | (*(src + 1) & 0x3f)); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2380 src += 2; len -= 2; dest++; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2381 } |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2382 else if (*src < 0xF0) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2383 { |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2384 *dest = (WCHAR) (((*src & 0x0f) << 12) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2385 | ((*(src + 1) & 0x3f) << 6) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2386 | (*(src + 2) & 0x3f)); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2387 src += 3; len -= 3; dest++; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2388 } |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2389 else /* Not encodable. Insert Unicode Substitution char. */ |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2390 { |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2391 *dest = (WCHAR) 0xfffd; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2392 src++; len--; dest++; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2393 } |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2394 } |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2395 *dest = 0; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2396 } |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2397 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2398 static int |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2399 add_menu_item (HMENU menu, widget_value *wv, HMENU item) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2400 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2401 UINT fuFlags; |
78015
cf89ff54912e
(add_menu_item): Escape `&' characters in menu items and their keybindings.
Eli Zaretskii <eliz@gnu.org>
parents:
76086
diff
changeset
|
2402 char *out_string, *p, *q; |
27932
a590f8d0dbd2
[HAVE_BOXES]: Remove #undef.
Jason Rumney <jasonr@gnu.org>
parents:
27896
diff
changeset
|
2403 int return_value; |
78015
cf89ff54912e
(add_menu_item): Escape `&' characters in menu items and their keybindings.
Eli Zaretskii <eliz@gnu.org>
parents:
76086
diff
changeset
|
2404 size_t nlen, orig_len; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2405 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2406 if (name_is_separator (wv->name)) |
33971
c33b80a45f6a
(add_menu_item): Reset menu item text when changing type to radio button.
Jason Rumney <jasonr@gnu.org>
parents:
32988
diff
changeset
|
2407 { |
c33b80a45f6a
(add_menu_item): Reset menu item text when changing type to radio button.
Jason Rumney <jasonr@gnu.org>
parents:
32988
diff
changeset
|
2408 fuFlags = MF_SEPARATOR; |
c33b80a45f6a
(add_menu_item): Reset menu item text when changing type to radio button.
Jason Rumney <jasonr@gnu.org>
parents:
32988
diff
changeset
|
2409 out_string = NULL; |
c33b80a45f6a
(add_menu_item): Reset menu item text when changing type to radio button.
Jason Rumney <jasonr@gnu.org>
parents:
32988
diff
changeset
|
2410 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
2411 else |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2412 { |
22750
b38cb406ed80
(add_menu_item): Draw menu items like titles if call_data is 0.
Andrew Innes <andrewi@gnu.org>
parents:
22737
diff
changeset
|
2413 if (wv->enabled) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2414 fuFlags = MF_STRING; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2415 else |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2416 fuFlags = MF_STRING | MF_GRAYED; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2417 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2418 if (wv->key != NULL) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2419 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2420 out_string = alloca (strlen (wv->name) + strlen (wv->key) + 2); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2421 strcpy (out_string, wv->name); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2422 strcat (out_string, "\t"); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2423 strcat (out_string, wv->key); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2424 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2425 else |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2426 out_string = wv->name; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2427 |
78015
cf89ff54912e
(add_menu_item): Escape `&' characters in menu items and their keybindings.
Eli Zaretskii <eliz@gnu.org>
parents:
76086
diff
changeset
|
2428 /* Quote any special characters within the menu item's text and |
cf89ff54912e
(add_menu_item): Escape `&' characters in menu items and their keybindings.
Eli Zaretskii <eliz@gnu.org>
parents:
76086
diff
changeset
|
2429 key binding. */ |
cf89ff54912e
(add_menu_item): Escape `&' characters in menu items and their keybindings.
Eli Zaretskii <eliz@gnu.org>
parents:
76086
diff
changeset
|
2430 nlen = orig_len = strlen (out_string); |
78022
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2431 if (unicode_append_menu) |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2432 { |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2433 /* With UTF-8, & cannot be part of a multibyte character. */ |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2434 for (p = out_string; *p; p++) |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2435 { |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2436 if (*p == '&') |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2437 nlen++; |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2438 } |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2439 } |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2440 else |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2441 { |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2442 /* If encoded with the system codepage, use multibyte string |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2443 functions in case of multibyte characters that contain '&'. */ |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2444 for (p = out_string; *p; p = _mbsinc (p)) |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2445 { |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2446 if (_mbsnextc (p) == '&') |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2447 nlen++; |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2448 } |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2449 } |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2450 |
78015
cf89ff54912e
(add_menu_item): Escape `&' characters in menu items and their keybindings.
Eli Zaretskii <eliz@gnu.org>
parents:
76086
diff
changeset
|
2451 if (nlen > orig_len) |
78022
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2452 { |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2453 p = out_string; |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2454 out_string = alloca (nlen + 1); |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2455 q = out_string; |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2456 while (*p) |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2457 { |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2458 if (unicode_append_menu) |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2459 { |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2460 if (*p == '&') |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2461 *q++ = *p; |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2462 *q++ = *p++; |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2463 } |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2464 else |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2465 { |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2466 if (_mbsnextc (p) == '&') |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2467 { |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2468 _mbsncpy (q, p, 1); |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2469 q = _mbsinc (q); |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2470 } |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2471 _mbsncpy (q, p, 1); |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2472 p = _mbsinc (p); |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2473 q = _mbsinc (q); |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2474 } |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2475 } |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2476 *q = '\0'; |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
2477 } |
78015
cf89ff54912e
(add_menu_item): Escape `&' characters in menu items and their keybindings.
Eli Zaretskii <eliz@gnu.org>
parents:
76086
diff
changeset
|
2478 |
41908
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
2479 if (item != NULL) |
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
2480 fuFlags = MF_POPUP; |
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
2481 else if (wv->title || wv->call_data == 0) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2482 { |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2483 /* Only use MF_OWNERDRAW if GetMenuItemInfo is usable, since |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2484 we can't deallocate the memory otherwise. */ |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2485 if (get_menu_item_info) |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2486 { |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
2487 out_string = (char *) local_alloc (strlen (wv->name) + 1); |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
2488 strcpy (out_string, wv->name); |
41908
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
2489 #ifdef MENU_DEBUG |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
2490 DebPrint ("Menu: allocing %ld for owner-draw", out_string); |
41908
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
2491 #endif |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2492 fuFlags = MF_OWNERDRAW | MF_DISABLED; |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2493 } |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2494 else |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2495 fuFlags = MF_DISABLED; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2496 } |
41637
d797ce338b4b
(add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents:
41251
diff
changeset
|
2497 |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
2498 /* Draw radio buttons and tickboxes. */ |
36677
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
2499 else if (wv->selected && (wv->button_type == BUTTON_TYPE_TOGGLE || |
41108
ef7a153a2c68
(add-menu-item): Make help_echo and radio buttons
Jason Rumney <jasonr@gnu.org>
parents:
40962
diff
changeset
|
2500 wv->button_type == BUTTON_TYPE_RADIO)) |
36677
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
2501 fuFlags |= MF_CHECKED; |
27932
a590f8d0dbd2
[HAVE_BOXES]: Remove #undef.
Jason Rumney <jasonr@gnu.org>
parents:
27896
diff
changeset
|
2502 else |
36677
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
2503 fuFlags |= MF_UNCHECKED; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2504 } |
36677
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
2505 |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2506 if (unicode_append_menu && out_string) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2507 { |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2508 /* Convert out_string from UTF-8 to UTF-16-LE. */ |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2509 int utf8_len = strlen (out_string); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2510 WCHAR * utf16_string; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2511 if (fuFlags & MF_OWNERDRAW) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2512 utf16_string = local_alloc ((utf8_len + 1) * sizeof (WCHAR)); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2513 else |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2514 utf16_string = alloca ((utf8_len + 1) * sizeof (WCHAR)); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2515 |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2516 utf8to16 (out_string, utf8_len, utf16_string); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2517 return_value = unicode_append_menu (menu, fuFlags, |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2518 item != NULL ? (UINT) item |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2519 : (UINT) wv->call_data, |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2520 utf16_string); |
65301
c0c0b5bf96ab
(add_menu_item): If unicode_append_menu returns an
Jason Rumney <jasonr@gnu.org>
parents:
64770
diff
changeset
|
2521 if (!return_value) |
c0c0b5bf96ab
(add_menu_item): If unicode_append_menu returns an
Jason Rumney <jasonr@gnu.org>
parents:
64770
diff
changeset
|
2522 { |
c0c0b5bf96ab
(add_menu_item): If unicode_append_menu returns an
Jason Rumney <jasonr@gnu.org>
parents:
64770
diff
changeset
|
2523 /* On W9x/ME, unicode menus are not supported, though AppendMenuW |
c0c0b5bf96ab
(add_menu_item): If unicode_append_menu returns an
Jason Rumney <jasonr@gnu.org>
parents:
64770
diff
changeset
|
2524 apparently does exist at least in some cases and appears to be |
c0c0b5bf96ab
(add_menu_item): If unicode_append_menu returns an
Jason Rumney <jasonr@gnu.org>
parents:
64770
diff
changeset
|
2525 stubbed out to do nothing. out_string is UTF-8, but since |
c0c0b5bf96ab
(add_menu_item): If unicode_append_menu returns an
Jason Rumney <jasonr@gnu.org>
parents:
64770
diff
changeset
|
2526 our standard menus are in English and this is only going to |
c0c0b5bf96ab
(add_menu_item): If unicode_append_menu returns an
Jason Rumney <jasonr@gnu.org>
parents:
64770
diff
changeset
|
2527 happen the first time a menu is used, the encoding is |
c0c0b5bf96ab
(add_menu_item): If unicode_append_menu returns an
Jason Rumney <jasonr@gnu.org>
parents:
64770
diff
changeset
|
2528 of minor importance compared with menus not working at all. */ |
c0c0b5bf96ab
(add_menu_item): If unicode_append_menu returns an
Jason Rumney <jasonr@gnu.org>
parents:
64770
diff
changeset
|
2529 return_value = |
c0c0b5bf96ab
(add_menu_item): If unicode_append_menu returns an
Jason Rumney <jasonr@gnu.org>
parents:
64770
diff
changeset
|
2530 AppendMenu (menu, fuFlags, |
c0c0b5bf96ab
(add_menu_item): If unicode_append_menu returns an
Jason Rumney <jasonr@gnu.org>
parents:
64770
diff
changeset
|
2531 item != NULL ? (UINT) item: (UINT) wv->call_data, |
c0c0b5bf96ab
(add_menu_item): If unicode_append_menu returns an
Jason Rumney <jasonr@gnu.org>
parents:
64770
diff
changeset
|
2532 out_string); |
c0c0b5bf96ab
(add_menu_item): If unicode_append_menu returns an
Jason Rumney <jasonr@gnu.org>
parents:
64770
diff
changeset
|
2533 /* Don't use unicode menus in future. */ |
c0c0b5bf96ab
(add_menu_item): If unicode_append_menu returns an
Jason Rumney <jasonr@gnu.org>
parents:
64770
diff
changeset
|
2534 unicode_append_menu = NULL; |
c0c0b5bf96ab
(add_menu_item): If unicode_append_menu returns an
Jason Rumney <jasonr@gnu.org>
parents:
64770
diff
changeset
|
2535 } |
c0c0b5bf96ab
(add_menu_item): If unicode_append_menu returns an
Jason Rumney <jasonr@gnu.org>
parents:
64770
diff
changeset
|
2536 |
c0c0b5bf96ab
(add_menu_item): If unicode_append_menu returns an
Jason Rumney <jasonr@gnu.org>
parents:
64770
diff
changeset
|
2537 if (unicode_append_menu && (fuFlags & MF_OWNERDRAW)) |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2538 local_free (out_string); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2539 } |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2540 else |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2541 { |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2542 return_value = |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2543 AppendMenu (menu, |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2544 fuFlags, |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2545 item != NULL ? (UINT) item : (UINT) wv->call_data, |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2546 out_string ); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2547 } |
27932
a590f8d0dbd2
[HAVE_BOXES]: Remove #undef.
Jason Rumney <jasonr@gnu.org>
parents:
27896
diff
changeset
|
2548 |
a590f8d0dbd2
[HAVE_BOXES]: Remove #undef.
Jason Rumney <jasonr@gnu.org>
parents:
27896
diff
changeset
|
2549 /* This must be done after the menu item is created. */ |
41108
ef7a153a2c68
(add-menu-item): Make help_echo and radio buttons
Jason Rumney <jasonr@gnu.org>
parents:
40962
diff
changeset
|
2550 if (!wv->title && wv->call_data != 0) |
36677
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
2551 { |
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
2552 if (set_menu_item_info) |
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
2553 { |
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
2554 MENUITEMINFO info; |
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
2555 bzero (&info, sizeof (info)); |
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
2556 info.cbSize = sizeof (info); |
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
2557 info.fMask = MIIM_DATA; |
32671
bbd3be4db5f2
(add_menu_item): Do not use MF_OWNERDRAW for titles, as it has stopped working.
Jason Rumney <jasonr@gnu.org>
parents:
31114
diff
changeset
|
2558 |
41908
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
2559 /* Set help string for menu item. Leave it as a Lisp_Object |
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
2560 until it is ready to be displayed, since GC can happen while |
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
2561 menus are active. */ |
55671
6817f9469688
(add_menu_item, w32_menu_display_help) [USE_LISP_UNION_TYPE]: Cast
Jason Rumney <jasonr@gnu.org>
parents:
53326
diff
changeset
|
2562 if (!NILP (wv->help)) |
6817f9469688
(add_menu_item, w32_menu_display_help) [USE_LISP_UNION_TYPE]: Cast
Jason Rumney <jasonr@gnu.org>
parents:
53326
diff
changeset
|
2563 #ifdef USE_LISP_UNION_TYPE |
6817f9469688
(add_menu_item, w32_menu_display_help) [USE_LISP_UNION_TYPE]: Cast
Jason Rumney <jasonr@gnu.org>
parents:
53326
diff
changeset
|
2564 info.dwItemData = (DWORD) (wv->help).i; |
6817f9469688
(add_menu_item, w32_menu_display_help) [USE_LISP_UNION_TYPE]: Cast
Jason Rumney <jasonr@gnu.org>
parents:
53326
diff
changeset
|
2565 #else |
6817f9469688
(add_menu_item, w32_menu_display_help) [USE_LISP_UNION_TYPE]: Cast
Jason Rumney <jasonr@gnu.org>
parents:
53326
diff
changeset
|
2566 info.dwItemData = (DWORD) (wv->help); |
6817f9469688
(add_menu_item, w32_menu_display_help) [USE_LISP_UNION_TYPE]: Cast
Jason Rumney <jasonr@gnu.org>
parents:
53326
diff
changeset
|
2567 #endif |
36677
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
2568 if (wv->button_type == BUTTON_TYPE_RADIO) |
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
2569 { |
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
2570 /* CheckMenuRadioItem allows us to differentiate TOGGLE and |
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
2571 RADIO items, but is not available on NT 3.51 and earlier. */ |
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
2572 info.fMask |= MIIM_TYPE | MIIM_STATE; |
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
2573 info.fType = MFT_RADIOCHECK | MFT_STRING; |
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
2574 info.dwTypeData = out_string; |
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
2575 info.fState = wv->selected ? MFS_CHECKED : MFS_UNCHECKED; |
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
2576 } |
33971
c33b80a45f6a
(add_menu_item): Reset menu item text when changing type to radio button.
Jason Rumney <jasonr@gnu.org>
parents:
32988
diff
changeset
|
2577 |
36677
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
2578 set_menu_item_info (menu, |
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
2579 item != NULL ? (UINT) item : (UINT) wv->call_data, |
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
2580 FALSE, &info); |
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
2581 } |
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
2582 } |
27932
a590f8d0dbd2
[HAVE_BOXES]: Remove #undef.
Jason Rumney <jasonr@gnu.org>
parents:
27896
diff
changeset
|
2583 return return_value; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2584 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2585 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2586 /* Construct native Windows menu(bar) based on widget_value tree. */ |
31114
cd392fdf0e9f
Include keyboard.h before frame.h. Fix compile
Andrew Innes <andrewi@gnu.org>
parents:
30989
diff
changeset
|
2587 int |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2588 fill_in_menu (HMENU menu, widget_value *wv) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2589 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2590 int items_added = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2591 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2592 for ( ; wv != NULL; wv = wv->next) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2593 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2594 if (wv->contents) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2595 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2596 HMENU sub_menu = CreatePopupMenu (); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2597 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2598 if (sub_menu == NULL) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2599 return 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2600 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2601 if (!fill_in_menu (sub_menu, wv->contents) || |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2602 !add_menu_item (menu, wv, sub_menu)) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2603 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2604 DestroyMenu (sub_menu); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2605 return 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2606 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2607 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2608 else |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2609 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2610 if (!add_menu_item (menu, wv, NULL)) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2611 return 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2612 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2613 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2614 return 1; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2615 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2616 |
28275
2c8492145fc8
(single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents:
27932
diff
changeset
|
2617 /* Display help string for currently pointed to menu item. Not |
2c8492145fc8
(single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents:
27932
diff
changeset
|
2618 supported on NT 3.51 and earlier, as GetMenuItemInfo is not |
2c8492145fc8
(single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents:
27932
diff
changeset
|
2619 available. */ |
2c8492145fc8
(single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents:
27932
diff
changeset
|
2620 void |
41646
258fa72efab7
(w32_menu_display_help): Actually add the new argument
Andrew Innes <andrewi@gnu.org>
parents:
41637
diff
changeset
|
2621 w32_menu_display_help (HWND owner, HMENU menu, UINT item, UINT flags) |
28275
2c8492145fc8
(single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents:
27932
diff
changeset
|
2622 { |
2c8492145fc8
(single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents:
27932
diff
changeset
|
2623 if (get_menu_item_info) |
2c8492145fc8
(single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents:
27932
diff
changeset
|
2624 { |
41637
d797ce338b4b
(add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents:
41251
diff
changeset
|
2625 struct frame *f = x_window_to_frame (&one_w32_display_info, owner); |
d797ce338b4b
(add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents:
41251
diff
changeset
|
2626 Lisp_Object frame, help; |
28275
2c8492145fc8
(single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents:
27932
diff
changeset
|
2627 |
64632
13b6920b1146
(w32_menu_display_help): Suppress tooltip when navigating menus with
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
2628 /* No help echo on owner-draw menu items, or when the keyboard is used |
13b6920b1146
(w32_menu_display_help): Suppress tooltip when navigating menus with
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
2629 to navigate the menus, since tooltips are distracting if they pop |
13b6920b1146
(w32_menu_display_help): Suppress tooltip when navigating menus with
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
2630 up elsewhere. */ |
13b6920b1146
(w32_menu_display_help): Suppress tooltip when navigating menus with
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
2631 if (flags & MF_OWNERDRAW || flags & MF_POPUP |
13b6920b1146
(w32_menu_display_help): Suppress tooltip when navigating menus with
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
2632 || !(flags & MF_MOUSESELECT)) |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2633 help = Qnil; |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2634 else |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2635 { |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2636 MENUITEMINFO info; |
28275
2c8492145fc8
(single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents:
27932
diff
changeset
|
2637 |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2638 bzero (&info, sizeof (info)); |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2639 info.cbSize = sizeof (info); |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2640 info.fMask = MIIM_DATA; |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2641 get_menu_item_info (menu, item, FALSE, &info); |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2642 |
55671
6817f9469688
(add_menu_item, w32_menu_display_help) [USE_LISP_UNION_TYPE]: Cast
Jason Rumney <jasonr@gnu.org>
parents:
53326
diff
changeset
|
2643 #ifdef USE_LISP_UNION_TYPE |
6817f9469688
(add_menu_item, w32_menu_display_help) [USE_LISP_UNION_TYPE]: Cast
Jason Rumney <jasonr@gnu.org>
parents:
53326
diff
changeset
|
2644 help = info.dwItemData ? (Lisp_Object) ((EMACS_INT) info.dwItemData) |
6817f9469688
(add_menu_item, w32_menu_display_help) [USE_LISP_UNION_TYPE]: Cast
Jason Rumney <jasonr@gnu.org>
parents:
53326
diff
changeset
|
2645 : Qnil; |
6817f9469688
(add_menu_item, w32_menu_display_help) [USE_LISP_UNION_TYPE]: Cast
Jason Rumney <jasonr@gnu.org>
parents:
53326
diff
changeset
|
2646 #else |
41908
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
2647 help = info.dwItemData ? (Lisp_Object) info.dwItemData : Qnil; |
55671
6817f9469688
(add_menu_item, w32_menu_display_help) [USE_LISP_UNION_TYPE]: Cast
Jason Rumney <jasonr@gnu.org>
parents:
53326
diff
changeset
|
2648 #endif |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2649 } |
30989
2152817050ff
(keymap_panes): Pass the keymap's prompt as the pane name to
Jason Rumney <jasonr@gnu.org>
parents:
30238
diff
changeset
|
2650 |
41637
d797ce338b4b
(add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents:
41251
diff
changeset
|
2651 /* Store the help echo in the keyboard buffer as the X toolkit |
d797ce338b4b
(add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents:
41251
diff
changeset
|
2652 version does, rather than directly showing it. This seems to |
d797ce338b4b
(add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents:
41251
diff
changeset
|
2653 solve the GC problems that were present when we based the |
d797ce338b4b
(add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents:
41251
diff
changeset
|
2654 Windows code on the non-toolkit version. */ |
d797ce338b4b
(add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents:
41251
diff
changeset
|
2655 if (f) |
d797ce338b4b
(add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents:
41251
diff
changeset
|
2656 { |
d797ce338b4b
(add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents:
41251
diff
changeset
|
2657 XSETFRAME (frame, f); |
d797ce338b4b
(add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents:
41251
diff
changeset
|
2658 kbd_buffer_store_help_event (frame, help); |
d797ce338b4b
(add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents:
41251
diff
changeset
|
2659 } |
d797ce338b4b
(add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents:
41251
diff
changeset
|
2660 else |
d797ce338b4b
(add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents:
41251
diff
changeset
|
2661 /* X version has a loop through frames here, which doesn't |
d797ce338b4b
(add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents:
41251
diff
changeset
|
2662 appear to do anything, unless it has some side effect. */ |
d797ce338b4b
(add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents:
41251
diff
changeset
|
2663 show_help_echo (help, Qnil, Qnil, Qnil, 1); |
28275
2c8492145fc8
(single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents:
27932
diff
changeset
|
2664 } |
2c8492145fc8
(single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents:
27932
diff
changeset
|
2665 } |
2c8492145fc8
(single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents:
27932
diff
changeset
|
2666 |
41908
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
2667 /* Free memory used by owner-drawn strings. */ |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2668 static void |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2669 w32_free_submenu_strings (menu) |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2670 HMENU menu; |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2671 { |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2672 int i, num = GetMenuItemCount (menu); |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2673 for (i = 0; i < num; i++) |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2674 { |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2675 MENUITEMINFO info; |
41930
d5fc57bcb0f2
(w32_free_submenu_strings): Clear menu item struct
Jason Rumney <jasonr@gnu.org>
parents:
41908
diff
changeset
|
2676 bzero (&info, sizeof (info)); |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2677 info.cbSize = sizeof (info); |
41908
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
2678 info.fMask = MIIM_DATA | MIIM_TYPE | MIIM_SUBMENU; |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2679 |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2680 get_menu_item_info (menu, i, TRUE, &info); |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2681 |
41908
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
2682 /* Owner-drawn names are held in dwItemData. */ |
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
2683 if ((info.fType & MF_OWNERDRAW) && info.dwItemData) |
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
2684 { |
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
2685 #ifdef MENU_DEBUG |
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
2686 DebPrint ("Menu: freeing %ld for owner-draw", info.dwItemData); |
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
2687 #endif |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
2688 local_free (info.dwItemData); |
41908
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
2689 } |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2690 |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2691 /* Recurse down submenus. */ |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2692 if (info.hSubMenu) |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2693 w32_free_submenu_strings (info.hSubMenu); |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2694 } |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2695 } |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2696 |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2697 void |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2698 w32_free_menu_strings (hwnd) |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2699 HWND hwnd; |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2700 { |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2701 HMENU menu = current_popup_menu; |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2702 |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2703 if (get_menu_item_info) |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2704 { |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2705 /* If there is no popup menu active, free the strings from the frame's |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2706 menubar. */ |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2707 if (!menu) |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2708 menu = GetMenu (hwnd); |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2709 |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2710 if (menu) |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2711 w32_free_submenu_strings (menu); |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2712 } |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2713 |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2714 current_popup_menu = NULL; |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2715 } |
28275
2c8492145fc8
(single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents:
27932
diff
changeset
|
2716 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2717 #endif /* HAVE_MENUS */ |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2718 |
73788
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73695
diff
changeset
|
2719 /* The following is used by delayed window autoselection. */ |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73695
diff
changeset
|
2720 |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73695
diff
changeset
|
2721 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:
73695
diff
changeset
|
2722 doc: /* Return t if a menu or popup dialog is active on selected frame. */) |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73695
diff
changeset
|
2723 () |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73695
diff
changeset
|
2724 { |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73695
diff
changeset
|
2725 #ifdef HAVE_MENUS |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73695
diff
changeset
|
2726 FRAME_PTR f; |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73695
diff
changeset
|
2727 f = SELECTED_FRAME (); |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73695
diff
changeset
|
2728 return (f->output_data.w32->menubar_active > 0) ? Qt : Qnil; |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73695
diff
changeset
|
2729 #else |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73695
diff
changeset
|
2730 return Qnil; |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73695
diff
changeset
|
2731 #endif /* HAVE_MENUS */ |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73695
diff
changeset
|
2732 } |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73695
diff
changeset
|
2733 |
48375
4d7b83cc03aa
Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents:
46815
diff
changeset
|
2734 void syms_of_w32menu () |
13434 | 2735 { |
90920
b3ae82a0a4fd
(syms_of_w32menu): Use DEFSYM macro.
Jason Rumney <jasonr@gnu.org>
parents:
90776
diff
changeset
|
2736 globals_of_w32menu (); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2737 staticpro (&menu_items); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2738 menu_items = Qnil; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2739 |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2740 current_popup_menu = NULL; |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
2741 |
90920
b3ae82a0a4fd
(syms_of_w32menu): Use DEFSYM macro.
Jason Rumney <jasonr@gnu.org>
parents:
90776
diff
changeset
|
2742 DEFSYM (Qdebug_on_next_call, "debug-on-next-call"); |
15276 | 2743 |
13434 | 2744 defsubr (&Sx_popup_menu); |
73695
3901ff3eaf2c
(Fmenu_or_popup_active_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72773
diff
changeset
|
2745 defsubr (&Smenu_or_popup_active_p); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2746 #ifdef HAVE_MENUS |
13434 | 2747 defsubr (&Sx_popup_dialog); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
2748 #endif |
13434 | 2749 } |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48375
diff
changeset
|
2750 |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48375
diff
changeset
|
2751 /* |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48375
diff
changeset
|
2752 globals_of_w32menu is used to initialize those global variables that |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48375
diff
changeset
|
2753 must always be initialized on startup even when the global variable |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48375
diff
changeset
|
2754 initialized is non zero (see the function main in emacs.c). |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48375
diff
changeset
|
2755 globals_of_w32menu is called from syms_of_w32menu when the global |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48375
diff
changeset
|
2756 variable initialized is 0 and directly from main when initialized |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48375
diff
changeset
|
2757 is non zero. |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48375
diff
changeset
|
2758 */ |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48375
diff
changeset
|
2759 void globals_of_w32menu () |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48375
diff
changeset
|
2760 { |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48375
diff
changeset
|
2761 /* See if Get/SetMenuItemInfo functions are available. */ |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48375
diff
changeset
|
2762 HMODULE user32 = GetModuleHandle ("user32.dll"); |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48375
diff
changeset
|
2763 get_menu_item_info = (GetMenuItemInfoA_Proc) GetProcAddress (user32, "GetMenuItemInfoA"); |
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48375
diff
changeset
|
2764 set_menu_item_info = (SetMenuItemInfoA_Proc) GetProcAddress (user32, "SetMenuItemInfoA"); |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
2765 unicode_append_menu = (AppendMenuW_Proc) GetProcAddress (user32, "AppendMenuW"); |
48888
f0df5f687c15
Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents:
48375
diff
changeset
|
2766 } |
52401 | 2767 |
2768 /* arch-tag: 0eaed431-bb4e-4aac-a527-95a1b4f1fed0 | |
2769 (do not change this comment) */ |