Mercurial > emacs
annotate lwlib/xlwmenu.c @ 65980:4520ae2624f2
* mh-init.el (mh-image-load-path): New function that adds the path to
the MH-E images to the image-load-path or load-path depending on the
version of Emacs.
* mh-customize.el: Call mh-image-load-path just before
mh-tool-bar-define so that the toolbar images can be found.
* mh-customize.el (mh-invisible-header-fields-internal)
(mh-invisible-header-fields-internal): Add Received-SPF header and
X-Gmail- prefixes seen from Gmail. Jeffrey C Honig
<jch@honig.net>
* mh-customize.el (mh-customize): Use customization group mh-e.
* mh-e.el (desktop-buffer-mode-handlers): Only add to this list if
the variable exists. Not present pre-version 22.
(Version, mh-version): Added +cvs to version.
* mh-unit.el (mh-unit): Changed lm-verify test to Emacs 22.
* Makefile: Incorporated ideas from Clemens Fruhwirth to
generalize mh-loaddefs.el to make it work for both GNU Emacs and
XEmacs.
(EMACS_OPTIONS, XEMACS_OPTIONS): Use double-dash for all long
options.
(EMACS_LOADDEFS_COOKIE): New variable for generate-autoload-cookie
setting. Obsoletes XEMACS_LOADDEFS_COOKIE.
(EMACS_EXPORT_MH_LOADDEFS): New variable for GNU Emacs commands to
rebuild mh-loaddefs.el.
(XEMACS_EXPORT_MH_LOADDEFS): New variable for XEmacs commands to
rebuild mh-loaddefs.el. Obsoletes XEMACS_LOADDEFS_FILE and
XEMACS_LOADDEFS_PKG_NAME.
(MH-E-LOADDEFS-SRC): New variable which is set to $(MH-E-SRC) on
GNU Emacs, and adds $(MH-E-XEMACS-SRC) on XEmacs.
(all): Modify EMACS_EXPORT_MH_LOADDEFS and MH-E-LOADDEFS-SRC on
XEMacs.
(mh-loaddefs.el): Now depends on $(MH-E-LOADDEFS-SRC) and has
generic compile command that works on both GNU Emacs XEmacs.
(xemacs): Depend on autoloads instead of deleted loaddefs-xemacs.
(loaddefs-xemacs): Deleted.
* mh-comp.el (mh-font-lock-field-data): Fix a bug where the
function would return t but match-data was being set to nil
(closes SF #1241017). Satyaki Das <satyaki@theforce.stanford.edu>.
* mh-comp.el (mh-insert-auto-fields): Inset identity regardless of
whether one was already set, since if one used a default identity
it would never be overridden. Peter S Galbraith
<psg@debian.org>
* mh-init.el (mh-path): Use customization group mh-e. Thanks to
Peter Whaite for these patches (closes SF #1213716).
* mh-mime.el (mh-compose-forward): Only use mh-sent-from-msg as a
default message if it's a number (as is done elsewhere).
Otherwise, an error is thrown if this function is called from a
draft created by mh-forward since this variable is a list. Also
added a space after the "Messages [%s]:" prompt.
* mh-mime.el (mh-compose-forward): Allow insertion of multiple
forwarded messages by range (including sequences). For the sent
folder the default message presented is the sent message. For
other folders, the default message is "cur", if it exists.
Jeffrey C Honig <jch@honig.net>
author | Bill Wohler <wohler@newt.com> |
---|---|
date | Mon, 10 Oct 2005 16:37:54 +0000 |
parents | ad24f42046b1 |
children | e8a3fb527b77 4d989ab8dad8 b1c1fc853d2f |
rev | line source |
---|---|
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1 /* Implements a lightweight menubar widget. |
5626 | 2 Copyright (C) 1992 Lucid, Inc. |
64769
6358e3c6075c
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64083
diff
changeset
|
3 Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. |
5626 | 4 |
5 This file is part of the Lucid Widget Library. | |
6 | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
7 The Lucid Widget Library is free software; you can redistribute it and/or |
5626 | 8 modify it under the terms of the GNU General Public License as published by |
9 the Free Software Foundation; either version 2, or (at your option) | |
10 any later version. | |
11 | |
12 The Lucid Widget Library is distributed in the hope that it will be useful, | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
13 but WITHOUT ANY WARRANTY; without even the implied warranty of |
5626 | 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
15 GNU General Public License for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
15742 | 18 along with GNU Emacs; see the file COPYING. If not, write to the |
64083 | 19 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
20 Boston, MA 02110-1301, USA. */ | |
5626 | 21 |
22 /* Created by devin@lucid.com */ | |
23 | |
26087
e0d966fb548f
Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents:
25526
diff
changeset
|
24 #ifdef HAVE_CONFIG_H |
e0d966fb548f
Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents:
25526
diff
changeset
|
25 #include <config.h> |
e0d966fb548f
Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents:
25526
diff
changeset
|
26 #endif |
e0d966fb548f
Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents:
25526
diff
changeset
|
27 |
51143
d4196d00eba5
Include lisp.h, not ../src/lisp.h.
Dave Love <fx@gnu.org>
parents:
49600
diff
changeset
|
28 #include "lisp.h" |
41767 | 29 |
5626 | 30 #include <stdio.h> |
31 | |
32 #include <sys/types.h> | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
33 #if (defined __sun) && !(defined SUNOS41) |
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
34 #define SUNOS41 |
5626 | 35 #include <X11/Xos.h> |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
36 #undef SUNOS41 |
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
37 #else |
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
38 #include <X11/Xos.h> |
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
39 #endif |
5626 | 40 #include <X11/IntrinsicP.h> |
9033 | 41 #include <X11/ObjectP.h> |
5626 | 42 #include <X11/StringDefs.h> |
43 #include <X11/cursorfont.h> | |
44 #include "xlwmenuP.h" | |
29602
d13e7c93d265
(make_shadow_gcs): Free and copy colors so that
Gerd Moellmann <gerd@gnu.org>
parents:
29469
diff
changeset
|
45 |
29469
f9b5fe053f7c
(x_alloc_nearest_color_for_widget, x_catch_errors, x_uncatch_errors)
Dave Love <fx@gnu.org>
parents:
27988
diff
changeset
|
46 #ifdef emacs |
30324
d4713daa6716
Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents:
29700
diff
changeset
|
47 |
d4713daa6716
Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents:
29700
diff
changeset
|
48 /* Defined in xfns.c. When config.h defines `static' as empty, we get |
d4713daa6716
Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents:
29700
diff
changeset
|
49 redefinition errors when gray_bitmap is included more than once, so |
d4713daa6716
Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents:
29700
diff
changeset
|
50 we're referring to the one include in xfns.c here. */ |
d4713daa6716
Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents:
29700
diff
changeset
|
51 |
d4713daa6716
Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents:
29700
diff
changeset
|
52 extern int gray_bitmap_width; |
d4713daa6716
Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents:
29700
diff
changeset
|
53 extern int gray_bitmap_height; |
34557
b9586137049e
(gray_bitmap_bits): Remove `unsigned' from
Dave Love <fx@gnu.org>
parents:
34436
diff
changeset
|
54 extern char *gray_bitmap_bits; |
30324
d4713daa6716
Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents:
29700
diff
changeset
|
55 |
29469
f9b5fe053f7c
(x_alloc_nearest_color_for_widget, x_catch_errors, x_uncatch_errors)
Dave Love <fx@gnu.org>
parents:
27988
diff
changeset
|
56 /* Defined in xterm.c. */ |
f9b5fe053f7c
(x_alloc_nearest_color_for_widget, x_catch_errors, x_uncatch_errors)
Dave Love <fx@gnu.org>
parents:
27988
diff
changeset
|
57 extern int x_alloc_nearest_color_for_widget __P ((Widget, Colormap, XColor*)); |
31341
1c5d68acbded
(x_alloc_lighter_color_for_widget):
Miles Bader <miles@gnu.org>
parents:
31287
diff
changeset
|
58 extern int x_alloc_lighter_color_for_widget __P ((Widget, Display*, Colormap, |
1c5d68acbded
(x_alloc_lighter_color_for_widget):
Miles Bader <miles@gnu.org>
parents:
31287
diff
changeset
|
59 unsigned long *, |
1c5d68acbded
(x_alloc_lighter_color_for_widget):
Miles Bader <miles@gnu.org>
parents:
31287
diff
changeset
|
60 double, int)); |
29469
f9b5fe053f7c
(x_alloc_nearest_color_for_widget, x_catch_errors, x_uncatch_errors)
Dave Love <fx@gnu.org>
parents:
27988
diff
changeset
|
61 extern int x_catch_errors __P ((Display*)); |
65684
ec3a1c817699
Fix the return type for x_clear_errors and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
64769
diff
changeset
|
62 extern void x_uncatch_errors P_ ((Display *, int)); |
29469
f9b5fe053f7c
(x_alloc_nearest_color_for_widget, x_catch_errors, x_uncatch_errors)
Dave Love <fx@gnu.org>
parents:
27988
diff
changeset
|
63 extern int x_had_errors_p __P ((Display*)); |
65684
ec3a1c817699
Fix the return type for x_clear_errors and
Dan Nicolaescu <dann@ics.uci.edu>
parents:
64769
diff
changeset
|
64 extern void x_clear_errors __P ((Display*)); |
29602
d13e7c93d265
(make_shadow_gcs): Free and copy colors so that
Gerd Moellmann <gerd@gnu.org>
parents:
29469
diff
changeset
|
65 extern unsigned long x_copy_dpy_color __P ((Display *, Colormap, |
d13e7c93d265
(make_shadow_gcs): Free and copy colors so that
Gerd Moellmann <gerd@gnu.org>
parents:
29469
diff
changeset
|
66 unsigned long)); |
d13e7c93d265
(make_shadow_gcs): Free and copy colors so that
Gerd Moellmann <gerd@gnu.org>
parents:
29469
diff
changeset
|
67 |
d13e7c93d265
(make_shadow_gcs): Free and copy colors so that
Gerd Moellmann <gerd@gnu.org>
parents:
29469
diff
changeset
|
68 /* Defined in xfaces.c. */ |
d13e7c93d265
(make_shadow_gcs): Free and copy colors so that
Gerd Moellmann <gerd@gnu.org>
parents:
29469
diff
changeset
|
69 extern void x_free_dpy_colors __P ((Display *, Screen *, Colormap, |
d13e7c93d265
(make_shadow_gcs): Free and copy colors so that
Gerd Moellmann <gerd@gnu.org>
parents:
29469
diff
changeset
|
70 unsigned long *pixels, int npixels)); |
30324
d4713daa6716
Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents:
29700
diff
changeset
|
71 #else /* not emacs */ |
d4713daa6716
Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents:
29700
diff
changeset
|
72 |
d4713daa6716
Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents:
29700
diff
changeset
|
73 #include <X11/bitmaps/gray> |
d4713daa6716
Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents:
29700
diff
changeset
|
74 #define gray_bitmap_width gray_width |
d4713daa6716
Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents:
29700
diff
changeset
|
75 #define gray_bitmap_height gray_height |
d4713daa6716
Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents:
29700
diff
changeset
|
76 #define gray_bitmap_bits gray_bits |
d4713daa6716
Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents:
29700
diff
changeset
|
77 |
d4713daa6716
Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents:
29700
diff
changeset
|
78 #endif /* not emacs */ |
8860 | 79 |
80 static int pointer_grabbed; | |
81 static XEvent menu_post_event; | |
5626 | 82 |
9746
49e984bf6689
(xlwmenu_default_font): New global variable.
Richard M. Stallman <rms@gnu.org>
parents:
9700
diff
changeset
|
83 XFontStruct *xlwmenu_default_font; |
49e984bf6689
(xlwmenu_default_font): New global variable.
Richard M. Stallman <rms@gnu.org>
parents:
9700
diff
changeset
|
84 |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
85 static char |
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
86 xlwMenuTranslations [] = |
13899
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
87 "<BtnDown>: start()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
88 <Motion>: drag()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
89 <BtnUp>: select()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
90 <Key>Shift_L: nothing()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
91 <Key>Shift_R: nothing()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
92 <Key>Meta_L: nothing()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
93 <Key>Meta_R: nothing()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
94 <Key>Control_L: nothing()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
95 <Key>Control_R: nothing()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
96 <Key>Hyper_L: nothing()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
97 <Key>Hyper_R: nothing()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
98 <Key>Super_L: nothing()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
99 <Key>Super_R: nothing()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
100 <Key>Alt_L: nothing()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
101 <Key>Alt_R: nothing()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
102 <Key>Caps_Lock: nothing()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
103 <Key>Shift_Lock: nothing()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
104 <KeyUp>Shift_L: nothing()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
105 <KeyUp>Shift_R: nothing()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
106 <KeyUp>Meta_L: nothing()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
107 <KeyUp>Meta_R: nothing()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
108 <KeyUp>Control_L: nothing()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
109 <KeyUp>Control_R: nothing()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
110 <KeyUp>Hyper_L: nothing()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
111 <KeyUp>Hyper_R: nothing()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
112 <KeyUp>Super_L: nothing()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
113 <KeyUp>Super_R: nothing()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
114 <KeyUp>Alt_L: nothing()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
115 <KeyUp>Alt_R: nothing()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
116 <KeyUp>Caps_Lock: nothing()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
117 <KeyUp>Shift_Lock:nothing()\n\ |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
118 <Key>Return: select()\n\ |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
119 <Key>Down: down()\n\ |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
120 <Key>Up: up()\n\ |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
121 <Key>Left: left()\n\ |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
122 <Key>Right: right()\n\ |
13899
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
123 <Key>: key()\n\ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
124 <KeyUp>: key()\n\ |
5626 | 125 "; |
126 | |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
127 /* FIXME: Space should toggle toggleable menu item but not remove the menu |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
128 so you can toggle the next one without entering the menu again. */ |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
129 |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
130 /* FIXME: Should ESC close one level of menu structure or the complete menu? */ |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
131 |
44966 | 132 /* FIXME: F10 should enter the menu, the first one in the menu-bar. */ |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
133 |
5626 | 134 #define offset(field) XtOffset(XlwMenuWidget, field) |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
135 static XtResource |
5626 | 136 xlwMenuResources[] = |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
137 { |
60698
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
138 #ifdef HAVE_X_I18N |
61209
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
139 {XtNfontSet, XtCFontSet, XtRFontSet, sizeof(XFontSet), |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
140 offset(menu.fontSet), XtRFontSet, NULL}, |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
141 #endif |
5626 | 142 {XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct *), |
60698
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
143 offset(menu.font), XtRString, "XtDefaultFont"}, |
5626 | 144 {XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel), |
145 offset(menu.foreground), XtRString, "XtDefaultForeground"}, | |
45147
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
146 {XtNdisabledForeground, XtCDisabledForeground, XtRPixel, sizeof(Pixel), |
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
147 offset(menu.disabled_foreground), XtRString, (XtPointer)NULL}, |
5626 | 148 {XtNbuttonForeground, XtCButtonForeground, XtRPixel, sizeof(Pixel), |
149 offset(menu.button_foreground), XtRString, "XtDefaultForeground"}, | |
150 {XtNmargin, XtCMargin, XtRDimension, sizeof(Dimension), | |
44966 | 151 offset(menu.margin), XtRImmediate, (XtPointer)1}, |
5626 | 152 {XtNhorizontalSpacing, XtCMargin, XtRDimension, sizeof(Dimension), |
153 offset(menu.horizontal_spacing), XtRImmediate, (XtPointer)3}, | |
154 {XtNverticalSpacing, XtCMargin, XtRDimension, sizeof(Dimension), | |
44966 | 155 offset(menu.vertical_spacing), XtRImmediate, (XtPointer)2}, |
5626 | 156 {XtNarrowSpacing, XtCMargin, XtRDimension, sizeof(Dimension), |
157 offset(menu.arrow_spacing), XtRImmediate, (XtPointer)10}, | |
158 | |
8860 | 159 {XmNshadowThickness, XmCShadowThickness, XtRDimension, |
5626 | 160 sizeof (Dimension), offset (menu.shadow_thickness), |
44966 | 161 XtRImmediate, (XtPointer)1}, |
5626 | 162 {XmNtopShadowColor, XmCTopShadowColor, XtRPixel, sizeof (Pixel), |
163 offset (menu.top_shadow_color), XtRImmediate, (XtPointer)-1}, | |
164 {XmNbottomShadowColor, XmCBottomShadowColor, XtRPixel, sizeof (Pixel), | |
165 offset (menu.bottom_shadow_color), XtRImmediate, (XtPointer)-1}, | |
166 {XmNtopShadowPixmap, XmCTopShadowPixmap, XtRPixmap, sizeof (Pixmap), | |
167 offset (menu.top_shadow_pixmap), XtRImmediate, (XtPointer)None}, | |
168 {XmNbottomShadowPixmap, XmCBottomShadowPixmap, XtRPixmap, sizeof (Pixmap), | |
169 offset (menu.bottom_shadow_pixmap), XtRImmediate, (XtPointer)None}, | |
170 | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
171 {XtNopen, XtCCallback, XtRCallback, sizeof(XtPointer), |
5626 | 172 offset(menu.open), XtRCallback, (XtPointer)NULL}, |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
173 {XtNselect, XtCCallback, XtRCallback, sizeof(XtPointer), |
5626 | 174 offset(menu.select), XtRCallback, (XtPointer)NULL}, |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
175 {XtNhighlightCallback, XtCCallback, XtRCallback, sizeof(XtPointer), |
27338
58f8eee82765
(xlwMenuResources): All XtNhighlightCallback.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
176 offset(menu.highlight), XtRCallback, (XtPointer)NULL}, |
5626 | 177 {XtNmenu, XtCMenu, XtRPointer, sizeof(XtPointer), |
178 offset(menu.contents), XtRImmediate, (XtPointer)NULL}, | |
179 {XtNcursor, XtCCursor, XtRCursor, sizeof(Cursor), | |
180 offset(menu.cursor_shape), XtRString, (XtPointer)"right_ptr"}, | |
181 {XtNhorizontal, XtCHorizontal, XtRInt, sizeof(int), | |
182 offset(menu.horizontal), XtRImmediate, (XtPointer)True}, | |
183 }; | |
184 #undef offset | |
185 | |
186 static Boolean XlwMenuSetValues(); | |
187 static void XlwMenuRealize(); | |
188 static void XlwMenuRedisplay(); | |
189 static void XlwMenuResize(); | |
190 static void XlwMenuInitialize(); | |
191 static void XlwMenuRedisplay(); | |
192 static void XlwMenuDestroy(); | |
193 static void XlwMenuClassInitialize(); | |
194 static void Start(); | |
195 static void Drag(); | |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
196 static void Down(); |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
197 static void Up(); |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
198 static void Left(); |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
199 static void Right(); |
5626 | 200 static void Select(); |
13899
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
201 static void Key(); |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
202 static void Nothing(); |
48479 | 203 static int separator_height __P ((enum menu_separator)); |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
204 static void pop_up_menu __P ((XlwMenuWidget, XButtonPressedEvent *)); |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
205 |
5626 | 206 |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
207 static XtActionsRec |
5626 | 208 xlwMenuActionsList [] = |
209 { | |
210 {"start", Start}, | |
211 {"drag", Drag}, | |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
212 {"down", Down}, |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
213 {"up", Up}, |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
214 {"left", Left}, |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
215 {"right", Right}, |
5626 | 216 {"select", Select}, |
13899
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
217 {"key", Key}, |
59100
768cf68dcd0a
* xlwmenu.c (xlwMenuActionsList): Install MenuGadgetEscape as an
Jan Djärv <jan.h.d@swipnet.se>
parents:
57842
diff
changeset
|
218 {"MenuGadgetEscape", Key}, /* Compatibility with Lesstif/Motif. */ |
13899
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
219 {"nothing", Nothing}, |
5626 | 220 }; |
221 | |
222 #define SuperClass ((CoreWidgetClass)&coreClassRec) | |
223 | |
224 XlwMenuClassRec xlwMenuClassRec = | |
225 { | |
226 { /* CoreClass fields initialization */ | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
227 (WidgetClass) SuperClass, /* superclass */ |
5626 | 228 "XlwMenu", /* class_name */ |
229 sizeof(XlwMenuRec), /* size */ | |
230 XlwMenuClassInitialize, /* class_initialize */ | |
231 NULL, /* class_part_initialize */ | |
232 FALSE, /* class_inited */ | |
233 XlwMenuInitialize, /* initialize */ | |
234 NULL, /* initialize_hook */ | |
235 XlwMenuRealize, /* realize */ | |
236 xlwMenuActionsList, /* actions */ | |
237 XtNumber(xlwMenuActionsList), /* num_actions */ | |
238 xlwMenuResources, /* resources */ | |
239 XtNumber(xlwMenuResources), /* resource_count */ | |
240 NULLQUARK, /* xrm_class */ | |
241 TRUE, /* compress_motion */ | |
60698
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
242 XtExposeCompressMaximal, /* compress_exposure */ |
5626 | 243 TRUE, /* compress_enterleave */ |
244 FALSE, /* visible_interest */ | |
245 XlwMenuDestroy, /* destroy */ | |
246 XlwMenuResize, /* resize */ | |
247 XlwMenuRedisplay, /* expose */ | |
248 XlwMenuSetValues, /* set_values */ | |
249 NULL, /* set_values_hook */ | |
250 XtInheritSetValuesAlmost, /* set_values_almost */ | |
251 NULL, /* get_values_hook */ | |
252 NULL, /* accept_focus */ | |
253 XtVersion, /* version */ | |
254 NULL, /* callback_private */ | |
255 xlwMenuTranslations, /* tm_table */ | |
256 XtInheritQueryGeometry, /* query_geometry */ | |
257 XtInheritDisplayAccelerator, /* display_accelerator */ | |
258 NULL /* extension */ | |
259 }, /* XlwMenuClass fields initialization */ | |
260 { | |
261 0 /* dummy */ | |
262 }, | |
263 }; | |
264 | |
265 WidgetClass xlwMenuWidgetClass = (WidgetClass) &xlwMenuClassRec; | |
266 | |
8860 | 267 int submenu_destroyed; |
268 | |
44931
18616c930588
Do not grab keyboard if installation-directory is
Jan Djärv <jan.h.d@swipnet.se>
parents:
44750
diff
changeset
|
269 /* For debug, if installation-directory is non-nil this is not an installed |
18616c930588
Do not grab keyboard if installation-directory is
Jan Djärv <jan.h.d@swipnet.se>
parents:
44750
diff
changeset
|
270 Emacs. In that case we do not grab the keyboard to make it easier to |
18616c930588
Do not grab keyboard if installation-directory is
Jan Djärv <jan.h.d@swipnet.se>
parents:
44750
diff
changeset
|
271 debug. */ |
18616c930588
Do not grab keyboard if installation-directory is
Jan Djärv <jan.h.d@swipnet.se>
parents:
44750
diff
changeset
|
272 #define GRAB_KEYBOARD (EQ (Vinstallation_directory, Qnil)) |
44750
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
273 |
8860 | 274 static int next_release_must_exit; |
275 | |
5626 | 276 /* Utilities */ |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
277 |
44750
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
278 /* Ungrab pointer and keyboard */ |
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
279 static void |
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
280 ungrab_all (w, ungrabtime) |
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
281 Widget w; |
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
282 Time ungrabtime; |
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
283 { |
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
284 XtUngrabPointer (w, ungrabtime); |
44931
18616c930588
Do not grab keyboard if installation-directory is
Jan Djärv <jan.h.d@swipnet.se>
parents:
44750
diff
changeset
|
285 if (GRAB_KEYBOARD) XtUngrabKeyboard (w, ungrabtime); |
44750
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
286 } |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
287 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
288 /* Like abort, but remove grabs from widget W before. */ |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
289 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
290 static void |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
291 abort_gracefully (w) |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
292 Widget w; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
293 { |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
294 if (XtIsShell (XtParent (w))) |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
295 XtRemoveGrab (w); |
44750
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
296 ungrab_all (w, CurrentTime); |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
297 abort (); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
298 } |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
299 |
5626 | 300 static void |
8860 | 301 push_new_stack (mw, val) |
302 XlwMenuWidget mw; | |
303 widget_value* val; | |
5626 | 304 { |
305 if (!mw->menu.new_stack) | |
306 { | |
307 mw->menu.new_stack_length = 10; | |
308 mw->menu.new_stack = | |
309 (widget_value**)XtCalloc (mw->menu.new_stack_length, | |
310 sizeof (widget_value*)); | |
311 } | |
312 else if (mw->menu.new_depth == mw->menu.new_stack_length) | |
313 { | |
314 mw->menu.new_stack_length *= 2; | |
315 mw->menu.new_stack = | |
316 (widget_value**)XtRealloc ((char*)mw->menu.new_stack, | |
317 mw->menu.new_stack_length * sizeof (widget_value*)); | |
318 } | |
319 mw->menu.new_stack [mw->menu.new_depth++] = val; | |
320 } | |
321 | |
322 static void | |
8860 | 323 pop_new_stack_if_no_contents (mw) |
324 XlwMenuWidget mw; | |
5626 | 325 { |
48929
d81c005163cb
(pop_new_stack_if_no_contents): Do nothing if new_depth is 1.
Richard M. Stallman <rms@gnu.org>
parents:
48479
diff
changeset
|
326 if (mw->menu.new_depth > 1) |
5626 | 327 { |
328 if (!mw->menu.new_stack [mw->menu.new_depth - 1]->contents) | |
329 mw->menu.new_depth -= 1; | |
330 } | |
331 } | |
332 | |
333 static void | |
8860 | 334 make_old_stack_space (mw, n) |
335 XlwMenuWidget mw; | |
336 int n; | |
5626 | 337 { |
338 if (!mw->menu.old_stack) | |
339 { | |
340 mw->menu.old_stack_length = 10; | |
341 mw->menu.old_stack = | |
342 (widget_value**)XtCalloc (mw->menu.old_stack_length, | |
343 sizeof (widget_value*)); | |
344 } | |
345 else if (mw->menu.old_stack_length < n) | |
346 { | |
347 mw->menu.old_stack_length *= 2; | |
348 mw->menu.old_stack = | |
349 (widget_value**)XtRealloc ((char*)mw->menu.old_stack, | |
350 mw->menu.old_stack_length * sizeof (widget_value*)); | |
351 } | |
352 } | |
353 | |
354 /* Size code */ | |
8860 | 355 int |
356 string_width (mw, s) | |
357 XlwMenuWidget mw; | |
358 char *s; | |
5626 | 359 { |
61209
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
360 XCharStruct xcs; |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
361 int drop; |
60698
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
362 #ifdef HAVE_X_I18N |
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
363 XRectangle ink, logical; |
61209
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
364 if (mw->menu.fontSet) |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
365 { |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
366 XmbTextExtents (mw->menu.fontSet, s, strlen (s), &ink, &logical); |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
367 return logical.width; |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
368 } |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
369 #endif |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
370 |
5626 | 371 XTextExtents (mw->menu.font, s, strlen (s), &drop, &drop, &drop, &xcs); |
372 return xcs.width; | |
61209
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
373 |
5626 | 374 } |
375 | |
60698
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
376 #ifdef HAVE_X_I18N |
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
377 #define MENU_FONT_HEIGHT(mw) \ |
61209
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
378 ((mw)->menu.fontSet != NULL \ |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
379 ? (mw)->menu.font_extents->max_logical_extent.height \ |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
380 : (mw)->menu.font->ascent + (mw)->menu.font->descent) |
60700
2610d09357c8
(MENU_FONT_ASCENT) [HAVE_X_I18N]: Try to be more correct.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
60698
diff
changeset
|
381 #define MENU_FONT_ASCENT(mw) \ |
61209
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
382 ((mw)->menu.fontSet != NULL \ |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
383 ? - (mw)->menu.font_extents->max_logical_extent.y \ |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
384 : (mw)->menu.font->ascent) |
60698
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
385 #else |
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
386 #define MENU_FONT_HEIGHT(mw) \ |
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
387 ((mw)->menu.font->ascent + (mw)->menu.font->descent) |
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
388 #define MENU_FONT_ASCENT(mw) ((mw)->menu.font->ascent) |
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
389 #endif |
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
390 |
5626 | 391 static int |
8860 | 392 arrow_width (mw) |
393 XlwMenuWidget mw; | |
5626 | 394 { |
60698
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
395 return (MENU_FONT_ASCENT (mw) * 3/4) | 1; |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
396 } |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
397 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
398 /* Return the width of toggle buttons of widget MW. */ |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
399 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
400 static int |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
401 toggle_button_width (mw) |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
402 XlwMenuWidget mw; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
403 { |
60698
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
404 return (MENU_FONT_HEIGHT (mw) * 2 / 3) | 1; |
5626 | 405 } |
406 | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
407 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
408 /* Return the width of radio buttons of widget MW. */ |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
409 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
410 static int |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
411 radio_button_width (mw) |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
412 XlwMenuWidget mw; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
413 { |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
414 return toggle_button_width (mw) * 1.41; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
415 } |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
416 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
417 |
5626 | 418 static XtResource |
419 nameResource[] = | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
420 { |
5626 | 421 {"labelString", "LabelString", XtRString, sizeof(String), |
422 0, XtRImmediate, 0}, | |
423 }; | |
424 | |
425 static char* | |
8860 | 426 resource_widget_value (mw, val) |
427 XlwMenuWidget mw; | |
428 widget_value *val; | |
5626 | 429 { |
430 if (!val->toolkit_data) | |
431 { | |
432 char* resourced_name = NULL; | |
433 char* complete_name; | |
434 XtGetSubresources ((Widget) mw, | |
435 (XtPointer) &resourced_name, | |
436 val->name, val->name, | |
437 nameResource, 1, NULL, 0); | |
438 if (!resourced_name) | |
439 resourced_name = val->name; | |
440 if (!val->value) | |
5654
f84dac6453db
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
441 { |
f84dac6453db
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
442 complete_name = (char *) XtMalloc (strlen (resourced_name) + 1); |
f84dac6453db
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
443 strcpy (complete_name, resourced_name); |
f84dac6453db
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
5626
diff
changeset
|
444 } |
5626 | 445 else |
446 { | |
447 int complete_length = | |
448 strlen (resourced_name) + strlen (val->value) + 2; | |
449 complete_name = XtMalloc (complete_length); | |
450 *complete_name = 0; | |
451 strcat (complete_name, resourced_name); | |
452 strcat (complete_name, " "); | |
453 strcat (complete_name, val->value); | |
454 } | |
455 | |
456 val->toolkit_data = complete_name; | |
457 val->free_toolkit_data = True; | |
458 } | |
459 return (char*)val->toolkit_data; | |
460 } | |
461 | |
462 /* Returns the sizes of an item */ | |
463 static void | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
464 size_menu_item (mw, val, horizontal_p, label_width, rest_width, button_width, |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
465 height) |
8860 | 466 XlwMenuWidget mw; |
467 widget_value* val; | |
468 int horizontal_p; | |
469 int* label_width; | |
470 int* rest_width; | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
471 int* button_width; |
8860 | 472 int* height; |
5626 | 473 { |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
474 enum menu_separator separator; |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
475 |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
476 if (lw_separator_p (val->name, &separator, 0)) |
5626 | 477 { |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
478 *height = separator_height (separator); |
5626 | 479 *label_width = 1; |
480 *rest_width = 0; | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
481 *button_width = 0; |
5626 | 482 } |
483 else | |
484 { | |
60698
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
485 *height = MENU_FONT_HEIGHT (mw) |
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
486 + 2 * mw->menu.vertical_spacing + 2 * mw->menu.shadow_thickness; |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
487 |
5626 | 488 *label_width = |
489 string_width (mw, resource_widget_value (mw, val)) | |
490 + mw->menu.horizontal_spacing + mw->menu.shadow_thickness; | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
491 |
5626 | 492 *rest_width = mw->menu.horizontal_spacing + mw->menu.shadow_thickness; |
493 if (!horizontal_p) | |
494 { | |
495 if (val->contents) | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
496 /* Add width of the arrow displayed for submenus. */ |
5626 | 497 *rest_width += arrow_width (mw) + mw->menu.arrow_spacing; |
498 else if (val->key) | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
499 /* Add width of key equivalent string. */ |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
500 *rest_width += (string_width (mw, val->key) |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
501 + mw->menu.arrow_spacing); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
502 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
503 if (val->button_type == BUTTON_TYPE_TOGGLE) |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
504 *button_width = (toggle_button_width (mw) |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
505 + mw->menu.horizontal_spacing); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
506 else if (val->button_type == BUTTON_TYPE_RADIO) |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
507 *button_width = (radio_button_width (mw) |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
508 + mw->menu.horizontal_spacing); |
5626 | 509 } |
510 } | |
511 } | |
512 | |
513 static void | |
8860 | 514 size_menu (mw, level) |
515 XlwMenuWidget mw; | |
516 int level; | |
5626 | 517 { |
11461
65c12e57f119
(size_menu): Make height and label_width unsigned.
Richard M. Stallman <rms@gnu.org>
parents:
9746
diff
changeset
|
518 unsigned int label_width = 0; |
5626 | 519 int rest_width = 0; |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
520 int button_width = 0; |
5626 | 521 int max_rest_width = 0; |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
522 int max_button_width = 0; |
11461
65c12e57f119
(size_menu): Make height and label_width unsigned.
Richard M. Stallman <rms@gnu.org>
parents:
9746
diff
changeset
|
523 unsigned int height = 0; |
5626 | 524 int horizontal_p = mw->menu.horizontal && (level == 0); |
525 widget_value* val; | |
526 window_state* ws; | |
527 | |
528 if (level >= mw->menu.old_depth) | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
529 abort_gracefully ((Widget) mw); |
5626 | 530 |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
531 ws = &mw->menu.windows [level]; |
5626 | 532 ws->width = 0; |
533 ws->height = 0; | |
534 ws->label_width = 0; | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
535 ws->button_width = 0; |
5626 | 536 |
537 for (val = mw->menu.old_stack [level]->contents; val; val = val->next) | |
538 { | |
539 size_menu_item (mw, val, horizontal_p, &label_width, &rest_width, | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
540 &button_width, &height); |
5626 | 541 if (horizontal_p) |
542 { | |
543 ws->width += label_width + rest_width; | |
544 if (height > ws->height) | |
545 ws->height = height; | |
546 } | |
547 else | |
548 { | |
549 if (label_width > ws->label_width) | |
550 ws->label_width = label_width; | |
551 if (rest_width > max_rest_width) | |
552 max_rest_width = rest_width; | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
553 if (button_width > max_button_width) |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
554 max_button_width = button_width; |
5626 | 555 ws->height += height; |
556 } | |
557 } | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
558 |
5626 | 559 if (horizontal_p) |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
560 ws->label_width = ws->button_width = 0; |
5626 | 561 else |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
562 { |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
563 ws->width = ws->label_width + max_rest_width + max_button_width; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
564 ws->button_width = max_button_width; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
565 } |
5626 | 566 |
567 ws->width += 2 * mw->menu.shadow_thickness; | |
568 ws->height += 2 * mw->menu.shadow_thickness; | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
569 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
570 if (horizontal_p) |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
571 { |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
572 ws->width += 2 * mw->menu.margin; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
573 ws->height += 2 * mw->menu.margin; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
574 } |
5626 | 575 } |
576 | |
577 | |
578 /* Display code */ | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
579 |
5626 | 580 static void |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
581 draw_arrow (mw, window, gc, x, y, width, down_p) |
8860 | 582 XlwMenuWidget mw; |
583 Window window; | |
584 GC gc; | |
585 int x; | |
586 int y; | |
587 int width; | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
588 int down_p; |
5626 | 589 { |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
590 Display *dpy = XtDisplay (mw); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
591 GC top_gc = mw->menu.shadow_top_gc; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
592 GC bottom_gc = mw->menu.shadow_bottom_gc; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
593 int thickness = mw->menu.shadow_thickness; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
594 int height = width; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
595 XPoint pt[10]; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
596 /* alpha = atan (0.5) |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
597 factor = (1 + sin (alpha)) / cos (alpha) */ |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
598 double factor = 1.62; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
599 int thickness2 = thickness * factor; |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
600 |
60698
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
601 y += (MENU_FONT_HEIGHT (mw) - height) / 2; |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
602 |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
603 if (down_p) |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
604 { |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
605 GC temp; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
606 temp = top_gc; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
607 top_gc = bottom_gc; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
608 bottom_gc = temp; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
609 } |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
610 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
611 pt[0].x = x; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
612 pt[0].y = y + height; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
613 pt[1].x = x + thickness; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
614 pt[1].y = y + height - thickness2; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
615 pt[2].x = x + thickness2; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
616 pt[2].y = y + thickness2; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
617 pt[3].x = x; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
618 pt[3].y = y; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
619 XFillPolygon (dpy, window, top_gc, pt, 4, Convex, CoordModeOrigin); |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
620 |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
621 pt[0].x = x; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
622 pt[0].y = y; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
623 pt[1].x = x + thickness; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
624 pt[1].y = y + thickness2; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
625 pt[2].x = x + width - thickness2; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
626 pt[2].y = y + height / 2; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
627 pt[3].x = x + width; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
628 pt[3].y = y + height / 2; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
629 XFillPolygon (dpy, window, top_gc, pt, 4, Convex, CoordModeOrigin); |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
630 |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
631 pt[0].x = x; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
632 pt[0].y = y + height; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
633 pt[1].x = x + thickness; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
634 pt[1].y = y + height - thickness2; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
635 pt[2].x = x + width - thickness2; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
636 pt[2].y = y + height / 2; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
637 pt[3].x = x + width; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
638 pt[3].y = y + height / 2; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
639 XFillPolygon (dpy, window, bottom_gc, pt, 4, Convex, CoordModeOrigin); |
5626 | 640 } |
641 | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
642 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
643 |
5626 | 644 static void |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
645 draw_shadow_rectangle (mw, window, x, y, width, height, erase_p, down_p) |
8860 | 646 XlwMenuWidget mw; |
647 Window window; | |
648 int x; | |
649 int y; | |
650 int width; | |
651 int height; | |
652 int erase_p; | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
653 int down_p; |
5626 | 654 { |
655 Display *dpy = XtDisplay (mw); | |
656 GC top_gc = !erase_p ? mw->menu.shadow_top_gc : mw->menu.background_gc; | |
657 GC bottom_gc = !erase_p ? mw->menu.shadow_bottom_gc : mw->menu.background_gc; | |
658 int thickness = mw->menu.shadow_thickness; | |
659 XPoint points [4]; | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
660 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
661 if (!erase_p && down_p) |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
662 { |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
663 GC temp; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
664 temp = top_gc; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
665 top_gc = bottom_gc; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
666 bottom_gc = temp; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
667 } |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
668 |
5626 | 669 points [0].x = x; |
670 points [0].y = y; | |
671 points [1].x = x + width; | |
672 points [1].y = y; | |
673 points [2].x = x + width - thickness; | |
674 points [2].y = y + thickness; | |
675 points [3].x = x; | |
676 points [3].y = y + thickness; | |
677 XFillPolygon (dpy, window, top_gc, points, 4, Convex, CoordModeOrigin); | |
678 points [0].x = x; | |
679 points [0].y = y + thickness; | |
680 points [1].x = x; | |
681 points [1].y = y + height; | |
682 points [2].x = x + thickness; | |
683 points [2].y = y + height - thickness; | |
684 points [3].x = x + thickness; | |
685 points [3].y = y + thickness; | |
686 XFillPolygon (dpy, window, top_gc, points, 4, Convex, CoordModeOrigin); | |
687 points [0].x = x + width; | |
688 points [0].y = y; | |
689 points [1].x = x + width - thickness; | |
690 points [1].y = y + thickness; | |
691 points [2].x = x + width - thickness; | |
692 points [2].y = y + height - thickness; | |
693 points [3].x = x + width; | |
694 points [3].y = y + height - thickness; | |
695 XFillPolygon (dpy, window, bottom_gc, points, 4, Convex, CoordModeOrigin); | |
696 points [0].x = x; | |
697 points [0].y = y + height; | |
698 points [1].x = x + width; | |
699 points [1].y = y + height; | |
700 points [2].x = x + width; | |
701 points [2].y = y + height - thickness; | |
702 points [3].x = x + thickness; | |
703 points [3].y = y + height - thickness; | |
704 XFillPolygon (dpy, window, bottom_gc, points, 4, Convex, CoordModeOrigin); | |
705 } | |
706 | |
707 | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
708 static void |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
709 draw_shadow_rhombus (mw, window, x, y, width, height, erase_p, down_p) |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
710 XlwMenuWidget mw; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
711 Window window; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
712 int x; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
713 int y; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
714 int width; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
715 int height; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
716 int erase_p; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
717 int down_p; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
718 { |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
719 Display *dpy = XtDisplay (mw); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
720 GC top_gc = !erase_p ? mw->menu.shadow_top_gc : mw->menu.background_gc; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
721 GC bottom_gc = !erase_p ? mw->menu.shadow_bottom_gc : mw->menu.background_gc; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
722 int thickness = mw->menu.shadow_thickness; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
723 XPoint points [4]; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
724 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
725 if (!erase_p && down_p) |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
726 { |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
727 GC temp; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
728 temp = top_gc; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
729 top_gc = bottom_gc; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
730 bottom_gc = temp; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
731 } |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
732 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
733 points [0].x = x; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
734 points [0].y = y + height / 2; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
735 points [1].x = x + thickness; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
736 points [1].y = y + height / 2; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
737 points [2].x = x + width / 2; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
738 points [2].y = y + thickness; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
739 points [3].x = x + width / 2; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
740 points [3].y = y; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
741 XFillPolygon (dpy, window, top_gc, points, 4, Convex, CoordModeOrigin); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
742 points [0].x = x + width / 2; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
743 points [0].y = y; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
744 points [1].x = x + width / 2; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
745 points [1].y = y + thickness; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
746 points [2].x = x + width - thickness; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
747 points [2].y = y + height / 2; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
748 points [3].x = x + width; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
749 points [3].y = y + height / 2; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
750 XFillPolygon (dpy, window, top_gc, points, 4, Convex, CoordModeOrigin); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
751 points [0].x = x; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
752 points [0].y = y + height / 2; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
753 points [1].x = x + thickness; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
754 points [1].y = y + height / 2; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
755 points [2].x = x + width / 2; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
756 points [2].y = y + height - thickness; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
757 points [3].x = x + width / 2; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
758 points [3].y = y + height; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
759 XFillPolygon (dpy, window, bottom_gc, points, 4, Convex, CoordModeOrigin); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
760 points [0].x = x + width / 2; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
761 points [0].y = y + height; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
762 points [1].x = x + width / 2; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
763 points [1].y = y + height - thickness; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
764 points [2].x = x + width - thickness; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
765 points [2].y = y + height / 2; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
766 points [3].x = x + width; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
767 points [3].y = y + height / 2; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
768 XFillPolygon (dpy, window, bottom_gc, points, 4, Convex, CoordModeOrigin); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
769 } |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
770 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
771 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
772 /* Draw a toggle button on widget MW, X window WINDOW. X/Y is the |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
773 top-left corner of the menu item. SELECTED_P non-zero means the |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
774 toggle button is selected. */ |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
775 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
776 static void |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
777 draw_toggle (mw, window, x, y, selected_p) |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
778 XlwMenuWidget mw; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
779 Window window; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
780 int x, y, selected_p; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
781 { |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
782 int width, height; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
783 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
784 width = toggle_button_width (mw); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
785 height = width; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
786 x += mw->menu.horizontal_spacing; |
60698
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
787 y += (MENU_FONT_ASCENT (mw) - height) / 2; |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
788 draw_shadow_rectangle (mw, window, x, y, width, height, False, selected_p); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
789 } |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
790 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
791 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
792 /* Draw a radio button on widget MW, X window WINDOW. X/Y is the |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
793 top-left corner of the menu item. SELECTED_P non-zero means the |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
794 toggle button is selected. */ |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
795 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
796 static void |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
797 draw_radio (mw, window, x, y, selected_p) |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
798 XlwMenuWidget mw; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
799 Window window; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
800 int x, y, selected_p; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
801 { |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
802 int width, height; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
803 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
804 width = radio_button_width (mw); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
805 height = width; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
806 x += mw->menu.horizontal_spacing; |
60698
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
807 y += (MENU_FONT_ASCENT (mw) - height) / 2; |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
808 draw_shadow_rhombus (mw, window, x, y, width, height, False, selected_p); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
809 } |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
810 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
811 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
812 /* Draw a menu separator on widget MW, X window WINDOW. X/Y is the |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
813 top-left corner of the menu item. WIDTH is the width of the |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
814 separator to draw. TYPE is the separator type. */ |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
815 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
816 static void |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
817 draw_separator (mw, window, x, y, width, type) |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
818 XlwMenuWidget mw; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
819 Window window; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
820 int x, y, width; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
821 enum menu_separator type; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
822 { |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
823 Display *dpy = XtDisplay (mw); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
824 XGCValues xgcv; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
825 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
826 switch (type) |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
827 { |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
828 case SEPARATOR_NO_LINE: |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
829 break; |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
830 |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
831 case SEPARATOR_SINGLE_LINE: |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
832 XDrawLine (dpy, window, mw->menu.foreground_gc, |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
833 x, y, x + width, y); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
834 break; |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
835 |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
836 case SEPARATOR_DOUBLE_LINE: |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
837 draw_separator (mw, window, x, y, width, SEPARATOR_SINGLE_LINE); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
838 draw_separator (mw, window, x, y + 2, width, SEPARATOR_SINGLE_LINE); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
839 break; |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
840 |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
841 case SEPARATOR_SINGLE_DASHED_LINE: |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
842 xgcv.line_style = LineOnOffDash; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
843 XChangeGC (dpy, mw->menu.foreground_gc, GCLineStyle, &xgcv); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
844 XDrawLine (dpy, window, mw->menu.foreground_gc, |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
845 x, y, x + width, y); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
846 xgcv.line_style = LineSolid; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
847 XChangeGC (dpy, mw->menu.foreground_gc, GCLineStyle, &xgcv); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
848 break; |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
849 |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
850 case SEPARATOR_DOUBLE_DASHED_LINE: |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
851 draw_separator (mw, window, x, y, width, |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
852 SEPARATOR_SINGLE_DASHED_LINE); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
853 draw_separator (mw, window, x, y + 2, width, |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
854 SEPARATOR_SINGLE_DASHED_LINE); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
855 break; |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
856 |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
857 case SEPARATOR_SHADOW_ETCHED_IN: |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
858 XDrawLine (dpy, window, mw->menu.shadow_bottom_gc, |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
859 x, y, x + width, y); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
860 XDrawLine (dpy, window, mw->menu.shadow_top_gc, |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
861 x, y + 1, x + width, y + 1); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
862 break; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
863 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
864 case SEPARATOR_SHADOW_ETCHED_OUT: |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
865 XDrawLine (dpy, window, mw->menu.shadow_top_gc, |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
866 x, y, x + width, y); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
867 XDrawLine (dpy, window, mw->menu.shadow_bottom_gc, |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
868 x, y + 1, x + width, y + 1); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
869 break; |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
870 |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
871 case SEPARATOR_SHADOW_ETCHED_IN_DASH: |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
872 xgcv.line_style = LineOnOffDash; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
873 XChangeGC (dpy, mw->menu.shadow_bottom_gc, GCLineStyle, &xgcv); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
874 XChangeGC (dpy, mw->menu.shadow_top_gc, GCLineStyle, &xgcv); |
34436
a27cc46a67b4
(draw_separator) <SEPARATOR_SHADOW_ETCHED_IN_DASH>:
Dave Love <fx@gnu.org>
parents:
33714
diff
changeset
|
875 draw_separator (mw, window, x, y, width, SEPARATOR_SHADOW_ETCHED_IN); |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
876 xgcv.line_style = LineSolid; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
877 XChangeGC (dpy, mw->menu.shadow_bottom_gc, GCLineStyle, &xgcv); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
878 XChangeGC (dpy, mw->menu.shadow_top_gc, GCLineStyle, &xgcv); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
879 break; |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
880 |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
881 case SEPARATOR_SHADOW_ETCHED_OUT_DASH: |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
882 xgcv.line_style = LineOnOffDash; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
883 XChangeGC (dpy, mw->menu.shadow_bottom_gc, GCLineStyle, &xgcv); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
884 XChangeGC (dpy, mw->menu.shadow_top_gc, GCLineStyle, &xgcv); |
34436
a27cc46a67b4
(draw_separator) <SEPARATOR_SHADOW_ETCHED_IN_DASH>:
Dave Love <fx@gnu.org>
parents:
33714
diff
changeset
|
885 draw_separator (mw, window, x, y, width, SEPARATOR_SHADOW_ETCHED_OUT); |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
886 xgcv.line_style = LineSolid; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
887 XChangeGC (dpy, mw->menu.shadow_bottom_gc, GCLineStyle, &xgcv); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
888 XChangeGC (dpy, mw->menu.shadow_top_gc, GCLineStyle, &xgcv); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
889 break; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
890 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
891 case SEPARATOR_SHADOW_DOUBLE_ETCHED_IN: |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
892 draw_separator (mw, window, x, y, width, SEPARATOR_SHADOW_ETCHED_IN); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
893 draw_separator (mw, window, x, y + 3, width, SEPARATOR_SHADOW_ETCHED_IN); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
894 break; |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
895 |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
896 case SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT: |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
897 draw_separator (mw, window, x, y, width, |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
898 SEPARATOR_SHADOW_ETCHED_OUT); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
899 draw_separator (mw, window, x, y + 3, width, |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
900 SEPARATOR_SHADOW_ETCHED_OUT); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
901 break; |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
902 |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
903 case SEPARATOR_SHADOW_DOUBLE_ETCHED_IN_DASH: |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
904 xgcv.line_style = LineOnOffDash; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
905 XChangeGC (dpy, mw->menu.shadow_bottom_gc, GCLineStyle, &xgcv); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
906 XChangeGC (dpy, mw->menu.shadow_top_gc, GCLineStyle, &xgcv); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
907 draw_separator (mw, window, x, y, width, |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
908 SEPARATOR_SHADOW_DOUBLE_ETCHED_IN); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
909 xgcv.line_style = LineSolid; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
910 XChangeGC (dpy, mw->menu.shadow_bottom_gc, GCLineStyle, &xgcv); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
911 XChangeGC (dpy, mw->menu.shadow_top_gc, GCLineStyle, &xgcv); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
912 break; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
913 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
914 case SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT_DASH: |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
915 xgcv.line_style = LineOnOffDash; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
916 XChangeGC (dpy, mw->menu.shadow_bottom_gc, GCLineStyle, &xgcv); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
917 XChangeGC (dpy, mw->menu.shadow_top_gc, GCLineStyle, &xgcv); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
918 draw_separator (mw, window, x, y, width, |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
919 SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
920 xgcv.line_style = LineSolid; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
921 XChangeGC (dpy, mw->menu.shadow_bottom_gc, GCLineStyle, &xgcv); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
922 XChangeGC (dpy, mw->menu.shadow_top_gc, GCLineStyle, &xgcv); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
923 break; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
924 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
925 default: |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
926 abort (); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
927 } |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
928 } |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
929 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
930 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
931 /* Return the pixel height of menu separator SEPARATOR. */ |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
932 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
933 static int |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
934 separator_height (separator) |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
935 enum menu_separator separator; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
936 { |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
937 switch (separator) |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
938 { |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
939 case SEPARATOR_NO_LINE: |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
940 return 2; |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
941 |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
942 case SEPARATOR_SINGLE_LINE: |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
943 case SEPARATOR_SINGLE_DASHED_LINE: |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
944 return 1; |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
945 |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
946 case SEPARATOR_DOUBLE_LINE: |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
947 case SEPARATOR_DOUBLE_DASHED_LINE: |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
948 return 3; |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
949 |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
950 case SEPARATOR_SHADOW_ETCHED_IN: |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
951 case SEPARATOR_SHADOW_ETCHED_OUT: |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
952 case SEPARATOR_SHADOW_ETCHED_IN_DASH: |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
953 case SEPARATOR_SHADOW_ETCHED_OUT_DASH: |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
954 return 2; |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
955 |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
956 case SEPARATOR_SHADOW_DOUBLE_ETCHED_IN: |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
957 case SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT: |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
958 case SEPARATOR_SHADOW_DOUBLE_ETCHED_IN_DASH: |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
959 case SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT_DASH: |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
960 return 5; |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
961 |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
962 default: |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
963 abort (); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
964 } |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
965 } |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
966 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
967 |
5626 | 968 /* Display the menu item and increment where.x and where.y to show how large |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
969 the menu item was. */ |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
970 |
5626 | 971 static void |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
972 display_menu_item (mw, val, ws, where, highlighted_p, horizontal_p, |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
973 just_compute_p) |
8860 | 974 XlwMenuWidget mw; |
975 widget_value* val; | |
976 window_state* ws; | |
977 XPoint* where; | |
978 Boolean highlighted_p; | |
979 Boolean horizontal_p; | |
980 Boolean just_compute_p; | |
5626 | 981 { |
982 GC deco_gc; | |
983 GC text_gc; | |
60698
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
984 int font_height = MENU_FONT_HEIGHT (mw); |
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
985 int font_ascent = MENU_FONT_ASCENT (mw); |
5626 | 986 int shadow = mw->menu.shadow_thickness; |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
987 int margin = mw->menu.margin; |
5626 | 988 int h_spacing = mw->menu.horizontal_spacing; |
989 int v_spacing = mw->menu.vertical_spacing; | |
990 int label_width; | |
991 int rest_width; | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
992 int button_width; |
5626 | 993 int height; |
994 int width; | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
995 enum menu_separator separator; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
996 int separator_p = lw_separator_p (val->name, &separator, 0); |
5626 | 997 |
998 /* compute the sizes of the item */ | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
999 size_menu_item (mw, val, horizontal_p, &label_width, &rest_width, |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1000 &button_width, &height); |
5626 | 1001 |
1002 if (horizontal_p) | |
1003 width = label_width + rest_width; | |
1004 else | |
1005 { | |
1006 label_width = ws->label_width; | |
1007 width = ws->width - 2 * shadow; | |
1008 } | |
1009 | |
1010 /* Only highlight an enabled item that has a callback. */ | |
1011 if (highlighted_p) | |
1012 if (!val->enabled || !(val->call_data || val->contents)) | |
1013 highlighted_p = 0; | |
1014 | |
1015 /* do the drawing. */ | |
1016 if (!just_compute_p) | |
1017 { | |
1018 /* Add the shadow border of the containing menu */ | |
1019 int x = where->x + shadow; | |
1020 int y = where->y + shadow; | |
1021 | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1022 if (horizontal_p) |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1023 { |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1024 x += margin; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1025 y += margin; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1026 } |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1027 |
5626 | 1028 /* pick the foreground and background GC. */ |
1029 if (val->enabled) | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1030 text_gc = mw->menu.foreground_gc; |
5626 | 1031 else |
45147
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
1032 text_gc = mw->menu.disabled_gc; |
5626 | 1033 deco_gc = mw->menu.foreground_gc; |
1034 | |
1035 if (separator_p) | |
1036 { | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1037 draw_separator (mw, ws->window, x, y, width, separator); |
5626 | 1038 } |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1039 else |
5626 | 1040 { |
9227
968bb25ec1af
(display_menu_item): Add support for displaying the title in pop up menus.
Paul Reilly <pmr@pajato.com>
parents:
9092
diff
changeset
|
1041 int x_offset = x + h_spacing + shadow; |
5626 | 1042 char* display_string = resource_widget_value (mw, val); |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1043 draw_shadow_rectangle (mw, ws->window, x, y, width, height, True, |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1044 False); |
9227
968bb25ec1af
(display_menu_item): Add support for displaying the title in pop up menus.
Paul Reilly <pmr@pajato.com>
parents:
9092
diff
changeset
|
1045 |
968bb25ec1af
(display_menu_item): Add support for displaying the title in pop up menus.
Paul Reilly <pmr@pajato.com>
parents:
9092
diff
changeset
|
1046 /* Deal with centering a menu title. */ |
968bb25ec1af
(display_menu_item): Add support for displaying the title in pop up menus.
Paul Reilly <pmr@pajato.com>
parents:
9092
diff
changeset
|
1047 if (!horizontal_p && !val->contents && !val->call_data) |
968bb25ec1af
(display_menu_item): Add support for displaying the title in pop up menus.
Paul Reilly <pmr@pajato.com>
parents:
9092
diff
changeset
|
1048 { |
968bb25ec1af
(display_menu_item): Add support for displaying the title in pop up menus.
Paul Reilly <pmr@pajato.com>
parents:
9092
diff
changeset
|
1049 int l = string_width (mw, display_string); |
968bb25ec1af
(display_menu_item): Add support for displaying the title in pop up menus.
Paul Reilly <pmr@pajato.com>
parents:
9092
diff
changeset
|
1050 |
968bb25ec1af
(display_menu_item): Add support for displaying the title in pop up menus.
Paul Reilly <pmr@pajato.com>
parents:
9092
diff
changeset
|
1051 if (width > l) |
968bb25ec1af
(display_menu_item): Add support for displaying the title in pop up menus.
Paul Reilly <pmr@pajato.com>
parents:
9092
diff
changeset
|
1052 x_offset = (width - l) >> 1; |
968bb25ec1af
(display_menu_item): Add support for displaying the title in pop up menus.
Paul Reilly <pmr@pajato.com>
parents:
9092
diff
changeset
|
1053 } |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1054 else if (!horizontal_p && ws->button_width) |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1055 x_offset += ws->button_width; |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1056 |
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1057 |
60698
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
1058 #ifdef HAVE_X_I18N |
61209
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1059 if (mw->menu.fontSet) |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1060 XmbDrawString (XtDisplay (mw), ws->window, mw->menu.fontSet, |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1061 text_gc, x_offset, |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1062 y + v_spacing + shadow + font_ascent, |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1063 display_string, strlen (display_string)); |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1064 else |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1065 #endif |
60698
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
1066 XDrawString (XtDisplay (mw), ws->window, |
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
1067 text_gc, x_offset, |
5626 | 1068 y + v_spacing + shadow + font_ascent, |
1069 display_string, strlen (display_string)); | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1070 |
5626 | 1071 if (!horizontal_p) |
1072 { | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1073 if (val->button_type == BUTTON_TYPE_TOGGLE) |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1074 draw_toggle (mw, ws->window, x, y + v_spacing + shadow, |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1075 val->selected); |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1076 else if (val->button_type == BUTTON_TYPE_RADIO) |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1077 draw_radio (mw, ws->window, x, y + v_spacing + shadow, |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1078 val->selected); |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1079 |
5626 | 1080 if (val->contents) |
1081 { | |
1082 int a_w = arrow_width (mw); | |
1083 draw_arrow (mw, ws->window, deco_gc, | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1084 x + width - a_w |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1085 - mw->menu.horizontal_spacing |
8860 | 1086 - mw->menu.shadow_thickness, |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1087 y + v_spacing + shadow, a_w, |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1088 highlighted_p); |
5626 | 1089 } |
1090 else if (val->key) | |
1091 { | |
60698
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
1092 #ifdef HAVE_X_I18N |
61209
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1093 if (mw->menu.fontSet) |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1094 XmbDrawString (XtDisplay (mw), ws->window, |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1095 mw->menu.fontSet, |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1096 text_gc, |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1097 x + label_width + mw->menu.arrow_spacing, |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1098 y + v_spacing + shadow + font_ascent, |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1099 val->key, strlen (val->key)); |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1100 else |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1101 #endif |
60698
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
1102 XDrawString (XtDisplay (mw), ws->window, |
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
1103 text_gc, |
5626 | 1104 x + label_width + mw->menu.arrow_spacing, |
1105 y + v_spacing + shadow + font_ascent, | |
1106 val->key, strlen (val->key)); | |
1107 } | |
1108 } | |
8860 | 1109 else |
1110 { | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1111 XDrawRectangle (XtDisplay (mw), ws->window, |
8860 | 1112 mw->menu.background_gc, |
1113 x + shadow, y + shadow, | |
1114 label_width + h_spacing - 1, | |
60698
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
1115 font_height + 2 * v_spacing - 1); |
8860 | 1116 draw_shadow_rectangle (mw, ws->window, x, y, width, height, |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1117 True, False); |
8860 | 1118 } |
5626 | 1119 |
1120 if (highlighted_p) | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1121 draw_shadow_rectangle (mw, ws->window, x, y, width, height, False, |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1122 False); |
5626 | 1123 } |
1124 } | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1125 |
5626 | 1126 where->x += width; |
1127 where->y += height; | |
1128 } | |
1129 | |
1130 static void | |
8860 | 1131 display_menu (mw, level, just_compute_p, highlighted_pos, hit, hit_return, |
1132 this, that) | |
1133 XlwMenuWidget mw; | |
1134 int level; | |
1135 Boolean just_compute_p; | |
1136 XPoint* highlighted_pos; | |
1137 XPoint* hit; | |
1138 widget_value** hit_return; | |
1139 widget_value* this; | |
1140 widget_value* that; | |
5626 | 1141 { |
1142 widget_value* val; | |
1143 widget_value* following_item; | |
1144 window_state* ws; | |
1145 XPoint where; | |
1146 int horizontal_p = mw->menu.horizontal && (level == 0); | |
1147 int highlighted_p; | |
1148 int just_compute_this_one_p; | |
18993
c3bfd473a4d3
(display_menu): If an item is disabled,
Richard M. Stallman <rms@gnu.org>
parents:
17622
diff
changeset
|
1149 /* This is set nonzero if the element containing HIGHLIGHTED_POS |
c3bfd473a4d3
(display_menu): If an item is disabled,
Richard M. Stallman <rms@gnu.org>
parents:
17622
diff
changeset
|
1150 is disabled, so that we do not return any subsequent element either. */ |
c3bfd473a4d3
(display_menu): If an item is disabled,
Richard M. Stallman <rms@gnu.org>
parents:
17622
diff
changeset
|
1151 int no_return = 0; |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1152 enum menu_separator separator; |
5626 | 1153 |
1154 if (level >= mw->menu.old_depth) | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1155 abort_gracefully ((Widget) mw); |
5626 | 1156 |
1157 if (level < mw->menu.old_depth - 1) | |
1158 following_item = mw->menu.old_stack [level + 1]; | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1159 else |
5626 | 1160 following_item = NULL; |
1161 | |
1162 if (hit) | |
1163 *hit_return = NULL; | |
1164 | |
1165 where.x = 0; | |
1166 where.y = 0; | |
1167 | |
1168 ws = &mw->menu.windows [level]; | |
1169 for (val = mw->menu.old_stack [level]->contents; val; val = val->next) | |
1170 { | |
1171 highlighted_p = val == following_item; | |
1172 if (highlighted_p && highlighted_pos) | |
1173 { | |
1174 if (horizontal_p) | |
1175 highlighted_pos->x = where.x; | |
1176 else | |
1177 highlighted_pos->y = where.y; | |
1178 } | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1179 |
5626 | 1180 just_compute_this_one_p = |
1181 just_compute_p || ((this || that) && val != this && val != that); | |
1182 | |
1183 display_menu_item (mw, val, ws, &where, highlighted_p, horizontal_p, | |
1184 just_compute_this_one_p); | |
1185 | |
1186 if (highlighted_p && highlighted_pos) | |
1187 { | |
1188 if (horizontal_p) | |
1189 highlighted_pos->y = where.y; | |
1190 else | |
1191 highlighted_pos->x = where.x; | |
1192 } | |
1193 | |
1194 if (hit | |
1195 && !*hit_return | |
1196 && (horizontal_p ? hit->x < where.x : hit->y < where.y) | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1197 && !lw_separator_p (val->name, &separator, 0) |
18993
c3bfd473a4d3
(display_menu): If an item is disabled,
Richard M. Stallman <rms@gnu.org>
parents:
17622
diff
changeset
|
1198 && !no_return) |
c3bfd473a4d3
(display_menu): If an item is disabled,
Richard M. Stallman <rms@gnu.org>
parents:
17622
diff
changeset
|
1199 { |
c3bfd473a4d3
(display_menu): If an item is disabled,
Richard M. Stallman <rms@gnu.org>
parents:
17622
diff
changeset
|
1200 if (val->enabled) |
c3bfd473a4d3
(display_menu): If an item is disabled,
Richard M. Stallman <rms@gnu.org>
parents:
17622
diff
changeset
|
1201 *hit_return = val; |
c3bfd473a4d3
(display_menu): If an item is disabled,
Richard M. Stallman <rms@gnu.org>
parents:
17622
diff
changeset
|
1202 else |
c3bfd473a4d3
(display_menu): If an item is disabled,
Richard M. Stallman <rms@gnu.org>
parents:
17622
diff
changeset
|
1203 no_return = 1; |
c3bfd473a4d3
(display_menu): If an item is disabled,
Richard M. Stallman <rms@gnu.org>
parents:
17622
diff
changeset
|
1204 } |
5626 | 1205 |
1206 if (horizontal_p) | |
1207 where.y = 0; | |
1208 else | |
1209 where.x = 0; | |
1210 } | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1211 |
5626 | 1212 if (!just_compute_p) |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1213 draw_shadow_rectangle (mw, ws->window, 0, 0, ws->width, ws->height, |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1214 False, False); |
5626 | 1215 } |
1216 | |
1217 /* Motion code */ | |
1218 static void | |
8860 | 1219 set_new_state (mw, val, level) |
1220 XlwMenuWidget mw; | |
1221 widget_value* val; | |
1222 int level; | |
5626 | 1223 { |
1224 int i; | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1225 |
5626 | 1226 mw->menu.new_depth = 0; |
1227 for (i = 0; i < level; i++) | |
1228 push_new_stack (mw, mw->menu.old_stack [i]); | |
1229 push_new_stack (mw, val); | |
1230 } | |
1231 | |
1232 static void | |
8860 | 1233 make_windows_if_needed (mw, n) |
1234 XlwMenuWidget mw; | |
1235 int n; | |
5626 | 1236 { |
1237 int i; | |
1238 int start_at; | |
1239 XSetWindowAttributes xswa; | |
1240 int mask; | |
1241 Window root = RootWindowOfScreen (DefaultScreenOfDisplay (XtDisplay (mw))); | |
1242 window_state* windows; | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1243 |
5626 | 1244 if (mw->menu.windows_length >= n) |
1245 return; | |
1246 | |
1247 xswa.save_under = True; | |
1248 xswa.override_redirect = True; | |
1249 xswa.background_pixel = mw->core.background_pixel; | |
1250 xswa.border_pixel = mw->core.border_pixel; | |
1251 xswa.event_mask = | |
8860 | 1252 ExposureMask | PointerMotionMask | PointerMotionHintMask |
5626 | 1253 | ButtonReleaseMask | ButtonPressMask; |
1254 xswa.cursor = mw->menu.cursor_shape; | |
1255 mask = CWSaveUnder | CWOverrideRedirect | CWBackPixel | CWBorderPixel | |
1256 | CWEventMask | CWCursor; | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1257 |
5626 | 1258 if (!mw->menu.windows) |
1259 { | |
1260 mw->menu.windows = | |
1261 (window_state*)XtMalloc (n * sizeof (window_state)); | |
1262 start_at = 0; | |
1263 } | |
1264 else | |
1265 { | |
1266 mw->menu.windows = | |
1267 (window_state*)XtRealloc ((char*)mw->menu.windows, | |
1268 n * sizeof (window_state)); | |
1269 start_at = mw->menu.windows_length; | |
1270 } | |
1271 mw->menu.windows_length = n; | |
1272 | |
1273 windows = mw->menu.windows; | |
1274 | |
1275 for (i = start_at; i < n; i++) | |
1276 { | |
1277 windows [i].x = 0; | |
1278 windows [i].y = 0; | |
1279 windows [i].width = 1; | |
1280 windows [i].height = 1; | |
1281 windows [i].window = | |
1282 XCreateWindow (XtDisplay (mw), root, 0, 0, 1, 1, | |
1283 0, 0, CopyFromParent, CopyFromParent, mask, &xswa); | |
1284 } | |
1285 } | |
1286 | |
37524
f0a59a792f7d
(xlwmenu_window_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34557
diff
changeset
|
1287 /* Value is non-zero if WINDOW is part of menu bar widget W. */ |
f0a59a792f7d
(xlwmenu_window_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34557
diff
changeset
|
1288 |
f0a59a792f7d
(xlwmenu_window_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34557
diff
changeset
|
1289 int |
f0a59a792f7d
(xlwmenu_window_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34557
diff
changeset
|
1290 xlwmenu_window_p (w, window) |
f0a59a792f7d
(xlwmenu_window_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34557
diff
changeset
|
1291 Widget w; |
f0a59a792f7d
(xlwmenu_window_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34557
diff
changeset
|
1292 Window window; |
f0a59a792f7d
(xlwmenu_window_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34557
diff
changeset
|
1293 { |
f0a59a792f7d
(xlwmenu_window_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34557
diff
changeset
|
1294 XlwMenuWidget mw = (XlwMenuWidget) w; |
f0a59a792f7d
(xlwmenu_window_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34557
diff
changeset
|
1295 int i; |
49600
23a1cea22d13
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
48929
diff
changeset
|
1296 |
37524
f0a59a792f7d
(xlwmenu_window_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34557
diff
changeset
|
1297 for (i = 0; i < mw->menu.windows_length; ++i) |
f0a59a792f7d
(xlwmenu_window_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34557
diff
changeset
|
1298 if (window == mw->menu.windows[i].window) |
f0a59a792f7d
(xlwmenu_window_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34557
diff
changeset
|
1299 break; |
f0a59a792f7d
(xlwmenu_window_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34557
diff
changeset
|
1300 |
f0a59a792f7d
(xlwmenu_window_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34557
diff
changeset
|
1301 return i < mw->menu.windows_length; |
f0a59a792f7d
(xlwmenu_window_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34557
diff
changeset
|
1302 } |
f0a59a792f7d
(xlwmenu_window_p): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
34557
diff
changeset
|
1303 |
5626 | 1304 /* Make the window fit in the screen */ |
1305 static void | |
8860 | 1306 fit_to_screen (mw, ws, previous_ws, horizontal_p) |
1307 XlwMenuWidget mw; | |
1308 window_state* ws; | |
1309 window_state* previous_ws; | |
1310 Boolean horizontal_p; | |
5626 | 1311 { |
11461
65c12e57f119
(size_menu): Make height and label_width unsigned.
Richard M. Stallman <rms@gnu.org>
parents:
9746
diff
changeset
|
1312 unsigned int screen_width = WidthOfScreen (XtScreen (mw)); |
65c12e57f119
(size_menu): Make height and label_width unsigned.
Richard M. Stallman <rms@gnu.org>
parents:
9746
diff
changeset
|
1313 unsigned int screen_height = HeightOfScreen (XtScreen (mw)); |
16917
5aabcff9fdd3
(enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents:
15742
diff
changeset
|
1314 /* 1 if we are unable to avoid an overlap between |
5aabcff9fdd3
(enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents:
15742
diff
changeset
|
1315 this menu and the parent menu in the X dimension. */ |
5aabcff9fdd3
(enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents:
15742
diff
changeset
|
1316 int horizontal_overlap = 0; |
5626 | 1317 |
1318 if (ws->x < 0) | |
1319 ws->x = 0; | |
1320 else if (ws->x + ws->width > screen_width) | |
1321 { | |
1322 if (!horizontal_p) | |
31370 | 1323 /* The addition of shadow-thickness for a sub-menu's position is |
1324 to reflect a similar adjustment when the menu is displayed to | |
1325 the right of the invoking menu-item; it makes the sub-menu | |
1326 look more `attached' to the menu-item. */ | |
1327 ws->x = previous_ws->x - ws->width + mw->menu.shadow_thickness; | |
5626 | 1328 else |
1329 ws->x = screen_width - ws->width; | |
9395
d954daf0a213
(fit_to_screen): Don't put the menu off the left or top.
Richard M. Stallman <rms@gnu.org>
parents:
9227
diff
changeset
|
1330 if (ws->x < 0) |
16917
5aabcff9fdd3
(enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents:
15742
diff
changeset
|
1331 { |
5aabcff9fdd3
(enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents:
15742
diff
changeset
|
1332 ws->x = 0; |
5aabcff9fdd3
(enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents:
15742
diff
changeset
|
1333 horizontal_overlap = 1; |
5aabcff9fdd3
(enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents:
15742
diff
changeset
|
1334 } |
5626 | 1335 } |
16917
5aabcff9fdd3
(enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents:
15742
diff
changeset
|
1336 /* If we overlap in X, try to avoid overlap in Y. */ |
5aabcff9fdd3
(enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents:
15742
diff
changeset
|
1337 if (horizontal_overlap |
5aabcff9fdd3
(enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents:
15742
diff
changeset
|
1338 && ws->y < previous_ws->y + previous_ws->height |
5aabcff9fdd3
(enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents:
15742
diff
changeset
|
1339 && previous_ws->y < ws->y + ws->height) |
5aabcff9fdd3
(enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents:
15742
diff
changeset
|
1340 { |
5aabcff9fdd3
(enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents:
15742
diff
changeset
|
1341 /* Put this menu right below or right above PREVIOUS_WS |
5aabcff9fdd3
(enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents:
15742
diff
changeset
|
1342 if there's room. */ |
5aabcff9fdd3
(enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents:
15742
diff
changeset
|
1343 if (previous_ws->y + previous_ws->height + ws->height < screen_height) |
5aabcff9fdd3
(enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents:
15742
diff
changeset
|
1344 ws->y = previous_ws->y + previous_ws->height; |
5aabcff9fdd3
(enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents:
15742
diff
changeset
|
1345 else if (previous_ws->y - ws->height > 0) |
5aabcff9fdd3
(enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents:
15742
diff
changeset
|
1346 ws->y = previous_ws->y - ws->height; |
5aabcff9fdd3
(enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents:
15742
diff
changeset
|
1347 } |
5aabcff9fdd3
(enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents:
15742
diff
changeset
|
1348 |
5626 | 1349 if (ws->y < 0) |
1350 ws->y = 0; | |
1351 else if (ws->y + ws->height > screen_height) | |
1352 { | |
1353 if (horizontal_p) | |
1354 ws->y = previous_ws->y - ws->height; | |
1355 else | |
1356 ws->y = screen_height - ws->height; | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1357 if (ws->y < 0) |
9395
d954daf0a213
(fit_to_screen): Don't put the menu off the left or top.
Richard M. Stallman <rms@gnu.org>
parents:
9227
diff
changeset
|
1358 ws->y = 0; |
5626 | 1359 } |
1360 } | |
1361 | |
1362 /* Updates old_stack from new_stack and redisplays. */ | |
1363 static void | |
8860 | 1364 remap_menubar (mw) |
1365 XlwMenuWidget mw; | |
5626 | 1366 { |
1367 int i; | |
1368 int last_same; | |
1369 XPoint selection_position; | |
1370 int old_depth = mw->menu.old_depth; | |
1371 int new_depth = mw->menu.new_depth; | |
1372 widget_value** old_stack; | |
1373 widget_value** new_stack; | |
1374 window_state* windows; | |
1375 widget_value* old_selection; | |
1376 widget_value* new_selection; | |
1377 | |
1378 /* Check that enough windows and old_stack are ready. */ | |
1379 make_windows_if_needed (mw, new_depth); | |
1380 make_old_stack_space (mw, new_depth); | |
1381 windows = mw->menu.windows; | |
1382 old_stack = mw->menu.old_stack; | |
1383 new_stack = mw->menu.new_stack; | |
1384 | |
1385 /* compute the last identical different entry */ | |
1386 for (i = 1; i < old_depth && i < new_depth; i++) | |
1387 if (old_stack [i] != new_stack [i]) | |
1388 break; | |
1389 last_same = i - 1; | |
1390 | |
1391 /* Memorize the previously selected item to be able to refresh it */ | |
1392 old_selection = last_same + 1 < old_depth ? old_stack [last_same + 1] : NULL; | |
1393 if (old_selection && !old_selection->enabled) | |
1394 old_selection = NULL; | |
1395 new_selection = last_same + 1 < new_depth ? new_stack [last_same + 1] : NULL; | |
1396 if (new_selection && !new_selection->enabled) | |
1397 new_selection = NULL; | |
1398 | |
27338
58f8eee82765
(xlwMenuResources): All XtNhighlightCallback.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
1399 /* Call callback when the hightlighted item changes. */ |
58f8eee82765
(xlwMenuResources): All XtNhighlightCallback.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
1400 if (old_selection || new_selection) |
58f8eee82765
(xlwMenuResources): All XtNhighlightCallback.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
1401 XtCallCallbackList ((Widget)mw, mw->menu.highlight, |
58f8eee82765
(xlwMenuResources): All XtNhighlightCallback.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
1402 (XtPointer) new_selection); |
58f8eee82765
(xlwMenuResources): All XtNhighlightCallback.
Gerd Moellmann <gerd@gnu.org>
parents:
26087
diff
changeset
|
1403 |
5626 | 1404 /* updates old_state from new_state. It has to be done now because |
1405 display_menu (called below) uses the old_stack to know what to display. */ | |
1406 for (i = last_same + 1; i < new_depth; i++) | |
1407 old_stack [i] = new_stack [i]; | |
1408 mw->menu.old_depth = new_depth; | |
1409 | |
14018 | 1410 /* refresh the last selection */ |
5626 | 1411 selection_position.x = 0; |
1412 selection_position.y = 0; | |
1413 display_menu (mw, last_same, new_selection == old_selection, | |
1414 &selection_position, NULL, NULL, old_selection, new_selection); | |
1415 | |
16917
5aabcff9fdd3
(enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents:
15742
diff
changeset
|
1416 /* Now place the new menus. */ |
5aabcff9fdd3
(enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents:
15742
diff
changeset
|
1417 for (i = last_same + 1; i < new_depth && new_stack[i]->contents; i++) |
5626 | 1418 { |
16917
5aabcff9fdd3
(enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents:
15742
diff
changeset
|
1419 window_state *previous_ws = &windows[i - 1]; |
5aabcff9fdd3
(enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents:
15742
diff
changeset
|
1420 window_state *ws = &windows[i]; |
5626 | 1421 |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1422 ws->x = (previous_ws->x + selection_position.x |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1423 + mw->menu.shadow_thickness); |
31370 | 1424 if (mw->menu.horizontal && i == 1) |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1425 ws->x += mw->menu.margin; |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1426 |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1427 #if 0 |
5626 | 1428 if (!mw->menu.horizontal || i > 1) |
1429 ws->x += mw->menu.shadow_thickness; | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1430 #endif |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1431 |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1432 ws->y = (previous_ws->y + selection_position.y |
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1433 + mw->menu.shadow_thickness); |
31370 | 1434 if (mw->menu.horizontal && i == 1) |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1435 ws->y += mw->menu.margin; |
5626 | 1436 |
1437 size_menu (mw, i); | |
1438 | |
1439 fit_to_screen (mw, ws, previous_ws, mw->menu.horizontal && i == 1); | |
1440 | |
1441 XClearWindow (XtDisplay (mw), ws->window); | |
1442 XMoveResizeWindow (XtDisplay (mw), ws->window, ws->x, ws->y, | |
1443 ws->width, ws->height); | |
1444 XMapRaised (XtDisplay (mw), ws->window); | |
1445 display_menu (mw, i, False, &selection_position, NULL, NULL, NULL, NULL); | |
1446 } | |
1447 | |
1448 /* unmap the menus that popped down */ | |
1449 for (i = new_depth - 1; i < old_depth; i++) | |
48929
d81c005163cb
(pop_new_stack_if_no_contents): Do nothing if new_depth is 1.
Richard M. Stallman <rms@gnu.org>
parents:
48479
diff
changeset
|
1450 if (i >= new_depth || (i > 0 && !new_stack[i]->contents)) |
16917
5aabcff9fdd3
(enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents:
15742
diff
changeset
|
1451 XUnmapWindow (XtDisplay (mw), windows[i].window); |
5626 | 1452 } |
1453 | |
1454 static Boolean | |
8860 | 1455 motion_event_is_in_menu (mw, ev, level, relative_pos) |
1456 XlwMenuWidget mw; | |
1457 XMotionEvent* ev; | |
1458 int level; | |
1459 XPoint* relative_pos; | |
5626 | 1460 { |
1461 window_state* ws = &mw->menu.windows [level]; | |
19960
38172783650b
(motion_event_is_in_menu): Extend the left and
Richard M. Stallman <rms@gnu.org>
parents:
18993
diff
changeset
|
1462 int shadow = level == 0 ? 0 : mw->menu.shadow_thickness; |
38172783650b
(motion_event_is_in_menu): Extend the left and
Richard M. Stallman <rms@gnu.org>
parents:
18993
diff
changeset
|
1463 int x = ws->x + shadow; |
38172783650b
(motion_event_is_in_menu): Extend the left and
Richard M. Stallman <rms@gnu.org>
parents:
18993
diff
changeset
|
1464 int y = ws->y + shadow; |
5626 | 1465 relative_pos->x = ev->x_root - x; |
1466 relative_pos->y = ev->y_root - y; | |
19960
38172783650b
(motion_event_is_in_menu): Extend the left and
Richard M. Stallman <rms@gnu.org>
parents:
18993
diff
changeset
|
1467 return (x - shadow < ev->x_root && ev->x_root < x + ws->width |
38172783650b
(motion_event_is_in_menu): Extend the left and
Richard M. Stallman <rms@gnu.org>
parents:
18993
diff
changeset
|
1468 && y - shadow < ev->y_root && ev->y_root < y + ws->height); |
5626 | 1469 } |
1470 | |
1471 static Boolean | |
8860 | 1472 map_event_to_widget_value (mw, ev, val, level) |
1473 XlwMenuWidget mw; | |
1474 XMotionEvent* ev; | |
1475 widget_value** val; | |
1476 int* level; | |
5626 | 1477 { |
1478 int i; | |
1479 XPoint relative_pos; | |
1480 window_state* ws; | |
1481 | |
1482 *val = NULL; | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1483 |
5626 | 1484 /* Find the window */ |
1485 for (i = mw->menu.old_depth - 1; i >= 0; i--) | |
1486 { | |
1487 ws = &mw->menu.windows [i]; | |
1488 if (ws && motion_event_is_in_menu (mw, ev, i, &relative_pos)) | |
1489 { | |
1490 display_menu (mw, i, True, NULL, &relative_pos, val, NULL, NULL); | |
1491 | |
1492 if (*val) | |
1493 { | |
1494 *level = i + 1; | |
1495 return True; | |
1496 } | |
1497 } | |
1498 } | |
1499 return False; | |
1500 } | |
1501 | |
1502 /* Procedures */ | |
1503 static void | |
8860 | 1504 make_drawing_gcs (mw) |
1505 XlwMenuWidget mw; | |
5626 | 1506 { |
1507 XGCValues xgcv; | |
45152
0e9984418269
(make_drawing_gcs): The scaling factor passed to
Pavel Janík <Pavel@Janik.cz>
parents:
45147
diff
changeset
|
1508 float scale; |
61209
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1509 XtGCMask mask = GCForeground | GCBackground; |
5626 | 1510 |
61209
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1511 #ifdef HAVE_X_I18N |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1512 if (!mw->menu.fontSet) |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1513 { |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1514 xgcv.font = mw->menu.font->fid; |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1515 mask |= GCFont; |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1516 } |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1517 #else |
5626 | 1518 xgcv.font = mw->menu.font->fid; |
61209
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1519 mask |= GCFont; |
60698
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
1520 #endif |
5626 | 1521 xgcv.foreground = mw->menu.foreground; |
1522 xgcv.background = mw->core.background_pixel; | |
61209
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1523 mw->menu.foreground_gc = XtGetGC ((Widget)mw, mask, &xgcv); |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1524 |
5626 | 1525 xgcv.foreground = mw->menu.button_foreground; |
61209
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1526 mw->menu.button_gc = XtGetGC ((Widget)mw, mask, &xgcv); |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1527 |
5626 | 1528 xgcv.background = mw->core.background_pixel; |
45147
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
1529 |
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
1530 #define BRIGHTNESS(color) (((color) & 0xff) + (((color) >> 8) & 0xff) + (((color) >> 16) & 0xff)) |
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
1531 |
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
1532 /* Allocate color for disabled menu-items. */ |
45152
0e9984418269
(make_drawing_gcs): The scaling factor passed to
Pavel Janík <Pavel@Janik.cz>
parents:
45147
diff
changeset
|
1533 mw->menu.disabled_foreground = mw->menu.foreground; |
45147
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
1534 if (BRIGHTNESS(mw->menu.foreground) < BRIGHTNESS(mw->core.background_pixel)) |
45152
0e9984418269
(make_drawing_gcs): The scaling factor passed to
Pavel Janík <Pavel@Janik.cz>
parents:
45147
diff
changeset
|
1535 scale = 2.3; |
45147
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
1536 else |
45152
0e9984418269
(make_drawing_gcs): The scaling factor passed to
Pavel Janík <Pavel@Janik.cz>
parents:
45147
diff
changeset
|
1537 scale = 0.55; |
45147
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
1538 |
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
1539 x_alloc_lighter_color_for_widget ((Widget) mw, XtDisplay ((Widget) mw), |
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
1540 mw->core.colormap, |
45152
0e9984418269
(make_drawing_gcs): The scaling factor passed to
Pavel Janík <Pavel@Janik.cz>
parents:
45147
diff
changeset
|
1541 &mw->menu.disabled_foreground, |
0e9984418269
(make_drawing_gcs): The scaling factor passed to
Pavel Janík <Pavel@Janik.cz>
parents:
45147
diff
changeset
|
1542 scale, |
45147
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
1543 0x8000); |
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
1544 |
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
1545 if (mw->menu.foreground == mw->menu.disabled_foreground |
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
1546 || mw->core.background_pixel == mw->menu.disabled_foreground) |
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
1547 { |
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
1548 /* Too few colors, use stipple. */ |
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
1549 xgcv.foreground = mw->menu.foreground; |
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
1550 xgcv.fill_style = FillStippled; |
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
1551 xgcv.stipple = mw->menu.gray_pixmap; |
61209
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1552 mw->menu.disabled_gc = XtGetGC ((Widget)mw, mask |
60698
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
1553 | GCFillStyle | GCStipple, &xgcv); |
45147
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
1554 } |
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
1555 else |
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
1556 { |
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
1557 /* Many colors available, use disabled pixel. */ |
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
1558 xgcv.foreground = mw->menu.disabled_foreground; |
61209
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1559 mw->menu.disabled_gc = XtGetGC ((Widget)mw, mask, &xgcv); |
45147
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
1560 } |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1561 |
5626 | 1562 xgcv.foreground = mw->menu.button_foreground; |
1563 xgcv.background = mw->core.background_pixel; | |
1564 xgcv.fill_style = FillStippled; | |
1565 xgcv.stipple = mw->menu.gray_pixmap; | |
61209
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1566 mw->menu.inactive_button_gc = XtGetGC ((Widget)mw, mask |
60698
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
1567 | GCFillStyle | GCStipple, &xgcv); |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1568 |
5626 | 1569 xgcv.foreground = mw->core.background_pixel; |
1570 xgcv.background = mw->menu.foreground; | |
61209
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1571 mw->menu.background_gc = XtGetGC ((Widget)mw, mask, &xgcv); |
5626 | 1572 } |
1573 | |
1574 static void | |
8860 | 1575 release_drawing_gcs (mw) |
1576 XlwMenuWidget mw; | |
5626 | 1577 { |
1578 XtReleaseGC ((Widget) mw, mw->menu.foreground_gc); | |
1579 XtReleaseGC ((Widget) mw, mw->menu.button_gc); | |
45147
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
1580 XtReleaseGC ((Widget) mw, mw->menu.disabled_gc); |
5626 | 1581 XtReleaseGC ((Widget) mw, mw->menu.inactive_button_gc); |
1582 XtReleaseGC ((Widget) mw, mw->menu.background_gc); | |
1583 /* let's get some segvs if we try to use these... */ | |
1584 mw->menu.foreground_gc = (GC) -1; | |
1585 mw->menu.button_gc = (GC) -1; | |
45147
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
1586 mw->menu.disabled_gc = (GC) -1; |
5626 | 1587 mw->menu.inactive_button_gc = (GC) -1; |
1588 mw->menu.background_gc = (GC) -1; | |
1589 } | |
1590 | |
1591 #define MINL(x,y) ((((unsigned long) (x)) < ((unsigned long) (y))) \ | |
1592 ? ((unsigned long) (x)) : ((unsigned long) (y))) | |
1593 | |
1594 static void | |
8860 | 1595 make_shadow_gcs (mw) |
1596 XlwMenuWidget mw; | |
5626 | 1597 { |
1598 XGCValues xgcv; | |
1599 unsigned long pm = 0; | |
1600 Display *dpy = XtDisplay ((Widget) mw); | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1601 Screen *screen = XtScreen ((Widget) mw); |
27988
817a3a4058a0
(make_shadow_gcs): Use the widget's colormap instead
Gerd Moellmann <gerd@gnu.org>
parents:
27338
diff
changeset
|
1602 Colormap cmap = mw->core.colormap; |
5626 | 1603 XColor topc, botc; |
1604 int top_frobbed = 0, bottom_frobbed = 0; | |
1605 | |
29700
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1606 mw->menu.free_top_shadow_color_p = 0; |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1607 mw->menu.free_bottom_shadow_color_p = 0; |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1608 |
5626 | 1609 if (mw->menu.top_shadow_color == -1) |
1610 mw->menu.top_shadow_color = mw->core.background_pixel; | |
29700
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1611 else |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1612 mw->menu.top_shadow_color = mw->menu.top_shadow_color; |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1613 |
5626 | 1614 if (mw->menu.bottom_shadow_color == -1) |
1615 mw->menu.bottom_shadow_color = mw->menu.foreground; | |
29700
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1616 else |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1617 mw->menu.bottom_shadow_color = mw->menu.bottom_shadow_color; |
5626 | 1618 |
1619 if (mw->menu.top_shadow_color == mw->core.background_pixel || | |
1620 mw->menu.top_shadow_color == mw->menu.foreground) | |
1621 { | |
1622 topc.pixel = mw->core.background_pixel; | |
31341
1c5d68acbded
(x_alloc_lighter_color_for_widget):
Miles Bader <miles@gnu.org>
parents:
31287
diff
changeset
|
1623 #ifdef emacs |
1c5d68acbded
(x_alloc_lighter_color_for_widget):
Miles Bader <miles@gnu.org>
parents:
31287
diff
changeset
|
1624 if (x_alloc_lighter_color_for_widget ((Widget) mw, dpy, cmap, |
1c5d68acbded
(x_alloc_lighter_color_for_widget):
Miles Bader <miles@gnu.org>
parents:
31287
diff
changeset
|
1625 &topc.pixel, |
1c5d68acbded
(x_alloc_lighter_color_for_widget):
Miles Bader <miles@gnu.org>
parents:
31287
diff
changeset
|
1626 1.2, 0x8000)) |
1c5d68acbded
(x_alloc_lighter_color_for_widget):
Miles Bader <miles@gnu.org>
parents:
31287
diff
changeset
|
1627 #else |
5626 | 1628 XQueryColor (dpy, cmap, &topc); |
1629 /* don't overflow/wrap! */ | |
1630 topc.red = MINL (65535, topc.red * 1.2); | |
1631 topc.green = MINL (65535, topc.green * 1.2); | |
1632 topc.blue = MINL (65535, topc.blue * 1.2); | |
1633 if (XAllocColor (dpy, cmap, &topc)) | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1634 #endif |
5626 | 1635 { |
1636 mw->menu.top_shadow_color = topc.pixel; | |
29700
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1637 mw->menu.free_top_shadow_color_p = 1; |
5626 | 1638 top_frobbed = 1; |
1639 } | |
1640 } | |
1641 if (mw->menu.bottom_shadow_color == mw->menu.foreground || | |
1642 mw->menu.bottom_shadow_color == mw->core.background_pixel) | |
1643 { | |
1644 botc.pixel = mw->core.background_pixel; | |
31341
1c5d68acbded
(x_alloc_lighter_color_for_widget):
Miles Bader <miles@gnu.org>
parents:
31287
diff
changeset
|
1645 #ifdef emacs |
1c5d68acbded
(x_alloc_lighter_color_for_widget):
Miles Bader <miles@gnu.org>
parents:
31287
diff
changeset
|
1646 if (x_alloc_lighter_color_for_widget ((Widget) mw, dpy, cmap, |
1c5d68acbded
(x_alloc_lighter_color_for_widget):
Miles Bader <miles@gnu.org>
parents:
31287
diff
changeset
|
1647 &botc.pixel, |
1c5d68acbded
(x_alloc_lighter_color_for_widget):
Miles Bader <miles@gnu.org>
parents:
31287
diff
changeset
|
1648 0.6, 0x4000)) |
1c5d68acbded
(x_alloc_lighter_color_for_widget):
Miles Bader <miles@gnu.org>
parents:
31287
diff
changeset
|
1649 #else |
5626 | 1650 XQueryColor (dpy, cmap, &botc); |
1651 botc.red *= 0.6; | |
1652 botc.green *= 0.6; | |
1653 botc.blue *= 0.6; | |
1654 if (XAllocColor (dpy, cmap, &botc)) | |
25034
305d2ac394ae
(make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents:
19960
diff
changeset
|
1655 #endif |
5626 | 1656 { |
1657 mw->menu.bottom_shadow_color = botc.pixel; | |
29700
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1658 mw->menu.free_bottom_shadow_color_p = 1; |
5626 | 1659 bottom_frobbed = 1; |
1660 } | |
1661 } | |
1662 | |
1663 if (top_frobbed && bottom_frobbed) | |
1664 { | |
31341
1c5d68acbded
(x_alloc_lighter_color_for_widget):
Miles Bader <miles@gnu.org>
parents:
31287
diff
changeset
|
1665 if (topc.pixel == botc.pixel) |
5626 | 1666 { |
1667 if (botc.pixel == mw->menu.foreground) | |
29602
d13e7c93d265
(make_shadow_gcs): Free and copy colors so that
Gerd Moellmann <gerd@gnu.org>
parents:
29469
diff
changeset
|
1668 { |
29700
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1669 if (mw->menu.free_top_shadow_color_p) |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1670 { |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1671 x_free_dpy_colors (dpy, screen, cmap, |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1672 &mw->menu.top_shadow_color, 1); |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1673 mw->menu.free_top_shadow_color_p = 0; |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1674 } |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1675 mw->menu.top_shadow_color = mw->core.background_pixel; |
29602
d13e7c93d265
(make_shadow_gcs): Free and copy colors so that
Gerd Moellmann <gerd@gnu.org>
parents:
29469
diff
changeset
|
1676 } |
5626 | 1677 else |
29602
d13e7c93d265
(make_shadow_gcs): Free and copy colors so that
Gerd Moellmann <gerd@gnu.org>
parents:
29469
diff
changeset
|
1678 { |
29700
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1679 if (mw->menu.free_bottom_shadow_color_p) |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1680 { |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1681 x_free_dpy_colors (dpy, screen, cmap, |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1682 &mw->menu.bottom_shadow_color, 1); |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1683 mw->menu.free_bottom_shadow_color_p = 0; |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1684 } |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1685 mw->menu.bottom_shadow_color = mw->menu.foreground; |
29602
d13e7c93d265
(make_shadow_gcs): Free and copy colors so that
Gerd Moellmann <gerd@gnu.org>
parents:
29469
diff
changeset
|
1686 } |
5626 | 1687 } |
1688 } | |
1689 | |
1690 if (!mw->menu.top_shadow_pixmap && | |
1691 mw->menu.top_shadow_color == mw->core.background_pixel) | |
1692 { | |
1693 mw->menu.top_shadow_pixmap = mw->menu.gray_pixmap; | |
29700
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1694 if (mw->menu.free_top_shadow_color_p) |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1695 { |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1696 x_free_dpy_colors (dpy, screen, cmap, &mw->menu.top_shadow_color, 1); |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1697 mw->menu.free_top_shadow_color_p = 0; |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1698 } |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1699 mw->menu.top_shadow_color = mw->menu.foreground; |
5626 | 1700 } |
1701 if (!mw->menu.bottom_shadow_pixmap && | |
1702 mw->menu.bottom_shadow_color == mw->core.background_pixel) | |
1703 { | |
1704 mw->menu.bottom_shadow_pixmap = mw->menu.gray_pixmap; | |
29700
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1705 if (mw->menu.free_bottom_shadow_color_p) |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1706 { |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1707 x_free_dpy_colors (dpy, screen, cmap, |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1708 &mw->menu.bottom_shadow_color, 1); |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1709 mw->menu.free_bottom_shadow_color_p = 0; |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1710 } |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1711 mw->menu.bottom_shadow_color = mw->menu.foreground; |
5626 | 1712 } |
1713 | |
1714 xgcv.fill_style = FillStippled; | |
1715 xgcv.foreground = mw->menu.top_shadow_color; | |
1716 xgcv.stipple = mw->menu.top_shadow_pixmap; | |
1717 pm = (xgcv.stipple ? GCStipple|GCFillStyle : 0); | |
1718 mw->menu.shadow_top_gc = XtGetGC ((Widget)mw, GCForeground | pm, &xgcv); | |
1719 | |
1720 xgcv.foreground = mw->menu.bottom_shadow_color; | |
1721 xgcv.stipple = mw->menu.bottom_shadow_pixmap; | |
1722 pm = (xgcv.stipple ? GCStipple|GCFillStyle : 0); | |
1723 mw->menu.shadow_bottom_gc = XtGetGC ((Widget)mw, GCForeground | pm, &xgcv); | |
1724 } | |
1725 | |
1726 | |
1727 static void | |
8860 | 1728 release_shadow_gcs (mw) |
1729 XlwMenuWidget mw; | |
5626 | 1730 { |
29602
d13e7c93d265
(make_shadow_gcs): Free and copy colors so that
Gerd Moellmann <gerd@gnu.org>
parents:
29469
diff
changeset
|
1731 Display *dpy = XtDisplay ((Widget) mw); |
d13e7c93d265
(make_shadow_gcs): Free and copy colors so that
Gerd Moellmann <gerd@gnu.org>
parents:
29469
diff
changeset
|
1732 Screen *screen = XtScreen ((Widget) mw); |
d13e7c93d265
(make_shadow_gcs): Free and copy colors so that
Gerd Moellmann <gerd@gnu.org>
parents:
29469
diff
changeset
|
1733 Colormap cmap = mw->core.colormap; |
d13e7c93d265
(make_shadow_gcs): Free and copy colors so that
Gerd Moellmann <gerd@gnu.org>
parents:
29469
diff
changeset
|
1734 Pixel px[2]; |
29700
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1735 int i = 0; |
29602
d13e7c93d265
(make_shadow_gcs): Free and copy colors so that
Gerd Moellmann <gerd@gnu.org>
parents:
29469
diff
changeset
|
1736 |
29700
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1737 if (mw->menu.free_top_shadow_color_p) |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1738 px[i++] = mw->menu.top_shadow_color; |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1739 if (mw->menu.free_bottom_shadow_color_p) |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1740 px[i++] = mw->menu.bottom_shadow_color; |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1741 if (i > 0) |
1e88ad071a1a
(make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents:
29602
diff
changeset
|
1742 x_free_dpy_colors (dpy, screen, cmap, px, i); |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1743 |
5626 | 1744 XtReleaseGC ((Widget) mw, mw->menu.shadow_top_gc); |
1745 XtReleaseGC ((Widget) mw, mw->menu.shadow_bottom_gc); | |
1746 } | |
1747 | |
1748 static void | |
9746
49e984bf6689
(xlwmenu_default_font): New global variable.
Richard M. Stallman <rms@gnu.org>
parents:
9700
diff
changeset
|
1749 XlwMenuInitialize (request, mw, args, num_args) |
8860 | 1750 Widget request; |
9746
49e984bf6689
(xlwmenu_default_font): New global variable.
Richard M. Stallman <rms@gnu.org>
parents:
9700
diff
changeset
|
1751 XlwMenuWidget mw; |
8860 | 1752 ArgList args; |
1753 Cardinal *num_args; | |
5626 | 1754 { |
1755 /* Get the GCs and the widget size */ | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1756 |
5626 | 1757 Window window = RootWindowOfScreen (DefaultScreenOfDisplay (XtDisplay (mw))); |
1758 Display* display = XtDisplay (mw); | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1759 |
8860 | 1760 #if 0 |
1761 widget_value *tem = (widget_value *) XtMalloc (sizeof (widget_value)); | |
1762 | |
1763 /* _XtCreate is freeing the object that was passed to us, | |
1764 so make a copy that we will actually keep. */ | |
1765 lwlib_bcopy (mw->menu.contents, tem, sizeof (widget_value)); | |
1766 mw->menu.contents = tem; | |
1767 #endif | |
1768 | |
5626 | 1769 /* mw->menu.cursor = XCreateFontCursor (display, mw->menu.cursor_shape); */ |
1770 mw->menu.cursor = mw->menu.cursor_shape; | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1771 |
11885
c686f5539749
(XlwMenuInitialize): Cast XCreatePixmapFromBitmapData args.
Karl Heuer <kwzh@gnu.org>
parents:
11461
diff
changeset
|
1772 mw->menu.gray_pixmap |
30324
d4713daa6716
Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents:
29700
diff
changeset
|
1773 = XCreatePixmapFromBitmapData (display, window, gray_bitmap_bits, |
d4713daa6716
Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents:
29700
diff
changeset
|
1774 gray_bitmap_width, gray_bitmap_height, |
11885
c686f5539749
(XlwMenuInitialize): Cast XCreatePixmapFromBitmapData args.
Karl Heuer <kwzh@gnu.org>
parents:
11461
diff
changeset
|
1775 (unsigned long)1, (unsigned long)0, 1); |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1776 |
9746
49e984bf6689
(xlwmenu_default_font): New global variable.
Richard M. Stallman <rms@gnu.org>
parents:
9700
diff
changeset
|
1777 /* I don't understand why this ends up 0 sometimes, |
49e984bf6689
(xlwmenu_default_font): New global variable.
Richard M. Stallman <rms@gnu.org>
parents:
9700
diff
changeset
|
1778 but it does. This kludge works around it. |
49e984bf6689
(xlwmenu_default_font): New global variable.
Richard M. Stallman <rms@gnu.org>
parents:
9700
diff
changeset
|
1779 Can anyone find a real fix? -- rms. */ |
49e984bf6689
(xlwmenu_default_font): New global variable.
Richard M. Stallman <rms@gnu.org>
parents:
9700
diff
changeset
|
1780 if (mw->menu.font == 0) |
49e984bf6689
(xlwmenu_default_font): New global variable.
Richard M. Stallman <rms@gnu.org>
parents:
9700
diff
changeset
|
1781 mw->menu.font = xlwmenu_default_font; |
61209
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1782 #ifdef HAVE_X_I18N |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1783 if (mw->menu.fontSet) |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1784 mw->menu.font_extents = XExtentsOfFontSet (mw->menu.fontSet); |
60698
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
1785 #endif |
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
1786 |
5626 | 1787 make_drawing_gcs (mw); |
1788 make_shadow_gcs (mw); | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1789 |
5626 | 1790 mw->menu.popped_up = False; |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1791 |
5626 | 1792 mw->menu.old_depth = 1; |
1793 mw->menu.old_stack = (widget_value**)XtMalloc (sizeof (widget_value*)); | |
1794 mw->menu.old_stack_length = 1; | |
1795 mw->menu.old_stack [0] = mw->menu.contents; | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1796 |
5626 | 1797 mw->menu.new_depth = 0; |
1798 mw->menu.new_stack = 0; | |
1799 mw->menu.new_stack_length = 0; | |
1800 push_new_stack (mw, mw->menu.contents); | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1801 |
5626 | 1802 mw->menu.windows = (window_state*)XtMalloc (sizeof (window_state)); |
1803 mw->menu.windows_length = 1; | |
1804 mw->menu.windows [0].x = 0; | |
1805 mw->menu.windows [0].y = 0; | |
1806 mw->menu.windows [0].width = 0; | |
1807 mw->menu.windows [0].height = 0; | |
1808 size_menu (mw, 0); | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1809 |
5626 | 1810 mw->core.width = mw->menu.windows [0].width; |
1811 mw->core.height = mw->menu.windows [0].height; | |
1812 } | |
1813 | |
1814 static void | |
1815 XlwMenuClassInitialize () | |
1816 { | |
1817 } | |
1818 | |
1819 static void | |
8860 | 1820 XlwMenuRealize (w, valueMask, attributes) |
1821 Widget w; | |
1822 Mask *valueMask; | |
1823 XSetWindowAttributes *attributes; | |
5626 | 1824 { |
1825 XlwMenuWidget mw = (XlwMenuWidget)w; | |
1826 XSetWindowAttributes xswa; | |
1827 int mask; | |
1828 | |
1829 (*xlwMenuWidgetClass->core_class.superclass->core_class.realize) | |
1830 (w, valueMask, attributes); | |
1831 | |
1832 xswa.save_under = True; | |
1833 xswa.cursor = mw->menu.cursor_shape; | |
1834 mask = CWSaveUnder | CWCursor; | |
1835 XChangeWindowAttributes (XtDisplay (w), XtWindow (w), mask, &xswa); | |
1836 | |
1837 mw->menu.windows [0].window = XtWindow (w); | |
1838 mw->menu.windows [0].x = w->core.x; | |
1839 mw->menu.windows [0].y = w->core.y; | |
1840 mw->menu.windows [0].width = w->core.width; | |
1841 mw->menu.windows [0].height = w->core.height; | |
1842 } | |
1843 | |
1844 /* Only the toplevel menubar/popup is a widget so it's the only one that | |
1845 receives expose events through Xt. So we repaint all the other panes | |
1846 when receiving an Expose event. */ | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1847 static void |
8860 | 1848 XlwMenuRedisplay (w, ev, region) |
1849 Widget w; | |
1850 XEvent* ev; | |
1851 Region region; | |
5626 | 1852 { |
1853 XlwMenuWidget mw = (XlwMenuWidget)w; | |
1854 int i; | |
1855 | |
8860 | 1856 /* If we have a depth beyond 1, it's because a submenu was displayed. |
1857 If the submenu has been destroyed, set the depth back to 1. */ | |
1858 if (submenu_destroyed) | |
1859 { | |
1860 mw->menu.old_depth = 1; | |
1861 submenu_destroyed = 0; | |
1862 } | |
1863 | |
5626 | 1864 for (i = 0; i < mw->menu.old_depth; i++) |
1865 display_menu (mw, i, False, NULL, NULL, NULL, NULL, NULL); | |
1866 } | |
1867 | |
33714
f957a9063fb1
(xlwmenu_redisplay): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31963
diff
changeset
|
1868 |
f957a9063fb1
(xlwmenu_redisplay): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31963
diff
changeset
|
1869 /* Part of a hack to make the menu redisplay when a tooltip frame |
f957a9063fb1
(xlwmenu_redisplay): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31963
diff
changeset
|
1870 over a menu item is unmapped. */ |
f957a9063fb1
(xlwmenu_redisplay): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31963
diff
changeset
|
1871 |
f957a9063fb1
(xlwmenu_redisplay): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31963
diff
changeset
|
1872 void |
f957a9063fb1
(xlwmenu_redisplay): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31963
diff
changeset
|
1873 xlwmenu_redisplay (w) |
f957a9063fb1
(xlwmenu_redisplay): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31963
diff
changeset
|
1874 Widget w; |
f957a9063fb1
(xlwmenu_redisplay): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31963
diff
changeset
|
1875 { |
f957a9063fb1
(xlwmenu_redisplay): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31963
diff
changeset
|
1876 XlwMenuRedisplay (w, NULL, None); |
f957a9063fb1
(xlwmenu_redisplay): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31963
diff
changeset
|
1877 } |
f957a9063fb1
(xlwmenu_redisplay): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
31963
diff
changeset
|
1878 |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1879 static void |
8860 | 1880 XlwMenuDestroy (w) |
1881 Widget w; | |
5626 | 1882 { |
1883 int i; | |
1884 XlwMenuWidget mw = (XlwMenuWidget) w; | |
1885 | |
8860 | 1886 if (pointer_grabbed) |
44750
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
1887 ungrab_all ((Widget)w, CurrentTime); |
8860 | 1888 pointer_grabbed = 0; |
1889 | |
1890 submenu_destroyed = 1; | |
1891 | |
5626 | 1892 release_drawing_gcs (mw); |
1893 release_shadow_gcs (mw); | |
1894 | |
1895 /* this doesn't come from the resource db but is created explicitly | |
1896 so we must free it ourselves. */ | |
1897 XFreePixmap (XtDisplay (mw), mw->menu.gray_pixmap); | |
1898 mw->menu.gray_pixmap = (Pixmap) -1; | |
1899 | |
8860 | 1900 #if 0 |
1901 /* Do free mw->menu.contents because nowadays we copy it | |
1902 during initialization. */ | |
1903 XtFree (mw->menu.contents); | |
1904 #endif | |
1905 | |
5626 | 1906 /* Don't free mw->menu.contents because that comes from our creator. |
1907 The `*_stack' elements are just pointers into `contents' so leave | |
1908 that alone too. But free the stacks themselves. */ | |
1909 if (mw->menu.old_stack) XtFree ((char *) mw->menu.old_stack); | |
1910 if (mw->menu.new_stack) XtFree ((char *) mw->menu.new_stack); | |
1911 | |
1912 /* Remember, you can't free anything that came from the resource | |
1913 database. This includes: | |
1914 mw->menu.cursor | |
1915 mw->menu.top_shadow_pixmap | |
1916 mw->menu.bottom_shadow_pixmap | |
1917 mw->menu.font | |
1918 Also the color cells of top_shadow_color, bottom_shadow_color, | |
1919 foreground, and button_foreground will never be freed until this | |
1920 client exits. Nice, eh? | |
1921 */ | |
1922 | |
1923 /* start from 1 because the one in slot 0 is w->core.window */ | |
1924 for (i = 1; i < mw->menu.windows_length; i++) | |
1925 XDestroyWindow (XtDisplay (mw), mw->menu.windows [i].window); | |
1926 if (mw->menu.windows) | |
1927 XtFree ((char *) mw->menu.windows); | |
1928 } | |
1929 | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1930 static Boolean |
8860 | 1931 XlwMenuSetValues (current, request, new) |
1932 Widget current; | |
1933 Widget request; | |
1934 Widget new; | |
5626 | 1935 { |
1936 XlwMenuWidget oldmw = (XlwMenuWidget)current; | |
1937 XlwMenuWidget newmw = (XlwMenuWidget)new; | |
1938 Boolean redisplay = False; | |
1939 int i; | |
1940 | |
1941 if (newmw->menu.contents | |
1942 && newmw->menu.contents->contents | |
1943 && newmw->menu.contents->contents->change >= VISIBLE_CHANGE) | |
1944 redisplay = True; | |
13899
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
1945 /* Do redisplay if the contents are entirely eliminated. */ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
1946 if (newmw->menu.contents |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
1947 && newmw->menu.contents->contents == 0 |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
1948 && newmw->menu.contents->change >= VISIBLE_CHANGE) |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
1949 redisplay = True; |
5626 | 1950 |
1951 if (newmw->core.background_pixel != oldmw->core.background_pixel | |
8860 | 1952 || newmw->menu.foreground != oldmw->menu.foreground |
61209
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1953 #ifdef HAVE_X_I18N |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1954 || newmw->menu.fontSet != oldmw->menu.fontSet |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1955 || (newmw->menu.fontSet == NULL && newmw->menu.font != oldmw->menu.font) |
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1956 #else |
60698
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
1957 || newmw->menu.font != oldmw->menu.font |
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
1958 #endif |
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
1959 ) |
5626 | 1960 { |
1961 release_drawing_gcs (newmw); | |
1962 make_drawing_gcs (newmw); | |
31287 | 1963 |
1964 release_shadow_gcs (newmw); | |
1965 /* Cause the shadow colors to be recalculated. */ | |
1966 newmw->menu.top_shadow_color = -1; | |
1967 newmw->menu.bottom_shadow_color = -1; | |
1968 make_shadow_gcs (newmw); | |
1969 | |
5626 | 1970 redisplay = True; |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1971 |
31369
6aa8a6e72c0f
(XlwMenuSetValues): Pass the correct pointer type to XtIsRealized.
Miles Bader <miles@gnu.org>
parents:
31364
diff
changeset
|
1972 if (XtIsRealized (current)) |
31364
8bafcf2cfd57
(XlwMenuSetValues): Only frob the display if the menu is actually displayed.
Miles Bader <miles@gnu.org>
parents:
31341
diff
changeset
|
1973 /* If the menu is currently displayed, change the display. */ |
8bafcf2cfd57
(XlwMenuSetValues): Only frob the display if the menu is actually displayed.
Miles Bader <miles@gnu.org>
parents:
31341
diff
changeset
|
1974 for (i = 0; i < oldmw->menu.windows_length; i++) |
8bafcf2cfd57
(XlwMenuSetValues): Only frob the display if the menu is actually displayed.
Miles Bader <miles@gnu.org>
parents:
31341
diff
changeset
|
1975 { |
8bafcf2cfd57
(XlwMenuSetValues): Only frob the display if the menu is actually displayed.
Miles Bader <miles@gnu.org>
parents:
31341
diff
changeset
|
1976 XSetWindowBackground (XtDisplay (oldmw), |
8bafcf2cfd57
(XlwMenuSetValues): Only frob the display if the menu is actually displayed.
Miles Bader <miles@gnu.org>
parents:
31341
diff
changeset
|
1977 oldmw->menu.windows [i].window, |
8bafcf2cfd57
(XlwMenuSetValues): Only frob the display if the menu is actually displayed.
Miles Bader <miles@gnu.org>
parents:
31341
diff
changeset
|
1978 newmw->core.background_pixel); |
8bafcf2cfd57
(XlwMenuSetValues): Only frob the display if the menu is actually displayed.
Miles Bader <miles@gnu.org>
parents:
31341
diff
changeset
|
1979 /* clear windows and generate expose events */ |
8bafcf2cfd57
(XlwMenuSetValues): Only frob the display if the menu is actually displayed.
Miles Bader <miles@gnu.org>
parents:
31341
diff
changeset
|
1980 XClearArea (XtDisplay (oldmw), oldmw->menu.windows[i].window, |
8bafcf2cfd57
(XlwMenuSetValues): Only frob the display if the menu is actually displayed.
Miles Bader <miles@gnu.org>
parents:
31341
diff
changeset
|
1981 0, 0, 0, 0, True); |
8bafcf2cfd57
(XlwMenuSetValues): Only frob the display if the menu is actually displayed.
Miles Bader <miles@gnu.org>
parents:
31341
diff
changeset
|
1982 } |
5626 | 1983 } |
1984 | |
60698
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
1985 #ifdef HAVE_X_I18N |
61209
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1986 if (newmw->menu.fontSet != oldmw->menu.fontSet && newmw->menu.fontSet != NULL) |
60698
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
1987 { |
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
1988 redisplay = True; |
61209
0769f2fae9d0
* xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents:
60829
diff
changeset
|
1989 newmw->menu.font_extents = XExtentsOfFontSet (newmw->menu.fontSet); |
60698
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
1990 } |
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
1991 #endif |
3e557e11645e
Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
59100
diff
changeset
|
1992 |
5626 | 1993 return redisplay; |
1994 } | |
1995 | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
1996 static void |
8860 | 1997 XlwMenuResize (w) |
1998 Widget w; | |
5626 | 1999 { |
2000 XlwMenuWidget mw = (XlwMenuWidget)w; | |
2001 | |
8860 | 2002 if (mw->menu.popped_up) |
2003 { | |
2004 /* Don't allow the popup menu to resize itself. */ | |
2005 mw->core.width = mw->menu.windows [0].width; | |
2006 mw->core.height = mw->menu.windows [0].height; | |
2007 mw->core.parent->core.width = mw->core.width ; | |
2008 mw->core.parent->core.height = mw->core.height ; | |
2009 } | |
2010 else | |
2011 { | |
2012 mw->menu.windows [0].width = mw->core.width; | |
2013 mw->menu.windows [0].height = mw->core.height; | |
2014 } | |
5626 | 2015 } |
2016 | |
2017 /* Action procedures */ | |
2018 static void | |
8860 | 2019 handle_single_motion_event (mw, ev) |
2020 XlwMenuWidget mw; | |
2021 XMotionEvent* ev; | |
5626 | 2022 { |
2023 widget_value* val; | |
2024 int level; | |
2025 | |
2026 if (!map_event_to_widget_value (mw, ev, &val, &level)) | |
2027 pop_new_stack_if_no_contents (mw); | |
2028 else | |
2029 set_new_state (mw, val, level); | |
2030 remap_menubar (mw); | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
2031 |
5626 | 2032 /* Sync with the display. Makes it feel better on X terms. */ |
2033 XSync (XtDisplay (mw), False); | |
2034 } | |
2035 | |
2036 static void | |
8860 | 2037 handle_motion_event (mw, ev) |
2038 XlwMenuWidget mw; | |
2039 XMotionEvent* ev; | |
5626 | 2040 { |
2041 int x = ev->x_root; | |
2042 int y = ev->y_root; | |
2043 int state = ev->state; | |
2044 | |
2045 handle_single_motion_event (mw, ev); | |
2046 | |
2047 /* allow motion events to be generated again */ | |
2048 if (ev->is_hint | |
2049 && XQueryPointer (XtDisplay (mw), ev->window, | |
2050 &ev->root, &ev->subwindow, | |
2051 &ev->x_root, &ev->y_root, | |
2052 &ev->x, &ev->y, | |
2053 &ev->state) | |
2054 && ev->state == state | |
2055 && (ev->x_root != x || ev->y_root != y)) | |
2056 handle_single_motion_event (mw, ev); | |
2057 } | |
2058 | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
2059 static void |
8860 | 2060 Start (w, ev, params, num_params) |
2061 Widget w; | |
2062 XEvent *ev; | |
2063 String *params; | |
2064 Cardinal *num_params; | |
5626 | 2065 { |
2066 XlwMenuWidget mw = (XlwMenuWidget)w; | |
2067 | |
8860 | 2068 if (!mw->menu.popped_up) |
2069 { | |
2070 menu_post_event = *ev; | |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2071 /* If event is set to CurrentTime, get the last known time stamp. |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2072 This is for calculating if (popup) menus should stay up after |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2073 a fast click. */ |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2074 if (menu_post_event.xbutton.time == CurrentTime) |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2075 menu_post_event.xbutton.time |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2076 = XtLastTimestampProcessed (XtDisplay (w)); |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2077 |
29469
f9b5fe053f7c
(x_alloc_nearest_color_for_widget, x_catch_errors, x_uncatch_errors)
Dave Love <fx@gnu.org>
parents:
27988
diff
changeset
|
2078 pop_up_menu (mw, (XButtonPressedEvent*) ev); |
8860 | 2079 } |
2080 else | |
9027 | 2081 { |
2082 /* If we push a button while the menu is posted semipermanently, | |
2083 releasing the button should always pop the menu down. */ | |
2084 next_release_must_exit = 1; | |
5626 | 2085 |
9027 | 2086 /* notes the absolute position of the menubar window */ |
2087 mw->menu.windows [0].x = ev->xmotion.x_root - ev->xmotion.x; | |
2088 mw->menu.windows [0].y = ev->xmotion.y_root - ev->xmotion.y; | |
2089 | |
2090 /* handles the down like a move, slots are compatible */ | |
2091 handle_motion_event (mw, &ev->xmotion); | |
2092 } | |
5626 | 2093 } |
2094 | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
2095 static void |
8860 | 2096 Drag (w, ev, params, num_params) |
2097 Widget w; | |
2098 XEvent *ev; | |
2099 String *params; | |
2100 Cardinal *num_params; | |
5626 | 2101 { |
2102 XlwMenuWidget mw = (XlwMenuWidget)w; | |
11987
9619c1121b43
(Drag): Do nothing unless menu.popped_up field is set.
Karl Heuer <kwzh@gnu.org>
parents:
11885
diff
changeset
|
2103 if (mw->menu.popped_up) |
9619c1121b43
(Drag): Do nothing unless menu.popped_up field is set.
Karl Heuer <kwzh@gnu.org>
parents:
11885
diff
changeset
|
2104 handle_motion_event (mw, &ev->xmotion); |
5626 | 2105 } |
2106 | |
13899
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2107 /* Do nothing. |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2108 This is how we handle presses and releases of modifier keys. */ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2109 static void |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2110 Nothing (w, ev, params, num_params) |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2111 Widget w; |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2112 XEvent *ev; |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2113 String *params; |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2114 Cardinal *num_params; |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2115 { |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2116 } |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2117 |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2118 static widget_value * |
57842
2c65a9fc7dec
* xlwmenu.c (find_first_selectable, find_next_selectable)
Jan Djärv <jan.h.d@swipnet.se>
parents:
53564
diff
changeset
|
2119 find_first_selectable (mw, item, skip_titles) |
44713
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2120 XlwMenuWidget mw; |
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2121 widget_value *item; |
57842
2c65a9fc7dec
* xlwmenu.c (find_first_selectable, find_next_selectable)
Jan Djärv <jan.h.d@swipnet.se>
parents:
53564
diff
changeset
|
2122 int skip_titles; |
44713
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2123 { |
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2124 widget_value *current = item; |
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2125 enum menu_separator separator; |
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2126 |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2127 while (lw_separator_p (current->name, &separator, 0) || !current->enabled |
57842
2c65a9fc7dec
* xlwmenu.c (find_first_selectable, find_next_selectable)
Jan Djärv <jan.h.d@swipnet.se>
parents:
53564
diff
changeset
|
2128 || (skip_titles && !current->call_data && !current->contents)) |
44713
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2129 if (current->next) |
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2130 current=current->next; |
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2131 else |
57842
2c65a9fc7dec
* xlwmenu.c (find_first_selectable, find_next_selectable)
Jan Djärv <jan.h.d@swipnet.se>
parents:
53564
diff
changeset
|
2132 return NULL; |
44713
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2133 |
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2134 return current; |
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2135 } |
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2136 |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2137 static widget_value * |
57842
2c65a9fc7dec
* xlwmenu.c (find_first_selectable, find_next_selectable)
Jan Djärv <jan.h.d@swipnet.se>
parents:
53564
diff
changeset
|
2138 find_next_selectable (mw, item, skip_titles) |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2139 XlwMenuWidget mw; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2140 widget_value *item; |
65713
ad24f42046b1
* xlwmenu.c (find_next_selectable):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
65684
diff
changeset
|
2141 int skip_titles; |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2142 { |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2143 widget_value *current = item; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2144 enum menu_separator separator; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2145 |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2146 while (current->next && (current=current->next) && |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2147 (lw_separator_p (current->name, &separator, 0) || !current->enabled |
57842
2c65a9fc7dec
* xlwmenu.c (find_first_selectable, find_next_selectable)
Jan Djärv <jan.h.d@swipnet.se>
parents:
53564
diff
changeset
|
2148 || (skip_titles && !current->call_data && !current->contents))) |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2149 ; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2150 |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2151 if (current == item) |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2152 { |
45147
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
2153 if (mw->menu.old_depth < 2) |
e10cf8f440ae
(xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents:
44966
diff
changeset
|
2154 return current; |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2155 current = mw->menu.old_stack [mw->menu.old_depth - 2]->contents; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2156 |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2157 while (lw_separator_p (current->name, &separator, 0) |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2158 || !current->enabled |
57842
2c65a9fc7dec
* xlwmenu.c (find_first_selectable, find_next_selectable)
Jan Djärv <jan.h.d@swipnet.se>
parents:
53564
diff
changeset
|
2159 || (skip_titles && !current->call_data |
2c65a9fc7dec
* xlwmenu.c (find_first_selectable, find_next_selectable)
Jan Djärv <jan.h.d@swipnet.se>
parents:
53564
diff
changeset
|
2160 && !current->contents)) |
44713
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2161 { |
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2162 if (current->next) |
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2163 current=current->next; |
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2164 |
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2165 if (current == item) |
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2166 break; |
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2167 } |
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2168 |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2169 } |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2170 |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2171 return current; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2172 } |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2173 |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2174 static widget_value * |
57842
2c65a9fc7dec
* xlwmenu.c (find_first_selectable, find_next_selectable)
Jan Djärv <jan.h.d@swipnet.se>
parents:
53564
diff
changeset
|
2175 find_prev_selectable (mw, item, skip_titles) |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2176 XlwMenuWidget mw; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2177 widget_value *item; |
65713
ad24f42046b1
* xlwmenu.c (find_next_selectable):
Dan Nicolaescu <dann@ics.uci.edu>
parents:
65684
diff
changeset
|
2178 int skip_titles; |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2179 { |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2180 widget_value *current = item; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2181 widget_value *prev = item; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2182 |
57842
2c65a9fc7dec
* xlwmenu.c (find_first_selectable, find_next_selectable)
Jan Djärv <jan.h.d@swipnet.se>
parents:
53564
diff
changeset
|
2183 while ((current=find_next_selectable (mw, current, skip_titles)) |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2184 != item) |
44713
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2185 { |
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2186 if (prev == current) |
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2187 break; |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2188 prev=current; |
44713
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2189 } |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2190 |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2191 return prev; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2192 } |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2193 |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2194 static void |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2195 Down (w, ev, params, num_params) |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2196 Widget w; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2197 XEvent *ev; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2198 String *params; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2199 Cardinal *num_params; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2200 { |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2201 XlwMenuWidget mw = (XlwMenuWidget) w; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2202 widget_value* selected_item = mw->menu.old_stack [mw->menu.old_depth - 1]; |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2203 int popup_menu_p = mw->menu.top_depth == 1; |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2204 |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2205 /* Inside top-level menu-bar? */ |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2206 if (mw->menu.old_depth == mw->menu.top_depth) |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2207 /* When <down> in the menu-bar is pressed, display the corresponding |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2208 sub-menu and select the first selectable menu item there. |
57842
2c65a9fc7dec
* xlwmenu.c (find_first_selectable, find_next_selectable)
Jan Djärv <jan.h.d@swipnet.se>
parents:
53564
diff
changeset
|
2209 If this is a popup menu, skip title item of the popup. */ |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2210 set_new_state (mw, |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2211 find_first_selectable (mw, |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2212 selected_item->contents, |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2213 popup_menu_p), |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2214 mw->menu.old_depth); |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2215 else |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2216 /* Highlight next possible (enabled and not separator) menu item. */ |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2217 set_new_state (mw, find_next_selectable (mw, selected_item, popup_menu_p), |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2218 mw->menu.old_depth - 1); |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2219 |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2220 remap_menubar (mw); |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2221 } |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2222 |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2223 static void |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2224 Up (w, ev, params, num_params) |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2225 Widget w; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2226 XEvent *ev; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2227 String *params; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2228 Cardinal *num_params; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2229 { |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2230 XlwMenuWidget mw = (XlwMenuWidget) w; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2231 widget_value* selected_item = mw->menu.old_stack [mw->menu.old_depth - 1]; |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2232 int popup_menu_p = mw->menu.top_depth == 1; |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2233 |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2234 /* Inside top-level menu-bar? */ |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2235 if (mw->menu.old_depth == mw->menu.top_depth) |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2236 { |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2237 /* FIXME: this is tricky. <up> in the menu-bar should select the |
44713
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2238 last selectable item in the list. So we select the first |
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2239 selectable one and find the previous selectable item. Is there |
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2240 a better way? */ |
57842
2c65a9fc7dec
* xlwmenu.c (find_first_selectable, find_next_selectable)
Jan Djärv <jan.h.d@swipnet.se>
parents:
53564
diff
changeset
|
2241 /* If this is a popup menu, skip title item of the popup. */ |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2242 set_new_state (mw, |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2243 find_first_selectable (mw, |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2244 selected_item->contents, |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2245 popup_menu_p), |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2246 mw->menu.old_depth); |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2247 remap_menubar (mw); |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2248 selected_item = mw->menu.old_stack [mw->menu.old_depth - 1]; |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2249 set_new_state (mw, |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2250 find_prev_selectable (mw, |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2251 selected_item, |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2252 popup_menu_p), |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2253 mw->menu.old_depth - 1); |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2254 } |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2255 else |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2256 /* Highlight previous (enabled and not separator) menu item. */ |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2257 set_new_state (mw, find_prev_selectable (mw, selected_item, popup_menu_p), |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2258 mw->menu.old_depth - 1); |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2259 |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2260 remap_menubar (mw); |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2261 } |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2262 |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2263 void |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2264 Left (w, ev, params, num_params) |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2265 Widget w; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2266 XEvent *ev; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2267 String *params; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2268 Cardinal *num_params; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2269 { |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2270 XlwMenuWidget mw = (XlwMenuWidget) w; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2271 widget_value* selected_item = mw->menu.old_stack [mw->menu.old_depth - 1]; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2272 |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2273 /* Inside top-level menu-bar? */ |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2274 if (mw->menu.old_depth == mw->menu.top_depth) |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2275 /* When <left> in the menu-bar is pressed, display the previous item on |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2276 the menu-bar. If the current item is the first one, highlight the |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2277 last item in the menubar (probably Help). */ |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2278 set_new_state (mw, find_prev_selectable (mw, selected_item, 0), |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2279 mw->menu.old_depth - 1); |
48929
d81c005163cb
(pop_new_stack_if_no_contents): Do nothing if new_depth is 1.
Richard M. Stallman <rms@gnu.org>
parents:
48479
diff
changeset
|
2280 else if (mw->menu.old_depth == 1 |
d81c005163cb
(pop_new_stack_if_no_contents): Do nothing if new_depth is 1.
Richard M. Stallman <rms@gnu.org>
parents:
48479
diff
changeset
|
2281 && selected_item->contents) /* Is this menu item expandable? */ |
d81c005163cb
(pop_new_stack_if_no_contents): Do nothing if new_depth is 1.
Richard M. Stallman <rms@gnu.org>
parents:
48479
diff
changeset
|
2282 { |
d81c005163cb
(pop_new_stack_if_no_contents): Do nothing if new_depth is 1.
Richard M. Stallman <rms@gnu.org>
parents:
48479
diff
changeset
|
2283 set_new_state (mw, selected_item->contents, mw->menu.old_depth); |
d81c005163cb
(pop_new_stack_if_no_contents): Do nothing if new_depth is 1.
Richard M. Stallman <rms@gnu.org>
parents:
48479
diff
changeset
|
2284 remap_menubar (mw); |
d81c005163cb
(pop_new_stack_if_no_contents): Do nothing if new_depth is 1.
Richard M. Stallman <rms@gnu.org>
parents:
48479
diff
changeset
|
2285 selected_item = mw->menu.old_stack [mw->menu.old_depth - 1]; |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2286 if (!selected_item->enabled && find_first_selectable (mw, |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2287 selected_item, |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2288 0)) |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2289 set_new_state (mw, find_first_selectable (mw, selected_item, 0), |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2290 mw->menu.old_depth - 1); |
48929
d81c005163cb
(pop_new_stack_if_no_contents): Do nothing if new_depth is 1.
Richard M. Stallman <rms@gnu.org>
parents:
48479
diff
changeset
|
2291 } |
d81c005163cb
(pop_new_stack_if_no_contents): Do nothing if new_depth is 1.
Richard M. Stallman <rms@gnu.org>
parents:
48479
diff
changeset
|
2292 |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2293 else |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2294 { |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2295 pop_new_stack_if_no_contents (mw); |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2296 set_new_state (mw, mw->menu.old_stack [mw->menu.old_depth - 2], |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2297 mw->menu.old_depth - 2); |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2298 } |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2299 |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2300 remap_menubar (mw); |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2301 } |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2302 |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2303 void |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2304 Right (w, ev, params, num_params) |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2305 Widget w; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2306 XEvent *ev; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2307 String *params; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2308 Cardinal *num_params; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2309 { |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2310 XlwMenuWidget mw = (XlwMenuWidget) w; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2311 widget_value* selected_item = mw->menu.old_stack [mw->menu.old_depth - 1]; |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2312 |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2313 /* Inside top-level menu-bar? */ |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2314 if (mw->menu.old_depth == mw->menu.top_depth) |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2315 /* When <right> in the menu-bar is pressed, display the next item on |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2316 the menu-bar. If the current item is the last one, highlight the |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2317 first item (probably File). */ |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2318 set_new_state (mw, find_next_selectable (mw, selected_item, 0), |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2319 mw->menu.old_depth - 1); |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2320 else if (selected_item->contents) /* Is this menu item expandable? */ |
44713
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2321 { |
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2322 set_new_state (mw, selected_item->contents, mw->menu.old_depth); |
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2323 remap_menubar (mw); |
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2324 selected_item = mw->menu.old_stack [mw->menu.old_depth - 1]; |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2325 if (!selected_item->enabled && find_first_selectable (mw, |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2326 selected_item, |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2327 0)) |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2328 set_new_state (mw, find_first_selectable (mw, selected_item, 0), |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2329 mw->menu.old_depth - 1); |
44713
a05c8614feee
(find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents:
44707
diff
changeset
|
2330 } |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2331 else |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2332 { |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2333 pop_new_stack_if_no_contents (mw); |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2334 set_new_state (mw, mw->menu.old_stack [mw->menu.old_depth - 2], |
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2335 mw->menu.old_depth - 2); |
44707
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2336 } |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2337 |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2338 remap_menubar (mw); |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2339 } |
3444517c6483
(xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents:
41767
diff
changeset
|
2340 |
13899
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2341 /* Handle key press and release events while menu is popped up. |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2342 Our action is to get rid of the menu. */ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2343 static void |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2344 Key (w, ev, params, num_params) |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2345 Widget w; |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2346 XEvent *ev; |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2347 String *params; |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2348 Cardinal *num_params; |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2349 { |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2350 XlwMenuWidget mw = (XlwMenuWidget)w; |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2351 |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2352 /* Pop down everything. */ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2353 mw->menu.new_depth = 1; |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2354 remap_menubar (mw); |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2355 |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2356 if (mw->menu.popped_up) |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2357 { |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2358 mw->menu.popped_up = False; |
44750
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
2359 ungrab_all ((Widget)mw, ev->xmotion.time); |
13899
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2360 if (XtIsShell (XtParent ((Widget) mw))) |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2361 XtPopdown (XtParent ((Widget) mw)); |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2362 else |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2363 { |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2364 XtRemoveGrab ((Widget) mw); |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2365 display_menu (mw, 0, False, NULL, NULL, NULL, NULL, NULL); |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2366 } |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2367 } |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2368 |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2369 /* callback */ |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2370 XtCallCallbackList ((Widget)mw, mw->menu.select, (XtPointer)0); |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2371 } |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2372 |
3fbe9b840379
(xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents:
13560
diff
changeset
|
2373 static void |
8860 | 2374 Select (w, ev, params, num_params) |
2375 Widget w; | |
2376 XEvent *ev; | |
2377 String *params; | |
2378 Cardinal *num_params; | |
5626 | 2379 { |
2380 XlwMenuWidget mw = (XlwMenuWidget)w; | |
2381 widget_value* selected_item = mw->menu.old_stack [mw->menu.old_depth - 1]; | |
31963
833428005bf6
* xlwmenu.c: Before including <X11/Xos.h> on SUN, define SUNOS41
Sam Steingold <sds@gnu.org>
parents:
31370
diff
changeset
|
2382 |
8860 | 2383 /* If user releases the button quickly, without selecting anything, |
2384 after the initial down-click that brought the menu up, | |
2385 do nothing. */ | |
2386 if ((selected_item == 0 | |
2387 || ((widget_value *) selected_item)->call_data == 0) | |
2388 && !next_release_must_exit | |
2389 && (ev->xbutton.time - menu_post_event.xbutton.time | |
2390 < XtGetMultiClickTime (XtDisplay (w)))) | |
2391 return; | |
2392 | |
2393 /* pop down everything. */ | |
5626 | 2394 mw->menu.new_depth = 1; |
2395 remap_menubar (mw); | |
2396 | |
2397 if (mw->menu.popped_up) | |
2398 { | |
2399 mw->menu.popped_up = False; | |
44750
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
2400 ungrab_all ((Widget)mw, ev->xmotion.time); |
9033 | 2401 if (XtIsShell (XtParent ((Widget) mw))) |
2402 XtPopdown (XtParent ((Widget) mw)); | |
9027 | 2403 else |
2404 { | |
2405 XtRemoveGrab ((Widget) mw); | |
2406 display_menu (mw, 0, False, NULL, NULL, NULL, NULL, NULL); | |
2407 } | |
5626 | 2408 } |
2409 | |
2410 /* callback */ | |
2411 XtCallCallbackList ((Widget)mw, mw->menu.select, (XtPointer)selected_item); | |
2412 } | |
2413 | |
2414 | |
2415 /* Special code to pop-up a menu */ | |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2416 static void |
8860 | 2417 pop_up_menu (mw, event) |
2418 XlwMenuWidget mw; | |
2419 XButtonPressedEvent* event; | |
5626 | 2420 { |
2421 int x = event->x_root; | |
2422 int y = event->y_root; | |
2423 int w; | |
2424 int h; | |
2425 int borderwidth = mw->menu.shadow_thickness; | |
2426 Screen* screen = XtScreen (mw); | |
9700
d09dc2f44ecb
(pop_up_menu): Pass a Display * to x_catch_errors, etc.
Richard M. Stallman <rms@gnu.org>
parents:
9395
diff
changeset
|
2427 Display *display = XtDisplay (mw); |
17622
742a57e66f7d
(pop_up_menu): Update the call to x_catch_errors.
Richard M. Stallman <rms@gnu.org>
parents:
16917
diff
changeset
|
2428 int count; |
5626 | 2429 |
8860 | 2430 next_release_must_exit = 0; |
2431 | |
5626 | 2432 XtCallCallbackList ((Widget)mw, mw->menu.open, NULL); |
2433 | |
9033 | 2434 if (XtIsShell (XtParent ((Widget)mw))) |
9027 | 2435 size_menu (mw, 0); |
5626 | 2436 |
2437 w = mw->menu.windows [0].width; | |
2438 h = mw->menu.windows [0].height; | |
2439 | |
2440 x -= borderwidth; | |
2441 y -= borderwidth; | |
2442 if (x < borderwidth) | |
2443 x = borderwidth; | |
2444 if (x + w + 2 * borderwidth > WidthOfScreen (screen)) | |
2445 x = WidthOfScreen (screen) - w - 2 * borderwidth; | |
2446 if (y < borderwidth) | |
2447 y = borderwidth; | |
2448 if (y + h + 2 * borderwidth> HeightOfScreen (screen)) | |
2449 y = HeightOfScreen (screen) - h - 2 * borderwidth; | |
2450 | |
2451 mw->menu.popped_up = True; | |
9033 | 2452 if (XtIsShell (XtParent ((Widget)mw))) |
9027 | 2453 { |
9033 | 2454 XtConfigureWidget (XtParent ((Widget)mw), x, y, w, h, |
2455 XtParent ((Widget)mw)->core.border_width); | |
2456 XtPopup (XtParent ((Widget)mw), XtGrabExclusive); | |
9027 | 2457 display_menu (mw, 0, False, NULL, NULL, NULL, NULL, NULL); |
2458 mw->menu.windows [0].x = x + borderwidth; | |
2459 mw->menu.windows [0].y = y + borderwidth; | |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2460 mw->menu.top_depth = 1; /* Popup menus don't have a bar so top is 1 */ |
9027 | 2461 } |
2462 else | |
2463 { | |
2464 XEvent *ev = (XEvent *) event; | |
2465 | |
9092
0033f98d2ffd
Clean up of temporary changes used to try to find a workaround for the
Paul Reilly <pmr@pajato.com>
parents:
9086
diff
changeset
|
2466 XtAddGrab ((Widget) mw, True, True); |
9027 | 2467 |
2468 /* notes the absolute position of the menubar window */ | |
2469 mw->menu.windows [0].x = ev->xmotion.x_root - ev->xmotion.x; | |
2470 mw->menu.windows [0].y = ev->xmotion.y_root - ev->xmotion.y; | |
53564
609ef1718642
Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents:
52401
diff
changeset
|
2471 mw->menu.top_depth = 2; |
9027 | 2472 } |
2473 | |
8860 | 2474 #ifdef emacs |
17622
742a57e66f7d
(pop_up_menu): Update the call to x_catch_errors.
Richard M. Stallman <rms@gnu.org>
parents:
16917
diff
changeset
|
2475 count = x_catch_errors (display); |
8860 | 2476 #endif |
44750
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
2477 if (XtGrabPointer ((Widget)mw, False, |
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
2478 (PointerMotionMask |
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
2479 | PointerMotionHintMask |
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
2480 | ButtonReleaseMask |
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
2481 | ButtonPressMask), |
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
2482 GrabModeAsync, GrabModeAsync, None, |
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
2483 mw->menu.cursor_shape, |
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
2484 event->time) == Success) |
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
2485 { |
44931
18616c930588
Do not grab keyboard if installation-directory is
Jan Djärv <jan.h.d@swipnet.se>
parents:
44750
diff
changeset
|
2486 if (! GRAB_KEYBOARD |
44750
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
2487 || XtGrabKeyboard ((Widget)mw, False, GrabModeAsync, |
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
2488 GrabModeAsync, event->time) == Success) |
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
2489 { |
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
2490 XtSetKeyboardFocus((Widget)mw, None); |
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
2491 pointer_grabbed = 1; |
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
2492 } |
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
2493 else |
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
2494 XtUngrabPointer ((Widget)mw, event->time); |
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
2495 } |
2e7603e0c455
Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents:
44713
diff
changeset
|
2496 |
8860 | 2497 #ifdef emacs |
9700
d09dc2f44ecb
(pop_up_menu): Pass a Display * to x_catch_errors, etc.
Richard M. Stallman <rms@gnu.org>
parents:
9395
diff
changeset
|
2498 if (x_had_errors_p (display)) |
8860 | 2499 { |
2500 pointer_grabbed = 0; | |
2501 XtUngrabPointer ((Widget)mw, event->time); | |
2502 } | |
17622
742a57e66f7d
(pop_up_menu): Update the call to x_catch_errors.
Richard M. Stallman <rms@gnu.org>
parents:
16917
diff
changeset
|
2503 x_uncatch_errors (display, count); |
8860 | 2504 #endif |
5626 | 2505 |
2506 handle_motion_event (mw, (XMotionEvent*)event); | |
2507 } | |
52401 | 2508 |
2509 /* arch-tag: 657f43dd-dfd0-4cc9-910c-52935f01176e | |
2510 (do not change this comment) */ |