annotate lwlib/xlwmenu.c @ 22758:dbd9ecc9dbac

Added next-buffer/previous-buffer keybindings (bound to M-n/M-p). (crisp-unbury-buffer): New function. Fixed bogus XEmacs/Lucid string-match checking. Made modeline entry mouse2-able. (crisp-mode-map): Make this a sparse keymap parented from current-global-map. (crisp-mode-original-keymap): Don't copy the keymap. (crisp-last-last-command): Renamed from last-last-command. defvar it. (crisp-mode): Honor ARG. (crisp-kill-line, crisp-copy-line): When a region isn't highlighted, use the region from point to eol. Honor prefix argument. (crisp-submit-bug-report): New command, taken from cc-mode. Shortened the version numbering, removed the release-version tracking (crisp-version): New function. New keybindings `C-home', `C-end', `M-home', `M-end', `C-f', `M-l', `M-m'. (crisp-copy-line): No need to save point. Removed S-right and S-left bindings. Abstract the marking and selection interfaces so that we can be compatible with both Emacs and XEmacs. And try and make the behavior as close as possible under both environments so that there are no surprises.
author Karl Heuer <kwzh@gnu.org>
date Tue, 14 Jul 1998 22:17:35 +0000
parents 38172783650b
children 305d2ac394ae
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 #include <stdio.h>
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 #include <sys/types.h>
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 #include <X11/Xos.h>
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 #include <X11/IntrinsicP.h>
9033
3c36c72db2bb *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 9027
diff changeset
28 #include <X11/ObjectP.h>
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 #include <X11/StringDefs.h>
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30 #include <X11/cursorfont.h>
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
31 #include <X11/bitmaps/gray>
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32 #include "xlwmenuP.h"
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
33
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
34 static int pointer_grabbed;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
35 static XEvent menu_post_event;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
36
9746
49e984bf6689 (xlwmenu_default_font): New global variable.
Richard M. Stallman <rms@gnu.org>
parents: 9700
diff changeset
37 XFontStruct *xlwmenu_default_font;
49e984bf6689 (xlwmenu_default_font): New global variable.
Richard M. Stallman <rms@gnu.org>
parents: 9700
diff changeset
38
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 static char
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 xlwMenuTranslations [] =
13899
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
41 "<BtnDown>: start()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
42 <Motion>: drag()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
43 <BtnUp>: select()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
44 <Key>Shift_L: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
45 <Key>Shift_R: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
46 <Key>Meta_L: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
47 <Key>Meta_R: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
48 <Key>Control_L: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
49 <Key>Control_R: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
50 <Key>Hyper_L: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
51 <Key>Hyper_R: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
52 <Key>Super_L: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
53 <Key>Super_R: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
54 <Key>Alt_L: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
55 <Key>Alt_R: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
56 <Key>Caps_Lock: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
57 <Key>Shift_Lock: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
58 <KeyUp>Shift_L: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
59 <KeyUp>Shift_R: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
60 <KeyUp>Meta_L: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
61 <KeyUp>Meta_R: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
62 <KeyUp>Control_L: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
63 <KeyUp>Control_R: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
64 <KeyUp>Hyper_L: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
65 <KeyUp>Hyper_R: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
66 <KeyUp>Super_L: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
67 <KeyUp>Super_R: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
68 <KeyUp>Alt_L: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
69 <KeyUp>Alt_R: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
70 <KeyUp>Caps_Lock: nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
71 <KeyUp>Shift_Lock:nothing()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
72 <Key>: key()\n\
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
73 <KeyUp>: key()\n\
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 ";
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 #define offset(field) XtOffset(XlwMenuWidget, field)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77 static XtResource
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 xlwMenuResources[] =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 {XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct *),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 offset(menu.font),XtRString, "XtDefaultFont"},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 {XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 offset(menu.foreground), XtRString, "XtDefaultForeground"},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84 {XtNbuttonForeground, XtCButtonForeground, XtRPixel, sizeof(Pixel),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 offset(menu.button_foreground), XtRString, "XtDefaultForeground"},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
86 {XtNmargin, XtCMargin, XtRDimension, sizeof(Dimension),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 offset(menu.margin), XtRImmediate, (XtPointer)0},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 {XtNhorizontalSpacing, XtCMargin, XtRDimension, sizeof(Dimension),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
89 offset(menu.horizontal_spacing), XtRImmediate, (XtPointer)3},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
90 {XtNverticalSpacing, XtCMargin, XtRDimension, sizeof(Dimension),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
91 offset(menu.vertical_spacing), XtRImmediate, (XtPointer)1},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
92 {XtNarrowSpacing, XtCMargin, XtRDimension, sizeof(Dimension),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
93 offset(menu.arrow_spacing), XtRImmediate, (XtPointer)10},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
94
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
95 {XmNshadowThickness, XmCShadowThickness, XtRDimension,
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
96 sizeof (Dimension), offset (menu.shadow_thickness),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97 XtRImmediate, (XtPointer) 2},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
98 {XmNtopShadowColor, XmCTopShadowColor, XtRPixel, sizeof (Pixel),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99 offset (menu.top_shadow_color), XtRImmediate, (XtPointer)-1},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
100 {XmNbottomShadowColor, XmCBottomShadowColor, XtRPixel, sizeof (Pixel),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 offset (menu.bottom_shadow_color), XtRImmediate, (XtPointer)-1},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
102 {XmNtopShadowPixmap, XmCTopShadowPixmap, XtRPixmap, sizeof (Pixmap),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 offset (menu.top_shadow_pixmap), XtRImmediate, (XtPointer)None},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 {XmNbottomShadowPixmap, XmCBottomShadowPixmap, XtRPixmap, sizeof (Pixmap),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 offset (menu.bottom_shadow_pixmap), XtRImmediate, (XtPointer)None},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 {XtNopen, XtCCallback, XtRCallback, sizeof(XtPointer),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 offset(menu.open), XtRCallback, (XtPointer)NULL},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 {XtNselect, XtCCallback, XtRCallback, sizeof(XtPointer),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 offset(menu.select), XtRCallback, (XtPointer)NULL},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 {XtNmenu, XtCMenu, XtRPointer, sizeof(XtPointer),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 offset(menu.contents), XtRImmediate, (XtPointer)NULL},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 {XtNcursor, XtCCursor, XtRCursor, sizeof(Cursor),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 offset(menu.cursor_shape), XtRString, (XtPointer)"right_ptr"},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 {XtNhorizontal, XtCHorizontal, XtRInt, sizeof(int),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 offset(menu.horizontal), XtRImmediate, (XtPointer)True},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 };
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 #undef offset
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 static Boolean XlwMenuSetValues();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 static void XlwMenuRealize();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 static void XlwMenuRedisplay();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123 static void XlwMenuResize();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 static void XlwMenuInitialize();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 static void XlwMenuRedisplay();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 static void XlwMenuDestroy();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127 static void XlwMenuClassInitialize();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
128 static void Start();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 static void Drag();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 static void Select();
13899
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
131 static void Key();
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
132 static void Nothing();
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 static XtActionsRec
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 xlwMenuActionsList [] =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137 {"start", Start},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
138 {"drag", Drag},
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 {"select", Select},
13899
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
140 {"key", Key},
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
141 {"nothing", Nothing},
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142 };
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 #define SuperClass ((CoreWidgetClass)&coreClassRec)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146 XlwMenuClassRec xlwMenuClassRec =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
147 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 { /* CoreClass fields initialization */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 (WidgetClass) SuperClass, /* superclass */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 "XlwMenu", /* class_name */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 sizeof(XlwMenuRec), /* size */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 XlwMenuClassInitialize, /* class_initialize */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153 NULL, /* class_part_initialize */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
154 FALSE, /* class_inited */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 XlwMenuInitialize, /* initialize */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 NULL, /* initialize_hook */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 XlwMenuRealize, /* realize */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 xlwMenuActionsList, /* actions */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 XtNumber(xlwMenuActionsList), /* num_actions */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160 xlwMenuResources, /* resources */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
161 XtNumber(xlwMenuResources), /* resource_count */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 NULLQUARK, /* xrm_class */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 TRUE, /* compress_motion */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 TRUE, /* compress_exposure */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 TRUE, /* compress_enterleave */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 FALSE, /* visible_interest */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167 XlwMenuDestroy, /* destroy */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
168 XlwMenuResize, /* resize */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
169 XlwMenuRedisplay, /* expose */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
170 XlwMenuSetValues, /* set_values */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
171 NULL, /* set_values_hook */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
172 XtInheritSetValuesAlmost, /* set_values_almost */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
173 NULL, /* get_values_hook */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 NULL, /* accept_focus */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 XtVersion, /* version */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 NULL, /* callback_private */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 xlwMenuTranslations, /* tm_table */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 XtInheritQueryGeometry, /* query_geometry */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179 XtInheritDisplayAccelerator, /* display_accelerator */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
180 NULL /* extension */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 }, /* XlwMenuClass fields initialization */
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 0 /* dummy */
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 };
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187 WidgetClass xlwMenuWidgetClass = (WidgetClass) &xlwMenuClassRec;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
189 int submenu_destroyed;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
190
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
191 static int next_release_must_exit;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
192
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193 /* Utilities */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
195 push_new_stack (mw, val)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
196 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
197 widget_value* val;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
198 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 if (!mw->menu.new_stack)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201 mw->menu.new_stack_length = 10;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 mw->menu.new_stack =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 (widget_value**)XtCalloc (mw->menu.new_stack_length,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 sizeof (widget_value*));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206 else if (mw->menu.new_depth == mw->menu.new_stack_length)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 mw->menu.new_stack_length *= 2;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209 mw->menu.new_stack =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
210 (widget_value**)XtRealloc ((char*)mw->menu.new_stack,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 mw->menu.new_stack_length * sizeof (widget_value*));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 mw->menu.new_stack [mw->menu.new_depth++] = val;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
217 pop_new_stack_if_no_contents (mw)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
218 XlwMenuWidget mw;
5626
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 if (mw->menu.new_depth)
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 if (!mw->menu.new_stack [mw->menu.new_depth - 1]->contents)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 mw->menu.new_depth -= 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
228 make_old_stack_space (mw, n)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
229 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
230 int n;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 if (!mw->menu.old_stack)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 mw->menu.old_stack_length = 10;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 mw->menu.old_stack =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 (widget_value**)XtCalloc (mw->menu.old_stack_length,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 sizeof (widget_value*));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 else if (mw->menu.old_stack_length < n)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 mw->menu.old_stack_length *= 2;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 mw->menu.old_stack =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 (widget_value**)XtRealloc ((char*)mw->menu.old_stack,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 mw->menu.old_stack_length * sizeof (widget_value*));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248 /* Size code */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 static Boolean
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
250 all_dashes_p (s)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
251 char *s;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 char* p;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254 for (p = s; *p == '-'; p++);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 return !*p;
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
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
258 int
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
259 string_width (mw, s)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
260 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
261 char *s;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 XCharStruct xcs;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 int drop;
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 XTextExtents (mw->menu.font, s, strlen (s), &drop, &drop, &drop, &xcs);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267 return xcs.width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270 static int
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
271 arrow_width (mw)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
272 XlwMenuWidget mw;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 return mw->menu.font->ascent / 2 | 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 static XtResource
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 nameResource[] =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 {"labelString", "LabelString", XtRString, sizeof(String),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 0, XtRImmediate, 0},
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 static char*
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
285 resource_widget_value (mw, val)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
286 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
287 widget_value *val;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 if (!val->toolkit_data)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
290 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
291 char* resourced_name = NULL;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
292 char* complete_name;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
293 XtGetSubresources ((Widget) mw,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
294 (XtPointer) &resourced_name,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
295 val->name, val->name,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296 nameResource, 1, NULL, 0);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 if (!resourced_name)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 resourced_name = val->name;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 if (!val->value)
5654
f84dac6453db *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 5626
diff changeset
300 {
f84dac6453db *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 5626
diff changeset
301 complete_name = (char *) XtMalloc (strlen (resourced_name) + 1);
f84dac6453db *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 5626
diff changeset
302 strcpy (complete_name, resourced_name);
f84dac6453db *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 5626
diff changeset
303 }
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
306 int complete_length =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 strlen (resourced_name) + strlen (val->value) + 2;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 complete_name = XtMalloc (complete_length);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 *complete_name = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 strcat (complete_name, resourced_name);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 strcat (complete_name, " ");
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312 strcat (complete_name, val->value);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 val->toolkit_data = complete_name;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 val->free_toolkit_data = True;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 return (char*)val->toolkit_data;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321 /* Returns the sizes of an item */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
323 size_menu_item (mw, val, horizontal_p, label_width, rest_width, height)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
324 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
325 widget_value* val;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
326 int horizontal_p;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
327 int* label_width;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
328 int* rest_width;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
329 int* height;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331 if (all_dashes_p (val->name))
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
333 *height = 2;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
334 *label_width = 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335 *rest_width = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339 *height =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 mw->menu.font->ascent + mw->menu.font->descent
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341 + 2 * mw->menu.vertical_spacing + 2 * mw->menu.shadow_thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343 *label_width =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344 string_width (mw, resource_widget_value (mw, val))
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 + mw->menu.horizontal_spacing + mw->menu.shadow_thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 *rest_width = mw->menu.horizontal_spacing + mw->menu.shadow_thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 if (!horizontal_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 if (val->contents)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351 *rest_width += arrow_width (mw) + mw->menu.arrow_spacing;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352 else if (val->key)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353 *rest_width +=
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354 string_width (mw, val->key) + mw->menu.arrow_spacing;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
360 size_menu (mw, level)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
361 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
362 int level;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
363 {
11461
65c12e57f119 (size_menu): Make height and label_width unsigned.
Richard M. Stallman <rms@gnu.org>
parents: 9746
diff changeset
364 unsigned int label_width = 0;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365 int rest_width = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366 int max_rest_width = 0;
11461
65c12e57f119 (size_menu): Make height and label_width unsigned.
Richard M. Stallman <rms@gnu.org>
parents: 9746
diff changeset
367 unsigned int height = 0;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368 int horizontal_p = mw->menu.horizontal && (level == 0);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369 widget_value* val;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
370 window_state* ws;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372 if (level >= mw->menu.old_depth)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
373 abort ();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
374
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375 ws = &mw->menu.windows [level];
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376 ws->width = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377 ws->height = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378 ws->label_width = 0;
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 for (val = mw->menu.old_stack [level]->contents; val; val = val->next)
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 size_menu_item (mw, val, horizontal_p, &label_width, &rest_width,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383 &height);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
384 if (horizontal_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
385 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
386 ws->width += label_width + rest_width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
387 if (height > ws->height)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388 ws->height = height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
389 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392 if (label_width > ws->label_width)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393 ws->label_width = label_width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394 if (rest_width > max_rest_width)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395 max_rest_width = rest_width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
396 ws->height += height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
397 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
398 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400 if (horizontal_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
401 ws->label_width = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
402 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403 ws->width = ws->label_width + max_rest_width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 ws->width += 2 * mw->menu.shadow_thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 ws->height += 2 * mw->menu.shadow_thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408
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 /* Display code */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
412 draw_arrow (mw, window, gc, x, y, width)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
413 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
414 Window window;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
415 GC gc;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
416 int x;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
417 int y;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
418 int width;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 XPoint points [3];
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 points [0].x = x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 points [0].y = y + mw->menu.font->ascent;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 points [1].x = x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424 points [1].y = y;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425 points [2].x = x + width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426 points [2].y = y + mw->menu.font->ascent / 2;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428 XFillPolygon (XtDisplay (mw), window, gc, points, 3, Convex,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429 CoordModeOrigin);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430 }
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 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
433 draw_shadow_rectangle (mw, window, x, y, width, height, erase_p)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
434 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
435 Window window;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
436 int x;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
437 int y;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
438 int width;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
439 int height;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
440 int erase_p;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
441 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442 Display *dpy = XtDisplay (mw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 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
444 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
445 int thickness = mw->menu.shadow_thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 XPoint points [4];
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 points [0].x = x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448 points [0].y = y;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449 points [1].x = x + width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450 points [1].y = y;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 points [2].x = x + width - thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452 points [2].y = y + thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453 points [3].x = x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454 points [3].y = y + thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 XFillPolygon (dpy, window, top_gc, points, 4, Convex, CoordModeOrigin);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456 points [0].x = x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457 points [0].y = y + thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
458 points [1].x = x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
459 points [1].y = y + height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
460 points [2].x = x + thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
461 points [2].y = y + height - thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
462 points [3].x = x + thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
463 points [3].y = y + thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
464 XFillPolygon (dpy, window, top_gc, points, 4, Convex, CoordModeOrigin);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465 points [0].x = x + width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466 points [0].y = y;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467 points [1].x = x + width - thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468 points [1].y = y + thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 points [2].x = x + width - thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
470 points [2].y = y + height - thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471 points [3].x = x + width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472 points [3].y = y + height - thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
473 XFillPolygon (dpy, window, bottom_gc, points, 4, Convex, CoordModeOrigin);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
474 points [0].x = x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
475 points [0].y = y + height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
476 points [1].x = x + width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
477 points [1].y = y + height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478 points [2].x = x + width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
479 points [2].y = y + height - thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
480 points [3].x = x + thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
481 points [3].y = y + height - thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
482 XFillPolygon (dpy, window, bottom_gc, points, 4, Convex, CoordModeOrigin);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
483 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
484
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
485
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
486 /* Display the menu item and increment where.x and where.y to show how large
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
487 ** the menu item was.
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 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
490 display_menu_item (mw, val, ws, where, highlighted_p, horizontal_p, just_compute_p)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
491 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
492 widget_value* val;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
493 window_state* ws;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
494 XPoint* where;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
495 Boolean highlighted_p;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
496 Boolean horizontal_p;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
497 Boolean just_compute_p;
5626
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 GC deco_gc;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
500 GC text_gc;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
501 int font_ascent = mw->menu.font->ascent;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
502 int font_descent = mw->menu.font->descent;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
503 int shadow = mw->menu.shadow_thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
504 int separator_p = all_dashes_p (val->name);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
505 int h_spacing = mw->menu.horizontal_spacing;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
506 int v_spacing = mw->menu.vertical_spacing;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
507 int label_width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
508 int rest_width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
509 int height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
510 int width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
511 int button_p;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
512
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
513 /* compute the sizes of the item */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
514 size_menu_item (mw, val, horizontal_p, &label_width, &rest_width, &height);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
515
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
516 if (horizontal_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
517 width = label_width + rest_width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
518 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
519 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
520 label_width = ws->label_width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
521 width = ws->width - 2 * shadow;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
522 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
523
13560
3974e093d47f (display_menu_item): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 13485
diff changeset
524 #if 0
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
525 /* see if it should be a button in the menubar */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
526 button_p = horizontal_p && val->call_data;
13485
44fccef90f33 (display_menu_item): Don't treat buttons specially.
Richard M. Stallman <rms@gnu.org>
parents: 11987
diff changeset
527 #endif
44fccef90f33 (display_menu_item): Don't treat buttons specially.
Richard M. Stallman <rms@gnu.org>
parents: 11987
diff changeset
528 button_p = 0;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
529
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
530 /* Only highlight an enabled item that has a callback. */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
531 if (highlighted_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
532 if (!val->enabled || !(val->call_data || val->contents))
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
533 highlighted_p = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
534
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535 /* do the drawing. */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536 if (!just_compute_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
538 /* Add the shadow border of the containing menu */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
539 int x = where->x + shadow;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
540 int y = where->y + shadow;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
542 /* pick the foreground and background GC. */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543 if (val->enabled)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
544 text_gc = button_p ? mw->menu.button_gc : mw->menu.foreground_gc;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
545 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
546 text_gc =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
547 button_p ? mw->menu.inactive_button_gc : mw->menu.inactive_gc;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
548 deco_gc = mw->menu.foreground_gc;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
549
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
550 if (separator_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
551 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
552 XDrawLine (XtDisplay (mw), ws->window, mw->menu.shadow_bottom_gc,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
553 x, y, x + width, y);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
554 XDrawLine (XtDisplay (mw), ws->window, mw->menu.shadow_top_gc,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
555 x, y + 1, x + width, y + 1);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
556 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
557 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 {
9227
968bb25ec1af (display_menu_item): Add support for displaying the title in pop up menus.
Paul Reilly <pmr@pajato.com>
parents: 9092
diff changeset
559 int x_offset = x + h_spacing + shadow;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560 char* display_string = resource_widget_value (mw, val);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561 draw_shadow_rectangle (mw, ws->window, x, y, width, height, True);
9227
968bb25ec1af (display_menu_item): Add support for displaying the title in pop up menus.
Paul Reilly <pmr@pajato.com>
parents: 9092
diff changeset
562
968bb25ec1af (display_menu_item): Add support for displaying the title in pop up menus.
Paul Reilly <pmr@pajato.com>
parents: 9092
diff changeset
563 /* 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
564 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
565 {
968bb25ec1af (display_menu_item): Add support for displaying the title in pop up menus.
Paul Reilly <pmr@pajato.com>
parents: 9092
diff changeset
566 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
567
968bb25ec1af (display_menu_item): Add support for displaying the title in pop up menus.
Paul Reilly <pmr@pajato.com>
parents: 9092
diff changeset
568 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
569 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
570 }
968bb25ec1af (display_menu_item): Add support for displaying the title in pop up menus.
Paul Reilly <pmr@pajato.com>
parents: 9092
diff changeset
571 XDrawString (XtDisplay (mw), ws->window, text_gc, x_offset,
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
572 y + v_spacing + shadow + font_ascent,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
573 display_string, strlen (display_string));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
574
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
575 if (!horizontal_p)
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 if (val->contents)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579 int a_w = arrow_width (mw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
580 draw_arrow (mw, ws->window, deco_gc,
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
581 x + width - arrow_width (mw)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
582 - mw->menu.horizontal_spacing
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
583 - mw->menu.shadow_thickness,
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
584 y + v_spacing + shadow, a_w);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
585 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
586 else if (val->key)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
587 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
588 XDrawString (XtDisplay (mw), ws->window, text_gc,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
589 x + label_width + mw->menu.arrow_spacing,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
590 y + v_spacing + shadow + font_ascent,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591 val->key, strlen (val->key));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595 else if (button_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
596 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597 #if 1
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
598 XDrawRectangle (XtDisplay (mw), ws->window, deco_gc,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
599 x + shadow, y + shadow,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600 label_width + h_spacing - 1,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601 font_ascent + font_descent + 2 * v_spacing - 1);
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
602 draw_shadow_rectangle (mw, ws->window, x, y, width, height,
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
603 False);
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
604 #else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
605 highlighted_p = True;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
606 #endif
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
607 }
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
608 else
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
609 {
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
610 XDrawRectangle (XtDisplay (mw), ws->window,
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
611 mw->menu.background_gc,
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
612 x + shadow, y + shadow,
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
613 label_width + h_spacing - 1,
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
614 font_ascent + font_descent + 2 * v_spacing - 1);
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
615 draw_shadow_rectangle (mw, ws->window, x, y, width, height,
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
616 True);
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
617 }
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
618
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
619 if (highlighted_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
620 draw_shadow_rectangle (mw, ws->window, x, y, width, height, False);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
621 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
622 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
623
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
624 where->x += width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
625 where->y += height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
626 }
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 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
629 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
630 this, that)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
631 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
632 int level;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
633 Boolean just_compute_p;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
634 XPoint* highlighted_pos;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
635 XPoint* hit;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
636 widget_value** hit_return;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
637 widget_value* this;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
638 widget_value* that;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
639 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
640 widget_value* val;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
641 widget_value* following_item;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
642 window_state* ws;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
643 XPoint where;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
644 int horizontal_p = mw->menu.horizontal && (level == 0);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
645 int highlighted_p;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
646 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
647 /* 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
648 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
649 int no_return = 0;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
650
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651 if (level >= mw->menu.old_depth)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652 abort ();
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
653
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654 if (level < mw->menu.old_depth - 1)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
655 following_item = mw->menu.old_stack [level + 1];
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
656 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
657 following_item = NULL;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
658
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
659 if (hit)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
660 *hit_return = NULL;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
661
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
662 where.x = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
663 where.y = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
664
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665 ws = &mw->menu.windows [level];
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
666 for (val = mw->menu.old_stack [level]->contents; val; val = val->next)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
667 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
668 highlighted_p = val == following_item;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
669 if (highlighted_p && highlighted_pos)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
670 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
671 if (horizontal_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
672 highlighted_pos->x = where.x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
673 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674 highlighted_pos->y = where.y;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
675 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
676
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
677 just_compute_this_one_p =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
678 just_compute_p || ((this || that) && val != this && val != that);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
679
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
680 display_menu_item (mw, val, ws, &where, highlighted_p, horizontal_p,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
681 just_compute_this_one_p);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
682
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683 if (highlighted_p && highlighted_pos)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
684 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
685 if (horizontal_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
686 highlighted_pos->y = where.y;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
687 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
688 highlighted_pos->x = where.x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
689 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
690
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
691 if (hit
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
692 && !*hit_return
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
693 && (horizontal_p ? hit->x < where.x : hit->y < where.y)
18993
c3bfd473a4d3 (display_menu): If an item is disabled,
Richard M. Stallman <rms@gnu.org>
parents: 17622
diff changeset
694 && !all_dashes_p (val->name)
c3bfd473a4d3 (display_menu): If an item is disabled,
Richard M. Stallman <rms@gnu.org>
parents: 17622
diff changeset
695 && !no_return)
c3bfd473a4d3 (display_menu): If an item is disabled,
Richard M. Stallman <rms@gnu.org>
parents: 17622
diff changeset
696 {
c3bfd473a4d3 (display_menu): If an item is disabled,
Richard M. Stallman <rms@gnu.org>
parents: 17622
diff changeset
697 if (val->enabled)
c3bfd473a4d3 (display_menu): If an item is disabled,
Richard M. Stallman <rms@gnu.org>
parents: 17622
diff changeset
698 *hit_return = val;
c3bfd473a4d3 (display_menu): If an item is disabled,
Richard M. Stallman <rms@gnu.org>
parents: 17622
diff changeset
699 else
c3bfd473a4d3 (display_menu): If an item is disabled,
Richard M. Stallman <rms@gnu.org>
parents: 17622
diff changeset
700 no_return = 1;
c3bfd473a4d3 (display_menu): If an item is disabled,
Richard M. Stallman <rms@gnu.org>
parents: 17622
diff changeset
701 }
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
702
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
703 if (horizontal_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
704 where.y = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
705 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706 where.x = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
707 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
708
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
709 if (!just_compute_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
710 draw_shadow_rectangle (mw, ws->window, 0, 0, ws->width, ws->height, False);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
711 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713 /* Motion code */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
714 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
715 set_new_state (mw, val, level)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
716 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
717 widget_value* val;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
718 int level;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720 int i;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
721
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
722 mw->menu.new_depth = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
723 for (i = 0; i < level; i++)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
724 push_new_stack (mw, mw->menu.old_stack [i]);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
725 push_new_stack (mw, val);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
727
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
728 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
729 make_windows_if_needed (mw, n)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
730 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
731 int n;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
732 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
733 int i;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
734 int start_at;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
735 XSetWindowAttributes xswa;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
736 int mask;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
737 Window root = RootWindowOfScreen (DefaultScreenOfDisplay (XtDisplay (mw)));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
738 window_state* windows;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
739
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
740 if (mw->menu.windows_length >= n)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
741 return;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
742
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
743 xswa.save_under = True;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
744 xswa.override_redirect = True;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
745 xswa.background_pixel = mw->core.background_pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
746 xswa.border_pixel = mw->core.border_pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
747 xswa.event_mask =
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
748 ExposureMask | PointerMotionMask | PointerMotionHintMask
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
749 | ButtonReleaseMask | ButtonPressMask;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
750 xswa.cursor = mw->menu.cursor_shape;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
751 mask = CWSaveUnder | CWOverrideRedirect | CWBackPixel | CWBorderPixel
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
752 | CWEventMask | CWCursor;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
753
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
754 if (!mw->menu.windows)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
755 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
756 mw->menu.windows =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
757 (window_state*)XtMalloc (n * sizeof (window_state));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
758 start_at = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
759 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
760 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
761 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
762 mw->menu.windows =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
763 (window_state*)XtRealloc ((char*)mw->menu.windows,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
764 n * sizeof (window_state));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
765 start_at = mw->menu.windows_length;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
766 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
767 mw->menu.windows_length = n;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
768
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
769 windows = mw->menu.windows;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
770
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
771 for (i = start_at; i < n; i++)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
772 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
773 windows [i].x = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
774 windows [i].y = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
775 windows [i].width = 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
776 windows [i].height = 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
777 windows [i].window =
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
778 XCreateWindow (XtDisplay (mw), root, 0, 0, 1, 1,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
779 0, 0, CopyFromParent, CopyFromParent, mask, &xswa);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
780 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
781 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
782
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
783 /* Make the window fit in the screen */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
784 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
785 fit_to_screen (mw, ws, previous_ws, horizontal_p)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
786 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
787 window_state* ws;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
788 window_state* previous_ws;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
789 Boolean horizontal_p;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
790 {
11461
65c12e57f119 (size_menu): Make height and label_width unsigned.
Richard M. Stallman <rms@gnu.org>
parents: 9746
diff changeset
791 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
792 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
793 /* 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
794 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
795 int horizontal_overlap = 0;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
796
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
797 if (ws->x < 0)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
798 ws->x = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
799 else if (ws->x + ws->width > screen_width)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
800 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
801 if (!horizontal_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
802 ws->x = previous_ws->x - ws->width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
803 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
804 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
805 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
806 {
5aabcff9fdd3 (enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents: 15742
diff changeset
807 ws->x = 0;
5aabcff9fdd3 (enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents: 15742
diff changeset
808 horizontal_overlap = 1;
5aabcff9fdd3 (enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents: 15742
diff changeset
809 }
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
810 }
16917
5aabcff9fdd3 (enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents: 15742
diff changeset
811 /* 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
812 if (horizontal_overlap
5aabcff9fdd3 (enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents: 15742
diff changeset
813 && 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
814 && 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
815 {
5aabcff9fdd3 (enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents: 15742
diff changeset
816 /* 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
817 if there's room. */
5aabcff9fdd3 (enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents: 15742
diff changeset
818 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
819 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
820 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
821 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
822 }
5aabcff9fdd3 (enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents: 15742
diff changeset
823
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
824 if (ws->y < 0)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
825 ws->y = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
826 else if (ws->y + ws->height > screen_height)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
827 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
828 if (horizontal_p)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
829 ws->y = previous_ws->y - ws->height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
830 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
831 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
832 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
833 ws->y = 0;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
834 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
835 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
836
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
837 /* Updates old_stack from new_stack and redisplays. */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
838 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
839 remap_menubar (mw)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
840 XlwMenuWidget mw;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
841 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
842 int i;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
843 int last_same;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
844 XPoint selection_position;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
845 int old_depth = mw->menu.old_depth;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
846 int new_depth = mw->menu.new_depth;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
847 widget_value** old_stack;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
848 widget_value** new_stack;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
849 window_state* windows;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
850 widget_value* old_selection;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
851 widget_value* new_selection;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
852
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
853 /* Check that enough windows and old_stack are ready. */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
854 make_windows_if_needed (mw, new_depth);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
855 make_old_stack_space (mw, new_depth);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
856 windows = mw->menu.windows;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
857 old_stack = mw->menu.old_stack;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
858 new_stack = mw->menu.new_stack;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
859
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
860 /* compute the last identical different entry */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
861 for (i = 1; i < old_depth && i < new_depth; i++)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
862 if (old_stack [i] != new_stack [i])
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
863 break;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
864 last_same = i - 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
865
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
866 /* Memorize the previously selected item to be able to refresh it */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
867 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
868 if (old_selection && !old_selection->enabled)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
869 old_selection = NULL;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
870 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
871 if (new_selection && !new_selection->enabled)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
872 new_selection = NULL;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
873
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
874 /* 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
875 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
876 for (i = last_same + 1; i < new_depth; i++)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
877 old_stack [i] = new_stack [i];
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
878 mw->menu.old_depth = new_depth;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
879
14018
0a94cd2c51c4 Comment fixes.
Karl Heuer <kwzh@gnu.org>
parents: 13899
diff changeset
880 /* refresh the last selection */
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
881 selection_position.x = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
882 selection_position.y = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
883 display_menu (mw, last_same, new_selection == old_selection,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
884 &selection_position, NULL, NULL, old_selection, new_selection);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
885
16917
5aabcff9fdd3 (enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents: 15742
diff changeset
886 /* 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
887 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
888 {
16917
5aabcff9fdd3 (enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents: 15742
diff changeset
889 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
890 window_state *ws = &windows[i];
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
891
16917
5aabcff9fdd3 (enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents: 15742
diff changeset
892 ws->x
5aabcff9fdd3 (enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents: 15742
diff changeset
893 = previous_ws->x + selection_position.x + mw->menu.shadow_thickness;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
894 if (!mw->menu.horizontal || i > 1)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
895 ws->x += mw->menu.shadow_thickness;
16917
5aabcff9fdd3 (enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents: 15742
diff changeset
896 ws->y
5aabcff9fdd3 (enriched-translations): Add top' and choice' everywhere so that *
Richard M. Stallman <rms@gnu.org>
parents: 15742
diff changeset
897 = previous_ws->y + selection_position.y + mw->menu.shadow_thickness;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
898
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
899 size_menu (mw, i);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
900
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
901 fit_to_screen (mw, ws, previous_ws, mw->menu.horizontal && i == 1);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
902
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
903 XClearWindow (XtDisplay (mw), ws->window);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
904 XMoveResizeWindow (XtDisplay (mw), ws->window, ws->x, ws->y,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
905 ws->width, ws->height);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
906 XMapRaised (XtDisplay (mw), ws->window);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
907 display_menu (mw, i, False, &selection_position, NULL, NULL, NULL, NULL);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
908 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
909
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
910 /* unmap the menus that popped down */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
911 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
912 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
913 XUnmapWindow (XtDisplay (mw), windows[i].window);
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
914 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
915
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
916 static Boolean
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
917 motion_event_is_in_menu (mw, ev, level, relative_pos)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
918 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
919 XMotionEvent* ev;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
920 int level;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
921 XPoint* relative_pos;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
922 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
923 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
924 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
925 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
926 int y = ws->y + shadow;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
927 relative_pos->x = ev->x_root - x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
928 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
929 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
930 && y - shadow < ev->y_root && ev->y_root < y + ws->height);
5626
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
933 static Boolean
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
934 map_event_to_widget_value (mw, ev, val, level)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
935 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
936 XMotionEvent* ev;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
937 widget_value** val;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
938 int* level;
5626
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 int i;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
941 XPoint relative_pos;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
942 window_state* ws;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
943
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
944 *val = NULL;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
945
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
946 /* Find the window */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
947 for (i = mw->menu.old_depth - 1; i >= 0; i--)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
948 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
949 ws = &mw->menu.windows [i];
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
950 if (ws && motion_event_is_in_menu (mw, ev, i, &relative_pos))
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
951 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
952 display_menu (mw, i, True, NULL, &relative_pos, val, NULL, NULL);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
953
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
954 if (*val)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
955 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
956 *level = i + 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
957 return True;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
958 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
959 }
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 return False;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
962 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
963
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
964 /* Procedures */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
965 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
966 make_drawing_gcs (mw)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
967 XlwMenuWidget mw;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
968 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
969 XGCValues xgcv;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
970
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
971 xgcv.font = mw->menu.font->fid;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
972 xgcv.foreground = mw->menu.foreground;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
973 xgcv.background = mw->core.background_pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
974 mw->menu.foreground_gc = XtGetGC ((Widget)mw,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
975 GCFont | GCForeground | GCBackground,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
976 &xgcv);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
977
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
978 xgcv.font = mw->menu.font->fid;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
979 xgcv.foreground = mw->menu.button_foreground;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
980 xgcv.background = mw->core.background_pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
981 mw->menu.button_gc = XtGetGC ((Widget)mw,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
982 GCFont | GCForeground | GCBackground,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
983 &xgcv);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
984
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
985 xgcv.font = mw->menu.font->fid;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
986 xgcv.foreground = mw->menu.foreground;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
987 xgcv.background = mw->core.background_pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
988 xgcv.fill_style = FillStippled;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
989 xgcv.stipple = mw->menu.gray_pixmap;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
990 mw->menu.inactive_gc = XtGetGC ((Widget)mw,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
991 (GCFont | GCForeground | GCBackground
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
992 | GCFillStyle | GCStipple), &xgcv);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
993
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
994 xgcv.font = mw->menu.font->fid;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
995 xgcv.foreground = mw->menu.button_foreground;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
996 xgcv.background = mw->core.background_pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
997 xgcv.fill_style = FillStippled;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
998 xgcv.stipple = mw->menu.gray_pixmap;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
999 mw->menu.inactive_button_gc = XtGetGC ((Widget)mw,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1000 (GCFont | GCForeground | GCBackground
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1001 | GCFillStyle | GCStipple), &xgcv);
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 xgcv.font = mw->menu.font->fid;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1004 xgcv.foreground = mw->core.background_pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1005 xgcv.background = mw->menu.foreground;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1006 mw->menu.background_gc = XtGetGC ((Widget)mw,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1007 GCFont | GCForeground | GCBackground,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1008 &xgcv);
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1011 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1012 release_drawing_gcs (mw)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1013 XlwMenuWidget mw;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1014 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1015 XtReleaseGC ((Widget) mw, mw->menu.foreground_gc);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1016 XtReleaseGC ((Widget) mw, mw->menu.button_gc);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1017 XtReleaseGC ((Widget) mw, mw->menu.inactive_gc);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1018 XtReleaseGC ((Widget) mw, mw->menu.inactive_button_gc);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1019 XtReleaseGC ((Widget) mw, mw->menu.background_gc);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1020 /* let's get some segvs if we try to use these... */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1021 mw->menu.foreground_gc = (GC) -1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1022 mw->menu.button_gc = (GC) -1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1023 mw->menu.inactive_gc = (GC) -1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1024 mw->menu.inactive_button_gc = (GC) -1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1025 mw->menu.background_gc = (GC) -1;
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 #define MINL(x,y) ((((unsigned long) (x)) < ((unsigned long) (y))) \
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1029 ? ((unsigned long) (x)) : ((unsigned long) (y)))
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 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1032 make_shadow_gcs (mw)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1033 XlwMenuWidget mw;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1034 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1035 XGCValues xgcv;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1036 unsigned long pm = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1037 Display *dpy = XtDisplay ((Widget) mw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1038 Colormap cmap = DefaultColormapOfScreen (XtScreen ((Widget) mw));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1039 XColor topc, botc;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1040 int top_frobbed = 0, bottom_frobbed = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1041
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1042 if (mw->menu.top_shadow_color == -1)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1043 mw->menu.top_shadow_color = mw->core.background_pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1044 if (mw->menu.bottom_shadow_color == -1)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1045 mw->menu.bottom_shadow_color = mw->menu.foreground;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1046
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1047 if (mw->menu.top_shadow_color == mw->core.background_pixel ||
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1048 mw->menu.top_shadow_color == mw->menu.foreground)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1049 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1050 topc.pixel = mw->core.background_pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1051 XQueryColor (dpy, cmap, &topc);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1052 /* don't overflow/wrap! */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1053 topc.red = MINL (65535, topc.red * 1.2);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1054 topc.green = MINL (65535, topc.green * 1.2);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1055 topc.blue = MINL (65535, topc.blue * 1.2);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1056 if (XAllocColor (dpy, cmap, &topc))
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1057 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1058 mw->menu.top_shadow_color = topc.pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1059 top_frobbed = 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1060 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1061 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1062 if (mw->menu.bottom_shadow_color == mw->menu.foreground ||
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1063 mw->menu.bottom_shadow_color == mw->core.background_pixel)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1064 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1065 botc.pixel = mw->core.background_pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1066 XQueryColor (dpy, cmap, &botc);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1067 botc.red *= 0.6;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1068 botc.green *= 0.6;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1069 botc.blue *= 0.6;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1070 if (XAllocColor (dpy, cmap, &botc))
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1071 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1072 mw->menu.bottom_shadow_color = botc.pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1073 bottom_frobbed = 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1074 }
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1077 if (top_frobbed && bottom_frobbed)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1078 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1079 int top_avg = ((topc.red / 3) + (topc.green / 3) + (topc.blue / 3));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1080 int bot_avg = ((botc.red / 3) + (botc.green / 3) + (botc.blue / 3));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1081 if (bot_avg > top_avg)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1082 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1083 Pixel tmp = mw->menu.top_shadow_color;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1084 mw->menu.top_shadow_color = mw->menu.bottom_shadow_color;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1085 mw->menu.bottom_shadow_color = tmp;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1086 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1087 else if (topc.pixel == botc.pixel)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1088 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1089 if (botc.pixel == mw->menu.foreground)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1090 mw->menu.top_shadow_color = mw->core.background_pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1091 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1092 mw->menu.bottom_shadow_color = mw->menu.foreground;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1093 }
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 (!mw->menu.top_shadow_pixmap &&
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1097 mw->menu.top_shadow_color == mw->core.background_pixel)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1098 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1099 mw->menu.top_shadow_pixmap = mw->menu.gray_pixmap;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1100 mw->menu.top_shadow_color = mw->menu.foreground;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1101 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1102 if (!mw->menu.bottom_shadow_pixmap &&
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1103 mw->menu.bottom_shadow_color == mw->core.background_pixel)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1104 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1105 mw->menu.bottom_shadow_pixmap = mw->menu.gray_pixmap;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1106 mw->menu.bottom_shadow_color = mw->menu.foreground;
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1109 xgcv.fill_style = FillStippled;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1110 xgcv.foreground = mw->menu.top_shadow_color;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1111 xgcv.stipple = mw->menu.top_shadow_pixmap;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1112 pm = (xgcv.stipple ? GCStipple|GCFillStyle : 0);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1113 mw->menu.shadow_top_gc = XtGetGC ((Widget)mw, GCForeground | pm, &xgcv);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1114
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1115 xgcv.foreground = mw->menu.bottom_shadow_color;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1116 xgcv.stipple = mw->menu.bottom_shadow_pixmap;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1117 pm = (xgcv.stipple ? GCStipple|GCFillStyle : 0);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1118 mw->menu.shadow_bottom_gc = XtGetGC ((Widget)mw, GCForeground | pm, &xgcv);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1119 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1120
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1121
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1122 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1123 release_shadow_gcs (mw)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1124 XlwMenuWidget mw;
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 XtReleaseGC ((Widget) mw, mw->menu.shadow_top_gc);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1127 XtReleaseGC ((Widget) mw, mw->menu.shadow_bottom_gc);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1128 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1129
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1130 static void
9746
49e984bf6689 (xlwmenu_default_font): New global variable.
Richard M. Stallman <rms@gnu.org>
parents: 9700
diff changeset
1131 XlwMenuInitialize (request, mw, args, num_args)
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1132 Widget request;
9746
49e984bf6689 (xlwmenu_default_font): New global variable.
Richard M. Stallman <rms@gnu.org>
parents: 9700
diff changeset
1133 XlwMenuWidget mw;
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1134 ArgList args;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1135 Cardinal *num_args;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1136 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1137 /* Get the GCs and the widget size */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1138 XSetWindowAttributes xswa;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1139 int mask;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1140
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1141 Window window = RootWindowOfScreen (DefaultScreenOfDisplay (XtDisplay (mw)));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1142 Display* display = XtDisplay (mw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1143
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1144 #if 0
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1145 widget_value *tem = (widget_value *) XtMalloc (sizeof (widget_value));
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1146
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1147 /* _XtCreate is freeing the object that was passed to us,
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1148 so make a copy that we will actually keep. */
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1149 lwlib_bcopy (mw->menu.contents, tem, sizeof (widget_value));
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1150 mw->menu.contents = tem;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1151 #endif
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1152
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1153 /* mw->menu.cursor = XCreateFontCursor (display, mw->menu.cursor_shape); */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1154 mw->menu.cursor = mw->menu.cursor_shape;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1155
11885
c686f5539749 (XlwMenuInitialize): Cast XCreatePixmapFromBitmapData args.
Karl Heuer <kwzh@gnu.org>
parents: 11461
diff changeset
1156 mw->menu.gray_pixmap
c686f5539749 (XlwMenuInitialize): Cast XCreatePixmapFromBitmapData args.
Karl Heuer <kwzh@gnu.org>
parents: 11461
diff changeset
1157 = XCreatePixmapFromBitmapData (display, window, gray_bits,
c686f5539749 (XlwMenuInitialize): Cast XCreatePixmapFromBitmapData args.
Karl Heuer <kwzh@gnu.org>
parents: 11461
diff changeset
1158 gray_width, gray_height,
c686f5539749 (XlwMenuInitialize): Cast XCreatePixmapFromBitmapData args.
Karl Heuer <kwzh@gnu.org>
parents: 11461
diff changeset
1159 (unsigned long)1, (unsigned long)0, 1);
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1160
9746
49e984bf6689 (xlwmenu_default_font): New global variable.
Richard M. Stallman <rms@gnu.org>
parents: 9700
diff changeset
1161 /* 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
1162 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
1163 Can anyone find a real fix? -- rms. */
49e984bf6689 (xlwmenu_default_font): New global variable.
Richard M. Stallman <rms@gnu.org>
parents: 9700
diff changeset
1164 if (mw->menu.font == 0)
49e984bf6689 (xlwmenu_default_font): New global variable.
Richard M. Stallman <rms@gnu.org>
parents: 9700
diff changeset
1165 mw->menu.font = xlwmenu_default_font;
49e984bf6689 (xlwmenu_default_font): New global variable.
Richard M. Stallman <rms@gnu.org>
parents: 9700
diff changeset
1166
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1167 make_drawing_gcs (mw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1168 make_shadow_gcs (mw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1169
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1170 xswa.background_pixel = mw->core.background_pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1171 xswa.border_pixel = mw->core.border_pixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1172 mask = CWBackPixel | CWBorderPixel;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1173
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1174 mw->menu.popped_up = False;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1175
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1176 mw->menu.old_depth = 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1177 mw->menu.old_stack = (widget_value**)XtMalloc (sizeof (widget_value*));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1178 mw->menu.old_stack_length = 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1179 mw->menu.old_stack [0] = mw->menu.contents;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1180
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1181 mw->menu.new_depth = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1182 mw->menu.new_stack = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1183 mw->menu.new_stack_length = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1184 push_new_stack (mw, mw->menu.contents);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1185
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1186 mw->menu.windows = (window_state*)XtMalloc (sizeof (window_state));
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1187 mw->menu.windows_length = 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1188 mw->menu.windows [0].x = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1189 mw->menu.windows [0].y = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1190 mw->menu.windows [0].width = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1191 mw->menu.windows [0].height = 0;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1192 size_menu (mw, 0);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1193
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1194 mw->core.width = mw->menu.windows [0].width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1195 mw->core.height = mw->menu.windows [0].height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1196 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1197
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1198 static void
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1199 XlwMenuClassInitialize ()
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1200 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1201 }
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 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1204 XlwMenuRealize (w, valueMask, attributes)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1205 Widget w;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1206 Mask *valueMask;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1207 XSetWindowAttributes *attributes;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1208 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1209 XlwMenuWidget mw = (XlwMenuWidget)w;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1210 XSetWindowAttributes xswa;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1211 int mask;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1212
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1213 (*xlwMenuWidgetClass->core_class.superclass->core_class.realize)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1214 (w, valueMask, attributes);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1215
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1216 xswa.save_under = True;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1217 xswa.cursor = mw->menu.cursor_shape;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1218 mask = CWSaveUnder | CWCursor;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1219 XChangeWindowAttributes (XtDisplay (w), XtWindow (w), mask, &xswa);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1220
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1221 mw->menu.windows [0].window = XtWindow (w);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1222 mw->menu.windows [0].x = w->core.x;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1223 mw->menu.windows [0].y = w->core.y;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1224 mw->menu.windows [0].width = w->core.width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1225 mw->menu.windows [0].height = w->core.height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1226 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1227
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1228 /* 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
1229 receives expose events through Xt. So we repaint all the other panes
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1230 when receiving an Expose event. */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1231 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1232 XlwMenuRedisplay (w, ev, region)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1233 Widget w;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1234 XEvent* ev;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1235 Region region;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1236 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1237 XlwMenuWidget mw = (XlwMenuWidget)w;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1238 int i;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1239
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1240 /* 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
1241 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
1242 if (submenu_destroyed)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1243 {
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1244 mw->menu.old_depth = 1;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1245 submenu_destroyed = 0;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1246 }
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1247
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1248 for (i = 0; i < mw->menu.old_depth; i++)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1249 display_menu (mw, i, False, NULL, NULL, NULL, NULL, NULL);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1250 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1251
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1252 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1253 XlwMenuDestroy (w)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1254 Widget w;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1255 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1256 int i;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1257 XlwMenuWidget mw = (XlwMenuWidget) w;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1258
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1259 if (pointer_grabbed)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1260 XtUngrabPointer ((Widget)w, CurrentTime);
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1261 pointer_grabbed = 0;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1262
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1263 submenu_destroyed = 1;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1264
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1265 release_drawing_gcs (mw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1266 release_shadow_gcs (mw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1267
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1268 /* this doesn't come from the resource db but is created explicitly
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1269 so we must free it ourselves. */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1270 XFreePixmap (XtDisplay (mw), mw->menu.gray_pixmap);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1271 mw->menu.gray_pixmap = (Pixmap) -1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1272
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1273 #if 0
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1274 /* Do free mw->menu.contents because nowadays we copy it
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1275 during initialization. */
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1276 XtFree (mw->menu.contents);
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1277 #endif
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1278
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1279 /* Don't free mw->menu.contents because that comes from our creator.
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1280 The `*_stack' elements are just pointers into `contents' so leave
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1281 that alone too. But free the stacks themselves. */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1282 if (mw->menu.old_stack) XtFree ((char *) mw->menu.old_stack);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1283 if (mw->menu.new_stack) XtFree ((char *) mw->menu.new_stack);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1284
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1285 /* Remember, you can't free anything that came from the resource
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1286 database. This includes:
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1287 mw->menu.cursor
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1288 mw->menu.top_shadow_pixmap
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1289 mw->menu.bottom_shadow_pixmap
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1290 mw->menu.font
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1291 Also the color cells of top_shadow_color, bottom_shadow_color,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1292 foreground, and button_foreground will never be freed until this
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1293 client exits. Nice, eh?
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1294 */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1295
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1296 /* 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
1297 for (i = 1; i < mw->menu.windows_length; i++)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1298 XDestroyWindow (XtDisplay (mw), mw->menu.windows [i].window);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1299 if (mw->menu.windows)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1300 XtFree ((char *) mw->menu.windows);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1301 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1302
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1303 static Boolean
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1304 XlwMenuSetValues (current, request, new)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1305 Widget current;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1306 Widget request;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1307 Widget new;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1308 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1309 XlwMenuWidget oldmw = (XlwMenuWidget)current;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1310 XlwMenuWidget newmw = (XlwMenuWidget)new;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1311 Boolean redisplay = False;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1312 int i;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1313
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1314 if (newmw->menu.contents
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1315 && newmw->menu.contents->contents
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1316 && newmw->menu.contents->contents->change >= VISIBLE_CHANGE)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1317 redisplay = True;
13899
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1318 /* Do redisplay if the contents are entirely eliminated. */
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1319 if (newmw->menu.contents
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1320 && newmw->menu.contents->contents == 0
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1321 && newmw->menu.contents->change >= VISIBLE_CHANGE)
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1322 redisplay = True;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1323
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1324 if (newmw->core.background_pixel != oldmw->core.background_pixel
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1325 || newmw->menu.foreground != oldmw->menu.foreground
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1326 || newmw->menu.font != oldmw->menu.font)
5626
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 release_drawing_gcs (newmw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1329 make_drawing_gcs (newmw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1330 redisplay = True;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1331
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1332 for (i = 0; i < oldmw->menu.windows_length; i++)
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 XSetWindowBackground (XtDisplay (oldmw),
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1335 oldmw->menu.windows [i].window,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1336 newmw->core.background_pixel);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1337 /* clear windows and generate expose events */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1338 XClearArea (XtDisplay (oldmw), oldmw->menu.windows[i].window,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1339 0, 0, 0, 0, True);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1340 }
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
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1343 return redisplay;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1344 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1345
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1346 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1347 XlwMenuResize (w)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1348 Widget w;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1349 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1350 XlwMenuWidget mw = (XlwMenuWidget)w;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1351
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1352 if (mw->menu.popped_up)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1353 {
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1354 /* Don't allow the popup menu to resize itself. */
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1355 mw->core.width = mw->menu.windows [0].width;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1356 mw->core.height = mw->menu.windows [0].height;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1357 mw->core.parent->core.width = mw->core.width ;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1358 mw->core.parent->core.height = mw->core.height ;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1359 }
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1360 else
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1361 {
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1362 mw->menu.windows [0].width = mw->core.width;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1363 mw->menu.windows [0].height = mw->core.height;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1364 }
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1365 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1366
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1367 /* Action procedures */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1368 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1369 handle_single_motion_event (mw, ev)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1370 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1371 XMotionEvent* ev;
5626
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 widget_value* val;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1374 int level;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1375
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1376 if (!map_event_to_widget_value (mw, ev, &val, &level))
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1377 pop_new_stack_if_no_contents (mw);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1378 else
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1379 set_new_state (mw, val, level);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1380 remap_menubar (mw);
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 /* Sync with the display. Makes it feel better on X terms. */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1383 XSync (XtDisplay (mw), False);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1384 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1385
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1386 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1387 handle_motion_event (mw, ev)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1388 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1389 XMotionEvent* ev;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1390 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1391 int x = ev->x_root;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1392 int y = ev->y_root;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1393 int state = ev->state;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1394
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1395 handle_single_motion_event (mw, ev);
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 /* allow motion events to be generated again */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1398 if (ev->is_hint
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1399 && XQueryPointer (XtDisplay (mw), ev->window,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1400 &ev->root, &ev->subwindow,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1401 &ev->x_root, &ev->y_root,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1402 &ev->x, &ev->y,
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1403 &ev->state)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1404 && ev->state == state
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1405 && (ev->x_root != x || ev->y_root != y))
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1406 handle_single_motion_event (mw, ev);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1407 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1408
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1409 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1410 Start (w, ev, params, num_params)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1411 Widget w;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1412 XEvent *ev;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1413 String *params;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1414 Cardinal *num_params;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1415 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1416 XlwMenuWidget mw = (XlwMenuWidget)w;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1417
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1418 if (!mw->menu.popped_up)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1419 {
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1420 menu_post_event = *ev;
9027
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1421 pop_up_menu (mw, ev);
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1422 }
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1423 else
9027
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1424 {
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1425 /* If we push a button while the menu is posted semipermanently,
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1426 releasing the button should always pop the menu down. */
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1427 next_release_must_exit = 1;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1428
9027
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1429 /* notes the absolute position of the menubar window */
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1430 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
1431 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
1432
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1433 /* handles the down like a move, slots are compatible */
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1434 handle_motion_event (mw, &ev->xmotion);
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1435 }
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1436 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1437
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1438 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1439 Drag (w, ev, params, num_params)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1440 Widget w;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1441 XEvent *ev;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1442 String *params;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1443 Cardinal *num_params;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1444 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1445 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
1446 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
1447 handle_motion_event (mw, &ev->xmotion);
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1448 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1449
13899
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1450 /* Do nothing.
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1451 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
1452 static void
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1453 Nothing (w, ev, params, num_params)
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1454 Widget w;
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1455 XEvent *ev;
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1456 String *params;
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1457 Cardinal *num_params;
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1458 {
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1459 }
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1460
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1461 /* 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
1462 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
1463 static void
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1464 Key (w, ev, params, num_params)
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1465 Widget w;
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1466 XEvent *ev;
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1467 String *params;
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1468 Cardinal *num_params;
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1469 {
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1470 XlwMenuWidget mw = (XlwMenuWidget)w;
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1471
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1472 /* Pop down everything. */
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1473 mw->menu.new_depth = 1;
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1474 remap_menubar (mw);
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1475
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1476 if (mw->menu.popped_up)
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1477 {
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1478 mw->menu.popped_up = False;
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1479 XtUngrabPointer ((Widget)mw, ev->xmotion.time);
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1480 if (XtIsShell (XtParent ((Widget) mw)))
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1481 XtPopdown (XtParent ((Widget) mw));
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1482 else
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1483 {
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1484 XtRemoveGrab ((Widget) mw);
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1485 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
1486 }
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1487 }
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1488
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1489 /* callback */
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1490 XtCallCallbackList ((Widget)mw, mw->menu.select, (XtPointer)0);
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1491 }
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1492
3fbe9b840379 (xlwMenuActionsList): Add "key" and "nothing".
Richard M. Stallman <rms@gnu.org>
parents: 13560
diff changeset
1493 static void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1494 Select (w, ev, params, num_params)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1495 Widget w;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1496 XEvent *ev;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1497 String *params;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1498 Cardinal *num_params;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1499 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1500 XlwMenuWidget mw = (XlwMenuWidget)w;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1501 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
1502
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1503 /* If user releases the button quickly, without selecting anything,
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1504 after the initial down-click that brought the menu up,
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1505 do nothing. */
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1506 if ((selected_item == 0
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1507 || ((widget_value *) selected_item)->call_data == 0)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1508 && !next_release_must_exit
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1509 && (ev->xbutton.time - menu_post_event.xbutton.time
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1510 < XtGetMultiClickTime (XtDisplay (w))))
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1511 return;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1512
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1513 /* pop down everything. */
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1514 mw->menu.new_depth = 1;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1515 remap_menubar (mw);
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 if (mw->menu.popped_up)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1518 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1519 mw->menu.popped_up = False;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1520 XtUngrabPointer ((Widget)mw, ev->xmotion.time);
9033
3c36c72db2bb *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 9027
diff changeset
1521 if (XtIsShell (XtParent ((Widget) mw)))
3c36c72db2bb *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 9027
diff changeset
1522 XtPopdown (XtParent ((Widget) mw));
9027
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1523 else
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1524 {
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1525 XtRemoveGrab ((Widget) mw);
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1526 display_menu (mw, 0, False, NULL, NULL, NULL, NULL, NULL);
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1527 }
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1528 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1529
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1530 /* callback */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1531 XtCallCallbackList ((Widget)mw, mw->menu.select, (XtPointer)selected_item);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1532 }
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1533
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1534
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1535 /* Special code to pop-up a menu */
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1536 void
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1537 pop_up_menu (mw, event)
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1538 XlwMenuWidget mw;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1539 XButtonPressedEvent* event;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1540 {
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1541 int x = event->x_root;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1542 int y = event->y_root;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1543 int w;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1544 int h;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1545 int borderwidth = mw->menu.shadow_thickness;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1546 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
1547 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
1548 int count;
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1549
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1550 next_release_must_exit = 0;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1551
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1552 XtCallCallbackList ((Widget)mw, mw->menu.open, NULL);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1553
9033
3c36c72db2bb *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 9027
diff changeset
1554 if (XtIsShell (XtParent ((Widget)mw)))
9027
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1555 size_menu (mw, 0);
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1556
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1557 w = mw->menu.windows [0].width;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1558 h = mw->menu.windows [0].height;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1559
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1560 x -= borderwidth;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1561 y -= borderwidth;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1562 if (x < borderwidth)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1563 x = borderwidth;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1564 if (x + w + 2 * borderwidth > WidthOfScreen (screen))
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1565 x = WidthOfScreen (screen) - w - 2 * borderwidth;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1566 if (y < borderwidth)
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1567 y = borderwidth;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1568 if (y + h + 2 * borderwidth> HeightOfScreen (screen))
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1569 y = HeightOfScreen (screen) - h - 2 * borderwidth;
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1570
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1571 mw->menu.popped_up = True;
9033
3c36c72db2bb *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 9027
diff changeset
1572 if (XtIsShell (XtParent ((Widget)mw)))
9027
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1573 {
9033
3c36c72db2bb *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 9027
diff changeset
1574 XtConfigureWidget (XtParent ((Widget)mw), x, y, w, h,
3c36c72db2bb *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 9027
diff changeset
1575 XtParent ((Widget)mw)->core.border_width);
3c36c72db2bb *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 9027
diff changeset
1576 XtPopup (XtParent ((Widget)mw), XtGrabExclusive);
9027
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1577 display_menu (mw, 0, False, NULL, NULL, NULL, NULL, NULL);
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1578 mw->menu.windows [0].x = x + borderwidth;
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1579 mw->menu.windows [0].y = y + borderwidth;
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1580 }
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1581 else
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1582 {
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1583 XEvent *ev = (XEvent *) event;
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1584
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
1585 XtAddGrab ((Widget) mw, True, True);
9027
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1586
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1587 /* notes the absolute position of the menubar window */
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1588 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
1589 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
1590 }
07d79cbdfbc9 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 8861
diff changeset
1591
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1592 #ifdef emacs
17622
742a57e66f7d (pop_up_menu): Update the call to x_catch_errors.
Richard M. Stallman <rms@gnu.org>
parents: 16917
diff changeset
1593 count = x_catch_errors (display);
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1594 #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
1595 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
1596 (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
1597 | 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
1598 | 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
1599 | 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
1600 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
1601 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
1602 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
1603 pointer_grabbed = 1;
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1604 #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
1605 if (x_had_errors_p (display))
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1606 {
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1607 pointer_grabbed = 0;
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1608 XtUngrabPointer ((Widget)mw, event->time);
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1609 }
17622
742a57e66f7d (pop_up_menu): Update the call to x_catch_errors.
Richard M. Stallman <rms@gnu.org>
parents: 16917
diff changeset
1610 x_uncatch_errors (display, count);
8860
8e5ef22c9438 *** empty log message ***
Paul Reilly <pmr@pajato.com>
parents: 5654
diff changeset
1611 #endif
5626
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1612
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1613 handle_motion_event (mw, (XMotionEvent*)event);
93bb7e0935ba Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1614 }