Mercurial > emacs
annotate src/w32menu.c @ 112408:04c350138c72
* man.el (Man-highlight-references0): Use make-button (Bug#7881).
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Fri, 21 Jan 2011 22:53:06 -0500 |
parents | 42e22c4f06b7 |
children | 9de5a68b57e1 |
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, |
112218
376148b31b5e
Add 2011 to FSF/AIST copyright years.
Glenn Morris <rgm@gnu.org>
parents:
110994
diff
changeset
|
3 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 |
79759 | 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> |
105669
68dd71358159
* alloc.c: Do not define struct catchtag.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
100951
diff
changeset
|
26 #include <setjmp.h> |
83572
244d6216c056
(Fx_popup_menu): Use terminal specific mouse_position_hook.
Jason Rumney <jasonr@gnu.org>
parents:
76086
diff
changeset
|
27 |
13434 | 28 #include "lisp.h" |
31114
cd392fdf0e9f
Include keyboard.h before frame.h. Fix compile
Andrew Innes <andrewi@gnu.org>
parents:
30989
diff
changeset
|
29 #include "keyboard.h" |
39690
38c1890338cc
(keymap_panes, Fx_popup_menu): Use Fkeymap_prompt.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
39682
diff
changeset
|
30 #include "keymap.h" |
13434 | 31 #include "frame.h" |
83572
244d6216c056
(Fx_popup_menu): Use terminal specific mouse_position_hook.
Jason Rumney <jasonr@gnu.org>
parents:
76086
diff
changeset
|
32 #include "termhooks.h" |
13434 | 33 #include "window.h" |
34 #include "blockinput.h" | |
15276 | 35 #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
|
36 #include "charset.h" |
90928 | 37 #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
|
38 #include "coding.h" |
105923
1011707400d3
* menu.c (Fx_popup_menu): Consolidate versions from xmenu.c,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105669
diff
changeset
|
39 #include "menu.h" |
13434 | 40 |
41 /* This may include sys/types.h, and that somehow loses | |
42 if this is not done before the other system files. */ | |
43 #include "w32term.h" | |
44 | |
45 /* Load sys/types.h if not already loaded. | |
46 In some systems loading it twice is suicidal. */ | |
47 #ifndef makedev | |
48 #include <sys/types.h> | |
49 #endif | |
50 | |
51 #include "dispextern.h" | |
52 | |
33971
c33b80a45f6a
(add_menu_item): Reset menu item text when changing type to radio button.
Jason Rumney <jasonr@gnu.org>
parents:
32988
diff
changeset
|
53 #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
|
54 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
55 #ifndef TRUE |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
56 #define TRUE 1 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
57 #define FALSE 0 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
58 #endif /* no TRUE */ |
13434 | 59 |
76074
5978a80d504e
(current_popup_menu): Make available globally.
Jason Rumney <jasonr@gnu.org>
parents:
75227
diff
changeset
|
60 HMENU current_popup_menu; |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
61 |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
109100
diff
changeset
|
62 void syms_of_w32menu (void); |
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
109100
diff
changeset
|
63 void globals_of_w32menu (void); |
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
|
64 |
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
|
65 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
|
66 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
|
67 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
|
68 IN BOOL, |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
69 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
|
70 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
|
71 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
|
72 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
|
73 IN BOOL, |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
74 IN LPCMENUITEMINFOA); |
109772
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
75 typedef int (WINAPI * MessageBoxW_Proc) ( |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
76 IN HWND window, |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
77 IN WCHAR *text, |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
78 IN WCHAR *caption, |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
79 IN UINT type); |
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
|
80 |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
81 GetMenuItemInfoA_Proc get_menu_item_info = NULL; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
82 SetMenuItemInfoA_Proc set_menu_item_info = NULL; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
83 AppendMenuW_Proc unicode_append_menu = NULL; |
109772
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
84 MessageBoxW_Proc unicode_message_box = NULL; |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
85 |
72773
15d914de92fd
* src/macmenu.c (Vmenu_updating_frame, syms_of_xmenu):
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents:
72260
diff
changeset
|
86 Lisp_Object Qdebug_on_next_call; |
21612
24a01af0cd38
(Vmenu_updating_frame): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21450
diff
changeset
|
87 |
13434 | 88 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
|
89 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
90 extern Lisp_Object QCtoggle, QCradio; |
13434 | 91 |
15276 | 92 extern Lisp_Object Qoverriding_local_map, Qoverriding_terminal_local_map; |
93 | |
94 extern Lisp_Object Qmenu_bar_update_hook; | |
95 | |
109100
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
96 void set_frame_menubar (FRAME_PTR, int, int); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
97 |
41637
d797ce338b4b
(add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents:
41251
diff
changeset
|
98 #ifdef HAVE_DIALOGS |
109100
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
99 static Lisp_Object w32_dialog_show (FRAME_PTR, int, Lisp_Object, char**); |
93979
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
100 #else |
109100
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
101 static int is_simple_dialog (Lisp_Object); |
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
102 static Lisp_Object simple_dialog_show (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
|
103 #endif |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
104 |
109772
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
105 static void utf8to16 (unsigned char *, int, WCHAR *); |
110975
e0ac9a58795e
src/w32*.c: Make functions static.
Juanma Barranquero <lekktu@gmail.com>
parents:
109882
diff
changeset
|
106 static int fill_in_menu (HMENU, widget_value *); |
109772
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
107 |
109100
2bc9a0c04c87
Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents:
106815
diff
changeset
|
108 void w32_free_menu_strings (HWND); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
109 |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
110 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
111 /* 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
|
112 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
|
113 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
|
114 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
115 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
|
116 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
|
117 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
118 int pending_menu_activation; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
119 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
120 #ifdef HAVE_MENUS |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
121 |
62670
5ba03d610746
(Fx_popup_dialog): Allow 3rd optional argument.
Nick Roberts <nickrob@snap.net.nz>
parents:
62668
diff
changeset
|
122 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
|
123 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
|
124 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
|
125 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
|
126 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
|
127 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
|
128 |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
129 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
|
130 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
|
131 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
|
132 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
|
133 |
f66d09d1bb2f
Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents:
40656
diff
changeset
|
134 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
|
135 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
|
136 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
|
137 \(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
|
138 |
d126643d7af1
(Fx_popup_dialog): Add a third boolean argument to select frame title
Nick Roberts <nickrob@snap.net.nz>
parents:
56973
diff
changeset
|
139 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
|
140 otherwise it is "Question". */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
141 (Lisp_Object position, Lisp_Object contents, Lisp_Object header) |
13434 | 142 { |
40476
18b1b133e5c1
(Fx_popup_menu): Explicitly init f, xpos, and ypos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
40119
diff
changeset
|
143 FRAME_PTR f = NULL; |
13434 | 144 Lisp_Object window; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
145 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
146 check_w32 (); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
147 |
13434 | 148 /* 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
|
149 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
|
150 || (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
|
151 || EQ (XCAR (position), Qtool_bar)))) |
13434 | 152 { |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
153 #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
|
154 /* 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
|
155 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
|
156 Lisp_Object bar_window; |
31114
cd392fdf0e9f
Include keyboard.h before frame.h. Fix compile
Andrew Innes <andrewi@gnu.org>
parents:
30989
diff
changeset
|
157 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
|
158 unsigned long time; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
159 Lisp_Object x, y; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
160 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
161 (*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
|
162 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
163 if (new_f != 0) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
164 XSETFRAME (window, new_f); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
165 else |
13434 | 166 window = selected_window; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
167 #endif |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
168 window = selected_window; |
13434 | 169 } |
170 else if (CONSP (position)) | |
171 { | |
172 Lisp_Object tem; | |
173 tem = Fcar (position); | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
174 if (CONSP (tem)) |
13434 | 175 window = Fcar (Fcdr (position)); |
176 else | |
177 { | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
178 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
|
179 window = Fcar (tem); /* POSN_WINDOW (tem) */ |
13434 | 180 } |
181 } | |
182 else if (WINDOWP (position) || FRAMEP (position)) | |
183 window = position; | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
184 else |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
185 window = Qnil; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
186 |
13434 | 187 /* 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
|
188 |
13434 | 189 if (FRAMEP (window)) |
190 f = XFRAME (window); | |
191 else if (WINDOWP (window)) | |
192 { | |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40476
diff
changeset
|
193 CHECK_LIVE_WINDOW (window); |
13434 | 194 f = XFRAME (WINDOW_FRAME (XWINDOW (window))); |
195 } | |
196 else | |
197 /* ??? Not really clean; should be CHECK_WINDOW_OR_FRAME, | |
198 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
|
199 CHECK_WINDOW (window); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
200 |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
201 #ifndef HAVE_DIALOGS |
93979
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
202 |
13434 | 203 { |
93979
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
204 /* 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
|
205 if (is_simple_dialog (contents)) |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
206 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
|
207 else |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
208 { |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
209 /* Display a menu with these alternatives |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
210 in the middle of frame F. */ |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
211 Lisp_Object x, y, frame, newpos; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
212 XSETFRAME (frame, f); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
213 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
|
214 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
|
215 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
|
216 return Fx_popup_menu (newpos, |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
217 Fcons (Fcar (contents), Fcons (contents, Qnil))); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
218 } |
13434 | 219 } |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
220 #else /* HAVE_DIALOGS */ |
13434 | 221 { |
222 Lisp_Object title; | |
223 char *error_name; | |
224 Lisp_Object selection; | |
225 | |
226 /* Decode the dialog items from what was specified. */ | |
227 title = Fcar (contents); | |
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents:
40476
diff
changeset
|
228 CHECK_STRING (title); |
13434 | 229 |
230 list_of_panes (Fcons (contents, Qnil)); | |
231 | |
232 /* Display them in a dialog box. */ | |
233 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
|
234 selection = w32_dialog_show (f, 0, title, header, &error_name); |
13434 | 235 UNBLOCK_INPUT; |
236 | |
237 discard_menu_items (); | |
80759
c3bd08b7c78d
(Fx_popup_menu, Fx_popup_dialog, w32_menu_show): Ensure mouse is not
Jason Rumney <jasonr@gnu.org>
parents:
79759
diff
changeset
|
238 FRAME_X_DISPLAY_INFO (f)->grabbed = 0; |
13434 | 239 |
240 if (error_name) error (error_name); | |
241 return selection; | |
242 } | |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
243 #endif /* HAVE_DIALOGS */ |
13434 | 244 } |
245 | |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
246 /* Activate the menu bar of frame F. |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
247 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
|
248 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
|
249 |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
250 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
|
251 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
|
252 processing of the menus. |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
253 |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
254 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
|
255 |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
256 This way we can safely execute Lisp code. */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
257 |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
258 void |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
109100
diff
changeset
|
259 x_activate_menubar (FRAME_PTR f) |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
260 { |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
261 set_frame_menubar (f, 0, 1); |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
262 |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
263 /* Lock out further menubar changes while active. */ |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
264 f->output_data.w32->menubar_active = 1; |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
265 |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
266 /* Signal input thread to return from WM_INITMENU. */ |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
267 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
|
268 } |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
269 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
270 /* 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
|
271 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
|
272 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
|
273 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
|
274 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
275 void |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
276 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
|
277 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
278 Lisp_Object prefix, entry; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
279 Lisp_Object vector; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
280 Lisp_Object *subprefix_stack; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
281 int submenu_depth = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
282 int i; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
283 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
284 if (!f) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
285 return; |
38371
eb915f0b1d6e
(menubar_selection_callback, w32_menu_show): Initialize `entry' to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
36677
diff
changeset
|
286 entry = Qnil; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
287 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
|
288 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
|
289 prefix = Qnil; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
290 i = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
291 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
|
292 { |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
293 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
|
294 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
295 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
|
296 prefix = entry; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
297 i++; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
298 } |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
299 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
|
300 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
301 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
|
302 i++; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
303 } |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
304 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
|
305 { |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
306 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
|
307 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
|
308 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
309 else |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
310 { |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
311 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
|
312 /* 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
|
313 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
|
314 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
|
315 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
316 int j; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
317 struct input_event buf; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
318 Lisp_Object frame; |
51573
861a49cd70cf
(menubar_selection_callback): Don't pass uninitialized
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51206
diff
changeset
|
319 EVENT_INIT (buf); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
320 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
321 XSETFRAME (frame, f); |
30178
6d045b9631ad
(menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents:
30145
diff
changeset
|
322 buf.kind = MENU_BAR_EVENT; |
6d045b9631ad
(menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents:
30145
diff
changeset
|
323 buf.frame_or_window = frame; |
6d045b9631ad
(menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents:
30145
diff
changeset
|
324 buf.arg = frame; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
325 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
|
326 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
327 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
|
328 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
|
329 { |
30178
6d045b9631ad
(menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents:
30145
diff
changeset
|
330 buf.kind = MENU_BAR_EVENT; |
6d045b9631ad
(menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents:
30145
diff
changeset
|
331 buf.frame_or_window = frame; |
6d045b9631ad
(menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents:
30145
diff
changeset
|
332 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
|
333 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
|
334 } |
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 (!NILP (prefix)) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
337 { |
30178
6d045b9631ad
(menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents:
30145
diff
changeset
|
338 buf.kind = MENU_BAR_EVENT; |
6d045b9631ad
(menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents:
30145
diff
changeset
|
339 buf.frame_or_window = frame; |
6d045b9631ad
(menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents:
30145
diff
changeset
|
340 buf.arg = prefix; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
341 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
|
342 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
343 |
30178
6d045b9631ad
(menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents:
30145
diff
changeset
|
344 buf.kind = MENU_BAR_EVENT; |
6d045b9631ad
(menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents:
30145
diff
changeset
|
345 buf.frame_or_window = frame; |
6d045b9631ad
(menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents:
30145
diff
changeset
|
346 buf.arg = entry; |
76074
5978a80d504e
(current_popup_menu): Make available globally.
Jason Rumney <jasonr@gnu.org>
parents:
75227
diff
changeset
|
347 /* 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
|
348 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
|
349 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
|
350 |
43471
20574c51c791
(menubar_selection_callback): Free the menu and
Jason Rumney <jasonr@gnu.org>
parents:
42613
diff
changeset
|
351 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
|
352 return; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
353 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
354 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
|
355 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
356 } |
43471
20574c51c791
(menubar_selection_callback): Free the menu and
Jason Rumney <jasonr@gnu.org>
parents:
42613
diff
changeset
|
357 /* 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
|
358 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
|
359 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
|
360 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
361 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
362 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
363 /* 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
|
364 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
|
365 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
|
366 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
367 void |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
109100
diff
changeset
|
368 set_frame_menubar (FRAME_PTR f, int first_time, int deep_p) |
13434 | 369 { |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
370 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
|
371 Lisp_Object items; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
372 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
|
373 int i, last_i; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
374 int *submenu_start, *submenu_end; |
49348
08ac5c346b16
(digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
375 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
|
376 |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
377 /* 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
|
378 if (f->output_data.w32->menubar_active) |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
379 return; |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
380 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
381 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
|
382 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
383 if (! menubar_widget) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
384 deep_p = 1; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
385 else if (pending_menu_activation && !deep_p) |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
386 deep_p = 1; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
387 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
388 if (deep_p) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
389 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
390 /* 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
|
391 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
392 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
|
393 Lisp_Object buffer; |
46293
1fb8f75062c6
Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents:
45803
diff
changeset
|
394 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
|
395 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
|
396 Lisp_Object *previous_items |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
397 = (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
|
398 * sizeof (Lisp_Object)); |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
399 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
400 /* 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
|
401 do always reinitialize them. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
402 if (! menubar_widget) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
403 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
|
404 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
405 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
|
406 specbind (Qinhibit_quit, Qt); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
407 /* 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
|
408 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
|
409 specbind (Qdebug_on_next_call, Qnil); |
15276 | 410 |
63147
9bde03db5726
* composite.c (compose_chars_in_text):
Kim F. Storm <storm@cua.dk>
parents:
62670
diff
changeset
|
411 record_unwind_save_match_data (); |
9bde03db5726
* composite.c (compose_chars_in_text):
Kim F. Storm <storm@cua.dk>
parents:
62670
diff
changeset
|
412 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
413 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
|
414 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
415 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
|
416 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
|
417 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
418 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
419 set_buffer_internal_1 (XBUFFER (buffer)); |
15276 | 420 |
109882
793d8afe2140
(set_frame_menubar): Remove call to undefined function.
Jason Rumney <jasonr@gnu.org>
parents:
109772
diff
changeset
|
421 /* Run the hooks. */ |
36313
77093a87f2de
* w32menu.c (set_frame_menubar): Run activate-menu-bar-hook with
Jason Rumney <jasonr@gnu.org>
parents:
33971
diff
changeset
|
422 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
|
423 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
|
424 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
|
425 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
426 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
|
427 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
428 /* 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
|
429 if (previous_menu_items_used) |
109165
750db9f3e6d8
Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents:
109160
diff
changeset
|
430 memcpy (previous_items, XVECTOR (f->menu_bar_vector)->contents, |
750db9f3e6d8
Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents:
109160
diff
changeset
|
431 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
|
432 |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
433 /* 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
|
434 This can evaluate Lisp code. */ |
95732
6488b258c0aa
(set_frame_menubar): Sync with version in xmenu.c.
Jason Rumney <jasonr@gnu.org>
parents:
95728
diff
changeset
|
435 save_menu_items (); |
6488b258c0aa
(set_frame_menubar): Sync with version in xmenu.c.
Jason Rumney <jasonr@gnu.org>
parents:
95728
diff
changeset
|
436 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
437 menu_items = f->menu_bar_vector; |
39507
24530f82048e
(set_frame_menubar): Take into account that
Andrew Innes <andrewi@gnu.org>
parents:
38371
diff
changeset
|
438 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
|
439 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
|
440 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
|
441 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
|
442 submenu_top_level_items |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
443 = (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
|
444 init_menu_items (); |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
445 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
|
446 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
447 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
|
448 |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
449 last_i = i; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
450 |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
451 key = AREF (items, i); |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
452 string = AREF (items, i + 1); |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
453 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
|
454 if (NILP (string)) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
455 break; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
456 |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
457 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
|
458 |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
459 menu_items_n_panes = 0; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
460 submenu_top_level_items[i] |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
461 = parse_single_submenu (key, string, maps); |
49348
08ac5c346b16
(digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
462 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
|
463 |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
464 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
|
465 } |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
466 |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
467 finish_menu_items (); |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
468 |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
469 /* 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
|
470 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
|
471 |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
472 wv = xmalloc_widget_value (); |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
473 wv->name = "menubar"; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
474 wv->value = 0; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
475 wv->enabled = 1; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
476 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
|
477 wv->help = Qnil; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
478 first_wv = wv; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
479 |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
480 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
|
481 { |
49348
08ac5c346b16
(digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents:
48888
diff
changeset
|
482 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
|
483 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
|
484 submenu_top_level_items[i]); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
485 if (prev_wv) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
486 prev_wv->next = wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
487 else |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
488 first_wv->contents = wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
489 /* 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
|
490 wv->enabled = 1; |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
491 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
|
492 prev_wv = wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
493 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
494 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
495 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
|
496 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
497 /* 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
|
498 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
|
499 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
500 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
|
501 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
|
502 || (!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
|
503 break; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
504 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
|
505 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
506 free_menubar_widget_value_tree (first_wv); |
95732
6488b258c0aa
(set_frame_menubar): Sync with version in xmenu.c.
Jason Rumney <jasonr@gnu.org>
parents:
95728
diff
changeset
|
507 discard_menu_items (); |
6488b258c0aa
(set_frame_menubar): Sync with version in xmenu.c.
Jason Rumney <jasonr@gnu.org>
parents:
95728
diff
changeset
|
508 unbind_to (specpdl_count, Qnil); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
509 return; |
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 |
95732
6488b258c0aa
(set_frame_menubar): Sync with version in xmenu.c.
Jason Rumney <jasonr@gnu.org>
parents:
95728
diff
changeset
|
512 f->menu_bar_vector = menu_items; |
6488b258c0aa
(set_frame_menubar): Sync with version in xmenu.c.
Jason Rumney <jasonr@gnu.org>
parents:
95728
diff
changeset
|
513 f->menu_bar_items_used = menu_items_used; |
6488b258c0aa
(set_frame_menubar): Sync with version in xmenu.c.
Jason Rumney <jasonr@gnu.org>
parents:
95728
diff
changeset
|
514 |
6488b258c0aa
(set_frame_menubar): Sync with version in xmenu.c.
Jason Rumney <jasonr@gnu.org>
parents:
95728
diff
changeset
|
515 /* This undoes save_menu_items. */ |
6488b258c0aa
(set_frame_menubar): Sync with version in xmenu.c.
Jason Rumney <jasonr@gnu.org>
parents:
95728
diff
changeset
|
516 unbind_to (specpdl_count, Qnil); |
6488b258c0aa
(set_frame_menubar): Sync with version in xmenu.c.
Jason Rumney <jasonr@gnu.org>
parents:
95728
diff
changeset
|
517 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
518 /* 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
|
519 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
|
520 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
|
521 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
|
522 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
|
523 wv = first_wv->contents; |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
524 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
|
525 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
526 Lisp_Object string; |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
527 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
|
528 if (NILP (string)) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
529 break; |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
530 wv->name = (char *) SDATA (string); |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
531 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
|
532 wv = wv->next; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
533 } |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
534 } |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
535 else |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
536 { |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
537 /* 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
|
538 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
|
539 |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
540 wv = xmalloc_widget_value (); |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
541 wv->name = "menubar"; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
542 wv->value = 0; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
543 wv->enabled = 1; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
544 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
|
545 wv->help = Qnil; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
546 first_wv = wv; |
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
547 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
548 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
|
549 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
|
550 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
551 Lisp_Object string; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
552 |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
553 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
|
554 if (NILP (string)) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
555 break; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
556 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
557 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
|
558 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
|
559 wv->value = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
560 wv->enabled = 1; |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
561 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
|
562 wv->help = Qnil; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
563 /* 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
|
564 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
|
565 /* 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
|
566 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
|
567 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
|
568 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
569 if (prev_wv) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
570 prev_wv->next = wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
571 else |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
572 first_wv->contents = wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
573 prev_wv = wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
574 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
575 |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
576 /* 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
|
577 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
|
578 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
|
579 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
|
580 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
581 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
582 /* 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
|
583 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
584 BLOCK_INPUT; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
585 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
586 if (menubar_widget) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
587 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
588 /* 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
|
589 while (DeleteMenu (menubar_widget, 0, MF_BYPOSITION)) |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
590 ; |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
591 } |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
592 else |
13434 | 593 { |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
594 menubar_widget = CreateMenu (); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
595 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
596 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
|
597 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
598 free_menubar_widget_value_tree (first_wv); |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
599 |
13434 | 600 { |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
601 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
|
602 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
603 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
|
604 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
|
605 /* Causes flicker when menu bar is updated |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
606 DrawMenuBar (FRAME_W32_WINDOW (f)); */ |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
607 |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
608 /* 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
|
609 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
|
610 if (old_widget == NULL) |
51206
22a5614b558f
Make (few) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
49600
diff
changeset
|
611 x_set_window_size (f, 0, FRAME_COLS (f), FRAME_LINES (f)); |
13434 | 612 } |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
613 |
13434 | 614 UNBLOCK_INPUT; |
615 } | |
616 | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
617 /* 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
|
618 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
|
619 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
|
620 is visible. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
621 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
622 void |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
109100
diff
changeset
|
623 initialize_frame_menubar (FRAME_PTR f) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
624 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
625 /* 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
|
626 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
|
627 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
|
628 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
|
629 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
630 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
631 /* 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
|
632 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
|
633 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
634 void |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
109100
diff
changeset
|
635 free_frame_menubar (FRAME_PTR f) |
13434 | 636 { |
637 BLOCK_INPUT; | |
638 | |
639 { | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15276
diff
changeset
|
640 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
|
641 SetMenu (FRAME_W32_WINDOW (f), NULL); |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
642 f->output_data.w32->menubar_widget = NULL; |
13434 | 643 DestroyMenu (old); |
644 } | |
40119
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
645 |
13434 | 646 UNBLOCK_INPUT; |
647 } | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
648 |
13434 | 649 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
650 /* 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
|
651 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
|
652 is blocked by the caller. */ |
13434 | 653 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
654 /* 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
|
655 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
|
656 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
|
657 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
|
658 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
|
659 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
|
660 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
|
661 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
|
662 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
|
663 (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
|
664 |
105923
1011707400d3
* menu.c (Fx_popup_menu): Consolidate versions from xmenu.c,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105669
diff
changeset
|
665 Lisp_Object |
1011707400d3
* menu.c (Fx_popup_menu): Consolidate versions from xmenu.c,
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
105669
diff
changeset
|
666 w32_menu_show (FRAME_PTR f, int x, int y, int for_click, int keymaps, |
109748
e2f8226efb99
Fix -Wwrite_strings in general and for Gtk+ specific code.
Jan D <jan.h.d@swipnet.se>
parents:
109501
diff
changeset
|
667 Lisp_Object title, const char **error) |
13434 | 668 { |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
669 int i; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
670 int menu_item_selection; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
671 HMENU menu; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
672 POINT pos; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
673 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
|
674 widget_value **submenu_stack |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
675 = (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
|
676 Lisp_Object *subprefix_stack |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
677 = (Lisp_Object *) alloca (menu_items_used * sizeof (Lisp_Object)); |
13434 | 678 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
|
679 int first_pane; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
680 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
681 *error = NULL; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
682 |
95732
6488b258c0aa
(set_frame_menubar): Sync with version in xmenu.c.
Jason Rumney <jasonr@gnu.org>
parents:
95728
diff
changeset
|
683 if (menu_items_n_panes == 0) |
6488b258c0aa
(set_frame_menubar): Sync with version in xmenu.c.
Jason Rumney <jasonr@gnu.org>
parents:
95728
diff
changeset
|
684 return Qnil; |
6488b258c0aa
(set_frame_menubar): Sync with version in xmenu.c.
Jason Rumney <jasonr@gnu.org>
parents:
95728
diff
changeset
|
685 |
13434 | 686 if (menu_items_used <= MENU_ITEMS_PANE_LENGTH) |
687 { | |
688 *error = "Empty menu"; | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
689 return Qnil; |
13434 | 690 } |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
691 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
692 /* 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
|
693 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
|
694 wv = xmalloc_widget_value (); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
695 wv->name = "menu"; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
696 wv->value = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
697 wv->enabled = 1; |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
698 wv->button_type = BUTTON_TYPE_NONE; |
42613 | 699 wv->help = Qnil; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
700 first_wv = wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
701 first_pane = 1; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
702 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
703 /* Loop over all panes and items, filling in the tree. */ |
13434 | 704 i = 0; |
705 while (i < menu_items_used) | |
706 { | |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
707 if (EQ (AREF (menu_items, i), Qnil)) |
13434 | 708 { |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
709 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
|
710 save_wv = prev_wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
711 prev_wv = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
712 first_pane = 1; |
13434 | 713 i++; |
714 } | |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
715 else if (EQ (AREF (menu_items, i), Qlambda)) |
13434 | 716 { |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
717 prev_wv = save_wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
718 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
|
719 first_pane = 0; |
13434 | 720 i++; |
721 } | |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
722 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
|
723 && submenu_depth != 0) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
724 i += MENU_ITEMS_PANE_LENGTH; |
13434 | 725 /* Ignore a nil in the item list. |
726 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
|
727 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
|
728 i += 1; |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
729 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
|
730 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
731 /* Create a new pane. */ |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
732 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
|
733 char *pane_string; |
40119
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
734 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
|
735 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
|
736 |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
737 if (STRINGP (pane_name)) |
40119
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
738 { |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
739 if (unicode_append_menu) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
740 pane_name = ENCODE_UTF_8 (pane_name); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
741 else if (STRING_MULTIBYTE (pane_name)) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
742 pane_name = ENCODE_SYSTEM (pane_name); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
743 |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
744 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
|
745 } |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
746 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
747 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
|
748 ? "" : (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
|
749 /* 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
|
750 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
|
751 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
|
752 pane_string = ""; |
13434 | 753 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
754 /* 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
|
755 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
|
756 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
|
757 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
|
758 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
759 wv = xmalloc_widget_value (); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
760 if (save_wv) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
761 save_wv->next = wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
762 else |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
763 first_wv->contents = wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
764 wv->name = pane_string; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
765 if (keymaps && !NILP (prefix)) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
766 wv->name++; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
767 wv->value = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
768 wv->enabled = 1; |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
769 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
|
770 wv->help = Qnil; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
771 save_wv = wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
772 prev_wv = 0; |
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 else if (first_pane) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
775 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
776 save_wv = wv; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
777 prev_wv = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
778 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
779 first_pane = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
780 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
|
781 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
782 else |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
783 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
784 /* Create a new item within current pane. */ |
27896
75f296b1a872
(single_submenu): Set up help string.
Jason Rumney <jasonr@gnu.org>
parents:
27400
diff
changeset
|
785 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
|
786 |
40119
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
787 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
|
788 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
|
789 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
|
790 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
|
791 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
|
792 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
|
793 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
|
794 |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
795 if (STRINGP (item_name)) |
40119
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
796 { |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
797 if (unicode_append_menu) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
798 item_name = ENCODE_UTF_8 (item_name); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
799 else if (STRING_MULTIBYTE (item_name)) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
800 item_name = ENCODE_SYSTEM (item_name); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
801 |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
802 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
|
803 } |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
804 |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
805 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
|
806 { |
bf81460680f2
(single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents:
39690
diff
changeset
|
807 descrip = ENCODE_SYSTEM (descrip); |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
808 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
|
809 } |
13434 | 810 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
811 wv = xmalloc_widget_value (); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
812 if (prev_wv) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
813 prev_wv->next = wv; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
814 else |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
815 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
|
816 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
|
817 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
|
818 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
|
819 wv->value = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
820 /* 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
|
821 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
|
822 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
|
823 wv->enabled = !NILP (enable); |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
824 |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
825 if (NILP (type)) |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
826 wv->button_type = BUTTON_TYPE_NONE; |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
827 else if (EQ (type, QCtoggle)) |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
828 wv->button_type = BUTTON_TYPE_TOGGLE; |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
829 else if (EQ (type, QCradio)) |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
830 wv->button_type = BUTTON_TYPE_RADIO; |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
831 else |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
832 abort (); |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
833 |
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
834 wv->selected = !NILP (selected); |
95732
6488b258c0aa
(set_frame_menubar): Sync with version in xmenu.c.
Jason Rumney <jasonr@gnu.org>
parents:
95728
diff
changeset
|
835 |
41908
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
836 if (!STRINGP (help)) |
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
837 help = Qnil; |
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
838 |
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
839 wv->help = help; |
28275
2c8492145fc8
(single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents:
27932
diff
changeset
|
840 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
841 prev_wv = wv; |
13434 | 842 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
843 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
|
844 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
845 } |
13434 | 846 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
847 /* 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
|
848 if (!NILP (title)) |
13434 | 849 { |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
850 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
|
851 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
|
852 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
853 /* 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
|
854 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
|
855 wv_sep->name = "--"; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
856 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
|
857 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
|
858 |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
859 if (unicode_append_menu) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
860 title = ENCODE_UTF_8 (title); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
861 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
|
862 title = ENCODE_SYSTEM (title); |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
863 |
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46293
diff
changeset
|
864 wv_title->name = (char *) SDATA (title); |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32671
diff
changeset
|
865 wv_title->enabled = TRUE; |
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32671
diff
changeset
|
866 wv_title->title = TRUE; |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
867 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
|
868 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
|
869 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
|
870 first_wv->contents = wv_title; |
13434 | 871 } |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
872 |
95732
6488b258c0aa
(set_frame_menubar): Sync with version in xmenu.c.
Jason Rumney <jasonr@gnu.org>
parents:
95728
diff
changeset
|
873 /* No selection has been chosen yet. */ |
6488b258c0aa
(set_frame_menubar): Sync with version in xmenu.c.
Jason Rumney <jasonr@gnu.org>
parents:
95728
diff
changeset
|
874 menu_item_selection = 0; |
6488b258c0aa
(set_frame_menubar): Sync with version in xmenu.c.
Jason Rumney <jasonr@gnu.org>
parents:
95728
diff
changeset
|
875 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
876 /* Actually create the menu. */ |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
877 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
|
878 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
|
879 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
880 /* Adjust coordinates to be root-window-relative. */ |
13434 | 881 pos.x = x; |
882 pos.y = y; | |
16588
481b7874a1e9
Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents:
15276
diff
changeset
|
883 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
|
884 |
13434 | 885 /* Display the menu. */ |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
886 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
|
887 WM_EMACS_TRACKPOPUPMENU, |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
888 (WPARAM)menu, (LPARAM)&pos); |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
889 |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
890 /* 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
|
891 during the call. */ |
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
892 discard_mouse_events (); |
80759
c3bd08b7c78d
(Fx_popup_menu, Fx_popup_dialog, w32_menu_show): Ensure mouse is not
Jason Rumney <jasonr@gnu.org>
parents:
79759
diff
changeset
|
893 FRAME_X_DISPLAY_INFO (f)->grabbed = 0; |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
894 |
30238
4a3b87cc6f04
(w32_menu_show): Call free_menubar_widget_value_tree after menu is
Jason Rumney <jasonr@gnu.org>
parents:
30178
diff
changeset
|
895 /* 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
|
896 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
|
897 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
898 DestroyMenu (menu); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
899 |
76080
077c9ec8eca6
* w32menu.c (Fx_popup_menu): Don't free menu strings here.
Jason Rumney <jasonr@gnu.org>
parents:
76074
diff
changeset
|
900 /* 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
|
901 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
|
902 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
|
903 |
13434 | 904 /* Find the selected item, and its pane, to return |
905 the proper value. */ | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
906 if (menu_item_selection != 0) |
13434 | 907 { |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
908 Lisp_Object prefix, entry; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
909 |
38371
eb915f0b1d6e
(menubar_selection_callback, w32_menu_show): Initialize `entry' to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
36677
diff
changeset
|
910 prefix = entry = Qnil; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
911 i = 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
912 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
|
913 { |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
914 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
|
915 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
916 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
|
917 prefix = entry; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
918 i++; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
919 } |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
920 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
|
921 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
922 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
|
923 i++; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
924 } |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
925 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
|
926 { |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
927 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
|
928 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
|
929 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
930 /* 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
|
931 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
|
932 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
|
933 i += 1; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
934 else |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
935 { |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
936 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
|
937 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
|
938 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
939 if (keymaps != 0) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
940 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
941 int j; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
942 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
943 entry = Fcons (entry, Qnil); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
944 if (!NILP (prefix)) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
945 entry = Fcons (prefix, entry); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
946 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
|
947 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
|
948 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
|
949 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
950 return entry; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
951 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
952 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
|
953 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
954 } |
13434 | 955 } |
72260
6e63f47b8977
(w32_menu_show, w32_dialog_show): Call Fsignal to quit
Jason Rumney <jasonr@gnu.org>
parents:
69443
diff
changeset
|
956 else if (!for_click) |
6e63f47b8977
(w32_menu_show, w32_dialog_show): Call Fsignal to quit
Jason Rumney <jasonr@gnu.org>
parents:
69443
diff
changeset
|
957 /* 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
|
958 Fsignal (Qquit, Qnil); |
19711
dc9694ee3f70
(init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents:
16884
diff
changeset
|
959 |
13434 | 960 return Qnil; |
961 } | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
962 |
13434 | 963 |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
964 #ifdef HAVE_DIALOGS |
93979
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
965 /* 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
|
966 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
967 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
|
968 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
|
969 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
|
970 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
|
971 fit on a button. |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
972 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
|
973 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
|
974 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
|
975 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
|
976 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
|
977 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
|
978 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
|
979 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
|
980 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
|
981 out how big to make everything. |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
982 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
983 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
|
984 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
|
985 the MessageBox function. |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
986 */ |
95735
bc8db28659e5
(digest_single_submenu): Declare extern.
Juanma Barranquero <lekktu@gmail.com>
parents:
95732
diff
changeset
|
987 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
988 static char * button_names [] = { |
13434 | 989 "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
|
990 "button6", "button7", "button8", "button9", "button10" }; |
13434 | 991 |
992 static Lisp_Object | |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
109100
diff
changeset
|
993 w32_dialog_show (FRAME_PTR f, int keymaps, |
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
109100
diff
changeset
|
994 Lisp_Object title, Lisp_Object header, |
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
109100
diff
changeset
|
995 char **error) |
13434 | 996 { |
110994
734b2470f93c
src/w32*.c: Whitespace fixes and typos.
Juanma Barranquero <lekktu@gmail.com>
parents:
106815
diff
changeset
|
997 int i, nb_buttons = 0; |
13434 | 998 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
|
999 int menu_item_selection; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1000 |
38371
eb915f0b1d6e
(menubar_selection_callback, w32_menu_show): Initialize `entry' to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
36677
diff
changeset
|
1001 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
|
1002 |
13434 | 1003 /* Number of elements seen so far, before boundary. */ |
1004 int left_count = 0; | |
1005 /* 1 means we've seen the boundary between left-hand elts and right-hand. */ | |
1006 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
|
1007 |
13434 | 1008 *error = NULL; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1009 |
13434 | 1010 if (menu_items_n_panes > 1) |
1011 { | |
1012 *error = "Multiple panes in dialog box"; | |
1013 return Qnil; | |
1014 } | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1015 |
13434 | 1016 /* Create a tree of widget_value objects |
1017 representing the text label and buttons. */ | |
1018 { | |
1019 Lisp_Object pane_name, prefix; | |
1020 char *pane_string; | |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1021 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
|
1022 prefix = AREF (menu_items, MENU_ITEMS_PANE_PREFIX); |
13434 | 1023 pane_string = (NILP (pane_name) |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
1024 ? "" : (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
|
1025 prev_wv = xmalloc_widget_value (); |
13434 | 1026 prev_wv->value = pane_string; |
1027 if (keymaps && !NILP (prefix)) | |
1028 prev_wv->name++; | |
1029 prev_wv->enabled = 1; | |
1030 prev_wv->name = "message"; | |
42589
ac09ecabe088
(single_submenu, set_frame_menubar, w32_menu_show):
Jason Rumney <jasonr@gnu.org>
parents:
42584
diff
changeset
|
1031 prev_wv->help = Qnil; |
13434 | 1032 first_wv = prev_wv; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
1033 |
13434 | 1034 /* Loop over all panes and items, filling in the tree. */ |
1035 i = MENU_ITEMS_PANE_LENGTH; | |
1036 while (i < menu_items_used) | |
1037 { | |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
1038 |
13434 | 1039 /* Create a new item within current pane. */ |
27896
75f296b1a872
(single_submenu): Set up help string.
Jason Rumney <jasonr@gnu.org>
parents:
27400
diff
changeset
|
1040 Lisp_Object item_name, enable, descrip, help; |
75f296b1a872
(single_submenu): Set up help string.
Jason Rumney <jasonr@gnu.org>
parents:
27400
diff
changeset
|
1041 |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1042 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
|
1043 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
|
1044 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
|
1045 help = AREF (menu_items, i + MENU_ITEMS_ITEM_HELP); |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
1046 |
13434 | 1047 if (NILP (item_name)) |
1048 { | |
1049 free_menubar_widget_value_tree (first_wv); | |
1050 *error = "Submenu in dialog items"; | |
1051 return Qnil; | |
1052 } | |
1053 if (EQ (item_name, Qquote)) | |
1054 { | |
1055 /* This is the boundary between left-side elts | |
1056 and right-side elts. Stop incrementing right_count. */ | |
1057 boundary_seen = 1; | |
1058 i++; | |
1059 continue; | |
1060 } | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1061 if (nb_buttons >= 9) |
13434 | 1062 { |
1063 free_menubar_widget_value_tree (first_wv); | |
1064 *error = "Too many dialog items"; | |
1065 return Qnil; | |
1066 } | |
21741
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 wv = xmalloc_widget_value (); |
13434 | 1069 prev_wv->next = wv; |
1070 wv->name = (char *) button_names[nb_buttons]; | |
1071 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
|
1072 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
|
1073 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
|
1074 wv->call_data = (void *) &AREF (menu_items, i); |
13434 | 1075 wv->enabled = !NILP (enable); |
42589
ac09ecabe088
(single_submenu, set_frame_menubar, w32_menu_show):
Jason Rumney <jasonr@gnu.org>
parents:
42584
diff
changeset
|
1076 wv->help = Qnil; |
13434 | 1077 prev_wv = wv; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1078 |
13434 | 1079 if (! boundary_seen) |
1080 left_count++; | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1081 |
13434 | 1082 nb_buttons++; |
1083 i += MENU_ITEMS_ITEM_LENGTH; | |
1084 } | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1085 |
13434 | 1086 /* If the boundary was not specified, |
1087 by default put half on the left and half on the right. */ | |
1088 if (! boundary_seen) | |
1089 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
|
1090 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1091 wv = xmalloc_widget_value (); |
13434 | 1092 wv->name = dialog_name; |
42589
ac09ecabe088
(single_submenu, set_frame_menubar, w32_menu_show):
Jason Rumney <jasonr@gnu.org>
parents:
42584
diff
changeset
|
1093 wv->help = Qnil; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1094 |
62668
d126643d7af1
(Fx_popup_dialog): Add a third boolean argument to select frame title
Nick Roberts <nickrob@snap.net.nz>
parents:
56973
diff
changeset
|
1095 /* 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
|
1096 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
|
1097 a popup for errors. */ |
110994
734b2470f93c
src/w32*.c: Whitespace fixes and typos.
Juanma Barranquero <lekktu@gmail.com>
parents:
106815
diff
changeset
|
1098 if (NILP (header)) |
62668
d126643d7af1
(Fx_popup_dialog): Add a third boolean argument to select frame title
Nick Roberts <nickrob@snap.net.nz>
parents:
56973
diff
changeset
|
1099 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
|
1100 else |
d126643d7af1
(Fx_popup_dialog): Add a third boolean argument to select frame title
Nick Roberts <nickrob@snap.net.nz>
parents:
56973
diff
changeset
|
1101 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
|
1102 |
13434 | 1103 /* Dialog boxes use a really stupid name encoding |
1104 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
|
1105 and how many buttons are on the right. */ |
13434 | 1106 dialog_name[1] = '0' + nb_buttons; |
1107 dialog_name[2] = 'B'; | |
1108 dialog_name[3] = 'R'; | |
1109 /* Number of buttons to put on the right. */ | |
1110 dialog_name[4] = '0' + nb_buttons - left_count; | |
1111 dialog_name[5] = 0; | |
1112 wv->contents = first_wv; | |
1113 first_wv = wv; | |
1114 } | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1115 |
13434 | 1116 /* 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
|
1117 dialog_id = widget_id_tick++; |
13434 | 1118 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
|
1119 f->output_data.w32->widget, 1, 0, |
13434 | 1120 dialog_selection_callback, 0); |
32988
c3435dc00ed7
* lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
32671
diff
changeset
|
1121 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
|
1122 |
13434 | 1123 /* Free the widget_value objects we used to specify the contents. */ |
1124 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
|
1125 |
13434 | 1126 /* No selection has been chosen yet. */ |
1127 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
|
1128 |
13434 | 1129 /* Display the menu. */ |
1130 lw_pop_up_all_widgets (dialog_id); | |
1131 | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1132 /* 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
|
1133 popup_get_selection ((XEvent *) 0, FRAME_X_DISPLAY_INFO (f), dialog_id); |
13434 | 1134 |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
1135 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
|
1136 |
13434 | 1137 /* Find the selected item, and its pane, to return |
1138 the proper value. */ | |
1139 if (menu_item_selection != 0) | |
1140 { | |
1141 Lisp_Object prefix; | |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1142 |
13434 | 1143 prefix = Qnil; |
1144 i = 0; | |
1145 while (i < menu_items_used) | |
1146 { | |
1147 Lisp_Object entry; | |
1148 | |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1149 if (EQ (AREF (menu_items, i), Qt)) |
13434 | 1150 { |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1151 prefix = AREF (menu_items, i + MENU_ITEMS_PANE_PREFIX); |
13434 | 1152 i += MENU_ITEMS_PANE_LENGTH; |
1153 } | |
1154 else | |
1155 { | |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1156 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
|
1157 if (menu_item_selection == i) |
13434 | 1158 { |
1159 if (keymaps != 0) | |
1160 { | |
1161 entry = Fcons (entry, Qnil); | |
1162 if (!NILP (prefix)) | |
1163 entry = Fcons (prefix, entry); | |
1164 } | |
1165 return entry; | |
1166 } | |
1167 i += MENU_ITEMS_ITEM_LENGTH; | |
1168 } | |
1169 } | |
1170 } | |
72260
6e63f47b8977
(w32_menu_show, w32_dialog_show): Call Fsignal to quit
Jason Rumney <jasonr@gnu.org>
parents:
69443
diff
changeset
|
1171 else |
6e63f47b8977
(w32_menu_show, w32_dialog_show): Call Fsignal to quit
Jason Rumney <jasonr@gnu.org>
parents:
69443
diff
changeset
|
1172 /* 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
|
1173 Fsignal (Qquit, Qnil); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1174 |
13434 | 1175 return Qnil; |
1176 } | |
93979
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1177 #else /* !HAVE_DIALOGS */ |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1178 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1179 /* 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
|
1180 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
|
1181 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
|
1182 MessageBox provides. */ |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1183 |
110994
734b2470f93c
src/w32*.c: Whitespace fixes and typos.
Juanma Barranquero <lekktu@gmail.com>
parents:
106815
diff
changeset
|
1184 static int |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
109100
diff
changeset
|
1185 is_simple_dialog (Lisp_Object contents) |
93979
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1186 { |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1187 Lisp_Object options = XCDR (contents); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1188 Lisp_Object name, yes, no, other; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1189 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1190 yes = build_string ("Yes"); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1191 no = build_string ("No"); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1192 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1193 if (!CONSP (options)) |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1194 return 0; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1195 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1196 name = XCAR (XCAR (options)); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1197 if (!CONSP (options)) |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1198 return 0; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1199 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1200 if (!NILP (Fstring_equal (name, yes))) |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1201 other = no; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1202 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
|
1203 other = yes; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1204 else |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1205 return 0; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1206 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1207 options = XCDR (options); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1208 if (!CONSP (options)) |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1209 return 0; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1210 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1211 name = XCAR (XCAR (options)); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1212 if (NILP (Fstring_equal (name, other))) |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1213 return 0; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1214 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1215 /* Check there are no more options. */ |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1216 options = XCDR (options); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1217 return !(CONSP (options)); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1218 } |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1219 |
110994
734b2470f93c
src/w32*.c: Whitespace fixes and typos.
Juanma Barranquero <lekktu@gmail.com>
parents:
106815
diff
changeset
|
1220 static Lisp_Object |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
109100
diff
changeset
|
1221 simple_dialog_show (FRAME_PTR f, Lisp_Object contents, Lisp_Object header) |
93979
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1222 { |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1223 int answer; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1224 UINT type; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1225 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
|
1226 |
109772
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1227 type = MB_YESNO; |
93979
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1228 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1229 /* 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
|
1230 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
|
1231 to see what type of dialog to use. */ |
109772
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1232 |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1233 /* Use unicode if possible, so any language can be displayed. */ |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1234 if (unicode_message_box) |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1235 { |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1236 WCHAR *text, *title; |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1237 |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1238 if (STRINGP (temp)) |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1239 { |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1240 char *utf8_text = SDATA (ENCODE_UTF_8 (temp)); |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1241 /* Be pessimistic about the number of characters needed. |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1242 Remember characters outside the BMP will take more than |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1243 one utf16 word, so we cannot simply use the character |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1244 length of temp. */ |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1245 int utf8_len = strlen (utf8_text); |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1246 text = alloca ((utf8_len + 1) * sizeof (WCHAR)); |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1247 utf8to16 (utf8_text, utf8_len, text); |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1248 } |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1249 else |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1250 { |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1251 text = L""; |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1252 } |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1253 |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1254 if (NILP (header)) |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1255 { |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1256 title = L"Question"; |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1257 type |= MB_ICONQUESTION; |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1258 } |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1259 else |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1260 { |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1261 title = L"Information"; |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1262 type |= MB_ICONINFORMATION; |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1263 } |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1264 |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1265 answer = unicode_message_box (FRAME_W32_WINDOW (f), text, title, type); |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1266 } |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1267 else |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1268 { |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1269 char *text, *title; |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1270 |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1271 /* Fall back on ANSI message box, but at least use system |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1272 encoding so questions representable by the system codepage |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1273 are encoded properly. */ |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1274 if (STRINGP (temp)) |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1275 text = SDATA (ENCODE_SYSTEM (temp)); |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1276 else |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1277 text = ""; |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1278 |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1279 if (NILP (header)) |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1280 { |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1281 title = "Question"; |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1282 type |= MB_ICONQUESTION; |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1283 } |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1284 else |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1285 { |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1286 title = "Information"; |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1287 type |= MB_ICONINFORMATION; |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1288 } |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1289 |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1290 answer = MessageBox (FRAME_W32_WINDOW (f), text, title, type); |
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1291 } |
93979
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1292 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1293 if (answer == IDYES) |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1294 lispy_answer = build_string ("Yes"); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1295 else if (answer == IDNO) |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1296 lispy_answer = build_string ("No"); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1297 else |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1298 Fsignal (Qquit, Qnil); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1299 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1300 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
|
1301 { |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1302 Lisp_Object item, name, value; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1303 item = XCAR (temp); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1304 if (CONSP (item)) |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1305 { |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1306 name = XCAR (item); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1307 value = XCDR (item); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1308 } |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1309 else |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1310 { |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1311 name = item; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1312 value = Qnil; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1313 } |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1314 |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1315 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
|
1316 { |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1317 return value; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1318 } |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1319 } |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1320 Fsignal (Qquit, Qnil); |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1321 return Qnil; |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1322 } |
b8d983c8a6d0
(is_simple_dialog, simple_dialog_show): New functions.
Jason Rumney <jasonr@gnu.org>
parents:
91773
diff
changeset
|
1323 #endif /* !HAVE_DIALOGS */ |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1324 |
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 /* UTF8: 0xxxxxxx, 110xxxxx 10xxxxxx, 1110xxxx, 10xxxxxx, 10xxxxxx */ |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1327 static void |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1328 utf8to16 (unsigned char * src, int len, WCHAR * dest) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1329 { |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1330 while (len > 0) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1331 { |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1332 int utf16; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1333 if (*src < 0x80) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1334 { |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1335 *dest = (WCHAR) *src; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1336 dest++; src++; len--; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1337 } |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1338 /* 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
|
1339 else if (*src < 0xC0) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1340 { |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1341 src++; len--; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1342 } |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1343 /* 2 char UTF-8 sequence. */ |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1344 else if (*src < 0xE0) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1345 { |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1346 *dest = (WCHAR) (((*src & 0x1f) << 6) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1347 | (*(src + 1) & 0x3f)); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1348 src += 2; len -= 2; dest++; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1349 } |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1350 else if (*src < 0xF0) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1351 { |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1352 *dest = (WCHAR) (((*src & 0x0f) << 12) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1353 | ((*(src + 1) & 0x3f) << 6) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1354 | (*(src + 2) & 0x3f)); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1355 src += 3; len -= 3; dest++; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1356 } |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1357 else /* Not encodable. Insert Unicode Substitution char. */ |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1358 { |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1359 *dest = (WCHAR) 0xfffd; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1360 src++; len--; dest++; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1361 } |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1362 } |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1363 *dest = 0; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1364 } |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1365 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1366 static int |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1367 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
|
1368 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1369 UINT fuFlags; |
78015
cf89ff54912e
(add_menu_item): Escape `&' characters in menu items and their keybindings.
Eli Zaretskii <eliz@gnu.org>
parents:
76086
diff
changeset
|
1370 char *out_string, *p, *q; |
27932
a590f8d0dbd2
[HAVE_BOXES]: Remove #undef.
Jason Rumney <jasonr@gnu.org>
parents:
27896
diff
changeset
|
1371 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
|
1372 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
|
1373 |
111991
968255ee954a
Support for menu separators in the GTK tool-bar.
Chong Yidong <cyd@stupidchicken.com>
parents:
110997
diff
changeset
|
1374 if (menu_separator_name_p (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
|
1375 { |
c33b80a45f6a
(add_menu_item): Reset menu item text when changing type to radio button.
Jason Rumney <jasonr@gnu.org>
parents:
32988
diff
changeset
|
1376 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
|
1377 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
|
1378 } |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49348
diff
changeset
|
1379 else |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1380 { |
22750
b38cb406ed80
(add_menu_item): Draw menu items like titles if call_data is 0.
Andrew Innes <andrewi@gnu.org>
parents:
22737
diff
changeset
|
1381 if (wv->enabled) |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1382 fuFlags = MF_STRING; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1383 else |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1384 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
|
1385 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1386 if (wv->key != NULL) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1387 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1388 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
|
1389 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
|
1390 strcat (out_string, "\t"); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1391 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
|
1392 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1393 else |
109759
779e72b463fd
Shut up compiler warnings due to "char *" and "const char *".
Eli Zaretskii <eliz@gnu.org>
parents:
109748
diff
changeset
|
1394 out_string = (char *)wv->name; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1395 |
78015
cf89ff54912e
(add_menu_item): Escape `&' characters in menu items and their keybindings.
Eli Zaretskii <eliz@gnu.org>
parents:
76086
diff
changeset
|
1396 /* 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
|
1397 key binding. */ |
cf89ff54912e
(add_menu_item): Escape `&' characters in menu items and their keybindings.
Eli Zaretskii <eliz@gnu.org>
parents:
76086
diff
changeset
|
1398 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
|
1399 if (unicode_append_menu) |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1400 { |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1401 /* 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
|
1402 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
|
1403 { |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1404 if (*p == '&') |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1405 nlen++; |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1406 } |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1407 } |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1408 else |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1409 { |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1410 /* 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
|
1411 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
|
1412 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
|
1413 { |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1414 if (_mbsnextc (p) == '&') |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1415 nlen++; |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1416 } |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1417 } |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1418 |
78015
cf89ff54912e
(add_menu_item): Escape `&' characters in menu items and their keybindings.
Eli Zaretskii <eliz@gnu.org>
parents:
76086
diff
changeset
|
1419 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
|
1420 { |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1421 p = out_string; |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1422 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
|
1423 q = out_string; |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1424 while (*p) |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1425 { |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1426 if (unicode_append_menu) |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1427 { |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1428 if (*p == '&') |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1429 *q++ = *p; |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1430 *q++ = *p++; |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1431 } |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1432 else |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1433 { |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1434 if (_mbsnextc (p) == '&') |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1435 { |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1436 _mbsncpy (q, p, 1); |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1437 q = _mbsinc (q); |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1438 } |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1439 _mbsncpy (q, p, 1); |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1440 p = _mbsinc (p); |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1441 q = _mbsinc (q); |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1442 } |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1443 } |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1444 *q = '\0'; |
349c82ee7ef7
(add_menu_item): Don't use multibyte string functions on
Jason Rumney <jasonr@gnu.org>
parents:
78015
diff
changeset
|
1445 } |
78015
cf89ff54912e
(add_menu_item): Escape `&' characters in menu items and their keybindings.
Eli Zaretskii <eliz@gnu.org>
parents:
76086
diff
changeset
|
1446 |
41908
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
1447 if (item != NULL) |
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
1448 fuFlags = MF_POPUP; |
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
1449 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
|
1450 { |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1451 /* 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
|
1452 we can't deallocate the memory otherwise. */ |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1453 if (get_menu_item_info) |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1454 { |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1455 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
|
1456 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
|
1457 #ifdef MENU_DEBUG |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1458 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
|
1459 #endif |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1460 fuFlags = MF_OWNERDRAW | MF_DISABLED; |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1461 } |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1462 else |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1463 fuFlags = MF_DISABLED; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1464 } |
41637
d797ce338b4b
(add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents:
41251
diff
changeset
|
1465 |
27400
da3ee40952bf
Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents:
26729
diff
changeset
|
1466 /* 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
|
1467 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
|
1468 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
|
1469 fuFlags |= MF_CHECKED; |
27932
a590f8d0dbd2
[HAVE_BOXES]: Remove #undef.
Jason Rumney <jasonr@gnu.org>
parents:
27896
diff
changeset
|
1470 else |
36677
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
1471 fuFlags |= MF_UNCHECKED; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1472 } |
36677
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
1473 |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1474 if (unicode_append_menu && out_string) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1475 { |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1476 /* 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
|
1477 int utf8_len = strlen (out_string); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1478 WCHAR * utf16_string; |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1479 if (fuFlags & MF_OWNERDRAW) |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1480 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
|
1481 else |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1482 utf16_string = alloca ((utf8_len + 1) * sizeof (WCHAR)); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1483 |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1484 utf8to16 (out_string, utf8_len, utf16_string); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1485 return_value = unicode_append_menu (menu, fuFlags, |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1486 item != NULL ? (UINT) item |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1487 : (UINT) wv->call_data, |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1488 utf16_string); |
65301
c0c0b5bf96ab
(add_menu_item): If unicode_append_menu returns an
Jason Rumney <jasonr@gnu.org>
parents:
64770
diff
changeset
|
1489 if (!return_value) |
c0c0b5bf96ab
(add_menu_item): If unicode_append_menu returns an
Jason Rumney <jasonr@gnu.org>
parents:
64770
diff
changeset
|
1490 { |
c0c0b5bf96ab
(add_menu_item): If unicode_append_menu returns an
Jason Rumney <jasonr@gnu.org>
parents:
64770
diff
changeset
|
1491 /* 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
|
1492 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
|
1493 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
|
1494 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
|
1495 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
|
1496 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
|
1497 return_value = |
c0c0b5bf96ab
(add_menu_item): If unicode_append_menu returns an
Jason Rumney <jasonr@gnu.org>
parents:
64770
diff
changeset
|
1498 AppendMenu (menu, fuFlags, |
c0c0b5bf96ab
(add_menu_item): If unicode_append_menu returns an
Jason Rumney <jasonr@gnu.org>
parents:
64770
diff
changeset
|
1499 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
|
1500 out_string); |
c0c0b5bf96ab
(add_menu_item): If unicode_append_menu returns an
Jason Rumney <jasonr@gnu.org>
parents:
64770
diff
changeset
|
1501 /* 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
|
1502 unicode_append_menu = NULL; |
c0c0b5bf96ab
(add_menu_item): If unicode_append_menu returns an
Jason Rumney <jasonr@gnu.org>
parents:
64770
diff
changeset
|
1503 } |
c0c0b5bf96ab
(add_menu_item): If unicode_append_menu returns an
Jason Rumney <jasonr@gnu.org>
parents:
64770
diff
changeset
|
1504 |
c0c0b5bf96ab
(add_menu_item): If unicode_append_menu returns an
Jason Rumney <jasonr@gnu.org>
parents:
64770
diff
changeset
|
1505 if (unicode_append_menu && (fuFlags & MF_OWNERDRAW)) |
56897
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1506 local_free (out_string); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1507 } |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1508 else |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1509 { |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1510 return_value = |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1511 AppendMenu (menu, |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1512 fuFlags, |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1513 item != NULL ? (UINT) item : (UINT) wv->call_data, |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1514 out_string ); |
1fa5ffcb2ac8
(_widget_value): Added lname and lkey.
Jason Rumney <jasonr@gnu.org>
parents:
55671
diff
changeset
|
1515 } |
27932
a590f8d0dbd2
[HAVE_BOXES]: Remove #undef.
Jason Rumney <jasonr@gnu.org>
parents:
27896
diff
changeset
|
1516 |
a590f8d0dbd2
[HAVE_BOXES]: Remove #undef.
Jason Rumney <jasonr@gnu.org>
parents:
27896
diff
changeset
|
1517 /* 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
|
1518 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
|
1519 { |
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
1520 if (set_menu_item_info) |
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
1521 { |
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
1522 MENUITEMINFO info; |
109165
750db9f3e6d8
Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents:
109160
diff
changeset
|
1523 memset (&info, 0, sizeof (info)); |
36677
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
1524 info.cbSize = sizeof (info); |
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
1525 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
|
1526 |
41908
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
1527 /* 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
|
1528 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
|
1529 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
|
1530 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
|
1531 #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
|
1532 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
|
1533 #else |
6817f9469688
(add_menu_item, w32_menu_display_help) [USE_LISP_UNION_TYPE]: Cast
Jason Rumney <jasonr@gnu.org>
parents:
53326
diff
changeset
|
1534 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
|
1535 #endif |
36677
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
1536 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
|
1537 { |
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
1538 /* 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
|
1539 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
|
1540 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
|
1541 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
|
1542 info.dwTypeData = out_string; |
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
1543 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
|
1544 } |
33971
c33b80a45f6a
(add_menu_item): Reset menu item text when changing type to radio button.
Jason Rumney <jasonr@gnu.org>
parents:
32988
diff
changeset
|
1545 |
36677
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
1546 set_menu_item_info (menu, |
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
1547 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
|
1548 FALSE, &info); |
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
1549 } |
eb7af01c7f27
(add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents:
36313
diff
changeset
|
1550 } |
27932
a590f8d0dbd2
[HAVE_BOXES]: Remove #undef.
Jason Rumney <jasonr@gnu.org>
parents:
27896
diff
changeset
|
1551 return return_value; |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1552 } |
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 /* Construct native Windows menu(bar) based on widget_value tree. */ |
110975
e0ac9a58795e
src/w32*.c: Make functions static.
Juanma Barranquero <lekktu@gmail.com>
parents:
109882
diff
changeset
|
1555 static int |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1556 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
|
1557 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1558 int items_added = 0; |
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 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
|
1561 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1562 if (wv->contents) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1563 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1564 HMENU sub_menu = CreatePopupMenu (); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1565 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1566 if (sub_menu == NULL) |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1567 return 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1568 |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1569 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
|
1570 !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
|
1571 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1572 DestroyMenu (sub_menu); |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1573 return 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1574 } |
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 else |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1577 { |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1578 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
|
1579 return 0; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1580 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1581 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1582 return 1; |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1583 } |
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1584 |
28275
2c8492145fc8
(single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents:
27932
diff
changeset
|
1585 /* 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
|
1586 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
|
1587 available. */ |
2c8492145fc8
(single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents:
27932
diff
changeset
|
1588 void |
41646
258fa72efab7
(w32_menu_display_help): Actually add the new argument
Andrew Innes <andrewi@gnu.org>
parents:
41637
diff
changeset
|
1589 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
|
1590 { |
2c8492145fc8
(single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents:
27932
diff
changeset
|
1591 if (get_menu_item_info) |
2c8492145fc8
(single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents:
27932
diff
changeset
|
1592 { |
41637
d797ce338b4b
(add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents:
41251
diff
changeset
|
1593 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
|
1594 Lisp_Object frame, help; |
28275
2c8492145fc8
(single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents:
27932
diff
changeset
|
1595 |
64632
13b6920b1146
(w32_menu_display_help): Suppress tooltip when navigating menus with
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1596 /* 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
|
1597 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
|
1598 up elsewhere. */ |
13b6920b1146
(w32_menu_display_help): Suppress tooltip when navigating menus with
Jason Rumney <jasonr@gnu.org>
parents:
64084
diff
changeset
|
1599 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
|
1600 || !(flags & MF_MOUSESELECT)) |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1601 help = Qnil; |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1602 else |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1603 { |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1604 MENUITEMINFO info; |
28275
2c8492145fc8
(single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents:
27932
diff
changeset
|
1605 |
109165
750db9f3e6d8
Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents:
109160
diff
changeset
|
1606 memset (&info, 0, sizeof (info)); |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1607 info.cbSize = sizeof (info); |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1608 info.fMask = MIIM_DATA; |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1609 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
|
1610 |
55671
6817f9469688
(add_menu_item, w32_menu_display_help) [USE_LISP_UNION_TYPE]: Cast
Jason Rumney <jasonr@gnu.org>
parents:
53326
diff
changeset
|
1611 #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
|
1612 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
|
1613 : Qnil; |
6817f9469688
(add_menu_item, w32_menu_display_help) [USE_LISP_UNION_TYPE]: Cast
Jason Rumney <jasonr@gnu.org>
parents:
53326
diff
changeset
|
1614 #else |
41908
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
1615 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
|
1616 #endif |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1617 } |
30989
2152817050ff
(keymap_panes): Pass the keymap's prompt as the pane name to
Jason Rumney <jasonr@gnu.org>
parents:
30238
diff
changeset
|
1618 |
41637
d797ce338b4b
(add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents:
41251
diff
changeset
|
1619 /* 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
|
1620 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
|
1621 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
|
1622 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
|
1623 if (f) |
d797ce338b4b
(add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents:
41251
diff
changeset
|
1624 { |
d797ce338b4b
(add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents:
41251
diff
changeset
|
1625 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
|
1626 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
|
1627 } |
d797ce338b4b
(add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents:
41251
diff
changeset
|
1628 else |
d797ce338b4b
(add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents:
41251
diff
changeset
|
1629 /* 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
|
1630 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
|
1631 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
|
1632 } |
2c8492145fc8
(single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents:
27932
diff
changeset
|
1633 } |
2c8492145fc8
(single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents:
27932
diff
changeset
|
1634 |
41908
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
1635 /* 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
|
1636 static void |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
109100
diff
changeset
|
1637 w32_free_submenu_strings (HMENU menu) |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1638 { |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1639 int i, num = GetMenuItemCount (menu); |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1640 for (i = 0; i < num; i++) |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1641 { |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1642 MENUITEMINFO info; |
109165
750db9f3e6d8
Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents:
109160
diff
changeset
|
1643 memset (&info, 0, sizeof (info)); |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1644 info.cbSize = sizeof (info); |
41908
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
1645 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
|
1646 |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1647 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
|
1648 |
41908
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
1649 /* 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
|
1650 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
|
1651 { |
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
1652 #ifdef MENU_DEBUG |
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
1653 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
|
1654 #endif |
46815
52f36f4b0e4f
(local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents:
46370
diff
changeset
|
1655 local_free (info.dwItemData); |
41908
4d8905b9ee49
(_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents:
41733
diff
changeset
|
1656 } |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1657 |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1658 /* Recurse down submenus. */ |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1659 if (info.hSubMenu) |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1660 w32_free_submenu_strings (info.hSubMenu); |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1661 } |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1662 } |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1663 |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1664 void |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
109100
diff
changeset
|
1665 w32_free_menu_strings (HWND hwnd) |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1666 { |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1667 HMENU menu = current_popup_menu; |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1668 |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1669 if (get_menu_item_info) |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1670 { |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1671 /* 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
|
1672 menubar. */ |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1673 if (!menu) |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1674 menu = GetMenu (hwnd); |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1675 |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1676 if (menu) |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1677 w32_free_submenu_strings (menu); |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1678 } |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1679 |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1680 current_popup_menu = NULL; |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1681 } |
28275
2c8492145fc8
(single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents:
27932
diff
changeset
|
1682 |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1683 #endif /* HAVE_MENUS */ |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1684 |
73788
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73695
diff
changeset
|
1685 /* 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
|
1686 |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73695
diff
changeset
|
1687 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
|
1688 doc: /* Return t if a menu or popup dialog is active on selected frame. */) |
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
1689 (void) |
73788
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73695
diff
changeset
|
1690 { |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73695
diff
changeset
|
1691 #ifdef HAVE_MENUS |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73695
diff
changeset
|
1692 FRAME_PTR f; |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73695
diff
changeset
|
1693 f = SELECTED_FRAME (); |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73695
diff
changeset
|
1694 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
|
1695 #else |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73695
diff
changeset
|
1696 return Qnil; |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73695
diff
changeset
|
1697 #endif /* HAVE_MENUS */ |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73695
diff
changeset
|
1698 } |
177184091f28
(Fmenu_or_popup_active_p): Define outside HAVE_MENUS.
Chong Yidong <cyd@stupidchicken.com>
parents:
73695
diff
changeset
|
1699 |
110994
734b2470f93c
src/w32*.c: Whitespace fixes and typos.
Juanma Barranquero <lekktu@gmail.com>
parents:
106815
diff
changeset
|
1700 void |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
109100
diff
changeset
|
1701 syms_of_w32menu (void) |
13434 | 1702 { |
90920
b3ae82a0a4fd
(syms_of_w32menu): Use DEFSYM macro.
Jason Rumney <jasonr@gnu.org>
parents:
90776
diff
changeset
|
1703 globals_of_w32menu (); |
21741
3d1ce72aa7b9
Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents:
21612
diff
changeset
|
1704 |
41733
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1705 current_popup_menu = NULL; |
917737801660
(current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents:
41646
diff
changeset
|
1706 |
90920
b3ae82a0a4fd
(syms_of_w32menu): Use DEFSYM macro.
Jason Rumney <jasonr@gnu.org>
parents:
90776
diff
changeset
|
1707 DEFSYM (Qdebug_on_next_call, "debug-on-next-call"); |
15276 | 1708 |
73695
3901ff3eaf2c
(Fmenu_or_popup_active_p): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
72773
diff
changeset
|
1709 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
|
1710 #ifdef HAVE_MENUS |
13434 | 1711 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
|
1712 #endif |
13434 | 1713 } |
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
|
1714 |
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
|
1715 /* |
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
|
1716 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
|
1717 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
|
1718 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
|
1719 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
|
1720 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
|
1721 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
|
1722 */ |
110994
734b2470f93c
src/w32*.c: Whitespace fixes and typos.
Juanma Barranquero <lekktu@gmail.com>
parents:
106815
diff
changeset
|
1723 void |
109152
e27859da5624
src/w32*.c: Convert function definitions to standard C.
Juanma Barranquero <lekktu@gmail.com>
parents:
109100
diff
changeset
|
1724 globals_of_w32menu (void) |
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
|
1725 { |
110994
734b2470f93c
src/w32*.c: Whitespace fixes and typos.
Juanma Barranquero <lekktu@gmail.com>
parents:
106815
diff
changeset
|
1726 /* See if Get/SetMenuItemInfo functions are available. */ |
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
|
1727 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
|
1728 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
|
1729 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
|
1730 unicode_append_menu = (AppendMenuW_Proc) GetProcAddress (user32, "AppendMenuW"); |
109772
7ce174214df2
Fix for bug#5629: Use unicode message box if available.
Jason Rumney <jasonr@wanchan>
parents:
109759
diff
changeset
|
1731 unicode_message_box = (MessageBoxW_Proc) GetProcAddress (user32, "MessageBoxW"); |
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
|
1732 } |
52401 | 1733 |