menu.c revision 2e4f8982
12e4f8982Smrg/* $XTermId: menu.c,v 1.338 2016/05/30 20:58:39 tom Exp $ */
2d522f475Smrg
3d522f475Smrg/*
42e4f8982Smrg * Copyright 1999-2015,2016 by Thomas E. Dickey
520d2c4d2Smrg *
620d2c4d2Smrg *                         All Rights Reserved
720d2c4d2Smrg *
820d2c4d2Smrg * Permission is hereby granted, free of charge, to any person obtaining a
920d2c4d2Smrg * copy of this software and associated documentation files (the
1020d2c4d2Smrg * "Software"), to deal in the Software without restriction, including
1120d2c4d2Smrg * without limitation the rights to use, copy, modify, merge, publish,
1220d2c4d2Smrg * distribute, sublicense, and/or sell copies of the Software, and to
1320d2c4d2Smrg * permit persons to whom the Software is furnished to do so, subject to
1420d2c4d2Smrg * the following conditions:
1520d2c4d2Smrg *
1620d2c4d2Smrg * The above copyright notice and this permission notice shall be included
1720d2c4d2Smrg * in all copies or substantial portions of the Software.
1820d2c4d2Smrg *
1920d2c4d2Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
2020d2c4d2Smrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
2120d2c4d2Smrg * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
2220d2c4d2Smrg * IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
2320d2c4d2Smrg * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
2420d2c4d2Smrg * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
2520d2c4d2Smrg * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2620d2c4d2Smrg *
2720d2c4d2Smrg * Except as contained in this notice, the name(s) of the above copyright
2820d2c4d2Smrg * holders shall not be used in advertising or otherwise to promote the
2920d2c4d2Smrg * sale, use or other dealings in this Software without prior written
3020d2c4d2Smrg * authorization.
3120d2c4d2Smrg *
32a1f3da82Smrg *
3320d2c4d2Smrg * Copyright 1989  The Open Group
3420d2c4d2Smrg *
3520d2c4d2Smrg * Permission to use, copy, modify, distribute, and sell this software and its
3620d2c4d2Smrg * documentation for any purpose is hereby granted without fee, provided that
3720d2c4d2Smrg * the above copyright notice appear in all copies and that both that
3820d2c4d2Smrg * copyright notice and this permission notice appear in supporting
3920d2c4d2Smrg * documentation.
4020d2c4d2Smrg *
4120d2c4d2Smrg * The above copyright notice and this permission notice shall be included in
4220d2c4d2Smrg * all copies or substantial portions of the Software.
4320d2c4d2Smrg *
4420d2c4d2Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
4520d2c4d2Smrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
4620d2c4d2Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
4720d2c4d2Smrg * OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
4820d2c4d2Smrg * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
4920d2c4d2Smrg * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
5020d2c4d2Smrg *
5120d2c4d2Smrg * Except as contained in this notice, the name of The Open Group shall not be
5220d2c4d2Smrg * used in advertising or otherwise to promote the sale, use or other dealings
5320d2c4d2Smrg * in this Software without prior written authorization from The Open Group.
5420d2c4d2Smrg */
55d522f475Smrg
56d522f475Smrg#include <xterm.h>
57d522f475Smrg#include <data.h>
58d522f475Smrg#include <menu.h>
59d522f475Smrg#include <fontutils.h>
60d522f475Smrg#include <xstrings.h>
61d522f475Smrg
62d522f475Smrg#include <locale.h>
63d522f475Smrg
64d522f475Smrg#include <X11/Xmu/CharSet.h>
65d522f475Smrg
66d522f475Smrg#define app_con Xaw_app_con	/* quiet a warning from SimpleMenu.h */
67d522f475Smrg
68d522f475Smrg#if defined(HAVE_LIB_XAW)
69d522f475Smrg
70d522f475Smrg#include <X11/Xaw/SimpleMenu.h>
71d522f475Smrg#include <X11/Xaw/Box.h>
72d522f475Smrg#include <X11/Xaw/SmeBSB.h>
73d522f475Smrg#include <X11/Xaw/SmeLine.h>
74d522f475Smrg
75d522f475Smrg#if OPT_TOOLBAR
76d522f475Smrg#include <X11/Xaw/MenuButton.h>
77d522f475Smrg#include <X11/Xaw/Form.h>
78d522f475Smrg#endif
79d522f475Smrg
80d522f475Smrg#elif defined(HAVE_LIB_XAW3D)
81d522f475Smrg
82d522f475Smrg#include <X11/Xaw3d/SimpleMenu.h>
83d522f475Smrg#include <X11/Xaw3d/Box.h>
84d522f475Smrg#include <X11/Xaw3d/SmeBSB.h>
85d522f475Smrg#include <X11/Xaw3d/SmeLine.h>
86d522f475Smrg
87d522f475Smrg#if OPT_TOOLBAR
88d522f475Smrg#include <X11/Xaw3d/MenuButton.h>
89d522f475Smrg#include <X11/Xaw3d/Form.h>
90d522f475Smrg#endif
91d522f475Smrg
9201037d57Smrg#elif defined(HAVE_LIB_XAW3DXFT)
9301037d57Smrg
9401037d57Smrg#include <X11/Xaw3dxft/SimpleMenu.h>
9501037d57Smrg#include <X11/Xaw3dxft/Box.h>
9601037d57Smrg#include <X11/Xaw3dxft/SmeBSB.h>
9701037d57Smrg#include <X11/Xaw3dxft/SmeLine.h>
9801037d57Smrg
9901037d57Smrg#if OPT_TOOLBAR
10001037d57Smrg#include <X11/Xaw3dxft/MenuButton.h>
10101037d57Smrg#include <X11/Xaw3dxft/Form.h>
10201037d57Smrg#endif
10301037d57Smrg
104d522f475Smrg#elif defined(HAVE_LIB_NEXTAW)
105d522f475Smrg
106d522f475Smrg#include <X11/neXtaw/SimpleMenu.h>
107d522f475Smrg#include <X11/neXtaw/Box.h>
108d522f475Smrg#include <X11/neXtaw/SmeBSB.h>
109d522f475Smrg#include <X11/neXtaw/SmeLine.h>
110d522f475Smrg
111d522f475Smrg#if OPT_TOOLBAR
112d522f475Smrg#include <X11/neXtaw/MenuButton.h>
113d522f475Smrg#include <X11/neXtaw/Form.h>
114d522f475Smrg#endif
115d522f475Smrg
116d522f475Smrg#elif defined(HAVE_LIB_XAWPLUS)
117d522f475Smrg
118d522f475Smrg#include <X11/XawPlus/SimpleMenu.h>
119d522f475Smrg#include <X11/XawPlus/Box.h>
120d522f475Smrg#include <X11/XawPlus/SmeBSB.h>
121d522f475Smrg#include <X11/XawPlus/SmeLine.h>
122d522f475Smrg
123d522f475Smrg#if OPT_TOOLBAR
124d522f475Smrg#include <X11/XawPlus/MenuButton.h>
125d522f475Smrg#include <X11/XawPlus/Form.h>
126d522f475Smrg#endif
127d522f475Smrg
128d522f475Smrg#endif
129d522f475Smrg
130d522f475Smrg#undef app_con
131d522f475Smrg
132d522f475Smrg#include <stdio.h>
133d522f475Smrg#include <signal.h>
134956cc18dSsnj
135a1f3da82Smrg#if OPT_TRACE
136a1f3da82Smrg#define UpdateCheckbox(func, mn, mi, val) UpdateMenuItem(func, mn, mi, val)
137a1f3da82Smrg#else
138a1f3da82Smrg#define UpdateCheckbox(func, mn, mi, val) UpdateMenuItem(mn, mi, val)
139a1f3da82Smrg#endif
140a1f3da82Smrg
141956cc18dSsnj#define ToggleFlag(flag) flag = (Boolean) !flag
142d522f475Smrg/* *INDENT-OFF* */
143d522f475Smrgstatic void do_8bit_control    PROTO_XT_CALLBACK_ARGS;
144d522f475Smrgstatic void do_allow132        PROTO_XT_CALLBACK_ARGS;
145e39b573cSmrgstatic void do_allowBoldFonts  PROTO_XT_CALLBACK_ARGS;
146d522f475Smrgstatic void do_allowsends      PROTO_XT_CALLBACK_ARGS;
147d522f475Smrgstatic void do_altscreen       PROTO_XT_CALLBACK_ARGS;
148d522f475Smrgstatic void do_appcursor       PROTO_XT_CALLBACK_ARGS;
149d522f475Smrgstatic void do_appkeypad       PROTO_XT_CALLBACK_ARGS;
150d522f475Smrgstatic void do_autolinefeed    PROTO_XT_CALLBACK_ARGS;
151d522f475Smrgstatic void do_autowrap        PROTO_XT_CALLBACK_ARGS;
152d522f475Smrgstatic void do_backarrow       PROTO_XT_CALLBACK_ARGS;
153d522f475Smrgstatic void do_bellIsUrgent    PROTO_XT_CALLBACK_ARGS;
154d522f475Smrgstatic void do_clearsavedlines PROTO_XT_CALLBACK_ARGS;
155d522f475Smrgstatic void do_continue        PROTO_XT_CALLBACK_ARGS;
156d522f475Smrgstatic void do_delete_del      PROTO_XT_CALLBACK_ARGS;
1572e4f8982Smrg#if OPT_SCREEN_DUMPS
1582e4f8982Smrgstatic void do_dump_html       PROTO_XT_CALLBACK_ARGS;
1592e4f8982Smrgstatic void do_dump_svg        PROTO_XT_CALLBACK_ARGS;
1602e4f8982Smrg#endif
161d522f475Smrgstatic void do_hardreset       PROTO_XT_CALLBACK_ARGS;
162d522f475Smrgstatic void do_interrupt       PROTO_XT_CALLBACK_ARGS;
163d522f475Smrgstatic void do_jumpscroll      PROTO_XT_CALLBACK_ARGS;
1642e4f8982Smrgstatic void do_keepClipboard   PROTO_XT_CALLBACK_ARGS;
165e39b573cSmrgstatic void do_keepSelection   PROTO_XT_CALLBACK_ARGS;
166d522f475Smrgstatic void do_kill            PROTO_XT_CALLBACK_ARGS;
167d522f475Smrgstatic void do_old_fkeys       PROTO_XT_CALLBACK_ARGS;
168d522f475Smrgstatic void do_poponbell       PROTO_XT_CALLBACK_ARGS;
169d522f475Smrgstatic void do_print           PROTO_XT_CALLBACK_ARGS;
170d522f475Smrgstatic void do_print_redir     PROTO_XT_CALLBACK_ARGS;
171d522f475Smrgstatic void do_quit            PROTO_XT_CALLBACK_ARGS;
172d522f475Smrgstatic void do_redraw          PROTO_XT_CALLBACK_ARGS;
173d522f475Smrgstatic void do_reversevideo    PROTO_XT_CALLBACK_ARGS;
174d522f475Smrgstatic void do_reversewrap     PROTO_XT_CALLBACK_ARGS;
175d522f475Smrgstatic void do_scrollbar       PROTO_XT_CALLBACK_ARGS;
176d522f475Smrgstatic void do_scrollkey       PROTO_XT_CALLBACK_ARGS;
177d522f475Smrgstatic void do_scrollttyoutput PROTO_XT_CALLBACK_ARGS;
178d522f475Smrgstatic void do_securekbd       PROTO_XT_CALLBACK_ARGS;
179d522f475Smrgstatic void do_selectClipboard PROTO_XT_CALLBACK_ARGS;
180d522f475Smrgstatic void do_softreset       PROTO_XT_CALLBACK_ARGS;
181d522f475Smrgstatic void do_suspend         PROTO_XT_CALLBACK_ARGS;
182d522f475Smrgstatic void do_terminate       PROTO_XT_CALLBACK_ARGS;
183d522f475Smrgstatic void do_titeInhibit     PROTO_XT_CALLBACK_ARGS;
184d522f475Smrgstatic void do_visualbell      PROTO_XT_CALLBACK_ARGS;
185d522f475Smrgstatic void do_vtfont          PROTO_XT_CALLBACK_ARGS;
186d522f475Smrg
187d522f475Smrg#ifdef ALLOWLOGGING
188d522f475Smrgstatic void do_logging         PROTO_XT_CALLBACK_ARGS;
189d522f475Smrg#endif
190d522f475Smrg
191d522f475Smrg#ifndef NO_ACTIVE_ICON
192d522f475Smrgstatic void do_activeicon      PROTO_XT_CALLBACK_ARGS;
193d522f475Smrg#endif /* NO_ACTIVE_ICON */
194d522f475Smrg
195956cc18dSsnj#if OPT_ALLOW_XXX_OPS
196956cc18dSsnjstatic void enable_allow_xxx_ops (Bool);
19720d2c4d2Smrgstatic void do_allowColorOps   PROTO_XT_CALLBACK_ARGS;
198956cc18dSsnjstatic void do_allowFontOps    PROTO_XT_CALLBACK_ARGS;
19920d2c4d2Smrgstatic void do_allowTcapOps    PROTO_XT_CALLBACK_ARGS;
200956cc18dSsnjstatic void do_allowTitleOps   PROTO_XT_CALLBACK_ARGS;
201956cc18dSsnjstatic void do_allowWindowOps  PROTO_XT_CALLBACK_ARGS;
202956cc18dSsnj#endif
203956cc18dSsnj
204d522f475Smrg#if OPT_BLINK_CURS
205d522f475Smrgstatic void do_cursorblink     PROTO_XT_CALLBACK_ARGS;
206d522f475Smrg#endif
207d522f475Smrg
208d522f475Smrg#if OPT_BOX_CHARS
209d522f475Smrgstatic void do_font_boxchars   PROTO_XT_CALLBACK_ARGS;
21020d2c4d2Smrgstatic void do_font_packed     PROTO_XT_CALLBACK_ARGS;
211d522f475Smrg#endif
212d522f475Smrg
213d522f475Smrg#if OPT_DEC_CHRSET
214d522f475Smrgstatic void do_font_doublesize PROTO_XT_CALLBACK_ARGS;
215d522f475Smrg#endif
216d522f475Smrg
217d522f475Smrg#if OPT_DEC_SOFTFONT
218d522f475Smrgstatic void do_font_loadable   PROTO_XT_CALLBACK_ARGS;
219d522f475Smrg#endif
220d522f475Smrg
221d522f475Smrg#if OPT_HP_FUNC_KEYS
222d522f475Smrgstatic void do_hp_fkeys        PROTO_XT_CALLBACK_ARGS;
223d522f475Smrg#endif
224d522f475Smrg
225a1f3da82Smrg#if OPT_MAXIMIZE
226a1f3da82Smrgstatic void do_fullscreen      PROTO_XT_CALLBACK_ARGS;
227a1f3da82Smrg#endif
228a1f3da82Smrg
229d522f475Smrg#if OPT_NUM_LOCK
230d522f475Smrgstatic void do_alt_esc         PROTO_XT_CALLBACK_ARGS;
231d522f475Smrgstatic void do_num_lock        PROTO_XT_CALLBACK_ARGS;
232d522f475Smrgstatic void do_meta_esc        PROTO_XT_CALLBACK_ARGS;
233d522f475Smrg#endif
234d522f475Smrg
235e39b573cSmrg#if OPT_PRINT_ON_EXIT
236e39b573cSmrgstatic void do_write_now       PROTO_XT_CALLBACK_ARGS;
237e39b573cSmrgstatic void do_write_error     PROTO_XT_CALLBACK_ARGS;
238e39b573cSmrg#endif
239e39b573cSmrg
240d522f475Smrg#if OPT_RENDERFONT
241d522f475Smrgstatic void do_font_renderfont PROTO_XT_CALLBACK_ARGS;
242d522f475Smrg#endif
243d522f475Smrg
244d522f475Smrg#if OPT_SCO_FUNC_KEYS
245d522f475Smrgstatic void do_sco_fkeys       PROTO_XT_CALLBACK_ARGS;
246d522f475Smrg#endif
247d522f475Smrg
248e0a2b6dfSmrg#if OPT_SIXEL_GRAPHICS
249e0a2b6dfSmrgstatic void do_sixelscrolling  PROTO_XT_CALLBACK_ARGS;
250e0a2b6dfSmrg#endif
251e0a2b6dfSmrg
252894e0ac8Smrg#if OPT_GRAPHICS
253894e0ac8Smrgstatic void do_privatecolorregisters PROTO_XT_CALLBACK_ARGS;
254894e0ac8Smrg#endif
255894e0ac8Smrg
256d522f475Smrg#if OPT_SUN_FUNC_KEYS
257d522f475Smrgstatic void do_sun_fkeys       PROTO_XT_CALLBACK_ARGS;
258d522f475Smrg#endif
259d522f475Smrg
260d522f475Smrg#if OPT_SUNPC_KBD
261d522f475Smrgstatic void do_sun_kbd         PROTO_XT_CALLBACK_ARGS;
262d522f475Smrg#endif
263d522f475Smrg
264d522f475Smrg#if OPT_TCAP_FKEYS
265d522f475Smrgstatic void do_tcap_fkeys      PROTO_XT_CALLBACK_ARGS;
266d522f475Smrg#endif
267d522f475Smrg
268d522f475Smrg#if OPT_TEK4014
269d522f475Smrgstatic void do_tekcopy         PROTO_XT_CALLBACK_ARGS;
270d522f475Smrgstatic void do_tekhide         PROTO_XT_CALLBACK_ARGS;
271d522f475Smrgstatic void do_tekmode         PROTO_XT_CALLBACK_ARGS;
272d522f475Smrgstatic void do_tekonoff        PROTO_XT_CALLBACK_ARGS;
273d522f475Smrgstatic void do_tekpage         PROTO_XT_CALLBACK_ARGS;
274d522f475Smrgstatic void do_tekreset        PROTO_XT_CALLBACK_ARGS;
275d522f475Smrgstatic void do_tekshow         PROTO_XT_CALLBACK_ARGS;
276d522f475Smrgstatic void do_tektext2        PROTO_XT_CALLBACK_ARGS;
277d522f475Smrgstatic void do_tektext3        PROTO_XT_CALLBACK_ARGS;
278d522f475Smrgstatic void do_tektextlarge    PROTO_XT_CALLBACK_ARGS;
279d522f475Smrgstatic void do_tektextsmall    PROTO_XT_CALLBACK_ARGS;
280d522f475Smrgstatic void do_vthide          PROTO_XT_CALLBACK_ARGS;
281d522f475Smrgstatic void do_vtmode          PROTO_XT_CALLBACK_ARGS;
282d522f475Smrgstatic void do_vtonoff         PROTO_XT_CALLBACK_ARGS;
283d522f475Smrgstatic void do_vtshow          PROTO_XT_CALLBACK_ARGS;
284d522f475Smrgstatic void handle_tekshow     (Widget gw, Bool allowswitch);
285d522f475Smrgstatic void handle_vtshow      (Widget gw, Bool allowswitch);
286d522f475Smrg#endif
287d522f475Smrg
288d522f475Smrg#if OPT_TOOLBAR
289d522f475Smrgstatic void do_toolbar         PROTO_XT_CALLBACK_ARGS;
290d522f475Smrg#endif
291d522f475Smrg
292d522f475Smrg#if OPT_WIDE_CHARS
293d522f475Smrgstatic void do_font_utf8_mode  PROTO_XT_CALLBACK_ARGS;
294e39b573cSmrgstatic void do_font_utf8_fonts PROTO_XT_CALLBACK_ARGS;
295d522f475Smrgstatic void do_font_utf8_title PROTO_XT_CALLBACK_ARGS;
296d522f475Smrg#endif
297d522f475Smrg
298d522f475Smrg/*
299d522f475Smrg * The order of entries MUST match the values given in menu.h
300d522f475Smrg */
301d522f475SmrgMenuEntry mainMenuEntries[] = {
302d522f475Smrg#if OPT_TOOLBAR
303d522f475Smrg    { "toolbar",	do_toolbar,	NULL },
304a1f3da82Smrg#endif
305a1f3da82Smrg#if OPT_MAXIMIZE
306a1f3da82Smrg    { "fullscreen",	do_fullscreen,	NULL },
307d522f475Smrg#endif
308d522f475Smrg    { "securekbd",	do_securekbd,	NULL },
309d522f475Smrg    { "allowsends",	do_allowsends,	NULL },
310d522f475Smrg    { "redraw",		do_redraw,	NULL },
311d522f475Smrg    { "line1",		NULL,		NULL },
312d522f475Smrg#ifdef ALLOWLOGGING
313d522f475Smrg    { "logging",	do_logging,	NULL },
314e39b573cSmrg#endif
315e39b573cSmrg#ifdef OPT_PRINT_ON_EXIT
316e39b573cSmrg    { "print-immediate", do_write_now,	NULL },
317e39b573cSmrg    { "print-on-error",	do_write_error,	NULL },
318d522f475Smrg#endif
319d522f475Smrg    { "print",		do_print,	NULL },
320d522f475Smrg    { "print-redir",	do_print_redir,	NULL },
3212e4f8982Smrg#if OPT_SCREEN_DUMPS
3222e4f8982Smrg    { "dump-html",	do_dump_html,	NULL },
3232e4f8982Smrg    { "dump-svg",	do_dump_svg,	NULL },
3242e4f8982Smrg#endif
325d522f475Smrg    { "line2",		NULL,		NULL },
326d522f475Smrg    { "8-bit control",	do_8bit_control,NULL },
327d522f475Smrg    { "backarrow key",	do_backarrow,	NULL },
328d522f475Smrg#if OPT_NUM_LOCK
329d522f475Smrg    { "num-lock",	do_num_lock,	NULL },
330d522f475Smrg    { "alt-esc",	do_alt_esc,	NULL },
331d522f475Smrg    { "meta-esc",	do_meta_esc,	NULL },
332d522f475Smrg#endif
333d522f475Smrg    { "delete-is-del",	do_delete_del,	NULL },
334d522f475Smrg    { "oldFunctionKeys",do_old_fkeys,	NULL },
335d522f475Smrg#if OPT_TCAP_FKEYS
336d522f475Smrg    { "tcapFunctionKeys",do_tcap_fkeys,	NULL },
337d522f475Smrg#endif
338d522f475Smrg#if OPT_HP_FUNC_KEYS
339d522f475Smrg    { "hpFunctionKeys",	do_hp_fkeys,	NULL },
340d522f475Smrg#endif
341d522f475Smrg#if OPT_SCO_FUNC_KEYS
342d522f475Smrg    { "scoFunctionKeys",do_sco_fkeys,	NULL },
343d522f475Smrg#endif
344d522f475Smrg#if OPT_SUN_FUNC_KEYS
345d522f475Smrg    { "sunFunctionKeys",do_sun_fkeys,	NULL },
346d522f475Smrg#endif
347d522f475Smrg#if OPT_SUNPC_KBD
348d522f475Smrg    { "sunKeyboard",	do_sun_kbd,	NULL },
349d522f475Smrg#endif
350d522f475Smrg    { "line3",		NULL,		NULL },
351d522f475Smrg    { "suspend",	do_suspend,	NULL },
352d522f475Smrg    { "continue",	do_continue,	NULL },
353d522f475Smrg    { "interrupt",	do_interrupt,	NULL },
354d522f475Smrg    { "hangup",		do_hangup,	NULL },
355d522f475Smrg    { "terminate",	do_terminate,	NULL },
356d522f475Smrg    { "kill",		do_kill,	NULL },
357d522f475Smrg    { "line4",		NULL,		NULL },
358d522f475Smrg    { "quit",		do_quit,	NULL }};
359d522f475Smrg
360d522f475SmrgMenuEntry vtMenuEntries[] = {
361d522f475Smrg    { "scrollbar",	do_scrollbar,	NULL },
362d522f475Smrg    { "jumpscroll",	do_jumpscroll,	NULL },
363d522f475Smrg    { "reversevideo",	do_reversevideo, NULL },
364d522f475Smrg    { "autowrap",	do_autowrap,	NULL },
365d522f475Smrg    { "reversewrap",	do_reversewrap, NULL },
366d522f475Smrg    { "autolinefeed",	do_autolinefeed, NULL },
367d522f475Smrg    { "appcursor",	do_appcursor,	NULL },
368d522f475Smrg    { "appkeypad",	do_appkeypad,	NULL },
369d522f475Smrg    { "scrollkey",	do_scrollkey,	NULL },
370d522f475Smrg    { "scrollttyoutput",do_scrollttyoutput, NULL },
371d522f475Smrg    { "allow132",	do_allow132,	NULL },
372d522f475Smrg    { "keepSelection",	do_keepSelection, NULL },
373d522f475Smrg    { "selectToClipboard",do_selectClipboard, NULL },
374d522f475Smrg    { "visualbell",	do_visualbell,	NULL },
375d522f475Smrg    { "bellIsUrgent",	do_bellIsUrgent, NULL },
376d522f475Smrg    { "poponbell",	do_poponbell,	NULL },
377d522f475Smrg#if OPT_BLINK_CURS
378d522f475Smrg    { "cursorblink",	do_cursorblink,	NULL },
379d522f475Smrg#endif
380d522f475Smrg    { "titeInhibit",	do_titeInhibit,	NULL },
381d522f475Smrg#ifndef NO_ACTIVE_ICON
382d522f475Smrg    { "activeicon",	do_activeicon,	NULL },
383d522f475Smrg#endif /* NO_ACTIVE_ICON */
384d522f475Smrg    { "line1",		NULL,		NULL },
385d522f475Smrg    { "softreset",	do_softreset,	NULL },
386d522f475Smrg    { "hardreset",	do_hardreset,	NULL },
387d522f475Smrg    { "clearsavedlines",do_clearsavedlines, NULL },
388d522f475Smrg    { "line2",		NULL,		NULL },
389d522f475Smrg#if OPT_TEK4014
390d522f475Smrg    { "tekshow",	do_tekshow,	NULL },
391d522f475Smrg    { "tekmode",	do_tekmode,	NULL },
392d522f475Smrg    { "vthide",		do_vthide,	NULL },
393d522f475Smrg#endif
394d522f475Smrg    { "altscreen",	do_altscreen,	NULL },
395e0a2b6dfSmrg#if OPT_SIXEL_GRAPHICS
396e0a2b6dfSmrg    { "sixelScrolling",	do_sixelscrolling,	NULL },
397894e0ac8Smrg#endif
398894e0ac8Smrg#if OPT_GRAPHICS
399e0a2b6dfSmrg    { "privateColorRegisters", do_privatecolorregisters, NULL },
400e0a2b6dfSmrg#endif
401d522f475Smrg    };
402d522f475Smrg
403d522f475SmrgMenuEntry fontMenuEntries[] = {
404d522f475Smrg    { "fontdefault",	do_vtfont,	NULL },
405d522f475Smrg    { "font1",		do_vtfont,	NULL },
406d522f475Smrg    { "font2",		do_vtfont,	NULL },
407d522f475Smrg    { "font3",		do_vtfont,	NULL },
408d522f475Smrg    { "font4",		do_vtfont,	NULL },
409d522f475Smrg    { "font5",		do_vtfont,	NULL },
410d522f475Smrg    { "font6",		do_vtfont,	NULL },
411d522f475Smrg    /* this is after the last builtin font; the other entries are special */
412d522f475Smrg    { "fontescape",	do_vtfont,	NULL },
413d522f475Smrg    { "fontsel",	do_vtfont,	NULL },
414d522f475Smrg    /* down to here should match NMENUFONTS in ptyx.h */
415d522f475Smrg
416d522f475Smrg#if OPT_DEC_CHRSET || OPT_BOX_CHARS || OPT_DEC_SOFTFONT
417d522f475Smrg    { "line1",		NULL,		NULL },
418e39b573cSmrg    { "allow-bold-fonts", do_allowBoldFonts, NULL },
419d522f475Smrg#if OPT_BOX_CHARS
420d522f475Smrg    { "font-linedrawing",do_font_boxchars,NULL },
42120d2c4d2Smrg    { "font-packed",	do_font_packed,NULL },
422d522f475Smrg#endif
423d522f475Smrg#if OPT_DEC_CHRSET
424d522f475Smrg    { "font-doublesize",do_font_doublesize,NULL },
425d522f475Smrg#endif
426d522f475Smrg#if OPT_DEC_SOFTFONT
427d522f475Smrg    { "font-loadable",	do_font_loadable,NULL },
428d522f475Smrg#endif
429d522f475Smrg#endif /* toggles for DEC font extensions */
430d522f475Smrg
431d522f475Smrg#if OPT_RENDERFONT || OPT_WIDE_CHARS
432d522f475Smrg    { "line2",		NULL,		NULL },
433d522f475Smrg#if OPT_RENDERFONT
434d522f475Smrg    { "render-font",	do_font_renderfont,NULL },
435d522f475Smrg#endif
436d522f475Smrg#if OPT_WIDE_CHARS
437d522f475Smrg    { "utf8-mode",	do_font_utf8_mode,NULL },
438e39b573cSmrg    { "utf8-fonts",	do_font_utf8_fonts,NULL },
439d522f475Smrg    { "utf8-title",	do_font_utf8_title,NULL },
440d522f475Smrg#endif
441d522f475Smrg#endif /* toggles for other font extensions */
442d522f475Smrg
443956cc18dSsnj#if OPT_ALLOW_XXX_OPS
444956cc18dSsnj    { "line3",		NULL,		NULL },
44520d2c4d2Smrg    { "allow-color-ops",do_allowColorOps,NULL },
446956cc18dSsnj    { "allow-font-ops",	do_allowFontOps,NULL },
44720d2c4d2Smrg    { "allow-tcap-ops",	do_allowTcapOps,NULL },
448956cc18dSsnj    { "allow-title-ops",do_allowTitleOps,NULL },
449956cc18dSsnj    { "allow-window-ops",do_allowWindowOps,NULL },
450956cc18dSsnj#endif
451956cc18dSsnj
452d522f475Smrg    };
453d522f475Smrg
454d522f475Smrg#if OPT_TEK4014
455d522f475SmrgMenuEntry tekMenuEntries[] = {
456d522f475Smrg    { "tektextlarge",	do_tektextlarge, NULL },
457d522f475Smrg    { "tektext2",	do_tektext2,	NULL },
458d522f475Smrg    { "tektext3",	do_tektext3,	NULL },
459d522f475Smrg    { "tektextsmall",	do_tektextsmall, NULL },
460d522f475Smrg    { "line1",		NULL,		NULL },
461d522f475Smrg    { "tekpage",	do_tekpage,	NULL },
462d522f475Smrg    { "tekreset",	do_tekreset,	NULL },
463d522f475Smrg    { "tekcopy",	do_tekcopy,	NULL },
464d522f475Smrg    { "line2",		NULL,		NULL },
465d522f475Smrg    { "vtshow",		do_vtshow,	NULL },
466d522f475Smrg    { "vtmode",		do_vtmode,	NULL },
467d522f475Smrg    { "tekhide",	do_tekhide,	NULL }};
468d522f475Smrg#endif
469d522f475Smrg
470d522f475Smrgtypedef struct {
471d522f475Smrg    char *internal_name;
472d522f475Smrg    MenuEntry *entry_list;
473d522f475Smrg    Cardinal entry_len;
474d522f475Smrg} MenuHeader;
475d522f475Smrg
476d522f475Smrg    /* This table is ordered to correspond with MenuIndex */
47701037d57Smrgstatic const MenuHeader menu_names[] = {
478d522f475Smrg    { "mainMenu", mainMenuEntries, XtNumber(mainMenuEntries) },
479d522f475Smrg    { "vtMenu",   vtMenuEntries,   XtNumber(vtMenuEntries)   },
480d522f475Smrg    { "fontMenu", fontMenuEntries, XtNumber(fontMenuEntries) },
481d522f475Smrg#if OPT_TEK4014
482d522f475Smrg    { "tekMenu",  tekMenuEntries,  XtNumber(tekMenuEntries)  },
483d522f475Smrg#endif
484d522f475Smrg    { 0,          0,               0 },
485d522f475Smrg};
486d522f475Smrg/* *INDENT-ON* */
487d522f475Smrg
488d522f475Smrg/*
489d522f475Smrg * FIXME:  These are global data rather than in the xterm widget because they
490d522f475Smrg * are initialized before the widget is created.
491d522f475Smrg */
492d522f475Smrgtypedef struct {
493d522f475Smrg    Widget b;			/* the toolbar's buttons */
494d522f475Smrg    Widget w;			/* the popup shell activated by the button */
495d522f475Smrg    Cardinal entries;
496d522f475Smrg} MenuList;
497d522f475Smrg
498d522f475Smrgstatic MenuList vt_shell[NUM_POPUP_MENUS];
499d522f475Smrg
500d522f475Smrg#if OPT_TEK4014 && OPT_TOOLBAR
501d522f475Smrgstatic MenuList tek_shell[NUM_POPUP_MENUS];
502d522f475Smrg#endif
503d522f475Smrg
504d522f475Smrgstatic String
505d522f475SmrgsetMenuLocale(Bool before, String substitute)
506d522f475Smrg{
50720d2c4d2Smrg    String result = setlocale(LC_CTYPE, 0);
508d522f475Smrg
509d522f475Smrg    if (before) {
510d522f475Smrg	result = x_strdup(result);
51120d2c4d2Smrg    }
51220d2c4d2Smrg    (void) setlocale(LC_CTYPE, substitute);
51320d2c4d2Smrg    TRACE(("setMenuLocale %s:%s\n",
51420d2c4d2Smrg	   (before
51520d2c4d2Smrg	    ? "before"
51620d2c4d2Smrg	    : "after"),
51720d2c4d2Smrg	   NonNull(result)));
51820d2c4d2Smrg    if (!before) {
51920d2c4d2Smrg	free((void *) substitute);
520d522f475Smrg    }
521d522f475Smrg    return result;
522d522f475Smrg}
523d522f475Smrg
524d522f475Smrg/*
525d522f475Smrg * Returns a pointer to the MenuList entry that matches the popup menu.
526d522f475Smrg */
527d522f475Smrgstatic MenuList *
528d522f475Smrgselect_menu(Widget w GCC_UNUSED, MenuIndex num)
529d522f475Smrg{
530d522f475Smrg#if OPT_TEK4014 && OPT_TOOLBAR
531d522f475Smrg    while (w != 0) {
532d522f475Smrg	if (w == tekshellwidget) {
533d522f475Smrg	    return &tek_shell[num];
534d522f475Smrg	}
535d522f475Smrg	w = XtParent(w);
536d522f475Smrg    }
537d522f475Smrg#endif
538d522f475Smrg    return &vt_shell[num];
539d522f475Smrg}
540d522f475Smrg
541d522f475Smrg/*
542d522f475Smrg * Returns a pointer to the given popup menu shell
543d522f475Smrg */
544d522f475Smrgstatic Widget
545d522f475Smrgobtain_menu(Widget w, MenuIndex num)
546d522f475Smrg{
547d522f475Smrg    return select_menu(w, num)->w;
548d522f475Smrg}
549d522f475Smrg
550d522f475Smrg/*
551d522f475Smrg * Returns the number of entries in the given popup menu shell
552d522f475Smrg */
553d522f475Smrgstatic Cardinal
554d522f475Smrgsizeof_menu(Widget w, MenuIndex num)
555d522f475Smrg{
556d522f475Smrg    return select_menu(w, num)->entries;
557d522f475Smrg}
558d522f475Smrg
559d522f475Smrg/*
560e39b573cSmrg * Return an array of flags telling if a given menu item is never going to
561e39b573cSmrg * be used, so we can reduce the size of menus.
562d522f475Smrg */
563e39b573cSmrgstatic Boolean *
564e39b573cSmrgunusedEntries(XtermWidget xw, MenuIndex num)
565e39b573cSmrg{
566e39b573cSmrg    static Boolean result[XtNumber(mainMenuEntries)
567e39b573cSmrg			  + XtNumber(vtMenuEntries)
568e39b573cSmrg			  + XtNumber(fontMenuEntries)
569e39b573cSmrg#if OPT_TEK4014
570e39b573cSmrg			  + XtNumber(tekMenuEntries)
571e39b573cSmrg#endif
572e39b573cSmrg    ];
573e39b573cSmrg    TScreen *screen = TScreenOf(xw);
574d522f475Smrg
575e39b573cSmrg    memset(result, 0, sizeof(result));
576e39b573cSmrg    switch (num) {
577e39b573cSmrg    case mainMenu:
5780bd37d32Smrg#if OPT_MAXIMIZE
579e39b573cSmrg	if (resource.fullscreen > 1) {
580e39b573cSmrg	    result[mainMenu_fullscreen] = True;
581e39b573cSmrg	}
5820bd37d32Smrg#endif
583e39b573cSmrg#if OPT_NUM_LOCK
584e39b573cSmrg	if (!screen->alt_is_not_meta) {
585e39b573cSmrg	    result[mainMenu_alt_esc] = True;
586e39b573cSmrg	}
587e39b573cSmrg#endif
588e39b573cSmrg	if (!xtermHasPrinter(xw)) {
589e39b573cSmrg	    result[mainMenu_print] = True;
590e39b573cSmrg	    result[mainMenu_print_redir] = True;
591e39b573cSmrg	}
592e39b573cSmrg	if (screen->terminal_id < 200) {
593e39b573cSmrg	    result[mainMenu_8bit_ctrl] = True;
594e39b573cSmrg	}
595e39b573cSmrg#if !defined(SIGTSTP)
596e39b573cSmrg	result[mainMenu_suspend] = True;
597e39b573cSmrg#endif
598e39b573cSmrg#if !defined(SIGCONT)
599e39b573cSmrg	result[mainMenu_continue] = True;
600e39b573cSmrg#endif
601e39b573cSmrg#ifdef ALLOWLOGGING
602e39b573cSmrg	if (screen->inhibit & I_LOG) {
603e39b573cSmrg	    result[mainMenu_logging] = True;
604e39b573cSmrg	}
605e39b573cSmrg#endif
606e39b573cSmrg	if (screen->inhibit & I_SIGNAL) {
607e39b573cSmrg	    int n;
608e39b573cSmrg	    for (n = (int) mainMenu_suspend; n <= (int) mainMenu_quit; ++n) {
609e39b573cSmrg		result[n] = True;
610e39b573cSmrg	    }
611e39b573cSmrg	}
612e39b573cSmrg	break;
613e39b573cSmrg    case vtMenu:
614e39b573cSmrg#ifndef NO_ACTIVE_ICON
615e39b573cSmrg	if (!screen->fnt_icon.fs || !screen->iconVwin.window) {
616e39b573cSmrg	    result[vtMenu_activeicon] = True;
617e39b573cSmrg	}
618e39b573cSmrg#endif /* NO_ACTIVE_ICON */
619e39b573cSmrg#if OPT_TEK4014
620e39b573cSmrg	if (screen->inhibit & I_TEK) {
621e39b573cSmrg	    int n;
622e39b573cSmrg	    for (n = (int) vtMenu_tekshow; n <= (int) vtMenu_vthide; ++n) {
623e39b573cSmrg		result[n] = True;
624e39b573cSmrg	    }
625e39b573cSmrg	}
626e39b573cSmrg#endif
627e39b573cSmrg	break;
628e39b573cSmrg    case fontMenu:
629e39b573cSmrg	break;
630e39b573cSmrg#if OPT_TEK4014
631e39b573cSmrg    case tekMenu:
632e39b573cSmrg	break;
633e39b573cSmrg#endif
634e39b573cSmrg    case noMenu:
635e39b573cSmrg	break;
636e39b573cSmrg    }
637e39b573cSmrg    return result;
638e39b573cSmrg}
639e39b573cSmrg
640e39b573cSmrg/*
641e39b573cSmrg * create_menu - create a popup shell and stuff the menu into it.
642e39b573cSmrg */
643d522f475Smrgstatic Widget
644e39b573cSmrgcreate_menu(Widget w, XtermWidget xw, MenuIndex num)
645d522f475Smrg{
646d522f475Smrg    static XtCallbackRec cb[2] =
647d522f475Smrg    {
648d522f475Smrg	{NULL, NULL},
649d522f475Smrg	{NULL, NULL}};
650d522f475Smrg    static Arg arg =
651d522f475Smrg    {XtNcallback, (XtArgVal) cb};
652d522f475Smrg
653e39b573cSmrg    TScreen *screen = TScreenOf(xw);
65401037d57Smrg    const MenuHeader *data = &menu_names[num];
655d522f475Smrg    MenuList *list = select_menu(w, num);
656d522f475Smrg    struct _MenuEntry *entries = data->entry_list;
657956cc18dSsnj    Cardinal nentries = data->entry_len;
658d522f475Smrg#if !OPT_TOOLBAR
659d522f475Smrg    String saveLocale;
660d522f475Smrg#endif
661d522f475Smrg
662d522f475Smrg    if (screen->menu_item_bitmap == None) {
663d522f475Smrg	/*
664d522f475Smrg	 * we really want to do these dynamically
665d522f475Smrg	 */
666d522f475Smrg#define check_width 9
667d522f475Smrg#define check_height 8
668d522f475Smrg	static unsigned char check_bits[] =
669d522f475Smrg	{
670d522f475Smrg	    0x00, 0x01, 0x80, 0x01, 0xc0, 0x00, 0x60, 0x00,
671d522f475Smrg	    0x31, 0x00, 0x1b, 0x00, 0x0e, 0x00, 0x04, 0x00
672d522f475Smrg	};
673d522f475Smrg
674d522f475Smrg	screen->menu_item_bitmap =
675e39b573cSmrg	    XCreateBitmapFromData(XtDisplay(xw),
676e39b573cSmrg				  RootWindowOfScreen(XtScreen(xw)),
677d522f475Smrg				  (char *) check_bits, check_width, check_height);
678d522f475Smrg    }
679d522f475Smrg#if !OPT_TOOLBAR
680d522f475Smrg    saveLocale = setMenuLocale(True, resource.menuLocale);
681d522f475Smrg    list->w = XtCreatePopupShell(data->internal_name,
682d522f475Smrg				 simpleMenuWidgetClass,
683d522f475Smrg				 toplevel,
684d522f475Smrg				 NULL, 0);
685d522f475Smrg#endif
686d522f475Smrg    if (list->w != 0) {
687e39b573cSmrg	Boolean *unused = unusedEntries(xw, num);
688e39b573cSmrg	Cardinal n;
689e39b573cSmrg
690e39b573cSmrg	list->entries = 0;
691e39b573cSmrg
692e39b573cSmrg	for (n = 0; n < nentries; ++n) {
693e39b573cSmrg	    if (!unused[n]) {
694e39b573cSmrg		cb[0].callback = (XtCallbackProc) entries[n].function;
6950bd37d32Smrg		cb[0].closure = (XtPointer) entries[n].name;
696e39b573cSmrg		entries[n].widget = XtCreateManagedWidget(entries[n].name,
697e39b573cSmrg							  (entries[n].function
698e39b573cSmrg							   ? smeBSBObjectClass
699e39b573cSmrg							   : smeLineObjectClass),
700e39b573cSmrg							  list->w,
701e39b573cSmrg							  &arg, (Cardinal) 1);
702e39b573cSmrg		list->entries++;
703e39b573cSmrg	    }
704d522f475Smrg	}
705d522f475Smrg    }
706d522f475Smrg#if !OPT_TOOLBAR
707d522f475Smrg    (void) setMenuLocale(False, saveLocale);
708d522f475Smrg#endif
709d522f475Smrg
710d522f475Smrg    /* do not realize at this point */
711d522f475Smrg    return list->w;
712d522f475Smrg}
713d522f475Smrg
714d522f475Smrgstatic MenuIndex
715d522f475SmrgindexOfMenu(String menuName)
716d522f475Smrg{
717d522f475Smrg    MenuIndex me;
718d522f475Smrg    switch (*menuName) {
719d522f475Smrg    case 'm':
720d522f475Smrg	me = mainMenu;
721d522f475Smrg	break;
722d522f475Smrg    case 'v':
723d522f475Smrg	me = vtMenu;
724d522f475Smrg	break;
725d522f475Smrg    case 'f':
726d522f475Smrg	me = fontMenu;
727d522f475Smrg	break;
728d522f475Smrg#if OPT_TEK4014
729d522f475Smrg    case 't':
730d522f475Smrg	me = tekMenu;
731d522f475Smrg	break;
732d522f475Smrg#endif
733d522f475Smrg    default:
734d522f475Smrg	me = noMenu;
735d522f475Smrg    }
736d522f475Smrg    return (me);
737d522f475Smrg}
738d522f475Smrg
739d522f475Smrg/* ARGSUSED */
740d522f475Smrgstatic Bool
741d522f475Smrgdomenu(Widget w,
742894e0ac8Smrg       XEvent *event GCC_UNUSED,
743894e0ac8Smrg       String *params,		/* mainMenu, vtMenu, or tekMenu */
744d522f475Smrg       Cardinal *param_count)	/* 0 or 1 */
745d522f475Smrg{
74620d2c4d2Smrg    XtermWidget xw = term;
74720d2c4d2Smrg    TScreen *screen = TScreenOf(xw);
748d522f475Smrg    MenuIndex me;
749d522f475Smrg    Bool created = False;
750d522f475Smrg    Widget mw;
751d522f475Smrg
752d522f475Smrg    if (*param_count != 1) {
75320d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
754d522f475Smrg	return False;
755d522f475Smrg    }
756d522f475Smrg
757d522f475Smrg    if ((me = indexOfMenu(params[0])) == noMenu) {
75820d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
759d522f475Smrg	return False;
760d522f475Smrg    }
761d522f475Smrg
762d522f475Smrg    if ((mw = obtain_menu(w, me)) == 0
763d522f475Smrg	|| sizeof_menu(w, me) == 0) {
76420d2c4d2Smrg	mw = create_menu(w, xw, me);
765d522f475Smrg	created = (mw != 0);
766d522f475Smrg    }
767d522f475Smrg    if (mw == 0)
768d522f475Smrg	return False;
769d522f475Smrg
770d522f475Smrg    TRACE(("domenu(%s) %s\n", params[0], created ? "create" : "update"));
771d522f475Smrg    switch (me) {
772d522f475Smrg    case mainMenu:
773d522f475Smrg	if (created) {
774d522f475Smrg	    update_toolbar();
775a1f3da82Smrg	    update_fullscreen();
776d522f475Smrg	    update_securekbd();
777d522f475Smrg	    update_allowsends();
778d522f475Smrg	    update_logging();
779d522f475Smrg	    update_print_redir();
780d522f475Smrg	    update_8bit_control();
781d522f475Smrg	    update_decbkm();
782d522f475Smrg	    update_num_lock();
783d522f475Smrg	    update_alt_esc();
784d522f475Smrg	    update_meta_esc();
785d522f475Smrg	    update_delete_del();
786d522f475Smrg	    update_keyboard_type();
7872e4f8982Smrg#ifdef OPT_PRINT_ON_EXIT
7882e4f8982Smrg	    screen->write_error = !IsEmpty(resource.printFileOnXError);
789e39b573cSmrg	    SetItemSensitivity(mainMenuEntries[mainMenu_write_now].widget, False);
790e39b573cSmrg	    SetItemSensitivity(mainMenuEntries[mainMenu_write_error].widget, screen->write_error);
791d522f475Smrg#endif
792d522f475Smrg	}
793d522f475Smrg	break;
794d522f475Smrg
795d522f475Smrg    case vtMenu:
796d522f475Smrg	if (created) {
797d522f475Smrg	    update_scrollbar();
798d522f475Smrg	    update_jumpscroll();
799d522f475Smrg	    update_reversevideo();
800d522f475Smrg	    update_autowrap();
801d522f475Smrg	    update_reversewrap();
802d522f475Smrg	    update_autolinefeed();
803d522f475Smrg	    update_appcursor();
804d522f475Smrg	    update_appkeypad();
805d522f475Smrg	    update_scrollkey();
806d522f475Smrg	    update_scrollttyoutput();
807d522f475Smrg	    update_allow132();
808d522f475Smrg	    update_cursesemul();
809d522f475Smrg	    update_keepSelection();
810d522f475Smrg	    update_selectToClipboard();
811d522f475Smrg	    update_visualbell();
812d522f475Smrg	    update_poponbell();
813d522f475Smrg	    update_bellIsUrgent();
814d522f475Smrg	    update_cursorblink();
815d522f475Smrg	    update_altscreen();
816e0a2b6dfSmrg	    update_decsdm();	/* Sixel Display Mode */
817d522f475Smrg	    update_titeInhibit();
818d522f475Smrg#ifndef NO_ACTIVE_ICON
819e39b573cSmrg	    update_activeicon();
820d522f475Smrg#endif /* NO_ACTIVE_ICON */
821e0a2b6dfSmrg	    update_privatecolorregisters();
822d522f475Smrg	}
823d522f475Smrg	break;
824d522f475Smrg
825d522f475Smrg    case fontMenu:
826d522f475Smrg	if (created) {
827e39b573cSmrg	    int n;
828e39b573cSmrg
829d522f475Smrg	    set_menu_font(True);
830e39b573cSmrg	    for (n = fontMenu_font1; n <= fontMenu_font6; ++n) {
831e39b573cSmrg		if (IsEmpty(screen->menu_font_names[n][fNorm]))
832e39b573cSmrg		    SetItemSensitivity(fontMenuEntries[n].widget, False);
833e39b573cSmrg	    }
83401037d57Smrg	    update_font_escape();
835e39b573cSmrg	    update_menu_allowBoldFonts();
836d522f475Smrg#if OPT_BOX_CHARS
837d522f475Smrg	    update_font_boxchars();
838d522f475Smrg	    SetItemSensitivity(
839d522f475Smrg				  fontMenuEntries[fontMenu_font_boxchars].widget,
840d522f475Smrg				  True);
84120d2c4d2Smrg	    update_font_packed();
84220d2c4d2Smrg	    SetItemSensitivity(
84320d2c4d2Smrg				  fontMenuEntries[fontMenu_font_packedfont].widget,
84420d2c4d2Smrg				  True);
845d522f475Smrg#endif
846d522f475Smrg#if OPT_DEC_SOFTFONT		/* FIXME: not implemented */
847d522f475Smrg	    update_font_loadable();
848d522f475Smrg	    SetItemSensitivity(
849d522f475Smrg				  fontMenuEntries[fontMenu_font_loadable].widget,
850d522f475Smrg				  False);
851d522f475Smrg#endif
852d522f475Smrg#if OPT_DEC_CHRSET
853d522f475Smrg	    update_font_doublesize();
85420d2c4d2Smrg	    if (TScreenOf(xw)->cache_doublesize == 0)
855d522f475Smrg		SetItemSensitivity(
856d522f475Smrg				      fontMenuEntries[fontMenu_font_doublesize].widget,
857d522f475Smrg				      False);
858d522f475Smrg#endif
859d522f475Smrg#if OPT_RENDERFONT
860d522f475Smrg	    update_font_renderfont();
861d522f475Smrg#endif
862d522f475Smrg#if OPT_WIDE_CHARS
863d522f475Smrg	    update_font_utf8_mode();
864e39b573cSmrg	    update_font_utf8_fonts();
865d522f475Smrg	    update_font_utf8_title();
866956cc18dSsnj#endif
867956cc18dSsnj#if OPT_ALLOW_XXX_OPS
86820d2c4d2Smrg	    update_menu_allowColorOps();
869956cc18dSsnj	    update_menu_allowFontOps();
87020d2c4d2Smrg	    update_menu_allowTcapOps();
871956cc18dSsnj	    update_menu_allowTitleOps();
872956cc18dSsnj	    update_menu_allowWindowOps();
873956cc18dSsnj	    enable_allow_xxx_ops(!(screen->allowSendEvents));
874d522f475Smrg#endif
875d522f475Smrg	}
876894e0ac8Smrg#if OPT_TOOLBAR
877894e0ac8Smrg	/* menus for toolbar are initialized once only */
878894e0ac8Smrg	SetItemSensitivity(fontMenuEntries[fontMenu_fontsel].widget, True);
879894e0ac8Smrg#else
88020d2c4d2Smrg	FindFontSelection(xw, NULL, True);
88101037d57Smrg	SetItemSensitivity(fontMenuEntries[fontMenu_fontsel].widget,
88201037d57Smrg			   (screen->SelectFontName()
88301037d57Smrg			    ? True
88401037d57Smrg			    : False));
885894e0ac8Smrg#endif
886d522f475Smrg	break;
887d522f475Smrg
888d522f475Smrg#if OPT_TEK4014
889d522f475Smrg    case tekMenu:
890d522f475Smrg	if (created && tekWidget) {
89120d2c4d2Smrg	    set_tekfont_menu_item(TekScreenOf(tekWidget)->cur.fontsize, True);
892d522f475Smrg	    update_vtshow();
893d522f475Smrg	}
894d522f475Smrg	break;
895d522f475Smrg#endif
896d522f475Smrg    case noMenu:
897d522f475Smrg    default:
898d522f475Smrg	break;
899d522f475Smrg    }
900d522f475Smrg
901d522f475Smrg    return True;
902d522f475Smrg}
903d522f475Smrg
904d522f475Smrg/*
905d522f475Smrg * public interfaces
906d522f475Smrg */
907d522f475Smrg
908d522f475Smrgvoid
909d522f475SmrgHandleCreateMenu(Widget w,
910894e0ac8Smrg		 XEvent *event,
911894e0ac8Smrg		 String *params,	/* mainMenu, vtMenu, or tekMenu */
912d522f475Smrg		 Cardinal *param_count)		/* 0 or 1 */
913d522f475Smrg{
914d522f475Smrg    TRACE(("HandleCreateMenu\n"));
915d522f475Smrg    (void) domenu(w, event, params, param_count);
916d522f475Smrg}
917d522f475Smrg
918d522f475Smrgvoid
919d522f475SmrgHandlePopupMenu(Widget w,
920894e0ac8Smrg		XEvent *event,
921894e0ac8Smrg		String *params,	/* mainMenu, vtMenu, or tekMenu */
922d522f475Smrg		Cardinal *param_count)	/* 0 or 1 */
923d522f475Smrg{
924d522f475Smrg    TRACE(("HandlePopupMenu\n"));
925d522f475Smrg    if (domenu(w, event, params, param_count)) {
926e39b573cSmrg	XtermWidget xw = term;
927e39b573cSmrg	TScreen *screen = TScreenOf(xw);
928e39b573cSmrg
929d522f475Smrg#if OPT_TOOLBAR
930d522f475Smrg	w = select_menu(w, mainMenu)->w;
931d522f475Smrg#endif
932e39b573cSmrg	/*
933e39b573cSmrg	 * The action procedure in SimpleMenu.c, PositionMenu does not expect a
934e39b573cSmrg	 * key translation event when we are popping up a menu.  In particular,
935e39b573cSmrg	 * if the pointer is outside the menu, then the action procedure will
936e39b573cSmrg	 * fail in its attempt to determine the location of the pointer within
937e39b573cSmrg	 * the menu.  Anticipate that by warping the pointer into the menu when
938e39b573cSmrg	 * a key event is detected.
939e39b573cSmrg	 */
940e39b573cSmrg	switch (event->type) {
941e39b573cSmrg	case KeyPress:
942e39b573cSmrg	case KeyRelease:
943e39b573cSmrg	    XWarpPointer(screen->display, None, XtWindow(w), 0, 0, 0, 0, 0, 0);
944e39b573cSmrg	    break;
945e39b573cSmrg	default:
946e39b573cSmrg	    XtCallActionProc(w, "XawPositionSimpleMenu", event, params, 1);
947e39b573cSmrg	    break;
948e39b573cSmrg	}
949d522f475Smrg	XtCallActionProc(w, "MenuPopup", event, params, 1);
950d522f475Smrg    }
951d522f475Smrg}
952d522f475Smrg
953d522f475Smrg/*
954d522f475Smrg * private interfaces - keep out!
955d522f475Smrg */
956d522f475Smrg
957d522f475Smrg/* ARGSUSED */
958d522f475Smrgstatic void
959d522f475Smrghandle_send_signal(Widget gw GCC_UNUSED, int sig)
960d522f475Smrg{
961d522f475Smrg#ifndef VMS
962d522f475Smrg    TScreen *screen = TScreenOf(term);
963d522f475Smrg
964d522f475Smrg    if (hold_screen > 1)
965d522f475Smrg	hold_screen = 0;
966d522f475Smrg    if (screen->pid > 1)
967d522f475Smrg	kill_process_group(screen->pid, sig);
968d522f475Smrg#endif
969d522f475Smrg}
970d522f475Smrg
971a1f3da82Smrgstatic void
972a1f3da82SmrgUpdateMenuItem(
973a1f3da82Smrg#if OPT_TRACE
974a1f3da82Smrg		  const char *func,
975a1f3da82Smrg#endif
976a1f3da82Smrg		  MenuEntry * menu,
977a1f3da82Smrg		  int which,
978a1f3da82Smrg		  Bool val)
979a1f3da82Smrg{
980a1f3da82Smrg    static Arg menuArgs =
981a1f3da82Smrg    {XtNleftBitmap, (XtArgVal) 0};
982a1f3da82Smrg    Widget mi = menu[which].widget;
983a1f3da82Smrg
984a1f3da82Smrg    if (mi) {
985a1f3da82Smrg	menuArgs.value = (XtArgVal) ((val)
986a1f3da82Smrg				     ? TScreenOf(term)->menu_item_bitmap
987a1f3da82Smrg				     : None);
988a1f3da82Smrg	XtSetValues(mi, &menuArgs, (Cardinal) 1);
989a1f3da82Smrg    }
99001037d57Smrg    TRACE(("%s(%d): %s\n", func, which, MtoS(val)));
991a1f3da82Smrg}
992a1f3da82Smrg
993a1f3da82Smrgvoid
994a1f3da82SmrgSetItemSensitivity(Widget mi, Bool val)
995a1f3da82Smrg{
996a1f3da82Smrg    static Arg menuArgs =
997a1f3da82Smrg    {XtNsensitive, (XtArgVal) 0};
998a1f3da82Smrg
999a1f3da82Smrg    if (mi) {
1000a1f3da82Smrg	menuArgs.value = (XtArgVal) (val);
1001a1f3da82Smrg	XtSetValues(mi, &menuArgs, (Cardinal) 1);
1002a1f3da82Smrg    }
1003a1f3da82Smrg}
1004a1f3da82Smrg
1005d522f475Smrg/*
1006d522f475Smrg * action routines
1007d522f475Smrg */
1008d522f475Smrg
1009d522f475Smrgstatic void
1010d522f475Smrgdo_securekbd(Widget gw GCC_UNUSED,
1011d522f475Smrg	     XtPointer closure GCC_UNUSED,
1012d522f475Smrg	     XtPointer data GCC_UNUSED)
1013d522f475Smrg{
101420d2c4d2Smrg    XtermWidget xw = term;
101520d2c4d2Smrg    TScreen *screen = TScreenOf(xw);
1016d522f475Smrg    Time now = CurrentTime;	/* XXX - wrong */
1017d522f475Smrg
1018d522f475Smrg    if (screen->grabbedKbd) {
1019d522f475Smrg	XUngrabKeyboard(screen->display, now);
102020d2c4d2Smrg	ReverseVideo(xw);
1021d522f475Smrg	screen->grabbedKbd = False;
1022d522f475Smrg    } else {
1023d522f475Smrg	if (XGrabKeyboard(screen->display, XtWindow(CURRENT_EMU()),
1024d522f475Smrg			  True, GrabModeAsync, GrabModeAsync, now)
1025d522f475Smrg	    != GrabSuccess) {
102620d2c4d2Smrg	    Bell(xw, XkbBI_MinorError, 100);
1027d522f475Smrg	} else {
102820d2c4d2Smrg	    ReverseVideo(xw);
1029d522f475Smrg	    screen->grabbedKbd = True;
1030d522f475Smrg	}
1031d522f475Smrg    }
1032d522f475Smrg    update_securekbd();
1033d522f475Smrg}
1034d522f475Smrg
1035d522f475Smrg/* ARGSUSED */
1036d522f475Smrgvoid
1037d522f475SmrgHandleSecure(Widget w GCC_UNUSED,
1038894e0ac8Smrg	     XEvent *event GCC_UNUSED,	/* unused */
1039894e0ac8Smrg	     String *params GCC_UNUSED,		/* [0] = volume */
1040d522f475Smrg	     Cardinal *param_count GCC_UNUSED)	/* 0 or 1 */
1041d522f475Smrg{
1042d522f475Smrg#if 0
1043d522f475Smrg    Time ev_time = CurrentTime;
1044d522f475Smrg
1045d522f475Smrg    if ((event->xany.type == KeyPress) ||
1046d522f475Smrg	(event->xany.type == KeyRelease))
1047d522f475Smrg	ev_time = event->xkey.time;
1048d522f475Smrg    else if ((event->xany.type == ButtonPress) ||
1049d522f475Smrg	     (event->xany.type == ButtonRelease))
1050d522f475Smrg	ev_time = event->xbutton.time;
1051d522f475Smrg#endif
1052d522f475Smrg    do_securekbd(vt_shell[mainMenu].w, (XtPointer) 0, (XtPointer) 0);
1053d522f475Smrg}
1054d522f475Smrg
1055d522f475Smrgstatic void
1056d522f475Smrgdo_allowsends(Widget gw GCC_UNUSED,
1057d522f475Smrg	      XtPointer closure GCC_UNUSED,
1058d522f475Smrg	      XtPointer data GCC_UNUSED)
1059d522f475Smrg{
1060d522f475Smrg    TScreen *screen = TScreenOf(term);
1061d522f475Smrg
1062956cc18dSsnj    ToggleFlag(screen->allowSendEvents);
1063d522f475Smrg    update_allowsends();
1064956cc18dSsnj#if OPT_ALLOW_XXX_OPS
1065956cc18dSsnj    enable_allow_xxx_ops(!(screen->allowSendEvents));
1066956cc18dSsnj#endif
1067d522f475Smrg}
1068d522f475Smrg
1069d522f475Smrgstatic void
1070d522f475Smrgdo_visualbell(Widget gw GCC_UNUSED,
1071d522f475Smrg	      XtPointer closure GCC_UNUSED,
1072d522f475Smrg	      XtPointer data GCC_UNUSED)
1073d522f475Smrg{
1074d522f475Smrg    TScreen *screen = TScreenOf(term);
1075d522f475Smrg
1076956cc18dSsnj    ToggleFlag(screen->visualbell);
1077d522f475Smrg    update_visualbell();
1078d522f475Smrg}
1079d522f475Smrg
1080d522f475Smrgstatic void
1081d522f475Smrgdo_bellIsUrgent(Widget gw GCC_UNUSED,
1082d522f475Smrg		XtPointer closure GCC_UNUSED,
1083d522f475Smrg		XtPointer data GCC_UNUSED)
1084d522f475Smrg{
1085d522f475Smrg    TScreen *screen = TScreenOf(term);
1086d522f475Smrg
1087956cc18dSsnj    ToggleFlag(screen->bellIsUrgent);
1088d522f475Smrg    update_bellIsUrgent();
1089d522f475Smrg}
1090d522f475Smrg
1091d522f475Smrgstatic void
1092d522f475Smrgdo_poponbell(Widget gw GCC_UNUSED,
1093d522f475Smrg	     XtPointer closure GCC_UNUSED,
1094d522f475Smrg	     XtPointer data GCC_UNUSED)
1095d522f475Smrg{
1096d522f475Smrg    TScreen *screen = TScreenOf(term);
1097d522f475Smrg
1098956cc18dSsnj    ToggleFlag(screen->poponbell);
1099d522f475Smrg    update_poponbell();
1100d522f475Smrg}
1101d522f475Smrg
1102d522f475Smrg#ifdef ALLOWLOGGING
1103d522f475Smrgstatic void
1104d522f475Smrgdo_logging(Widget gw GCC_UNUSED,
1105d522f475Smrg	   XtPointer closure GCC_UNUSED,
1106d522f475Smrg	   XtPointer data GCC_UNUSED)
1107d522f475Smrg{
110820d2c4d2Smrg    XtermWidget xw = term;
110920d2c4d2Smrg    TScreen *screen = TScreenOf(xw);
1110d522f475Smrg
1111d522f475Smrg    if (screen->logging) {
111220d2c4d2Smrg	CloseLog(xw);
1113d522f475Smrg    } else {
111420d2c4d2Smrg	StartLog(xw);
1115d522f475Smrg    }
1116d522f475Smrg    /* update_logging done by CloseLog and StartLog */
1117d522f475Smrg}
1118d522f475Smrg#endif
1119d522f475Smrg
1120e39b573cSmrg#ifdef OPT_PRINT_ON_EXIT
1121e39b573cSmrgstatic void
1122e39b573cSmrgdo_write_now(Widget gw GCC_UNUSED,
1123e39b573cSmrg	     XtPointer closure GCC_UNUSED,
1124e39b573cSmrg	     XtPointer data GCC_UNUSED)
1125e39b573cSmrg{
1126e39b573cSmrg    XtermWidget xw = term;
1127e39b573cSmrg
1128e39b573cSmrg    xtermPrintImmediately(xw,
1129e39b573cSmrg			  (IsEmpty(resource.printFileNow)
1130894e0ac8Smrg			   ? (String) "XTerm"
1131e39b573cSmrg			   : resource.printFileNow),
1132e39b573cSmrg			  resource.printOptsNow,
1133e39b573cSmrg			  resource.printModeNow);
1134e39b573cSmrg}
1135e39b573cSmrg
1136e39b573cSmrgstatic void
1137e39b573cSmrgdo_write_error(Widget gw GCC_UNUSED,
1138e39b573cSmrg	       XtPointer closure GCC_UNUSED,
1139e39b573cSmrg	       XtPointer data GCC_UNUSED)
1140e39b573cSmrg{
1141e39b573cSmrg    XtermWidget xw = term;
1142e39b573cSmrg
1143e39b573cSmrg    if (IsEmpty(resource.printFileOnXError)) {
1144e39b573cSmrg	resource.printFileOnXError = "XTermError";
1145e39b573cSmrg    }
1146e39b573cSmrg    TScreenOf(xw)->write_error = (Boolean) (!TScreenOf(xw)->write_error);
1147e39b573cSmrg    update_write_error();
1148e39b573cSmrg}
1149e39b573cSmrg#endif
1150e39b573cSmrg
1151d522f475Smrgstatic void
1152d522f475Smrgdo_print(Widget gw GCC_UNUSED,
1153d522f475Smrg	 XtPointer closure GCC_UNUSED,
1154d522f475Smrg	 XtPointer data GCC_UNUSED)
1155d522f475Smrg{
115620d2c4d2Smrg    xtermPrintScreen(term, True, getPrinterFlags(term, NULL, 0));
1157d522f475Smrg}
1158d522f475Smrg
1159d522f475Smrgstatic void
1160d522f475Smrgdo_print_redir(Widget gw GCC_UNUSED,
1161d522f475Smrg	       XtPointer closure GCC_UNUSED,
1162d522f475Smrg	       XtPointer data GCC_UNUSED)
1163d522f475Smrg{
1164e39b573cSmrg    setPrinterControlMode(term,
1165e39b573cSmrg			  (PrinterOf(TScreenOf(term)).printer_controlmode
1166e39b573cSmrg			   ? 0
1167e39b573cSmrg			   : 2));
1168d522f475Smrg}
1169d522f475Smrg
11702e4f8982Smrg#if OPT_SCREEN_DUMPS
11712e4f8982Smrgstatic void
11722e4f8982Smrgdo_dump_html(Widget gw GCC_UNUSED,
11732e4f8982Smrg	     XtPointer closure GCC_UNUSED,
11742e4f8982Smrg	     XtPointer data GCC_UNUSED)
11752e4f8982Smrg{
11762e4f8982Smrg    xtermDumpHtml(term);
11772e4f8982Smrg}
11782e4f8982Smrg
11792e4f8982Smrgstatic void
11802e4f8982Smrgdo_dump_svg(Widget gw GCC_UNUSED,
11812e4f8982Smrg	    XtPointer closure GCC_UNUSED,
11822e4f8982Smrg	    XtPointer data GCC_UNUSED)
11832e4f8982Smrg{
11842e4f8982Smrg    xtermDumpSvg(term);
11852e4f8982Smrg}
11862e4f8982Smrg#endif
11872e4f8982Smrg
1188d522f475Smrgstatic void
1189d522f475Smrgdo_redraw(Widget gw GCC_UNUSED,
1190d522f475Smrg	  XtPointer closure GCC_UNUSED,
1191d522f475Smrg	  XtPointer data GCC_UNUSED)
1192d522f475Smrg{
1193d522f475Smrg    Redraw();
1194d522f475Smrg}
1195d522f475Smrg
1196d522f475Smrgvoid
1197d522f475Smrgshow_8bit_control(Bool value)
1198d522f475Smrg{
119920d2c4d2Smrg    if (TScreenOf(term)->control_eight_bits != value) {
120020d2c4d2Smrg	TScreenOf(term)->control_eight_bits = (Boolean) value;
1201d522f475Smrg	update_8bit_control();
1202d522f475Smrg    }
1203d522f475Smrg}
1204d522f475Smrg
1205d522f475Smrgstatic void
1206d522f475Smrgdo_8bit_control(Widget gw GCC_UNUSED,
1207d522f475Smrg		XtPointer closure GCC_UNUSED,
1208d522f475Smrg		XtPointer data GCC_UNUSED)
1209d522f475Smrg{
121020d2c4d2Smrg    show_8bit_control(!TScreenOf(term)->control_eight_bits);
1211d522f475Smrg}
1212d522f475Smrg
1213d522f475Smrgstatic void
1214d522f475Smrgdo_backarrow(Widget gw GCC_UNUSED,
1215d522f475Smrg	     XtPointer closure GCC_UNUSED,
1216d522f475Smrg	     XtPointer data GCC_UNUSED)
1217d522f475Smrg{
1218d522f475Smrg    term->keyboard.flags ^= MODE_DECBKM;
1219d522f475Smrg    update_decbkm();
1220d522f475Smrg}
1221d522f475Smrg
1222d522f475Smrg#if OPT_NUM_LOCK
1223d522f475Smrgstatic void
1224d522f475Smrgdo_num_lock(Widget gw GCC_UNUSED,
1225d522f475Smrg	    XtPointer closure GCC_UNUSED,
1226d522f475Smrg	    XtPointer data GCC_UNUSED)
1227d522f475Smrg{
1228956cc18dSsnj    ToggleFlag(term->misc.real_NumLock);
1229d522f475Smrg    update_num_lock();
1230d522f475Smrg}
1231d522f475Smrg
1232d522f475Smrgstatic void
1233d522f475Smrgdo_alt_esc(Widget gw GCC_UNUSED,
1234d522f475Smrg	   XtPointer closure GCC_UNUSED,
1235d522f475Smrg	   XtPointer data GCC_UNUSED)
1236d522f475Smrg{
123720d2c4d2Smrg    ToggleFlag(TScreenOf(term)->alt_sends_esc);
1238d522f475Smrg    update_alt_esc();
1239d522f475Smrg}
1240d522f475Smrg
1241d522f475Smrgstatic void
1242d522f475Smrgdo_meta_esc(Widget gw GCC_UNUSED,
1243d522f475Smrg	    XtPointer closure GCC_UNUSED,
1244d522f475Smrg	    XtPointer data GCC_UNUSED)
1245d522f475Smrg{
124620d2c4d2Smrg    ToggleFlag(TScreenOf(term)->meta_sends_esc);
1247d522f475Smrg    update_meta_esc();
1248d522f475Smrg}
1249d522f475Smrg#endif
1250d522f475Smrg
1251d522f475Smrgstatic void
1252d522f475Smrgdo_delete_del(Widget gw GCC_UNUSED,
1253d522f475Smrg	      XtPointer closure GCC_UNUSED,
1254d522f475Smrg	      XtPointer data GCC_UNUSED)
1255d522f475Smrg{
1256d522f475Smrg    if (xtermDeleteIsDEL(term))
125720d2c4d2Smrg	TScreenOf(term)->delete_is_del = False;
1258d522f475Smrg    else
125920d2c4d2Smrg	TScreenOf(term)->delete_is_del = True;
1260d522f475Smrg    update_delete_del();
1261d522f475Smrg}
1262d522f475Smrg
1263d522f475Smrgstatic void
1264d522f475Smrgdo_old_fkeys(Widget gw GCC_UNUSED,
1265d522f475Smrg	     XtPointer closure GCC_UNUSED,
1266d522f475Smrg	     XtPointer data GCC_UNUSED)
1267d522f475Smrg{
1268d522f475Smrg    toggle_keyboard_type(term, keyboardIsLegacy);
1269d522f475Smrg}
1270d522f475Smrg
1271d522f475Smrg#if OPT_HP_FUNC_KEYS
1272d522f475Smrgstatic void
1273d522f475Smrgdo_hp_fkeys(Widget gw GCC_UNUSED,
1274d522f475Smrg	    XtPointer closure GCC_UNUSED,
1275d522f475Smrg	    XtPointer data GCC_UNUSED)
1276d522f475Smrg{
1277d522f475Smrg    toggle_keyboard_type(term, keyboardIsHP);
1278d522f475Smrg}
1279d522f475Smrg#endif
1280d522f475Smrg
1281d522f475Smrg#if OPT_SCO_FUNC_KEYS
1282d522f475Smrgstatic void
1283d522f475Smrgdo_sco_fkeys(Widget gw GCC_UNUSED,
1284d522f475Smrg	     XtPointer closure GCC_UNUSED,
1285d522f475Smrg	     XtPointer data GCC_UNUSED)
1286d522f475Smrg{
1287d522f475Smrg    toggle_keyboard_type(term, keyboardIsSCO);
1288d522f475Smrg}
1289d522f475Smrg#endif
1290d522f475Smrg
1291d522f475Smrg#if OPT_SUN_FUNC_KEYS
1292d522f475Smrgstatic void
1293d522f475Smrgdo_sun_fkeys(Widget gw GCC_UNUSED,
1294d522f475Smrg	     XtPointer closure GCC_UNUSED,
1295d522f475Smrg	     XtPointer data GCC_UNUSED)
1296d522f475Smrg{
1297d522f475Smrg    toggle_keyboard_type(term, keyboardIsSun);
1298d522f475Smrg}
1299d522f475Smrg#endif
1300d522f475Smrg
1301d522f475Smrg#if OPT_SUNPC_KBD
1302d522f475Smrg/*
1303d522f475Smrg * This really means "Sun/PC keyboard emulating VT220".
1304d522f475Smrg */
1305d522f475Smrgstatic void
1306d522f475Smrgdo_sun_kbd(Widget gw GCC_UNUSED,
1307d522f475Smrg	   XtPointer closure GCC_UNUSED,
1308d522f475Smrg	   XtPointer data GCC_UNUSED)
1309d522f475Smrg{
1310d522f475Smrg    toggle_keyboard_type(term, keyboardIsVT220);
1311d522f475Smrg}
1312d522f475Smrg#endif
1313d522f475Smrg
1314d522f475Smrg#if OPT_TCAP_FKEYS
1315d522f475Smrgstatic void
1316d522f475Smrgdo_tcap_fkeys(Widget gw GCC_UNUSED,
1317d522f475Smrg	      XtPointer closure GCC_UNUSED,
1318d522f475Smrg	      XtPointer data GCC_UNUSED)
1319d522f475Smrg{
1320d522f475Smrg    toggle_keyboard_type(term, keyboardIsTermcap);
1321d522f475Smrg}
1322d522f475Smrg#endif
1323d522f475Smrg
1324d522f475Smrg/*
1325d522f475Smrg * The following cases use the pid instead of the process group so that we
1326d522f475Smrg * don't get hosed by programs that change their process group
1327d522f475Smrg */
1328d522f475Smrg
1329d522f475Smrg/* ARGSUSED */
1330d522f475Smrgstatic void
1331d522f475Smrgdo_suspend(Widget gw,
1332d522f475Smrg	   XtPointer closure GCC_UNUSED,
1333d522f475Smrg	   XtPointer data GCC_UNUSED)
1334d522f475Smrg{
1335d522f475Smrg#if defined(SIGTSTP)
1336d522f475Smrg    handle_send_signal(gw, SIGTSTP);
1337d522f475Smrg#endif
1338d522f475Smrg}
1339d522f475Smrg
1340d522f475Smrg/* ARGSUSED */
1341d522f475Smrgstatic void
1342d522f475Smrgdo_continue(Widget gw,
1343d522f475Smrg	    XtPointer closure GCC_UNUSED,
1344d522f475Smrg	    XtPointer data GCC_UNUSED)
1345d522f475Smrg{
1346d522f475Smrg#if defined(SIGCONT)
1347d522f475Smrg    handle_send_signal(gw, SIGCONT);
1348d522f475Smrg#endif
1349d522f475Smrg}
1350d522f475Smrg
1351d522f475Smrg/* ARGSUSED */
1352d522f475Smrgstatic void
1353d522f475Smrgdo_interrupt(Widget gw,
1354d522f475Smrg	     XtPointer closure GCC_UNUSED,
1355d522f475Smrg	     XtPointer data GCC_UNUSED)
1356d522f475Smrg{
1357d522f475Smrg    handle_send_signal(gw, SIGINT);
1358d522f475Smrg}
1359d522f475Smrg
1360d522f475Smrg/* ARGSUSED */
1361d522f475Smrgvoid
1362d522f475Smrgdo_hangup(Widget gw,
1363d522f475Smrg	  XtPointer closure GCC_UNUSED,
1364d522f475Smrg	  XtPointer data GCC_UNUSED)
1365d522f475Smrg{
1366d522f475Smrg    handle_send_signal(gw, SIGHUP);
1367d522f475Smrg}
1368d522f475Smrg
1369d522f475Smrg/* ARGSUSED */
1370d522f475Smrgstatic void
1371d522f475Smrgdo_terminate(Widget gw,
1372d522f475Smrg	     XtPointer closure GCC_UNUSED,
1373d522f475Smrg	     XtPointer data GCC_UNUSED)
1374d522f475Smrg{
1375d522f475Smrg    handle_send_signal(gw, SIGTERM);
1376d522f475Smrg}
1377d522f475Smrg
1378d522f475Smrg/* ARGSUSED */
1379d522f475Smrgstatic void
1380d522f475Smrgdo_kill(Widget gw,
1381d522f475Smrg	XtPointer closure GCC_UNUSED,
1382d522f475Smrg	XtPointer data GCC_UNUSED)
1383d522f475Smrg{
1384d522f475Smrg    handle_send_signal(gw, SIGKILL);
1385d522f475Smrg}
1386d522f475Smrg
1387d522f475Smrgstatic void
1388d522f475Smrgdo_quit(Widget gw GCC_UNUSED,
1389d522f475Smrg	XtPointer closure GCC_UNUSED,
1390d522f475Smrg	XtPointer data GCC_UNUSED)
1391d522f475Smrg{
1392d522f475Smrg    Cleanup(SIGHUP);
1393d522f475Smrg}
1394d522f475Smrg
1395d522f475Smrg/*
1396d522f475Smrg * vt menu callbacks
1397d522f475Smrg */
1398d522f475Smrg
1399d522f475Smrgstatic void
1400d522f475Smrgdo_scrollbar(Widget gw GCC_UNUSED,
1401d522f475Smrg	     XtPointer closure GCC_UNUSED,
1402d522f475Smrg	     XtPointer data GCC_UNUSED)
1403d522f475Smrg{
1404d522f475Smrg    ToggleScrollBar(term);
1405d522f475Smrg}
1406d522f475Smrg
1407d522f475Smrgstatic void
1408d522f475Smrgdo_jumpscroll(Widget gw GCC_UNUSED,
1409d522f475Smrg	      XtPointer closure GCC_UNUSED,
1410d522f475Smrg	      XtPointer data GCC_UNUSED)
1411d522f475Smrg{
1412d522f475Smrg    TScreen *screen = TScreenOf(term);
1413d522f475Smrg
1414d522f475Smrg    term->flags ^= SMOOTHSCROLL;
1415d522f475Smrg    if (term->flags & SMOOTHSCROLL) {
1416d522f475Smrg	screen->jumpscroll = False;
1417d522f475Smrg	if (screen->scroll_amt)
1418d522f475Smrg	    FlushScroll(term);
1419d522f475Smrg    } else {
1420d522f475Smrg	screen->jumpscroll = True;
1421d522f475Smrg    }
1422d522f475Smrg    update_jumpscroll();
1423d522f475Smrg}
1424d522f475Smrg
1425d522f475Smrgstatic void
1426d522f475Smrgdo_reversevideo(Widget gw GCC_UNUSED,
1427d522f475Smrg		XtPointer closure GCC_UNUSED,
1428d522f475Smrg		XtPointer data GCC_UNUSED)
1429d522f475Smrg{
1430d522f475Smrg    ReverseVideo(term);
1431d522f475Smrg}
1432d522f475Smrg
1433d522f475Smrgstatic void
1434d522f475Smrgdo_autowrap(Widget gw GCC_UNUSED,
1435d522f475Smrg	    XtPointer closure GCC_UNUSED,
1436d522f475Smrg	    XtPointer data GCC_UNUSED)
1437d522f475Smrg{
1438d522f475Smrg    term->flags ^= WRAPAROUND;
1439d522f475Smrg    update_autowrap();
1440d522f475Smrg}
1441d522f475Smrg
1442d522f475Smrgstatic void
1443d522f475Smrgdo_reversewrap(Widget gw GCC_UNUSED,
1444d522f475Smrg	       XtPointer closure GCC_UNUSED,
1445d522f475Smrg	       XtPointer data GCC_UNUSED)
1446d522f475Smrg{
1447d522f475Smrg    term->flags ^= REVERSEWRAP;
1448d522f475Smrg    update_reversewrap();
1449d522f475Smrg}
1450d522f475Smrg
1451d522f475Smrgstatic void
1452d522f475Smrgdo_autolinefeed(Widget gw GCC_UNUSED,
1453d522f475Smrg		XtPointer closure GCC_UNUSED,
1454d522f475Smrg		XtPointer data GCC_UNUSED)
1455d522f475Smrg{
1456d522f475Smrg    term->flags ^= LINEFEED;
1457d522f475Smrg    update_autolinefeed();
1458d522f475Smrg}
1459d522f475Smrg
1460d522f475Smrgstatic void
1461d522f475Smrgdo_appcursor(Widget gw GCC_UNUSED,
1462d522f475Smrg	     XtPointer closure GCC_UNUSED,
1463d522f475Smrg	     XtPointer data GCC_UNUSED)
1464d522f475Smrg{
1465d522f475Smrg    term->keyboard.flags ^= MODE_DECCKM;
1466d522f475Smrg    update_appcursor();
1467d522f475Smrg}
1468d522f475Smrg
1469d522f475Smrgstatic void
1470d522f475Smrgdo_appkeypad(Widget gw GCC_UNUSED,
1471d522f475Smrg	     XtPointer closure GCC_UNUSED,
1472d522f475Smrg	     XtPointer data GCC_UNUSED)
1473d522f475Smrg{
1474d522f475Smrg    term->keyboard.flags ^= MODE_DECKPAM;
1475d522f475Smrg    update_appkeypad();
1476d522f475Smrg}
1477d522f475Smrg
1478d522f475Smrgstatic void
1479d522f475Smrgdo_scrollkey(Widget gw GCC_UNUSED,
1480d522f475Smrg	     XtPointer closure GCC_UNUSED,
1481d522f475Smrg	     XtPointer data GCC_UNUSED)
1482d522f475Smrg{
1483d522f475Smrg    TScreen *screen = TScreenOf(term);
1484d522f475Smrg
1485956cc18dSsnj    ToggleFlag(screen->scrollkey);
1486d522f475Smrg    update_scrollkey();
1487d522f475Smrg}
1488d522f475Smrg
1489d522f475Smrgstatic void
1490d522f475Smrgdo_scrollttyoutput(Widget gw GCC_UNUSED,
1491d522f475Smrg		   XtPointer closure GCC_UNUSED,
1492d522f475Smrg		   XtPointer data GCC_UNUSED)
1493d522f475Smrg{
1494d522f475Smrg    TScreen *screen = TScreenOf(term);
1495d522f475Smrg
1496956cc18dSsnj    ToggleFlag(screen->scrollttyoutput);
1497d522f475Smrg    update_scrollttyoutput();
1498d522f475Smrg}
1499d522f475Smrg
15002e4f8982Smrgstatic void
15012e4f8982Smrgdo_keepClipboard(Widget gw GCC_UNUSED,
15022e4f8982Smrg		 XtPointer closure GCC_UNUSED,
15032e4f8982Smrg		 XtPointer data GCC_UNUSED)
15042e4f8982Smrg{
15052e4f8982Smrg    TScreen *screen = TScreenOf(term);
15062e4f8982Smrg
15072e4f8982Smrg    ToggleFlag(screen->keepClipboard);
15082e4f8982Smrg    update_keepClipboard();
15092e4f8982Smrg}
15102e4f8982Smrg
1511d522f475Smrgstatic void
1512d522f475Smrgdo_keepSelection(Widget gw GCC_UNUSED,
1513d522f475Smrg		 XtPointer closure GCC_UNUSED,
1514d522f475Smrg		 XtPointer data GCC_UNUSED)
1515d522f475Smrg{
1516d522f475Smrg    TScreen *screen = TScreenOf(term);
1517d522f475Smrg
1518956cc18dSsnj    ToggleFlag(screen->keepSelection);
1519d522f475Smrg    update_keepSelection();
1520d522f475Smrg}
1521d522f475Smrg
1522d522f475Smrgstatic void
1523d522f475Smrgdo_selectClipboard(Widget gw GCC_UNUSED,
1524d522f475Smrg		   XtPointer closure GCC_UNUSED,
1525d522f475Smrg		   XtPointer data GCC_UNUSED)
1526d522f475Smrg{
1527d522f475Smrg    TScreen *screen = TScreenOf(term);
1528d522f475Smrg
1529956cc18dSsnj    ToggleFlag(screen->selectToClipboard);
1530d522f475Smrg    update_selectToClipboard();
1531d522f475Smrg}
1532d522f475Smrg
1533d522f475Smrgstatic void
1534d522f475Smrgdo_allow132(Widget gw GCC_UNUSED,
1535d522f475Smrg	    XtPointer closure GCC_UNUSED,
1536d522f475Smrg	    XtPointer data GCC_UNUSED)
1537d522f475Smrg{
1538d522f475Smrg    TScreen *screen = TScreenOf(term);
1539d522f475Smrg
1540956cc18dSsnj    ToggleFlag(screen->c132);
1541d522f475Smrg    update_allow132();
1542d522f475Smrg}
1543d522f475Smrg
1544d522f475Smrgstatic void
1545d522f475Smrgdo_cursesemul(Widget gw GCC_UNUSED,
1546d522f475Smrg	      XtPointer closure GCC_UNUSED,
1547d522f475Smrg	      XtPointer data GCC_UNUSED)
1548d522f475Smrg{
1549d522f475Smrg    TScreen *screen = TScreenOf(term);
1550d522f475Smrg
1551956cc18dSsnj    ToggleFlag(screen->curses);
1552d522f475Smrg    update_cursesemul();
1553d522f475Smrg}
1554d522f475Smrg
1555d522f475Smrgstatic void
1556d522f475Smrgdo_marginbell(Widget gw GCC_UNUSED,
1557d522f475Smrg	      XtPointer closure GCC_UNUSED,
1558d522f475Smrg	      XtPointer data GCC_UNUSED)
1559d522f475Smrg{
1560d522f475Smrg    TScreen *screen = TScreenOf(term);
1561d522f475Smrg
1562a1f3da82Smrg    if ((ToggleFlag(screen->marginbell)) == 0)
156320d2c4d2Smrg	screen->bellArmed = -1;
1564d522f475Smrg    update_marginbell();
1565d522f475Smrg}
1566d522f475Smrg
1567d522f475Smrg#if OPT_TEK4014
1568d522f475Smrgstatic void
1569d522f475Smrghandle_tekshow(Widget gw GCC_UNUSED, Bool allowswitch)
1570d522f475Smrg{
157120d2c4d2Smrg    XtermWidget xw = term;
157220d2c4d2Smrg    TScreen *screen = TScreenOf(xw);
1573d522f475Smrg
1574d522f475Smrg    TRACE(("Show tek-window\n"));
157520d2c4d2Smrg    if (!TEK4014_SHOWN(xw)) {	/* not showing, turn on */
1576d522f475Smrg	set_tek_visibility(True);
1577d522f475Smrg    } else if (screen->Vshow || allowswitch) {	/* is showing, turn off */
1578d522f475Smrg	set_tek_visibility(False);
1579d522f475Smrg	end_tek_mode();		/* WARNING: this does a longjmp */
1580d522f475Smrg    } else
158120d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
1582d522f475Smrg}
1583d522f475Smrg
1584d522f475Smrg/* ARGSUSED */
1585d522f475Smrgstatic void
1586d522f475Smrgdo_tekshow(Widget gw,
1587d522f475Smrg	   XtPointer closure GCC_UNUSED,
1588d522f475Smrg	   XtPointer data GCC_UNUSED)
1589d522f475Smrg{
1590d522f475Smrg    handle_tekshow(gw, True);
1591d522f475Smrg}
1592d522f475Smrg
1593d522f475Smrg/* ARGSUSED */
1594d522f475Smrgstatic void
1595d522f475Smrgdo_tekonoff(Widget gw,
1596d522f475Smrg	    XtPointer closure GCC_UNUSED,
1597d522f475Smrg	    XtPointer data GCC_UNUSED)
1598d522f475Smrg{
1599d522f475Smrg    handle_tekshow(gw, False);
1600d522f475Smrg}
1601d522f475Smrg#endif /* OPT_TEK4014 */
1602d522f475Smrg
1603d522f475Smrg#if OPT_BLINK_CURS
1604d522f475Smrg/* ARGSUSED */
1605d522f475Smrgstatic void
1606d522f475Smrgdo_cursorblink(Widget gw GCC_UNUSED,
1607d522f475Smrg	       XtPointer closure GCC_UNUSED,
1608d522f475Smrg	       XtPointer data GCC_UNUSED)
1609d522f475Smrg{
1610d522f475Smrg    TScreen *screen = TScreenOf(term);
1611d522f475Smrg    ToggleCursorBlink(screen);
1612d522f475Smrg}
1613d522f475Smrg#endif
1614d522f475Smrg
1615d522f475Smrg/* ARGSUSED */
1616d522f475Smrgstatic void
1617d522f475Smrgdo_altscreen(Widget gw GCC_UNUSED,
1618d522f475Smrg	     XtPointer closure GCC_UNUSED,
1619d522f475Smrg	     XtPointer data GCC_UNUSED)
1620d522f475Smrg{
1621d522f475Smrg    ToggleAlternate(term);
1622d522f475Smrg}
1623d522f475Smrg
1624d522f475Smrg/* ARGSUSED */
1625d522f475Smrgstatic void
1626d522f475Smrgdo_titeInhibit(Widget gw GCC_UNUSED,
1627d522f475Smrg	       XtPointer closure GCC_UNUSED,
1628d522f475Smrg	       XtPointer data GCC_UNUSED)
1629d522f475Smrg{
1630956cc18dSsnj    ToggleFlag(term->misc.titeInhibit);
1631d522f475Smrg    update_titeInhibit();
1632d522f475Smrg}
1633d522f475Smrg
1634d522f475Smrg#ifndef NO_ACTIVE_ICON
1635d522f475Smrg/* ARGSUSED */
1636d522f475Smrgstatic void
1637d522f475Smrgdo_activeicon(Widget gw GCC_UNUSED,
1638d522f475Smrg	      XtPointer closure GCC_UNUSED,
1639d522f475Smrg	      XtPointer data GCC_UNUSED)
1640d522f475Smrg{
1641d522f475Smrg    TScreen *screen = TScreenOf(term);
1642d522f475Smrg
1643d522f475Smrg    if (screen->iconVwin.window) {
1644d522f475Smrg	Widget shell = XtParent(term);
16450bd37d32Smrg	ToggleFlag(term->work.active_icon);
1646d522f475Smrg	XtVaSetValues(shell, XtNiconWindow,
16470bd37d32Smrg		      term->work.active_icon ? screen->iconVwin.window : None,
1648d522f475Smrg		      (XtPointer) 0);
1649d522f475Smrg	update_activeicon();
1650d522f475Smrg    }
1651d522f475Smrg}
1652d522f475Smrg#endif /* NO_ACTIVE_ICON */
1653d522f475Smrg
1654d522f475Smrgstatic void
1655d522f475Smrgdo_softreset(Widget gw GCC_UNUSED,
1656d522f475Smrg	     XtPointer closure GCC_UNUSED,
1657d522f475Smrg	     XtPointer data GCC_UNUSED)
1658d522f475Smrg{
1659d522f475Smrg    VTReset(term, False, False);
1660d522f475Smrg}
1661d522f475Smrg
1662d522f475Smrgstatic void
1663d522f475Smrgdo_hardreset(Widget gw GCC_UNUSED,
1664d522f475Smrg	     XtPointer closure GCC_UNUSED,
1665d522f475Smrg	     XtPointer data GCC_UNUSED)
1666d522f475Smrg{
1667d522f475Smrg    VTReset(term, True, False);
1668d522f475Smrg}
1669d522f475Smrg
1670d522f475Smrgstatic void
1671d522f475Smrgdo_clearsavedlines(Widget gw GCC_UNUSED,
1672d522f475Smrg		   XtPointer closure GCC_UNUSED,
1673d522f475Smrg		   XtPointer data GCC_UNUSED)
1674d522f475Smrg{
1675d522f475Smrg    VTReset(term, True, True);
1676d522f475Smrg}
1677d522f475Smrg
1678d522f475Smrg#if OPT_TEK4014
1679d522f475Smrgstatic void
1680d522f475Smrgdo_tekmode(Widget gw GCC_UNUSED,
1681d522f475Smrg	   XtPointer closure GCC_UNUSED,
1682d522f475Smrg	   XtPointer data GCC_UNUSED)
1683d522f475Smrg{
1684d522f475Smrg    switch_modes(TEK4014_ACTIVE(term));		/* switch to tek mode */
1685d522f475Smrg}
1686d522f475Smrg
1687d522f475Smrg/* ARGSUSED */
1688d522f475Smrgstatic void
1689d522f475Smrgdo_vthide(Widget gw GCC_UNUSED,
1690d522f475Smrg	  XtPointer closure GCC_UNUSED,
1691d522f475Smrg	  XtPointer data GCC_UNUSED)
1692d522f475Smrg{
1693d522f475Smrg    hide_vt_window();
1694d522f475Smrg}
1695d522f475Smrg#endif /* OPT_TEK4014 */
1696d522f475Smrg
1697d522f475Smrg/*
1698d522f475Smrg * vtfont menu
1699d522f475Smrg */
1700d522f475Smrg
1701d522f475Smrgstatic void
1702d522f475Smrgdo_vtfont(Widget gw GCC_UNUSED,
1703d522f475Smrg	  XtPointer closure,
1704d522f475Smrg	  XtPointer data GCC_UNUSED)
1705d522f475Smrg{
170620d2c4d2Smrg    XtermWidget xw = term;
1707d522f475Smrg    char *entryname = (char *) closure;
1708d522f475Smrg    int i;
1709d522f475Smrg
17100bd37d32Smrg    TRACE(("do_vtfont(%s)\n", entryname));
1711d522f475Smrg    for (i = 0; i < NMENUFONTS; i++) {
1712d522f475Smrg	if (strcmp(entryname, fontMenuEntries[i].name) == 0) {
171320d2c4d2Smrg	    SetVTFont(xw, i, True, NULL);
1714d522f475Smrg	    return;
1715d522f475Smrg	}
1716d522f475Smrg    }
171720d2c4d2Smrg    Bell(xw, XkbBI_MinorError, 0);
1718d522f475Smrg}
1719d522f475Smrg
1720d522f475Smrg#if OPT_DEC_CHRSET
1721d522f475Smrgstatic void
1722d522f475Smrgdo_font_doublesize(Widget gw GCC_UNUSED,
1723d522f475Smrg		   XtPointer closure GCC_UNUSED,
1724d522f475Smrg		   XtPointer data GCC_UNUSED)
1725d522f475Smrg{
172620d2c4d2Smrg    XtermWidget xw = term;
172720d2c4d2Smrg
172820d2c4d2Smrg    if (TScreenOf(xw)->cache_doublesize != 0)
172920d2c4d2Smrg	ToggleFlag(TScreenOf(xw)->font_doublesize);
1730d522f475Smrg    update_font_doublesize();
1731d522f475Smrg    Redraw();
1732d522f475Smrg}
1733d522f475Smrg#endif
1734d522f475Smrg
1735d522f475Smrg#if OPT_BOX_CHARS
1736d522f475Smrgstatic void
1737d522f475Smrgdo_font_boxchars(Widget gw GCC_UNUSED,
1738d522f475Smrg		 XtPointer closure GCC_UNUSED,
1739d522f475Smrg		 XtPointer data GCC_UNUSED)
1740d522f475Smrg{
174120d2c4d2Smrg    ToggleFlag(TScreenOf(term)->force_box_chars);
1742d522f475Smrg    update_font_boxchars();
1743d522f475Smrg    Redraw();
1744d522f475Smrg}
174520d2c4d2Smrg
174620d2c4d2Smrgstatic void
174720d2c4d2Smrgdo_font_packed(Widget gw GCC_UNUSED,
174820d2c4d2Smrg	       XtPointer closure GCC_UNUSED,
174920d2c4d2Smrg	       XtPointer data GCC_UNUSED)
175020d2c4d2Smrg{
175120d2c4d2Smrg    ToggleFlag(TScreenOf(term)->force_packed);
175220d2c4d2Smrg    update_font_packed();
175320d2c4d2Smrg    SetVTFont(term, TScreenOf(term)->menu_font_number, True, NULL);
175420d2c4d2Smrg}
1755d522f475Smrg#endif
1756d522f475Smrg
1757d522f475Smrg#if OPT_DEC_SOFTFONT
1758d522f475Smrgstatic void
1759d522f475Smrgdo_font_loadable(Widget gw GCC_UNUSED,
1760d522f475Smrg		 XtPointer closure GCC_UNUSED,
1761d522f475Smrg		 XtPointer data GCC_UNUSED)
1762d522f475Smrg{
1763956cc18dSsnj    ToggleFlag(term->misc.font_loadable);
1764d522f475Smrg    update_font_loadable();
1765d522f475Smrg}
1766d522f475Smrg#endif
1767d522f475Smrg
1768d522f475Smrg#if OPT_RENDERFONT
1769d522f475Smrgstatic void
1770d522f475Smrgdo_font_renderfont(Widget gw GCC_UNUSED,
1771d522f475Smrg		   XtPointer closure GCC_UNUSED,
1772d522f475Smrg		   XtPointer data GCC_UNUSED)
1773d522f475Smrg{
177420d2c4d2Smrg    XtermWidget xw = (XtermWidget) term;
177520d2c4d2Smrg    TScreen *screen = TScreenOf(xw);
1776d522f475Smrg    int fontnum = screen->menu_font_number;
177720d2c4d2Smrg    String name = TScreenOf(xw)->MenuFontName(fontnum);
1778d522f475Smrg
177920d2c4d2Smrg    DefaultRenderFont(xw);
17800bd37d32Smrg    ToggleFlag(xw->work.render_font);
1781d522f475Smrg    update_font_renderfont();
178220d2c4d2Smrg    xtermLoadFont(xw, xtermFontName(name), True, fontnum);
1783d522f475Smrg    ScrnRefresh(term, 0, 0,
1784d522f475Smrg		MaxRows(screen),
1785d522f475Smrg		MaxCols(screen), True);
1786d522f475Smrg}
1787d522f475Smrg#endif
1788d522f475Smrg
1789d522f475Smrg#if OPT_WIDE_CHARS
1790e39b573cSmrgstatic void
1791e39b573cSmrgsetup_wide_fonts(XtermWidget xw)
1792e39b573cSmrg{
1793e39b573cSmrg    TScreen *screen = TScreenOf(xw);
1794e39b573cSmrg
1795e39b573cSmrg    if (screen->wide_chars) {
1796e39b573cSmrg	if (xtermLoadWideFonts(xw, True)) {
1797e39b573cSmrg	    SetVTFont(xw, screen->menu_font_number, True, NULL);
1798e39b573cSmrg	}
1799e39b573cSmrg    } else {
1800e39b573cSmrg	ChangeToWide(xw);
1801e39b573cSmrg    }
1802e39b573cSmrg}
1803e39b573cSmrg
1804e39b573cSmrgstatic void
1805e39b573cSmrgsetup_narrow_fonts(XtermWidget xw)
1806e39b573cSmrg{
1807e39b573cSmrg    TScreen *screen = TScreenOf(xw);
1808e39b573cSmrg
1809e39b573cSmrg    if (xtermLoadDefaultFonts(xw)) {
1810e39b573cSmrg	SetVTFont(xw, screen->menu_font_number, True, NULL);
1811e39b573cSmrg    }
1812e39b573cSmrg}
1813e39b573cSmrg
1814d522f475Smrgstatic void
1815d522f475Smrgdo_font_utf8_mode(Widget gw GCC_UNUSED,
1816d522f475Smrg		  XtPointer closure GCC_UNUSED,
1817d522f475Smrg		  XtPointer data GCC_UNUSED)
1818d522f475Smrg{
1819e39b573cSmrg    XtermWidget xw = term;
1820e39b573cSmrg    TScreen *screen = TScreenOf(xw);
1821d522f475Smrg
1822d522f475Smrg    /*
1823d522f475Smrg     * If xterm was started with -wc option, it might not have the wide fonts.
1824d522f475Smrg     * If xterm was not started with -wc, it might not have wide cells.
1825d522f475Smrg     */
1826d522f475Smrg    if (!screen->utf8_mode) {
1827e39b573cSmrg	setup_wide_fonts(xw);
1828d522f475Smrg    }
1829d522f475Smrg    switchPtyData(screen, !screen->utf8_mode);
1830d522f475Smrg    /*
1831d522f475Smrg     * We don't repaint the screen when switching UTF-8 on/off.  When switching
1832d522f475Smrg     * on - the Latin-1 codes should paint as-is.  When switching off, that's
1833d522f475Smrg     * hard to do properly.
1834d522f475Smrg     */
1835d522f475Smrg}
1836d522f475Smrg
1837e39b573cSmrgstatic void
1838e39b573cSmrgdo_font_utf8_fonts(Widget gw GCC_UNUSED,
1839e39b573cSmrg		   XtPointer closure GCC_UNUSED,
1840e39b573cSmrg		   XtPointer data GCC_UNUSED)
1841e39b573cSmrg{
1842e39b573cSmrg    XtermWidget xw = term;
1843e39b573cSmrg    TScreen *screen = TScreenOf(xw);
1844e39b573cSmrg
1845e39b573cSmrg    ToggleFlag(screen->utf8_fonts);
1846e39b573cSmrg    update_font_utf8_fonts();
1847e39b573cSmrg
1848e39b573cSmrg    if (screen->utf8_fonts) {
1849e39b573cSmrg	setup_wide_fonts(xw);
1850e39b573cSmrg    } else {
1851e39b573cSmrg	setup_narrow_fonts(xw);
1852e39b573cSmrg    }
1853e39b573cSmrg}
1854e39b573cSmrg
1855d522f475Smrgstatic void
1856d522f475Smrgdo_font_utf8_title(Widget gw GCC_UNUSED,
1857d522f475Smrg		   XtPointer closure GCC_UNUSED,
1858d522f475Smrg		   XtPointer data GCC_UNUSED)
1859d522f475Smrg{
1860d522f475Smrg    TScreen *screen = TScreenOf(term);
1861d522f475Smrg
1862956cc18dSsnj    ToggleFlag(screen->utf8_title);
1863d522f475Smrg    update_font_utf8_title();
1864d522f475Smrg}
1865d522f475Smrg#endif
1866d522f475Smrg
1867d522f475Smrg/*
1868d522f475Smrg * tek menu
1869d522f475Smrg */
1870d522f475Smrg
1871d522f475Smrg#if OPT_TEK4014
1872d522f475Smrgstatic void
1873956cc18dSsnjdo_tektextlarge(Widget gw,
1874d522f475Smrg		XtPointer closure GCC_UNUSED,
1875d522f475Smrg		XtPointer data GCC_UNUSED)
1876d522f475Smrg{
1877956cc18dSsnj    TekSetFontSize(getTekWidget(gw), True, tekMenu_tektextlarge);
1878d522f475Smrg}
1879d522f475Smrg
1880d522f475Smrgstatic void
1881956cc18dSsnjdo_tektext2(Widget gw,
1882d522f475Smrg	    XtPointer closure GCC_UNUSED,
1883d522f475Smrg	    XtPointer data GCC_UNUSED)
1884d522f475Smrg{
1885956cc18dSsnj    TekSetFontSize(getTekWidget(gw), True, tekMenu_tektext2);
1886d522f475Smrg}
1887d522f475Smrg
1888d522f475Smrgstatic void
1889956cc18dSsnjdo_tektext3(Widget gw,
1890d522f475Smrg	    XtPointer closure GCC_UNUSED,
1891d522f475Smrg	    XtPointer data GCC_UNUSED)
1892d522f475Smrg{
1893956cc18dSsnj    TekSetFontSize(getTekWidget(gw), True, tekMenu_tektext3);
1894d522f475Smrg}
1895d522f475Smrg
1896d522f475Smrgstatic void
1897956cc18dSsnjdo_tektextsmall(Widget gw,
1898d522f475Smrg		XtPointer closure GCC_UNUSED,
1899d522f475Smrg		XtPointer data GCC_UNUSED)
1900d522f475Smrg{
1901956cc18dSsnj    TekSetFontSize(getTekWidget(gw), True, tekMenu_tektextsmall);
1902d522f475Smrg}
1903d522f475Smrg
1904d522f475Smrgstatic void
1905956cc18dSsnjdo_tekpage(Widget gw,
1906d522f475Smrg	   XtPointer closure GCC_UNUSED,
1907d522f475Smrg	   XtPointer data GCC_UNUSED)
1908d522f475Smrg{
1909956cc18dSsnj    TekSimulatePageButton(getTekWidget(gw), False);
1910d522f475Smrg}
1911d522f475Smrg
1912d522f475Smrgstatic void
1913956cc18dSsnjdo_tekreset(Widget gw,
1914d522f475Smrg	    XtPointer closure GCC_UNUSED,
1915d522f475Smrg	    XtPointer data GCC_UNUSED)
1916d522f475Smrg{
1917956cc18dSsnj    TekSimulatePageButton(getTekWidget(gw), True);
1918d522f475Smrg}
1919d522f475Smrg
1920d522f475Smrgstatic void
1921956cc18dSsnjdo_tekcopy(Widget gw,
1922d522f475Smrg	   XtPointer closure GCC_UNUSED,
1923d522f475Smrg	   XtPointer data GCC_UNUSED)
1924d522f475Smrg{
1925956cc18dSsnj    TekCopy(getTekWidget(gw));
1926d522f475Smrg}
1927d522f475Smrg
1928d522f475Smrgstatic void
1929d522f475Smrghandle_vtshow(Widget gw GCC_UNUSED, Bool allowswitch)
1930d522f475Smrg{
193120d2c4d2Smrg    XtermWidget xw = term;
193220d2c4d2Smrg    TScreen *screen = TScreenOf(xw);
1933d522f475Smrg
1934d522f475Smrg    TRACE(("Show vt-window\n"));
1935d522f475Smrg    if (!screen->Vshow) {	/* not showing, turn on */
1936d522f475Smrg	set_vt_visibility(True);
193720d2c4d2Smrg    } else if (TEK4014_SHOWN(xw) || allowswitch) {	/* is showing, turn off */
1938d522f475Smrg	set_vt_visibility(False);
193920d2c4d2Smrg	if (!TEK4014_ACTIVE(xw) && tekRefreshList)
1940d522f475Smrg	    TekRefresh(tekWidget);
1941d522f475Smrg	end_vt_mode();		/* WARNING: this does a longjmp... */
1942d522f475Smrg    } else
194320d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
1944d522f475Smrg}
1945d522f475Smrg
1946d522f475Smrgstatic void
1947d522f475Smrgdo_vtshow(Widget gw,
1948d522f475Smrg	  XtPointer closure GCC_UNUSED,
1949d522f475Smrg	  XtPointer data GCC_UNUSED)
1950d522f475Smrg{
1951d522f475Smrg    handle_vtshow(gw, True);
1952d522f475Smrg}
1953d522f475Smrg
1954d522f475Smrgstatic void
1955d522f475Smrgdo_vtonoff(Widget gw,
1956d522f475Smrg	   XtPointer closure GCC_UNUSED,
1957d522f475Smrg	   XtPointer data GCC_UNUSED)
1958d522f475Smrg{
1959d522f475Smrg    handle_vtshow(gw, False);
1960d522f475Smrg}
1961d522f475Smrg
1962d522f475Smrgstatic void
1963d522f475Smrgdo_vtmode(Widget gw GCC_UNUSED,
1964d522f475Smrg	  XtPointer closure GCC_UNUSED,
1965d522f475Smrg	  XtPointer data GCC_UNUSED)
1966d522f475Smrg{
1967d522f475Smrg    switch_modes(TEK4014_ACTIVE(term));		/* switch to vt, or from */
1968d522f475Smrg}
1969d522f475Smrg
1970d522f475Smrg/* ARGSUSED */
1971d522f475Smrgstatic void
1972d522f475Smrgdo_tekhide(Widget gw GCC_UNUSED,
1973d522f475Smrg	   XtPointer closure GCC_UNUSED,
1974d522f475Smrg	   XtPointer data GCC_UNUSED)
1975d522f475Smrg{
1976d522f475Smrg    hide_tek_window();
1977d522f475Smrg}
1978d522f475Smrg#endif /* OPT_TEK4014 */
1979d522f475Smrg
1980d522f475Smrg/*
1981d522f475Smrg * public handler routines
1982d522f475Smrg */
19830bd37d32Smrgint
1984894e0ac8SmrgdecodeToggle(XtermWidget xw, String *params, Cardinal nparams)
1985d522f475Smrg{
19860bd37d32Smrg    int dir = toggleErr;
1987d522f475Smrg
1988d522f475Smrg    switch (nparams) {
1989d522f475Smrg    case 0:
19900bd37d32Smrg	dir = toggleAll;
1991d522f475Smrg	break;
1992d522f475Smrg    case 1:
1993d522f475Smrg	if (XmuCompareISOLatin1(params[0], "on") == 0)
19940bd37d32Smrg	    dir = toggleOn;
1995d522f475Smrg	else if (XmuCompareISOLatin1(params[0], "off") == 0)
19960bd37d32Smrg	    dir = toggleOff;
1997d522f475Smrg	else if (XmuCompareISOLatin1(params[0], "toggle") == 0)
19980bd37d32Smrg	    dir = toggleAll;
1999d522f475Smrg	break;
2000d522f475Smrg    }
2001d522f475Smrg
20020bd37d32Smrg    if (dir == toggleErr) {
200320d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
20040bd37d32Smrg    }
20050bd37d32Smrg
20060bd37d32Smrg    return dir;
20070bd37d32Smrg}
2008d522f475Smrg
20090bd37d32Smrgstatic void
20100bd37d32Smrghandle_toggle(void (*proc) PROTO_XT_CALLBACK_ARGS,
20110bd37d32Smrg	      int var,
2012894e0ac8Smrg	      String *params,
20130bd37d32Smrg	      Cardinal nparams,
20140bd37d32Smrg	      Widget w,
20150bd37d32Smrg	      XtPointer closure,
20160bd37d32Smrg	      XtPointer data)
20170bd37d32Smrg{
20180bd37d32Smrg    XtermWidget xw = term;
20190bd37d32Smrg
20200bd37d32Smrg    switch (decodeToggle(xw, params, nparams)) {
20210bd37d32Smrg
20220bd37d32Smrg    case toggleAll:
2023d522f475Smrg	(*proc) (w, closure, data);
2024d522f475Smrg	break;
2025d522f475Smrg
20260bd37d32Smrg    case toggleOff:
2027d522f475Smrg	if (var)
2028d522f475Smrg	    (*proc) (w, closure, data);
2029d522f475Smrg	else
203020d2c4d2Smrg	    Bell(xw, XkbBI_MinorError, 0);
2031d522f475Smrg	break;
2032d522f475Smrg
20330bd37d32Smrg    case toggleOn:
2034d522f475Smrg	if (!var)
2035d522f475Smrg	    (*proc) (w, closure, data);
2036d522f475Smrg	else
203720d2c4d2Smrg	    Bell(xw, XkbBI_MinorError, 0);
2038d522f475Smrg	break;
2039d522f475Smrg    }
2040d522f475Smrg    return;
2041d522f475Smrg}
2042d522f475Smrg
2043d522f475Smrg#define handle_vt_toggle(proc, var, params, nparams, w) \
2044d522f475Smrg	handle_toggle(proc, (int) (var), params, nparams, w, (XtPointer)0, (XtPointer)0)
2045d522f475Smrg
204620d2c4d2Smrg#define HANDLE_VT_TOGGLE(name) \
204720d2c4d2Smrg	handle_vt_toggle(do_##name, TScreenOf(term)->name, params, *param_count, w)
204820d2c4d2Smrg
2049d522f475Smrg#define handle_tek_toggle(proc, var, params, nparams, w) \
2050d522f475Smrg	handle_toggle(proc, (int) (var), params, nparams, w, (XtPointer)0, (XtPointer)0)
2051d522f475Smrg
2052d522f475Smrgvoid
2053d522f475SmrgHandleAllowSends(Widget w,
2054894e0ac8Smrg		 XEvent *event GCC_UNUSED,
2055894e0ac8Smrg		 String *params,
2056d522f475Smrg		 Cardinal *param_count)
2057d522f475Smrg{
205820d2c4d2Smrg    handle_vt_toggle(do_allowsends, TScreenOf(term)->allowSendEvents,
2059d522f475Smrg		     params, *param_count, w);
2060d522f475Smrg}
2061d522f475Smrg
2062d522f475Smrgvoid
2063d522f475SmrgHandleSetVisualBell(Widget w,
2064894e0ac8Smrg		    XEvent *event GCC_UNUSED,
2065894e0ac8Smrg		    String *params,
2066d522f475Smrg		    Cardinal *param_count)
2067d522f475Smrg{
206820d2c4d2Smrg    HANDLE_VT_TOGGLE(visualbell);
2069d522f475Smrg}
2070d522f475Smrg
2071d522f475Smrgvoid
2072d522f475SmrgHandleSetPopOnBell(Widget w,
2073894e0ac8Smrg		   XEvent *event GCC_UNUSED,
2074894e0ac8Smrg		   String *params,
2075d522f475Smrg		   Cardinal *param_count)
2076d522f475Smrg{
207720d2c4d2Smrg    HANDLE_VT_TOGGLE(poponbell);
2078d522f475Smrg}
2079d522f475Smrg
2080d522f475Smrg#ifdef ALLOWLOGGING
2081d522f475Smrgvoid
2082d522f475SmrgHandleLogging(Widget w,
2083894e0ac8Smrg	      XEvent *event GCC_UNUSED,
2084894e0ac8Smrg	      String *params,
2085d522f475Smrg	      Cardinal *param_count)
2086d522f475Smrg{
208720d2c4d2Smrg    HANDLE_VT_TOGGLE(logging);
2088d522f475Smrg}
2089d522f475Smrg#endif
2090d522f475Smrg
2091e39b573cSmrg#if OPT_PRINT_ON_EXIT
2092e39b573cSmrgvoid
2093e39b573cSmrgHandleWriteNow(Widget w,
2094894e0ac8Smrg	       XEvent *event GCC_UNUSED,
2095894e0ac8Smrg	       String *params GCC_UNUSED,
2096e39b573cSmrg	       Cardinal *param_count GCC_UNUSED)
2097e39b573cSmrg{
2098e39b573cSmrg    do_write_now(w, 0, 0);
2099e39b573cSmrg}
2100e39b573cSmrg
2101e39b573cSmrgvoid
2102e39b573cSmrgHandleWriteError(Widget w,
2103894e0ac8Smrg		 XEvent *event GCC_UNUSED,
2104894e0ac8Smrg		 String *params,
2105e39b573cSmrg		 Cardinal *param_count)
2106e39b573cSmrg{
2107e39b573cSmrg    HANDLE_VT_TOGGLE(write_error);
2108e39b573cSmrg}
2109e39b573cSmrg#endif
2110e39b573cSmrg
2111d522f475Smrg/* ARGSUSED */
2112d522f475Smrgvoid
211320d2c4d2SmrgHandlePrintScreen(Widget w GCC_UNUSED,
2114894e0ac8Smrg		  XEvent *event GCC_UNUSED,
2115894e0ac8Smrg		  String *params GCC_UNUSED,
2116d522f475Smrg		  Cardinal *param_count GCC_UNUSED)
2117d522f475Smrg{
211820d2c4d2Smrg    xtermPrintScreen(term, True, getPrinterFlags(term, params, param_count));
2119d522f475Smrg}
2120d522f475Smrg
2121956cc18dSsnj/* ARGSUSED */
2122956cc18dSsnjvoid
212320d2c4d2SmrgHandlePrintEverything(Widget w GCC_UNUSED,
2124894e0ac8Smrg		      XEvent *event GCC_UNUSED,
2125894e0ac8Smrg		      String *params,
212620d2c4d2Smrg		      Cardinal *param_count)
2127956cc18dSsnj{
212820d2c4d2Smrg    xtermPrintEverything(term, getPrinterFlags(term, params, param_count));
2129956cc18dSsnj}
2130956cc18dSsnj
2131d522f475Smrg/* ARGSUSED */
2132d522f475Smrgvoid
2133d522f475SmrgHandlePrintControlMode(Widget w,
2134894e0ac8Smrg		       XEvent *event GCC_UNUSED,
2135894e0ac8Smrg		       String *params GCC_UNUSED,
2136d522f475Smrg		       Cardinal *param_count GCC_UNUSED)
2137d522f475Smrg{
2138d522f475Smrg    do_print_redir(w, (XtPointer) 0, (XtPointer) 0);
2139d522f475Smrg}
2140d522f475Smrg
2141d522f475Smrg/* ARGSUSED */
2142d522f475Smrgvoid
2143d522f475SmrgHandleRedraw(Widget w,
2144894e0ac8Smrg	     XEvent *event GCC_UNUSED,
2145894e0ac8Smrg	     String *params GCC_UNUSED,
2146d522f475Smrg	     Cardinal *param_count GCC_UNUSED)
2147d522f475Smrg{
2148d522f475Smrg    do_redraw(w, (XtPointer) 0, (XtPointer) 0);
2149d522f475Smrg}
2150d522f475Smrg
2151d522f475Smrg/* ARGSUSED */
2152d522f475Smrgvoid
2153d522f475SmrgHandleSendSignal(Widget w,
2154894e0ac8Smrg		 XEvent *event GCC_UNUSED,
2155894e0ac8Smrg		 String *params,
2156d522f475Smrg		 Cardinal *param_count)
2157d522f475Smrg{
2158d522f475Smrg    /* *INDENT-OFF* */
215901037d57Smrg    static const struct sigtab {
216020d2c4d2Smrg	const char *name;
2161d522f475Smrg	int sig;
2162d522f475Smrg    } signals[] = {
2163d522f475Smrg#ifdef SIGTSTP
2164d522f475Smrg	{ "suspend",	SIGTSTP },
2165d522f475Smrg	{ "tstp",	SIGTSTP },
2166d522f475Smrg#endif
2167d522f475Smrg#ifdef SIGCONT
2168d522f475Smrg	{ "cont",	SIGCONT },
2169d522f475Smrg#endif
2170d522f475Smrg	{ "int",	SIGINT },
2171d522f475Smrg	{ "hup",	SIGHUP },
2172d522f475Smrg	{ "quit",	SIGQUIT },
2173d522f475Smrg	{ "alrm",	SIGALRM },
2174d522f475Smrg	{ "alarm",	SIGALRM },
2175d522f475Smrg	{ "term",	SIGTERM },
2176d522f475Smrg	{ "kill",	SIGKILL },
2177d522f475Smrg	{ NULL, 0 },
2178d522f475Smrg    };
2179d522f475Smrg    /* *INDENT-ON* */
2180d522f475Smrg
2181d522f475Smrg    if (*param_count == 1) {
218201037d57Smrg	const struct sigtab *st;
2183d522f475Smrg
2184d522f475Smrg	for (st = signals; st->name; st++) {
2185d522f475Smrg	    if (XmuCompareISOLatin1(st->name, params[0]) == 0) {
2186d522f475Smrg		handle_send_signal(w, st->sig);
2187d522f475Smrg		return;
2188d522f475Smrg	    }
2189d522f475Smrg	}
2190d522f475Smrg	/* one could allow numeric values, but that would be a security hole */
2191d522f475Smrg    }
2192d522f475Smrg
219320d2c4d2Smrg    Bell(term, XkbBI_MinorError, 0);
2194d522f475Smrg}
2195d522f475Smrg
2196d522f475Smrg/* ARGSUSED */
2197d522f475Smrgvoid
2198d522f475SmrgHandleQuit(Widget w,
2199894e0ac8Smrg	   XEvent *event GCC_UNUSED,
2200894e0ac8Smrg	   String *params GCC_UNUSED,
2201d522f475Smrg	   Cardinal *param_count GCC_UNUSED)
2202d522f475Smrg{
2203d522f475Smrg    do_quit(w, (XtPointer) 0, (XtPointer) 0);
2204d522f475Smrg}
2205d522f475Smrg
2206d522f475Smrgvoid
2207d522f475SmrgHandle8BitControl(Widget w,
2208894e0ac8Smrg		  XEvent *event GCC_UNUSED,
2209894e0ac8Smrg		  String *params,
2210d522f475Smrg		  Cardinal *param_count)
2211d522f475Smrg{
221220d2c4d2Smrg    handle_vt_toggle(do_8bit_control, TScreenOf(term)->control_eight_bits,
2213d522f475Smrg		     params, *param_count, w);
2214d522f475Smrg}
2215d522f475Smrg
2216d522f475Smrgvoid
2217d522f475SmrgHandleBackarrow(Widget w,
2218894e0ac8Smrg		XEvent *event GCC_UNUSED,
2219894e0ac8Smrg		String *params,
2220d522f475Smrg		Cardinal *param_count)
2221d522f475Smrg{
2222d522f475Smrg    handle_vt_toggle(do_backarrow, term->keyboard.flags & MODE_DECBKM,
2223d522f475Smrg		     params, *param_count, w);
2224d522f475Smrg}
2225d522f475Smrg
22260bd37d32Smrg#if OPT_MAXIMIZE
22270bd37d32Smrg#if OPT_TEK4014
22280bd37d32Smrg#define WhichEWMH (TEK4014_ACTIVE(xw) != 0)
22290bd37d32Smrg#else
22300bd37d32Smrg#define WhichEWMH 0
22310bd37d32Smrg#endif
22320bd37d32Smrgstatic void
22330bd37d32Smrgdo_fullscreen(Widget gw GCC_UNUSED,
22340bd37d32Smrg	      XtPointer closure GCC_UNUSED,
22350bd37d32Smrg	      XtPointer data GCC_UNUSED)
22360bd37d32Smrg{
22370bd37d32Smrg    XtermWidget xw = term;
22380bd37d32Smrg
22390bd37d32Smrg    if (resource.fullscreen != esNever)
22400bd37d32Smrg	FullScreen(xw, !xw->work.ewmh[WhichEWMH].mode);
22410bd37d32Smrg}
22420bd37d32Smrg
22430bd37d32Smrg/* ARGSUSED */
22440bd37d32Smrgvoid
22450bd37d32SmrgHandleFullscreen(Widget w,
2246894e0ac8Smrg		 XEvent *event GCC_UNUSED,
2247894e0ac8Smrg		 String *params GCC_UNUSED,
22480bd37d32Smrg		 Cardinal *param_count GCC_UNUSED)
22490bd37d32Smrg{
22500bd37d32Smrg    XtermWidget xw = term;
22510bd37d32Smrg
22520bd37d32Smrg    if (resource.fullscreen != esNever) {
22530bd37d32Smrg	handle_vt_toggle(do_fullscreen, xw->work.ewmh[WhichEWMH].mode,
22540bd37d32Smrg			 params, *param_count, w);
22550bd37d32Smrg    }
22560bd37d32Smrg}
22570bd37d32Smrg
22580bd37d32Smrgvoid
22590bd37d32Smrgupdate_fullscreen(void)
22600bd37d32Smrg{
22610bd37d32Smrg    XtermWidget xw = term;
22620bd37d32Smrg
22630bd37d32Smrg    if (resource.fullscreen <= 1) {
22640bd37d32Smrg	UpdateCheckbox("update_fullscreen",
22650bd37d32Smrg		       mainMenuEntries,
22660bd37d32Smrg		       mainMenu_fullscreen,
22670bd37d32Smrg		       xw->work.ewmh[WhichEWMH].mode);
22680bd37d32Smrg    } else {
22690bd37d32Smrg	SetItemSensitivity(mainMenuEntries[mainMenu_fullscreen].widget,
22700bd37d32Smrg			   False);
22710bd37d32Smrg    }
22720bd37d32Smrg}
22730bd37d32Smrg
22740bd37d32Smrg#endif /* OPT_MAXIMIZE */
22750bd37d32Smrg
2276e0a2b6dfSmrg#if OPT_SIXEL_GRAPHICS
2277e0a2b6dfSmrgstatic void
2278e0a2b6dfSmrgdo_sixelscrolling(Widget gw GCC_UNUSED,
2279e0a2b6dfSmrg		  XtPointer closure GCC_UNUSED,
2280e0a2b6dfSmrg		  XtPointer data GCC_UNUSED)
2281e0a2b6dfSmrg{
2282e0a2b6dfSmrg    term->keyboard.flags ^= MODE_DECSDM;
2283e0a2b6dfSmrg    update_decsdm();
2284e0a2b6dfSmrg}
2285e0a2b6dfSmrg
2286894e0ac8Smrgvoid
2287894e0ac8Smrgupdate_decsdm(void)
2288894e0ac8Smrg{
2289894e0ac8Smrg    UpdateCheckbox("update_decsdm",
2290894e0ac8Smrg		   vtMenuEntries,
2291894e0ac8Smrg		   vtMenu_sixelscrolling,
2292894e0ac8Smrg		   (term->keyboard.flags & MODE_DECSDM) != 0);
2293894e0ac8Smrg}
2294894e0ac8Smrg
2295894e0ac8Smrgvoid
2296894e0ac8SmrgHandleSixelScrolling(Widget w,
2297894e0ac8Smrg		     XEvent *event GCC_UNUSED,
2298894e0ac8Smrg		     String *params,
2299894e0ac8Smrg		     Cardinal *param_count)
2300894e0ac8Smrg{
2301894e0ac8Smrg    handle_vt_toggle(do_sixelscrolling, term->keyboard.flags & MODE_DECSDM,
2302894e0ac8Smrg		     params, *param_count, w);
2303894e0ac8Smrg}
2304894e0ac8Smrg#endif
2305894e0ac8Smrg
2306894e0ac8Smrg#if OPT_GRAPHICS
2307e0a2b6dfSmrgstatic void
2308e0a2b6dfSmrgdo_privatecolorregisters(Widget gw GCC_UNUSED,
2309e0a2b6dfSmrg			 XtPointer closure GCC_UNUSED,
2310e0a2b6dfSmrg			 XtPointer data GCC_UNUSED)
2311e0a2b6dfSmrg{
2312e0a2b6dfSmrg    TScreen *screen = TScreenOf(term);
2313e0a2b6dfSmrg
2314e0a2b6dfSmrg    ToggleFlag(screen->privatecolorregisters);
2315e0a2b6dfSmrg    update_privatecolorregisters();
2316e0a2b6dfSmrg}
2317e0a2b6dfSmrg
2318e0a2b6dfSmrgvoid
2319e0a2b6dfSmrgupdate_privatecolorregisters(void)
2320e0a2b6dfSmrg{
2321e0a2b6dfSmrg    UpdateCheckbox("update_privatecolorregisters",
2322e0a2b6dfSmrg		   vtMenuEntries,
2323e0a2b6dfSmrg		   vtMenu_privatecolorregisters,
2324e0a2b6dfSmrg		   TScreenOf(term)->privatecolorregisters);
2325e0a2b6dfSmrg}
2326e0a2b6dfSmrg
2327e0a2b6dfSmrgvoid
2328e0a2b6dfSmrgHandleSetPrivateColorRegisters(Widget w,
2329894e0ac8Smrg			       XEvent *event GCC_UNUSED,
2330894e0ac8Smrg			       String *params,
2331e0a2b6dfSmrg			       Cardinal *param_count)
2332e0a2b6dfSmrg{
2333e0a2b6dfSmrg    HANDLE_VT_TOGGLE(privatecolorregisters);
2334e0a2b6dfSmrg}
2335e0a2b6dfSmrg#endif
2336e0a2b6dfSmrg
2337d522f475Smrg#if OPT_SUN_FUNC_KEYS
2338d522f475Smrgvoid
2339d522f475SmrgHandleSunFunctionKeys(Widget w,
2340894e0ac8Smrg		      XEvent *event GCC_UNUSED,
2341894e0ac8Smrg		      String *params,
2342d522f475Smrg		      Cardinal *param_count)
2343d522f475Smrg{
2344d522f475Smrg    handle_vt_toggle(do_sun_fkeys, term->keyboard.type == keyboardIsSun,
2345d522f475Smrg		     params, *param_count, w);
2346d522f475Smrg}
2347d522f475Smrg#endif
2348d522f475Smrg
2349d522f475Smrg#if OPT_NUM_LOCK
2350d522f475Smrgvoid
2351d522f475SmrgHandleNumLock(Widget w,
2352894e0ac8Smrg	      XEvent *event GCC_UNUSED,
2353894e0ac8Smrg	      String *params,
2354d522f475Smrg	      Cardinal *param_count)
2355d522f475Smrg{
2356d522f475Smrg    handle_vt_toggle(do_num_lock, term->misc.real_NumLock,
2357d522f475Smrg		     params, *param_count, w);
2358d522f475Smrg}
2359d522f475Smrg
2360d522f475Smrgvoid
2361d522f475SmrgHandleAltEsc(Widget w,
2362894e0ac8Smrg	     XEvent *event GCC_UNUSED,
2363894e0ac8Smrg	     String *params,
2364d522f475Smrg	     Cardinal *param_count)
2365d522f475Smrg{
23660bd37d32Smrg    handle_vt_toggle(do_alt_esc, !TScreenOf(term)->alt_sends_esc,
2367d522f475Smrg		     params, *param_count, w);
2368d522f475Smrg}
2369d522f475Smrg
2370d522f475Smrgvoid
2371d522f475SmrgHandleMetaEsc(Widget w,
2372894e0ac8Smrg	      XEvent *event GCC_UNUSED,
2373894e0ac8Smrg	      String *params,
2374d522f475Smrg	      Cardinal *param_count)
2375d522f475Smrg{
237620d2c4d2Smrg    handle_vt_toggle(do_meta_esc, TScreenOf(term)->meta_sends_esc,
2377d522f475Smrg		     params, *param_count, w);
2378d522f475Smrg}
2379d522f475Smrg#endif
2380d522f475Smrg
2381d522f475Smrgvoid
2382d522f475SmrgHandleDeleteIsDEL(Widget w,
2383894e0ac8Smrg		  XEvent *event GCC_UNUSED,
2384894e0ac8Smrg		  String *params,
2385d522f475Smrg		  Cardinal *param_count)
2386d522f475Smrg{
238720d2c4d2Smrg    handle_vt_toggle(do_delete_del, TScreenOf(term)->delete_is_del,
2388d522f475Smrg		     params, *param_count, w);
2389d522f475Smrg}
2390d522f475Smrg
2391d522f475Smrgvoid
2392d522f475SmrgHandleOldFunctionKeys(Widget w,
2393894e0ac8Smrg		      XEvent *event GCC_UNUSED,
2394894e0ac8Smrg		      String *params,
2395d522f475Smrg		      Cardinal *param_count)
2396d522f475Smrg{
2397d522f475Smrg    handle_vt_toggle(do_old_fkeys, term->keyboard.type == keyboardIsLegacy,
2398d522f475Smrg		     params, *param_count, w);
2399d522f475Smrg}
2400d522f475Smrg
2401d522f475Smrg#if OPT_SUNPC_KBD
2402d522f475Smrgvoid
2403d522f475SmrgHandleSunKeyboard(Widget w,
2404894e0ac8Smrg		  XEvent *event GCC_UNUSED,
2405894e0ac8Smrg		  String *params,
2406d522f475Smrg		  Cardinal *param_count)
2407d522f475Smrg{
2408d522f475Smrg    handle_vt_toggle(do_sun_kbd, term->keyboard.type == keyboardIsVT220,
2409d522f475Smrg		     params, *param_count, w);
2410d522f475Smrg}
2411d522f475Smrg#endif
2412d522f475Smrg
2413d522f475Smrg#if OPT_HP_FUNC_KEYS
2414d522f475Smrgvoid
2415d522f475SmrgHandleHpFunctionKeys(Widget w,
2416894e0ac8Smrg		     XEvent *event GCC_UNUSED,
2417894e0ac8Smrg		     String *params,
2418d522f475Smrg		     Cardinal *param_count)
2419d522f475Smrg{
2420d522f475Smrg    handle_vt_toggle(do_hp_fkeys, term->keyboard.type == keyboardIsHP,
2421d522f475Smrg		     params, *param_count, w);
2422d522f475Smrg}
2423d522f475Smrg#endif
2424d522f475Smrg
2425d522f475Smrg#if OPT_SCO_FUNC_KEYS
2426d522f475Smrgvoid
2427d522f475SmrgHandleScoFunctionKeys(Widget w,
2428894e0ac8Smrg		      XEvent *event GCC_UNUSED,
2429894e0ac8Smrg		      String *params,
2430d522f475Smrg		      Cardinal *param_count)
2431d522f475Smrg{
2432d522f475Smrg    handle_vt_toggle(do_sco_fkeys, term->keyboard.type == keyboardIsSCO,
2433d522f475Smrg		     params, *param_count, w);
2434d522f475Smrg}
2435d522f475Smrg#endif
2436d522f475Smrg
2437d522f475Smrgvoid
2438d522f475SmrgHandleScrollbar(Widget w,
2439894e0ac8Smrg		XEvent *event GCC_UNUSED,
2440894e0ac8Smrg		String *params,
2441d522f475Smrg		Cardinal *param_count)
2442d522f475Smrg{
244320d2c4d2Smrg    XtermWidget xw = term;
244420d2c4d2Smrg
244520d2c4d2Smrg    if (IsIcon(TScreenOf(xw))) {
244620d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
2447d522f475Smrg    } else {
244820d2c4d2Smrg	handle_vt_toggle(do_scrollbar, TScreenOf(xw)->fullVwin.sb_info.width,
2449d522f475Smrg			 params, *param_count, w);
2450d522f475Smrg    }
2451d522f475Smrg}
2452d522f475Smrg
2453d522f475Smrgvoid
2454d522f475SmrgHandleJumpscroll(Widget w,
2455894e0ac8Smrg		 XEvent *event GCC_UNUSED,
2456894e0ac8Smrg		 String *params,
2457d522f475Smrg		 Cardinal *param_count)
2458d522f475Smrg{
245920d2c4d2Smrg    HANDLE_VT_TOGGLE(jumpscroll);
2460d522f475Smrg}
2461d522f475Smrg
24622e4f8982Smrgvoid
24632e4f8982SmrgHandleKeepClipboard(Widget w,
24642e4f8982Smrg		    XEvent *event GCC_UNUSED,
24652e4f8982Smrg		    String *params,
24662e4f8982Smrg		    Cardinal *param_count)
24672e4f8982Smrg{
24682e4f8982Smrg    HANDLE_VT_TOGGLE(keepClipboard);
24692e4f8982Smrg}
24702e4f8982Smrg
2471d522f475Smrgvoid
2472d522f475SmrgHandleKeepSelection(Widget w,
2473894e0ac8Smrg		    XEvent *event GCC_UNUSED,
2474894e0ac8Smrg		    String *params,
2475d522f475Smrg		    Cardinal *param_count)
2476d522f475Smrg{
247720d2c4d2Smrg    HANDLE_VT_TOGGLE(keepSelection);
2478d522f475Smrg}
2479d522f475Smrg
2480d522f475Smrgvoid
2481d522f475SmrgHandleSetSelect(Widget w,
2482894e0ac8Smrg		XEvent *event GCC_UNUSED,
2483894e0ac8Smrg		String *params,
2484d522f475Smrg		Cardinal *param_count)
2485d522f475Smrg{
248620d2c4d2Smrg    handle_vt_toggle(do_selectClipboard, TScreenOf(term)->selectToClipboard,
2487d522f475Smrg		     params, *param_count, w);
2488d522f475Smrg}
2489d522f475Smrg
2490d522f475Smrgvoid
2491d522f475SmrgHandleReverseVideo(Widget w,
2492894e0ac8Smrg		   XEvent *event GCC_UNUSED,
2493894e0ac8Smrg		   String *params,
2494d522f475Smrg		   Cardinal *param_count)
2495d522f475Smrg{
2496d522f475Smrg    handle_vt_toggle(do_reversevideo, (term->misc.re_verse0),
2497d522f475Smrg		     params, *param_count, w);
2498d522f475Smrg}
2499d522f475Smrg
2500d522f475Smrgvoid
2501d522f475SmrgHandleAutoWrap(Widget w,
2502894e0ac8Smrg	       XEvent *event GCC_UNUSED,
2503894e0ac8Smrg	       String *params,
2504d522f475Smrg	       Cardinal *param_count)
2505d522f475Smrg{
2506d522f475Smrg    handle_vt_toggle(do_autowrap, (term->flags & WRAPAROUND),
2507d522f475Smrg		     params, *param_count, w);
2508d522f475Smrg}
2509d522f475Smrg
2510d522f475Smrgvoid
2511d522f475SmrgHandleReverseWrap(Widget w,
2512894e0ac8Smrg		  XEvent *event GCC_UNUSED,
2513894e0ac8Smrg		  String *params,
2514d522f475Smrg		  Cardinal *param_count)
2515d522f475Smrg{
2516d522f475Smrg    handle_vt_toggle(do_reversewrap, (term->flags & REVERSEWRAP),
2517d522f475Smrg		     params, *param_count, w);
2518d522f475Smrg}
2519d522f475Smrg
2520d522f475Smrgvoid
2521d522f475SmrgHandleAutoLineFeed(Widget w,
2522894e0ac8Smrg		   XEvent *event GCC_UNUSED,
2523894e0ac8Smrg		   String *params,
2524d522f475Smrg		   Cardinal *param_count)
2525d522f475Smrg{
2526d522f475Smrg    handle_vt_toggle(do_autolinefeed, (term->flags & LINEFEED),
2527d522f475Smrg		     params, *param_count, w);
2528d522f475Smrg}
2529d522f475Smrg
2530d522f475Smrgvoid
2531d522f475SmrgHandleAppCursor(Widget w,
2532894e0ac8Smrg		XEvent *event GCC_UNUSED,
2533894e0ac8Smrg		String *params,
2534d522f475Smrg		Cardinal *param_count)
2535d522f475Smrg{
2536d522f475Smrg    handle_vt_toggle(do_appcursor, (term->keyboard.flags & MODE_DECCKM),
2537d522f475Smrg		     params, *param_count, w);
2538d522f475Smrg}
2539d522f475Smrg
2540d522f475Smrgvoid
2541d522f475SmrgHandleAppKeypad(Widget w,
2542894e0ac8Smrg		XEvent *event GCC_UNUSED,
2543894e0ac8Smrg		String *params,
2544d522f475Smrg		Cardinal *param_count)
2545d522f475Smrg{
2546d522f475Smrg    handle_vt_toggle(do_appkeypad, (term->keyboard.flags & MODE_DECKPAM),
2547d522f475Smrg		     params, *param_count, w);
2548d522f475Smrg}
2549d522f475Smrg
2550d522f475Smrgvoid
2551d522f475SmrgHandleScrollKey(Widget w,
2552894e0ac8Smrg		XEvent *event GCC_UNUSED,
2553894e0ac8Smrg		String *params,
2554d522f475Smrg		Cardinal *param_count)
2555d522f475Smrg{
255620d2c4d2Smrg    HANDLE_VT_TOGGLE(scrollkey);
2557d522f475Smrg}
2558d522f475Smrg
2559d522f475Smrgvoid
2560d522f475SmrgHandleScrollTtyOutput(Widget w,
2561894e0ac8Smrg		      XEvent *event GCC_UNUSED,
2562894e0ac8Smrg		      String *params,
2563d522f475Smrg		      Cardinal *param_count)
2564d522f475Smrg{
256520d2c4d2Smrg    HANDLE_VT_TOGGLE(scrollttyoutput);
2566d522f475Smrg}
2567d522f475Smrg
2568d522f475Smrgvoid
2569d522f475SmrgHandleAllow132(Widget w,
2570894e0ac8Smrg	       XEvent *event GCC_UNUSED,
2571894e0ac8Smrg	       String *params,
2572d522f475Smrg	       Cardinal *param_count)
2573d522f475Smrg{
257420d2c4d2Smrg    handle_vt_toggle(do_allow132, TScreenOf(term)->c132,
2575d522f475Smrg		     params, *param_count, w);
2576d522f475Smrg}
2577d522f475Smrg
2578d522f475Smrgvoid
2579d522f475SmrgHandleCursesEmul(Widget w,
2580894e0ac8Smrg		 XEvent *event GCC_UNUSED,
2581894e0ac8Smrg		 String *params,
2582d522f475Smrg		 Cardinal *param_count)
2583d522f475Smrg{
258420d2c4d2Smrg    handle_vt_toggle(do_cursesemul, TScreenOf(term)->curses,
2585d522f475Smrg		     params, *param_count, w);
2586d522f475Smrg}
2587d522f475Smrg
2588d522f475Smrgvoid
2589d522f475SmrgHandleBellIsUrgent(Widget w,
2590894e0ac8Smrg		   XEvent *event GCC_UNUSED,
2591894e0ac8Smrg		   String *params,
2592d522f475Smrg		   Cardinal *param_count)
2593d522f475Smrg{
259420d2c4d2Smrg    HANDLE_VT_TOGGLE(bellIsUrgent);
2595d522f475Smrg}
2596d522f475Smrg
2597d522f475Smrgvoid
2598d522f475SmrgHandleMarginBell(Widget w,
2599894e0ac8Smrg		 XEvent *event GCC_UNUSED,
2600894e0ac8Smrg		 String *params,
2601d522f475Smrg		 Cardinal *param_count)
2602d522f475Smrg{
260320d2c4d2Smrg    HANDLE_VT_TOGGLE(marginbell);
2604d522f475Smrg}
2605d522f475Smrg
2606d522f475Smrg#if OPT_BLINK_CURS
2607d522f475Smrgvoid
2608d522f475SmrgHandleCursorBlink(Widget w,
2609894e0ac8Smrg		  XEvent *event GCC_UNUSED,
2610894e0ac8Smrg		  String *params,
2611d522f475Smrg		  Cardinal *param_count)
2612d522f475Smrg{
2613d522f475Smrg    /* eventually want to see if sensitive or not */
261420d2c4d2Smrg    handle_vt_toggle(do_cursorblink, TScreenOf(term)->cursor_blink,
2615d522f475Smrg		     params, *param_count, w);
2616d522f475Smrg}
2617d522f475Smrg#endif
2618d522f475Smrg
2619d522f475Smrgvoid
2620d522f475SmrgHandleAltScreen(Widget w,
2621894e0ac8Smrg		XEvent *event GCC_UNUSED,
2622894e0ac8Smrg		String *params,
2623d522f475Smrg		Cardinal *param_count)
2624d522f475Smrg{
2625d522f475Smrg    /* eventually want to see if sensitive or not */
262620d2c4d2Smrg    handle_vt_toggle(do_altscreen, TScreenOf(term)->whichBuf,
2627d522f475Smrg		     params, *param_count, w);
2628d522f475Smrg}
2629d522f475Smrg
2630d522f475Smrgvoid
2631d522f475SmrgHandleTiteInhibit(Widget w,
2632894e0ac8Smrg		  XEvent *event GCC_UNUSED,
2633894e0ac8Smrg		  String *params,
2634d522f475Smrg		  Cardinal *param_count)
2635d522f475Smrg{
2636d522f475Smrg    /* eventually want to see if sensitive or not */
2637d522f475Smrg    handle_vt_toggle(do_titeInhibit, !(term->misc.titeInhibit),
2638d522f475Smrg		     params, *param_count, w);
2639d522f475Smrg}
2640d522f475Smrg
2641d522f475Smrg/* ARGSUSED */
2642d522f475Smrgvoid
2643d522f475SmrgHandleSoftReset(Widget w,
2644894e0ac8Smrg		XEvent *event GCC_UNUSED,
2645894e0ac8Smrg		String *params GCC_UNUSED,
2646d522f475Smrg		Cardinal *param_count GCC_UNUSED)
2647d522f475Smrg{
2648d522f475Smrg    do_softreset(w, (XtPointer) 0, (XtPointer) 0);
2649d522f475Smrg}
2650d522f475Smrg
2651d522f475Smrg/* ARGSUSED */
2652d522f475Smrgvoid
2653d522f475SmrgHandleHardReset(Widget w,
2654894e0ac8Smrg		XEvent *event GCC_UNUSED,
2655894e0ac8Smrg		String *params GCC_UNUSED,
2656d522f475Smrg		Cardinal *param_count GCC_UNUSED)
2657d522f475Smrg{
2658d522f475Smrg    do_hardreset(w, (XtPointer) 0, (XtPointer) 0);
2659d522f475Smrg}
2660d522f475Smrg
2661d522f475Smrg/* ARGSUSED */
2662d522f475Smrgvoid
2663d522f475SmrgHandleClearSavedLines(Widget w,
2664894e0ac8Smrg		      XEvent *event GCC_UNUSED,
2665894e0ac8Smrg		      String *params GCC_UNUSED,
2666d522f475Smrg		      Cardinal *param_count GCC_UNUSED)
2667d522f475Smrg{
2668d522f475Smrg    do_clearsavedlines(w, (XtPointer) 0, (XtPointer) 0);
2669d522f475Smrg}
2670d522f475Smrg
2671e39b573cSmrgvoid
2672e39b573cSmrgHandleAllowBoldFonts(Widget w,
2673894e0ac8Smrg		     XEvent *event GCC_UNUSED,
2674894e0ac8Smrg		     String *params,
2675e39b573cSmrg		     Cardinal *param_count)
2676e39b573cSmrg{
2677e39b573cSmrg    HANDLE_VT_TOGGLE(allowBoldFonts);
2678e39b573cSmrg}
2679e39b573cSmrg
268001037d57Smrg#if OPT_LOAD_VTFONTS
268101037d57Smrgvoid
268201037d57Smrgupdate_font_escape(void)
268301037d57Smrg{
268401037d57Smrg    TScreen *screen = TScreenOf(term);
268501037d57Smrg
268601037d57Smrg    SetItemSensitivity(fontMenuEntries[fontMenu_fontescape].widget,
268701037d57Smrg		       ((screen->allowFontOps &&
268801037d57Smrg			 screen->EscapeFontName())
268901037d57Smrg			? True : False));
269001037d57Smrg}
269101037d57Smrg#endif
269201037d57Smrg
2693d522f475Smrg#if OPT_DEC_CHRSET
2694d522f475Smrgvoid
2695d522f475SmrgHandleFontDoublesize(Widget w,
2696894e0ac8Smrg		     XEvent *event GCC_UNUSED,
2697894e0ac8Smrg		     String *params,
2698d522f475Smrg		     Cardinal *param_count)
2699d522f475Smrg{
270020d2c4d2Smrg    HANDLE_VT_TOGGLE(font_doublesize);
2701d522f475Smrg}
2702d522f475Smrg#endif
2703d522f475Smrg
2704d522f475Smrg#if OPT_BOX_CHARS
2705d522f475Smrgvoid
2706d522f475SmrgHandleFontBoxChars(Widget w,
2707894e0ac8Smrg		   XEvent *event GCC_UNUSED,
2708894e0ac8Smrg		   String *params,
2709d522f475Smrg		   Cardinal *param_count)
2710d522f475Smrg{
271120d2c4d2Smrg    handle_vt_toggle(do_font_boxchars, TScreenOf(term)->force_box_chars,
271220d2c4d2Smrg		     params, *param_count, w);
271320d2c4d2Smrg}
271420d2c4d2Smrg
271520d2c4d2Smrgvoid
271620d2c4d2SmrgHandleFontPacked(Widget w,
2717894e0ac8Smrg		 XEvent *event GCC_UNUSED,
2718894e0ac8Smrg		 String *params,
271920d2c4d2Smrg		 Cardinal *param_count)
272020d2c4d2Smrg{
272120d2c4d2Smrg    handle_vt_toggle(do_font_packed, TScreenOf(term)->force_packed,
2722d522f475Smrg		     params, *param_count, w);
2723d522f475Smrg}
2724d522f475Smrg#endif
2725d522f475Smrg
2726d522f475Smrg#if OPT_DEC_SOFTFONT
2727d522f475Smrgvoid
2728d522f475SmrgHandleFontLoading(Widget w,
2729894e0ac8Smrg		  XEvent *event GCC_UNUSED,
2730894e0ac8Smrg		  String *params,
2731d522f475Smrg		  Cardinal *param_count)
2732d522f475Smrg{
2733d522f475Smrg    handle_vt_toggle(do_font_loadable, term->misc.font_loadable,
2734d522f475Smrg		     params, *param_count, w);
2735d522f475Smrg}
2736d522f475Smrg#endif
2737d522f475Smrg
2738d522f475Smrg#if OPT_RENDERFONT
27390bd37d32Smrgstatic void
27400bd37d32Smrgupdate_fontmenu(XtermWidget xw)
27410bd37d32Smrg{
27420bd37d32Smrg    TScreen *screen = TScreenOf(xw);
27430bd37d32Smrg    int n;
27440bd37d32Smrg
27450bd37d32Smrg    for (n = 0; n <= fontMenu_lastBuiltin; ++n) {
27460bd37d32Smrg	Boolean active = (Boolean) (xw->work.render_font ||
27470bd37d32Smrg				    (screen->menu_font_sizes[n] >= 0));
27480bd37d32Smrg	SetItemSensitivity(fontMenuEntries[n].widget, active);
27490bd37d32Smrg    }
27500bd37d32Smrg}
27510bd37d32Smrg
2752d522f475Smrgvoid
2753d522f475SmrgHandleRenderFont(Widget w,
2754894e0ac8Smrg		 XEvent *event GCC_UNUSED,
2755894e0ac8Smrg		 String *params,
2756d522f475Smrg		 Cardinal *param_count)
2757d522f475Smrg{
275820d2c4d2Smrg    XtermWidget xw = (XtermWidget) term;
275920d2c4d2Smrg
276020d2c4d2Smrg    DefaultRenderFont(xw);
276120d2c4d2Smrg
27620bd37d32Smrg    handle_vt_toggle(do_font_renderfont, xw->work.render_font,
2763d522f475Smrg		     params, *param_count, w);
27640bd37d32Smrg
27650bd37d32Smrg    update_fontmenu(xw);
2766d522f475Smrg}
2767d522f475Smrg#endif
2768d522f475Smrg
2769d522f475Smrg#if OPT_WIDE_CHARS
2770d522f475Smrgvoid
2771d522f475SmrgHandleUTF8Mode(Widget w,
2772894e0ac8Smrg	       XEvent *event GCC_UNUSED,
2773894e0ac8Smrg	       String *params,
2774d522f475Smrg	       Cardinal *param_count)
2775d522f475Smrg{
277620d2c4d2Smrg    handle_vt_toggle(do_font_utf8_mode, TScreenOf(term)->utf8_mode,
2777d522f475Smrg		     params, *param_count, w);
2778d522f475Smrg}
2779d522f475Smrg
2780e39b573cSmrgvoid
2781e39b573cSmrgHandleUTF8Fonts(Widget w,
2782894e0ac8Smrg		XEvent *event GCC_UNUSED,
2783894e0ac8Smrg		String *params,
2784e39b573cSmrg		Cardinal *param_count)
2785e39b573cSmrg{
2786e39b573cSmrg    handle_vt_toggle(do_font_utf8_fonts, TScreenOf(term)->utf8_fonts,
2787e39b573cSmrg		     params, *param_count, w);
2788e39b573cSmrg}
2789e39b573cSmrg
2790d522f475Smrgvoid
2791d522f475SmrgHandleUTF8Title(Widget w,
2792894e0ac8Smrg		XEvent *event GCC_UNUSED,
2793894e0ac8Smrg		String *params,
2794d522f475Smrg		Cardinal *param_count)
2795d522f475Smrg{
279620d2c4d2Smrg    handle_vt_toggle(do_font_utf8_title, TScreenOf(term)->utf8_title,
2797d522f475Smrg		     params, *param_count, w);
2798d522f475Smrg}
2799d522f475Smrg#endif
2800d522f475Smrg
28012e4f8982Smrg#if OPT_SCREEN_DUMPS
28022e4f8982Smrgvoid
28032e4f8982SmrgHandleDumpHtml(Widget w GCC_UNUSED,
28042e4f8982Smrg	       XEvent *event GCC_UNUSED,
28052e4f8982Smrg	       String *params GCC_UNUSED,
28062e4f8982Smrg	       Cardinal *param_count GCC_UNUSED)
28072e4f8982Smrg{
28082e4f8982Smrg    xtermDumpHtml(term);
28092e4f8982Smrg}
28102e4f8982Smrg
28112e4f8982Smrgvoid
28122e4f8982SmrgHandleDumpSvg(Widget w GCC_UNUSED,
28132e4f8982Smrg	      XEvent *event GCC_UNUSED,
28142e4f8982Smrg	      String *params GCC_UNUSED,
28152e4f8982Smrg	      Cardinal *param_count GCC_UNUSED)
28162e4f8982Smrg{
28172e4f8982Smrg    xtermDumpSvg(term);
28182e4f8982Smrg}
28192e4f8982Smrg#endif
28202e4f8982Smrg
2821d522f475Smrg#if OPT_TEK4014
2822d522f475Smrgvoid
2823d522f475SmrgHandleSetTerminalType(Widget w,
2824894e0ac8Smrg		      XEvent *event GCC_UNUSED,
2825894e0ac8Smrg		      String *params,
2826d522f475Smrg		      Cardinal *param_count)
2827d522f475Smrg{
282820d2c4d2Smrg    XtermWidget xw = term;
282920d2c4d2Smrg
2830d522f475Smrg    if (*param_count == 1) {
2831d522f475Smrg	switch (params[0][0]) {
2832d522f475Smrg	case 'v':
2833d522f475Smrg	case 'V':
283420d2c4d2Smrg	    if (TEK4014_ACTIVE(xw))
2835d522f475Smrg		do_vtmode(w, (XtPointer) 0, (XtPointer) 0);
2836d522f475Smrg	    break;
2837d522f475Smrg	case 't':
2838d522f475Smrg	case 'T':
283920d2c4d2Smrg	    if (!TEK4014_ACTIVE(xw))
2840d522f475Smrg		do_tekmode(w, (XtPointer) 0, (XtPointer) 0);
2841d522f475Smrg	    break;
2842d522f475Smrg	default:
284320d2c4d2Smrg	    Bell(xw, XkbBI_MinorError, 0);
2844d522f475Smrg	}
2845d522f475Smrg    } else {
284620d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
2847d522f475Smrg    }
2848d522f475Smrg}
2849d522f475Smrg
2850d522f475Smrgvoid
2851d522f475SmrgHandleVisibility(Widget w,
2852894e0ac8Smrg		 XEvent *event GCC_UNUSED,
2853894e0ac8Smrg		 String *params,
2854d522f475Smrg		 Cardinal *param_count)
2855d522f475Smrg{
285620d2c4d2Smrg    XtermWidget xw = term;
285720d2c4d2Smrg
2858d522f475Smrg    if (*param_count == 2) {
2859d522f475Smrg	switch (params[0][0]) {
2860d522f475Smrg	case 'v':
2861d522f475Smrg	case 'V':
286220d2c4d2Smrg	    handle_tek_toggle(do_vtonoff, (int) TScreenOf(xw)->Vshow,
2863d522f475Smrg			      params + 1, (*param_count) - 1, w);
2864d522f475Smrg	    break;
2865d522f475Smrg	case 't':
2866d522f475Smrg	case 'T':
286720d2c4d2Smrg	    handle_tek_toggle(do_tekonoff, (int) TEK4014_SHOWN(xw),
2868d522f475Smrg			      params + 1, (*param_count) - 1, w);
2869d522f475Smrg	    break;
2870d522f475Smrg	default:
287120d2c4d2Smrg	    Bell(xw, XkbBI_MinorError, 0);
2872d522f475Smrg	}
2873d522f475Smrg    } else {
287420d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
2875d522f475Smrg    }
2876d522f475Smrg}
2877d522f475Smrg
2878d522f475Smrg/* ARGSUSED */
2879d522f475Smrgvoid
2880d522f475SmrgHandleSetTekText(Widget w,
2881894e0ac8Smrg		 XEvent *event GCC_UNUSED,
2882894e0ac8Smrg		 String *params,
2883d522f475Smrg		 Cardinal *param_count)
2884d522f475Smrg{
288520d2c4d2Smrg    XtermWidget xw = term;
2886d522f475Smrg    void (*proc) PROTO_XT_CALLBACK_ARGS = 0;
2887d522f475Smrg
2888d522f475Smrg    switch (*param_count) {
2889d522f475Smrg    case 0:
2890d522f475Smrg	proc = do_tektextlarge;
2891d522f475Smrg	break;
2892d522f475Smrg    case 1:
2893d522f475Smrg	switch (TekGetFontSize(params[0])) {
2894d522f475Smrg	case TEK_FONT_LARGE:
2895d522f475Smrg	    proc = do_tektextlarge;
2896d522f475Smrg	    break;
2897d522f475Smrg	case TEK_FONT_2:
2898d522f475Smrg	    proc = do_tektext2;
2899d522f475Smrg	    break;
2900d522f475Smrg	case TEK_FONT_3:
2901d522f475Smrg	    proc = do_tektext3;
2902d522f475Smrg	    break;
2903d522f475Smrg	case TEK_FONT_SMALL:
2904d522f475Smrg	    proc = do_tektextsmall;
2905d522f475Smrg	    break;
2906d522f475Smrg	}
2907d522f475Smrg	break;
2908d522f475Smrg    }
2909d522f475Smrg    if (proc)
2910d522f475Smrg	(*proc) (w, (XtPointer) 0, (XtPointer) 0);
2911d522f475Smrg    else
291220d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
2913d522f475Smrg}
2914d522f475Smrg
2915d522f475Smrg/* ARGSUSED */
2916d522f475Smrgvoid
2917d522f475SmrgHandleTekPage(Widget w,
2918894e0ac8Smrg	      XEvent *event GCC_UNUSED,
2919894e0ac8Smrg	      String *params GCC_UNUSED,
2920d522f475Smrg	      Cardinal *param_count GCC_UNUSED)
2921d522f475Smrg{
2922d522f475Smrg    do_tekpage(w, (XtPointer) 0, (XtPointer) 0);
2923d522f475Smrg}
2924d522f475Smrg
2925d522f475Smrg/* ARGSUSED */
2926d522f475Smrgvoid
2927d522f475SmrgHandleTekReset(Widget w,
2928894e0ac8Smrg	       XEvent *event GCC_UNUSED,
2929894e0ac8Smrg	       String *params GCC_UNUSED,
2930d522f475Smrg	       Cardinal *param_count GCC_UNUSED)
2931d522f475Smrg{
2932d522f475Smrg    do_tekreset(w, (XtPointer) 0, (XtPointer) 0);
2933d522f475Smrg}
2934d522f475Smrg
2935d522f475Smrg/* ARGSUSED */
2936d522f475Smrgvoid
2937d522f475SmrgHandleTekCopy(Widget w,
2938894e0ac8Smrg	      XEvent *event GCC_UNUSED,
2939894e0ac8Smrg	      String *params GCC_UNUSED,
2940d522f475Smrg	      Cardinal *param_count GCC_UNUSED)
2941d522f475Smrg{
2942d522f475Smrg    do_tekcopy(w, (XtPointer) 0, (XtPointer) 0);
2943d522f475Smrg}
2944d522f475Smrg#endif /* OPT_TEK4014 */
2945d522f475Smrg
2946d522f475Smrg#if OPT_TOOLBAR
2947d522f475Smrg/*
2948d522f475Smrg * The normal style of xterm popup menu delays initialization until the menu is
2949d522f475Smrg * first requested.  When using a toolbar, we can use the same initialization,
2950d522f475Smrg * though on the first popup there will be a little geometry layout jitter,
2951d522f475Smrg * since the menu is already managed when this callback is invoked.
2952d522f475Smrg */
2953d522f475Smrgstatic void
2954d522f475SmrgInitPopup(Widget gw,
2955d522f475Smrg	  XtPointer closure,
2956d522f475Smrg	  XtPointer data GCC_UNUSED)
2957d522f475Smrg{
2958d522f475Smrg    String params[2];
2959d522f475Smrg    Cardinal count = 1;
2960d522f475Smrg
2961d522f475Smrg    params[0] = (char *) closure;
2962d522f475Smrg    params[1] = 0;
2963d522f475Smrg    TRACE(("InitPopup(%s)\n", params[0]));
2964d522f475Smrg
2965d522f475Smrg    domenu(gw, (XEvent *) 0, params, &count);
2966d522f475Smrg
2967894e0ac8Smrg    XtRemoveCallback(gw, XtNpopupCallback, InitPopup, closure);
2968d522f475Smrg}
2969d522f475Smrg
2970d522f475Smrgstatic Dimension
2971d522f475SmrgSetupShell(Widget *menus, MenuList * shell, int n, int m)
2972d522f475Smrg{
2973d522f475Smrg    char temp[80];
2974d522f475Smrg    char *external_name = 0;
2975d522f475Smrg    Dimension button_height;
2976d522f475Smrg    Dimension button_border;
2977d522f475Smrg    String saveLocale = setMenuLocale(True, resource.menuLocale);
2978d522f475Smrg
2979d522f475Smrg    shell[n].w = XtVaCreatePopupShell(menu_names[n].internal_name,
2980d522f475Smrg				      simpleMenuWidgetClass,
2981d522f475Smrg				      *menus,
2982d522f475Smrg				      XtNgeometry, NULL,
2983d522f475Smrg				      (XtPointer) 0);
2984d522f475Smrg
2985d522f475Smrg    XtAddCallback(shell[n].w, XtNpopupCallback, InitPopup, menu_names[n].internal_name);
2986d522f475Smrg    XtVaGetValues(shell[n].w,
2987d522f475Smrg		  XtNlabel, &external_name,
2988d522f475Smrg		  (XtPointer) 0);
2989d522f475Smrg
2990d522f475Smrg    TRACE(("...SetupShell(%s) -> %s -> %#lx\n",
2991d522f475Smrg	   menu_names[n].internal_name,
2992d522f475Smrg	   external_name,
2993d522f475Smrg	   (long) shell[n].w));
2994d522f475Smrg
2995d522f475Smrg    sprintf(temp, "%sButton", menu_names[n].internal_name);
2996d522f475Smrg    shell[n].b = XtVaCreateManagedWidget(temp,
2997d522f475Smrg					 menuButtonWidgetClass,
2998d522f475Smrg					 *menus,
2999d522f475Smrg					 XtNfromHoriz, ((m >= 0)
3000d522f475Smrg							? shell[m].b
3001d522f475Smrg							: 0),
3002d522f475Smrg					 XtNmenuName, menu_names[n].internal_name,
3003d522f475Smrg					 XtNlabel, external_name,
3004d522f475Smrg					 (XtPointer) 0);
3005d522f475Smrg    XtVaGetValues(shell[n].b,
3006d522f475Smrg		  XtNheight, &button_height,
3007d522f475Smrg		  XtNborderWidth, &button_border,
3008d522f475Smrg		  (XtPointer) 0);
3009d522f475Smrg
3010956cc18dSsnj    (void) setMenuLocale(False, saveLocale);
3011956cc18dSsnj    return (Dimension) (button_height + (button_border * 2));
3012d522f475Smrg}
3013d522f475Smrg#endif /* OPT_TOOLBAR */
3014d522f475Smrg
3015d522f475Smrgvoid
3016894e0ac8SmrgSetupMenus(Widget shell, Widget *forms, Widget *menus, Dimension *menu_high)
3017d522f475Smrg{
3018d522f475Smrg#if OPT_TOOLBAR
3019d522f475Smrg    Dimension button_height = 0;
3020d522f475Smrg    Dimension toolbar_hSpace;
3021d522f475Smrg    Arg args[10];
3022d522f475Smrg#endif
3023d522f475Smrg
3024d522f475Smrg    TRACE(("SetupMenus(%s)\n", shell == toplevel ? "vt100" : "tek4014"));
3025d522f475Smrg
3026d522f475Smrg    *menu_high = 0;
3027d522f475Smrg
3028d522f475Smrg    if (shell == toplevel) {
3029d522f475Smrg	XawSimpleMenuAddGlobalActions(app_con);
3030d522f475Smrg	XtRegisterGrabAction(HandlePopupMenu, True,
30310bd37d32Smrg			     (unsigned) (ButtonPressMask | ButtonReleaseMask),
3032d522f475Smrg			     GrabModeAsync, GrabModeAsync);
3033d522f475Smrg    }
3034d522f475Smrg#if OPT_TOOLBAR
3035d522f475Smrg    *forms = XtVaCreateManagedWidget("form",
3036d522f475Smrg				     formWidgetClass, shell,
3037d522f475Smrg				     (XtPointer) 0);
3038d522f475Smrg    xtermAddInput(*forms);
3039d522f475Smrg
3040d522f475Smrg    /*
3041d522f475Smrg     * Set a nominal value for the preferred pane size, which lets the
3042d522f475Smrg     * buttons determine the actual height of the menu bar.  We don't show
3043d522f475Smrg     * the grip, because it's too easy to make the toolbar look bad that
3044d522f475Smrg     * way.
3045d522f475Smrg     */
3046d522f475Smrg    XtSetArg(args[0], XtNorientation, XtorientHorizontal);
3047d522f475Smrg    XtSetArg(args[1], XtNtop, XawChainTop);
3048d522f475Smrg    XtSetArg(args[2], XtNbottom, XawChainTop);
3049d522f475Smrg    XtSetArg(args[3], XtNleft, XawChainLeft);
3050d522f475Smrg    XtSetArg(args[4], XtNright, XawChainLeft);
3051d522f475Smrg
3052d522f475Smrg    if (resource.toolBar) {
3053d522f475Smrg	*menus = XtCreateManagedWidget("menubar", boxWidgetClass, *forms,
3054d522f475Smrg				       args, 5);
3055d522f475Smrg    } else {
3056d522f475Smrg	*menus = XtCreateWidget("menubar", boxWidgetClass, *forms, args, 5);
3057d522f475Smrg    }
3058d522f475Smrg
3059d522f475Smrg    /*
3060d522f475Smrg     * The toolbar widget's height is not necessarily known yet.  If the
3061d522f475Smrg     * toolbar is not created as a managed widget, we can still make a good
3062d522f475Smrg     * guess about its height by collecting the widget's other resource values.
3063d522f475Smrg     */
3064d522f475Smrg    XtVaGetValues(*menus,
3065d522f475Smrg		  XtNhSpace, &toolbar_hSpace,
3066d522f475Smrg		  (XtPointer) 0);
3067d522f475Smrg
3068d522f475Smrg    if (shell == toplevel) {	/* vt100 */
3069d522f475Smrg	int j;
3070d522f475Smrg	for (j = mainMenu; j <= fontMenu; j++) {
3071d522f475Smrg	    button_height = SetupShell(menus, vt_shell, j, j - 1);
3072d522f475Smrg	}
3073d522f475Smrg    }
3074d522f475Smrg#if OPT_TEK4014
3075d522f475Smrg    else {			/* tek4014 */
307620d2c4d2Smrg	(void) SetupShell(menus, tek_shell, mainMenu, -1);
3077d522f475Smrg	button_height = SetupShell(menus, tek_shell, tekMenu, mainMenu);
3078d522f475Smrg    }
3079d522f475Smrg#endif
3080d522f475Smrg
3081d522f475Smrg    /*
3082d522f475Smrg     * Tell the main program how high the toolbar is, to help with the initial
3083d522f475Smrg     * layout.
3084d522f475Smrg     */
3085956cc18dSsnj    *menu_high = (Dimension) (button_height + 2 * (toolbar_hSpace));
30862eaa94a1Schristos    TRACE(("...menuHeight:%d = (%d + 2 * %d)\n",
30872eaa94a1Schristos	   *menu_high, button_height, toolbar_hSpace));
3088d522f475Smrg
3089d522f475Smrg#else /* !OPT_TOOLBAR */
3090d522f475Smrg    *forms = shell;
3091d522f475Smrg    *menus = shell;
3092d522f475Smrg#endif
3093d522f475Smrg
3094d522f475Smrg    TRACE(("...shell=%#lx\n", (long) shell));
3095d522f475Smrg    TRACE(("...forms=%#lx\n", (long) *forms));
3096d522f475Smrg    TRACE(("...menus=%#lx\n", (long) *menus));
3097d522f475Smrg}
3098d522f475Smrg
3099d522f475Smrgvoid
3100d522f475SmrgrepairSizeHints(void)
3101d522f475Smrg{
3102a1f3da82Smrg    XtermWidget xw = term;
3103a1f3da82Smrg    TScreen *screen = TScreenOf(xw);
3104d522f475Smrg
3105a1f3da82Smrg    if (XtIsRealized((Widget) xw)) {
3106a1f3da82Smrg	getXtermSizeHints(xw);
3107a1f3da82Smrg	xtermSizeHints(xw, ScrollbarWidth(screen));
3108d522f475Smrg
3109a1f3da82Smrg	XSetWMNormalHints(screen->display, VShellWindow(xw), &xw->hints);
3110d522f475Smrg    }
3111d522f475Smrg}
3112d522f475Smrg
3113d522f475Smrg#if OPT_TOOLBAR
3114d522f475Smrg#define INIT_POPUP(s, n) InitPopup(s[n].w, menu_names[n].internal_name, 0)
3115d522f475Smrg
3116d522f475Smrgstatic Bool
3117d522f475SmrgInitWidgetMenu(Widget shell)
3118d522f475Smrg{
3119d522f475Smrg    Bool result = False;
3120d522f475Smrg
312120d2c4d2Smrg    TRACE(("InitWidgetMenu(%p)\n", (void *) shell));
3122d522f475Smrg    if (term != 0) {
3123d522f475Smrg	if (shell == toplevel) {	/* vt100 */
3124d522f475Smrg	    if (!term->init_menu) {
3125d522f475Smrg		INIT_POPUP(vt_shell, mainMenu);
3126d522f475Smrg		INIT_POPUP(vt_shell, vtMenu);
3127d522f475Smrg		INIT_POPUP(vt_shell, fontMenu);
3128d522f475Smrg		term->init_menu = True;
3129d522f475Smrg		TRACE(("...InitWidgetMenu(vt)\n"));
3130d522f475Smrg	    }
3131d522f475Smrg	    result = term->init_menu;
3132d522f475Smrg	}
3133d522f475Smrg#if OPT_TEK4014
3134d522f475Smrg	else if (tekWidget) {	/* tek4014 */
3135d522f475Smrg	    if (!tekWidget->init_menu) {
3136d522f475Smrg		INIT_POPUP(tek_shell, mainMenu);
3137d522f475Smrg		INIT_POPUP(tek_shell, tekMenu);
3138d522f475Smrg		tekWidget->init_menu = True;
3139d522f475Smrg		TRACE(("...InitWidgetMenu(tek)\n"));
3140d522f475Smrg	    }
3141d522f475Smrg	    result = tekWidget->init_menu;
3142d522f475Smrg	}
3143d522f475Smrg#endif
3144d522f475Smrg    }
3145d522f475Smrg    TRACE(("...InitWidgetMenu ->%d\n", result));
3146d522f475Smrg    return result;
3147d522f475Smrg}
3148d522f475Smrg
3149d522f475Smrgstatic TbInfo *
3150d522f475Smrgtoolbar_info(Widget w)
3151d522f475Smrg{
3152d522f475Smrg    TRACE(("...getting toolbar_info\n"));
3153d522f475Smrg#if OPT_TEK4014
3154d522f475Smrg    if (w != (Widget) term)
3155d522f475Smrg	return &(tekWidget->tek.tb_info);
3156d522f475Smrg#else
3157d522f475Smrg    (void) w;
3158d522f475Smrg#endif
315920d2c4d2Smrg    return &(WhichVWin(TScreenOf(term))->tb_info);
3160d522f475Smrg}
3161d522f475Smrg
3162d522f475Smrgstatic void
3163d522f475Smrghide_toolbar(Widget w)
3164d522f475Smrg{
3165d522f475Smrg    if (w != 0) {
3166d522f475Smrg	TbInfo *info = toolbar_info(w);
3167d522f475Smrg
3168d522f475Smrg	TRACE(("hiding toolbar\n"));
3169d522f475Smrg	XtVaSetValues(w,
3170d522f475Smrg		      XtNfromVert, (Widget) 0,
3171d522f475Smrg		      (XtPointer) 0);
3172d522f475Smrg
3173d522f475Smrg	if (info->menu_bar != 0) {
3174d522f475Smrg	    repairSizeHints();
3175d522f475Smrg	    XtUnmanageChild(info->menu_bar);
3176d522f475Smrg	    if (XtIsRealized(info->menu_bar)) {
3177d522f475Smrg		XtUnmapWidget(info->menu_bar);
3178d522f475Smrg	    }
3179d522f475Smrg	}
3180d522f475Smrg	TRACE(("...hiding toolbar (done)\n"));
3181d522f475Smrg    }
3182d522f475Smrg}
3183d522f475Smrg
3184d522f475Smrgstatic void
3185d522f475Smrgshow_toolbar(Widget w)
3186d522f475Smrg{
3187d522f475Smrg    if (w != 0) {
3188d522f475Smrg	TbInfo *info = toolbar_info(w);
3189d522f475Smrg
3190d522f475Smrg	TRACE(("showing toolbar\n"));
3191d522f475Smrg	if (info->menu_bar != 0) {
3192d522f475Smrg	    XtVaSetValues(w,
3193d522f475Smrg			  XtNfromVert, info->menu_bar,
3194d522f475Smrg			  (XtPointer) 0);
3195d522f475Smrg	    if (XtIsRealized(info->menu_bar))
3196d522f475Smrg		repairSizeHints();
3197d522f475Smrg	    XtManageChild(info->menu_bar);
3198d522f475Smrg	    if (XtIsRealized(info->menu_bar)) {
3199d522f475Smrg		XtMapWidget(info->menu_bar);
3200d522f475Smrg	    }
3201d522f475Smrg	}
3202d522f475Smrg	/*
3203d522f475Smrg	 * This is needed to make the terminal widget move down below the
3204d522f475Smrg	 * toolbar.
3205d522f475Smrg	 */
3206d522f475Smrg	XawFormDoLayout(XtParent(w), True);
3207d522f475Smrg	TRACE(("...showing toolbar (done)\n"));
3208d522f475Smrg    }
3209d522f475Smrg}
3210d522f475Smrg
3211d522f475Smrg/*
3212d522f475Smrg * Make the toolbar visible or invisible in the current window(s).
3213d522f475Smrg */
3214d522f475Smrgvoid
3215d522f475SmrgShowToolbar(Bool enable)
3216d522f475Smrg{
321720d2c4d2Smrg    XtermWidget xw = term;
321820d2c4d2Smrg
3219d522f475Smrg    TRACE(("ShowToolbar(%d)\n", enable));
3220d522f475Smrg
322120d2c4d2Smrg    if (IsIcon(TScreenOf(xw))) {
322220d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
3223d522f475Smrg    } else {
3224d522f475Smrg	if (enable) {
3225d522f475Smrg	    if (InitWidgetMenu(toplevel))
322620d2c4d2Smrg		show_toolbar((Widget) xw);
3227d522f475Smrg#if OPT_TEK4014
3228d522f475Smrg	    if (InitWidgetMenu(tekshellwidget))
3229d522f475Smrg		show_toolbar((Widget) tekWidget);
3230d522f475Smrg#endif
3231d522f475Smrg	} else {
323220d2c4d2Smrg	    hide_toolbar((Widget) xw);
3233d522f475Smrg#if OPT_TEK4014
3234d522f475Smrg	    hide_toolbar((Widget) tekWidget);
3235d522f475Smrg#endif
3236d522f475Smrg	}
3237956cc18dSsnj	resource.toolBar = (Boolean) enable;
3238d522f475Smrg	update_toolbar();
3239d522f475Smrg    }
3240d522f475Smrg}
3241d522f475Smrg
3242d522f475Smrgvoid
3243d522f475SmrgHandleToolbar(Widget w,
3244894e0ac8Smrg	      XEvent *event GCC_UNUSED,
3245894e0ac8Smrg	      String *params GCC_UNUSED,
3246d522f475Smrg	      Cardinal *param_count GCC_UNUSED)
3247d522f475Smrg{
324820d2c4d2Smrg    XtermWidget xw = term;
324920d2c4d2Smrg
325020d2c4d2Smrg    if (IsIcon(TScreenOf(xw))) {
325120d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
3252d522f475Smrg    } else {
3253d522f475Smrg	handle_vt_toggle(do_toolbar, resource.toolBar,
3254d522f475Smrg			 params, *param_count, w);
3255d522f475Smrg    }
3256d522f475Smrg}
3257d522f475Smrg
3258d522f475Smrg/* ARGSUSED */
3259d522f475Smrgstatic void
3260d522f475Smrgdo_toolbar(Widget gw GCC_UNUSED,
3261d522f475Smrg	   XtPointer closure GCC_UNUSED,
3262d522f475Smrg	   XtPointer data GCC_UNUSED)
3263d522f475Smrg{
326420d2c4d2Smrg    XtermWidget xw = term;
326520d2c4d2Smrg
3266d522f475Smrg    /*
3267d522f475Smrg     * Toggle toolbars for both vt100 and tek windows, since they share the
3268d522f475Smrg     * menu which contains the checkbox indicating whether the toolbar is
3269d522f475Smrg     * active.
3270d522f475Smrg     */
327120d2c4d2Smrg    if (IsIcon(TScreenOf(xw))) {
327220d2c4d2Smrg	Bell(xw, XkbBI_MinorError, 0);
3273d522f475Smrg    } else {
3274956cc18dSsnj	ShowToolbar(ToggleFlag(resource.toolBar));
3275d522f475Smrg    }
3276d522f475Smrg}
3277d522f475Smrg
3278d522f475Smrgvoid
3279d522f475Smrgupdate_toolbar(void)
3280d522f475Smrg{
3281d522f475Smrg    UpdateCheckbox("update_toolbar",
3282d522f475Smrg		   mainMenuEntries,
3283d522f475Smrg		   mainMenu_toolbar,
3284d522f475Smrg		   resource.toolBar);
3285d522f475Smrg}
3286d522f475Smrg#endif /* OPT_TOOLBAR */
3287d522f475Smrg
3288d522f475Smrgvoid
3289d522f475Smrgupdate_securekbd(void)
3290d522f475Smrg{
3291d522f475Smrg    UpdateCheckbox("update_securekbd",
3292d522f475Smrg		   mainMenuEntries,
3293d522f475Smrg		   mainMenu_securekbd,
329420d2c4d2Smrg		   TScreenOf(term)->grabbedKbd);
3295d522f475Smrg}
3296d522f475Smrg
3297d522f475Smrgvoid
3298d522f475Smrgupdate_allowsends(void)
3299d522f475Smrg{
3300d522f475Smrg    UpdateCheckbox("update_allowsends",
3301d522f475Smrg		   mainMenuEntries,
3302d522f475Smrg		   mainMenu_allowsends,
330320d2c4d2Smrg		   TScreenOf(term)->allowSendEvents);
3304d522f475Smrg}
3305d522f475Smrg
3306d522f475Smrg#ifdef ALLOWLOGGING
3307d522f475Smrgvoid
3308d522f475Smrgupdate_logging(void)
3309d522f475Smrg{
3310d522f475Smrg    UpdateCheckbox("update_logging",
3311d522f475Smrg		   mainMenuEntries,
3312d522f475Smrg		   mainMenu_logging,
331320d2c4d2Smrg		   TScreenOf(term)->logging);
3314d522f475Smrg}
3315d522f475Smrg#endif
3316d522f475Smrg
3317e39b573cSmrg#if OPT_PRINT_ON_EXIT
3318e39b573cSmrgvoid
3319e39b573cSmrgupdate_write_error(void)
3320e39b573cSmrg{
3321e39b573cSmrg    UpdateCheckbox("update_write_error",
3322e39b573cSmrg		   mainMenuEntries,
3323e39b573cSmrg		   mainMenu_write_error,
3324e39b573cSmrg		   TScreenOf(term)->write_error);
3325e39b573cSmrg}
3326e39b573cSmrg#endif
3327e39b573cSmrg
3328d522f475Smrgvoid
3329d522f475Smrgupdate_print_redir(void)
3330d522f475Smrg{
3331d522f475Smrg    UpdateCheckbox("update_print_redir",
3332d522f475Smrg		   mainMenuEntries,
3333d522f475Smrg		   mainMenu_print_redir,
3334e39b573cSmrg		   PrinterOf(TScreenOf(term)).printer_controlmode);
3335d522f475Smrg}
3336d522f475Smrg
3337d522f475Smrgvoid
3338d522f475Smrgupdate_8bit_control(void)
3339d522f475Smrg{
3340d522f475Smrg    UpdateCheckbox("update_8bit_control",
3341d522f475Smrg		   mainMenuEntries,
3342d522f475Smrg		   mainMenu_8bit_ctrl,
334320d2c4d2Smrg		   TScreenOf(term)->control_eight_bits);
3344d522f475Smrg}
3345d522f475Smrg
3346d522f475Smrgvoid
3347d522f475Smrgupdate_decbkm(void)
3348d522f475Smrg{
3349d522f475Smrg    UpdateCheckbox("update_decbkm",
3350d522f475Smrg		   mainMenuEntries,
3351d522f475Smrg		   mainMenu_backarrow,
3352d522f475Smrg		   (term->keyboard.flags & MODE_DECBKM) != 0);
3353d522f475Smrg}
3354d522f475Smrg
3355d522f475Smrg#if OPT_NUM_LOCK
3356d522f475Smrgvoid
3357d522f475Smrgupdate_num_lock(void)
3358d522f475Smrg{
3359d522f475Smrg    UpdateCheckbox("update_num_lock",
3360d522f475Smrg		   mainMenuEntries,
3361d522f475Smrg		   mainMenu_num_lock,
3362d522f475Smrg		   term->misc.real_NumLock);
3363d522f475Smrg}
3364d522f475Smrg
3365d522f475Smrgvoid
3366d522f475Smrgupdate_alt_esc(void)
3367d522f475Smrg{
3368d522f475Smrg    UpdateCheckbox("update_alt_esc",
3369d522f475Smrg		   mainMenuEntries,
3370d522f475Smrg		   mainMenu_alt_esc,
337120d2c4d2Smrg		   TScreenOf(term)->alt_sends_esc);
3372d522f475Smrg}
3373d522f475Smrg
3374d522f475Smrgvoid
3375d522f475Smrgupdate_meta_esc(void)
3376d522f475Smrg{
3377d522f475Smrg    UpdateCheckbox("update_meta_esc",
3378d522f475Smrg		   mainMenuEntries,
3379d522f475Smrg		   mainMenu_meta_esc,
338020d2c4d2Smrg		   TScreenOf(term)->meta_sends_esc);
3381d522f475Smrg}
3382d522f475Smrg#endif
3383d522f475Smrg
3384d522f475Smrg#if OPT_SUN_FUNC_KEYS
3385d522f475Smrgvoid
3386d522f475Smrgupdate_sun_fkeys(void)
3387d522f475Smrg{
3388d522f475Smrg    UpdateCheckbox("update_sun_fkeys",
3389d522f475Smrg		   mainMenuEntries,
3390d522f475Smrg		   mainMenu_sun_fkeys,
3391d522f475Smrg		   term->keyboard.type == keyboardIsSun);
3392d522f475Smrg}
3393d522f475Smrg#endif
3394d522f475Smrg
3395d522f475Smrg#if OPT_TCAP_FKEYS
3396d522f475Smrgvoid
3397d522f475Smrgupdate_tcap_fkeys(void)
3398d522f475Smrg{
3399d522f475Smrg    UpdateCheckbox("update_tcap_fkeys",
3400d522f475Smrg		   mainMenuEntries,
3401d522f475Smrg		   mainMenu_tcap_fkeys,
3402d522f475Smrg		   term->keyboard.type == keyboardIsTermcap);
3403d522f475Smrg}
3404d522f475Smrg#endif
3405d522f475Smrg
3406d522f475Smrgvoid
3407d522f475Smrgupdate_old_fkeys(void)
3408d522f475Smrg{
3409d522f475Smrg    UpdateCheckbox("update_old_fkeys",
3410d522f475Smrg		   mainMenuEntries,
3411d522f475Smrg		   mainMenu_old_fkeys,
3412d522f475Smrg		   term->keyboard.type == keyboardIsLegacy);
3413d522f475Smrg}
3414d522f475Smrg
3415d522f475Smrgvoid
3416d522f475Smrgupdate_delete_del(void)
3417d522f475Smrg{
3418d522f475Smrg    UpdateCheckbox("update_delete_del",
3419d522f475Smrg		   mainMenuEntries,
3420d522f475Smrg		   mainMenu_delete_del,
3421d522f475Smrg		   xtermDeleteIsDEL(term));
3422d522f475Smrg}
3423d522f475Smrg
3424d522f475Smrg#if OPT_SUNPC_KBD
3425d522f475Smrgvoid
3426d522f475Smrgupdate_sun_kbd(void)
3427d522f475Smrg{
3428d522f475Smrg    UpdateCheckbox("update_sun_kbd",
3429d522f475Smrg		   mainMenuEntries,
3430d522f475Smrg		   mainMenu_sun_kbd,
3431d522f475Smrg		   term->keyboard.type == keyboardIsVT220);
3432d522f475Smrg}
3433d522f475Smrg#endif
3434d522f475Smrg
3435d522f475Smrg#if OPT_HP_FUNC_KEYS
3436d522f475Smrgvoid
3437d522f475Smrgupdate_hp_fkeys(void)
3438d522f475Smrg{
3439d522f475Smrg    UpdateCheckbox("update_hp_fkeys",
3440d522f475Smrg		   mainMenuEntries,
3441d522f475Smrg		   mainMenu_hp_fkeys,
3442d522f475Smrg		   term->keyboard.type == keyboardIsHP);
3443d522f475Smrg}
3444d522f475Smrg#endif
3445d522f475Smrg
3446d522f475Smrg#if OPT_SCO_FUNC_KEYS
3447d522f475Smrgvoid
3448d522f475Smrgupdate_sco_fkeys(void)
3449d522f475Smrg{
3450d522f475Smrg    UpdateCheckbox("update_sco_fkeys",
3451d522f475Smrg		   mainMenuEntries,
3452d522f475Smrg		   mainMenu_sco_fkeys,
3453d522f475Smrg		   term->keyboard.type == keyboardIsSCO);
3454d522f475Smrg}
3455d522f475Smrg#endif
3456d522f475Smrg
3457d522f475Smrgvoid
3458d522f475Smrgupdate_scrollbar(void)
3459d522f475Smrg{
3460d522f475Smrg    UpdateCheckbox("update_scrollbar",
3461d522f475Smrg		   vtMenuEntries,
3462d522f475Smrg		   vtMenu_scrollbar,
3463d522f475Smrg		   ScrollbarWidth(TScreenOf(term)));
3464d522f475Smrg}
3465d522f475Smrg
3466d522f475Smrgvoid
3467d522f475Smrgupdate_jumpscroll(void)
3468d522f475Smrg{
3469d522f475Smrg    UpdateCheckbox("update_jumpscroll",
3470d522f475Smrg		   vtMenuEntries,
3471d522f475Smrg		   vtMenu_jumpscroll,
347220d2c4d2Smrg		   TScreenOf(term)->jumpscroll);
3473d522f475Smrg}
3474d522f475Smrg
3475d522f475Smrgvoid
3476d522f475Smrgupdate_reversevideo(void)
3477d522f475Smrg{
3478d522f475Smrg    UpdateCheckbox("update_reversevideo",
3479d522f475Smrg		   vtMenuEntries,
3480d522f475Smrg		   vtMenu_reversevideo,
3481d522f475Smrg		   (term->misc.re_verse));
3482d522f475Smrg}
3483d522f475Smrg
3484d522f475Smrgvoid
3485d522f475Smrgupdate_autowrap(void)
3486d522f475Smrg{
3487d522f475Smrg    UpdateCheckbox("update_autowrap",
3488d522f475Smrg		   vtMenuEntries,
3489d522f475Smrg		   vtMenu_autowrap,
3490d522f475Smrg		   (term->flags & WRAPAROUND) != 0);
3491d522f475Smrg}
3492d522f475Smrg
3493d522f475Smrgvoid
3494d522f475Smrgupdate_reversewrap(void)
3495d522f475Smrg{
3496d522f475Smrg    UpdateCheckbox("update_reversewrap",
3497d522f475Smrg		   vtMenuEntries,
3498d522f475Smrg		   vtMenu_reversewrap,
3499d522f475Smrg		   (term->flags & REVERSEWRAP) != 0);
3500d522f475Smrg}
3501d522f475Smrg
3502d522f475Smrgvoid
3503d522f475Smrgupdate_autolinefeed(void)
3504d522f475Smrg{
3505d522f475Smrg    UpdateCheckbox("update_autolinefeed",
3506d522f475Smrg		   vtMenuEntries,
3507d522f475Smrg		   vtMenu_autolinefeed,
3508d522f475Smrg		   (term->flags & LINEFEED) != 0);
3509d522f475Smrg}
3510d522f475Smrg
3511d522f475Smrgvoid
3512d522f475Smrgupdate_appcursor(void)
3513d522f475Smrg{
3514d522f475Smrg    UpdateCheckbox("update_appcursor",
3515d522f475Smrg		   vtMenuEntries,
3516d522f475Smrg		   vtMenu_appcursor,
3517d522f475Smrg		   (term->keyboard.flags & MODE_DECCKM) != 0);
3518d522f475Smrg}
3519d522f475Smrg
3520d522f475Smrgvoid
3521d522f475Smrgupdate_appkeypad(void)
3522d522f475Smrg{
3523d522f475Smrg    UpdateCheckbox("update_appkeypad",
3524d522f475Smrg		   vtMenuEntries,
3525d522f475Smrg		   vtMenu_appkeypad,
3526d522f475Smrg		   (term->keyboard.flags & MODE_DECKPAM) != 0);
3527d522f475Smrg}
3528d522f475Smrg
3529d522f475Smrgvoid
3530d522f475Smrgupdate_scrollkey(void)
3531d522f475Smrg{
3532d522f475Smrg    UpdateCheckbox("update_scrollkey",
3533d522f475Smrg		   vtMenuEntries,
3534d522f475Smrg		   vtMenu_scrollkey,
353520d2c4d2Smrg		   TScreenOf(term)->scrollkey);
3536d522f475Smrg}
3537d522f475Smrg
3538d522f475Smrgvoid
3539d522f475Smrgupdate_scrollttyoutput(void)
3540d522f475Smrg{
3541d522f475Smrg    UpdateCheckbox("update_scrollttyoutput",
3542d522f475Smrg		   vtMenuEntries,
3543d522f475Smrg		   vtMenu_scrollttyoutput,
354420d2c4d2Smrg		   TScreenOf(term)->scrollttyoutput);
3545d522f475Smrg}
3546d522f475Smrg
3547d522f475Smrgvoid
3548d522f475Smrgupdate_keepSelection(void)
3549d522f475Smrg{
3550d522f475Smrg    UpdateCheckbox("update_keepSelection",
3551d522f475Smrg		   vtMenuEntries,
3552d522f475Smrg		   vtMenu_keepSelection,
355320d2c4d2Smrg		   TScreenOf(term)->keepSelection);
3554d522f475Smrg}
3555d522f475Smrg
3556d522f475Smrgvoid
3557d522f475Smrgupdate_selectToClipboard(void)
3558d522f475Smrg{
3559d522f475Smrg    UpdateCheckbox("update_selectToClipboard",
3560d522f475Smrg		   vtMenuEntries,
3561d522f475Smrg		   vtMenu_selectToClipboard,
356220d2c4d2Smrg		   TScreenOf(term)->selectToClipboard);
3563d522f475Smrg}
3564d522f475Smrg
3565d522f475Smrgvoid
3566d522f475Smrgupdate_allow132(void)
3567d522f475Smrg{
3568d522f475Smrg    UpdateCheckbox("update_allow132",
3569d522f475Smrg		   vtMenuEntries,
3570d522f475Smrg		   vtMenu_allow132,
357120d2c4d2Smrg		   TScreenOf(term)->c132);
3572d522f475Smrg}
3573d522f475Smrg
3574d522f475Smrgvoid
3575d522f475Smrgupdate_cursesemul(void)
3576d522f475Smrg{
3577d522f475Smrg#if 0				/* 2006-2-12: no longer menu entry */
3578d522f475Smrg    UpdateMenuItem("update_cursesemul", vtMenuEntries, vtMenu_cursesemul,
357920d2c4d2Smrg		   TScreenOf(term)->curses);
3580d522f475Smrg#endif
3581d522f475Smrg}
3582d522f475Smrg
3583d522f475Smrgvoid
3584d522f475Smrgupdate_visualbell(void)
3585d522f475Smrg{
3586d522f475Smrg    UpdateCheckbox("update_visualbell",
3587d522f475Smrg		   vtMenuEntries,
3588d522f475Smrg		   vtMenu_visualbell,
358920d2c4d2Smrg		   TScreenOf(term)->visualbell);
3590d522f475Smrg}
3591d522f475Smrg
3592d522f475Smrgvoid
3593d522f475Smrgupdate_bellIsUrgent(void)
3594d522f475Smrg{
3595d522f475Smrg    UpdateCheckbox("update_bellIsUrgent",
3596d522f475Smrg		   vtMenuEntries,
3597d522f475Smrg		   vtMenu_bellIsUrgent,
359820d2c4d2Smrg		   TScreenOf(term)->bellIsUrgent);
3599d522f475Smrg}
3600d522f475Smrg
3601d522f475Smrgvoid
3602d522f475Smrgupdate_poponbell(void)
3603d522f475Smrg{
3604d522f475Smrg    UpdateCheckbox("update_poponbell",
3605d522f475Smrg		   vtMenuEntries,
3606d522f475Smrg		   vtMenu_poponbell,
360720d2c4d2Smrg		   TScreenOf(term)->poponbell);
3608d522f475Smrg}
3609d522f475Smrg
3610d522f475Smrg#ifndef update_marginbell	/* 2007-3-7: no longer menu entry */
3611d522f475Smrgvoid
3612d522f475Smrgupdate_marginbell(void)
3613d522f475Smrg{
3614d522f475Smrg    UpdateCheckbox("update_marginbell",
3615d522f475Smrg		   vtMenuEntries,
3616d522f475Smrg		   vtMenu_marginbell,
361720d2c4d2Smrg		   TScreenOf(term)->marginbell);
3618d522f475Smrg}
3619d522f475Smrg#endif
3620d522f475Smrg
3621d522f475Smrg#if OPT_BLINK_CURS
3622d522f475Smrgvoid
3623d522f475Smrgupdate_cursorblink(void)
3624d522f475Smrg{
3625d522f475Smrg    UpdateCheckbox("update_cursorblink",
3626d522f475Smrg		   vtMenuEntries,
3627d522f475Smrg		   vtMenu_cursorblink,
362820d2c4d2Smrg		   TScreenOf(term)->cursor_blink);
3629d522f475Smrg}
3630d522f475Smrg#endif
3631d522f475Smrg
3632d522f475Smrgvoid
3633d522f475Smrgupdate_altscreen(void)
3634d522f475Smrg{
3635d522f475Smrg    UpdateCheckbox("update_altscreen",
3636d522f475Smrg		   vtMenuEntries,
3637d522f475Smrg		   vtMenu_altscreen,
363820d2c4d2Smrg		   TScreenOf(term)->whichBuf);
3639d522f475Smrg}
3640d522f475Smrg
3641d522f475Smrgvoid
3642d522f475Smrgupdate_titeInhibit(void)
3643d522f475Smrg{
3644d522f475Smrg    UpdateCheckbox("update_titeInhibit",
3645d522f475Smrg		   vtMenuEntries,
3646d522f475Smrg		   vtMenu_titeInhibit,
3647d522f475Smrg		   !(term->misc.titeInhibit));
3648d522f475Smrg}
3649d522f475Smrg
3650d522f475Smrg#ifndef NO_ACTIVE_ICON
3651d522f475Smrgvoid
3652d522f475Smrgupdate_activeicon(void)
3653d522f475Smrg{
3654d522f475Smrg    UpdateCheckbox("update_activeicon",
3655d522f475Smrg		   vtMenuEntries,
3656d522f475Smrg		   vtMenu_activeicon,
36570bd37d32Smrg		   term->work.active_icon);
3658d522f475Smrg}
3659d522f475Smrg#endif /* NO_ACTIVE_ICON */
3660d522f475Smrg
3661e39b573cSmrgstatic void
3662e39b573cSmrgdo_allowBoldFonts(Widget w,
3663e39b573cSmrg		  XtPointer closure GCC_UNUSED,
3664e39b573cSmrg		  XtPointer data GCC_UNUSED)
3665e39b573cSmrg{
3666e39b573cSmrg    XtermWidget xw = getXtermWidget(w);
3667e39b573cSmrg    if (xw != 0) {
3668e39b573cSmrg	ToggleFlag(TScreenOf(xw)->allowBoldFonts);
3669e39b573cSmrg	update_menu_allowBoldFonts();
3670e39b573cSmrg	Redraw();
3671e39b573cSmrg    }
3672e39b573cSmrg}
3673e39b573cSmrg
3674d522f475Smrg#if OPT_DEC_CHRSET
3675d522f475Smrgvoid
3676d522f475Smrgupdate_font_doublesize(void)
3677d522f475Smrg{
3678d522f475Smrg    UpdateCheckbox("update_font_doublesize",
3679d522f475Smrg		   fontMenuEntries,
3680d522f475Smrg		   fontMenu_font_doublesize,
368120d2c4d2Smrg		   TScreenOf(term)->font_doublesize);
3682d522f475Smrg}
3683d522f475Smrg#endif
3684d522f475Smrg
3685d522f475Smrg#if OPT_BOX_CHARS
3686d522f475Smrgvoid
3687d522f475Smrgupdate_font_boxchars(void)
3688d522f475Smrg{
3689d522f475Smrg    UpdateCheckbox("update_font_boxchars",
3690d522f475Smrg		   fontMenuEntries,
3691d522f475Smrg		   fontMenu_font_boxchars,
369220d2c4d2Smrg		   TScreenOf(term)->force_box_chars);
369320d2c4d2Smrg}
369420d2c4d2Smrg
369520d2c4d2Smrgvoid
369620d2c4d2Smrgupdate_font_packed(void)
369720d2c4d2Smrg{
369820d2c4d2Smrg    UpdateCheckbox("update_font_packed",
369920d2c4d2Smrg		   fontMenuEntries,
370020d2c4d2Smrg		   fontMenu_font_packedfont,
370120d2c4d2Smrg		   TScreenOf(term)->force_packed);
3702d522f475Smrg}
3703d522f475Smrg#endif
3704d522f475Smrg
3705d522f475Smrg#if OPT_DEC_SOFTFONT
3706d522f475Smrgvoid
3707d522f475Smrgupdate_font_loadable(void)
3708d522f475Smrg{
3709d522f475Smrg    UpdateCheckbox("update_font_loadable",
3710d522f475Smrg		   fontMenuEntries,
3711d522f475Smrg		   fontMenu_font_loadable,
3712d522f475Smrg		   term->misc.font_loadable);
3713d522f475Smrg}
3714d522f475Smrg#endif
3715d522f475Smrg
3716d522f475Smrg#if OPT_RENDERFONT
3717d522f475Smrgvoid
3718d522f475Smrgupdate_font_renderfont(void)
3719d522f475Smrg{
3720d522f475Smrg    UpdateCheckbox("update_font_renderfont",
3721d522f475Smrg		   fontMenuEntries,
3722d522f475Smrg		   fontMenu_render_font,
37230bd37d32Smrg		   (term->work.render_font == True));
372420d2c4d2Smrg    SetItemSensitivity(fontMenuEntries[fontMenu_render_font].widget,
372520d2c4d2Smrg		       !IsEmpty(term->misc.face_name));
37260bd37d32Smrg    update_fontmenu(term);
3727d522f475Smrg}
3728d522f475Smrg#endif
3729d522f475Smrg
3730d522f475Smrg#if OPT_WIDE_CHARS
3731d522f475Smrgvoid
3732d522f475Smrgupdate_font_utf8_mode(void)
3733d522f475Smrg{
373420d2c4d2Smrg    Bool active = (TScreenOf(term)->utf8_mode != uAlways);
373520d2c4d2Smrg    Bool enable = (TScreenOf(term)->utf8_mode != uFalse);
3736d522f475Smrg
3737d522f475Smrg    TRACE(("update_font_utf8_mode active %d, enable %d\n", active, enable));
3738e39b573cSmrg    SetItemSensitivity(fontMenuEntries[fontMenu_utf8_mode].widget, active);
3739d522f475Smrg    UpdateCheckbox("update_font_utf8_mode",
3740d522f475Smrg		   fontMenuEntries,
3741e39b573cSmrg		   fontMenu_utf8_mode,
3742e39b573cSmrg		   enable);
3743e39b573cSmrg}
3744e39b573cSmrg
3745e39b573cSmrgvoid
3746e39b573cSmrgupdate_font_utf8_fonts(void)
3747e39b573cSmrg{
3748e39b573cSmrg    Bool active = (TScreenOf(term)->utf8_fonts != uAlways);
3749e39b573cSmrg    Bool enable = (TScreenOf(term)->utf8_fonts != uFalse);
3750e39b573cSmrg
3751e39b573cSmrg    TRACE(("update_font_utf8_fonts active %d, enable %d\n", active, enable));
3752e39b573cSmrg    SetItemSensitivity(fontMenuEntries[fontMenu_utf8_fonts].widget, active);
3753e39b573cSmrg    UpdateCheckbox("update_font_utf8_fonts",
3754e39b573cSmrg		   fontMenuEntries,
3755e39b573cSmrg		   fontMenu_utf8_fonts,
3756d522f475Smrg		   enable);
3757d522f475Smrg}
3758d522f475Smrg
3759d522f475Smrgvoid
3760d522f475Smrgupdate_font_utf8_title(void)
3761d522f475Smrg{
376220d2c4d2Smrg    Bool active = (TScreenOf(term)->utf8_mode != uFalse);
376320d2c4d2Smrg    Bool enable = (TScreenOf(term)->utf8_title);
3764d522f475Smrg
3765d522f475Smrg    TRACE(("update_font_utf8_title active %d, enable %d\n", active, enable));
3766e39b573cSmrg    SetItemSensitivity(fontMenuEntries[fontMenu_utf8_title].widget, active);
3767d522f475Smrg    UpdateCheckbox("update_font_utf8_title",
3768d522f475Smrg		   fontMenuEntries,
3769e39b573cSmrg		   fontMenu_utf8_title,
3770d522f475Smrg		   enable);
3771d522f475Smrg}
3772d522f475Smrg#endif
3773d522f475Smrg
37740bd37d32Smrg#if OPT_DEC_CHRSET || OPT_BOX_CHARS || OPT_DEC_SOFTFONT
3775e39b573cSmrgvoid
3776e39b573cSmrgupdate_menu_allowBoldFonts(void)
3777e39b573cSmrg{
3778e39b573cSmrg    UpdateCheckbox("update_menu_allowBoldFonts",
3779e39b573cSmrg		   fontMenuEntries,
3780e39b573cSmrg		   fontMenu_allowBoldFonts,
3781e39b573cSmrg		   TScreenOf(term)->allowBoldFonts);
3782e39b573cSmrg}
37830bd37d32Smrg#endif
3784e39b573cSmrg
3785956cc18dSsnj#if OPT_ALLOW_XXX_OPS
3786956cc18dSsnjstatic void
3787956cc18dSsnjenable_allow_xxx_ops(Bool enable)
3788956cc18dSsnj{
3789956cc18dSsnj    SetItemSensitivity(fontMenuEntries[fontMenu_allowFontOps].widget, enable);
3790956cc18dSsnj    SetItemSensitivity(fontMenuEntries[fontMenu_allowTcapOps].widget, enable);
3791956cc18dSsnj    SetItemSensitivity(fontMenuEntries[fontMenu_allowTitleOps].widget, enable);
3792956cc18dSsnj    SetItemSensitivity(fontMenuEntries[fontMenu_allowWindowOps].widget, enable);
3793956cc18dSsnj}
3794956cc18dSsnj
379520d2c4d2Smrgstatic void
379620d2c4d2Smrgdo_allowColorOps(Widget w,
379720d2c4d2Smrg		 XtPointer closure GCC_UNUSED,
379820d2c4d2Smrg		 XtPointer data GCC_UNUSED)
379920d2c4d2Smrg{
380020d2c4d2Smrg    XtermWidget xw = getXtermWidget(w);
380120d2c4d2Smrg    if (xw != 0) {
380220d2c4d2Smrg	ToggleFlag(TScreenOf(xw)->allowColorOps);
380320d2c4d2Smrg	update_menu_allowColorOps();
380420d2c4d2Smrg    }
380520d2c4d2Smrg}
380620d2c4d2Smrg
3807956cc18dSsnjstatic void
3808956cc18dSsnjdo_allowFontOps(Widget w,
3809956cc18dSsnj		XtPointer closure GCC_UNUSED,
3810956cc18dSsnj		XtPointer data GCC_UNUSED)
3811956cc18dSsnj{
3812956cc18dSsnj    XtermWidget xw = getXtermWidget(w);
3813956cc18dSsnj    if (xw != 0) {
381420d2c4d2Smrg	ToggleFlag(TScreenOf(xw)->allowFontOps);
3815956cc18dSsnj	update_menu_allowFontOps();
3816956cc18dSsnj    }
3817956cc18dSsnj}
3818956cc18dSsnj
3819956cc18dSsnjstatic void
3820956cc18dSsnjdo_allowTcapOps(Widget w,
3821956cc18dSsnj		XtPointer closure GCC_UNUSED,
3822956cc18dSsnj		XtPointer data GCC_UNUSED)
3823956cc18dSsnj{
3824956cc18dSsnj    XtermWidget xw = getXtermWidget(w);
3825956cc18dSsnj    if (xw != 0) {
382620d2c4d2Smrg	ToggleFlag(TScreenOf(xw)->allowTcapOps);
3827956cc18dSsnj	update_menu_allowTcapOps();
3828956cc18dSsnj    }
3829956cc18dSsnj}
3830956cc18dSsnj
3831956cc18dSsnjstatic void
3832956cc18dSsnjdo_allowTitleOps(Widget w,
3833956cc18dSsnj		 XtPointer closure GCC_UNUSED,
3834956cc18dSsnj		 XtPointer data GCC_UNUSED)
3835956cc18dSsnj{
3836956cc18dSsnj    XtermWidget xw = getXtermWidget(w);
3837956cc18dSsnj    if (xw != 0) {
383820d2c4d2Smrg	ToggleFlag(TScreenOf(xw)->allowTitleOps);
3839956cc18dSsnj	update_menu_allowTitleOps();
3840956cc18dSsnj    }
3841956cc18dSsnj}
3842956cc18dSsnj
3843956cc18dSsnjstatic void
3844956cc18dSsnjdo_allowWindowOps(Widget w,
3845956cc18dSsnj		  XtPointer closure GCC_UNUSED,
3846956cc18dSsnj		  XtPointer data GCC_UNUSED)
3847956cc18dSsnj{
3848956cc18dSsnj    XtermWidget xw = getXtermWidget(w);
3849956cc18dSsnj    if (xw != 0) {
385020d2c4d2Smrg	ToggleFlag(TScreenOf(xw)->allowWindowOps);
3851956cc18dSsnj	update_menu_allowWindowOps();
3852956cc18dSsnj    }
3853956cc18dSsnj}
3854956cc18dSsnj
385520d2c4d2Smrgvoid
385620d2c4d2SmrgHandleAllowColorOps(Widget w,
3857894e0ac8Smrg		    XEvent *event GCC_UNUSED,
3858894e0ac8Smrg		    String *params,
385920d2c4d2Smrg		    Cardinal *param_count)
386020d2c4d2Smrg{
386120d2c4d2Smrg    HANDLE_VT_TOGGLE(allowColorOps);
386220d2c4d2Smrg}
386320d2c4d2Smrg
3864956cc18dSsnjvoid
3865956cc18dSsnjHandleAllowFontOps(Widget w,
3866894e0ac8Smrg		   XEvent *event GCC_UNUSED,
3867894e0ac8Smrg		   String *params,
3868956cc18dSsnj		   Cardinal *param_count)
3869956cc18dSsnj{
387020d2c4d2Smrg    HANDLE_VT_TOGGLE(allowFontOps);
3871956cc18dSsnj}
3872956cc18dSsnj
3873956cc18dSsnjvoid
3874956cc18dSsnjHandleAllowTcapOps(Widget w,
3875894e0ac8Smrg		   XEvent *event GCC_UNUSED,
3876894e0ac8Smrg		   String *params,
3877956cc18dSsnj		   Cardinal *param_count)
3878956cc18dSsnj{
387920d2c4d2Smrg    HANDLE_VT_TOGGLE(allowTcapOps);
3880956cc18dSsnj}
3881956cc18dSsnj
3882956cc18dSsnjvoid
3883956cc18dSsnjHandleAllowTitleOps(Widget w,
3884894e0ac8Smrg		    XEvent *event GCC_UNUSED,
3885894e0ac8Smrg		    String *params,
3886956cc18dSsnj		    Cardinal *param_count)
3887956cc18dSsnj{
388820d2c4d2Smrg    HANDLE_VT_TOGGLE(allowTitleOps);
3889956cc18dSsnj}
3890956cc18dSsnj
3891956cc18dSsnjvoid
3892956cc18dSsnjHandleAllowWindowOps(Widget w,
3893894e0ac8Smrg		     XEvent *event GCC_UNUSED,
3894894e0ac8Smrg		     String *params,
3895956cc18dSsnj		     Cardinal *param_count)
3896956cc18dSsnj{
389720d2c4d2Smrg    HANDLE_VT_TOGGLE(allowWindowOps);
3898956cc18dSsnj}
3899956cc18dSsnj
3900956cc18dSsnjvoid
390120d2c4d2Smrgupdate_menu_allowColorOps(void)
3902956cc18dSsnj{
390320d2c4d2Smrg    UpdateCheckbox("update_menu_allowColorOps",
3904956cc18dSsnj		   fontMenuEntries,
390520d2c4d2Smrg		   fontMenu_allowColorOps,
390620d2c4d2Smrg		   TScreenOf(term)->allowColorOps);
3907956cc18dSsnj}
3908956cc18dSsnj
3909956cc18dSsnjvoid
3910956cc18dSsnjupdate_menu_allowFontOps(void)
3911956cc18dSsnj{
3912956cc18dSsnj    UpdateCheckbox("update_menu_allowFontOps",
3913956cc18dSsnj		   fontMenuEntries,
3914956cc18dSsnj		   fontMenu_allowFontOps,
391520d2c4d2Smrg		   TScreenOf(term)->allowFontOps);
391620d2c4d2Smrg}
391720d2c4d2Smrg
391820d2c4d2Smrgvoid
391920d2c4d2Smrgupdate_menu_allowTcapOps(void)
392020d2c4d2Smrg{
392120d2c4d2Smrg    UpdateCheckbox("update_menu_allowTcapOps",
392220d2c4d2Smrg		   fontMenuEntries,
392320d2c4d2Smrg		   fontMenu_allowTcapOps,
392420d2c4d2Smrg		   TScreenOf(term)->allowTcapOps);
3925956cc18dSsnj}
3926956cc18dSsnj
3927956cc18dSsnjvoid
3928956cc18dSsnjupdate_menu_allowTitleOps(void)
3929956cc18dSsnj{
3930956cc18dSsnj    UpdateCheckbox("update_menu_allowTitleOps",
3931956cc18dSsnj		   fontMenuEntries,
3932956cc18dSsnj		   fontMenu_allowTitleOps,
393320d2c4d2Smrg		   TScreenOf(term)->allowTitleOps);
3934956cc18dSsnj}
3935956cc18dSsnj
3936956cc18dSsnjvoid
3937956cc18dSsnjupdate_menu_allowWindowOps(void)
3938956cc18dSsnj{
3939956cc18dSsnj    UpdateCheckbox("update_menu_allowWindowOps",
3940956cc18dSsnj		   fontMenuEntries,
3941956cc18dSsnj		   fontMenu_allowWindowOps,
394220d2c4d2Smrg		   TScreenOf(term)->allowWindowOps);
3943956cc18dSsnj}
3944956cc18dSsnj#endif
3945956cc18dSsnj
3946d522f475Smrg#if OPT_TEK4014
3947d522f475Smrgvoid
3948d522f475Smrgupdate_tekshow(void)
3949d522f475Smrg{
395020d2c4d2Smrg    if (!(TScreenOf(term)->inhibit & I_TEK)) {
3951d522f475Smrg	UpdateCheckbox("update_tekshow",
3952d522f475Smrg		       vtMenuEntries,
3953d522f475Smrg		       vtMenu_tekshow,
3954d522f475Smrg		       TEK4014_SHOWN(term));
3955d522f475Smrg    }
3956d522f475Smrg}
3957d522f475Smrg
3958d522f475Smrgvoid
3959d522f475Smrgupdate_vttekmode(void)
3960d522f475Smrg{
39610bd37d32Smrg    XtermWidget xw = term;
39620bd37d32Smrg
39630bd37d32Smrg    if (!(TScreenOf(xw)->inhibit & I_TEK)) {
3964d522f475Smrg	UpdateCheckbox("update_vtmode",
3965d522f475Smrg		       vtMenuEntries,
3966d522f475Smrg		       vtMenu_tekmode,
39670bd37d32Smrg		       TEK4014_ACTIVE(xw));
3968d522f475Smrg	UpdateCheckbox("update_tekmode",
3969d522f475Smrg		       tekMenuEntries,
3970d522f475Smrg		       tekMenu_vtmode,
39710bd37d32Smrg		       !TEK4014_ACTIVE(xw));
39720bd37d32Smrg	update_fullscreen();
3973d522f475Smrg    }
3974d522f475Smrg}
3975d522f475Smrg
3976d522f475Smrgvoid
3977d522f475Smrgupdate_vtshow(void)
3978d522f475Smrg{
397920d2c4d2Smrg    if (!(TScreenOf(term)->inhibit & I_TEK)) {
3980d522f475Smrg	UpdateCheckbox("update_vtshow",
3981d522f475Smrg		       tekMenuEntries,
3982d522f475Smrg		       tekMenu_vtshow,
398320d2c4d2Smrg		       TScreenOf(term)->Vshow);
3984d522f475Smrg    }
3985d522f475Smrg}
3986d522f475Smrg
3987d522f475Smrgvoid
3988d522f475Smrgset_vthide_sensitivity(void)
3989d522f475Smrg{
399020d2c4d2Smrg    if (!(TScreenOf(term)->inhibit & I_TEK)) {
3991d522f475Smrg	SetItemSensitivity(
3992d522f475Smrg			      vtMenuEntries[vtMenu_vthide].widget,
3993d522f475Smrg			      TEK4014_SHOWN(term));
3994d522f475Smrg    }
3995d522f475Smrg}
3996d522f475Smrg
3997d522f475Smrgvoid
3998d522f475Smrgset_tekhide_sensitivity(void)
3999d522f475Smrg{
400020d2c4d2Smrg    if (!(TScreenOf(term)->inhibit & I_TEK)) {
4001d522f475Smrg	SetItemSensitivity(
4002d522f475Smrg			      tekMenuEntries[tekMenu_tekhide].widget,
400320d2c4d2Smrg			      TScreenOf(term)->Vshow);
4004d522f475Smrg    }
4005d522f475Smrg}
4006d522f475Smrg
4007d522f475Smrgvoid
4008d522f475Smrgset_tekfont_menu_item(int n, int val)
4009d522f475Smrg{
401020d2c4d2Smrg    if (!(TScreenOf(term)->inhibit & I_TEK)) {
4011d522f475Smrg	UpdateCheckbox("set_tekfont_menu_item", tekMenuEntries, FS2MI(n),
4012d522f475Smrg		       (val));
4013d522f475Smrg    }
4014d522f475Smrg}
4015d522f475Smrg#endif /* OPT_TEK4014 */
4016d522f475Smrg
4017d522f475Smrgvoid
4018d522f475Smrgset_menu_font(int val)
4019d522f475Smrg{
4020d522f475Smrg    UpdateCheckbox("set_menu_font",
4021d522f475Smrg		   fontMenuEntries,
402220d2c4d2Smrg		   TScreenOf(term)->menu_font_number,
4023d522f475Smrg		   (val));
4024d522f475Smrg}
4025