Mercurial > hg > xemacs-beta
annotate lwlib/xlwmenuP.h @ 5566:4654c01af32b
Improve the implementation, documentation of #'labels, #'flet.
lisp/ChangeLog addition:
2011-09-07 Aidan Kehoe <kehoea@parhasard.net>
* bytecomp.el:
* bytecomp.el (for-effect): Move this earlier in the file, it's
referenced in byte-compile-initial-macro-environment.
* bytecomp.el (byte-compile-initial-macro-environment):
In the byte-compile-macro-environment definition for #'labels, put
off the compiling the lambda bodies until the point where the rest
of the form is being compiled, allowing the lambda bodies to
access appropriate values for byte-compile-bound-variables, and
reducing excessive warning about free variables.
Add a byte-compile-macro-environment definition for #'flet. This
modifies byte-compile-function-environment appropriately, and
warns about bindings of functions that have macro definitions in
the current environment, about functions that have byte codes, and
about functions that have byte-compile methods (which may not do
what the user wants at runtime).
* bytecomp.el (byte-compile-funcall):
If FUNCTION is constant, call #'byte-compile-callargs-warn if
that's appropriate, giving warnings about problems with calling
functions bound with #'labels.
* cl-macs.el:
* cl-macs.el (flet):
Mention the main difference from Common Lisp, that the bindings
are dynamic, not lexical. Counsel the use of #'labels, not #'flet,
for this and other reasons. Explain the limited single use case for
#'flet. Cross-reference to bytecomp.el in a comment.
* cl-macs.el (labels):
Go into detail on which functions may be called from
where. Explain how to access the function definition of a label
within FORM. Add a comment cross-referencing to bytecomp.el.
man/ChangeLog addition:
2011-09-07 Aidan Kehoe <kehoea@parhasard.net>
* cl.texi (Function Bindings):
Move #'labels first, describe it in more detail, explaining that
it is to be preferred over #'flet, and explaining why.
Explain that dynamic bindings with #'flet will also not work when
functions are accessed through their bytecodes.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Wed, 07 Sep 2011 16:26:45 +0100 |
parents | ade4c7e2c6cb |
children |
rev | line source |
---|---|
5422
ade4c7e2c6cb
Migrate lwlib/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
4916
diff
changeset
|
1 /* Implements a lightweight menubar widget. |
ade4c7e2c6cb
Migrate lwlib/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
4916
diff
changeset
|
2 Copyright (C) 1992, 1993, 1994 Lucid, Inc. |
ade4c7e2c6cb
Migrate lwlib/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
4916
diff
changeset
|
3 Copyright (C) 1995 Tinker Systems and INS Engineering Corp. |
ade4c7e2c6cb
Migrate lwlib/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
4916
diff
changeset
|
4 |
ade4c7e2c6cb
Migrate lwlib/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
4916
diff
changeset
|
5 This file is part of the Lucid Widget Library. |
ade4c7e2c6cb
Migrate lwlib/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
4916
diff
changeset
|
6 |
ade4c7e2c6cb
Migrate lwlib/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
4916
diff
changeset
|
7 The Lucid Widget Library is free software: you can redistribute it |
ade4c7e2c6cb
Migrate lwlib/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
4916
diff
changeset
|
8 and/or modify it under the terms of the GNU General Public License as |
ade4c7e2c6cb
Migrate lwlib/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
4916
diff
changeset
|
9 published by the Free Software Foundation, either version 3 of the |
ade4c7e2c6cb
Migrate lwlib/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
4916
diff
changeset
|
10 License, or (at your option) any later version. |
ade4c7e2c6cb
Migrate lwlib/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
4916
diff
changeset
|
11 |
ade4c7e2c6cb
Migrate lwlib/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
4916
diff
changeset
|
12 The Lucid Widget Library is distributed in the hope that it will be |
ade4c7e2c6cb
Migrate lwlib/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
4916
diff
changeset
|
13 useful, but WITHOUT ANY WARRANTY; without even the implied warranty of |
ade4c7e2c6cb
Migrate lwlib/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
4916
diff
changeset
|
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
ade4c7e2c6cb
Migrate lwlib/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
4916
diff
changeset
|
15 General Public License for more details. |
ade4c7e2c6cb
Migrate lwlib/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
4916
diff
changeset
|
16 |
ade4c7e2c6cb
Migrate lwlib/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
4916
diff
changeset
|
17 You should have received a copy of the GNU General Public License |
ade4c7e2c6cb
Migrate lwlib/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
4916
diff
changeset
|
18 along with the Lucid Widget Library. If not, see |
ade4c7e2c6cb
Migrate lwlib/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
4916
diff
changeset
|
19 <http://www.gnu.org/licenses/>. */ |
ade4c7e2c6cb
Migrate lwlib/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents:
4916
diff
changeset
|
20 |
440 | 21 #ifndef INCLUDED_xlwmenuP_h_ |
22 #define INCLUDED_xlwmenuP_h_ | |
428 | 23 |
24 #include "xlwmenu.h" | |
25 #include <X11/CoreP.h> | |
26 | |
4916
a6c778975d7d
split USE_XFT into HAVE_XFT/USE_XFT
Ben Wing <ben@xemacs.org>
parents:
3685
diff
changeset
|
27 #ifdef HAVE_XFT_MENUBARS |
3094 | 28 #include <X11/Xft/Xft.h> |
29 #endif | |
30 | |
31 | |
428 | 32 /* Elements in the stack arrays. */ |
33 typedef struct _window_state | |
34 { | |
35 Window window; | |
36 Position x; | |
37 Position y; | |
38 Dimension width; | |
39 Dimension height; | |
40 Dimension label_width; | |
41 Dimension toggle_width; | |
42 } window_state; | |
43 | |
44 | |
45 /* New fields for the XlwMenu widget instance record */ | |
46 typedef struct _XlwMenu_part | |
47 { | |
48 /* slots set by the resources */ | |
49 | |
4916
a6c778975d7d
split USE_XFT into HAVE_XFT/USE_XFT
Ben Wing <ben@xemacs.org>
parents:
3685
diff
changeset
|
50 #if defined(NEED_MOTIF) && !defined(HAVE_XFT_MENUBARS) |
428 | 51 XmFontList font_list; |
52 XmFontList font_list_2; | |
53 XmFontList fallback_font_list; | |
54 #else | |
55 XFontStruct * font; | |
4916
a6c778975d7d
split USE_XFT into HAVE_XFT/USE_XFT
Ben Wing <ben@xemacs.org>
parents:
3685
diff
changeset
|
56 #ifdef HAVE_XFT_MENUBARS |
3397 | 57 String fcFontName; |
3685 | 58 String xftFontName; |
3094 | 59 XftFont *renderFont; |
60 #endif | |
428 | 61 # ifdef USE_XFONTSET |
62 XFontSet font_set; | |
63 # endif | |
64 #endif | |
65 Dimension font_ascent, font_descent; /* extracted from font/fontlist */ | |
66 | |
67 Pixel foreground; | |
68 Pixel button_foreground; | |
69 Pixel highlight_foreground; | |
70 Pixel title_foreground; | |
71 Dimension margin; | |
72 Dimension horizontal_margin; | |
73 Dimension vertical_margin; | |
74 Dimension column_spacing; | |
75 Dimension shadow_thickness; | |
76 Dimension indicator_size; | |
77 Pixel top_shadow_color; | |
78 Pixel bottom_shadow_color; | |
79 Pixel select_color; | |
4916
a6c778975d7d
split USE_XFT into HAVE_XFT/USE_XFT
Ben Wing <ben@xemacs.org>
parents:
3685
diff
changeset
|
80 #ifdef HAVE_XFT_MENUBARS |
3094 | 81 #endif |
428 | 82 Pixmap top_shadow_pixmap; |
83 Pixmap bottom_shadow_pixmap; | |
84 Cursor cursor_shape; | |
85 XtCallbackList open; | |
86 XtCallbackList select; | |
87 widget_value* contents; | |
88 int horizontal; | |
89 Boolean use_backing_store; | |
90 Boolean bounce_down; | |
91 Boolean lookup_labels; | |
92 | |
93 /* State of the XlwMenu */ | |
94 int old_depth; | |
95 widget_value** old_stack; | |
96 int old_stack_length; | |
97 | |
98 /* New state after the user moved */ | |
99 int new_depth; | |
100 widget_value** new_stack; | |
101 int new_stack_length; | |
102 | |
103 /* Window resources */ | |
104 window_state* windows; | |
105 int windows_length; | |
106 | |
107 /* Internal part, set by the XlwMenu */ | |
108 GC foreground_gc; | |
109 GC button_gc; | |
110 GC background_gc; | |
111 GC inactive_gc; | |
112 GC inactive_button_gc; | |
113 GC shadow_top_gc; | |
114 GC shadow_bottom_gc; | |
115 GC select_gc; | |
116 GC highlight_gc; | |
117 GC title_gc; | |
118 Cursor cursor; | |
119 Boolean popped_up; | |
120 Pixmap gray_pixmap; | |
121 | |
122 /* Stay-up stuff */ | |
123 Boolean pointer_grabbed; | |
124 Boolean next_release_must_exit; | |
125 Time menu_post_time, menu_bounce_time; | |
126 widget_value * last_selected_val; | |
127 } XlwMenuPart; | |
128 | |
129 /* Full instance record declaration */ | |
130 typedef struct _XlwMenuRec | |
131 { | |
132 CorePart core; | |
133 XlwMenuPart menu; | |
134 } XlwMenuRec; | |
135 | |
136 /* New fields for the XlwMenu widget class record */ | |
137 typedef struct | |
138 { | |
139 int dummy; | |
140 } XlwMenuClassPart; | |
141 | |
142 /* Full class record declaration. */ | |
143 typedef struct _XlwMenuClassRec | |
144 { | |
145 CoreClassPart core_class; | |
146 XlwMenuClassPart menu_class; | |
147 } XlwMenuClassRec; | |
148 | |
149 /* Class pointer. */ | |
150 extern XlwMenuClassRec xlwMenuClassRec; | |
151 | |
440 | 152 #endif /* INCLUDED_xlwmenuP_h_ */ |