annotate lwlib/xlwmenu.c @ 62675:114ecd5ee47b

Add more pointers to ports of Unix tools to Windows, and to the Emacs Wiki (which contains building instructions for Windows). Reword image library instructions and remove obsolete incompatibility information.
author Juanma Barranquero <lekktu@gmail.com>
date Tue, 24 May 2005 10:40:51 +0000
parents 0769f2fae9d0
children 23a17af379b1 7a3341d65a12
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2 Copyright (C) 1992 Lucid, Inc.
60698
3e557e11645e Add support for I18N to Lucid menus.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 59100
diff changeset
3 Copyright (C) 2002, 2005 Free Software Foundation, Inc.
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 This file is part of the Lucid Widget Library.
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 modify it under the terms of the GNU General Public License as published by
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9 the Free Software Foundation; either version 2, or (at your option)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 any later version.
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 GNU General Public License for more details.
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
15742
80562f089595 Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 14728
diff changeset
18 along with GNU Emacs; see the file COPYING. If not, write to the
80562f089595 Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 14728
diff changeset
19 Free Software Foundation, Inc., 59 Temple Place - Suite 330,
80562f089595 Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 14728
diff changeset
20 Boston, MA 02111-1307, USA. */
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 /* Created by devin@lucid.com */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
7fb1caba0f51 Include ../src/lisp.h.
Richard M. Stallman <rms@gnu.org>
parents: 37524
diff changeset
29
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 #include <stdio.h>
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 #include <X11/IntrinsicP.h>
9033
3c36c72db2bb *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 9027
diff changeset
41 #include <X11/ObjectP.h>
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 #include <X11/StringDefs.h>
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43 #include <X11/cursorfont.h>
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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*));
f9b5fe053f7c (x_alloc_nearest_color_for_widget, x_catch_errors, x_uncatch_errors)
Dave Love <fx@gnu.org>
parents: 27988
diff changeset
62 extern int x_uncatch_errors __P ((Display*, int));
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*));
f9b5fe053f7c (x_alloc_nearest_color_for_widget, x_catch_errors, x_uncatch_errors)
Dave Love <fx@gnu.org>
parents: 27988
diff changeset
64 extern int 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
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
79
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
80 static int pointer_grabbed;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
81 static XEvent menu_post_event;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 ";
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
4b2f9e2a9a29 Change default values.
Pavel Janík <Pavel@Janik.cz>
parents: 44931
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 {XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 {XtNbuttonForeground, XtCButtonForeground, XtRPixel, sizeof(Pixel),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 offset(menu.button_foreground), XtRString, "XtDefaultForeground"},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 {XtNmargin, XtCMargin, XtRDimension, sizeof(Dimension),
44966
4b2f9e2a9a29 Change default values.
Pavel Janík <Pavel@Janik.cz>
parents: 44931
diff changeset
151 offset(menu.margin), XtRImmediate, (XtPointer)1},
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 {XtNhorizontalSpacing, XtCMargin, XtRDimension, sizeof(Dimension),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 offset(menu.horizontal_spacing), XtRImmediate, (XtPointer)3},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 {XtNverticalSpacing, XtCMargin, XtRDimension, sizeof(Dimension),
44966
4b2f9e2a9a29 Change default values.
Pavel Janík <Pavel@Janik.cz>
parents: 44931
diff changeset
155 offset(menu.vertical_spacing), XtRImmediate, (XtPointer)2},
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 {XtNarrowSpacing, XtCMargin, XtRDimension, sizeof(Dimension),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 offset(menu.arrow_spacing), XtRImmediate, (XtPointer)10},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
159 {XmNshadowThickness, XmCShadowThickness, XtRDimension,
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 sizeof (Dimension), offset (menu.shadow_thickness),
44966
4b2f9e2a9a29 Change default values.
Pavel Janík <Pavel@Janik.cz>
parents: 44931
diff changeset
161 XtRImmediate, (XtPointer)1},
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 {XmNtopShadowColor, XmCTopShadowColor, XtRPixel, sizeof (Pixel),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 offset (menu.top_shadow_color), XtRImmediate, (XtPointer)-1},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 {XmNbottomShadowColor, XmCBottomShadowColor, XtRPixel, sizeof (Pixel),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 offset (menu.bottom_shadow_color), XtRImmediate, (XtPointer)-1},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 {XmNtopShadowPixmap, XmCTopShadowPixmap, XtRPixmap, sizeof (Pixmap),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 offset (menu.top_shadow_pixmap), XtRImmediate, (XtPointer)None},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 {XmNbottomShadowPixmap, XmCBottomShadowPixmap, XtRPixmap, sizeof (Pixmap),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 offset (menu.bottom_shadow_pixmap), XtRImmediate, (XtPointer)None},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 {XtNmenu, XtCMenu, XtRPointer, sizeof(XtPointer),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 offset(menu.contents), XtRImmediate, (XtPointer)NULL},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 {XtNcursor, XtCCursor, XtRCursor, sizeof(Cursor),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 offset(menu.cursor_shape), XtRString, (XtPointer)"right_ptr"},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 {XtNhorizontal, XtCHorizontal, XtRInt, sizeof(int),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 offset(menu.horizontal), XtRImmediate, (XtPointer)True},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 };
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 #undef offset
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 static Boolean XlwMenuSetValues();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187 static void XlwMenuRealize();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 static void XlwMenuRedisplay();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 static void XlwMenuResize();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 static void XlwMenuInitialize();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 static void XlwMenuRedisplay();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 static void XlwMenuDestroy();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 static void XlwMenuClassInitialize();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 static void Start();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
a24391626ba1 (separator_height): Prototype.
Dave Love <fx@gnu.org>
parents: 45152
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 xlwMenuActionsList [] =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 {"start", Start},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 };
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 #define SuperClass ((CoreWidgetClass)&coreClassRec)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 XlwMenuClassRec xlwMenuClassRec =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 "XlwMenu", /* class_name */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 sizeof(XlwMenuRec), /* size */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 XlwMenuClassInitialize, /* class_initialize */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 NULL, /* class_part_initialize */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 FALSE, /* class_inited */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 XlwMenuInitialize, /* initialize */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 NULL, /* initialize_hook */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 XlwMenuRealize, /* realize */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 xlwMenuActionsList, /* actions */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 XtNumber(xlwMenuActionsList), /* num_actions */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 xlwMenuResources, /* resources */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 XtNumber(xlwMenuResources), /* resource_count */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 NULLQUARK, /* xrm_class */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 TRUE, /* compress_enterleave */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 FALSE, /* visible_interest */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 XlwMenuDestroy, /* destroy */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 XlwMenuResize, /* resize */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 XlwMenuRedisplay, /* expose */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248 XlwMenuSetValues, /* set_values */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 NULL, /* set_values_hook */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 XtInheritSetValuesAlmost, /* set_values_almost */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 NULL, /* get_values_hook */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 NULL, /* accept_focus */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 XtVersion, /* version */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 NULL, /* callback_private */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 xlwMenuTranslations, /* tm_table */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 XtInheritQueryGeometry, /* query_geometry */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 XtInheritDisplayAccelerator, /* display_accelerator */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 NULL /* extension */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 }, /* XlwMenuClass fields initialization */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 0 /* dummy */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 },
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 };
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 WidgetClass xlwMenuWidgetClass = (WidgetClass) &xlwMenuClassRec;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
267 int submenu_destroyed;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
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
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
274 static int next_release_must_exit;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
275
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
301 push_new_stack (mw, val)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
302 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
303 widget_value* val;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305 if (!mw->menu.new_stack)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 mw->menu.new_stack_length = 10;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 mw->menu.new_stack =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 (widget_value**)XtCalloc (mw->menu.new_stack_length,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 sizeof (widget_value*));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312 else if (mw->menu.new_depth == mw->menu.new_stack_length)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314 mw->menu.new_stack_length *= 2;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 mw->menu.new_stack =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 (widget_value**)XtRealloc ((char*)mw->menu.new_stack,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317 mw->menu.new_stack_length * sizeof (widget_value*));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 mw->menu.new_stack [mw->menu.new_depth++] = val;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
323 pop_new_stack_if_no_contents (mw)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
324 XlwMenuWidget mw;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 if (!mw->menu.new_stack [mw->menu.new_depth - 1]->contents)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329 mw->menu.new_depth -= 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
333 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
334 make_old_stack_space (mw, n)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
335 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
336 int n;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338 if (!mw->menu.old_stack)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 mw->menu.old_stack_length = 10;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341 mw->menu.old_stack =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 (widget_value**)XtCalloc (mw->menu.old_stack_length,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343 sizeof (widget_value*));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 else if (mw->menu.old_stack_length < n)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 mw->menu.old_stack_length *= 2;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 mw->menu.old_stack =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349 (widget_value**)XtRealloc ((char*)mw->menu.old_stack,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 mw->menu.old_stack_length * sizeof (widget_value*));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354 /* Size code */
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
355 int
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
356 string_width (mw, s)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
357 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
358 char *s;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371 XTextExtents (mw->menu.font, s, strlen (s), &drop, &drop, &drop, &xcs);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372 return xcs.width;
61209
0769f2fae9d0 * xlwmenu.c (string_width):
Jan Djärv <jan.h.d@swipnet.se>
parents: 60829
diff changeset
373
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
374 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 static int
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
392 arrow_width (mw)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
393 XlwMenuWidget mw;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 static XtResource
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 {"labelString", "LabelString", XtRString, sizeof(String),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 0, XtRImmediate, 0},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 };
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425 static char*
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
426 resource_widget_value (mw, val)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
427 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
428 widget_value *val;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430 if (!val->toolkit_data)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432 char* resourced_name = NULL;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 char* complete_name;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 XtGetSubresources ((Widget) mw,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 (XtPointer) &resourced_name,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436 val->name, val->name,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437 nameResource, 1, NULL, 0);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438 if (!resourced_name)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 resourced_name = val->name;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 int complete_length =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448 strlen (resourced_name) + strlen (val->value) + 2;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449 complete_name = XtMalloc (complete_length);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450 *complete_name = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 strcat (complete_name, resourced_name);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452 strcat (complete_name, " ");
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453 strcat (complete_name, val->value);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456 val->toolkit_data = complete_name;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457 val->free_toolkit_data = True;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
458 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
459 return (char*)val->toolkit_data;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
460 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
461
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
462 /* Returns the sizes of an item */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
466 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
467 widget_value* val;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
468 int horizontal_p;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
469 int* label_width;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
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
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
472 int* height;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
479 *label_width = 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
482 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
483 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
488 *label_width =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
489 string_width (mw, resource_widget_value (mw, val))
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
492 *rest_width = mw->menu.horizontal_spacing + mw->menu.shadow_thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
493 if (!horizontal_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
494 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
497 *rest_width += arrow_width (mw) + mw->menu.arrow_spacing;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
509 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
510 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
511 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
512
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
513 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
514 size_menu (mw, level)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
515 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
516 int level;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
524 int horizontal_p = mw->menu.horizontal && (level == 0);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
525 widget_value* val;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
526 window_state* ws;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
527
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
532 ws->width = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
533 ws->height = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537 for (val = mw->menu.old_stack [level]->contents; val; val = val->next)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
538 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541 if (horizontal_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
542 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543 ws->width += label_width + rest_width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
544 if (height > ws->height)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
545 ws->height = height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
546 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
547 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
548 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
549 if (label_width > ws->label_width)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
550 ws->label_width = label_width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
551 if (rest_width > max_rest_width)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
555 ws->height += height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
556 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
567 ws->width += 2 * mw->menu.shadow_thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
575 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
576
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
577
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
582 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
583 Window window;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
584 GC gc;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
585 int x;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
586 int y;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
640 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
646 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
647 Window window;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
648 int x;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
649 int y;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
650 int width;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
651 int height;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
655 Display *dpy = XtDisplay (mw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
656 GC top_gc = !erase_p ? mw->menu.shadow_top_gc : mw->menu.background_gc;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
657 GC bottom_gc = !erase_p ? mw->menu.shadow_bottom_gc : mw->menu.background_gc;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
658 int thickness = mw->menu.shadow_thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
669 points [0].x = x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
670 points [0].y = y;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
671 points [1].x = x + width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
672 points [1].y = y;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
673 points [2].x = x + width - thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674 points [2].y = y + thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
675 points [3].x = x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
676 points [3].y = y + thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
677 XFillPolygon (dpy, window, top_gc, points, 4, Convex, CoordModeOrigin);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
678 points [0].x = x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
679 points [0].y = y + thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
680 points [1].x = x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
681 points [1].y = y + height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
682 points [2].x = x + thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683 points [2].y = y + height - thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
684 points [3].x = x + thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
685 points [3].y = y + thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
686 XFillPolygon (dpy, window, top_gc, points, 4, Convex, CoordModeOrigin);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
687 points [0].x = x + width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
688 points [0].y = y;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
689 points [1].x = x + width - thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
690 points [1].y = y + thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
691 points [2].x = x + width - thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
692 points [2].y = y + height - thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
693 points [3].x = x + width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
694 points [3].y = y + height - thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
695 XFillPolygon (dpy, window, bottom_gc, points, 4, Convex, CoordModeOrigin);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
696 points [0].x = x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
697 points [0].y = y + height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
698 points [1].x = x + width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
699 points [1].y = y + height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
700 points [2].x = x + width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
701 points [2].y = y + height - thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
702 points [3].x = x + thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
703 points [3].y = y + height - thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
704 XFillPolygon (dpy, window, bottom_gc, points, 4, Convex, CoordModeOrigin);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
705 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
974 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
975 widget_value* val;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
976 window_state* ws;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
977 XPoint* where;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
978 Boolean highlighted_p;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
979 Boolean horizontal_p;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
980 Boolean just_compute_p;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
981 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
982 GC deco_gc;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
988 int h_spacing = mw->menu.horizontal_spacing;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
989 int v_spacing = mw->menu.vertical_spacing;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
990 int label_width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
993 int height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
997
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1001
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1002 if (horizontal_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1003 width = label_width + rest_width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1004 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1005 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1006 label_width = ws->label_width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1007 width = ws->width - 2 * shadow;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1008 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1009
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1010 /* Only highlight an enabled item that has a callback. */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1011 if (highlighted_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1012 if (!val->enabled || !(val->call_data || val->contents))
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1013 highlighted_p = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1014
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1015 /* do the drawing. */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1016 if (!just_compute_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1017 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1018 /* Add the shadow border of the containing menu */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1019 int x = where->x + shadow;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1020 int y = where->y + shadow;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1028 /* pick the foreground and background GC. */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1033 deco_gc = mw->menu.foreground_gc;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1034
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1035 if (separator_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1068 y + v_spacing + shadow + font_ascent,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1071 if (!horizontal_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1080 if (val->contents)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1081 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1082 int a_w = arrow_width (mw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1089 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1090 else if (val->key)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1104 x + label_width + mw->menu.arrow_spacing,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1105 y + v_spacing + shadow + font_ascent,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1106 val->key, strlen (val->key));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1107 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1108 }
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1109 else
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
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
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1112 mw->menu.background_gc,
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1113 x + shadow, y + shadow,
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
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
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
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
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1118 }
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1119
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1123 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1126 where->x += width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1127 where->y += height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1128 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1129
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1130 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1131 display_menu (mw, level, just_compute_p, highlighted_pos, hit, hit_return,
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1132 this, that)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1133 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1134 int level;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1135 Boolean just_compute_p;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1136 XPoint* highlighted_pos;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1137 XPoint* hit;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1138 widget_value** hit_return;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1139 widget_value* this;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1140 widget_value* that;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1141 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1142 widget_value* val;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1143 widget_value* following_item;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1144 window_state* ws;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1145 XPoint where;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1146 int horizontal_p = mw->menu.horizontal && (level == 0);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1147 int highlighted_p;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1153
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1156
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1157 if (level < mw->menu.old_depth - 1)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1160 following_item = NULL;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1161
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1162 if (hit)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1163 *hit_return = NULL;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1164
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1165 where.x = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1166 where.y = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1167
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1168 ws = &mw->menu.windows [level];
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1169 for (val = mw->menu.old_stack [level]->contents; val; val = val->next)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1170 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1171 highlighted_p = val == following_item;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1172 if (highlighted_p && highlighted_pos)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1173 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1174 if (horizontal_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1175 highlighted_pos->x = where.x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1176 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1177 highlighted_pos->y = where.y;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1180 just_compute_this_one_p =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1181 just_compute_p || ((this || that) && val != this && val != that);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1182
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1183 display_menu_item (mw, val, ws, &where, highlighted_p, horizontal_p,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1184 just_compute_this_one_p);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1185
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1186 if (highlighted_p && highlighted_pos)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1187 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1188 if (horizontal_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1189 highlighted_pos->y = where.y;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1190 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1191 highlighted_pos->x = where.x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1192 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1193
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1194 if (hit
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1195 && !*hit_return
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1205
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1206 if (horizontal_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1207 where.y = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1208 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1209 where.x = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1215 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1216
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1217 /* Motion code */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1218 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1219 set_new_state (mw, val, level)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1220 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1221 widget_value* val;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1222 int level;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1223 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1226 mw->menu.new_depth = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1227 for (i = 0; i < level; i++)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1228 push_new_stack (mw, mw->menu.old_stack [i]);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1229 push_new_stack (mw, val);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1230 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1231
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1232 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1233 make_windows_if_needed (mw, n)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1234 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1235 int n;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1236 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1237 int i;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1238 int start_at;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1239 XSetWindowAttributes xswa;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1240 int mask;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1241 Window root = RootWindowOfScreen (DefaultScreenOfDisplay (XtDisplay (mw)));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1244 if (mw->menu.windows_length >= n)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1245 return;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1246
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1247 xswa.save_under = True;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1248 xswa.override_redirect = True;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1249 xswa.background_pixel = mw->core.background_pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1250 xswa.border_pixel = mw->core.border_pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1251 xswa.event_mask =
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1252 ExposureMask | PointerMotionMask | PointerMotionHintMask
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1253 | ButtonReleaseMask | ButtonPressMask;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1254 xswa.cursor = mw->menu.cursor_shape;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1255 mask = CWSaveUnder | CWOverrideRedirect | CWBackPixel | CWBorderPixel
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1258 if (!mw->menu.windows)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1259 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1260 mw->menu.windows =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1261 (window_state*)XtMalloc (n * sizeof (window_state));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1262 start_at = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1263 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1264 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1265 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1266 mw->menu.windows =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1267 (window_state*)XtRealloc ((char*)mw->menu.windows,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1268 n * sizeof (window_state));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1269 start_at = mw->menu.windows_length;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1270 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1271 mw->menu.windows_length = n;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1272
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1273 windows = mw->menu.windows;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1274
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1275 for (i = start_at; i < n; i++)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1276 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1277 windows [i].x = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1278 windows [i].y = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1279 windows [i].width = 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1280 windows [i].height = 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1281 windows [i].window =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1282 XCreateWindow (XtDisplay (mw), root, 0, 0, 1, 1,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1283 0, 0, CopyFromParent, CopyFromParent, mask, &xswa);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1284 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1285 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1304 /* Make the window fit in the screen */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1305 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1306 fit_to_screen (mw, ws, previous_ws, horizontal_p)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1307 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1308 window_state* ws;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1309 window_state* previous_ws;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1310 Boolean horizontal_p;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1317
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1318 if (ws->x < 0)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1319 ws->x = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1320 else if (ws->x + ws->width > screen_width)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1321 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1322 if (!horizontal_p)
31370
735439f8377f (remap_menubar):
Miles Bader <miles@gnu.org>
parents: 31369
diff changeset
1323 /* The addition of shadow-thickness for a sub-menu's position is
735439f8377f (remap_menubar):
Miles Bader <miles@gnu.org>
parents: 31369
diff changeset
1324 to reflect a similar adjustment when the menu is displayed to
735439f8377f (remap_menubar):
Miles Bader <miles@gnu.org>
parents: 31369
diff changeset
1325 the right of the invoking menu-item; it makes the sub-menu
735439f8377f (remap_menubar):
Miles Bader <miles@gnu.org>
parents: 31369
diff changeset
1326 look more `attached' to the menu-item. */
735439f8377f (remap_menubar):
Miles Bader <miles@gnu.org>
parents: 31369
diff changeset
1327 ws->x = previous_ws->x - ws->width + mw->menu.shadow_thickness;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1328 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1349 if (ws->y < 0)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1350 ws->y = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1351 else if (ws->y + ws->height > screen_height)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1352 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1353 if (horizontal_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1354 ws->y = previous_ws->y - ws->height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1355 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1359 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1360 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1361
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1362 /* Updates old_stack from new_stack and redisplays. */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1363 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1364 remap_menubar (mw)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1365 XlwMenuWidget mw;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1366 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1367 int i;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1368 int last_same;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1369 XPoint selection_position;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1370 int old_depth = mw->menu.old_depth;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1371 int new_depth = mw->menu.new_depth;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1372 widget_value** old_stack;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1373 widget_value** new_stack;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1374 window_state* windows;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1375 widget_value* old_selection;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1376 widget_value* new_selection;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1377
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1378 /* Check that enough windows and old_stack are ready. */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1379 make_windows_if_needed (mw, new_depth);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1380 make_old_stack_space (mw, new_depth);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1381 windows = mw->menu.windows;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1382 old_stack = mw->menu.old_stack;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1383 new_stack = mw->menu.new_stack;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1384
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1385 /* compute the last identical different entry */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1386 for (i = 1; i < old_depth && i < new_depth; i++)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1387 if (old_stack [i] != new_stack [i])
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1388 break;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1389 last_same = i - 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1390
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1391 /* Memorize the previously selected item to be able to refresh it */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1392 old_selection = last_same + 1 < old_depth ? old_stack [last_same + 1] : NULL;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1393 if (old_selection && !old_selection->enabled)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1394 old_selection = NULL;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1395 new_selection = last_same + 1 < new_depth ? new_stack [last_same + 1] : NULL;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1396 if (new_selection && !new_selection->enabled)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1397 new_selection = NULL;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1404 /* updates old_state from new_state. It has to be done now because
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1405 display_menu (called below) uses the old_stack to know what to display. */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1406 for (i = last_same + 1; i < new_depth; i++)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1407 old_stack [i] = new_stack [i];
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1408 mw->menu.old_depth = new_depth;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1409
14018
0a94cd2c51c4 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 13899
diff changeset
1410 /* refresh the last selection */
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1411 selection_position.x = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1412 selection_position.y = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1413 display_menu (mw, last_same, new_selection == old_selection,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1414 &selection_position, NULL, NULL, old_selection, new_selection);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
735439f8377f (remap_menubar):
Miles Bader <miles@gnu.org>
parents: 31369
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1428 if (!mw->menu.horizontal || i > 1)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
735439f8377f (remap_menubar):
Miles Bader <miles@gnu.org>
parents: 31369
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1436
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1437 size_menu (mw, i);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1438
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1439 fit_to_screen (mw, ws, previous_ws, mw->menu.horizontal && i == 1);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1440
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1441 XClearWindow (XtDisplay (mw), ws->window);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1442 XMoveResizeWindow (XtDisplay (mw), ws->window, ws->x, ws->y,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1443 ws->width, ws->height);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1444 XMapRaised (XtDisplay (mw), ws->window);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1445 display_menu (mw, i, False, &selection_position, NULL, NULL, NULL, NULL);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1446 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1447
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1448 /* unmap the menus that popped down */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1452 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1453
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1454 static Boolean
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1455 motion_event_is_in_menu (mw, ev, level, relative_pos)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1456 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1457 XMotionEvent* ev;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1458 int level;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1459 XPoint* relative_pos;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1460 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1465 relative_pos->x = ev->x_root - x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1469 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1470
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1471 static Boolean
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1472 map_event_to_widget_value (mw, ev, val, level)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1473 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1474 XMotionEvent* ev;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1475 widget_value** val;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1476 int* level;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1477 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1478 int i;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1479 XPoint relative_pos;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1480 window_state* ws;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1481
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1484 /* Find the window */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1485 for (i = mw->menu.old_depth - 1; i >= 0; i--)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1486 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1487 ws = &mw->menu.windows [i];
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1488 if (ws && motion_event_is_in_menu (mw, ev, i, &relative_pos))
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1489 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1490 display_menu (mw, i, True, NULL, &relative_pos, val, NULL, NULL);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1491
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1492 if (*val)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1493 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1494 *level = i + 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1495 return True;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1496 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1497 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1498 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1499 return False;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1500 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1501
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1502 /* Procedures */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1503 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1504 make_drawing_gcs (mw)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1505 XlwMenuWidget mw;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1506 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1521 xgcv.foreground = mw->menu.foreground;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1562 xgcv.foreground = mw->menu.button_foreground;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1563 xgcv.background = mw->core.background_pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1564 xgcv.fill_style = FillStippled;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1569 xgcv.foreground = mw->core.background_pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1572 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1573
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1574 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1575 release_drawing_gcs (mw)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1576 XlwMenuWidget mw;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1577 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1578 XtReleaseGC ((Widget) mw, mw->menu.foreground_gc);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1581 XtReleaseGC ((Widget) mw, mw->menu.inactive_button_gc);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1582 XtReleaseGC ((Widget) mw, mw->menu.background_gc);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1583 /* let's get some segvs if we try to use these... */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1584 mw->menu.foreground_gc = (GC) -1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1587 mw->menu.inactive_button_gc = (GC) -1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1588 mw->menu.background_gc = (GC) -1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1589 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1590
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1591 #define MINL(x,y) ((((unsigned long) (x)) < ((unsigned long) (y))) \
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1592 ? ((unsigned long) (x)) : ((unsigned long) (y)))
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1593
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1594 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1595 make_shadow_gcs (mw)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1596 XlwMenuWidget mw;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1597 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1598 XGCValues xgcv;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1599 unsigned long pm = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1603 XColor topc, botc;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1604 int top_frobbed = 0, bottom_frobbed = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1609 if (mw->menu.top_shadow_color == -1)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1614 if (mw->menu.bottom_shadow_color == -1)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1618
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1619 if (mw->menu.top_shadow_color == mw->core.background_pixel ||
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1620 mw->menu.top_shadow_color == mw->menu.foreground)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1621 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1628 XQueryColor (dpy, cmap, &topc);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1629 /* don't overflow/wrap! */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1630 topc.red = MINL (65535, topc.red * 1.2);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1631 topc.green = MINL (65535, topc.green * 1.2);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1632 topc.blue = MINL (65535, topc.blue * 1.2);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1635 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1638 top_frobbed = 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1639 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1640 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1641 if (mw->menu.bottom_shadow_color == mw->menu.foreground ||
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1642 mw->menu.bottom_shadow_color == mw->core.background_pixel)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1643 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1650 XQueryColor (dpy, cmap, &botc);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1651 botc.red *= 0.6;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1652 botc.green *= 0.6;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1653 botc.blue *= 0.6;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1656 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1659 bottom_frobbed = 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1660 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1661 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1662
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1663 if (top_frobbed && bottom_frobbed)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1666 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1687 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1688 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1689
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1690 if (!mw->menu.top_shadow_pixmap &&
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1691 mw->menu.top_shadow_color == mw->core.background_pixel)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1692 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1700 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1701 if (!mw->menu.bottom_shadow_pixmap &&
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1702 mw->menu.bottom_shadow_color == mw->core.background_pixel)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1703 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1712 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1713
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1714 xgcv.fill_style = FillStippled;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1715 xgcv.foreground = mw->menu.top_shadow_color;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1716 xgcv.stipple = mw->menu.top_shadow_pixmap;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1717 pm = (xgcv.stipple ? GCStipple|GCFillStyle : 0);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1718 mw->menu.shadow_top_gc = XtGetGC ((Widget)mw, GCForeground | pm, &xgcv);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1719
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1720 xgcv.foreground = mw->menu.bottom_shadow_color;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1721 xgcv.stipple = mw->menu.bottom_shadow_pixmap;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1722 pm = (xgcv.stipple ? GCStipple|GCFillStyle : 0);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1723 mw->menu.shadow_bottom_gc = XtGetGC ((Widget)mw, GCForeground | pm, &xgcv);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1724 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1725
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1726
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1727 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1728 release_shadow_gcs (mw)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1729 XlwMenuWidget mw;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1744 XtReleaseGC ((Widget) mw, mw->menu.shadow_top_gc);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1745 XtReleaseGC ((Widget) mw, mw->menu.shadow_bottom_gc);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1746 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1747
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
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
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1752 ArgList args;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1753 Cardinal *num_args;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1754 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1757 Window window = RootWindowOfScreen (DefaultScreenOfDisplay (XtDisplay (mw)));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1760 #if 0
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1761 widget_value *tem = (widget_value *) XtMalloc (sizeof (widget_value));
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1762
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1763 /* _XtCreate is freeing the object that was passed to us,
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1764 so make a copy that we will actually keep. */
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1765 lwlib_bcopy (mw->menu.contents, tem, sizeof (widget_value));
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1766 mw->menu.contents = tem;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1767 #endif
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1768
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1769 /* mw->menu.cursor = XCreateFontCursor (display, mw->menu.cursor_shape); */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1787 make_drawing_gcs (mw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1792 mw->menu.old_depth = 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1793 mw->menu.old_stack = (widget_value**)XtMalloc (sizeof (widget_value*));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1794 mw->menu.old_stack_length = 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1797 mw->menu.new_depth = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1798 mw->menu.new_stack = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1799 mw->menu.new_stack_length = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1802 mw->menu.windows = (window_state*)XtMalloc (sizeof (window_state));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1803 mw->menu.windows_length = 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1804 mw->menu.windows [0].x = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1805 mw->menu.windows [0].y = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1806 mw->menu.windows [0].width = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1807 mw->menu.windows [0].height = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1810 mw->core.width = mw->menu.windows [0].width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1811 mw->core.height = mw->menu.windows [0].height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1812 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1813
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1814 static void
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1815 XlwMenuClassInitialize ()
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1816 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1817 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1818
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1819 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1820 XlwMenuRealize (w, valueMask, attributes)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1821 Widget w;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1822 Mask *valueMask;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1823 XSetWindowAttributes *attributes;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1824 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1825 XlwMenuWidget mw = (XlwMenuWidget)w;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1826 XSetWindowAttributes xswa;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1827 int mask;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1828
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1829 (*xlwMenuWidgetClass->core_class.superclass->core_class.realize)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1830 (w, valueMask, attributes);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1831
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1832 xswa.save_under = True;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1833 xswa.cursor = mw->menu.cursor_shape;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1834 mask = CWSaveUnder | CWCursor;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1835 XChangeWindowAttributes (XtDisplay (w), XtWindow (w), mask, &xswa);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1836
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1837 mw->menu.windows [0].window = XtWindow (w);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1838 mw->menu.windows [0].x = w->core.x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1839 mw->menu.windows [0].y = w->core.y;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1840 mw->menu.windows [0].width = w->core.width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1841 mw->menu.windows [0].height = w->core.height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1842 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1843
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1844 /* Only the toplevel menubar/popup is a widget so it's the only one that
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1845 receives expose events through Xt. So we repaint all the other panes
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1848 XlwMenuRedisplay (w, ev, region)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1849 Widget w;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1850 XEvent* ev;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1851 Region region;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1852 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1853 XlwMenuWidget mw = (XlwMenuWidget)w;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1854 int i;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1855
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1856 /* If we have a depth beyond 1, it's because a submenu was displayed.
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1857 If the submenu has been destroyed, set the depth back to 1. */
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1858 if (submenu_destroyed)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1859 {
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1860 mw->menu.old_depth = 1;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1861 submenu_destroyed = 0;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1862 }
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1863
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1864 for (i = 0; i < mw->menu.old_depth; i++)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1865 display_menu (mw, i, False, NULL, NULL, NULL, NULL, NULL);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1866 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1880 XlwMenuDestroy (w)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1881 Widget w;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1882 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1883 int i;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1884 XlwMenuWidget mw = (XlwMenuWidget) w;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1885
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
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
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1888 pointer_grabbed = 0;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1889
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1890 submenu_destroyed = 1;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1891
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1892 release_drawing_gcs (mw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1893 release_shadow_gcs (mw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1894
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1895 /* this doesn't come from the resource db but is created explicitly
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1896 so we must free it ourselves. */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1897 XFreePixmap (XtDisplay (mw), mw->menu.gray_pixmap);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1898 mw->menu.gray_pixmap = (Pixmap) -1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1899
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1900 #if 0
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1901 /* Do free mw->menu.contents because nowadays we copy it
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1902 during initialization. */
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1903 XtFree (mw->menu.contents);
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1904 #endif
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1905
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1906 /* Don't free mw->menu.contents because that comes from our creator.
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1907 The `*_stack' elements are just pointers into `contents' so leave
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1908 that alone too. But free the stacks themselves. */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1909 if (mw->menu.old_stack) XtFree ((char *) mw->menu.old_stack);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1910 if (mw->menu.new_stack) XtFree ((char *) mw->menu.new_stack);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1911
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1912 /* Remember, you can't free anything that came from the resource
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1913 database. This includes:
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1914 mw->menu.cursor
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1915 mw->menu.top_shadow_pixmap
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1916 mw->menu.bottom_shadow_pixmap
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1917 mw->menu.font
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1918 Also the color cells of top_shadow_color, bottom_shadow_color,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1919 foreground, and button_foreground will never be freed until this
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1920 client exits. Nice, eh?
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1921 */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1922
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1923 /* start from 1 because the one in slot 0 is w->core.window */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1924 for (i = 1; i < mw->menu.windows_length; i++)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1925 XDestroyWindow (XtDisplay (mw), mw->menu.windows [i].window);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1926 if (mw->menu.windows)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1927 XtFree ((char *) mw->menu.windows);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1928 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1931 XlwMenuSetValues (current, request, new)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1932 Widget current;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1933 Widget request;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1934 Widget new;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1935 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1936 XlwMenuWidget oldmw = (XlwMenuWidget)current;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1937 XlwMenuWidget newmw = (XlwMenuWidget)new;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1938 Boolean redisplay = False;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1939 int i;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1940
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1941 if (newmw->menu.contents
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1942 && newmw->menu.contents->contents
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1943 && newmw->menu.contents->contents->change >= VISIBLE_CHANGE)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1950
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1951 if (newmw->core.background_pixel != oldmw->core.background_pixel
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1960 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1961 release_drawing_gcs (newmw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1962 make_drawing_gcs (newmw);
31287
c37c79e6a6e7 (XlwMenuSetValues):
Miles Bader <miles@gnu.org>
parents: 30324
diff changeset
1963
c37c79e6a6e7 (XlwMenuSetValues):
Miles Bader <miles@gnu.org>
parents: 30324
diff changeset
1964 release_shadow_gcs (newmw);
c37c79e6a6e7 (XlwMenuSetValues):
Miles Bader <miles@gnu.org>
parents: 30324
diff changeset
1965 /* Cause the shadow colors to be recalculated. */
c37c79e6a6e7 (XlwMenuSetValues):
Miles Bader <miles@gnu.org>
parents: 30324
diff changeset
1966 newmw->menu.top_shadow_color = -1;
c37c79e6a6e7 (XlwMenuSetValues):
Miles Bader <miles@gnu.org>
parents: 30324
diff changeset
1967 newmw->menu.bottom_shadow_color = -1;
c37c79e6a6e7 (XlwMenuSetValues):
Miles Bader <miles@gnu.org>
parents: 30324
diff changeset
1968 make_shadow_gcs (newmw);
c37c79e6a6e7 (XlwMenuSetValues):
Miles Bader <miles@gnu.org>
parents: 30324
diff changeset
1969
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1983 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1993 return redisplay;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1994 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1997 XlwMenuResize (w)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1998 Widget w;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1999 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2000 XlwMenuWidget mw = (XlwMenuWidget)w;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2001
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2002 if (mw->menu.popped_up)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2003 {
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2004 /* Don't allow the popup menu to resize itself. */
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2005 mw->core.width = mw->menu.windows [0].width;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2006 mw->core.height = mw->menu.windows [0].height;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2007 mw->core.parent->core.width = mw->core.width ;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2008 mw->core.parent->core.height = mw->core.height ;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2009 }
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2010 else
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2011 {
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2012 mw->menu.windows [0].width = mw->core.width;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2013 mw->menu.windows [0].height = mw->core.height;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2014 }
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2015 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2016
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2017 /* Action procedures */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2018 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2019 handle_single_motion_event (mw, ev)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2020 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2021 XMotionEvent* ev;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2022 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2023 widget_value* val;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2024 int level;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2025
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2026 if (!map_event_to_widget_value (mw, ev, &val, &level))
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2027 pop_new_stack_if_no_contents (mw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2028 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2029 set_new_state (mw, val, level);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2032 /* Sync with the display. Makes it feel better on X terms. */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2033 XSync (XtDisplay (mw), False);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2034 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2035
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2036 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2037 handle_motion_event (mw, ev)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2038 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2039 XMotionEvent* ev;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2040 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2041 int x = ev->x_root;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2042 int y = ev->y_root;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2043 int state = ev->state;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2044
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2045 handle_single_motion_event (mw, ev);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2046
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2047 /* allow motion events to be generated again */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2048 if (ev->is_hint
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2049 && XQueryPointer (XtDisplay (mw), ev->window,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2050 &ev->root, &ev->subwindow,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2051 &ev->x_root, &ev->y_root,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2052 &ev->x, &ev->y,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2053 &ev->state)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2054 && ev->state == state
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2055 && (ev->x_root != x || ev->y_root != y))
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2056 handle_single_motion_event (mw, ev);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2057 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2060 Start (w, ev, params, num_params)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2061 Widget w;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2062 XEvent *ev;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2063 String *params;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2064 Cardinal *num_params;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2065 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2066 XlwMenuWidget mw = (XlwMenuWidget)w;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2067
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2068 if (!mw->menu.popped_up)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2069 {
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
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
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2079 }
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2080 else
9027
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2081 {
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2082 /* If we push a button while the menu is posted semipermanently,
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2083 releasing the button should always pop the menu down. */
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2084 next_release_must_exit = 1;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2085
9027
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2086 /* notes the absolute position of the menubar window */
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2087 mw->menu.windows [0].x = ev->xmotion.x_root - ev->xmotion.x;
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2088 mw->menu.windows [0].y = ev->xmotion.y_root - ev->xmotion.y;
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2089
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2090 /* handles the down like a move, slots are compatible */
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2091 handle_motion_event (mw, &ev->xmotion);
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2092 }
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2093 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2096 Drag (w, ev, params, num_params)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2097 Widget w;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2098 XEvent *ev;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2099 String *params;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2100 Cardinal *num_params;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2101 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2105 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
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;
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2141 {
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2142 widget_value *current = item;
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2143 enum menu_separator separator;
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2144
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2145 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
2146 (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
2147 || (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
2148 ;
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 if (current == item)
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2151 {
45147
e10cf8f440ae (xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents: 44966
diff changeset
2152 if (mw->menu.old_depth < 2)
e10cf8f440ae (xlwMenuResources): New resource.
Pavel Janík <Pavel@Janik.cz>
parents: 44966
diff changeset
2153 return current;
44707
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2154 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
2155
53564
609ef1718642 Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2156 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
2157 || !current->enabled
57842
2c65a9fc7dec * xlwmenu.c (find_first_selectable, find_next_selectable)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53564
diff changeset
2158 || (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
2159 && !current->contents))
44713
a05c8614feee (find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents: 44707
diff changeset
2160 {
a05c8614feee (find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents: 44707
diff changeset
2161 if (current->next)
a05c8614feee (find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents: 44707
diff changeset
2162 current=current->next;
a05c8614feee (find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents: 44707
diff changeset
2163
a05c8614feee (find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents: 44707
diff changeset
2164 if (current == item)
a05c8614feee (find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents: 44707
diff changeset
2165 break;
a05c8614feee (find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents: 44707
diff changeset
2166 }
a05c8614feee (find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents: 44707
diff changeset
2167
44707
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2168 }
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 return current;
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2171 }
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2172
53564
609ef1718642 Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2173 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
2174 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
2175 XlwMenuWidget mw;
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2176 widget_value *item;
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2177 {
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2178 widget_value *current = item;
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2179 widget_value *prev = item;
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2180
57842
2c65a9fc7dec * xlwmenu.c (find_first_selectable, find_next_selectable)
Jan Djärv <jan.h.d@swipnet.se>
parents: 53564
diff changeset
2181 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
2182 != item)
44713
a05c8614feee (find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents: 44707
diff changeset
2183 {
a05c8614feee (find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents: 44707
diff changeset
2184 if (prev == current)
a05c8614feee (find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents: 44707
diff changeset
2185 break;
44707
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2186 prev=current;
44713
a05c8614feee (find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents: 44707
diff changeset
2187 }
44707
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2188
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2189 return prev;
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
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2192 static void
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2193 Down (w, ev, params, num_params)
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2194 Widget w;
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2195 XEvent *ev;
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2196 String *params;
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2197 Cardinal *num_params;
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2198 {
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2199 XlwMenuWidget mw = (XlwMenuWidget) w;
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2200 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
2201 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
2202
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2203 /* 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
2204 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
2205 /* 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
2206 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
2207 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
2208 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
2209 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
2210 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
2211 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
2212 mw->menu.old_depth);
44707
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2213 else
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2214 /* 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
2215 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
2216 mw->menu.old_depth - 1);
44707
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2217
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2218 remap_menubar (mw);
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
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2221 static void
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2222 Up (w, ev, params, num_params)
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2223 Widget w;
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2224 XEvent *ev;
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2225 String *params;
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2226 Cardinal *num_params;
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2227 {
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2228 XlwMenuWidget mw = (XlwMenuWidget) w;
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2229 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
2230 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
2231
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2232 /* 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
2233 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
2234 {
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2235 /* 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
2236 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
2237 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
2238 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
2239 /* 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
2240 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
2241 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
2242 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
2243 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
2244 mw->menu.old_depth);
44707
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2245 remap_menubar (mw);
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2246 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
2247 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
2248 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
2249 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
2250 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
2251 mw->menu.old_depth - 1);
44707
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2252 }
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2253 else
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2254 /* 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
2255 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
2256 mw->menu.old_depth - 1);
44707
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2257
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2258 remap_menubar (mw);
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
53564
609ef1718642 Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2261 void
44707
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2262 Left (w, ev, params, num_params)
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2263 Widget w;
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2264 XEvent *ev;
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2265 String *params;
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2266 Cardinal *num_params;
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2267 {
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2268 XlwMenuWidget mw = (XlwMenuWidget) w;
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2269 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
2270
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2271 /* 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
2272 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
2273 /* 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
2274 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
2275 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
2276 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
2277 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
2278 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
2279 && 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
2280 {
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 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
2282 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
2283 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
2284 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
2285 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
2286 0))
609ef1718642 Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2287 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
2288 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
2289 }
d81c005163cb (pop_new_stack_if_no_contents): Do nothing if new_depth is 1.
Richard M. Stallman <rms@gnu.org>
parents: 48479
diff changeset
2290
44707
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2291 else
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2292 {
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2293 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
2294 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
2295 mw->menu.old_depth - 2);
44707
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2296 }
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2297
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2298 remap_menubar (mw);
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
53564
609ef1718642 Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2301 void
44707
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2302 Right (w, ev, params, num_params)
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2303 Widget w;
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2304 XEvent *ev;
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2305 String *params;
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2306 Cardinal *num_params;
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2307 {
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2308 XlwMenuWidget mw = (XlwMenuWidget) w;
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2309 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
2310
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2311 /* 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
2312 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
2313 /* 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
2314 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
2315 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
2316 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
2317 mw->menu.old_depth - 1);
44707
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2318 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
2319 {
a05c8614feee (find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents: 44707
diff changeset
2320 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
2321 remap_menubar (mw);
a05c8614feee (find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents: 44707
diff changeset
2322 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
2323 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
2324 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
2325 0))
609ef1718642 Changes for lucid popup menus (keyboard traversal enabled) and dialogs
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2326 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
2327 mw->menu.old_depth - 1);
44713
a05c8614feee (find_next_selectable): New function.
Pavel Janík <Pavel@Janik.cz>
parents: 44707
diff changeset
2328 }
44707
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2329 else
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2330 {
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2331 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
2332 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
2333 mw->menu.old_depth - 2);
44707
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2334 }
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2335
3444517c6483 (xlwMenuTranslations, xlwMenuActionsList): Add translations for cursor keys
Pavel Janík <Pavel@Janik.cz>
parents: 41767
diff changeset
2336 remap_menubar (mw);
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
13899
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
2339 /* 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
2340 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
2341 static void
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
2342 Key (w, ev, params, num_params)
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
2343 Widget w;
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
2344 XEvent *ev;
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
2345 String *params;
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
2346 Cardinal *num_params;
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
2347 {
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
2348 XlwMenuWidget mw = (XlwMenuWidget)w;
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 /* Pop down everything. */
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
2351 mw->menu.new_depth = 1;
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
2352 remap_menubar (mw);
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
2353
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
2354 if (mw->menu.popped_up)
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 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
2357 ungrab_all ((Widget)mw, ev->xmotion.time);
13899
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
2358 if (XtIsShell (XtParent ((Widget) mw)))
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
2359 XtPopdown (XtParent ((Widget) mw));
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
2360 else
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
2361 {
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
2362 XtRemoveGrab ((Widget) mw);
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
2363 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
2364 }
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
2365 }
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 /* callback */
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
2368 XtCallCallbackList ((Widget)mw, mw->menu.select, (XtPointer)0);
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
2369 }
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
2370
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
2371 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2372 Select (w, ev, params, num_params)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2373 Widget w;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2374 XEvent *ev;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2375 String *params;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2376 Cardinal *num_params;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2377 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2378 XlwMenuWidget mw = (XlwMenuWidget)w;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2379 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
2380
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2381 /* If user releases the button quickly, without selecting anything,
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2382 after the initial down-click that brought the menu up,
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2383 do nothing. */
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2384 if ((selected_item == 0
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2385 || ((widget_value *) selected_item)->call_data == 0)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2386 && !next_release_must_exit
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2387 && (ev->xbutton.time - menu_post_event.xbutton.time
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2388 < XtGetMultiClickTime (XtDisplay (w))))
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2389 return;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2390
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2391 /* pop down everything. */
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2392 mw->menu.new_depth = 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2393 remap_menubar (mw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2394
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2395 if (mw->menu.popped_up)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2396 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2397 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
2398 ungrab_all ((Widget)mw, ev->xmotion.time);
9033
3c36c72db2bb *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 9027
diff changeset
2399 if (XtIsShell (XtParent ((Widget) mw)))
3c36c72db2bb *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 9027
diff changeset
2400 XtPopdown (XtParent ((Widget) mw));
9027
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2401 else
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2402 {
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2403 XtRemoveGrab ((Widget) mw);
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2404 display_menu (mw, 0, False, NULL, NULL, NULL, NULL, NULL);
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2405 }
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2406 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2407
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2408 /* callback */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2409 XtCallCallbackList ((Widget)mw, mw->menu.select, (XtPointer)selected_item);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2410 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2411
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2412
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2413 /* 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
2414 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2415 pop_up_menu (mw, event)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2416 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2417 XButtonPressedEvent* event;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2418 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2419 int x = event->x_root;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2420 int y = event->y_root;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2421 int w;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2422 int h;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2423 int borderwidth = mw->menu.shadow_thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2424 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
2425 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
2426 int count;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2427
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2428 next_release_must_exit = 0;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2429
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2430 XtCallCallbackList ((Widget)mw, mw->menu.open, NULL);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2431
9033
3c36c72db2bb *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 9027
diff changeset
2432 if (XtIsShell (XtParent ((Widget)mw)))
9027
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2433 size_menu (mw, 0);
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2434
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2435 w = mw->menu.windows [0].width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2436 h = mw->menu.windows [0].height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2437
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2438 x -= borderwidth;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2439 y -= borderwidth;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2440 if (x < borderwidth)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2441 x = borderwidth;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2442 if (x + w + 2 * borderwidth > WidthOfScreen (screen))
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2443 x = WidthOfScreen (screen) - w - 2 * borderwidth;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2444 if (y < borderwidth)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2445 y = borderwidth;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2446 if (y + h + 2 * borderwidth> HeightOfScreen (screen))
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2447 y = HeightOfScreen (screen) - h - 2 * borderwidth;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2448
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2449 mw->menu.popped_up = True;
9033
3c36c72db2bb *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 9027
diff changeset
2450 if (XtIsShell (XtParent ((Widget)mw)))
9027
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2451 {
9033
3c36c72db2bb *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 9027
diff changeset
2452 XtConfigureWidget (XtParent ((Widget)mw), x, y, w, h,
3c36c72db2bb *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 9027
diff changeset
2453 XtParent ((Widget)mw)->core.border_width);
3c36c72db2bb *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 9027
diff changeset
2454 XtPopup (XtParent ((Widget)mw), XtGrabExclusive);
9027
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2455 display_menu (mw, 0, False, NULL, NULL, NULL, NULL, NULL);
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2456 mw->menu.windows [0].x = x + borderwidth;
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2457 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
2458 mw->menu.top_depth = 1; /* Popup menus don't have a bar so top is 1 */
9027
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2459 }
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2460 else
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2461 {
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2462 XEvent *ev = (XEvent *) event;
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2463
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
2464 XtAddGrab ((Widget) mw, True, True);
9027
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2465
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2466 /* notes the absolute position of the menubar window */
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2467 mw->menu.windows [0].x = ev->xmotion.x_root - ev->xmotion.x;
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2468 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
2469 mw->menu.top_depth = 2;
9027
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2470 }
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2471
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2472 #ifdef emacs
17622
742a57e66f7d (pop_up_menu): Update the call to x_catch_errors.
Richard M. Stallman <rms@gnu.org>
parents: 16917
diff changeset
2473 count = x_catch_errors (display);
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2474 #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
2475 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
2476 (PointerMotionMask
2e7603e0c455 Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents: 44713
diff changeset
2477 | PointerMotionHintMask
2e7603e0c455 Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents: 44713
diff changeset
2478 | ButtonReleaseMask
2e7603e0c455 Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents: 44713
diff changeset
2479 | ButtonPressMask),
2e7603e0c455 Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents: 44713
diff changeset
2480 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
2481 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
2482 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
2483 {
44931
18616c930588 Do not grab keyboard if installation-directory is
Jan Djärv <jan.h.d@swipnet.se>
parents: 44750
diff changeset
2484 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
2485 || 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
2486 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
2487 {
2e7603e0c455 Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents: 44713
diff changeset
2488 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
2489 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
2490 }
2e7603e0c455 Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents: 44713
diff changeset
2491 else
2e7603e0c455 Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents: 44713
diff changeset
2492 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
2493 }
2e7603e0c455 Add calls to Grab/UngrabKeyboard to remove strange interactions with
Jan Djärv <jan.h.d@swipnet.se>
parents: 44713
diff changeset
2494
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2495 #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
2496 if (x_had_errors_p (display))
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2497 {
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2498 pointer_grabbed = 0;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2499 XtUngrabPointer ((Widget)mw, event->time);
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2500 }
17622
742a57e66f7d (pop_up_menu): Update the call to x_catch_errors.
Richard M. Stallman <rms@gnu.org>
parents: 16917
diff changeset
2501 x_uncatch_errors (display, count);
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2502 #endif
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2503
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2504 handle_motion_event (mw, (XMotionEvent*)event);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2505 }
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51143
diff changeset
2506
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51143
diff changeset
2507 /* arch-tag: 657f43dd-dfd0-4cc9-910c-52935f01176e
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51143
diff changeset
2508 (do not change this comment) */