annotate src/w32menu.c @ 49506:ac9e2eeeb03d

New format of AUTHORS file; list each author name once followed by contributed and changed files. Improve selection of entries to include in list, and generate list of unrecognized entries indicating syntax errors in ChangeLog files. (authors-coding-system): New variable. (authors-many-files): Update doc string. (authors-aliases): Change format. Now one entry with multiple aliases per author. (authors-valid-file-names, authors-renamed-files-alist) (authors-renamed-files-regexps): New variables. (authors-canonical-file-name): New function. Validates that file exists or occurs in one of the above lists. Record unrecognized file names in global authors-invalid-file-names list. (authors-add): Change to record per-change counts. (authors-canonical-author-name): Handle new format of authors-aliases list. (authors-scan-change-log): Rename FILE arg to LOG-FILE. Change doc string to describe new entry format. Only add author entries for valid file names. (authors-print): Replace by authors-add-to-author-list. (authors-add-to-author-list): New function which reorders per-file entries and adds them to global authors-author-list. (authors): Instead of authors-print to insert in *Authors* buffer, use authors-add-to-author-list to reorder the list and then insert result in *Authors* buffer with new format. Generate *Authors Errors* compilation-mode buffer listing unrecognized ChangeLog entries.
author Kim F. Storm <storm@cua.dk>
date Wed, 29 Jan 2003 00:13:11 +0000
parents 08ac5c346b16
children 23a1cea22d13
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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.
26088
b7aa6ac26872 Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents: 25646
diff changeset
2 Copyright (C) 1986, 88, 93, 94, 96, 98, 1999 Free Software Foundation, Inc.
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
3
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
4 This file is part of GNU Emacs.
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
5
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
6 GNU Emacs is free software; you can redistribute it and/or modify
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
7 it under the terms of the GNU General Public License as published by
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
8 the Free Software Foundation; either version 2, or (at your option)
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
9 any later version.
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
10
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
14 GNU General Public License for more details.
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
15
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
17 along with GNU Emacs; see the file COPYING. If not, write to
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 14036
diff changeset
19 Boston, MA 02111-1307, USA. */
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
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>
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
22 #include <signal.h>
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
23
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
24 #include <stdio.h>
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
25 #include "lisp.h"
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
26 #include "termhooks.h"
31114
cd392fdf0e9f Include keyboard.h before frame.h. Fix compile
Andrew Innes <andrewi@gnu.org>
parents: 30989
diff changeset
27 #include "keyboard.h"
39690
38c1890338cc (keymap_panes, Fx_popup_menu): Use Fkeymap_prompt.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
28 #include "keymap.h"
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
29 #include "frame.h"
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
30 #include "window.h"
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
31 #include "blockinput.h"
15276
07341673efa6 Include buffer.h.
Richard M. Stallman <rms@gnu.org>
parents: 15110
diff changeset
32 #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
33 #include "charset.h"
33aa00975055 (single_submenu, w32_menu_show): Call ENCODE_SYSTEM on menu strings.
Jason Rumney <jasonr@gnu.org>
parents: 28275
diff changeset
34 #include "coding.h"
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
35
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
36 /* This may include sys/types.h, and that somehow loses
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
37 if this is not done before the other system files. */
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
38 #include "w32term.h"
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
39
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
40 /* Load sys/types.h if not already loaded.
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
41 In some systems loading it twice is suicidal. */
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
42 #ifndef makedev
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
43 #include <sys/types.h>
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
44 #endif
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
45
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
46 #include "dispextern.h"
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
47
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
48 #undef HAVE_MULTILINGUAL_MENU
33971
c33b80a45f6a (add_menu_item): Reset menu item text when changing type to radio button.
Jason Rumney <jasonr@gnu.org>
parents: 32988
diff changeset
49 #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
50
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
51 /******************************************************************/
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
52 /* Definitions copied from lwlib.h */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
53
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
54 typedef void * XtPointer;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
55 typedef char Boolean;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
56
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
57 enum button_type
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
58 {
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
59 BUTTON_TYPE_NONE,
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
60 BUTTON_TYPE_TOGGLE,
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
61 BUTTON_TYPE_RADIO
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
62 };
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
63
41908
4d8905b9ee49 (_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents: 41733
diff changeset
64 /* This structure is based on the one in ../lwlib/lwlib.h, modified
4d8905b9ee49 (_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents: 41733
diff changeset
65 for Windows. */
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
66 typedef struct _widget_value
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
67 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
68 /* name of widget */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
69 char* name;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
70 /* value (meaning depend on widget type) */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
71 char* value;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
72 /* keyboard equivalent. no implications for XtTranslations */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
73 char* key;
41908
4d8905b9ee49 (_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents: 41733
diff changeset
74 /* Help string or nil if none.
4d8905b9ee49 (_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents: 41733
diff changeset
75 GC finds this string through the frame's menu_bar_vector
4d8905b9ee49 (_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents: 41733
diff changeset
76 or through menu_items. */
4d8905b9ee49 (_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents: 41733
diff changeset
77 Lisp_Object help;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
78 /* true if enabled */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
79 Boolean enabled;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
80 /* true if selected */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
81 Boolean selected;
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
82 /* The type of a button. */
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
83 enum button_type button_type;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
84 /* true if menu title */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
85 Boolean title;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
86 #if 0
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
87 /* true if was edited (maintained by get_value) */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
88 Boolean edited;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
89 /* true if has changed (maintained by lw library) */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
90 change_type change;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
91 /* true if this widget itself has changed,
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
92 but not counting the other widgets found in the `next' field. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
93 change_type this_one_change;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
94 #endif
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
95 /* Contents of the sub-widgets, also selected slot for checkbox */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
96 struct _widget_value* contents;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
97 /* data passed to callback */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
98 XtPointer call_data;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
99 /* next one in the list */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
100 struct _widget_value* next;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
101 #if 0
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
102 /* slot for the toolkit dependent part. Always initialize to NULL. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
103 void* toolkit_data;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
104 /* tell us if we should free the toolkit data slot when freeing the
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
105 widget_value itself. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
106 Boolean free_toolkit_data;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
107
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
108 /* we resource the widget_value structures; this points to the next
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
109 one on the free list if this one has been deallocated.
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
110 */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
111 struct _widget_value *free_list;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
112 #endif
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
113 } widget_value;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
114
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
115 /* Local memory management */
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
116 #define local_heap (GetProcessHeap ())
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
117 #define local_alloc(n) (HeapAlloc (local_heap, HEAP_ZERO_MEMORY, (n)))
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
118 #define local_free(p) (HeapFree (local_heap, 0, ((LPVOID) (p))))
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
119
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
120 #define malloc_widget_value() ((widget_value *) local_alloc (sizeof (widget_value)))
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
121 #define free_widget_value(wv) (local_free ((wv)))
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
122
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
123 /******************************************************************/
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
124
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
125 #ifndef TRUE
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
126 #define TRUE 1
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
127 #define FALSE 0
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
128 #endif /* no TRUE */
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
129
41733
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
130 static HMENU current_popup_menu;
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
131
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
132 void syms_of_w32menu ();
48888
f0df5f687c15 Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents: 48375
diff changeset
133 void globals_of_w32menu ();
48375
4d7b83cc03aa Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents: 46815
diff changeset
134
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
135 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
136 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
137 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
138 IN BOOL,
4d7b83cc03aa Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents: 46815
diff changeset
139 IN OUT LPMENUITEMINFOA
4d7b83cc03aa Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents: 46815
diff changeset
140 );
4d7b83cc03aa Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents: 46815
diff changeset
141 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
142 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
143 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
144 IN BOOL,
4d7b83cc03aa Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents: 46815
diff changeset
145 IN LPCMENUITEMINFOA
4d7b83cc03aa Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents: 46815
diff changeset
146 );
4d7b83cc03aa Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents: 46815
diff changeset
147
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
148 GetMenuItemInfoA_Proc get_menu_item_info=NULL;
4d7b83cc03aa Added a partial implementation of play-sound-internal for Windows. Fixed the following entry in etc/PROBLEMS: Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs built on XP crashes at startup on Windows 9x/ME.
Ben Key <bkey1@tampabay.rr.com>
parents: 46815
diff changeset
149 SetMenuItemInfoA_Proc set_menu_item_info=NULL;
41733
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
150
21612
24a01af0cd38 (Vmenu_updating_frame): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21450
diff changeset
151 Lisp_Object Vmenu_updating_frame;
24a01af0cd38 (Vmenu_updating_frame): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21450
diff changeset
152
15276
07341673efa6 Include buffer.h.
Richard M. Stallman <rms@gnu.org>
parents: 15110
diff changeset
153 Lisp_Object Qdebug_on_next_call;
07341673efa6 Include buffer.h.
Richard M. Stallman <rms@gnu.org>
parents: 15110
diff changeset
154
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
155 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
156 extern Lisp_Object Qmouse_click, Qevent_kind;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
157
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
158 extern Lisp_Object QCtoggle, QCradio;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
159
15276
07341673efa6 Include buffer.h.
Richard M. Stallman <rms@gnu.org>
parents: 15110
diff changeset
160 extern Lisp_Object Voverriding_local_map;
07341673efa6 Include buffer.h.
Richard M. Stallman <rms@gnu.org>
parents: 15110
diff changeset
161 extern Lisp_Object Voverriding_local_map_menu_flag;
07341673efa6 Include buffer.h.
Richard M. Stallman <rms@gnu.org>
parents: 15110
diff changeset
162
07341673efa6 Include buffer.h.
Richard M. Stallman <rms@gnu.org>
parents: 15110
diff changeset
163 extern Lisp_Object Qoverriding_local_map, Qoverriding_terminal_local_map;
07341673efa6 Include buffer.h.
Richard M. Stallman <rms@gnu.org>
parents: 15110
diff changeset
164
07341673efa6 Include buffer.h.
Richard M. Stallman <rms@gnu.org>
parents: 15110
diff changeset
165 extern Lisp_Object Qmenu_bar_update_hook;
07341673efa6 Include buffer.h.
Richard M. Stallman <rms@gnu.org>
parents: 15110
diff changeset
166
19711
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
167 void set_frame_menubar ();
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
168
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
169 static void push_menu_item P_ ((Lisp_Object, Lisp_Object, Lisp_Object,
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
170 Lisp_Object, Lisp_Object, Lisp_Object,
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
171 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
172 #ifdef HAVE_DIALOGS
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
173 static Lisp_Object w32_dialog_show ();
41637
d797ce338b4b (add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents: 41251
diff changeset
174 #endif
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
175 static Lisp_Object w32_menu_show ();
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
176
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
177 static void keymap_panes ();
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
178 static void single_keymap_panes ();
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
179 static void single_menu_item ();
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
180 static void list_of_panes ();
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
181 static void list_of_items ();
43471
20574c51c791 (menubar_selection_callback): Free the menu and
Jason Rumney <jasonr@gnu.org>
parents: 42613
diff changeset
182 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
183
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
184 /* This holds a Lisp vector that holds the results of decoding
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
185 the keymaps or alist-of-alists that specify a menu.
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
186
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
187 It describes the panes and items within the panes.
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
188
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
189 Each pane is described by 3 elements in the vector:
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
190 t, the pane name, the pane's prefix key.
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
191 Then follow the pane's items, with 5 elements per item:
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
192 the item string, the enable flag, the item's value,
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
193 the definition, and the equivalent keyboard key's description string.
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
194
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
195 In some cases, multiple levels of menus may be described.
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
196 A single vector slot containing nil indicates the start of a submenu.
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
197 A single vector slot containing lambda indicates the end of a submenu.
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
198 The submenu follows a menu item which is the way to reach the submenu.
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
199
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
200 A single vector slot containing quote indicates that the
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
201 following items should appear on the right of a dialog box.
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
202
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
203 Using a Lisp vector to hold this information while we decode it
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
204 takes care of protecting all the data from GC. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
205
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
206 #define MENU_ITEMS_PANE_NAME 1
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
207 #define MENU_ITEMS_PANE_PREFIX 2
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
208 #define MENU_ITEMS_PANE_LENGTH 3
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
209
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
210 enum menu_item_idx
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
211 {
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
212 MENU_ITEMS_ITEM_NAME = 0,
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
213 MENU_ITEMS_ITEM_ENABLE,
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
214 MENU_ITEMS_ITEM_VALUE,
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
215 MENU_ITEMS_ITEM_EQUIV_KEY,
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
216 MENU_ITEMS_ITEM_DEFINITION,
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
217 MENU_ITEMS_ITEM_TYPE,
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
218 MENU_ITEMS_ITEM_SELECTED,
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
219 MENU_ITEMS_ITEM_HELP,
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
220 MENU_ITEMS_ITEM_LENGTH
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
221 };
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
222
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
223 static Lisp_Object menu_items;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
224
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
225 /* Number of slots currently allocated in menu_items. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
226 static int menu_items_allocated;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
227
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
228 /* This is the index in menu_items of the first empty slot. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
229 static int menu_items_used;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
230
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
231 /* The number of panes currently recorded in menu_items,
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
232 excluding those within submenus. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
233 static int menu_items_n_panes;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
234
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
235 /* Current depth within submenus. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
236 static int menu_items_submenu_depth;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
237
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
238 /* Flag which when set indicates a dialog or menu has been posted by
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
239 Xt on behalf of one of the widget sets. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
240 static int popup_activated_flag;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
241
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
242 static int next_menubar_widget_id;
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
243
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
244 /* 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
245 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
246 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
247
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
248 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
249 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
250
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
251 int pending_menu_activation;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
252
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
253
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
254 /* Return the frame whose ->output_data.w32->menubar_widget equals
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
255 ID, or 0 if none. */
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
256
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
257 static struct frame *
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
258 menubar_id_to_frame (id)
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
259 HMENU id;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
260 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
261 Lisp_Object tail, frame;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
262 FRAME_PTR f;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
263
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 22750
diff changeset
264 for (tail = Vframe_list; GC_CONSP (tail); tail = XCDR (tail))
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
265 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 22750
diff changeset
266 frame = XCAR (tail);
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
267 if (!GC_FRAMEP (frame))
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
268 continue;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
269 f = XFRAME (frame);
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
270 if (!FRAME_WINDOW_P (f))
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
271 continue;
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
272 if (f->output_data.w32->menubar_widget == id)
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
273 return f;
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 return 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
276 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
277
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
278 /* Initialize the menu_items structure if we haven't already done so.
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
279 Also mark it as currently empty. */
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
280
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
281 static void
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
282 init_menu_items ()
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
283 {
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
284 if (NILP (menu_items))
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
285 {
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
286 menu_items_allocated = 60;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
287 menu_items = Fmake_vector (make_number (menu_items_allocated), Qnil);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
288 }
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
289
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
290 menu_items_used = 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
291 menu_items_n_panes = 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
292 menu_items_submenu_depth = 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
293 }
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 /* Call at the end of generating the data in menu_items.
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
296 This fills in the number of items in the last pane. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
297
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
298 static void
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
299 finish_menu_items ()
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 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
302
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
303 /* Call when finished using the data for the current menu
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
304 in menu_items. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
305
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
306 static void
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
307 discard_menu_items ()
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 /* Free the structure if it is especially large.
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
310 Otherwise, hold on to it, to save time. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
311 if (menu_items_allocated > 200)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
312 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
313 menu_items = Qnil;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
314 menu_items_allocated = 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
315 }
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
316 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
317
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
318 /* Make the menu_items vector twice as large. */
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
319
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
320 static void
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
321 grow_menu_items ()
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
322 {
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
323 Lisp_Object old;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
324 int old_size = menu_items_allocated;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
325 old = menu_items;
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 menu_items_allocated *= 2;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
328 menu_items = Fmake_vector (make_number (menu_items_allocated), Qnil);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
329 bcopy (XVECTOR (old)->contents, XVECTOR (menu_items)->contents,
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
330 old_size * sizeof (Lisp_Object));
19711
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
331 }
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
332
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
333 /* Begin a submenu. */
19711
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
334
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
335 static void
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
336 push_submenu_start ()
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
337 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
338 if (menu_items_used + 1 > menu_items_allocated)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
339 grow_menu_items ();
19711
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
340
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
341 ASET (menu_items, menu_items_used++, Qnil);
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
342 menu_items_submenu_depth++;
19711
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
343 }
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
344
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
345 /* End a submenu. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
346
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
347 static void
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
348 push_submenu_end ()
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
349 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
350 if (menu_items_used + 1 > menu_items_allocated)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
351 grow_menu_items ();
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
352
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
353 ASET (menu_items, menu_items_used++, Qlambda);
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
354 menu_items_submenu_depth--;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
355 }
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
356
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
357 /* Indicate boundary between left and right. */
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
358
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
359 static void
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
360 push_left_right_boundary ()
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
361 {
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
362 if (menu_items_used + 1 > menu_items_allocated)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
363 grow_menu_items ();
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
364
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
365 ASET (menu_items, menu_items_used++, Qquote);
21741
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
41251
e6612d08452f (w32_menu_show, push_menu_pane): Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 41108
diff changeset
368 /* Start a new menu pane in menu_items.
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
369 NAME is the pane name. PREFIX_VEC is a prefix key for this pane. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
370
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
371 static void
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
372 push_menu_pane (name, prefix_vec)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
373 Lisp_Object name, prefix_vec;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
374 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
375 if (menu_items_used + MENU_ITEMS_PANE_LENGTH > menu_items_allocated)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
376 grow_menu_items ();
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
377
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
378 if (menu_items_submenu_depth == 0)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
379 menu_items_n_panes++;
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
380 ASET (menu_items, menu_items_used++, Qt);
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
381 ASET (menu_items, menu_items_used++, name);
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
382 ASET (menu_items, menu_items_used++, prefix_vec);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
383 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
384
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
385 /* Push one menu item into the current pane. NAME is the string to
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
386 display. ENABLE if non-nil means this item can be selected. KEY
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
387 is the key generated by choosing this item, or nil if this item
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
388 doesn't really have a definition. DEF is the definition of this
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
389 item. EQUIV is the textual description of the keyboard equivalent
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
390 for this item (or nil if none). TYPE is the type of this menu
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
391 item, one of nil, `toggle' or `radio'. */
19711
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
392
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
393 static void
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
394 push_menu_item (name, enable, key, def, equiv, type, selected, help)
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
395 Lisp_Object name, enable, key, def, equiv, type, selected, help;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
396 {
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
397 if (menu_items_used + MENU_ITEMS_ITEM_LENGTH > menu_items_allocated)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
398 grow_menu_items ();
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
399
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
400 ASET (menu_items, menu_items_used++, name);
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
401 ASET (menu_items, menu_items_used++, enable);
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
402 ASET (menu_items, menu_items_used++, key);
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
403 ASET (menu_items, menu_items_used++, equiv);
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
404 ASET (menu_items, menu_items_used++, def);
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
405 ASET (menu_items, menu_items_used++, type);
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
406 ASET (menu_items, menu_items_used++, selected);
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
407 ASET (menu_items, menu_items_used++, help);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
408 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
409
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
410 /* Look through KEYMAPS, a vector of keymaps that is NMAPS long,
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
411 and generate menu panes for them in menu_items.
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
412 If NOTREAL is nonzero,
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
413 don't bother really computing whether an item is enabled. */
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
414
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
415 static void
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
416 keymap_panes (keymaps, nmaps, notreal)
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
417 Lisp_Object *keymaps;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
418 int nmaps;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
419 int notreal;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
420 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
421 int mapno;
19711
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
422
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
423 init_menu_items ();
19711
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
424
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
425 /* Loop over the given keymaps, making a pane for each map.
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
426 But don't make a pane that is empty--ignore that map instead.
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
427 P is the number of panes we have made so far. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
428 for (mapno = 0; mapno < nmaps; mapno++)
30989
2152817050ff (keymap_panes): Pass the keymap's prompt as the pane name to
Jason Rumney <jasonr@gnu.org>
parents: 30238
diff changeset
429 single_keymap_panes (keymaps[mapno],
39690
38c1890338cc (keymap_panes, Fx_popup_menu): Use Fkeymap_prompt.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
430 Fkeymap_prompt (keymaps[mapno]), Qnil, notreal, 10);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
431
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
432 finish_menu_items ();
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
433 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
435 /* This is a recursive subroutine of keymap_panes.
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
436 It handles one keymap, KEYMAP.
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
437 The other arguments are passed along
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
438 or point to local variables of the previous function.
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
439 If NOTREAL is nonzero, only check for equivalent key bindings, don't
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
440 evaluate expressions in menu items and don't make any menu.
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
441
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
442 If we encounter submenus deeper than MAXDEPTH levels, ignore them. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
443
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
444 static void
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
445 single_keymap_panes (keymap, pane_name, prefix, notreal, maxdepth)
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
446 Lisp_Object keymap;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
447 Lisp_Object pane_name;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
448 Lisp_Object prefix;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
449 int notreal;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
450 int maxdepth;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
451 {
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
452 Lisp_Object pending_maps = Qnil;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
453 Lisp_Object tail, item;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
454 struct gcpro gcpro1, gcpro2;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
455
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
456 if (maxdepth <= 0)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
457 return;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
458
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
459 push_menu_pane (pane_name, prefix);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
460
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 22750
diff changeset
461 for (tail = keymap; CONSP (tail); tail = XCDR (tail))
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
462 {
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
463 GCPRO2 (keymap, pending_maps);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
464 /* Look at each key binding, and if it is a menu item add it
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
465 to this menu. */
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 22750
diff changeset
466 item = XCAR (tail);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
467 if (CONSP (item))
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 22750
diff changeset
468 single_menu_item (XCAR (item), XCDR (item),
27932
a590f8d0dbd2 [HAVE_BOXES]: Remove #undef.
Jason Rumney <jasonr@gnu.org>
parents: 27896
diff changeset
469 &pending_maps, notreal, maxdepth);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
470 else if (VECTORP (item))
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
471 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
472 /* Loop over the char values represented in the vector. */
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
473 int len = ASIZE (item);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
474 int c;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
475 for (c = 0; c < len; c++)
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
476 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
477 Lisp_Object character;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
478 XSETFASTINT (character, c);
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
479 single_menu_item (character, AREF (item, c),
27932
a590f8d0dbd2 [HAVE_BOXES]: Remove #undef.
Jason Rumney <jasonr@gnu.org>
parents: 27896
diff changeset
480 &pending_maps, notreal, maxdepth);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
481 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
482 }
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
483 UNGCPRO;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
484 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
485
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
486 /* Process now any submenus which want to be panes at this level. */
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
487 while (!NILP (pending_maps))
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
488 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
489 Lisp_Object elt, eltcdr, string;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
490 elt = Fcar (pending_maps);
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 22750
diff changeset
491 eltcdr = XCDR (elt);
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 22750
diff changeset
492 string = XCAR (eltcdr);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
493 /* We no longer discard the @ from the beginning of the string here.
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
494 Instead, we do this in w32_menu_show. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
495 single_keymap_panes (Fcar (elt), string,
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 22750
diff changeset
496 XCDR (eltcdr), notreal, maxdepth - 1);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
497 pending_maps = Fcdr (pending_maps);
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
498 }
21741
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
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
501 /* This is a subroutine of single_keymap_panes that handles one
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
502 keymap entry.
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
503 KEY is a key in a keymap and ITEM is its binding.
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
504 PENDING_MAPS_PTR points to a list of keymaps waiting to be made into
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
505 separate panes.
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
506 If NOTREAL is nonzero, only check for equivalent key bindings, don't
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
507 evaluate expressions in menu items and don't make any menu.
27932
a590f8d0dbd2 [HAVE_BOXES]: Remove #undef.
Jason Rumney <jasonr@gnu.org>
parents: 27896
diff changeset
508 If we encounter submenus deeper than MAXDEPTH levels, ignore them. */
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
509
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
510 static void
27932
a590f8d0dbd2 [HAVE_BOXES]: Remove #undef.
Jason Rumney <jasonr@gnu.org>
parents: 27896
diff changeset
511 single_menu_item (key, item, pending_maps_ptr, notreal, maxdepth)
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
512 Lisp_Object key, item;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
513 Lisp_Object *pending_maps_ptr;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
514 int maxdepth, notreal;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
515 {
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
516 Lisp_Object map, item_string, enabled;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
517 struct gcpro gcpro1, gcpro2;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
518 int res;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
519
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
520 /* Parse the menu item and leave the result in item_properties. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
521 GCPRO2 (key, item);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
522 res = parse_menu_item (item, notreal, 0);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
523 UNGCPRO;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
524 if (!res)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
525 return; /* Not a menu item. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
526
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
527 map = AREF (item_properties, ITEM_PROPERTY_MAP);
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
528
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
529 if (notreal)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
530 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
531 /* We don't want to make a menu, just traverse the keymaps to
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
532 precompute equivalent key bindings. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
533 if (!NILP (map))
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
534 single_keymap_panes (map, Qnil, key, 1, maxdepth - 1);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
535 return;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
536 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
537
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
538 enabled = AREF (item_properties, ITEM_PROPERTY_ENABLE);
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
539 item_string = AREF (item_properties, ITEM_PROPERTY_NAME);
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
540
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
541 if (!NILP (map) && SREF (item_string, 0) == '@')
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
542 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
543 if (!NILP (enabled))
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
544 /* An enabled separate pane. Remember this to handle it later. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
545 *pending_maps_ptr = Fcons (Fcons (map, Fcons (item_string, key)),
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
546 *pending_maps_ptr);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
547 return;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
548 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
549
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
550 push_menu_item (item_string, enabled, key,
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
551 AREF (item_properties, ITEM_PROPERTY_DEF),
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
552 AREF (item_properties, ITEM_PROPERTY_KEYEQ),
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
553 AREF (item_properties, ITEM_PROPERTY_TYPE),
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
554 AREF (item_properties, ITEM_PROPERTY_SELECTED),
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
555 AREF (item_properties, ITEM_PROPERTY_HELP));
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
556
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
557 /* Display a submenu using the toolkit. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
558 if (! (NILP (map) || NILP (enabled)))
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
559 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
560 push_submenu_start ();
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
561 single_keymap_panes (map, Qnil, key, 0, maxdepth - 1);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
562 push_submenu_end ();
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
563 }
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
564 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
565
14036
621a575db6f7 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 13434
diff changeset
566 /* Push all the panes and items of a menu described by the
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
567 alist-of-alists MENU.
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
568 This handles old-fashioned calls to x-popup-menu. */
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
569
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
570 static void
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
571 list_of_panes (menu)
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
572 Lisp_Object menu;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
573 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
574 Lisp_Object tail;
19711
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
575
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
576 init_menu_items ();
19711
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
577
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
578 for (tail = menu; !NILP (tail); tail = Fcdr (tail))
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
579 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
580 Lisp_Object elt, pane_name, pane_data;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
581 elt = Fcar (tail);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
582 pane_name = Fcar (elt);
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40476
diff changeset
583 CHECK_STRING (pane_name);
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
584 push_menu_pane (pane_name, Qnil);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
585 pane_data = Fcdr (elt);
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40476
diff changeset
586 CHECK_CONS (pane_data);
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
587 list_of_items (pane_data);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
588 }
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
589
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
590 finish_menu_items ();
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
591 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
592
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
593 /* Push the items in a single pane defined by the alist PANE. */
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
594
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
595 static void
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
596 list_of_items (pane)
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
597 Lisp_Object pane;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
598 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
599 Lisp_Object tail, item, item1;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
600
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
601 for (tail = pane; !NILP (tail); tail = Fcdr (tail))
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
602 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
603 item = Fcar (tail);
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
604 if (STRINGP (item))
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
605 push_menu_item (item, Qnil, Qnil, Qt, Qnil, Qnil, Qnil, Qnil);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
606 else if (NILP (item))
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
607 push_left_right_boundary ();
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
608 else
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
609 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40476
diff changeset
610 CHECK_CONS (item);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
611 item1 = Fcar (item);
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40476
diff changeset
612 CHECK_STRING (item1);
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
613 push_menu_item (item1, Qt, Fcdr (item), Qt, Qnil, Qnil, Qnil, Qnil);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
614 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
615 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
616 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
617
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
618 DEFUN ("x-popup-menu", Fx_popup_menu, Sx_popup_menu, 2, 2, 0,
40962
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
619 doc: /* Pop up a deck-of-cards menu and return user's selection.
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
620 POSITION is a position specification. This is either a mouse button
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
621 event or a list ((XOFFSET YOFFSET) WINDOW) where XOFFSET and YOFFSET
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
622 are positions in pixels from the top left corner of WINDOW's frame
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
623 \(WINDOW may be a frame object instead of a window). This controls the
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
624 position of the center of the first line in the first pane of the
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
625 menu, not the top left of the menu as a whole. If POSITION is t, it
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
626 means to use the current mouse position.
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
627
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
628 MENU is a specifier for a menu. For the simplest case, MENU is a keymap.
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
629 The menu items come from key bindings that have a menu string as well as
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
630 a definition; actually, the \"definition\" in such a key binding looks like
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
631 \(STRING . REAL-DEFINITION). To give the menu a title, put a string into
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
632 the keymap as a top-level element.
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
633
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
634 If REAL-DEFINITION is nil, that puts a nonselectable string in the menu.
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
635 Otherwise, REAL-DEFINITION should be a valid key binding definition.
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
636
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
637 You can also use a list of keymaps as MENU. Then each keymap makes a
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
638 separate pane. When MENU is a keymap or a list of keymaps, the return
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
639 value is a list of events.
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
640
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
641 Alternatively, you can specify a menu of multiple panes with a list of
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
642 the form (TITLE PANE1 PANE2...), where each pane is a list of
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
643 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
644 Each ITEM is normally a cons cell (STRING . VALUE); but a string can
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
645 appear as an item--that makes a nonselectable line in the menu.
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
646 With this form of menu, the return value is VALUE from the chosen item.
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
647
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
648 If POSITION is nil, don't display the menu at all, just precalculate the
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
649 cached information about equivalent key sequences. */)
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
650 (position, menu)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
651 Lisp_Object position, menu;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
652 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
653 Lisp_Object keymap, tem;
40476
18b1b133e5c1 (Fx_popup_menu): Explicitly init f, xpos, and ypos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40119
diff changeset
654 int xpos = 0, ypos = 0;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
655 Lisp_Object title;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
656 char *error_name;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
657 Lisp_Object selection;
40476
18b1b133e5c1 (Fx_popup_menu): Explicitly init f, xpos, and ypos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40119
diff changeset
658 FRAME_PTR f = NULL;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
659 Lisp_Object x, y, window;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
660 int keymaps = 0;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
661 int for_click = 0;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
662 struct gcpro gcpro1;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
663
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
664 #ifdef HAVE_MENUS
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
665 if (! NILP (position))
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
666 {
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
667 check_w32 ();
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
668
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
669 /* Decode the first argument: find the window and the coordinates. */
16860
247f0b107588 (x-popup-menu): Pass in insist flag to mouse_position_hook.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16729
diff changeset
670 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
671 || (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
672 || EQ (XCAR (position), Qtool_bar))))
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
673 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
674 /* 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
675 FRAME_PTR new_f = SELECTED_FRAME ();
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
676 Lisp_Object bar_window;
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
677 enum scroll_bar_part part;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
678 unsigned long time;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
679
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
680 if (mouse_position_hook)
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
681 (*mouse_position_hook) (&new_f, 1, &bar_window,
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
682 &part, &x, &y, &time);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
683 if (new_f != 0)
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
684 XSETFRAME (window, new_f);
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
685 else
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
686 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
687 window = selected_window;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
688 XSETFASTINT (x, 0);
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
689 XSETFASTINT (y, 0);
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
690 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
691 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
692 else
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
693 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
694 tem = Fcar (position);
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
695 if (CONSP (tem))
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
696 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
697 window = Fcar (Fcdr (position));
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
698 x = Fcar (tem);
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
699 y = Fcar (Fcdr (tem));
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
700 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
701 else
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
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 for_click = 1;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
704 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
705 window = Fcar (tem); /* POSN_WINDOW (tem) */
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
706 tem = Fcar (Fcdr (Fcdr (tem))); /* POSN_WINDOW_POSN (tem) */
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
707 x = Fcar (tem);
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
708 y = Fcdr (tem);
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
709 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
710 }
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
711
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40476
diff changeset
712 CHECK_NUMBER (x);
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40476
diff changeset
713 CHECK_NUMBER (y);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
714
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
715 /* 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
716
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
717 if (FRAMEP (window))
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
718 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
719 f = XFRAME (window);
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
720 xpos = 0;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
721 ypos = 0;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
722 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
723 else if (WINDOWP (window))
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
724 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40476
diff changeset
725 CHECK_LIVE_WINDOW (window);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
726 f = XFRAME (WINDOW_FRAME (XWINDOW (window)));
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
727
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
728 xpos = (FONT_WIDTH (FRAME_FONT (f))
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
729 * XFASTINT (XWINDOW (window)->left));
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
730 ypos = (FRAME_LINE_HEIGHT (f)
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
731 * XFASTINT (XWINDOW (window)->top));
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
732 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
733 else
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
734 /* ??? Not really clean; should be CHECK_WINDOW_OR_FRAME,
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
735 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
736 CHECK_WINDOW (window);
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
737
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
738 xpos += XINT (x);
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
739 ypos += XINT (y);
21612
24a01af0cd38 (Vmenu_updating_frame): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21450
diff changeset
740
24a01af0cd38 (Vmenu_updating_frame): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21450
diff changeset
741 XSETFRAME (Vmenu_updating_frame, f);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
742 }
21612
24a01af0cd38 (Vmenu_updating_frame): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21450
diff changeset
743 Vmenu_updating_frame = Qnil;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
744 #endif /* HAVE_MENUS */
21612
24a01af0cd38 (Vmenu_updating_frame): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21450
diff changeset
745
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
746 title = Qnil;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
747 GCPRO1 (title);
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
748
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
749 /* Decode the menu items from what was specified. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
750
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32671
diff changeset
751 keymap = get_keymap (menu, 0, 0);
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32671
diff changeset
752 if (CONSP (keymap))
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
753 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
754 /* We were given a keymap. Extract menu info from the keymap. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
755 Lisp_Object prompt;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
756
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
757 /* Extract the detailed info to make one pane. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
758 keymap_panes (&menu, 1, NILP (position));
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
759
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
760 /* Search for a string appearing directly as an element of the keymap.
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
761 That string is the title of the menu. */
39690
38c1890338cc (keymap_panes, Fx_popup_menu): Use Fkeymap_prompt.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
762 prompt = Fkeymap_prompt (keymap);
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
763 if (NILP (title) && !NILP (prompt))
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
764 title = prompt;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
765
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
766 /* Make that be the pane title of the first pane. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
767 if (!NILP (prompt) && menu_items_n_panes >= 0)
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
768 ASET (menu_items, MENU_ITEMS_PANE_NAME, prompt);
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
769
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
770 keymaps = 1;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
771 }
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32671
diff changeset
772 else if (CONSP (menu) && KEYMAPP (XCAR (menu)))
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
773 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
774 /* We were given a list of keymaps. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
775 int nmaps = XFASTINT (Flength (menu));
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
776 Lisp_Object *maps
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
777 = (Lisp_Object *) alloca (nmaps * sizeof (Lisp_Object));
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
778 int i;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
779
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
780 title = Qnil;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
781
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
782 /* The first keymap that has a prompt string
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
783 supplies the menu title. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
784 for (tem = menu, i = 0; CONSP (tem); tem = Fcdr (tem))
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
785 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
786 Lisp_Object prompt;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
787
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32671
diff changeset
788 maps[i++] = keymap = get_keymap (Fcar (tem), 1, 0);
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
789
39690
38c1890338cc (keymap_panes, Fx_popup_menu): Use Fkeymap_prompt.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39682
diff changeset
790 prompt = Fkeymap_prompt (keymap);
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
791 if (NILP (title) && !NILP (prompt))
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
792 title = prompt;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
793 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
794
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
795 /* Extract the detailed info to make one pane. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
796 keymap_panes (maps, nmaps, NILP (position));
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
797
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
798 /* Make the title be the pane title of the first pane. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
799 if (!NILP (title) && menu_items_n_panes >= 0)
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
800 ASET (menu_items, MENU_ITEMS_PANE_NAME, title);
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
801
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
802 keymaps = 1;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
803 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
804 else
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
805 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
806 /* We were given an old-fashioned menu. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
807 title = Fcar (menu);
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40476
diff changeset
808 CHECK_STRING (title);
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
809
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
810 list_of_panes (Fcdr (menu));
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
811
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
812 keymaps = 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
813 }
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
814
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
815 if (NILP (position))
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
816 {
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
817 discard_menu_items ();
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
818 UNGCPRO;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
819 return Qnil;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
820 }
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
821
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
822 #ifdef HAVE_MENUS
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
823 /* If resources from a previous popup menu exist yet, does nothing
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
824 until the `menu_free_timer' has freed them (see w32fns.c).
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
825 */
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
826 if (current_popup_menu)
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
827 {
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
828 discard_menu_items ();
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
829 UNGCPRO;
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
830 return Qnil;
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
831 }
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
832
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
833 /* Display them in a menu. */
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
834 BLOCK_INPUT;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
835
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
836 selection = w32_menu_show (f, xpos, ypos, for_click,
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
837 keymaps, title, &error_name);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
838 UNBLOCK_INPUT;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
839
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
840 discard_menu_items ();
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
841 #endif /* HAVE_MENUS */
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
842
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
843 UNGCPRO;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
844
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
845 if (error_name) error (error_name);
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
846 return selection;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
847 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
848
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
849 #ifdef HAVE_MENUS
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
850
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
851 DEFUN ("x-popup-dialog", Fx_popup_dialog, Sx_popup_dialog, 2, 2, 0,
40962
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
852 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
853 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
854 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
855 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
856 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
857
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
858 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
859 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
860 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
861 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
862
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
863 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
864 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
865 on the left of the dialog box and all following items on the right.
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
866 \(By default, approximately half appear on each side.) */)
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
867 (position, contents)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
868 Lisp_Object position, contents;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
869 {
40476
18b1b133e5c1 (Fx_popup_menu): Explicitly init f, xpos, and ypos.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 40119
diff changeset
870 FRAME_PTR f = NULL;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
871 Lisp_Object window;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
872
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
873 check_w32 ();
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
874
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
875 /* 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
876 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
877 || (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
878 || EQ (XCAR (position), Qtool_bar))))
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
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 #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
881 /* 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
882 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
883 Lisp_Object bar_window;
31114
cd392fdf0e9f Include keyboard.h before frame.h. Fix compile
Andrew Innes <andrewi@gnu.org>
parents: 30989
diff changeset
884 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
885 unsigned long time;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
886 Lisp_Object x, y;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
887
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
888 (*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
889
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
890 if (new_f != 0)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
891 XSETFRAME (window, new_f);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
892 else
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
893 window = selected_window;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
894 #endif
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
895 window = selected_window;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
896 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
897 else if (CONSP (position))
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
898 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
899 Lisp_Object tem;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
900 tem = Fcar (position);
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
901 if (CONSP (tem))
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
902 window = Fcar (Fcdr (position));
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
903 else
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
904 {
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
905 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
906 window = Fcar (tem); /* POSN_WINDOW (tem) */
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
907 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
908 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
909 else if (WINDOWP (position) || FRAMEP (position))
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
910 window = position;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
911 else
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
912 window = Qnil;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
913
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
914 /* 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
915
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
916 if (FRAMEP (window))
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
917 f = XFRAME (window);
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
918 else if (WINDOWP (window))
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
919 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40476
diff changeset
920 CHECK_LIVE_WINDOW (window);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
921 f = XFRAME (WINDOW_FRAME (XWINDOW (window)));
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
922 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
923 else
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
924 /* ??? Not really clean; should be CHECK_WINDOW_OR_FRAME,
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
925 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
926 CHECK_WINDOW (window);
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
927
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
928 #ifndef HAVE_DIALOGS
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
929 /* Display a menu with these alternatives
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
930 in the middle of frame F. */
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
931 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
932 Lisp_Object x, y, frame, newpos;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
933 XSETFRAME (frame, f);
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
934 XSETINT (x, x_pixel_width (f) / 2);
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
935 XSETINT (y, x_pixel_height (f) / 2);
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
936 newpos = Fcons (Fcons (x, Fcons (y, Qnil)), Fcons (frame, Qnil));
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
937
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
938 return Fx_popup_menu (newpos,
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
939 Fcons (Fcar (contents), Fcons (contents, Qnil)));
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
940 }
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
941 #else /* HAVE_DIALOGS */
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
942 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
943 Lisp_Object title;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
944 char *error_name;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
945 Lisp_Object selection;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
946
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
947 /* Decode the dialog items from what was specified. */
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
948 title = Fcar (contents);
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40476
diff changeset
949 CHECK_STRING (title);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
950
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
951 list_of_panes (Fcons (contents, Qnil));
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
952
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
953 /* Display them in a dialog box. */
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
954 BLOCK_INPUT;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
955 selection = w32_dialog_show (f, 0, title, &error_name);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
956 UNBLOCK_INPUT;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
957
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
958 discard_menu_items ();
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
959
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
960 if (error_name) error (error_name);
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
961 return selection;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
962 }
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
963 #endif /* HAVE_DIALOGS */
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
964 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
965
19711
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
966 /* Activate the menu bar of frame F.
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
967 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
968 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
969
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
970 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
971 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
972 processing of the menus.
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
973
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
974 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
975
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
976 This way we can safely execute Lisp code. */
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
977
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
978 void
19711
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
979 x_activate_menubar (f)
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
980 FRAME_PTR f;
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
981 {
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
982 set_frame_menubar (f, 0, 1);
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
983
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
984 /* Lock out further menubar changes while active. */
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
985 f->output_data.w32->menubar_active = 1;
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
986
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
987 /* Signal input thread to return from WM_INITMENU. */
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
988 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
989 }
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
990
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
991 /* 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
992 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
993 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
994 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
995
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
996 void
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
997 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
998 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
999 Lisp_Object prefix, entry;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1000 Lisp_Object vector;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1001 Lisp_Object *subprefix_stack;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1002 int submenu_depth = 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1003 int i;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1004
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1005 if (!f)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1006 return;
38371
eb915f0b1d6e (menubar_selection_callback, w32_menu_show): Initialize `entry' to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36677
diff changeset
1007 entry = Qnil;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1008 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
1009 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
1010 prefix = Qnil;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1011 i = 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1012 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
1013 {
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1014 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
1015 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1016 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
1017 prefix = entry;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1018 i++;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1019 }
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1020 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
1021 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1022 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
1023 i++;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1024 }
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1025 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
1026 {
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1027 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
1028 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
1029 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1030 else
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1031 {
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1032 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
1033 /* 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
1034 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
1035 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
1036 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1037 int j;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1038 struct input_event buf;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1039 Lisp_Object frame;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1040
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1041 XSETFRAME (frame, f);
30178
6d045b9631ad (menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents: 30145
diff changeset
1042 buf.kind = MENU_BAR_EVENT;
6d045b9631ad (menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents: 30145
diff changeset
1043 buf.frame_or_window = frame;
6d045b9631ad (menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents: 30145
diff changeset
1044 buf.arg = frame;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1045 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
1046
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1047 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
1048 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
1049 {
30178
6d045b9631ad (menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents: 30145
diff changeset
1050 buf.kind = MENU_BAR_EVENT;
6d045b9631ad (menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents: 30145
diff changeset
1051 buf.frame_or_window = frame;
6d045b9631ad (menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents: 30145
diff changeset
1052 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
1053 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
1054 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1055
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1056 if (!NILP (prefix))
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1057 {
30178
6d045b9631ad (menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents: 30145
diff changeset
1058 buf.kind = MENU_BAR_EVENT;
6d045b9631ad (menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents: 30145
diff changeset
1059 buf.frame_or_window = frame;
6d045b9631ad (menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents: 30145
diff changeset
1060 buf.arg = prefix;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1061 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
1062 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1063
30178
6d045b9631ad (menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents: 30145
diff changeset
1064 buf.kind = MENU_BAR_EVENT;
6d045b9631ad (menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents: 30145
diff changeset
1065 buf.frame_or_window = frame;
6d045b9631ad (menubar_selection_callback): Use the `arg' slot of
Gerd Moellmann <gerd@gnu.org>
parents: 30145
diff changeset
1066 buf.arg = entry;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1067 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
1068
43471
20574c51c791 (menubar_selection_callback): Free the menu and
Jason Rumney <jasonr@gnu.org>
parents: 42613
diff changeset
1069 /* 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
1070 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
1071 f->output_data.w32->menu_command_in_progress = 0;
20574c51c791 (menubar_selection_callback): Free the menu and
Jason Rumney <jasonr@gnu.org>
parents: 42613
diff changeset
1072 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
1073 return;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1074 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1075 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
1076 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1077 }
43471
20574c51c791 (menubar_selection_callback): Free the menu and
Jason Rumney <jasonr@gnu.org>
parents: 42613
diff changeset
1078 /* 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
1079 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
1080 f->output_data.w32->menu_command_in_progress = 0;
20574c51c791 (menubar_selection_callback): Free the menu and
Jason Rumney <jasonr@gnu.org>
parents: 42613
diff changeset
1081 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
1082 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1083
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1084 /* Allocate a widget_value, blocking input. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1085
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1086 widget_value *
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1087 xmalloc_widget_value ()
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1088 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1089 widget_value *value;
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 BLOCK_INPUT;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1092 value = malloc_widget_value ();
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1093 UNBLOCK_INPUT;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1094
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1095 return value;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1096 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1097
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1098 /* This recursively calls free_widget_value on the tree of widgets.
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1099 It must free all data that was malloc'ed for these widget_values.
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1100 In Emacs, many slots are pointers into the data of Lisp_Strings, and
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1101 must be left alone. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1102
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1103 void
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1104 free_menubar_widget_value_tree (wv)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1105 widget_value *wv;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1106 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1107 if (! wv) return;
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1108
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1109 wv->name = wv->value = wv->key = (char *) 0xDEADBEEF;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1110
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1111 if (wv->contents && (wv->contents != (widget_value*)1))
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1112 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1113 free_menubar_widget_value_tree (wv->contents);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1114 wv->contents = (widget_value *) 0xDEADBEEF;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1115 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1116 if (wv->next)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1117 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1118 free_menubar_widget_value_tree (wv->next);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1119 wv->next = (widget_value *) 0xDEADBEEF;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1120 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1121 BLOCK_INPUT;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1122 free_widget_value (wv);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1123 UNBLOCK_INPUT;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1124 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1125
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1126 /* Set up data i menu_items for a menu bar item
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1127 whose event type is ITEM_KEY (with string ITEM_NAME)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1128 and whose contents come from the list of keymaps MAPS. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1129
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1130 static int
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1131 parse_single_submenu (item_key, item_name, maps)
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1132 Lisp_Object item_key, item_name, maps;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1133 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1134 Lisp_Object length;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1135 int len;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1136 Lisp_Object *mapvec;
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1137 int i;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1138 int top_level_items = 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1139
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1140 length = Flength (maps);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1141 len = XINT (length);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1142
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1143 /* Convert the list MAPS into a vector MAPVEC. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1144 mapvec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object));
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1145 for (i = 0; i < len; i++)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1146 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1147 mapvec[i] = Fcar (maps);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1148 maps = Fcdr (maps);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1149 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1150
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1151 /* Loop over the given keymaps, making a pane for each map.
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1152 But don't make a pane that is empty--ignore that map instead. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1153 for (i = 0; i < len; i++)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1154 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1155 if (SYMBOLP (mapvec[i])
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32671
diff changeset
1156 || (CONSP (mapvec[i]) && !KEYMAPP (mapvec[i])))
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1157 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1158 /* Here we have a command at top level in the menu bar
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1159 as opposed to a submenu. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1160 top_level_items = 1;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1161 push_menu_pane (Qnil, Qnil);
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1162 push_menu_item (item_name, Qt, item_key, mapvec[i],
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1163 Qnil, Qnil, Qnil, Qnil);
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1164 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1165 else
49348
08ac5c346b16 (digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents: 48888
diff changeset
1166 {
08ac5c346b16 (digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents: 48888
diff changeset
1167 Lisp_Object prompt;
08ac5c346b16 (digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents: 48888
diff changeset
1168 prompt = Fkeymap_prompt (mapvec[i]);
08ac5c346b16 (digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents: 48888
diff changeset
1169 single_keymap_panes (mapvec[i],
08ac5c346b16 (digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents: 48888
diff changeset
1170 !NILP (prompt) ? prompt : item_name,
08ac5c346b16 (digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents: 48888
diff changeset
1171 item_key, 0, 10);
08ac5c346b16 (digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents: 48888
diff changeset
1172 }
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1173 }
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1174
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1175 return top_level_items;
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1176 }
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1177
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1178
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1179 /* Create a tree of widget_value objects
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1180 representing the panes and items
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1181 in menu_items starting at index START, up to index END. */
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1182
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1183 static widget_value *
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1184 digest_single_submenu (start, end, top_level_items)
49348
08ac5c346b16 (digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents: 48888
diff changeset
1185 int start, end, top_level_items;
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1186 {
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1187 widget_value *wv, *prev_wv, *save_wv, *first_wv;
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1188 int i;
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1189 int submenu_depth = 0;
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1190 widget_value **submenu_stack;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1191
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1192 submenu_stack
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1193 = (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
1194 wv = xmalloc_widget_value ();
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1195 wv->name = "menu";
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1196 wv->value = 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1197 wv->enabled = 1;
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1198 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
1199 wv->help = Qnil;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1200 first_wv = wv;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1201 save_wv = 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1202 prev_wv = 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1203
49348
08ac5c346b16 (digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents: 48888
diff changeset
1204 /* Loop over all panes and items made by the preceding call
08ac5c346b16 (digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents: 48888
diff changeset
1205 to parse_single_submenu and construct a tree of widget_value objects.
08ac5c346b16 (digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents: 48888
diff changeset
1206 Ignore the panes and items used by previous calls to
08ac5c346b16 (digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents: 48888
diff changeset
1207 digest_single_submenu, even though those are also in menu_items. */
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1208 i = start;
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1209 while (i < end)
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1210 {
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1211 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
1212 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1213 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
1214 save_wv = prev_wv;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1215 prev_wv = 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1216 i++;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1217 }
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1218 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
1219 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1220 prev_wv = save_wv;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1221 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
1222 i++;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1223 }
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1224 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
1225 && submenu_depth != 0)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1226 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
1227 /* 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
1228 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
1229 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
1230 i += 1;
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1231 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
1232 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1233 /* Create a new pane. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1234 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
1235 char *pane_string;
40119
bf81460680f2 (single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents: 39690
diff changeset
1236
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1237 pane_name = AREF (menu_items, i + MENU_ITEMS_PANE_NAME);
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1238 prefix = AREF (menu_items, i + MENU_ITEMS_PANE_PREFIX);
40119
bf81460680f2 (single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents: 39690
diff changeset
1239
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1240 #ifndef HAVE_MULTILINGUAL_MENU
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1241 if (STRINGP (pane_name) && STRING_MULTIBYTE (pane_name))
40119
bf81460680f2 (single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents: 39690
diff changeset
1242 {
bf81460680f2 (single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents: 39690
diff changeset
1243 pane_name = ENCODE_SYSTEM (pane_name);
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1244 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
1245 }
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1246 #endif
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1247 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
1248 ? "" : (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
1249 /* 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
1250 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
1251 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
1252 pane_string = "";
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1253
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1254 /* 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
1255 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
1256 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
1257 if (strcmp (pane_string, ""))
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1258 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1259 wv = xmalloc_widget_value ();
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1260 if (save_wv)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1261 save_wv->next = wv;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1262 else
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1263 first_wv->contents = wv;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1264 wv->name = pane_string;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1265 /* Ignore the @ that means "separate pane".
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1266 This is a kludge, but this isn't worth more time. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1267 if (!NILP (prefix) && wv->name[0] == '@')
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1268 wv->name++;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1269 wv->value = 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1270 wv->enabled = 1;
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1271 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
1272 wv->help = Qnil;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1273 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1274 save_wv = wv;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1275 prev_wv = 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1276 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
1277 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1278 else
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1279 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1280 /* Create a new item within current pane. */
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1281 Lisp_Object item_name, enable, descrip, def, type, selected;
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1282 Lisp_Object help;
28275
2c8492145fc8 (single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents: 27932
diff changeset
1283
40119
bf81460680f2 (single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents: 39690
diff changeset
1284 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
1285 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
1286 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
1287 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
1288 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
1289 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
1290 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
1291
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1292 #ifndef HAVE_MULTILINGUAL_MENU
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1293 if (STRING_MULTIBYTE (item_name))
40119
bf81460680f2 (single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents: 39690
diff changeset
1294 {
bf81460680f2 (single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents: 39690
diff changeset
1295 item_name = ENCODE_SYSTEM (item_name);
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1296 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
1297 }
bf81460680f2 (single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents: 39690
diff changeset
1298
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1299 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
1300 {
bf81460680f2 (single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents: 39690
diff changeset
1301 descrip = ENCODE_SYSTEM (descrip);
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1302 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
1303 }
bf81460680f2 (single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents: 39690
diff changeset
1304 #endif /* not HAVE_MULTILINGUAL_MENU */
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1305
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1306 wv = xmalloc_widget_value ();
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1307 if (prev_wv)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1308 prev_wv->next = wv;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1309 else
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1310 save_wv->contents = wv;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1311
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1312 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
1313 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
1314 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
1315 wv->value = 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1316 /* 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
1317 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
1318 wv->call_data = (!NILP (def) ? (void *) (EMACS_INT) i : 0);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1319 wv->enabled = !NILP (enable);
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1320
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1321 if (NILP (type))
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1322 wv->button_type = BUTTON_TYPE_NONE;
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1323 else if (EQ (type, QCradio))
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1324 wv->button_type = BUTTON_TYPE_RADIO;
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1325 else if (EQ (type, QCtoggle))
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1326 wv->button_type = BUTTON_TYPE_TOGGLE;
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1327 else
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1328 abort ();
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1329
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1330 wv->selected = !NILP (selected);
41908
4d8905b9ee49 (_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents: 41733
diff changeset
1331 if (!STRINGP (help))
4d8905b9ee49 (_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents: 41733
diff changeset
1332 help = Qnil;
4d8905b9ee49 (_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents: 41733
diff changeset
1333
4d8905b9ee49 (_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents: 41733
diff changeset
1334 wv->help = help;
28275
2c8492145fc8 (single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents: 27932
diff changeset
1335
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1336 prev_wv = wv;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1337
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1338 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
1339 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1340 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1341
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1342 /* If we have just one "menu item"
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1343 that was originally a button, return it by itself. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1344 if (top_level_items && first_wv->contents && first_wv->contents->next == 0)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1345 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1346 wv = first_wv->contents;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1347 free_widget_value (first_wv);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1348 return wv;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1349 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1350
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1351 return first_wv;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1352 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1353
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1354 /* 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
1355 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
1356 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
1357
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1358 void
19711
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
1359 set_frame_menubar (f, first_time, deep_p)
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1360 FRAME_PTR f;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1361 int first_time;
19711
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
1362 int deep_p;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1363 {
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1364 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
1365 Lisp_Object items;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1366 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
1367 int i, last_i;
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1368 int *submenu_start, *submenu_end;
49348
08ac5c346b16 (digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents: 48888
diff changeset
1369 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
1370
19711
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
1371 /* 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
1372 if (f->output_data.w32->menubar_active)
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
1373 return;
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
1374
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1375 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
1376
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1377 if (! menubar_widget)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1378 deep_p = 1;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1379 else if (pending_menu_activation && !deep_p)
19711
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
1380 deep_p = 1;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1381
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1382 if (deep_p)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1383 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1384 /* 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
1385
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1386 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
1387 Lisp_Object buffer;
46293
1fb8f75062c6 Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 45803
diff changeset
1388 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
1389 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
1390 Lisp_Object *previous_items
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1391 = (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
1392 * sizeof (Lisp_Object));
19711
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
1393
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1394 /* 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
1395 do always reinitialize them. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1396 if (! menubar_widget)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1397 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
1398
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1399 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
1400 specbind (Qinhibit_quit, Qt);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1401 /* 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
1402 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
1403 specbind (Qdebug_on_next_call, Qnil);
15276
07341673efa6 Include buffer.h.
Richard M. Stallman <rms@gnu.org>
parents: 15110
diff changeset
1404
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1405 record_unwind_protect (Fset_match_data, Fmatch_data (Qnil, Qnil));
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1406 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
1407 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1408 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
1409 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
1410 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1411
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1412 set_buffer_internal_1 (XBUFFER (buffer));
15276
07341673efa6 Include buffer.h.
Richard M. Stallman <rms@gnu.org>
parents: 15110
diff changeset
1413
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1414 /* Run the Lucid hook. */
36313
77093a87f2de * w32menu.c (set_frame_menubar): Run activate-menu-bar-hook with
Jason Rumney <jasonr@gnu.org>
parents: 33971
diff changeset
1415 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
1416 /* If it has changed current-menubar from previous value,
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1417 really recompute the menubar from the value. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1418 if (! NILP (Vlucid_menu_bar_dirty_flag))
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1419 call0 (Qrecompute_lucid_menubar);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1420 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
1421 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
1422
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1423 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
1424
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1425 /* 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
1426 if (previous_menu_items_used)
24530f82048e (set_frame_menubar): Take into account that
Andrew Innes <andrewi@gnu.org>
parents: 38371
diff changeset
1427 bcopy (XVECTOR (f->menu_bar_vector)->contents, previous_items,
24530f82048e (set_frame_menubar): Take into account that
Andrew Innes <andrewi@gnu.org>
parents: 38371
diff changeset
1428 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
1429
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1430 /* 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
1431 This can evaluate Lisp code. */
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1432 menu_items = f->menu_bar_vector;
39507
24530f82048e (set_frame_menubar): Take into account that
Andrew Innes <andrewi@gnu.org>
parents: 38371
diff changeset
1433 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
1434 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
1435 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
1436 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
1437 submenu_top_level_items
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1438 = (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
1439 init_menu_items ();
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1440 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
1441 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1442 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
1443
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1444 last_i = i;
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1445
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1446 key = AREF (items, i);
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1447 string = AREF (items, i + 1);
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1448 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
1449 if (NILP (string))
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1450 break;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1451
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1452 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
1453
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1454 menu_items_n_panes = 0;
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1455 submenu_top_level_items[i]
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1456 = parse_single_submenu (key, string, maps);
49348
08ac5c346b16 (digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents: 48888
diff changeset
1457 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
1458
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1459 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
1460 }
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1461
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1462 finish_menu_items ();
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1463
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1464 /* 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
1465 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
1466
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1467 wv = xmalloc_widget_value ();
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1468 wv->name = "menubar";
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1469 wv->value = 0;
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1470 wv->enabled = 1;
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1471 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
1472 wv->help = Qnil;
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1473 first_wv = wv;
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1474
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1475 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
1476 {
49348
08ac5c346b16 (digest_single_submenu): Declare all args.
Jason Rumney <jasonr@gnu.org>
parents: 48888
diff changeset
1477 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
1478 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
1479 submenu_top_level_items[i]);
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1480 if (prev_wv)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1481 prev_wv->next = wv;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1482 else
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1483 first_wv->contents = wv;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1484 /* 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
1485 wv->enabled = 1;
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1486 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
1487 prev_wv = wv;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1488 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1489
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1490 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
1491 unbind_to (specpdl_count, Qnil);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1492
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1493 /* 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
1494 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
1495
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1496 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
1497 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
1498 || (!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
1499 break;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1500 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
1501 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1502 free_menubar_widget_value_tree (first_wv);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1503 menu_items = Qnil;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1504
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1505 return;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1506 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1507
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1508 /* 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
1509 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
1510 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
1511 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
1512 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
1513 wv = first_wv->contents;
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1514 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
1515 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1516 Lisp_Object string;
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1517 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
1518 if (NILP (string))
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1519 break;
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1520 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
1521 wv = wv->next;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1522 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1523
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1524 f->menu_bar_vector = menu_items;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1525 f->menu_bar_items_used = menu_items_used;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1526 menu_items = Qnil;
19711
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
1527 }
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
1528 else
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
1529 {
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1530 /* 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
1531 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
1532
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1533 wv = xmalloc_widget_value ();
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1534 wv->name = "menubar";
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1535 wv->value = 0;
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1536 wv->enabled = 1;
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1537 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
1538 wv->help = Qnil;
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1539 first_wv = wv;
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1540
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1541 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
1542 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
1543 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1544 Lisp_Object string;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1545
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1546 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
1547 if (NILP (string))
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1548 break;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1549
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1550 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
1551 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
1552 wv->value = 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1553 wv->enabled = 1;
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1554 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
1555 wv->help = Qnil;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1556 /* 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
1557 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
1558 /* 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
1559 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
1560 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
1561
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1562 if (prev_wv)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1563 prev_wv->next = wv;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1564 else
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1565 first_wv->contents = wv;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1566 prev_wv = wv;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1567 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1568
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1569 /* 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
1570 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
1571 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
1572 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
1573 }
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 /* 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
1576
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1577 BLOCK_INPUT;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1578
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1579 if (menubar_widget)
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 /* 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
1582 while (DeleteMenu (menubar_widget, 0, MF_BYPOSITION))
19711
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
1583 ;
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
1584 }
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1585 else
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1586 {
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1587 menubar_widget = CreateMenu ();
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1588 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1589 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
1590
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1591 free_menubar_widget_value_tree (first_wv);
19711
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
1592
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1593 {
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1594 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
1595
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1596 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
1597 SetMenu (FRAME_W32_WINDOW (f), f->output_data.w32->menubar_widget);
19711
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
1598 /* Causes flicker when menu bar is updated
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
1599 DrawMenuBar (FRAME_W32_WINDOW (f)); */
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
1600
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
1601 /* 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
1602 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
1603 if (old_widget == NULL)
19711
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
1604 x_set_window_size (f, 0, FRAME_WIDTH (f), FRAME_HEIGHT (f));
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1605 }
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1606
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1607 UNBLOCK_INPUT;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1608 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1609
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1610 /* 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
1611 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
1612 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
1613 is visible. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1614
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1615 void
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1616 initialize_frame_menubar (f)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1617 FRAME_PTR f;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1618 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1619 /* 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
1620 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
1621 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
1622 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
1623 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1624
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1625 /* 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
1626 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
1627
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1628 void
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1629 free_frame_menubar (f)
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1630 FRAME_PTR f;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1631 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1632 BLOCK_INPUT;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1633
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1634 {
16588
481b7874a1e9 Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents: 15276
diff changeset
1635 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
1636 SetMenu (FRAME_W32_WINDOW (f), NULL);
19711
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
1637 f->output_data.w32->menubar_widget = NULL;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1638 DestroyMenu (old);
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1639 }
40119
bf81460680f2 (single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents: 39690
diff changeset
1640
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1641 UNBLOCK_INPUT;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1642 }
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1643
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1644
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1645 /* 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
1646 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
1647 is blocked by the caller. */
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1648
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1649 /* 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
1650 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
1651 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
1652 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
1653 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
1654 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
1655 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
1656 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
1657 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
1658 (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
1659
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1660 static Lisp_Object
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1661 w32_menu_show (f, x, y, for_click, keymaps, title, error)
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1662 FRAME_PTR f;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1663 int x;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1664 int y;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1665 int for_click;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1666 int keymaps;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1667 Lisp_Object title;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1668 char **error;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1669 {
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1670 int i;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1671 int menu_item_selection;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1672 HMENU menu;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1673 POINT pos;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1674 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
1675 widget_value **submenu_stack
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1676 = (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
1677 Lisp_Object *subprefix_stack
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1678 = (Lisp_Object *) alloca (menu_items_used * sizeof (Lisp_Object));
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1679 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
1680 int first_pane;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1681
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1682 *error = NULL;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1683
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1684 if (menu_items_used <= MENU_ITEMS_PANE_LENGTH)
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1685 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1686 *error = "Empty menu";
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1687 return Qnil;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1688 }
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1689
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1690 /* 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
1691 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
1692 wv = xmalloc_widget_value ();
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1693 wv->name = "menu";
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1694 wv->value = 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1695 wv->enabled = 1;
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1696 wv->button_type = BUTTON_TYPE_NONE;
42613
a5eb47b53761 Fix typo in last checkin
Jason Rumney <jasonr@gnu.org>
parents: 42589
diff changeset
1697 wv->help = Qnil;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1698 first_wv = wv;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1699 first_pane = 1;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1700
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1701 /* Loop over all panes and items, filling in the tree. */
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1702 i = 0;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1703 while (i < menu_items_used)
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1704 {
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1705 if (EQ (AREF (menu_items, i), Qnil))
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1706 {
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1707 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
1708 save_wv = prev_wv;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1709 prev_wv = 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1710 first_pane = 1;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1711 i++;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1712 }
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1713 else if (EQ (AREF (menu_items, i), Qlambda))
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1714 {
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1715 prev_wv = save_wv;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1716 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
1717 first_pane = 0;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1718 i++;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1719 }
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1720 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
1721 && submenu_depth != 0)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1722 i += MENU_ITEMS_PANE_LENGTH;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1723 /* Ignore a nil in the item list.
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1724 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
1725 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
1726 i += 1;
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1727 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
1728 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1729 /* Create a new pane. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1730 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
1731 char *pane_string;
40119
bf81460680f2 (single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents: 39690
diff changeset
1732 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
1733 prefix = AREF (menu_items, i + MENU_ITEMS_PANE_PREFIX);
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1734 #ifndef HAVE_MULTILINGUAL_MENU
40119
bf81460680f2 (single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents: 39690
diff changeset
1735 if (STRINGP (pane_name) && STRING_MULTIBYTE (pane_name))
bf81460680f2 (single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents: 39690
diff changeset
1736 {
bf81460680f2 (single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents: 39690
diff changeset
1737 pane_name = ENCODE_SYSTEM (pane_name);
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1738 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
1739 }
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1740 #endif
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1741 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
1742 ? "" : (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
1743 /* 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
1744 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
1745 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
1746 pane_string = "";
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1747
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1748 /* 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
1749 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
1750 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
1751 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
1752 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1753 wv = xmalloc_widget_value ();
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1754 if (save_wv)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1755 save_wv->next = wv;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1756 else
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1757 first_wv->contents = wv;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1758 wv->name = pane_string;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1759 if (keymaps && !NILP (prefix))
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1760 wv->name++;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1761 wv->value = 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1762 wv->enabled = 1;
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1763 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
1764 wv->help = Qnil;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1765 save_wv = wv;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1766 prev_wv = 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1767 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1768 else if (first_pane)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1769 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1770 save_wv = wv;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1771 prev_wv = 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1772 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1773 first_pane = 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1774 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
1775 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1776 else
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1777 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1778 /* Create a new item within current pane. */
27896
75f296b1a872 (single_submenu): Set up help string.
Jason Rumney <jasonr@gnu.org>
parents: 27400
diff changeset
1779 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
1780
40119
bf81460680f2 (single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents: 39690
diff changeset
1781 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
1782 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
1783 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
1784 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
1785 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
1786 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
1787 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
1788
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1789 #ifndef HAVE_MULTILINGUAL_MENU
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1790 if (STRINGP (item_name) && STRING_MULTIBYTE (item_name))
40119
bf81460680f2 (single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents: 39690
diff changeset
1791 {
bf81460680f2 (single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents: 39690
diff changeset
1792 item_name = ENCODE_SYSTEM (item_name);
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1793 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
1794 }
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1795 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
1796 {
bf81460680f2 (single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents: 39690
diff changeset
1797 descrip = ENCODE_SYSTEM (descrip);
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1798 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
1799 }
bf81460680f2 (single_submenu, w32_menu_show) [!HAVE_MULTILINGUAL_MENU]:
Jason Rumney <jasonr@gnu.org>
parents: 39690
diff changeset
1800 #endif /* not HAVE_MULTILINGUAL_MENU */
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1801
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1802 wv = xmalloc_widget_value ();
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1803 if (prev_wv)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1804 prev_wv->next = wv;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1805 else
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1806 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
1807 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
1808 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
1809 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
1810 wv->value = 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1811 /* 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
1812 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
1813 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
1814 wv->enabled = !NILP (enable);
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1815
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1816 if (NILP (type))
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1817 wv->button_type = BUTTON_TYPE_NONE;
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1818 else if (EQ (type, QCtoggle))
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1819 wv->button_type = BUTTON_TYPE_TOGGLE;
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1820 else if (EQ (type, QCradio))
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1821 wv->button_type = BUTTON_TYPE_RADIO;
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1822 else
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1823 abort ();
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1824
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1825 wv->selected = !NILP (selected);
41908
4d8905b9ee49 (_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents: 41733
diff changeset
1826 if (!STRINGP (help))
4d8905b9ee49 (_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents: 41733
diff changeset
1827 help = Qnil;
4d8905b9ee49 (_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents: 41733
diff changeset
1828
4d8905b9ee49 (_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents: 41733
diff changeset
1829 wv->help = help;
28275
2c8492145fc8 (single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents: 27932
diff changeset
1830
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1831 prev_wv = wv;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1832
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1833 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
1834 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1835 }
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1836
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1837 /* 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
1838 if (!NILP (title))
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1839 {
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1840 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
1841 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
1842
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1843 /* 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
1844 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
1845 wv_sep->name = "--";
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1846 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
1847 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
1848
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1849 #ifndef HAVE_MULTILINGUAL_MENU
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1850 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
1851 title = ENCODE_SYSTEM (title);
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1852 #endif
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
1853 wv_title->name = (char *) SDATA (title);
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32671
diff changeset
1854 wv_title->enabled = TRUE;
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32671
diff changeset
1855 wv_title->title = TRUE;
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
1856 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
1857 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
1858 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
1859 first_wv->contents = wv_title;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1860 }
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1861
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1862 /* Actually create the menu. */
41733
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
1863 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
1864 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
1865
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1866 /* Adjust coordinates to be root-window-relative. */
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1867 pos.x = x;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1868 pos.y = y;
16588
481b7874a1e9 Change identifiers of the form win32* to w32*.
Geoff Voelker <voelker@cs.washington.edu>
parents: 15276
diff changeset
1869 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
1870
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1871 /* No selection has been chosen yet. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1872 menu_item_selection = 0;
19711
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
1873
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1874 /* Display the menu. */
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1875 menu_item_selection = SendMessage (FRAME_W32_WINDOW (f),
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1876 WM_EMACS_TRACKPOPUPMENU,
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1877 (WPARAM)menu, (LPARAM)&pos);
19711
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
1878
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
1879 /* 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
1880 during the call. */
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
1881 discard_mouse_events ();
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
1882
30238
4a3b87cc6f04 (w32_menu_show): Call free_menubar_widget_value_tree after menu is
Jason Rumney <jasonr@gnu.org>
parents: 30178
diff changeset
1883 /* 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
1884 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
1885
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1886 DestroyMenu (menu);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1887
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1888 /* Find the selected item, and its pane, to return
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1889 the proper value. */
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1890 if (menu_item_selection != 0)
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1891 {
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1892 Lisp_Object prefix, entry;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1893
38371
eb915f0b1d6e (menubar_selection_callback, w32_menu_show): Initialize `entry' to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36677
diff changeset
1894 prefix = entry = Qnil;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1895 i = 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1896 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
1897 {
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1898 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
1899 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1900 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
1901 prefix = entry;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1902 i++;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1903 }
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1904 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
1905 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1906 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
1907 i++;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1908 }
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1909 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
1910 {
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1911 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
1912 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
1913 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1914 /* 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
1915 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
1916 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
1917 i += 1;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1918 else
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1919 {
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1920 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
1921 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
1922 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1923 if (keymaps != 0)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1924 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1925 int j;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1926
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1927 entry = Fcons (entry, Qnil);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1928 if (!NILP (prefix))
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1929 entry = Fcons (prefix, entry);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1930 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
1931 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
1932 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
1933 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1934 return entry;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1935 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1936 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
1937 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1938 }
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1939 }
19711
dc9694ee3f70 (init_menu_items): Disable code.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16884
diff changeset
1940
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1941 return Qnil;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1942 }
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1943
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1944
41733
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
1945 #ifdef HAVE_DIALOGS
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1946 static char * button_names [] = {
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1947 "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
1948 "button6", "button7", "button8", "button9", "button10" };
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1949
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1950 static Lisp_Object
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1951 w32_dialog_show (f, keymaps, title, error)
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1952 FRAME_PTR f;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1953 int keymaps;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1954 Lisp_Object title;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1955 char **error;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1956 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1957 int i, nb_buttons=0;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1958 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
1959 int menu_item_selection;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1960
38371
eb915f0b1d6e (menubar_selection_callback, w32_menu_show): Initialize `entry' to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36677
diff changeset
1961 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
1962
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1963 /* Number of elements seen so far, before boundary. */
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1964 int left_count = 0;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1965 /* 1 means we've seen the boundary between left-hand elts and right-hand. */
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1966 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
1967
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1968 *error = NULL;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1969
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1970 if (menu_items_n_panes > 1)
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1971 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1972 *error = "Multiple panes in dialog box";
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1973 return Qnil;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1974 }
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1975
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1976 /* Create a tree of widget_value objects
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1977 representing the text label and buttons. */
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1978 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1979 Lisp_Object pane_name, prefix;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1980 char *pane_string;
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
1981 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
1982 prefix = AREF (menu_items, MENU_ITEMS_PANE_PREFIX);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1983 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
1984 ? "" : (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
1985 prev_wv = xmalloc_widget_value ();
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1986 prev_wv->value = pane_string;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1987 if (keymaps && !NILP (prefix))
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1988 prev_wv->name++;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1989 prev_wv->enabled = 1;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1990 prev_wv->name = "message";
42589
ac09ecabe088 (single_submenu, set_frame_menubar, w32_menu_show):
Jason Rumney <jasonr@gnu.org>
parents: 42584
diff changeset
1991 prev_wv->help = Qnil;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1992 first_wv = prev_wv;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
1993
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1994 /* Loop over all panes and items, filling in the tree. */
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1995 i = MENU_ITEMS_PANE_LENGTH;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1996 while (i < menu_items_used)
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1997 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1998
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
1999 /* Create a new item within current pane. */
27896
75f296b1a872 (single_submenu): Set up help string.
Jason Rumney <jasonr@gnu.org>
parents: 27400
diff changeset
2000 Lisp_Object item_name, enable, descrip, help;
75f296b1a872 (single_submenu): Set up help string.
Jason Rumney <jasonr@gnu.org>
parents: 27400
diff changeset
2001
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
2002 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
2003 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
2004 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
2005 help = AREF (menu_items, i + MENU_ITEMS_ITEM_HELP);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2006
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2007 if (NILP (item_name))
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2008 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2009 free_menubar_widget_value_tree (first_wv);
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2010 *error = "Submenu in dialog items";
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2011 return Qnil;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2012 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2013 if (EQ (item_name, Qquote))
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2014 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2015 /* This is the boundary between left-side elts
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2016 and right-side elts. Stop incrementing right_count. */
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2017 boundary_seen = 1;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2018 i++;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2019 continue;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2020 }
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2021 if (nb_buttons >= 9)
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2022 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2023 free_menubar_widget_value_tree (first_wv);
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2024 *error = "Too many dialog items";
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2025 return Qnil;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2026 }
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2027
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2028 wv = xmalloc_widget_value ();
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2029 prev_wv->next = wv;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2030 wv->name = (char *) button_names[nb_buttons];
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2031 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
2032 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
2033 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
2034 wv->call_data = (void *) &AREF (menu_items, i);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2035 wv->enabled = !NILP (enable);
42589
ac09ecabe088 (single_submenu, set_frame_menubar, w32_menu_show):
Jason Rumney <jasonr@gnu.org>
parents: 42584
diff changeset
2036 wv->help = Qnil;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2037 prev_wv = wv;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2038
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2039 if (! boundary_seen)
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2040 left_count++;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2041
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2042 nb_buttons++;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2043 i += MENU_ITEMS_ITEM_LENGTH;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2044 }
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2045
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2046 /* If the boundary was not specified,
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2047 by default put half on the left and half on the right. */
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2048 if (! boundary_seen)
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2049 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
2050
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2051 wv = xmalloc_widget_value ();
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2052 wv->name = dialog_name;
42589
ac09ecabe088 (single_submenu, set_frame_menubar, w32_menu_show):
Jason Rumney <jasonr@gnu.org>
parents: 42584
diff changeset
2053 wv->help = Qnil;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2054
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2055 /* Dialog boxes use a really stupid name encoding
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2056 which specifies how many buttons to use
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2057 and how many buttons are on the right.
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2058 The Q means something also. */
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2059 dialog_name[0] = 'Q';
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2060 dialog_name[1] = '0' + nb_buttons;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2061 dialog_name[2] = 'B';
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2062 dialog_name[3] = 'R';
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2063 /* Number of buttons to put on the right. */
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2064 dialog_name[4] = '0' + nb_buttons - left_count;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2065 dialog_name[5] = 0;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2066 wv->contents = first_wv;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2067 first_wv = wv;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2068 }
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2069
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2070 /* 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
2071 dialog_id = widget_id_tick++;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2072 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
2073 f->output_data.w32->widget, 1, 0,
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2074 dialog_selection_callback, 0);
32988
c3435dc00ed7 * lisp.h (KEYMAPP): New macro.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 32671
diff changeset
2075 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
2076
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2077 /* Free the widget_value objects we used to specify the contents. */
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2078 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
2079
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2080 /* No selection has been chosen yet. */
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2081 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
2082
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2083 /* Display the menu. */
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2084 lw_pop_up_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
2085 popup_activated_flag = 1;
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2086
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2087 /* 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
2088 popup_get_selection ((XEvent *) 0, FRAME_X_DISPLAY_INFO (f), dialog_id);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2089
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2090 lw_destroy_all_widgets (dialog_id);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2091
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2092 /* Find the selected item, and its pane, to return
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2093 the proper value. */
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2094 if (menu_item_selection != 0)
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2095 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2096 Lisp_Object prefix;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2097
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2098 prefix = Qnil;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2099 i = 0;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2100 while (i < menu_items_used)
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2101 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2102 Lisp_Object entry;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2103
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
2104 if (EQ (AREF (menu_items, i), Qt))
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2105 {
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
2106 prefix = AREF (menu_items, i + MENU_ITEMS_PANE_PREFIX);
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2107 i += MENU_ITEMS_PANE_LENGTH;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2108 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2109 else
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2110 {
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
2111 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
2112 if (menu_item_selection == i)
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2113 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2114 if (keymaps != 0)
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2115 {
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2116 entry = Fcons (entry, Qnil);
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2117 if (!NILP (prefix))
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2118 entry = Fcons (prefix, entry);
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2119 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2120 return entry;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2121 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2122 i += MENU_ITEMS_ITEM_LENGTH;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2123 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2124 }
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2125 }
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2126
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2127 return Qnil;
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2128 }
41733
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2129 #endif /* HAVE_DIALOGS */
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2130
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2131
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2132 /* Is this item a separator? */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2133 static int
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2134 name_is_separator (name)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2135 char *name;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2136 {
38371
eb915f0b1d6e (menubar_selection_callback, w32_menu_show): Initialize `entry' to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36677
diff changeset
2137 char *start = name;
eb915f0b1d6e (menubar_selection_callback, w32_menu_show): Initialize `entry' to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36677
diff changeset
2138
eb915f0b1d6e (menubar_selection_callback, w32_menu_show): Initialize `entry' to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36677
diff changeset
2139 /* Check if name string consists of only dashes ('-'). */
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2140 while (*name == '-') name++;
38371
eb915f0b1d6e (menubar_selection_callback, w32_menu_show): Initialize `entry' to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36677
diff changeset
2141 /* Separators can also be of the form "--:TripleSuperMegaEtched"
eb915f0b1d6e (menubar_selection_callback, w32_menu_show): Initialize `entry' to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36677
diff changeset
2142 or "--deep-shadow". We don't implement them yet, se we just treat
eb915f0b1d6e (menubar_selection_callback, w32_menu_show): Initialize `entry' to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36677
diff changeset
2143 them like normal separators. */
eb915f0b1d6e (menubar_selection_callback, w32_menu_show): Initialize `entry' to nil.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 36677
diff changeset
2144 return (*name == '\0' || start + 2 == name);
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2145 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2146
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2147
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2148 /* Indicate boundary between left and right. */
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2149 static int
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2150 add_left_right_boundary (HMENU menu)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2151 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2152 return AppendMenu (menu, MF_MENUBARBREAK, 0, NULL);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2153 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2154
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2155 static int
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2156 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
2157 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2158 UINT fuFlags;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2159 char *out_string;
27932
a590f8d0dbd2 [HAVE_BOXES]: Remove #undef.
Jason Rumney <jasonr@gnu.org>
parents: 27896
diff changeset
2160 int return_value;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2161
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2162 if (name_is_separator (wv->name))
33971
c33b80a45f6a (add_menu_item): Reset menu item text when changing type to radio button.
Jason Rumney <jasonr@gnu.org>
parents: 32988
diff changeset
2163 {
c33b80a45f6a (add_menu_item): Reset menu item text when changing type to radio button.
Jason Rumney <jasonr@gnu.org>
parents: 32988
diff changeset
2164 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
2165 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
2166 }
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2167 else
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2168 {
22750
b38cb406ed80 (add_menu_item): Draw menu items like titles if call_data is 0.
Andrew Innes <andrewi@gnu.org>
parents: 22737
diff changeset
2169 if (wv->enabled)
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2170 fuFlags = MF_STRING;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2171 else
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2172 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
2173
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2174 if (wv->key != NULL)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2175 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2176 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
2177 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
2178 strcat (out_string, "\t");
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2179 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
2180 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2181 else
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2182 out_string = wv->name;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2183
41908
4d8905b9ee49 (_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents: 41733
diff changeset
2184 if (item != NULL)
4d8905b9ee49 (_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents: 41733
diff changeset
2185 fuFlags = MF_POPUP;
4d8905b9ee49 (_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents: 41733
diff changeset
2186 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
2187 {
41733
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2188 /* 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
2189 we can't deallocate the memory otherwise. */
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2190 if (get_menu_item_info)
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2191 {
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
2192 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
2193 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
2194 #ifdef MENU_DEBUG
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
2195 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
2196 #endif
41733
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2197 fuFlags = MF_OWNERDRAW | MF_DISABLED;
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2198 }
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2199 else
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2200 fuFlags = MF_DISABLED;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2201 }
41637
d797ce338b4b (add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents: 41251
diff changeset
2202
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
2203 /* 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
2204 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
2205 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
2206 fuFlags |= MF_CHECKED;
27932
a590f8d0dbd2 [HAVE_BOXES]: Remove #undef.
Jason Rumney <jasonr@gnu.org>
parents: 27896
diff changeset
2207 else
36677
eb7af01c7f27 (add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents: 36313
diff changeset
2208 fuFlags |= MF_UNCHECKED;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2209 }
36677
eb7af01c7f27 (add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents: 36313
diff changeset
2210
27932
a590f8d0dbd2 [HAVE_BOXES]: Remove #undef.
Jason Rumney <jasonr@gnu.org>
parents: 27896
diff changeset
2211 return_value =
a590f8d0dbd2 [HAVE_BOXES]: Remove #undef.
Jason Rumney <jasonr@gnu.org>
parents: 27896
diff changeset
2212 AppendMenu (menu,
a590f8d0dbd2 [HAVE_BOXES]: Remove #undef.
Jason Rumney <jasonr@gnu.org>
parents: 27896
diff changeset
2213 fuFlags,
a590f8d0dbd2 [HAVE_BOXES]: Remove #undef.
Jason Rumney <jasonr@gnu.org>
parents: 27896
diff changeset
2214 item != NULL ? (UINT) item : (UINT) wv->call_data,
33971
c33b80a45f6a (add_menu_item): Reset menu item text when changing type to radio button.
Jason Rumney <jasonr@gnu.org>
parents: 32988
diff changeset
2215 out_string );
27932
a590f8d0dbd2 [HAVE_BOXES]: Remove #undef.
Jason Rumney <jasonr@gnu.org>
parents: 27896
diff changeset
2216
a590f8d0dbd2 [HAVE_BOXES]: Remove #undef.
Jason Rumney <jasonr@gnu.org>
parents: 27896
diff changeset
2217 /* 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
2218 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
2219 {
eb7af01c7f27 (add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents: 36313
diff changeset
2220 if (set_menu_item_info)
eb7af01c7f27 (add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents: 36313
diff changeset
2221 {
eb7af01c7f27 (add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents: 36313
diff changeset
2222 MENUITEMINFO info;
eb7af01c7f27 (add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents: 36313
diff changeset
2223 bzero (&info, sizeof (info));
eb7af01c7f27 (add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents: 36313
diff changeset
2224 info.cbSize = sizeof (info);
eb7af01c7f27 (add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents: 36313
diff changeset
2225 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
2226
41908
4d8905b9ee49 (_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents: 41733
diff changeset
2227 /* 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
2228 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
2229 menus are active. */
41733
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2230 if (wv->help)
41908
4d8905b9ee49 (_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents: 41733
diff changeset
2231 info.dwItemData = (DWORD) wv->help;
27932
a590f8d0dbd2 [HAVE_BOXES]: Remove #undef.
Jason Rumney <jasonr@gnu.org>
parents: 27896
diff changeset
2232
36677
eb7af01c7f27 (add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents: 36313
diff changeset
2233 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
2234 {
eb7af01c7f27 (add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents: 36313
diff changeset
2235 /* 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
2236 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
2237 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
2238 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
2239 info.dwTypeData = out_string;
eb7af01c7f27 (add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents: 36313
diff changeset
2240 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
2241 }
33971
c33b80a45f6a (add_menu_item): Reset menu item text when changing type to radio button.
Jason Rumney <jasonr@gnu.org>
parents: 32988
diff changeset
2242
36677
eb7af01c7f27 (add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents: 36313
diff changeset
2243 set_menu_item_info (menu,
eb7af01c7f27 (add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents: 36313
diff changeset
2244 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
2245 FALSE, &info);
eb7af01c7f27 (add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents: 36313
diff changeset
2246 }
eb7af01c7f27 (add_menu_item): Fix problems with using ownerdraw for
Andrew Innes <andrewi@gnu.org>
parents: 36313
diff changeset
2247 }
27932
a590f8d0dbd2 [HAVE_BOXES]: Remove #undef.
Jason Rumney <jasonr@gnu.org>
parents: 27896
diff changeset
2248 return return_value;
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2249 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2250
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2251 /* Construct native Windows menu(bar) based on widget_value tree. */
31114
cd392fdf0e9f Include keyboard.h before frame.h. Fix compile
Andrew Innes <andrewi@gnu.org>
parents: 30989
diff changeset
2252 int
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2253 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
2254 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2255 int items_added = 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2256
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2257 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
2258 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2259 if (wv->contents)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2260 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2261 HMENU sub_menu = CreatePopupMenu ();
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2262
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2263 if (sub_menu == NULL)
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2264 return 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2265
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2266 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
2267 !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
2268 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2269 DestroyMenu (sub_menu);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2270 return 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2271 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2272 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2273 else
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2274 {
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2275 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
2276 return 0;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2277 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2278 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2279 return 1;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2280 }
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2281
27400
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
2282 int
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
2283 popup_activated ()
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
2284 {
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
2285 /* popup_activated_flag not actually used on W32 */
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
2286 return 0;
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
2287 }
da3ee40952bf Add skeleton support for help strings on menus.
Jason Rumney <jasonr@gnu.org>
parents: 26729
diff changeset
2288
28275
2c8492145fc8 (single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents: 27932
diff changeset
2289 /* 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
2290 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
2291 available. */
2c8492145fc8 (single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents: 27932
diff changeset
2292 void
41646
258fa72efab7 (w32_menu_display_help): Actually add the new argument
Andrew Innes <andrewi@gnu.org>
parents: 41637
diff changeset
2293 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
2294 {
2c8492145fc8 (single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents: 27932
diff changeset
2295 if (get_menu_item_info)
2c8492145fc8 (single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents: 27932
diff changeset
2296 {
41637
d797ce338b4b (add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents: 41251
diff changeset
2297 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
2298 Lisp_Object frame, help;
28275
2c8492145fc8 (single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents: 27932
diff changeset
2299
41733
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2300 // No help echo on owner-draw menu items.
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2301 if (flags & MF_OWNERDRAW || flags & MF_POPUP)
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2302 help = Qnil;
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2303 else
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2304 {
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2305 MENUITEMINFO info;
28275
2c8492145fc8 (single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents: 27932
diff changeset
2306
41733
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2307 bzero (&info, sizeof (info));
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2308 info.cbSize = sizeof (info);
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2309 info.fMask = MIIM_DATA;
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2310 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
2311
41908
4d8905b9ee49 (_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents: 41733
diff changeset
2312 help = info.dwItemData ? (Lisp_Object) info.dwItemData : Qnil;
41733
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2313 }
30989
2152817050ff (keymap_panes): Pass the keymap's prompt as the pane name to
Jason Rumney <jasonr@gnu.org>
parents: 30238
diff changeset
2314
41637
d797ce338b4b (add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents: 41251
diff changeset
2315 /* 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
2316 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
2317 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
2318 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
2319 if (f)
d797ce338b4b (add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents: 41251
diff changeset
2320 {
d797ce338b4b (add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents: 41251
diff changeset
2321 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
2322 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
2323 }
d797ce338b4b (add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents: 41251
diff changeset
2324 else
d797ce338b4b (add_menu_item): Do not use owner-draw for disabled menu items.
Jason Rumney <jasonr@gnu.org>
parents: 41251
diff changeset
2325 /* 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
2326 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
2327 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
2328 }
2c8492145fc8 (single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents: 27932
diff changeset
2329 }
2c8492145fc8 (single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents: 27932
diff changeset
2330
41908
4d8905b9ee49 (_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents: 41733
diff changeset
2331 /* 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
2332 static void
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2333 w32_free_submenu_strings (menu)
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2334 HMENU menu;
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2335 {
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2336 int i, num = GetMenuItemCount (menu);
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2337 for (i = 0; i < num; i++)
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2338 {
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2339 MENUITEMINFO info;
41930
d5fc57bcb0f2 (w32_free_submenu_strings): Clear menu item struct
Jason Rumney <jasonr@gnu.org>
parents: 41908
diff changeset
2340 bzero (&info, sizeof (info));
41733
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2341 info.cbSize = sizeof (info);
41908
4d8905b9ee49 (_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents: 41733
diff changeset
2342 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
2343
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2344 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
2345
41908
4d8905b9ee49 (_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents: 41733
diff changeset
2346 /* 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
2347 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
2348 {
4d8905b9ee49 (_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents: 41733
diff changeset
2349 #ifdef MENU_DEBUG
4d8905b9ee49 (_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents: 41733
diff changeset
2350 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
2351 #endif
46815
52f36f4b0e4f (local_heap, local_alloc, local_free): New macros.
Richard M. Stallman <rms@gnu.org>
parents: 46370
diff changeset
2352 local_free (info.dwItemData);
41908
4d8905b9ee49 (_widget_value): Make `help' field a Lisp_Object. Add
Jason Rumney <jasonr@gnu.org>
parents: 41733
diff changeset
2353 }
41733
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2354
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2355 /* Recurse down submenus. */
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2356 if (info.hSubMenu)
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2357 w32_free_submenu_strings (info.hSubMenu);
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2358 }
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2359 }
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2360
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2361 void
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2362 w32_free_menu_strings (hwnd)
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2363 HWND hwnd;
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2364 {
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2365 HMENU menu = current_popup_menu;
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2366
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2367 if (get_menu_item_info)
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2368 {
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2369 /* 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
2370 menubar. */
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2371 if (!menu)
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2372 menu = GetMenu (hwnd);
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2373
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2374 if (menu)
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2375 w32_free_submenu_strings (menu);
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2376 }
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2377
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2378 current_popup_menu = NULL;
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2379 }
28275
2c8492145fc8 (single_submenu): Set help string to NULL if none.
Jason Rumney <jasonr@gnu.org>
parents: 27932
diff changeset
2380
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2381 #endif /* HAVE_MENUS */
41733
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2382
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
2383 void syms_of_w32menu ()
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2384 {
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
2385 globals_of_w32menu ();
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2386 staticpro (&menu_items);
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2387 menu_items = Qnil;
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2388
41733
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2389 current_popup_menu = NULL;
917737801660 (current_popup_menu, get_menu_item_info):
Jason Rumney <jasonr@gnu.org>
parents: 41646
diff changeset
2390
15276
07341673efa6 Include buffer.h.
Richard M. Stallman <rms@gnu.org>
parents: 15110
diff changeset
2391 Qdebug_on_next_call = intern ("debug-on-next-call");
07341673efa6 Include buffer.h.
Richard M. Stallman <rms@gnu.org>
parents: 15110
diff changeset
2392 staticpro (&Qdebug_on_next_call);
07341673efa6 Include buffer.h.
Richard M. Stallman <rms@gnu.org>
parents: 15110
diff changeset
2393
21612
24a01af0cd38 (Vmenu_updating_frame): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21450
diff changeset
2394 DEFVAR_LISP ("menu-updating-frame", &Vmenu_updating_frame,
40962
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
2395 doc: /* Frame for which we are updating a menu.
f66d09d1bb2f Change doc-string comments to `new style'. [w/`doc:' keyword]. Doc fixes.
Jason Rumney <jasonr@gnu.org>
parents: 40656
diff changeset
2396 The enable predicate for a menu command should check this variable. */);
21612
24a01af0cd38 (Vmenu_updating_frame): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21450
diff changeset
2397 Vmenu_updating_frame = Qnil;
24a01af0cd38 (Vmenu_updating_frame): New variable.
Geoff Voelker <voelker@cs.washington.edu>
parents: 21450
diff changeset
2398
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2399 defsubr (&Sx_popup_menu);
21741
3d1ce72aa7b9 Replace code with a new version written from scratch
Geoff Voelker <voelker@cs.washington.edu>
parents: 21612
diff changeset
2400 #ifdef HAVE_MENUS
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2401 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
2402 #endif
13434
53ba95a88cf2 Initial revision
Geoff Voelker <voelker@cs.washington.edu>
parents:
diff changeset
2403 }
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
2404
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
2405 /*
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
2406 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
2407 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
2408 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
2409 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
2410 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
2411 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
2412 */
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
2413 void globals_of_w32menu ()
f0df5f687c15 Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents: 48375
diff changeset
2414 {
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
2415 /* See if Get/SetMenuItemInfo functions are available. */
f0df5f687c15 Revisited my earlier fix for the following entry in etc/PROBLEMS: 'Emacs built on Windows 9x/ME crashes at startup on Windows XP, or Emacs builtpart of on XP crashes at startup on Windows 9x/ME.' Fixed several Windows API errors detected by BoundsChecker
Ben Key <bkey1@tampabay.rr.com>
parents: 48375
diff changeset
2416 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
2417 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
2418 set_menu_item_info = (SetMenuItemInfoA_Proc) GetProcAddress (user32, "SetMenuItemInfoA");
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
2419 }