annotate lwlib/xlwmenu.c @ 30408:e3e2c9051c5f

Got rid of all byte-compiler warnings on Emacs. Add to the menu when the file is loaded, not in ada-mode-hook. Add -toolbar to the default ddd command Switches moved from ada-prj-default-comp-cmd and ada-prj-default-make-cmd to ada-prj-default-comp-opt (ada-add-ada-menu): Remove the map and name parameters Add the Ada Reference Manual to the menu (ada-check-current): rewritten as a call to ada-compile-current (ada-compile): Removed. (ada-compile-application, ada-compile-current, ada-check-current): Set the compilation-search-path so that compile.el automatically finds the sources in src_dir. Automatic scrollong of the compilation buffer. C-uC-cC-c asks for confirmation before compiling (ada-compile-current): New parameter, prj-field (ada-complete-identifier): Load the .ali file before doing processing (ada-find-ali-file-in-dir): prepend build_dir to obj_dir to conform to gnatmake's behavior. (ada-find-file-in-dir): New function (ada-find-references): Set the environment variables for gnatfind (ada-find-src-file-in-dir): New function. (ada-first-non-nil): Removed (ada-gdb-application): Add support for jdb, the java debugger. (ada-get-ada-file-name): Load the original-file first if not done yet. (ada-get-all-references): Handles the new ali syntax (parent types are found between <>). (ada-initialize-runtime-library): New function (ada-mode-hook): Always load a project file when a file is opened, so that the casing exceptions are correctly read. (ada-operator-re): Add all missing operators ("abs", "rem", "**"). (ada-parse-prj-file): Use find-file-noselect instead of find-file to open the project file, since the latter does not work with speedbar Get default values before loading the prj file, or the default executable file name is wrong. Use the absolute value of src_dir to initialize ada-search-directories and compilation-search-path,... Add the standard runtime library to the search path for find-file. (ada-prj-default-debugger): Was missing an opening '{' (ada-prj-default-bind-opt, ada-prj-default-link-opt): New variables. (ada-prj-default-gnatmake-opt): New variable (ada-prj-find-prj-file): Handles non-file buffers For non-Ada buffers, the project file is the default one Save the windows configuration before displaying the menu. (ada-prj-src-dir, ada-prj-obj-dir, ada-prj-comp-opt,...): Removed (ada-read-identifier): Fix xrefs on operators (for "mod", "and", ...) regexp-quote identifiers names to support operators +, -,... in regexps. (ada-remote): New function. (ada-run-application): Erase the output buffer before starting the run Support remote execution of the application. Use call-process, or the arguments are incorrectly parsed (ada-set-default-project-file): Reread the content of the active project file, not the one from the current buffer When a project file is set as the default project, all directories are automatically associated with it. (ada-set-environment): New function (ada-treat-cmd-string): New special variable ${current} (ada-treat-cmd-string): Revised. The substitution is now done for any ${...} substring (ada-xref-current): If no body was found, compiles the spec instead. Setup ADA_{SOURCE,OBJECTS}_PATH before running the compiler to get rid of command line length limitations. (ada-xref-get-project-field): New function (ada-xref-project-files): New variable (ada-xref-runtime-library-specs-path) (ada-xref-runtime-library-ali-path): New variables (ada-xref-set-default-prj-values): Default run command now does a cd to the build directory. New field: main_unit Provide a default file name even if the current buffer has no prj file.
author Gerd Moellmann <gerd@gnu.org>
date Mon, 24 Jul 2000 11:13:11 +0000
parents d4713daa6716
children c37c79e6a6e7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 /* Implements a lightweight menubar widget.
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2 Copyright (C) 1992 Lucid, Inc.
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4 This file is part of the Lucid Widget Library.
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 The Lucid Widget Library is free software; you can redistribute it and/or
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 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
8 the Free Software Foundation; either version 2, or (at your option)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9 any later version.
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 The Lucid Widget Library is distributed in the hope that it will be useful,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 GNU General Public License for more details.
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 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
17 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
18 Free Software Foundation, Inc., 59 Temple Place - Suite 330,
80562f089595 Fix FSF address in comment.
Karl Heuer <kwzh@gnu.org>
parents: 14728
diff changeset
19 Boston, MA 02111-1307, USA. */
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 /* Created by devin@lucid.com */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22
26087
e0d966fb548f Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents: 25526
diff changeset
23 #ifdef HAVE_CONFIG_H
e0d966fb548f Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents: 25526
diff changeset
24 #include <config.h>
e0d966fb548f Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents: 25526
diff changeset
25 #endif
e0d966fb548f Add support for large files, plus some locale improvements.
Paul Eggert <eggert@twinsun.com>
parents: 25526
diff changeset
26
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 #include <stdio.h>
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 #include <sys/types.h>
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 #include <X11/Xos.h>
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 #include <X11/IntrinsicP.h>
9033
3c36c72db2bb *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 9027
diff changeset
32 #include <X11/ObjectP.h>
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 #include <X11/StringDefs.h>
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 #include <X11/cursorfont.h>
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35 #include "xlwmenuP.h"
29602
d13e7c93d265 (make_shadow_gcs): Free and copy colors so that
Gerd Moellmann <gerd@gnu.org>
parents: 29469
diff changeset
36
29469
f9b5fe053f7c (x_alloc_nearest_color_for_widget, x_catch_errors, x_uncatch_errors)
Dave Love <fx@gnu.org>
parents: 27988
diff changeset
37 #ifdef emacs
30324
d4713daa6716 Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents: 29700
diff changeset
38
d4713daa6716 Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents: 29700
diff changeset
39 /* 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
40 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
41 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
42
d4713daa6716 Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents: 29700
diff changeset
43 extern int gray_bitmap_width;
d4713daa6716 Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents: 29700
diff changeset
44 extern int gray_bitmap_height;
d4713daa6716 Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents: 29700
diff changeset
45 extern unsigned char *gray_bitmap_bits;
d4713daa6716 Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents: 29700
diff changeset
46
29469
f9b5fe053f7c (x_alloc_nearest_color_for_widget, x_catch_errors, x_uncatch_errors)
Dave Love <fx@gnu.org>
parents: 27988
diff changeset
47 /* 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
48 extern int x_alloc_nearest_color_for_widget __P ((Widget, Colormap, XColor*));
f9b5fe053f7c (x_alloc_nearest_color_for_widget, x_catch_errors, x_uncatch_errors)
Dave Love <fx@gnu.org>
parents: 27988
diff changeset
49 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
50 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
51 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
52 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
53 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
54 unsigned long));
d13e7c93d265 (make_shadow_gcs): Free and copy colors so that
Gerd Moellmann <gerd@gnu.org>
parents: 29469
diff changeset
55
d13e7c93d265 (make_shadow_gcs): Free and copy colors so that
Gerd Moellmann <gerd@gnu.org>
parents: 29469
diff changeset
56 /* Defined in xfaces.c. */
d13e7c93d265 (make_shadow_gcs): Free and copy colors so that
Gerd Moellmann <gerd@gnu.org>
parents: 29469
diff changeset
57 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
58 unsigned long *pixels, int npixels));
30324
d4713daa6716 Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents: 29700
diff changeset
59 #else /* not emacs */
d4713daa6716 Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents: 29700
diff changeset
60
d4713daa6716 Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents: 29700
diff changeset
61 #include <X11/bitmaps/gray>
d4713daa6716 Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents: 29700
diff changeset
62 #define gray_bitmap_width gray_width
d4713daa6716 Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents: 29700
diff changeset
63 #define gray_bitmap_height gray_height
d4713daa6716 Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents: 29700
diff changeset
64 #define gray_bitmap_bits gray_bits
d4713daa6716 Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents: 29700
diff changeset
65
d4713daa6716 Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents: 29700
diff changeset
66 #endif /* not emacs */
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
67
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
68 static int pointer_grabbed;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
69 static XEvent menu_post_event;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70
9746
49e984bf6689 (xlwmenu_default_font): New global variable.
Richard M. Stallman <rms@gnu.org>
parents: 9700
diff changeset
71 XFontStruct *xlwmenu_default_font;
49e984bf6689 (xlwmenu_default_font): New global variable.
Richard M. Stallman <rms@gnu.org>
parents: 9700
diff changeset
72
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 static char
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 xlwMenuTranslations [] =
13899
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
75 "<BtnDown>: start()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
76 <Motion>: drag()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
77 <BtnUp>: select()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
78 <Key>Shift_L: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
79 <Key>Shift_R: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
80 <Key>Meta_L: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
81 <Key>Meta_R: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
82 <Key>Control_L: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
83 <Key>Control_R: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
84 <Key>Hyper_L: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
85 <Key>Hyper_R: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
86 <Key>Super_L: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
87 <Key>Super_R: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
88 <Key>Alt_L: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
89 <Key>Alt_R: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
90 <Key>Caps_Lock: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
91 <Key>Shift_Lock: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
92 <KeyUp>Shift_L: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
93 <KeyUp>Shift_R: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
94 <KeyUp>Meta_L: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
95 <KeyUp>Meta_R: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
96 <KeyUp>Control_L: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
97 <KeyUp>Control_R: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
98 <KeyUp>Hyper_L: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
99 <KeyUp>Hyper_R: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
100 <KeyUp>Super_L: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
101 <KeyUp>Super_R: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
102 <KeyUp>Alt_L: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
103 <KeyUp>Alt_R: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
104 <KeyUp>Caps_Lock: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
105 <KeyUp>Shift_Lock:nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
106 <Key>: key()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
107 <KeyUp>: key()\n\
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 ";
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 #define offset(field) XtOffset(XlwMenuWidget, field)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 static XtResource
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 xlwMenuResources[] =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 {XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct *),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 offset(menu.font),XtRString, "XtDefaultFont"},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 {XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 offset(menu.foreground), XtRString, "XtDefaultForeground"},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 {XtNbuttonForeground, XtCButtonForeground, XtRPixel, sizeof(Pixel),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 offset(menu.button_foreground), XtRString, "XtDefaultForeground"},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 {XtNmargin, XtCMargin, XtRDimension, sizeof(Dimension),
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
121 offset(menu.margin), XtRImmediate, (XtPointer) 4},
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 {XtNhorizontalSpacing, XtCMargin, XtRDimension, sizeof(Dimension),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 offset(menu.horizontal_spacing), XtRImmediate, (XtPointer)3},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 {XtNverticalSpacing, XtCMargin, XtRDimension, sizeof(Dimension),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 offset(menu.vertical_spacing), XtRImmediate, (XtPointer)1},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 {XtNarrowSpacing, XtCMargin, XtRDimension, sizeof(Dimension),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 offset(menu.arrow_spacing), XtRImmediate, (XtPointer)10},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
129 {XmNshadowThickness, XmCShadowThickness, XtRDimension,
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 sizeof (Dimension), offset (menu.shadow_thickness),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131 XtRImmediate, (XtPointer) 2},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
132 {XmNtopShadowColor, XmCTopShadowColor, XtRPixel, sizeof (Pixel),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 offset (menu.top_shadow_color), XtRImmediate, (XtPointer)-1},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 {XmNbottomShadowColor, XmCBottomShadowColor, XtRPixel, sizeof (Pixel),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 offset (menu.bottom_shadow_color), XtRImmediate, (XtPointer)-1},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 {XmNtopShadowPixmap, XmCTopShadowPixmap, XtRPixmap, sizeof (Pixmap),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 offset (menu.top_shadow_pixmap), XtRImmediate, (XtPointer)None},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 {XmNbottomShadowPixmap, XmCBottomShadowPixmap, XtRPixmap, sizeof (Pixmap),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 offset (menu.bottom_shadow_pixmap), XtRImmediate, (XtPointer)None},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 {XtNopen, XtCCallback, XtRCallback, sizeof(XtPointer),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 offset(menu.open), XtRCallback, (XtPointer)NULL},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143 {XtNselect, XtCCallback, XtRCallback, sizeof(XtPointer),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 offset(menu.select), XtRCallback, (XtPointer)NULL},
27338
58f8eee82765 (xlwMenuResources): All XtNhighlightCallback.
Gerd Moellmann <gerd@gnu.org>
parents: 26087
diff changeset
145 {XtNhighlightCallback, XtCCallback, XtRCallback, sizeof(XtPointer),
58f8eee82765 (xlwMenuResources): All XtNhighlightCallback.
Gerd Moellmann <gerd@gnu.org>
parents: 26087
diff changeset
146 offset(menu.highlight), XtRCallback, (XtPointer)NULL},
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 {XtNmenu, XtCMenu, XtRPointer, sizeof(XtPointer),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 offset(menu.contents), XtRImmediate, (XtPointer)NULL},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 {XtNcursor, XtCCursor, XtRCursor, sizeof(Cursor),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 offset(menu.cursor_shape), XtRString, (XtPointer)"right_ptr"},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 {XtNhorizontal, XtCHorizontal, XtRInt, sizeof(int),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 offset(menu.horizontal), XtRImmediate, (XtPointer)True},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 };
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 #undef offset
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 static Boolean XlwMenuSetValues();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 static void XlwMenuRealize();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 static void XlwMenuRedisplay();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 static void XlwMenuResize();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 static void XlwMenuInitialize();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 static void XlwMenuRedisplay();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 static void XlwMenuDestroy();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 static void XlwMenuClassInitialize();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 static void Start();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 static void Drag();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 static void Select();
13899
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
167 static void Key();
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
168 static void Nothing();
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
169 static int separator_height ();
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 static XtActionsRec
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 xlwMenuActionsList [] =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 {"start", Start},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 {"drag", Drag},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 {"select", Select},
13899
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
177 {"key", Key},
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
178 {"nothing", Nothing},
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 };
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 #define SuperClass ((CoreWidgetClass)&coreClassRec)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 XlwMenuClassRec xlwMenuClassRec =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 { /* CoreClass fields initialization */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 (WidgetClass) SuperClass, /* superclass */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187 "XlwMenu", /* class_name */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 sizeof(XlwMenuRec), /* size */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189 XlwMenuClassInitialize, /* class_initialize */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 NULL, /* class_part_initialize */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 FALSE, /* class_inited */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 XlwMenuInitialize, /* initialize */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 NULL, /* initialize_hook */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 XlwMenuRealize, /* realize */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 xlwMenuActionsList, /* actions */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 XtNumber(xlwMenuActionsList), /* num_actions */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197 xlwMenuResources, /* resources */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 XtNumber(xlwMenuResources), /* resource_count */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 NULLQUARK, /* xrm_class */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 TRUE, /* compress_motion */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 TRUE, /* compress_exposure */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 TRUE, /* compress_enterleave */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 FALSE, /* visible_interest */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 XlwMenuDestroy, /* destroy */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 XlwMenuResize, /* resize */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206 XlwMenuRedisplay, /* expose */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 XlwMenuSetValues, /* set_values */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 NULL, /* set_values_hook */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 XtInheritSetValuesAlmost, /* set_values_almost */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 NULL, /* get_values_hook */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 NULL, /* accept_focus */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 XtVersion, /* version */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 NULL, /* callback_private */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 xlwMenuTranslations, /* tm_table */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215 XtInheritQueryGeometry, /* query_geometry */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 XtInheritDisplayAccelerator, /* display_accelerator */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 NULL /* extension */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 }, /* XlwMenuClass fields initialization */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 0 /* dummy */
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 };
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 WidgetClass xlwMenuWidgetClass = (WidgetClass) &xlwMenuClassRec;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
226 int submenu_destroyed;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
227
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
228 static int next_release_must_exit;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
229
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 /* Utilities */
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
231
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
232
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
233 /* 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
234
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
235 static void
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
236 abort_gracefully (w)
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
237 Widget w;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
238 {
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
239 if (XtIsShell (XtParent (w)))
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
240 XtRemoveGrab (w);
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
241 XtUngrabPointer (w, CurrentTime);
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
242 abort ();
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
243 }
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
244
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
246 push_new_stack (mw, val)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
247 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
248 widget_value* val;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 if (!mw->menu.new_stack)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 mw->menu.new_stack_length = 10;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 mw->menu.new_stack =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 (widget_value**)XtCalloc (mw->menu.new_stack_length,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 sizeof (widget_value*));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 else if (mw->menu.new_depth == mw->menu.new_stack_length)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 mw->menu.new_stack_length *= 2;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 mw->menu.new_stack =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 (widget_value**)XtRealloc ((char*)mw->menu.new_stack,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 mw->menu.new_stack_length * sizeof (widget_value*));
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 mw->menu.new_stack [mw->menu.new_depth++] = val;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
268 pop_new_stack_if_no_contents (mw)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
269 XlwMenuWidget mw;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271 if (mw->menu.new_depth)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273 if (!mw->menu.new_stack [mw->menu.new_depth - 1]->contents)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 mw->menu.new_depth -= 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
279 make_old_stack_space (mw, n)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
280 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
281 int n;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283 if (!mw->menu.old_stack)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285 mw->menu.old_stack_length = 10;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 mw->menu.old_stack =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287 (widget_value**)XtCalloc (mw->menu.old_stack_length,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288 sizeof (widget_value*));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 else if (mw->menu.old_stack_length < n)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292 mw->menu.old_stack_length *= 2;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 mw->menu.old_stack =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294 (widget_value**)XtRealloc ((char*)mw->menu.old_stack,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
295 mw->menu.old_stack_length * sizeof (widget_value*));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 /* Size code */
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
300 int
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
301 string_width (mw, s)
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 char *s;
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 XCharStruct xcs;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 int drop;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 XTextExtents (mw->menu.font, s, strlen (s), &drop, &drop, &drop, &xcs);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 return xcs.width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 }
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 static int
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
313 arrow_width (mw)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
314 XlwMenuWidget mw;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 {
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
316 return (mw->menu.font->ascent * 3/4) | 1;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
317 }
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
318
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
319 /* 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
320
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
321 static int
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
322 toggle_button_width (mw)
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
323 XlwMenuWidget mw;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
324 {
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
325 return ((mw->menu.font->ascent + mw->menu.font->descent) * 2 / 3) | 1;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
328
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
329 /* 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
330
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
331 static int
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
332 radio_button_width (mw)
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
333 XlwMenuWidget mw;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
334 {
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
335 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
336 }
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
337
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
338
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339 static XtResource
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 nameResource[] =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 {"labelString", "LabelString", XtRString, sizeof(String),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343 0, XtRImmediate, 0},
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 static char*
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
347 resource_widget_value (mw, val)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
348 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
349 widget_value *val;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351 if (!val->toolkit_data)
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 char* resourced_name = NULL;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354 char* complete_name;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355 XtGetSubresources ((Widget) mw,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 (XtPointer) &resourced_name,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357 val->name, val->name,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358 nameResource, 1, NULL, 0);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 if (!resourced_name)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
360 resourced_name = val->name;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361 if (!val->value)
5654
f84dac6453db *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 5626
diff changeset
362 {
f84dac6453db *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 5626
diff changeset
363 complete_name = (char *) XtMalloc (strlen (resourced_name) + 1);
f84dac6453db *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 5626
diff changeset
364 strcpy (complete_name, resourced_name);
f84dac6453db *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 5626
diff changeset
365 }
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368 int complete_length =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369 strlen (resourced_name) + strlen (val->value) + 2;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
370 complete_name = XtMalloc (complete_length);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371 *complete_name = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372 strcat (complete_name, resourced_name);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
373 strcat (complete_name, " ");
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
374 strcat (complete_name, val->value);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377 val->toolkit_data = complete_name;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378 val->free_toolkit_data = True;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380 return (char*)val->toolkit_data;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383 /* Returns the sizes of an item */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
384 static void
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
385 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
386 height)
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
387 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
388 widget_value* val;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
389 int horizontal_p;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
390 int* label_width;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
391 int* rest_width;
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
392 int* button_width;
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
393 int* height;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394 {
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
395 enum menu_separator separator;
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 if (lw_separator_p (val->name, &separator, 0))
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
398 {
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
399 *height = separator_height (separator);
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400 *label_width = 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
401 *rest_width = 0;
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
402 *button_width = 0;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404 else
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 *height =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407 mw->menu.font->ascent + mw->menu.font->descent
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 + 2 * mw->menu.vertical_spacing + 2 * mw->menu.shadow_thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410 *label_width =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411 string_width (mw, resource_widget_value (mw, val))
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 + mw->menu.horizontal_spacing + mw->menu.shadow_thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 *rest_width = mw->menu.horizontal_spacing + mw->menu.shadow_thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 if (!horizontal_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 if (val->contents)
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
418 /* Add width of the arrow displayed for submenus. */
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 *rest_width += arrow_width (mw) + mw->menu.arrow_spacing;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 else if (val->key)
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
421 /* 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
422 *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
423 + mw->menu.arrow_spacing);
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
424
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
425 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
426 *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
427 + mw->menu.horizontal_spacing);
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
428 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
429 *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
430 + mw->menu.horizontal_spacing);
5626
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 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
436 size_menu (mw, level)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
437 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
438 int level;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 {
11461
65c12e57f119 (size_menu): Make height and label_width unsigned.
Richard M. Stallman <rms@gnu.org>
parents: 9746
diff changeset
440 unsigned int label_width = 0;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 int rest_width = 0;
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
442 int button_width = 0;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 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
444 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
445 unsigned int height = 0;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 int horizontal_p = mw->menu.horizontal && (level == 0);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 widget_value* val;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448 window_state* ws;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450 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
451 abort_gracefully ((Widget) mw);
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453 ws = &mw->menu.windows [level];
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454 ws->width = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 ws->height = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456 ws->label_width = 0;
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
457 ws->button_width = 0;
5626
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 for (val = mw->menu.old_stack [level]->contents; val; val = val->next)
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 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
462 &button_width, &height);
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463 if (horizontal_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465 ws->width += label_width + rest_width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466 if (height > ws->height)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467 ws->height = height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
470 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471 if (label_width > ws->label_width)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472 ws->label_width = label_width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
473 if (rest_width > max_rest_width)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
474 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
475 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
476 max_button_width = button_width;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
477 ws->height += height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
479 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
480
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
481 if (horizontal_p)
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
482 ws->label_width = ws->button_width = 0;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
483 else
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
484 {
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
485 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
486 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
487 }
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
488
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
489 ws->width += 2 * mw->menu.shadow_thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
490 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
491
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
492 if (horizontal_p)
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
493 {
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
494 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
495 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
496 }
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
497 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
498
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
499
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
500 /* Display code */
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
501
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
502 static void
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
503 draw_arrow (mw, window, gc, x, y, width, down_p)
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
504 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
505 Window window;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
506 GC gc;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
507 int x;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
508 int y;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
509 int width;
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
510 int down_p;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
511 {
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
512 Display *dpy = XtDisplay (mw);
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
513 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
514 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
515 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
516 int height = width;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
517 XPoint pt[10];
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
518 /* alpha = atan (0.5)
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
519 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
520 double factor = 1.62;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
521 int thickness2 = thickness * factor;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
522
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
523 y += (mw->menu.font->ascent + mw->menu.font->descent - height) / 2;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
524
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
525 if (down_p)
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
526 {
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
527 GC temp;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
528 temp = top_gc;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
529 top_gc = bottom_gc;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
530 bottom_gc = temp;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
531 }
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
532
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
533 pt[0].x = x;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
534 pt[0].y = y + height;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
535 pt[1].x = x + thickness;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
536 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
537 pt[2].x = x + thickness2;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
538 pt[2].y = y + thickness2;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
539 pt[3].x = x;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
540 pt[3].y = y;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
541 XFillPolygon (dpy, window, top_gc, pt, 4, Convex, CoordModeOrigin);
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
542
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
543 pt[0].x = x;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
544 pt[0].y = y;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
545 pt[1].x = x + thickness;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
546 pt[1].y = y + thickness2;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
547 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
548 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
549 pt[3].x = x + width;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
550 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
551 XFillPolygon (dpy, window, top_gc, pt, 4, Convex, CoordModeOrigin);
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
552
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
553 pt[0].x = x;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
554 pt[0].y = y + height;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
555 pt[1].x = x + thickness;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
556 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
557 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
558 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
559 pt[3].x = x + width;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
560 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
561 XFillPolygon (dpy, window, bottom_gc, pt, 4, Convex, CoordModeOrigin);
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
562 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
563
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
564
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 static void
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
567 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
568 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
569 Window window;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
570 int x;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
571 int y;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
572 int width;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
573 int height;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
574 int erase_p;
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
575 int down_p;
5626
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 Display *dpy = XtDisplay (mw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 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
579 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
580 int thickness = mw->menu.shadow_thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581 XPoint points [4];
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
582
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
583 if (!erase_p && down_p)
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
584 {
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
585 GC temp;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
586 temp = top_gc;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
587 top_gc = bottom_gc;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
588 bottom_gc = temp;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
589 }
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
590
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591 points [0].x = x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592 points [0].y = y;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593 points [1].x = x + width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594 points [1].y = y;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595 points [2].x = x + width - thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
596 points [2].y = y + thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597 points [3].x = x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
598 points [3].y = y + thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
599 XFillPolygon (dpy, window, top_gc, points, 4, Convex, CoordModeOrigin);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600 points [0].x = x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601 points [0].y = y + thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
602 points [1].x = x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
603 points [1].y = y + height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
604 points [2].x = x + thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
605 points [2].y = y + height - thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
606 points [3].x = x + thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
607 points [3].y = y + thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
608 XFillPolygon (dpy, window, top_gc, points, 4, Convex, CoordModeOrigin);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
609 points [0].x = x + width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
610 points [0].y = y;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
611 points [1].x = x + width - thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
612 points [1].y = y + thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
613 points [2].x = x + width - thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
614 points [2].y = y + height - thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
615 points [3].x = x + width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
616 points [3].y = y + height - thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
617 XFillPolygon (dpy, window, bottom_gc, points, 4, Convex, CoordModeOrigin);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
618 points [0].x = x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
619 points [0].y = y + height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
620 points [1].x = x + width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
621 points [1].y = y + height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
622 points [2].x = x + width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
623 points [2].y = y + height - thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
624 points [3].x = x + thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
625 points [3].y = y + height - thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
626 XFillPolygon (dpy, window, bottom_gc, points, 4, Convex, CoordModeOrigin);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
627 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
628
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
629
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
630 static void
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
631 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
632 XlwMenuWidget mw;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
633 Window window;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
634 int x;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
635 int y;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
636 int width;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
637 int height;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
638 int erase_p;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
639 int down_p;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
640 {
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
641 Display *dpy = XtDisplay (mw);
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
642 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
643 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
644 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
645 XPoint points [4];
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
646
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
647 if (!erase_p && down_p)
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
648 {
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
649 GC temp;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
650 temp = top_gc;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
651 top_gc = bottom_gc;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
652 bottom_gc = temp;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
653 }
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
654
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
655 points [0].x = x;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
656 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
657 points [1].x = x + thickness;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
658 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
659 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
660 points [2].y = y + thickness;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
661 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
662 points [3].y = y;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
663 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
664 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
665 points [0].y = y;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
666 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
667 points [1].y = y + thickness;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
668 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
669 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
670 points [3].x = x + width;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
671 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
672 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
673 points [0].x = x;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
674 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
675 points [1].x = x + thickness;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
676 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
677 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
678 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
679 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
680 points [3].y = y + height;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
681 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
682 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
683 points [0].y = y + height;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
684 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
685 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
686 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
687 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
688 points [3].x = x + width;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
689 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
690 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
691 }
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
692
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
693
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
694 /* 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
695 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
696 toggle button is selected. */
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
697
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
698 static void
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
699 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
700 XlwMenuWidget mw;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
701 Window window;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
702 int x, y, selected_p;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
703 {
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
704 int width, height;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
705
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
706 width = toggle_button_width (mw);
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
707 height = width;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
708 x += mw->menu.horizontal_spacing;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
709 y += (mw->menu.font->ascent - height) / 2;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
710 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
711 }
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
712
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
713
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
714 /* 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
715 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
716 toggle button is selected. */
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
717
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
718 static void
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
719 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
720 XlwMenuWidget mw;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
721 Window window;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
722 int x, y, selected_p;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
723 {
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
724 int width, height;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
725
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
726 width = radio_button_width (mw);
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
727 height = width;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
728 x += mw->menu.horizontal_spacing;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
729 y += (mw->menu.font->ascent - height) / 2;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
730 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
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
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
734 /* 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
735 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
736 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
737
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
738 static void
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
739 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
740 XlwMenuWidget mw;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
741 Window window;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
742 int x, y, width;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
743 enum menu_separator type;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
744 {
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
745 Display *dpy = XtDisplay (mw);
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
746 XGCValues xgcv;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
747
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
748 switch (type)
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
749 {
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
750 case SEPARATOR_NO_LINE:
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
751 break;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
752
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
753 case SEPARATOR_SINGLE_LINE:
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
754 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
755 x, y, x + width, y);
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
756 break;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
757
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
758 case SEPARATOR_DOUBLE_LINE:
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
759 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
760 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
761 break;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
762
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
763 case SEPARATOR_SINGLE_DASHED_LINE:
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
764 xgcv.line_style = LineOnOffDash;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
765 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
766 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
767 x, y, x + width, y);
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
768 xgcv.line_style = LineSolid;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
769 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
770 break;
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 case SEPARATOR_DOUBLE_DASHED_LINE:
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
773 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
774 SEPARATOR_SINGLE_DASHED_LINE);
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
775 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
776 SEPARATOR_SINGLE_DASHED_LINE);
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
777 break;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
778
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
779 case SEPARATOR_SHADOW_ETCHED_IN:
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
780 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
781 x, y, x + width, y);
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
782 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
783 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
784 break;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
785
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
786 case SEPARATOR_SHADOW_ETCHED_OUT:
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
787 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
788 x, y, x + width, y);
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
789 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
790 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
791 break;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
792
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
793 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
794 xgcv.line_style = LineOnOffDash;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
795 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
796 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
797 draw_separator (mw, window, x, y, SEPARATOR_SHADOW_ETCHED_IN);
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
798 xgcv.line_style = LineSolid;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
799 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
800 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
801 break;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
802
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
803 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
804 xgcv.line_style = LineOnOffDash;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
805 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
806 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
807 draw_separator (mw, window, x, y, SEPARATOR_SHADOW_ETCHED_OUT);
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
808 xgcv.line_style = LineSolid;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
809 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
810 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
811 break;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
812
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
813 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
814 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
815 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
816 break;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
817
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
818 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
819 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
820 SEPARATOR_SHADOW_ETCHED_OUT);
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
821 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
822 SEPARATOR_SHADOW_ETCHED_OUT);
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
823 break;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
824
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
825 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
826 xgcv.line_style = LineOnOffDash;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
827 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
828 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
829 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
830 SEPARATOR_SHADOW_DOUBLE_ETCHED_IN);
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
831 xgcv.line_style = LineSolid;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
832 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
833 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
834 break;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
835
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
836 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
837 xgcv.line_style = LineOnOffDash;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
838 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
839 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
840 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
841 SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT);
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
842 xgcv.line_style = LineSolid;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
843 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
844 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
845 break;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
846
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
847 default:
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
848 abort ();
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
849 }
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
850 }
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
851
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
852
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
853 /* 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
854
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
855 static int
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
856 separator_height (separator)
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
857 enum menu_separator separator;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
858 {
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
859 switch (separator)
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
860 {
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
861 case SEPARATOR_NO_LINE:
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
862 return 2;
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_SINGLE_LINE:
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
865 case SEPARATOR_SINGLE_DASHED_LINE:
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
866 return 1;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
867
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
868 case SEPARATOR_DOUBLE_LINE:
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
869 case SEPARATOR_DOUBLE_DASHED_LINE:
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
870 return 3;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
871
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
872 case SEPARATOR_SHADOW_ETCHED_IN:
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
873 case SEPARATOR_SHADOW_ETCHED_OUT:
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
874 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
875 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
876 return 2;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
877
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
878 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
879 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
880 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
881 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
882 return 5;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
883
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
884 default:
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
885 abort ();
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
886 }
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
887 }
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
888
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
889
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
890 /* 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
891 the menu item was. */
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
892
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
893 static void
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
894 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
895 just_compute_p)
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
896 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
897 widget_value* val;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
898 window_state* ws;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
899 XPoint* where;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
900 Boolean highlighted_p;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
901 Boolean horizontal_p;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
902 Boolean just_compute_p;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
903 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
904 GC deco_gc;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
905 GC text_gc;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
906 int font_ascent = mw->menu.font->ascent;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
907 int font_descent = mw->menu.font->descent;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
908 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
909 int margin = mw->menu.margin;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
910 int h_spacing = mw->menu.horizontal_spacing;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
911 int v_spacing = mw->menu.vertical_spacing;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
912 int label_width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
913 int rest_width;
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
914 int button_width;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
915 int height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
916 int width;
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
917 enum menu_separator separator;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
918 int separator_p = lw_separator_p (val->name, &separator, 0);
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
919
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
920 /* 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
921 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
922 &button_width, &height);
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
923
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
924 if (horizontal_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
925 width = label_width + rest_width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
926 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
927 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
928 label_width = ws->label_width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
929 width = ws->width - 2 * shadow;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
930 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
931
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
932 /* Only highlight an enabled item that has a callback. */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
933 if (highlighted_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
934 if (!val->enabled || !(val->call_data || val->contents))
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
935 highlighted_p = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
936
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
937 /* do the drawing. */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
938 if (!just_compute_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
939 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
940 /* Add the shadow border of the containing menu */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
941 int x = where->x + shadow;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
942 int y = where->y + shadow;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
943
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
944 if (horizontal_p)
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
945 {
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
946 x += margin;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
947 y += margin;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
948 }
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
949
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
950 /* pick the foreground and background GC. */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
951 if (val->enabled)
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
952 text_gc = mw->menu.foreground_gc;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
953 else
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
954 text_gc = mw->menu.inactive_gc;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
955 deco_gc = mw->menu.foreground_gc;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
956
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
957 if (separator_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
958 {
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
959 draw_separator (mw, ws->window, x, y, width, separator);
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
960 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
961 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
962 {
9227
968bb25ec1af (display_menu_item): Add support for displaying the title in pop up menus.
Paul Reilly <pmr@pajato.com>
parents: 9092
diff changeset
963 int x_offset = x + h_spacing + shadow;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
964 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
965 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
966 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
967
968bb25ec1af (display_menu_item): Add support for displaying the title in pop up menus.
Paul Reilly <pmr@pajato.com>
parents: 9092
diff changeset
968 /* 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
969 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
970 {
968bb25ec1af (display_menu_item): Add support for displaying the title in pop up menus.
Paul Reilly <pmr@pajato.com>
parents: 9092
diff changeset
971 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
972
968bb25ec1af (display_menu_item): Add support for displaying the title in pop up menus.
Paul Reilly <pmr@pajato.com>
parents: 9092
diff changeset
973 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
974 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
975 }
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
976 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
977 x_offset += ws->button_width;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
978
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
979
9227
968bb25ec1af (display_menu_item): Add support for displaying the title in pop up menus.
Paul Reilly <pmr@pajato.com>
parents: 9092
diff changeset
980 XDrawString (XtDisplay (mw), ws->window, text_gc, x_offset,
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
981 y + v_spacing + shadow + font_ascent,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
982 display_string, strlen (display_string));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
983
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
984 if (!horizontal_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
985 {
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
986 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
987 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
988 val->selected);
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
989 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
990 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
991 val->selected);
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
992
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
993 if (val->contents)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
994 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
995 int a_w = arrow_width (mw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
996 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
997 x + width - a_w
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
998 - mw->menu.horizontal_spacing
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
999 - mw->menu.shadow_thickness,
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
1000 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
1001 highlighted_p);
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1002 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1003 else if (val->key)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1004 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1005 XDrawString (XtDisplay (mw), ws->window, text_gc,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1006 x + label_width + mw->menu.arrow_spacing,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1007 y + v_spacing + shadow + font_ascent,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1008 val->key, strlen (val->key));
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 }
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1011 else
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1012 {
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1013 XDrawRectangle (XtDisplay (mw), ws->window,
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1014 mw->menu.background_gc,
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1015 x + shadow, y + shadow,
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1016 label_width + h_spacing - 1,
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1017 font_ascent + font_descent + 2 * v_spacing - 1);
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1018 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
1019 True, False);
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1020 }
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1021
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1022 if (highlighted_p)
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
1023 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
1024 False);
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1025 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1026 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1027
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1028 where->x += width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1029 where->y += height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1030 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1031
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1032 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1033 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
1034 this, that)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1035 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1036 int level;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1037 Boolean just_compute_p;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1038 XPoint* highlighted_pos;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1039 XPoint* hit;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1040 widget_value** hit_return;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1041 widget_value* this;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1042 widget_value* that;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1043 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1044 widget_value* val;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1045 widget_value* following_item;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1046 window_state* ws;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1047 XPoint where;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1048 int horizontal_p = mw->menu.horizontal && (level == 0);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1049 int highlighted_p;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1050 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
1051 /* 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
1052 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
1053 int no_return = 0;
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
1054 enum menu_separator separator;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1055
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1056 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
1057 abort_gracefully ((Widget) mw);
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1058
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1059 if (level < mw->menu.old_depth - 1)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1060 following_item = mw->menu.old_stack [level + 1];
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1061 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1062 following_item = NULL;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1063
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1064 if (hit)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1065 *hit_return = NULL;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1066
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1067 where.x = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1068 where.y = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1069
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1070 ws = &mw->menu.windows [level];
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1071 for (val = mw->menu.old_stack [level]->contents; val; val = val->next)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1072 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1073 highlighted_p = val == following_item;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1074 if (highlighted_p && highlighted_pos)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1075 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1076 if (horizontal_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1077 highlighted_pos->x = where.x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1078 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1079 highlighted_pos->y = where.y;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1080 }
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 just_compute_this_one_p =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1083 just_compute_p || ((this || that) && val != this && val != that);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1084
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1085 display_menu_item (mw, val, ws, &where, highlighted_p, horizontal_p,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1086 just_compute_this_one_p);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1087
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1088 if (highlighted_p && highlighted_pos)
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 if (horizontal_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1091 highlighted_pos->y = where.y;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1092 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1093 highlighted_pos->x = where.x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1094 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1095
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1096 if (hit
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1097 && !*hit_return
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1098 && (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
1099 && !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
1100 && !no_return)
c3bfd473a4d3 (display_menu): If an item is disabled,
Richard M. Stallman <rms@gnu.org>
parents: 17622
diff changeset
1101 {
c3bfd473a4d3 (display_menu): If an item is disabled,
Richard M. Stallman <rms@gnu.org>
parents: 17622
diff changeset
1102 if (val->enabled)
c3bfd473a4d3 (display_menu): If an item is disabled,
Richard M. Stallman <rms@gnu.org>
parents: 17622
diff changeset
1103 *hit_return = val;
c3bfd473a4d3 (display_menu): If an item is disabled,
Richard M. Stallman <rms@gnu.org>
parents: 17622
diff changeset
1104 else
c3bfd473a4d3 (display_menu): If an item is disabled,
Richard M. Stallman <rms@gnu.org>
parents: 17622
diff changeset
1105 no_return = 1;
c3bfd473a4d3 (display_menu): If an item is disabled,
Richard M. Stallman <rms@gnu.org>
parents: 17622
diff changeset
1106 }
5626
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 if (horizontal_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1109 where.y = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1110 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1111 where.x = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1112 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1113
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1114 if (!just_compute_p)
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
1115 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
1116 False, False);
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1117 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1118
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1119 /* Motion code */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1120 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1121 set_new_state (mw, val, level)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1122 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1123 widget_value* val;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1124 int level;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1125 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1126 int i;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1127
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1128 mw->menu.new_depth = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1129 for (i = 0; i < level; i++)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1130 push_new_stack (mw, mw->menu.old_stack [i]);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1131 push_new_stack (mw, val);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1132 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1133
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1134 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1135 make_windows_if_needed (mw, n)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1136 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1137 int n;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1138 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1139 int i;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1140 int start_at;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1141 XSetWindowAttributes xswa;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1142 int mask;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1143 Window root = RootWindowOfScreen (DefaultScreenOfDisplay (XtDisplay (mw)));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1144 window_state* windows;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1145
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1146 if (mw->menu.windows_length >= n)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1147 return;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1148
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1149 xswa.save_under = True;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1150 xswa.override_redirect = True;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1151 xswa.background_pixel = mw->core.background_pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1152 xswa.border_pixel = mw->core.border_pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1153 xswa.event_mask =
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1154 ExposureMask | PointerMotionMask | PointerMotionHintMask
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1155 | ButtonReleaseMask | ButtonPressMask;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1156 xswa.cursor = mw->menu.cursor_shape;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1157 mask = CWSaveUnder | CWOverrideRedirect | CWBackPixel | CWBorderPixel
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1158 | CWEventMask | CWCursor;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1159
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1160 if (!mw->menu.windows)
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 mw->menu.windows =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1163 (window_state*)XtMalloc (n * sizeof (window_state));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1164 start_at = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1165 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1166 else
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 mw->menu.windows =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1169 (window_state*)XtRealloc ((char*)mw->menu.windows,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1170 n * sizeof (window_state));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1171 start_at = mw->menu.windows_length;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1172 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1173 mw->menu.windows_length = n;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1174
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1175 windows = mw->menu.windows;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1176
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1177 for (i = start_at; i < n; i++)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1178 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1179 windows [i].x = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1180 windows [i].y = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1181 windows [i].width = 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1182 windows [i].height = 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1183 windows [i].window =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1184 XCreateWindow (XtDisplay (mw), root, 0, 0, 1, 1,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1185 0, 0, CopyFromParent, CopyFromParent, mask, &xswa);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1186 }
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1189 /* Make the window fit in the screen */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1190 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1191 fit_to_screen (mw, ws, previous_ws, horizontal_p)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1192 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1193 window_state* ws;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1194 window_state* previous_ws;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1195 Boolean horizontal_p;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1196 {
11461
65c12e57f119 (size_menu): Make height and label_width unsigned.
Richard M. Stallman <rms@gnu.org>
parents: 9746
diff changeset
1197 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
1198 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
1199 /* 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
1200 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
1201 int horizontal_overlap = 0;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1202
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1203 if (ws->x < 0)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1204 ws->x = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1205 else if (ws->x + ws->width > screen_width)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1206 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1207 if (!horizontal_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1208 ws->x = previous_ws->x - ws->width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1209 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1210 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
1211 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
1212 {
5aabcff9fdd3 (enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents: 15742
diff changeset
1213 ws->x = 0;
5aabcff9fdd3 (enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents: 15742
diff changeset
1214 horizontal_overlap = 1;
5aabcff9fdd3 (enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents: 15742
diff changeset
1215 }
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1216 }
16917
5aabcff9fdd3 (enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents: 15742
diff changeset
1217 /* 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
1218 if (horizontal_overlap
5aabcff9fdd3 (enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents: 15742
diff changeset
1219 && 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
1220 && 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
1221 {
5aabcff9fdd3 (enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents: 15742
diff changeset
1222 /* 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
1223 if there's room. */
5aabcff9fdd3 (enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents: 15742
diff changeset
1224 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
1225 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
1226 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
1227 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
1228 }
5aabcff9fdd3 (enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents: 15742
diff changeset
1229
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1230 if (ws->y < 0)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1231 ws->y = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1232 else if (ws->y + ws->height > screen_height)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1233 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1234 if (horizontal_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1235 ws->y = previous_ws->y - ws->height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1236 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1237 ws->y = screen_height - ws->height;
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
1238 if (ws->y < 0)
d954daf0a213 (fit_to_screen): Don't put the menu off the left or top.
Richard M. Stallman <rms@gnu.org>
parents: 9227
diff changeset
1239 ws->y = 0;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1240 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1241 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1242
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1243 /* Updates old_stack from new_stack and redisplays. */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1244 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1245 remap_menubar (mw)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1246 XlwMenuWidget mw;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1247 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1248 int i;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1249 int last_same;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1250 XPoint selection_position;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1251 int old_depth = mw->menu.old_depth;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1252 int new_depth = mw->menu.new_depth;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1253 widget_value** old_stack;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1254 widget_value** new_stack;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1255 window_state* windows;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1256 widget_value* old_selection;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1257 widget_value* new_selection;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1258
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1259 /* Check that enough windows and old_stack are ready. */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1260 make_windows_if_needed (mw, new_depth);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1261 make_old_stack_space (mw, new_depth);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1262 windows = mw->menu.windows;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1263 old_stack = mw->menu.old_stack;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1264 new_stack = mw->menu.new_stack;
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 /* compute the last identical different entry */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1267 for (i = 1; i < old_depth && i < new_depth; i++)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1268 if (old_stack [i] != new_stack [i])
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1269 break;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1270 last_same = i - 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1271
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1272 /* Memorize the previously selected item to be able to refresh it */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1273 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
1274 if (old_selection && !old_selection->enabled)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1275 old_selection = NULL;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1276 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
1277 if (new_selection && !new_selection->enabled)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1278 new_selection = NULL;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1279
27338
58f8eee82765 (xlwMenuResources): All XtNhighlightCallback.
Gerd Moellmann <gerd@gnu.org>
parents: 26087
diff changeset
1280 /* Call callback when the hightlighted item changes. */
58f8eee82765 (xlwMenuResources): All XtNhighlightCallback.
Gerd Moellmann <gerd@gnu.org>
parents: 26087
diff changeset
1281 if (old_selection || new_selection)
58f8eee82765 (xlwMenuResources): All XtNhighlightCallback.
Gerd Moellmann <gerd@gnu.org>
parents: 26087
diff changeset
1282 XtCallCallbackList ((Widget)mw, mw->menu.highlight,
58f8eee82765 (xlwMenuResources): All XtNhighlightCallback.
Gerd Moellmann <gerd@gnu.org>
parents: 26087
diff changeset
1283 (XtPointer) new_selection);
58f8eee82765 (xlwMenuResources): All XtNhighlightCallback.
Gerd Moellmann <gerd@gnu.org>
parents: 26087
diff changeset
1284
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1285 /* 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
1286 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
1287 for (i = last_same + 1; i < new_depth; i++)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1288 old_stack [i] = new_stack [i];
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1289 mw->menu.old_depth = new_depth;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1290
14018
0a94cd2c51c4 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 13899
diff changeset
1291 /* refresh the last selection */
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1292 selection_position.x = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1293 selection_position.y = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1294 display_menu (mw, last_same, new_selection == old_selection,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1295 &selection_position, NULL, NULL, old_selection, new_selection);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1296
16917
5aabcff9fdd3 (enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents: 15742
diff changeset
1297 /* 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
1298 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
1299 {
16917
5aabcff9fdd3 (enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents: 15742
diff changeset
1300 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
1301 window_state *ws = &windows[i];
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1302
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
1303 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
1304 + mw->menu.shadow_thickness);
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
1305 if (i == 1)
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
1306 ws->x += mw->menu.margin;
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
1307
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
1308 #if 0
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1309 if (!mw->menu.horizontal || i > 1)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1310 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
1311 #endif
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
1312
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
1313 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
1314 + mw->menu.shadow_thickness);
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
1315 if (i == 1)
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
1316 ws->y += mw->menu.margin;
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 size_menu (mw, i);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1319
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1320 fit_to_screen (mw, ws, previous_ws, mw->menu.horizontal && i == 1);
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 XClearWindow (XtDisplay (mw), ws->window);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1323 XMoveResizeWindow (XtDisplay (mw), ws->window, ws->x, ws->y,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1324 ws->width, ws->height);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1325 XMapRaised (XtDisplay (mw), ws->window);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1326 display_menu (mw, i, False, &selection_position, NULL, NULL, NULL, NULL);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1327 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1328
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1329 /* unmap the menus that popped down */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1330 for (i = new_depth - 1; i < old_depth; i++)
16917
5aabcff9fdd3 (enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents: 15742
diff changeset
1331 if (i >= new_depth || !new_stack[i]->contents)
5aabcff9fdd3 (enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents: 15742
diff changeset
1332 XUnmapWindow (XtDisplay (mw), windows[i].window);
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1333 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1334
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1335 static Boolean
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1336 motion_event_is_in_menu (mw, ev, level, relative_pos)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1337 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1338 XMotionEvent* ev;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1339 int level;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1340 XPoint* relative_pos;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1341 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1342 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
1343 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
1344 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
1345 int y = ws->y + shadow;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1346 relative_pos->x = ev->x_root - x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1347 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
1348 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
1349 && y - shadow < ev->y_root && ev->y_root < y + ws->height);
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1350 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1351
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1352 static Boolean
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1353 map_event_to_widget_value (mw, ev, val, level)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1354 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1355 XMotionEvent* ev;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1356 widget_value** val;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1357 int* level;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1358 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1359 int i;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1360 XPoint relative_pos;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1361 window_state* ws;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1362
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1363 *val = NULL;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1364
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1365 /* Find the window */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1366 for (i = mw->menu.old_depth - 1; i >= 0; i--)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1367 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1368 ws = &mw->menu.windows [i];
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1369 if (ws && motion_event_is_in_menu (mw, ev, i, &relative_pos))
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1370 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1371 display_menu (mw, i, True, NULL, &relative_pos, val, NULL, NULL);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1372
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1373 if (*val)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1374 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1375 *level = i + 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1376 return True;
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 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1379 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1380 return False;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1381 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1382
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1383 /* Procedures */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1384 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1385 make_drawing_gcs (mw)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1386 XlwMenuWidget mw;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1387 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1388 XGCValues xgcv;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1389
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1390 xgcv.font = mw->menu.font->fid;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1391 xgcv.foreground = mw->menu.foreground;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1392 xgcv.background = mw->core.background_pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1393 mw->menu.foreground_gc = XtGetGC ((Widget)mw,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1394 GCFont | GCForeground | GCBackground,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1395 &xgcv);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1396
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1397 xgcv.font = mw->menu.font->fid;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1398 xgcv.foreground = mw->menu.button_foreground;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1399 xgcv.background = mw->core.background_pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1400 mw->menu.button_gc = XtGetGC ((Widget)mw,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1401 GCFont | GCForeground | GCBackground,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1402 &xgcv);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1403
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1404 xgcv.font = mw->menu.font->fid;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1405 xgcv.foreground = mw->menu.foreground;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1406 xgcv.background = mw->core.background_pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1407 xgcv.fill_style = FillStippled;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1408 xgcv.stipple = mw->menu.gray_pixmap;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1409 mw->menu.inactive_gc = XtGetGC ((Widget)mw,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1410 (GCFont | GCForeground | GCBackground
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1411 | GCFillStyle | GCStipple), &xgcv);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1412
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1413 xgcv.font = mw->menu.font->fid;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1414 xgcv.foreground = mw->menu.button_foreground;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1415 xgcv.background = mw->core.background_pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1416 xgcv.fill_style = FillStippled;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1417 xgcv.stipple = mw->menu.gray_pixmap;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1418 mw->menu.inactive_button_gc = XtGetGC ((Widget)mw,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1419 (GCFont | GCForeground | GCBackground
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1420 | GCFillStyle | GCStipple), &xgcv);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1421
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1422 xgcv.font = mw->menu.font->fid;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1423 xgcv.foreground = mw->core.background_pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1424 xgcv.background = mw->menu.foreground;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1425 mw->menu.background_gc = XtGetGC ((Widget)mw,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1426 GCFont | GCForeground | GCBackground,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1427 &xgcv);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1428 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1429
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1430 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1431 release_drawing_gcs (mw)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1432 XlwMenuWidget mw;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1433 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1434 XtReleaseGC ((Widget) mw, mw->menu.foreground_gc);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1435 XtReleaseGC ((Widget) mw, mw->menu.button_gc);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1436 XtReleaseGC ((Widget) mw, mw->menu.inactive_gc);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1437 XtReleaseGC ((Widget) mw, mw->menu.inactive_button_gc);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1438 XtReleaseGC ((Widget) mw, mw->menu.background_gc);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1439 /* let's get some segvs if we try to use these... */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1440 mw->menu.foreground_gc = (GC) -1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1441 mw->menu.button_gc = (GC) -1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1442 mw->menu.inactive_gc = (GC) -1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1443 mw->menu.inactive_button_gc = (GC) -1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1444 mw->menu.background_gc = (GC) -1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1445 }
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 #define MINL(x,y) ((((unsigned long) (x)) < ((unsigned long) (y))) \
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1448 ? ((unsigned long) (x)) : ((unsigned long) (y)))
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1449
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1450 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1451 make_shadow_gcs (mw)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1452 XlwMenuWidget mw;
5626
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 XGCValues xgcv;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1455 unsigned long pm = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1456 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
1457 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
1458 Colormap cmap = mw->core.colormap;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1459 XColor topc, botc;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1460 int top_frobbed = 0, bottom_frobbed = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1461
29700
1e88ad071a1a (make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents: 29602
diff changeset
1462 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
1463 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
1464
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1465 if (mw->menu.top_shadow_color == -1)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1466 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
1467 else
1e88ad071a1a (make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents: 29602
diff changeset
1468 mw->menu.top_shadow_color = mw->menu.top_shadow_color;
1e88ad071a1a (make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents: 29602
diff changeset
1469
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1470 if (mw->menu.bottom_shadow_color == -1)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1471 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
1472 else
1e88ad071a1a (make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents: 29602
diff changeset
1473 mw->menu.bottom_shadow_color = mw->menu.bottom_shadow_color;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1474
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1475 if (mw->menu.top_shadow_color == mw->core.background_pixel ||
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1476 mw->menu.top_shadow_color == mw->menu.foreground)
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 topc.pixel = mw->core.background_pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1479 XQueryColor (dpy, cmap, &topc);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1480 /* don't overflow/wrap! */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1481 topc.red = MINL (65535, topc.red * 1.2);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1482 topc.green = MINL (65535, topc.green * 1.2);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1483 topc.blue = MINL (65535, topc.blue * 1.2);
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
1484 #ifdef emacs
29469
f9b5fe053f7c (x_alloc_nearest_color_for_widget, x_catch_errors, x_uncatch_errors)
Dave Love <fx@gnu.org>
parents: 27988
diff changeset
1485 if (x_alloc_nearest_color_for_widget ((Widget) mw, cmap, &topc))
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
1486 #else
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1487 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
1488 #endif
5626
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 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
1491 mw->menu.free_top_shadow_color_p = 1;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1492 top_frobbed = 1;
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 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1495 if (mw->menu.bottom_shadow_color == mw->menu.foreground ||
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1496 mw->menu.bottom_shadow_color == mw->core.background_pixel)
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 botc.pixel = mw->core.background_pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1499 XQueryColor (dpy, cmap, &botc);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1500 botc.red *= 0.6;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1501 botc.green *= 0.6;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1502 botc.blue *= 0.6;
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
1503 #ifdef emacs
29469
f9b5fe053f7c (x_alloc_nearest_color_for_widget, x_catch_errors, x_uncatch_errors)
Dave Love <fx@gnu.org>
parents: 27988
diff changeset
1504 if (x_alloc_nearest_color_for_widget ((Widget) mw, cmap, &botc))
25034
305d2ac394ae (make_shadow_gcs) ]emacs]: Use x_alloc_nearest_color.
Gerd Moellmann <gerd@gnu.org>
parents: 19960
diff changeset
1505 #else
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1506 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
1507 #endif
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1508 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1509 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
1510 mw->menu.free_bottom_shadow_color_p = 1;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1511 bottom_frobbed = 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1512 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1513 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1514
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1515 if (top_frobbed && bottom_frobbed)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1516 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1517 int top_avg = ((topc.red / 3) + (topc.green / 3) + (topc.blue / 3));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1518 int bot_avg = ((botc.red / 3) + (botc.green / 3) + (botc.blue / 3));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1519 if (bot_avg > top_avg)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1520 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1521 Pixel tmp = mw->menu.top_shadow_color;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1522 mw->menu.top_shadow_color = mw->menu.bottom_shadow_color;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1523 mw->menu.bottom_shadow_color = tmp;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1524 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1525 else if (topc.pixel == botc.pixel)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1526 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1527 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
1528 {
29700
1e88ad071a1a (make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents: 29602
diff changeset
1529 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
1530 {
1e88ad071a1a (make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents: 29602
diff changeset
1531 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
1532 &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
1533 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
1534 }
1e88ad071a1a (make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents: 29602
diff changeset
1535 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
1536 }
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1537 else
29602
d13e7c93d265 (make_shadow_gcs): Free and copy colors so that
Gerd Moellmann <gerd@gnu.org>
parents: 29469
diff changeset
1538 {
29700
1e88ad071a1a (make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents: 29602
diff changeset
1539 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
1540 {
1e88ad071a1a (make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents: 29602
diff changeset
1541 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
1542 &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
1543 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
1544 }
1e88ad071a1a (make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents: 29602
diff changeset
1545 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
1546 }
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1547 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1548 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1549
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1550 if (!mw->menu.top_shadow_pixmap &&
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1551 mw->menu.top_shadow_color == mw->core.background_pixel)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1552 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1553 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
1554 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
1555 {
1e88ad071a1a (make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents: 29602
diff changeset
1556 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
1557 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
1558 }
1e88ad071a1a (make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents: 29602
diff changeset
1559 mw->menu.top_shadow_color = mw->menu.foreground;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1560 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1561 if (!mw->menu.bottom_shadow_pixmap &&
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1562 mw->menu.bottom_shadow_color == mw->core.background_pixel)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1563 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1564 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
1565 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
1566 {
1e88ad071a1a (make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents: 29602
diff changeset
1567 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
1568 &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
1569 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
1570 }
1e88ad071a1a (make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents: 29602
diff changeset
1571 mw->menu.bottom_shadow_color = mw->menu.foreground;
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 xgcv.fill_style = FillStippled;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1575 xgcv.foreground = mw->menu.top_shadow_color;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1576 xgcv.stipple = mw->menu.top_shadow_pixmap;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1577 pm = (xgcv.stipple ? GCStipple|GCFillStyle : 0);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1578 mw->menu.shadow_top_gc = XtGetGC ((Widget)mw, GCForeground | pm, &xgcv);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1579
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1580 xgcv.foreground = mw->menu.bottom_shadow_color;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1581 xgcv.stipple = mw->menu.bottom_shadow_pixmap;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1582 pm = (xgcv.stipple ? GCStipple|GCFillStyle : 0);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1583 mw->menu.shadow_bottom_gc = XtGetGC ((Widget)mw, GCForeground | pm, &xgcv);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1584 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1585
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1586
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1587 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1588 release_shadow_gcs (mw)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1589 XlwMenuWidget mw;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1590 {
29602
d13e7c93d265 (make_shadow_gcs): Free and copy colors so that
Gerd Moellmann <gerd@gnu.org>
parents: 29469
diff changeset
1591 Display *dpy = XtDisplay ((Widget) mw);
d13e7c93d265 (make_shadow_gcs): Free and copy colors so that
Gerd Moellmann <gerd@gnu.org>
parents: 29469
diff changeset
1592 Screen *screen = XtScreen ((Widget) mw);
d13e7c93d265 (make_shadow_gcs): Free and copy colors so that
Gerd Moellmann <gerd@gnu.org>
parents: 29469
diff changeset
1593 Colormap cmap = mw->core.colormap;
d13e7c93d265 (make_shadow_gcs): Free and copy colors so that
Gerd Moellmann <gerd@gnu.org>
parents: 29469
diff changeset
1594 Pixel px[2];
29700
1e88ad071a1a (make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents: 29602
diff changeset
1595 int i = 0;
29602
d13e7c93d265 (make_shadow_gcs): Free and copy colors so that
Gerd Moellmann <gerd@gnu.org>
parents: 29469
diff changeset
1596
29700
1e88ad071a1a (make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents: 29602
diff changeset
1597 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
1598 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
1599 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
1600 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
1601 if (i > 0)
1e88ad071a1a (make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents: 29602
diff changeset
1602 x_free_dpy_colors (dpy, screen, cmap, px, i);
1e88ad071a1a (make_shadow_gcs): Set free_top_shadow_color_p
Gerd Moellmann <gerd@gnu.org>
parents: 29602
diff changeset
1603
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1604 XtReleaseGC ((Widget) mw, mw->menu.shadow_top_gc);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1605 XtReleaseGC ((Widget) mw, mw->menu.shadow_bottom_gc);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1606 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1607
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1608 static void
9746
49e984bf6689 (xlwmenu_default_font): New global variable.
Richard M. Stallman <rms@gnu.org>
parents: 9700
diff changeset
1609 XlwMenuInitialize (request, mw, args, num_args)
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1610 Widget request;
9746
49e984bf6689 (xlwmenu_default_font): New global variable.
Richard M. Stallman <rms@gnu.org>
parents: 9700
diff changeset
1611 XlwMenuWidget mw;
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1612 ArgList args;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1613 Cardinal *num_args;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1614 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1615 /* Get the GCs and the widget size */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1616 XSetWindowAttributes xswa;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1617 int mask;
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 Window window = RootWindowOfScreen (DefaultScreenOfDisplay (XtDisplay (mw)));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1620 Display* display = XtDisplay (mw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1621
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1622 #if 0
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1623 widget_value *tem = (widget_value *) XtMalloc (sizeof (widget_value));
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1624
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1625 /* _XtCreate is freeing the object that was passed to us,
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1626 so make a copy that we will actually keep. */
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1627 lwlib_bcopy (mw->menu.contents, tem, sizeof (widget_value));
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1628 mw->menu.contents = tem;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1629 #endif
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1630
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1631 /* mw->menu.cursor = XCreateFontCursor (display, mw->menu.cursor_shape); */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1632 mw->menu.cursor = mw->menu.cursor_shape;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1633
11885
c686f5539749 (XlwMenuInitialize): Cast XCreatePixmapFromBitmapData args.
Karl Heuer <kwzh@gnu.org>
parents: 11461
diff changeset
1634 mw->menu.gray_pixmap
30324
d4713daa6716 Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents: 29700
diff changeset
1635 = XCreatePixmapFromBitmapData (display, window, gray_bitmap_bits,
d4713daa6716 Don't include <X11/bitmaps/gray> because that
Gerd Moellmann <gerd@gnu.org>
parents: 29700
diff changeset
1636 gray_bitmap_width, gray_bitmap_height,
11885
c686f5539749 (XlwMenuInitialize): Cast XCreatePixmapFromBitmapData args.
Karl Heuer <kwzh@gnu.org>
parents: 11461
diff changeset
1637 (unsigned long)1, (unsigned long)0, 1);
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1638
9746
49e984bf6689 (xlwmenu_default_font): New global variable.
Richard M. Stallman <rms@gnu.org>
parents: 9700
diff changeset
1639 /* 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
1640 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
1641 Can anyone find a real fix? -- rms. */
49e984bf6689 (xlwmenu_default_font): New global variable.
Richard M. Stallman <rms@gnu.org>
parents: 9700
diff changeset
1642 if (mw->menu.font == 0)
49e984bf6689 (xlwmenu_default_font): New global variable.
Richard M. Stallman <rms@gnu.org>
parents: 9700
diff changeset
1643 mw->menu.font = xlwmenu_default_font;
49e984bf6689 (xlwmenu_default_font): New global variable.
Richard M. Stallman <rms@gnu.org>
parents: 9700
diff changeset
1644
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1645 make_drawing_gcs (mw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1646 make_shadow_gcs (mw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1647
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1648 xswa.background_pixel = mw->core.background_pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1649 xswa.border_pixel = mw->core.border_pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1650 mask = CWBackPixel | CWBorderPixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1651
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1652 mw->menu.popped_up = False;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1653
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1654 mw->menu.old_depth = 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1655 mw->menu.old_stack = (widget_value**)XtMalloc (sizeof (widget_value*));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1656 mw->menu.old_stack_length = 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1657 mw->menu.old_stack [0] = mw->menu.contents;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1658
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1659 mw->menu.new_depth = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1660 mw->menu.new_stack = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1661 mw->menu.new_stack_length = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1662 push_new_stack (mw, mw->menu.contents);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1663
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1664 mw->menu.windows = (window_state*)XtMalloc (sizeof (window_state));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1665 mw->menu.windows_length = 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1666 mw->menu.windows [0].x = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1667 mw->menu.windows [0].y = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1668 mw->menu.windows [0].width = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1669 mw->menu.windows [0].height = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1670 size_menu (mw, 0);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1671
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1672 mw->core.width = mw->menu.windows [0].width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1673 mw->core.height = mw->menu.windows [0].height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1674 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1675
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1676 static void
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1677 XlwMenuClassInitialize ()
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1678 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1679 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1680
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1681 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1682 XlwMenuRealize (w, valueMask, attributes)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1683 Widget w;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1684 Mask *valueMask;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1685 XSetWindowAttributes *attributes;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1686 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1687 XlwMenuWidget mw = (XlwMenuWidget)w;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1688 XSetWindowAttributes xswa;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1689 int mask;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1690
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1691 (*xlwMenuWidgetClass->core_class.superclass->core_class.realize)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1692 (w, valueMask, attributes);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1693
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1694 xswa.save_under = True;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1695 xswa.cursor = mw->menu.cursor_shape;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1696 mask = CWSaveUnder | CWCursor;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1697 XChangeWindowAttributes (XtDisplay (w), XtWindow (w), mask, &xswa);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1698
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1699 mw->menu.windows [0].window = XtWindow (w);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1700 mw->menu.windows [0].x = w->core.x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1701 mw->menu.windows [0].y = w->core.y;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1702 mw->menu.windows [0].width = w->core.width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1703 mw->menu.windows [0].height = w->core.height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1704 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1705
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1706 /* 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
1707 receives expose events through Xt. So we repaint all the other panes
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1708 when receiving an Expose event. */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1709 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1710 XlwMenuRedisplay (w, ev, region)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1711 Widget w;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1712 XEvent* ev;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1713 Region region;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1714 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1715 XlwMenuWidget mw = (XlwMenuWidget)w;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1716 int i;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1717
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1718 /* 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
1719 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
1720 if (submenu_destroyed)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1721 {
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1722 mw->menu.old_depth = 1;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1723 submenu_destroyed = 0;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1724 }
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1725
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1726 for (i = 0; i < mw->menu.old_depth; i++)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1727 display_menu (mw, i, False, NULL, NULL, NULL, NULL, NULL);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1728 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1729
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1730 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1731 XlwMenuDestroy (w)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1732 Widget w;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1733 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1734 int i;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1735 XlwMenuWidget mw = (XlwMenuWidget) w;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1736
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1737 if (pointer_grabbed)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1738 XtUngrabPointer ((Widget)w, CurrentTime);
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1739 pointer_grabbed = 0;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1740
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1741 submenu_destroyed = 1;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1742
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1743 release_drawing_gcs (mw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1744 release_shadow_gcs (mw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1745
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1746 /* this doesn't come from the resource db but is created explicitly
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1747 so we must free it ourselves. */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1748 XFreePixmap (XtDisplay (mw), mw->menu.gray_pixmap);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1749 mw->menu.gray_pixmap = (Pixmap) -1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1750
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1751 #if 0
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1752 /* Do free mw->menu.contents because nowadays we copy it
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1753 during initialization. */
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1754 XtFree (mw->menu.contents);
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1755 #endif
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1756
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1757 /* Don't free mw->menu.contents because that comes from our creator.
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1758 The `*_stack' elements are just pointers into `contents' so leave
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1759 that alone too. But free the stacks themselves. */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1760 if (mw->menu.old_stack) XtFree ((char *) mw->menu.old_stack);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1761 if (mw->menu.new_stack) XtFree ((char *) mw->menu.new_stack);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1762
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1763 /* Remember, you can't free anything that came from the resource
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1764 database. This includes:
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1765 mw->menu.cursor
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1766 mw->menu.top_shadow_pixmap
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1767 mw->menu.bottom_shadow_pixmap
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1768 mw->menu.font
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1769 Also the color cells of top_shadow_color, bottom_shadow_color,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1770 foreground, and button_foreground will never be freed until this
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1771 client exits. Nice, eh?
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1772 */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1773
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1774 /* 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
1775 for (i = 1; i < mw->menu.windows_length; i++)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1776 XDestroyWindow (XtDisplay (mw), mw->menu.windows [i].window);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1777 if (mw->menu.windows)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1778 XtFree ((char *) mw->menu.windows);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1779 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1780
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1781 static Boolean
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1782 XlwMenuSetValues (current, request, new)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1783 Widget current;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1784 Widget request;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1785 Widget new;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1786 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1787 XlwMenuWidget oldmw = (XlwMenuWidget)current;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1788 XlwMenuWidget newmw = (XlwMenuWidget)new;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1789 Boolean redisplay = False;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1790 int i;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1791
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1792 if (newmw->menu.contents
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1793 && newmw->menu.contents->contents
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1794 && newmw->menu.contents->contents->change >= VISIBLE_CHANGE)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1795 redisplay = True;
13899
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1796 /* Do redisplay if the contents are entirely eliminated. */
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1797 if (newmw->menu.contents
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1798 && newmw->menu.contents->contents == 0
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1799 && newmw->menu.contents->change >= VISIBLE_CHANGE)
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1800 redisplay = True;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1801
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1802 if (newmw->core.background_pixel != oldmw->core.background_pixel
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1803 || newmw->menu.foreground != oldmw->menu.foreground
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1804 || newmw->menu.font != oldmw->menu.font)
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1805 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1806 release_drawing_gcs (newmw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1807 make_drawing_gcs (newmw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1808 redisplay = True;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1809
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1810 for (i = 0; i < oldmw->menu.windows_length; i++)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1811 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1812 XSetWindowBackground (XtDisplay (oldmw),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1813 oldmw->menu.windows [i].window,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1814 newmw->core.background_pixel);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1815 /* clear windows and generate expose events */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1816 XClearArea (XtDisplay (oldmw), oldmw->menu.windows[i].window,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1817 0, 0, 0, 0, True);
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 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1820
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1821 return redisplay;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1822 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1823
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1824 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1825 XlwMenuResize (w)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1826 Widget w;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1827 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1828 XlwMenuWidget mw = (XlwMenuWidget)w;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1829
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1830 if (mw->menu.popped_up)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1831 {
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1832 /* Don't allow the popup menu to resize itself. */
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1833 mw->core.width = mw->menu.windows [0].width;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1834 mw->core.height = mw->menu.windows [0].height;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1835 mw->core.parent->core.width = mw->core.width ;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1836 mw->core.parent->core.height = mw->core.height ;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1837 }
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1838 else
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1839 {
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1840 mw->menu.windows [0].width = mw->core.width;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1841 mw->menu.windows [0].height = mw->core.height;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1842 }
5626
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1845 /* Action procedures */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1846 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1847 handle_single_motion_event (mw, ev)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1848 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1849 XMotionEvent* ev;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1850 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1851 widget_value* val;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1852 int level;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1853
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1854 if (!map_event_to_widget_value (mw, ev, &val, &level))
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1855 pop_new_stack_if_no_contents (mw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1856 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1857 set_new_state (mw, val, level);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1858 remap_menubar (mw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1859
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1860 /* Sync with the display. Makes it feel better on X terms. */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1861 XSync (XtDisplay (mw), False);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1862 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1863
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1864 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1865 handle_motion_event (mw, ev)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1866 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1867 XMotionEvent* ev;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1868 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1869 int x = ev->x_root;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1870 int y = ev->y_root;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1871 int state = ev->state;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1872
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1873 handle_single_motion_event (mw, ev);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1874
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1875 /* allow motion events to be generated again */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1876 if (ev->is_hint
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1877 && XQueryPointer (XtDisplay (mw), ev->window,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1878 &ev->root, &ev->subwindow,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1879 &ev->x_root, &ev->y_root,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1880 &ev->x, &ev->y,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1881 &ev->state)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1882 && ev->state == state
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1883 && (ev->x_root != x || ev->y_root != y))
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1884 handle_single_motion_event (mw, ev);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1885 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1886
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1887 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1888 Start (w, ev, params, num_params)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1889 Widget w;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1890 XEvent *ev;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1891 String *params;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1892 Cardinal *num_params;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1893 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1894 XlwMenuWidget mw = (XlwMenuWidget)w;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1895
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1896 if (!mw->menu.popped_up)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1897 {
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1898 menu_post_event = *ev;
29469
f9b5fe053f7c (x_alloc_nearest_color_for_widget, x_catch_errors, x_uncatch_errors)
Dave Love <fx@gnu.org>
parents: 27988
diff changeset
1899 pop_up_menu (mw, (XButtonPressedEvent*) ev);
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1900 }
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1901 else
9027
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1902 {
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1903 /* If we push a button while the menu is posted semipermanently,
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1904 releasing the button should always pop the menu down. */
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1905 next_release_must_exit = 1;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1906
9027
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1907 /* notes the absolute position of the menubar window */
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1908 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
1909 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
1910
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1911 /* handles the down like a move, slots are compatible */
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1912 handle_motion_event (mw, &ev->xmotion);
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1913 }
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1914 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1915
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1916 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1917 Drag (w, ev, params, num_params)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1918 Widget w;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1919 XEvent *ev;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1920 String *params;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1921 Cardinal *num_params;
5626
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 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
1924 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
1925 handle_motion_event (mw, &ev->xmotion);
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1926 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1927
13899
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1928 /* Do nothing.
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1929 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
1930 static void
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1931 Nothing (w, ev, params, num_params)
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1932 Widget w;
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1933 XEvent *ev;
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1934 String *params;
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1935 Cardinal *num_params;
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1936 {
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1937 }
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1938
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1939 /* 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
1940 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
1941 static void
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1942 Key (w, ev, params, num_params)
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1943 Widget w;
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1944 XEvent *ev;
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1945 String *params;
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1946 Cardinal *num_params;
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1947 {
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1948 XlwMenuWidget mw = (XlwMenuWidget)w;
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1949
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1950 /* Pop down everything. */
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1951 mw->menu.new_depth = 1;
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1952 remap_menubar (mw);
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1953
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1954 if (mw->menu.popped_up)
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1955 {
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1956 mw->menu.popped_up = False;
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1957 XtUngrabPointer ((Widget)mw, ev->xmotion.time);
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1958 if (XtIsShell (XtParent ((Widget) mw)))
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1959 XtPopdown (XtParent ((Widget) mw));
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1960 else
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1961 {
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1962 XtRemoveGrab ((Widget) mw);
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1963 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
1964 }
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1965 }
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1966
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1967 /* callback */
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1968 XtCallCallbackList ((Widget)mw, mw->menu.select, (XtPointer)0);
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1969 }
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1970
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1971 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1972 Select (w, ev, params, num_params)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1973 Widget w;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1974 XEvent *ev;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1975 String *params;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1976 Cardinal *num_params;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1977 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1978 XlwMenuWidget mw = (XlwMenuWidget)w;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1979 widget_value* selected_item = mw->menu.old_stack [mw->menu.old_depth - 1];
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1980
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1981 /* If user releases the button quickly, without selecting anything,
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1982 after the initial down-click that brought the menu up,
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1983 do nothing. */
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1984 if ((selected_item == 0
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1985 || ((widget_value *) selected_item)->call_data == 0)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1986 && !next_release_must_exit
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1987 && (ev->xbutton.time - menu_post_event.xbutton.time
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1988 < XtGetMultiClickTime (XtDisplay (w))))
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1989 return;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1990
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1991 /* pop down everything. */
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1992 mw->menu.new_depth = 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1993 remap_menubar (mw);
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 if (mw->menu.popped_up)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1996 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1997 mw->menu.popped_up = False;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1998 XtUngrabPointer ((Widget)mw, ev->xmotion.time);
9033
3c36c72db2bb *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 9027
diff changeset
1999 if (XtIsShell (XtParent ((Widget) mw)))
3c36c72db2bb *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 9027
diff changeset
2000 XtPopdown (XtParent ((Widget) mw));
9027
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2001 else
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2002 {
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2003 XtRemoveGrab ((Widget) mw);
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2004 display_menu (mw, 0, False, NULL, NULL, NULL, NULL, NULL);
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2005 }
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2006 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2007
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2008 /* callback */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2009 XtCallCallbackList ((Widget)mw, mw->menu.select, (XtPointer)selected_item);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2010 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2011
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2012
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2013 /* Special code to pop-up a menu */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2014 void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2015 pop_up_menu (mw, event)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2016 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2017 XButtonPressedEvent* event;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2018 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2019 int x = event->x_root;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2020 int y = event->y_root;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2021 int w;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2022 int h;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2023 int borderwidth = mw->menu.shadow_thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2024 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
2025 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
2026 int count;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2027
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2028 next_release_must_exit = 0;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2029
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2030 XtCallCallbackList ((Widget)mw, mw->menu.open, NULL);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2031
9033
3c36c72db2bb *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 9027
diff changeset
2032 if (XtIsShell (XtParent ((Widget)mw)))
9027
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2033 size_menu (mw, 0);
5626
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 w = mw->menu.windows [0].width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2036 h = mw->menu.windows [0].height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2037
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2038 x -= borderwidth;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2039 y -= borderwidth;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2040 if (x < borderwidth)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2041 x = borderwidth;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2042 if (x + w + 2 * borderwidth > WidthOfScreen (screen))
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2043 x = WidthOfScreen (screen) - w - 2 * borderwidth;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2044 if (y < borderwidth)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2045 y = borderwidth;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2046 if (y + h + 2 * borderwidth> HeightOfScreen (screen))
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2047 y = HeightOfScreen (screen) - h - 2 * borderwidth;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2048
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2049 mw->menu.popped_up = True;
9033
3c36c72db2bb *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 9027
diff changeset
2050 if (XtIsShell (XtParent ((Widget)mw)))
9027
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2051 {
9033
3c36c72db2bb *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 9027
diff changeset
2052 XtConfigureWidget (XtParent ((Widget)mw), x, y, w, h,
3c36c72db2bb *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 9027
diff changeset
2053 XtParent ((Widget)mw)->core.border_width);
3c36c72db2bb *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 9027
diff changeset
2054 XtPopup (XtParent ((Widget)mw), XtGrabExclusive);
9027
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2055 display_menu (mw, 0, False, NULL, NULL, NULL, NULL, NULL);
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2056 mw->menu.windows [0].x = x + borderwidth;
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2057 mw->menu.windows [0].y = y + borderwidth;
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2058 }
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2059 else
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2060 {
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2061 XEvent *ev = (XEvent *) event;
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2062
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
2063 XtAddGrab ((Widget) mw, True, True);
9027
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2064
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2065 /* notes the absolute position of the menubar window */
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2066 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
2067 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
2068 }
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
2069
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2070 #ifdef emacs
17622
742a57e66f7d (pop_up_menu): Update the call to x_catch_errors.
Richard M. Stallman <rms@gnu.org>
parents: 16917
diff changeset
2071 count = x_catch_errors (display);
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2072 #endif
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
2073 XtGrabPointer ((Widget)mw, False,
0033f98d2ffd Clean up of temporary changes used to try to find a workaround for the
Paul Reilly <pmr@pajato.com>
parents: 9086
diff changeset
2074 (PointerMotionMask
0033f98d2ffd Clean up of temporary changes used to try to find a workaround for the
Paul Reilly <pmr@pajato.com>
parents: 9086
diff changeset
2075 | PointerMotionHintMask
0033f98d2ffd Clean up of temporary changes used to try to find a workaround for the
Paul Reilly <pmr@pajato.com>
parents: 9086
diff changeset
2076 | ButtonReleaseMask
0033f98d2ffd Clean up of temporary changes used to try to find a workaround for the
Paul Reilly <pmr@pajato.com>
parents: 9086
diff changeset
2077 | ButtonPressMask),
0033f98d2ffd Clean up of temporary changes used to try to find a workaround for the
Paul Reilly <pmr@pajato.com>
parents: 9086
diff changeset
2078 GrabModeAsync, GrabModeAsync, None,
0033f98d2ffd Clean up of temporary changes used to try to find a workaround for the
Paul Reilly <pmr@pajato.com>
parents: 9086
diff changeset
2079 mw->menu.cursor_shape,
0033f98d2ffd Clean up of temporary changes used to try to find a workaround for the
Paul Reilly <pmr@pajato.com>
parents: 9086
diff changeset
2080 event->time);
0033f98d2ffd Clean up of temporary changes used to try to find a workaround for the
Paul Reilly <pmr@pajato.com>
parents: 9086
diff changeset
2081 pointer_grabbed = 1;
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2082 #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
2083 if (x_had_errors_p (display))
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2084 {
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2085 pointer_grabbed = 0;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2086 XtUngrabPointer ((Widget)mw, event->time);
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2087 }
17622
742a57e66f7d (pop_up_menu): Update the call to x_catch_errors.
Richard M. Stallman <rms@gnu.org>
parents: 16917
diff changeset
2088 x_uncatch_errors (display, count);
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
2089 #endif
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2090
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2091 handle_motion_event (mw, (XMotionEvent*)event);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2092 }