menu.c revision 913cc679
1913cc679Smrg/* $XTermId: menu.c,v 1.344 2017/01/02 23:46:03 tom Exp $ */ 2d522f475Smrg 3d522f475Smrg/* 4913cc679Smrg * Copyright 1999-2016,2017 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; 199913cc679Smrgstatic void do_allowMouseOps PROTO_XT_CALLBACK_ARGS; 20020d2c4d2Smrgstatic void do_allowTcapOps PROTO_XT_CALLBACK_ARGS; 201956cc18dSsnjstatic void do_allowTitleOps PROTO_XT_CALLBACK_ARGS; 202956cc18dSsnjstatic void do_allowWindowOps PROTO_XT_CALLBACK_ARGS; 203956cc18dSsnj#endif 204956cc18dSsnj 205d522f475Smrg#if OPT_BLINK_CURS 206d522f475Smrgstatic void do_cursorblink PROTO_XT_CALLBACK_ARGS; 207d522f475Smrg#endif 208d522f475Smrg 209d522f475Smrg#if OPT_BOX_CHARS 210d522f475Smrgstatic void do_font_boxchars PROTO_XT_CALLBACK_ARGS; 21120d2c4d2Smrgstatic void do_font_packed PROTO_XT_CALLBACK_ARGS; 212d522f475Smrg#endif 213d522f475Smrg 214d522f475Smrg#if OPT_DEC_CHRSET 215d522f475Smrgstatic void do_font_doublesize PROTO_XT_CALLBACK_ARGS; 216d522f475Smrg#endif 217d522f475Smrg 218d522f475Smrg#if OPT_DEC_SOFTFONT 219d522f475Smrgstatic void do_font_loadable PROTO_XT_CALLBACK_ARGS; 220d522f475Smrg#endif 221d522f475Smrg 222d522f475Smrg#if OPT_HP_FUNC_KEYS 223d522f475Smrgstatic void do_hp_fkeys PROTO_XT_CALLBACK_ARGS; 224d522f475Smrg#endif 225d522f475Smrg 226a1f3da82Smrg#if OPT_MAXIMIZE 227a1f3da82Smrgstatic void do_fullscreen PROTO_XT_CALLBACK_ARGS; 228a1f3da82Smrg#endif 229a1f3da82Smrg 230d522f475Smrg#if OPT_NUM_LOCK 231d522f475Smrgstatic void do_alt_esc PROTO_XT_CALLBACK_ARGS; 232d522f475Smrgstatic void do_num_lock PROTO_XT_CALLBACK_ARGS; 233d522f475Smrgstatic void do_meta_esc PROTO_XT_CALLBACK_ARGS; 234d522f475Smrg#endif 235d522f475Smrg 236e39b573cSmrg#if OPT_PRINT_ON_EXIT 237e39b573cSmrgstatic void do_write_now PROTO_XT_CALLBACK_ARGS; 238e39b573cSmrgstatic void do_write_error PROTO_XT_CALLBACK_ARGS; 239e39b573cSmrg#endif 240e39b573cSmrg 241d522f475Smrg#if OPT_RENDERFONT 242d522f475Smrgstatic void do_font_renderfont PROTO_XT_CALLBACK_ARGS; 243d522f475Smrg#endif 244d522f475Smrg 245d522f475Smrg#if OPT_SCO_FUNC_KEYS 246d522f475Smrgstatic void do_sco_fkeys PROTO_XT_CALLBACK_ARGS; 247d522f475Smrg#endif 248d522f475Smrg 249e0a2b6dfSmrg#if OPT_SIXEL_GRAPHICS 250e0a2b6dfSmrgstatic void do_sixelscrolling PROTO_XT_CALLBACK_ARGS; 251e0a2b6dfSmrg#endif 252e0a2b6dfSmrg 253894e0ac8Smrg#if OPT_GRAPHICS 254894e0ac8Smrgstatic void do_privatecolorregisters PROTO_XT_CALLBACK_ARGS; 255894e0ac8Smrg#endif 256894e0ac8Smrg 257d522f475Smrg#if OPT_SUN_FUNC_KEYS 258d522f475Smrgstatic void do_sun_fkeys PROTO_XT_CALLBACK_ARGS; 259d522f475Smrg#endif 260d522f475Smrg 261d522f475Smrg#if OPT_SUNPC_KBD 262d522f475Smrgstatic void do_sun_kbd PROTO_XT_CALLBACK_ARGS; 263d522f475Smrg#endif 264d522f475Smrg 265d522f475Smrg#if OPT_TCAP_FKEYS 266d522f475Smrgstatic void do_tcap_fkeys PROTO_XT_CALLBACK_ARGS; 267d522f475Smrg#endif 268d522f475Smrg 269d522f475Smrg#if OPT_TEK4014 270d522f475Smrgstatic void do_tekcopy PROTO_XT_CALLBACK_ARGS; 271d522f475Smrgstatic void do_tekhide PROTO_XT_CALLBACK_ARGS; 272d522f475Smrgstatic void do_tekmode PROTO_XT_CALLBACK_ARGS; 273d522f475Smrgstatic void do_tekonoff PROTO_XT_CALLBACK_ARGS; 274d522f475Smrgstatic void do_tekpage PROTO_XT_CALLBACK_ARGS; 275d522f475Smrgstatic void do_tekreset PROTO_XT_CALLBACK_ARGS; 276d522f475Smrgstatic void do_tekshow PROTO_XT_CALLBACK_ARGS; 277d522f475Smrgstatic void do_tektext2 PROTO_XT_CALLBACK_ARGS; 278d522f475Smrgstatic void do_tektext3 PROTO_XT_CALLBACK_ARGS; 279d522f475Smrgstatic void do_tektextlarge PROTO_XT_CALLBACK_ARGS; 280d522f475Smrgstatic void do_tektextsmall PROTO_XT_CALLBACK_ARGS; 281d522f475Smrgstatic void do_vthide PROTO_XT_CALLBACK_ARGS; 282d522f475Smrgstatic void do_vtmode PROTO_XT_CALLBACK_ARGS; 283d522f475Smrgstatic void do_vtonoff PROTO_XT_CALLBACK_ARGS; 284d522f475Smrgstatic void do_vtshow PROTO_XT_CALLBACK_ARGS; 285d522f475Smrgstatic void handle_tekshow (Widget gw, Bool allowswitch); 286d522f475Smrgstatic void handle_vtshow (Widget gw, Bool allowswitch); 287d522f475Smrg#endif 288d522f475Smrg 289d522f475Smrg#if OPT_TOOLBAR 290d522f475Smrgstatic void do_toolbar PROTO_XT_CALLBACK_ARGS; 291d522f475Smrg#endif 292d522f475Smrg 293d522f475Smrg#if OPT_WIDE_CHARS 294d522f475Smrgstatic void do_font_utf8_mode PROTO_XT_CALLBACK_ARGS; 295e39b573cSmrgstatic void do_font_utf8_fonts PROTO_XT_CALLBACK_ARGS; 296d522f475Smrgstatic void do_font_utf8_title PROTO_XT_CALLBACK_ARGS; 297d522f475Smrg#endif 298d522f475Smrg 299d522f475Smrg/* 300d522f475Smrg * The order of entries MUST match the values given in menu.h 301d522f475Smrg */ 302d522f475SmrgMenuEntry mainMenuEntries[] = { 303d522f475Smrg#if OPT_TOOLBAR 304d522f475Smrg { "toolbar", do_toolbar, NULL }, 305a1f3da82Smrg#endif 306a1f3da82Smrg#if OPT_MAXIMIZE 307a1f3da82Smrg { "fullscreen", do_fullscreen, NULL }, 308d522f475Smrg#endif 309d522f475Smrg { "securekbd", do_securekbd, NULL }, 310d522f475Smrg { "allowsends", do_allowsends, NULL }, 311d522f475Smrg { "redraw", do_redraw, NULL }, 312d522f475Smrg { "line1", NULL, NULL }, 313d522f475Smrg#ifdef ALLOWLOGGING 314d522f475Smrg { "logging", do_logging, NULL }, 315e39b573cSmrg#endif 316e39b573cSmrg#ifdef OPT_PRINT_ON_EXIT 317e39b573cSmrg { "print-immediate", do_write_now, NULL }, 318e39b573cSmrg { "print-on-error", do_write_error, NULL }, 319d522f475Smrg#endif 320d522f475Smrg { "print", do_print, NULL }, 321d522f475Smrg { "print-redir", do_print_redir, NULL }, 3222e4f8982Smrg#if OPT_SCREEN_DUMPS 3232e4f8982Smrg { "dump-html", do_dump_html, NULL }, 3242e4f8982Smrg { "dump-svg", do_dump_svg, NULL }, 3252e4f8982Smrg#endif 326d522f475Smrg { "line2", NULL, NULL }, 327d522f475Smrg { "8-bit control", do_8bit_control,NULL }, 328d522f475Smrg { "backarrow key", do_backarrow, NULL }, 329d522f475Smrg#if OPT_NUM_LOCK 330d522f475Smrg { "num-lock", do_num_lock, NULL }, 331d522f475Smrg { "alt-esc", do_alt_esc, NULL }, 332d522f475Smrg { "meta-esc", do_meta_esc, NULL }, 333d522f475Smrg#endif 334d522f475Smrg { "delete-is-del", do_delete_del, NULL }, 335d522f475Smrg { "oldFunctionKeys",do_old_fkeys, NULL }, 336d522f475Smrg#if OPT_TCAP_FKEYS 337d522f475Smrg { "tcapFunctionKeys",do_tcap_fkeys, NULL }, 338d522f475Smrg#endif 339d522f475Smrg#if OPT_HP_FUNC_KEYS 340d522f475Smrg { "hpFunctionKeys", do_hp_fkeys, NULL }, 341d522f475Smrg#endif 342d522f475Smrg#if OPT_SCO_FUNC_KEYS 343d522f475Smrg { "scoFunctionKeys",do_sco_fkeys, NULL }, 344d522f475Smrg#endif 345d522f475Smrg#if OPT_SUN_FUNC_KEYS 346d522f475Smrg { "sunFunctionKeys",do_sun_fkeys, NULL }, 347d522f475Smrg#endif 348d522f475Smrg#if OPT_SUNPC_KBD 349d522f475Smrg { "sunKeyboard", do_sun_kbd, NULL }, 350d522f475Smrg#endif 351d522f475Smrg { "line3", NULL, NULL }, 352d522f475Smrg { "suspend", do_suspend, NULL }, 353d522f475Smrg { "continue", do_continue, NULL }, 354d522f475Smrg { "interrupt", do_interrupt, NULL }, 355d522f475Smrg { "hangup", do_hangup, NULL }, 356d522f475Smrg { "terminate", do_terminate, NULL }, 357d522f475Smrg { "kill", do_kill, NULL }, 358d522f475Smrg { "line4", NULL, NULL }, 359d522f475Smrg { "quit", do_quit, NULL }}; 360d522f475Smrg 361d522f475SmrgMenuEntry vtMenuEntries[] = { 362d522f475Smrg { "scrollbar", do_scrollbar, NULL }, 363d522f475Smrg { "jumpscroll", do_jumpscroll, NULL }, 364d522f475Smrg { "reversevideo", do_reversevideo, NULL }, 365d522f475Smrg { "autowrap", do_autowrap, NULL }, 366d522f475Smrg { "reversewrap", do_reversewrap, NULL }, 367d522f475Smrg { "autolinefeed", do_autolinefeed, NULL }, 368d522f475Smrg { "appcursor", do_appcursor, NULL }, 369d522f475Smrg { "appkeypad", do_appkeypad, NULL }, 370d522f475Smrg { "scrollkey", do_scrollkey, NULL }, 371d522f475Smrg { "scrollttyoutput",do_scrollttyoutput, NULL }, 372d522f475Smrg { "allow132", do_allow132, NULL }, 373d522f475Smrg { "keepSelection", do_keepSelection, NULL }, 374d522f475Smrg { "selectToClipboard",do_selectClipboard, NULL }, 375d522f475Smrg { "visualbell", do_visualbell, NULL }, 376d522f475Smrg { "bellIsUrgent", do_bellIsUrgent, NULL }, 377d522f475Smrg { "poponbell", do_poponbell, NULL }, 378d522f475Smrg#if OPT_BLINK_CURS 379d522f475Smrg { "cursorblink", do_cursorblink, NULL }, 380d522f475Smrg#endif 381d522f475Smrg { "titeInhibit", do_titeInhibit, NULL }, 382d522f475Smrg#ifndef NO_ACTIVE_ICON 383d522f475Smrg { "activeicon", do_activeicon, NULL }, 384d522f475Smrg#endif /* NO_ACTIVE_ICON */ 385d522f475Smrg { "line1", NULL, NULL }, 386d522f475Smrg { "softreset", do_softreset, NULL }, 387d522f475Smrg { "hardreset", do_hardreset, NULL }, 388d522f475Smrg { "clearsavedlines",do_clearsavedlines, NULL }, 389d522f475Smrg { "line2", NULL, NULL }, 390d522f475Smrg#if OPT_TEK4014 391d522f475Smrg { "tekshow", do_tekshow, NULL }, 392d522f475Smrg { "tekmode", do_tekmode, NULL }, 393d522f475Smrg { "vthide", do_vthide, NULL }, 394d522f475Smrg#endif 395d522f475Smrg { "altscreen", do_altscreen, NULL }, 396e0a2b6dfSmrg#if OPT_SIXEL_GRAPHICS 397e0a2b6dfSmrg { "sixelScrolling", do_sixelscrolling, NULL }, 398894e0ac8Smrg#endif 399894e0ac8Smrg#if OPT_GRAPHICS 400e0a2b6dfSmrg { "privateColorRegisters", do_privatecolorregisters, NULL }, 401e0a2b6dfSmrg#endif 402d522f475Smrg }; 403d522f475Smrg 404d522f475SmrgMenuEntry fontMenuEntries[] = { 405d522f475Smrg { "fontdefault", do_vtfont, NULL }, 406d522f475Smrg { "font1", do_vtfont, NULL }, 407d522f475Smrg { "font2", do_vtfont, NULL }, 408d522f475Smrg { "font3", do_vtfont, NULL }, 409d522f475Smrg { "font4", do_vtfont, NULL }, 410d522f475Smrg { "font5", do_vtfont, NULL }, 411d522f475Smrg { "font6", do_vtfont, NULL }, 412d522f475Smrg /* this is after the last builtin font; the other entries are special */ 413d522f475Smrg { "fontescape", do_vtfont, NULL }, 414d522f475Smrg { "fontsel", do_vtfont, NULL }, 415d522f475Smrg /* down to here should match NMENUFONTS in ptyx.h */ 416d522f475Smrg 417d522f475Smrg#if OPT_DEC_CHRSET || OPT_BOX_CHARS || OPT_DEC_SOFTFONT 418d522f475Smrg { "line1", NULL, NULL }, 419e39b573cSmrg { "allow-bold-fonts", do_allowBoldFonts, NULL }, 420d522f475Smrg#if OPT_BOX_CHARS 421d522f475Smrg { "font-linedrawing",do_font_boxchars,NULL }, 42220d2c4d2Smrg { "font-packed", do_font_packed,NULL }, 423d522f475Smrg#endif 424d522f475Smrg#if OPT_DEC_CHRSET 425d522f475Smrg { "font-doublesize",do_font_doublesize,NULL }, 426d522f475Smrg#endif 427d522f475Smrg#if OPT_DEC_SOFTFONT 428d522f475Smrg { "font-loadable", do_font_loadable,NULL }, 429d522f475Smrg#endif 430d522f475Smrg#endif /* toggles for DEC font extensions */ 431d522f475Smrg 432d522f475Smrg#if OPT_RENDERFONT || OPT_WIDE_CHARS 433d522f475Smrg { "line2", NULL, NULL }, 434d522f475Smrg#if OPT_RENDERFONT 435d522f475Smrg { "render-font", do_font_renderfont,NULL }, 436d522f475Smrg#endif 437d522f475Smrg#if OPT_WIDE_CHARS 438d522f475Smrg { "utf8-mode", do_font_utf8_mode,NULL }, 439e39b573cSmrg { "utf8-fonts", do_font_utf8_fonts,NULL }, 440d522f475Smrg { "utf8-title", do_font_utf8_title,NULL }, 441d522f475Smrg#endif 442d522f475Smrg#endif /* toggles for other font extensions */ 443d522f475Smrg 444956cc18dSsnj#if OPT_ALLOW_XXX_OPS 445956cc18dSsnj { "line3", NULL, NULL }, 44620d2c4d2Smrg { "allow-color-ops",do_allowColorOps,NULL }, 447956cc18dSsnj { "allow-font-ops", do_allowFontOps,NULL }, 448913cc679Smrg { "allow-mouse-ops",do_allowMouseOps,NULL }, 44920d2c4d2Smrg { "allow-tcap-ops", do_allowTcapOps,NULL }, 450956cc18dSsnj { "allow-title-ops",do_allowTitleOps,NULL }, 451956cc18dSsnj { "allow-window-ops",do_allowWindowOps,NULL }, 452956cc18dSsnj#endif 453956cc18dSsnj 454d522f475Smrg }; 455d522f475Smrg 456d522f475Smrg#if OPT_TEK4014 457d522f475SmrgMenuEntry tekMenuEntries[] = { 458d522f475Smrg { "tektextlarge", do_tektextlarge, NULL }, 459d522f475Smrg { "tektext2", do_tektext2, NULL }, 460d522f475Smrg { "tektext3", do_tektext3, NULL }, 461d522f475Smrg { "tektextsmall", do_tektextsmall, NULL }, 462d522f475Smrg { "line1", NULL, NULL }, 463d522f475Smrg { "tekpage", do_tekpage, NULL }, 464d522f475Smrg { "tekreset", do_tekreset, NULL }, 465d522f475Smrg { "tekcopy", do_tekcopy, NULL }, 466d522f475Smrg { "line2", NULL, NULL }, 467d522f475Smrg { "vtshow", do_vtshow, NULL }, 468d522f475Smrg { "vtmode", do_vtmode, NULL }, 469d522f475Smrg { "tekhide", do_tekhide, NULL }}; 470d522f475Smrg#endif 471d522f475Smrg 472d522f475Smrgtypedef struct { 473d522f475Smrg char *internal_name; 474d522f475Smrg MenuEntry *entry_list; 475d522f475Smrg Cardinal entry_len; 476d522f475Smrg} MenuHeader; 477d522f475Smrg 478d522f475Smrg /* This table is ordered to correspond with MenuIndex */ 47901037d57Smrgstatic const MenuHeader menu_names[] = { 480d522f475Smrg { "mainMenu", mainMenuEntries, XtNumber(mainMenuEntries) }, 481d522f475Smrg { "vtMenu", vtMenuEntries, XtNumber(vtMenuEntries) }, 482d522f475Smrg { "fontMenu", fontMenuEntries, XtNumber(fontMenuEntries) }, 483d522f475Smrg#if OPT_TEK4014 484d522f475Smrg { "tekMenu", tekMenuEntries, XtNumber(tekMenuEntries) }, 485d522f475Smrg#endif 486d522f475Smrg { 0, 0, 0 }, 487d522f475Smrg}; 488d522f475Smrg/* *INDENT-ON* */ 489d522f475Smrg 490d522f475Smrg/* 491d522f475Smrg * FIXME: These are global data rather than in the xterm widget because they 492d522f475Smrg * are initialized before the widget is created. 493d522f475Smrg */ 494d522f475Smrgtypedef struct { 495d522f475Smrg Widget b; /* the toolbar's buttons */ 496d522f475Smrg Widget w; /* the popup shell activated by the button */ 497d522f475Smrg Cardinal entries; 498d522f475Smrg} MenuList; 499d522f475Smrg 500d522f475Smrgstatic MenuList vt_shell[NUM_POPUP_MENUS]; 501d522f475Smrg 502d522f475Smrg#if OPT_TEK4014 && OPT_TOOLBAR 503d522f475Smrgstatic MenuList tek_shell[NUM_POPUP_MENUS]; 504d522f475Smrg#endif 505d522f475Smrg 506d522f475Smrgstatic String 507d522f475SmrgsetMenuLocale(Bool before, String substitute) 508d522f475Smrg{ 50920d2c4d2Smrg String result = setlocale(LC_CTYPE, 0); 510d522f475Smrg 511d522f475Smrg if (before) { 512d522f475Smrg result = x_strdup(result); 51320d2c4d2Smrg } 51420d2c4d2Smrg (void) setlocale(LC_CTYPE, substitute); 51520d2c4d2Smrg TRACE(("setMenuLocale %s:%s\n", 51620d2c4d2Smrg (before 51720d2c4d2Smrg ? "before" 51820d2c4d2Smrg : "after"), 51920d2c4d2Smrg NonNull(result))); 52020d2c4d2Smrg if (!before) { 52120d2c4d2Smrg free((void *) substitute); 522d522f475Smrg } 523d522f475Smrg return result; 524d522f475Smrg} 525d522f475Smrg 526d522f475Smrg/* 527d522f475Smrg * Returns a pointer to the MenuList entry that matches the popup menu. 528d522f475Smrg */ 529d522f475Smrgstatic MenuList * 530d522f475Smrgselect_menu(Widget w GCC_UNUSED, MenuIndex num) 531d522f475Smrg{ 532d522f475Smrg#if OPT_TEK4014 && OPT_TOOLBAR 533d522f475Smrg while (w != 0) { 534d522f475Smrg if (w == tekshellwidget) { 535d522f475Smrg return &tek_shell[num]; 536d522f475Smrg } 537d522f475Smrg w = XtParent(w); 538d522f475Smrg } 539d522f475Smrg#endif 540d522f475Smrg return &vt_shell[num]; 541d522f475Smrg} 542d522f475Smrg 543d522f475Smrg/* 544d522f475Smrg * Returns a pointer to the given popup menu shell 545d522f475Smrg */ 546d522f475Smrgstatic Widget 547d522f475Smrgobtain_menu(Widget w, MenuIndex num) 548d522f475Smrg{ 549d522f475Smrg return select_menu(w, num)->w; 550d522f475Smrg} 551d522f475Smrg 552d522f475Smrg/* 553d522f475Smrg * Returns the number of entries in the given popup menu shell 554d522f475Smrg */ 555d522f475Smrgstatic Cardinal 556d522f475Smrgsizeof_menu(Widget w, MenuIndex num) 557d522f475Smrg{ 558d522f475Smrg return select_menu(w, num)->entries; 559d522f475Smrg} 560d522f475Smrg 561d522f475Smrg/* 562e39b573cSmrg * Return an array of flags telling if a given menu item is never going to 563e39b573cSmrg * be used, so we can reduce the size of menus. 564d522f475Smrg */ 565e39b573cSmrgstatic Boolean * 566e39b573cSmrgunusedEntries(XtermWidget xw, MenuIndex num) 567e39b573cSmrg{ 568e39b573cSmrg static Boolean result[XtNumber(mainMenuEntries) 569e39b573cSmrg + XtNumber(vtMenuEntries) 570e39b573cSmrg + XtNumber(fontMenuEntries) 571e39b573cSmrg#if OPT_TEK4014 572e39b573cSmrg + XtNumber(tekMenuEntries) 573e39b573cSmrg#endif 574e39b573cSmrg ]; 575e39b573cSmrg TScreen *screen = TScreenOf(xw); 576d522f475Smrg 577e39b573cSmrg memset(result, 0, sizeof(result)); 578e39b573cSmrg switch (num) { 579e39b573cSmrg case mainMenu: 5800bd37d32Smrg#if OPT_MAXIMIZE 581e39b573cSmrg if (resource.fullscreen > 1) { 582e39b573cSmrg result[mainMenu_fullscreen] = True; 583e39b573cSmrg } 5840bd37d32Smrg#endif 585e39b573cSmrg#if OPT_NUM_LOCK 586e39b573cSmrg if (!screen->alt_is_not_meta) { 587e39b573cSmrg result[mainMenu_alt_esc] = True; 588e39b573cSmrg } 589e39b573cSmrg#endif 590e39b573cSmrg if (!xtermHasPrinter(xw)) { 591e39b573cSmrg result[mainMenu_print] = True; 592e39b573cSmrg result[mainMenu_print_redir] = True; 593e39b573cSmrg } 594e39b573cSmrg if (screen->terminal_id < 200) { 595e39b573cSmrg result[mainMenu_8bit_ctrl] = True; 596e39b573cSmrg } 597e39b573cSmrg#if !defined(SIGTSTP) 598e39b573cSmrg result[mainMenu_suspend] = True; 599e39b573cSmrg#endif 600e39b573cSmrg#if !defined(SIGCONT) 601e39b573cSmrg result[mainMenu_continue] = True; 602e39b573cSmrg#endif 603e39b573cSmrg#ifdef ALLOWLOGGING 604e39b573cSmrg if (screen->inhibit & I_LOG) { 605e39b573cSmrg result[mainMenu_logging] = True; 606e39b573cSmrg } 607e39b573cSmrg#endif 608e39b573cSmrg if (screen->inhibit & I_SIGNAL) { 609e39b573cSmrg int n; 610e39b573cSmrg for (n = (int) mainMenu_suspend; n <= (int) mainMenu_quit; ++n) { 611e39b573cSmrg result[n] = True; 612e39b573cSmrg } 613e39b573cSmrg } 614e39b573cSmrg break; 615e39b573cSmrg case vtMenu: 616e39b573cSmrg#ifndef NO_ACTIVE_ICON 617913cc679Smrg if (!getIconicFont(screen)->fs || !screen->iconVwin.window) { 618e39b573cSmrg result[vtMenu_activeicon] = True; 619e39b573cSmrg } 620e39b573cSmrg#endif /* NO_ACTIVE_ICON */ 621e39b573cSmrg#if OPT_TEK4014 622e39b573cSmrg if (screen->inhibit & I_TEK) { 623e39b573cSmrg int n; 624e39b573cSmrg for (n = (int) vtMenu_tekshow; n <= (int) vtMenu_vthide; ++n) { 625e39b573cSmrg result[n] = True; 626e39b573cSmrg } 627e39b573cSmrg } 628e39b573cSmrg#endif 629e39b573cSmrg break; 630e39b573cSmrg case fontMenu: 631e39b573cSmrg break; 632e39b573cSmrg#if OPT_TEK4014 633e39b573cSmrg case tekMenu: 634e39b573cSmrg break; 635e39b573cSmrg#endif 636e39b573cSmrg case noMenu: 637e39b573cSmrg break; 638e39b573cSmrg } 639e39b573cSmrg return result; 640e39b573cSmrg} 641e39b573cSmrg 642e39b573cSmrg/* 643e39b573cSmrg * create_menu - create a popup shell and stuff the menu into it. 644e39b573cSmrg */ 645d522f475Smrgstatic Widget 646e39b573cSmrgcreate_menu(Widget w, XtermWidget xw, MenuIndex num) 647d522f475Smrg{ 648d522f475Smrg static XtCallbackRec cb[2] = 649d522f475Smrg { 650d522f475Smrg {NULL, NULL}, 651d522f475Smrg {NULL, NULL}}; 652d522f475Smrg static Arg arg = 653d522f475Smrg {XtNcallback, (XtArgVal) cb}; 654d522f475Smrg 655e39b573cSmrg TScreen *screen = TScreenOf(xw); 65601037d57Smrg const MenuHeader *data = &menu_names[num]; 657d522f475Smrg MenuList *list = select_menu(w, num); 658d522f475Smrg struct _MenuEntry *entries = data->entry_list; 659956cc18dSsnj Cardinal nentries = data->entry_len; 660d522f475Smrg#if !OPT_TOOLBAR 661d522f475Smrg String saveLocale; 662d522f475Smrg#endif 663d522f475Smrg 664d522f475Smrg if (screen->menu_item_bitmap == None) { 665d522f475Smrg /* 666d522f475Smrg * we really want to do these dynamically 667d522f475Smrg */ 668d522f475Smrg#define check_width 9 669d522f475Smrg#define check_height 8 670d522f475Smrg static unsigned char check_bits[] = 671d522f475Smrg { 672d522f475Smrg 0x00, 0x01, 0x80, 0x01, 0xc0, 0x00, 0x60, 0x00, 673d522f475Smrg 0x31, 0x00, 0x1b, 0x00, 0x0e, 0x00, 0x04, 0x00 674d522f475Smrg }; 675d522f475Smrg 676d522f475Smrg screen->menu_item_bitmap = 677e39b573cSmrg XCreateBitmapFromData(XtDisplay(xw), 678e39b573cSmrg RootWindowOfScreen(XtScreen(xw)), 679d522f475Smrg (char *) check_bits, check_width, check_height); 680d522f475Smrg } 681d522f475Smrg#if !OPT_TOOLBAR 682d522f475Smrg saveLocale = setMenuLocale(True, resource.menuLocale); 683d522f475Smrg list->w = XtCreatePopupShell(data->internal_name, 684d522f475Smrg simpleMenuWidgetClass, 685d522f475Smrg toplevel, 686d522f475Smrg NULL, 0); 687d522f475Smrg#endif 688d522f475Smrg if (list->w != 0) { 689e39b573cSmrg Boolean *unused = unusedEntries(xw, num); 690e39b573cSmrg Cardinal n; 691e39b573cSmrg 692e39b573cSmrg list->entries = 0; 693e39b573cSmrg 694e39b573cSmrg for (n = 0; n < nentries; ++n) { 695e39b573cSmrg if (!unused[n]) { 696e39b573cSmrg cb[0].callback = (XtCallbackProc) entries[n].function; 6970bd37d32Smrg cb[0].closure = (XtPointer) entries[n].name; 698e39b573cSmrg entries[n].widget = XtCreateManagedWidget(entries[n].name, 699e39b573cSmrg (entries[n].function 700e39b573cSmrg ? smeBSBObjectClass 701e39b573cSmrg : smeLineObjectClass), 702e39b573cSmrg list->w, 703e39b573cSmrg &arg, (Cardinal) 1); 704e39b573cSmrg list->entries++; 705e39b573cSmrg } 706d522f475Smrg } 707d522f475Smrg } 708d522f475Smrg#if !OPT_TOOLBAR 709d522f475Smrg (void) setMenuLocale(False, saveLocale); 710d522f475Smrg#endif 711d522f475Smrg 712d522f475Smrg /* do not realize at this point */ 713d522f475Smrg return list->w; 714d522f475Smrg} 715d522f475Smrg 716d522f475Smrgstatic MenuIndex 717d522f475SmrgindexOfMenu(String menuName) 718d522f475Smrg{ 719d522f475Smrg MenuIndex me; 720d522f475Smrg switch (*menuName) { 721d522f475Smrg case 'm': 722d522f475Smrg me = mainMenu; 723d522f475Smrg break; 724d522f475Smrg case 'v': 725d522f475Smrg me = vtMenu; 726d522f475Smrg break; 727d522f475Smrg case 'f': 728d522f475Smrg me = fontMenu; 729d522f475Smrg break; 730d522f475Smrg#if OPT_TEK4014 731d522f475Smrg case 't': 732d522f475Smrg me = tekMenu; 733d522f475Smrg break; 734d522f475Smrg#endif 735d522f475Smrg default: 736d522f475Smrg me = noMenu; 737d522f475Smrg } 738d522f475Smrg return (me); 739d522f475Smrg} 740d522f475Smrg 741d522f475Smrg/* ARGSUSED */ 742d522f475Smrgstatic Bool 743d522f475Smrgdomenu(Widget w, 744894e0ac8Smrg XEvent *event GCC_UNUSED, 745894e0ac8Smrg String *params, /* mainMenu, vtMenu, or tekMenu */ 746d522f475Smrg Cardinal *param_count) /* 0 or 1 */ 747d522f475Smrg{ 74820d2c4d2Smrg XtermWidget xw = term; 74920d2c4d2Smrg TScreen *screen = TScreenOf(xw); 750d522f475Smrg MenuIndex me; 751d522f475Smrg Bool created = False; 752d522f475Smrg Widget mw; 753d522f475Smrg 754d522f475Smrg if (*param_count != 1) { 75520d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 756d522f475Smrg return False; 757d522f475Smrg } 758d522f475Smrg 759d522f475Smrg if ((me = indexOfMenu(params[0])) == noMenu) { 76020d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 761d522f475Smrg return False; 762d522f475Smrg } 763d522f475Smrg 764d522f475Smrg if ((mw = obtain_menu(w, me)) == 0 765d522f475Smrg || sizeof_menu(w, me) == 0) { 76620d2c4d2Smrg mw = create_menu(w, xw, me); 767d522f475Smrg created = (mw != 0); 768d522f475Smrg } 769d522f475Smrg if (mw == 0) 770d522f475Smrg return False; 771d522f475Smrg 772d522f475Smrg TRACE(("domenu(%s) %s\n", params[0], created ? "create" : "update")); 773d522f475Smrg switch (me) { 774d522f475Smrg case mainMenu: 775d522f475Smrg if (created) { 776d522f475Smrg update_toolbar(); 777a1f3da82Smrg update_fullscreen(); 778d522f475Smrg update_securekbd(); 779d522f475Smrg update_allowsends(); 780d522f475Smrg update_logging(); 781d522f475Smrg update_print_redir(); 782d522f475Smrg update_8bit_control(); 783d522f475Smrg update_decbkm(); 784d522f475Smrg update_num_lock(); 785d522f475Smrg update_alt_esc(); 786d522f475Smrg update_meta_esc(); 787d522f475Smrg update_delete_del(); 788d522f475Smrg update_keyboard_type(); 7892e4f8982Smrg#ifdef OPT_PRINT_ON_EXIT 7902e4f8982Smrg screen->write_error = !IsEmpty(resource.printFileOnXError); 791e39b573cSmrg SetItemSensitivity(mainMenuEntries[mainMenu_write_now].widget, False); 792e39b573cSmrg SetItemSensitivity(mainMenuEntries[mainMenu_write_error].widget, screen->write_error); 793d522f475Smrg#endif 794d522f475Smrg } 795d522f475Smrg break; 796d522f475Smrg 797d522f475Smrg case vtMenu: 798d522f475Smrg if (created) { 799d522f475Smrg update_scrollbar(); 800d522f475Smrg update_jumpscroll(); 801d522f475Smrg update_reversevideo(); 802d522f475Smrg update_autowrap(); 803d522f475Smrg update_reversewrap(); 804d522f475Smrg update_autolinefeed(); 805d522f475Smrg update_appcursor(); 806d522f475Smrg update_appkeypad(); 807d522f475Smrg update_scrollkey(); 808d522f475Smrg update_scrollttyoutput(); 809d522f475Smrg update_allow132(); 810d522f475Smrg update_cursesemul(); 811d522f475Smrg update_keepSelection(); 812d522f475Smrg update_selectToClipboard(); 813d522f475Smrg update_visualbell(); 814d522f475Smrg update_poponbell(); 815d522f475Smrg update_bellIsUrgent(); 816d522f475Smrg update_cursorblink(); 817d522f475Smrg update_altscreen(); 818e0a2b6dfSmrg update_decsdm(); /* Sixel Display Mode */ 819d522f475Smrg update_titeInhibit(); 820d522f475Smrg#ifndef NO_ACTIVE_ICON 821e39b573cSmrg update_activeicon(); 822d522f475Smrg#endif /* NO_ACTIVE_ICON */ 823e0a2b6dfSmrg update_privatecolorregisters(); 824d522f475Smrg } 825d522f475Smrg break; 826d522f475Smrg 827d522f475Smrg case fontMenu: 828d522f475Smrg if (created) { 829e39b573cSmrg int n; 830e39b573cSmrg 831d522f475Smrg set_menu_font(True); 832e39b573cSmrg for (n = fontMenu_font1; n <= fontMenu_font6; ++n) { 833e39b573cSmrg if (IsEmpty(screen->menu_font_names[n][fNorm])) 834e39b573cSmrg SetItemSensitivity(fontMenuEntries[n].widget, False); 835e39b573cSmrg } 83601037d57Smrg update_font_escape(); 837e39b573cSmrg update_menu_allowBoldFonts(); 838d522f475Smrg#if OPT_BOX_CHARS 839d522f475Smrg update_font_boxchars(); 840d522f475Smrg SetItemSensitivity( 841d522f475Smrg fontMenuEntries[fontMenu_font_boxchars].widget, 842d522f475Smrg True); 84320d2c4d2Smrg update_font_packed(); 84420d2c4d2Smrg SetItemSensitivity( 84520d2c4d2Smrg fontMenuEntries[fontMenu_font_packedfont].widget, 84620d2c4d2Smrg True); 847d522f475Smrg#endif 848d522f475Smrg#if OPT_DEC_SOFTFONT /* FIXME: not implemented */ 849d522f475Smrg update_font_loadable(); 850d522f475Smrg SetItemSensitivity( 851d522f475Smrg fontMenuEntries[fontMenu_font_loadable].widget, 852d522f475Smrg False); 853d522f475Smrg#endif 854d522f475Smrg#if OPT_DEC_CHRSET 855d522f475Smrg update_font_doublesize(); 85620d2c4d2Smrg if (TScreenOf(xw)->cache_doublesize == 0) 857d522f475Smrg SetItemSensitivity( 858d522f475Smrg fontMenuEntries[fontMenu_font_doublesize].widget, 859d522f475Smrg False); 860d522f475Smrg#endif 861d522f475Smrg#if OPT_RENDERFONT 862d522f475Smrg update_font_renderfont(); 863d522f475Smrg#endif 864d522f475Smrg#if OPT_WIDE_CHARS 865d522f475Smrg update_font_utf8_mode(); 866e39b573cSmrg update_font_utf8_fonts(); 867d522f475Smrg update_font_utf8_title(); 868956cc18dSsnj#endif 869956cc18dSsnj#if OPT_ALLOW_XXX_OPS 87020d2c4d2Smrg update_menu_allowColorOps(); 871956cc18dSsnj update_menu_allowFontOps(); 872913cc679Smrg update_menu_allowMouseOps(); 87320d2c4d2Smrg update_menu_allowTcapOps(); 874956cc18dSsnj update_menu_allowTitleOps(); 875956cc18dSsnj update_menu_allowWindowOps(); 876956cc18dSsnj enable_allow_xxx_ops(!(screen->allowSendEvents)); 877d522f475Smrg#endif 878d522f475Smrg } 879894e0ac8Smrg#if OPT_TOOLBAR 880894e0ac8Smrg /* menus for toolbar are initialized once only */ 881894e0ac8Smrg SetItemSensitivity(fontMenuEntries[fontMenu_fontsel].widget, True); 882894e0ac8Smrg#else 88320d2c4d2Smrg FindFontSelection(xw, NULL, True); 88401037d57Smrg SetItemSensitivity(fontMenuEntries[fontMenu_fontsel].widget, 88501037d57Smrg (screen->SelectFontName() 88601037d57Smrg ? True 88701037d57Smrg : False)); 888894e0ac8Smrg#endif 889d522f475Smrg break; 890d522f475Smrg 891d522f475Smrg#if OPT_TEK4014 892d522f475Smrg case tekMenu: 893d522f475Smrg if (created && tekWidget) { 89420d2c4d2Smrg set_tekfont_menu_item(TekScreenOf(tekWidget)->cur.fontsize, True); 895d522f475Smrg update_vtshow(); 896d522f475Smrg } 897d522f475Smrg break; 898d522f475Smrg#endif 899d522f475Smrg case noMenu: 900d522f475Smrg default: 901d522f475Smrg break; 902d522f475Smrg } 903d522f475Smrg 904d522f475Smrg return True; 905d522f475Smrg} 906d522f475Smrg 907d522f475Smrg/* 908d522f475Smrg * public interfaces 909d522f475Smrg */ 910d522f475Smrg 911d522f475Smrgvoid 912d522f475SmrgHandleCreateMenu(Widget w, 913894e0ac8Smrg XEvent *event, 914894e0ac8Smrg String *params, /* mainMenu, vtMenu, or tekMenu */ 915d522f475Smrg Cardinal *param_count) /* 0 or 1 */ 916d522f475Smrg{ 917d522f475Smrg TRACE(("HandleCreateMenu\n")); 918d522f475Smrg (void) domenu(w, event, params, param_count); 919d522f475Smrg} 920d522f475Smrg 921d522f475Smrgvoid 922d522f475SmrgHandlePopupMenu(Widget w, 923894e0ac8Smrg XEvent *event, 924894e0ac8Smrg String *params, /* mainMenu, vtMenu, or tekMenu */ 925d522f475Smrg Cardinal *param_count) /* 0 or 1 */ 926d522f475Smrg{ 927d522f475Smrg TRACE(("HandlePopupMenu\n")); 928d522f475Smrg if (domenu(w, event, params, param_count)) { 929e39b573cSmrg XtermWidget xw = term; 930e39b573cSmrg TScreen *screen = TScreenOf(xw); 931e39b573cSmrg 932d522f475Smrg#if OPT_TOOLBAR 933d522f475Smrg w = select_menu(w, mainMenu)->w; 934d522f475Smrg#endif 935e39b573cSmrg /* 936e39b573cSmrg * The action procedure in SimpleMenu.c, PositionMenu does not expect a 937e39b573cSmrg * key translation event when we are popping up a menu. In particular, 938e39b573cSmrg * if the pointer is outside the menu, then the action procedure will 939e39b573cSmrg * fail in its attempt to determine the location of the pointer within 940e39b573cSmrg * the menu. Anticipate that by warping the pointer into the menu when 941e39b573cSmrg * a key event is detected. 942e39b573cSmrg */ 943e39b573cSmrg switch (event->type) { 944e39b573cSmrg case KeyPress: 945e39b573cSmrg case KeyRelease: 946e39b573cSmrg XWarpPointer(screen->display, None, XtWindow(w), 0, 0, 0, 0, 0, 0); 947e39b573cSmrg break; 948e39b573cSmrg default: 949e39b573cSmrg XtCallActionProc(w, "XawPositionSimpleMenu", event, params, 1); 950e39b573cSmrg break; 951e39b573cSmrg } 952d522f475Smrg XtCallActionProc(w, "MenuPopup", event, params, 1); 953d522f475Smrg } 954d522f475Smrg} 955d522f475Smrg 956d522f475Smrg/* 957d522f475Smrg * private interfaces - keep out! 958d522f475Smrg */ 959d522f475Smrg 960d522f475Smrg/* ARGSUSED */ 961d522f475Smrgstatic void 962d522f475Smrghandle_send_signal(Widget gw GCC_UNUSED, int sig) 963d522f475Smrg{ 964d522f475Smrg#ifndef VMS 965d522f475Smrg TScreen *screen = TScreenOf(term); 966d522f475Smrg 967d522f475Smrg if (hold_screen > 1) 968d522f475Smrg hold_screen = 0; 969d522f475Smrg if (screen->pid > 1) 970d522f475Smrg kill_process_group(screen->pid, sig); 971d522f475Smrg#endif 972d522f475Smrg} 973d522f475Smrg 974a1f3da82Smrgstatic void 975a1f3da82SmrgUpdateMenuItem( 976a1f3da82Smrg#if OPT_TRACE 977a1f3da82Smrg const char *func, 978a1f3da82Smrg#endif 979a1f3da82Smrg MenuEntry * menu, 980a1f3da82Smrg int which, 981a1f3da82Smrg Bool val) 982a1f3da82Smrg{ 983a1f3da82Smrg static Arg menuArgs = 984a1f3da82Smrg {XtNleftBitmap, (XtArgVal) 0}; 985a1f3da82Smrg Widget mi = menu[which].widget; 986a1f3da82Smrg 987a1f3da82Smrg if (mi) { 988a1f3da82Smrg menuArgs.value = (XtArgVal) ((val) 989a1f3da82Smrg ? TScreenOf(term)->menu_item_bitmap 990a1f3da82Smrg : None); 991a1f3da82Smrg XtSetValues(mi, &menuArgs, (Cardinal) 1); 992a1f3da82Smrg } 99301037d57Smrg TRACE(("%s(%d): %s\n", func, which, MtoS(val))); 994a1f3da82Smrg} 995a1f3da82Smrg 996a1f3da82Smrgvoid 997a1f3da82SmrgSetItemSensitivity(Widget mi, Bool val) 998a1f3da82Smrg{ 999a1f3da82Smrg static Arg menuArgs = 1000a1f3da82Smrg {XtNsensitive, (XtArgVal) 0}; 1001a1f3da82Smrg 1002a1f3da82Smrg if (mi) { 1003a1f3da82Smrg menuArgs.value = (XtArgVal) (val); 1004a1f3da82Smrg XtSetValues(mi, &menuArgs, (Cardinal) 1); 1005a1f3da82Smrg } 1006a1f3da82Smrg} 1007a1f3da82Smrg 1008d522f475Smrg/* 1009d522f475Smrg * action routines 1010d522f475Smrg */ 1011d522f475Smrg 1012d522f475Smrgstatic void 1013d522f475Smrgdo_securekbd(Widget gw GCC_UNUSED, 1014d522f475Smrg XtPointer closure GCC_UNUSED, 1015d522f475Smrg XtPointer data GCC_UNUSED) 1016d522f475Smrg{ 101720d2c4d2Smrg XtermWidget xw = term; 101820d2c4d2Smrg TScreen *screen = TScreenOf(xw); 1019d522f475Smrg Time now = CurrentTime; /* XXX - wrong */ 1020d522f475Smrg 1021d522f475Smrg if (screen->grabbedKbd) { 1022d522f475Smrg XUngrabKeyboard(screen->display, now); 102320d2c4d2Smrg ReverseVideo(xw); 1024d522f475Smrg screen->grabbedKbd = False; 1025d522f475Smrg } else { 1026d522f475Smrg if (XGrabKeyboard(screen->display, XtWindow(CURRENT_EMU()), 1027d522f475Smrg True, GrabModeAsync, GrabModeAsync, now) 1028d522f475Smrg != GrabSuccess) { 102920d2c4d2Smrg Bell(xw, XkbBI_MinorError, 100); 1030d522f475Smrg } else { 103120d2c4d2Smrg ReverseVideo(xw); 1032d522f475Smrg screen->grabbedKbd = True; 1033d522f475Smrg } 1034d522f475Smrg } 1035d522f475Smrg update_securekbd(); 1036d522f475Smrg} 1037d522f475Smrg 1038d522f475Smrg/* ARGSUSED */ 1039d522f475Smrgvoid 1040d522f475SmrgHandleSecure(Widget w GCC_UNUSED, 1041894e0ac8Smrg XEvent *event GCC_UNUSED, /* unused */ 1042894e0ac8Smrg String *params GCC_UNUSED, /* [0] = volume */ 1043d522f475Smrg Cardinal *param_count GCC_UNUSED) /* 0 or 1 */ 1044d522f475Smrg{ 1045d522f475Smrg do_securekbd(vt_shell[mainMenu].w, (XtPointer) 0, (XtPointer) 0); 1046d522f475Smrg} 1047d522f475Smrg 1048d522f475Smrgstatic void 1049d522f475Smrgdo_allowsends(Widget gw GCC_UNUSED, 1050d522f475Smrg XtPointer closure GCC_UNUSED, 1051d522f475Smrg XtPointer data GCC_UNUSED) 1052d522f475Smrg{ 1053d522f475Smrg TScreen *screen = TScreenOf(term); 1054d522f475Smrg 1055956cc18dSsnj ToggleFlag(screen->allowSendEvents); 1056d522f475Smrg update_allowsends(); 1057956cc18dSsnj#if OPT_ALLOW_XXX_OPS 1058956cc18dSsnj enable_allow_xxx_ops(!(screen->allowSendEvents)); 1059956cc18dSsnj#endif 1060d522f475Smrg} 1061d522f475Smrg 1062d522f475Smrgstatic void 1063d522f475Smrgdo_visualbell(Widget gw GCC_UNUSED, 1064d522f475Smrg XtPointer closure GCC_UNUSED, 1065d522f475Smrg XtPointer data GCC_UNUSED) 1066d522f475Smrg{ 1067d522f475Smrg TScreen *screen = TScreenOf(term); 1068d522f475Smrg 1069956cc18dSsnj ToggleFlag(screen->visualbell); 1070d522f475Smrg update_visualbell(); 1071d522f475Smrg} 1072d522f475Smrg 1073d522f475Smrgstatic void 1074d522f475Smrgdo_bellIsUrgent(Widget gw GCC_UNUSED, 1075d522f475Smrg XtPointer closure GCC_UNUSED, 1076d522f475Smrg XtPointer data GCC_UNUSED) 1077d522f475Smrg{ 1078d522f475Smrg TScreen *screen = TScreenOf(term); 1079d522f475Smrg 1080956cc18dSsnj ToggleFlag(screen->bellIsUrgent); 1081d522f475Smrg update_bellIsUrgent(); 1082d522f475Smrg} 1083d522f475Smrg 1084d522f475Smrgstatic void 1085d522f475Smrgdo_poponbell(Widget gw GCC_UNUSED, 1086d522f475Smrg XtPointer closure GCC_UNUSED, 1087d522f475Smrg XtPointer data GCC_UNUSED) 1088d522f475Smrg{ 1089d522f475Smrg TScreen *screen = TScreenOf(term); 1090d522f475Smrg 1091956cc18dSsnj ToggleFlag(screen->poponbell); 1092d522f475Smrg update_poponbell(); 1093d522f475Smrg} 1094d522f475Smrg 1095d522f475Smrg#ifdef ALLOWLOGGING 1096d522f475Smrgstatic void 1097d522f475Smrgdo_logging(Widget gw GCC_UNUSED, 1098d522f475Smrg XtPointer closure GCC_UNUSED, 1099d522f475Smrg XtPointer data GCC_UNUSED) 1100d522f475Smrg{ 110120d2c4d2Smrg XtermWidget xw = term; 110220d2c4d2Smrg TScreen *screen = TScreenOf(xw); 1103d522f475Smrg 1104d522f475Smrg if (screen->logging) { 110520d2c4d2Smrg CloseLog(xw); 1106d522f475Smrg } else { 110720d2c4d2Smrg StartLog(xw); 1108d522f475Smrg } 1109d522f475Smrg /* update_logging done by CloseLog and StartLog */ 1110d522f475Smrg} 1111d522f475Smrg#endif 1112d522f475Smrg 1113e39b573cSmrg#ifdef OPT_PRINT_ON_EXIT 1114e39b573cSmrgstatic void 1115e39b573cSmrgdo_write_now(Widget gw GCC_UNUSED, 1116e39b573cSmrg XtPointer closure GCC_UNUSED, 1117e39b573cSmrg XtPointer data GCC_UNUSED) 1118e39b573cSmrg{ 1119e39b573cSmrg XtermWidget xw = term; 1120e39b573cSmrg 1121e39b573cSmrg xtermPrintImmediately(xw, 1122e39b573cSmrg (IsEmpty(resource.printFileNow) 1123894e0ac8Smrg ? (String) "XTerm" 1124e39b573cSmrg : resource.printFileNow), 1125e39b573cSmrg resource.printOptsNow, 1126e39b573cSmrg resource.printModeNow); 1127e39b573cSmrg} 1128e39b573cSmrg 1129e39b573cSmrgstatic void 1130e39b573cSmrgdo_write_error(Widget gw GCC_UNUSED, 1131e39b573cSmrg XtPointer closure GCC_UNUSED, 1132e39b573cSmrg XtPointer data GCC_UNUSED) 1133e39b573cSmrg{ 1134e39b573cSmrg XtermWidget xw = term; 1135e39b573cSmrg 1136e39b573cSmrg if (IsEmpty(resource.printFileOnXError)) { 1137e39b573cSmrg resource.printFileOnXError = "XTermError"; 1138e39b573cSmrg } 1139e39b573cSmrg TScreenOf(xw)->write_error = (Boolean) (!TScreenOf(xw)->write_error); 1140e39b573cSmrg update_write_error(); 1141e39b573cSmrg} 1142e39b573cSmrg#endif 1143e39b573cSmrg 1144d522f475Smrgstatic void 1145d522f475Smrgdo_print(Widget gw GCC_UNUSED, 1146d522f475Smrg XtPointer closure GCC_UNUSED, 1147d522f475Smrg XtPointer data GCC_UNUSED) 1148d522f475Smrg{ 114920d2c4d2Smrg xtermPrintScreen(term, True, getPrinterFlags(term, NULL, 0)); 1150d522f475Smrg} 1151d522f475Smrg 1152d522f475Smrgstatic void 1153d522f475Smrgdo_print_redir(Widget gw GCC_UNUSED, 1154d522f475Smrg XtPointer closure GCC_UNUSED, 1155d522f475Smrg XtPointer data GCC_UNUSED) 1156d522f475Smrg{ 1157e39b573cSmrg setPrinterControlMode(term, 1158e39b573cSmrg (PrinterOf(TScreenOf(term)).printer_controlmode 1159e39b573cSmrg ? 0 1160e39b573cSmrg : 2)); 1161d522f475Smrg} 1162d522f475Smrg 11632e4f8982Smrg#if OPT_SCREEN_DUMPS 11642e4f8982Smrgstatic void 11652e4f8982Smrgdo_dump_html(Widget gw GCC_UNUSED, 11662e4f8982Smrg XtPointer closure GCC_UNUSED, 11672e4f8982Smrg XtPointer data GCC_UNUSED) 11682e4f8982Smrg{ 11692e4f8982Smrg xtermDumpHtml(term); 11702e4f8982Smrg} 11712e4f8982Smrg 11722e4f8982Smrgstatic void 11732e4f8982Smrgdo_dump_svg(Widget gw GCC_UNUSED, 11742e4f8982Smrg XtPointer closure GCC_UNUSED, 11752e4f8982Smrg XtPointer data GCC_UNUSED) 11762e4f8982Smrg{ 11772e4f8982Smrg xtermDumpSvg(term); 11782e4f8982Smrg} 11792e4f8982Smrg#endif 11802e4f8982Smrg 1181d522f475Smrgstatic void 1182d522f475Smrgdo_redraw(Widget gw GCC_UNUSED, 1183d522f475Smrg XtPointer closure GCC_UNUSED, 1184d522f475Smrg XtPointer data GCC_UNUSED) 1185d522f475Smrg{ 1186d522f475Smrg Redraw(); 1187d522f475Smrg} 1188d522f475Smrg 1189d522f475Smrgvoid 1190d522f475Smrgshow_8bit_control(Bool value) 1191d522f475Smrg{ 119220d2c4d2Smrg if (TScreenOf(term)->control_eight_bits != value) { 119320d2c4d2Smrg TScreenOf(term)->control_eight_bits = (Boolean) value; 1194d522f475Smrg update_8bit_control(); 1195d522f475Smrg } 1196d522f475Smrg} 1197d522f475Smrg 1198d522f475Smrgstatic void 1199d522f475Smrgdo_8bit_control(Widget gw GCC_UNUSED, 1200d522f475Smrg XtPointer closure GCC_UNUSED, 1201d522f475Smrg XtPointer data GCC_UNUSED) 1202d522f475Smrg{ 120320d2c4d2Smrg show_8bit_control(!TScreenOf(term)->control_eight_bits); 1204d522f475Smrg} 1205d522f475Smrg 1206d522f475Smrgstatic void 1207d522f475Smrgdo_backarrow(Widget gw GCC_UNUSED, 1208d522f475Smrg XtPointer closure GCC_UNUSED, 1209d522f475Smrg XtPointer data GCC_UNUSED) 1210d522f475Smrg{ 1211d522f475Smrg term->keyboard.flags ^= MODE_DECBKM; 1212d522f475Smrg update_decbkm(); 1213d522f475Smrg} 1214d522f475Smrg 1215d522f475Smrg#if OPT_NUM_LOCK 1216d522f475Smrgstatic void 1217d522f475Smrgdo_num_lock(Widget gw GCC_UNUSED, 1218d522f475Smrg XtPointer closure GCC_UNUSED, 1219d522f475Smrg XtPointer data GCC_UNUSED) 1220d522f475Smrg{ 1221956cc18dSsnj ToggleFlag(term->misc.real_NumLock); 1222d522f475Smrg update_num_lock(); 1223d522f475Smrg} 1224d522f475Smrg 1225d522f475Smrgstatic void 1226d522f475Smrgdo_alt_esc(Widget gw GCC_UNUSED, 1227d522f475Smrg XtPointer closure GCC_UNUSED, 1228d522f475Smrg XtPointer data GCC_UNUSED) 1229d522f475Smrg{ 123020d2c4d2Smrg ToggleFlag(TScreenOf(term)->alt_sends_esc); 1231d522f475Smrg update_alt_esc(); 1232d522f475Smrg} 1233d522f475Smrg 1234d522f475Smrgstatic void 1235d522f475Smrgdo_meta_esc(Widget gw GCC_UNUSED, 1236d522f475Smrg XtPointer closure GCC_UNUSED, 1237d522f475Smrg XtPointer data GCC_UNUSED) 1238d522f475Smrg{ 123920d2c4d2Smrg ToggleFlag(TScreenOf(term)->meta_sends_esc); 1240d522f475Smrg update_meta_esc(); 1241d522f475Smrg} 1242d522f475Smrg#endif 1243d522f475Smrg 1244d522f475Smrgstatic void 1245d522f475Smrgdo_delete_del(Widget gw GCC_UNUSED, 1246d522f475Smrg XtPointer closure GCC_UNUSED, 1247d522f475Smrg XtPointer data GCC_UNUSED) 1248d522f475Smrg{ 1249d522f475Smrg if (xtermDeleteIsDEL(term)) 125020d2c4d2Smrg TScreenOf(term)->delete_is_del = False; 1251d522f475Smrg else 125220d2c4d2Smrg TScreenOf(term)->delete_is_del = True; 1253d522f475Smrg update_delete_del(); 1254d522f475Smrg} 1255d522f475Smrg 1256d522f475Smrgstatic void 1257d522f475Smrgdo_old_fkeys(Widget gw GCC_UNUSED, 1258d522f475Smrg XtPointer closure GCC_UNUSED, 1259d522f475Smrg XtPointer data GCC_UNUSED) 1260d522f475Smrg{ 1261d522f475Smrg toggle_keyboard_type(term, keyboardIsLegacy); 1262d522f475Smrg} 1263d522f475Smrg 1264d522f475Smrg#if OPT_HP_FUNC_KEYS 1265d522f475Smrgstatic void 1266d522f475Smrgdo_hp_fkeys(Widget gw GCC_UNUSED, 1267d522f475Smrg XtPointer closure GCC_UNUSED, 1268d522f475Smrg XtPointer data GCC_UNUSED) 1269d522f475Smrg{ 1270d522f475Smrg toggle_keyboard_type(term, keyboardIsHP); 1271d522f475Smrg} 1272d522f475Smrg#endif 1273d522f475Smrg 1274d522f475Smrg#if OPT_SCO_FUNC_KEYS 1275d522f475Smrgstatic void 1276d522f475Smrgdo_sco_fkeys(Widget gw GCC_UNUSED, 1277d522f475Smrg XtPointer closure GCC_UNUSED, 1278d522f475Smrg XtPointer data GCC_UNUSED) 1279d522f475Smrg{ 1280d522f475Smrg toggle_keyboard_type(term, keyboardIsSCO); 1281d522f475Smrg} 1282d522f475Smrg#endif 1283d522f475Smrg 1284d522f475Smrg#if OPT_SUN_FUNC_KEYS 1285d522f475Smrgstatic void 1286d522f475Smrgdo_sun_fkeys(Widget gw GCC_UNUSED, 1287d522f475Smrg XtPointer closure GCC_UNUSED, 1288d522f475Smrg XtPointer data GCC_UNUSED) 1289d522f475Smrg{ 1290d522f475Smrg toggle_keyboard_type(term, keyboardIsSun); 1291d522f475Smrg} 1292d522f475Smrg#endif 1293d522f475Smrg 1294d522f475Smrg#if OPT_SUNPC_KBD 1295d522f475Smrg/* 1296d522f475Smrg * This really means "Sun/PC keyboard emulating VT220". 1297d522f475Smrg */ 1298d522f475Smrgstatic void 1299d522f475Smrgdo_sun_kbd(Widget gw GCC_UNUSED, 1300d522f475Smrg XtPointer closure GCC_UNUSED, 1301d522f475Smrg XtPointer data GCC_UNUSED) 1302d522f475Smrg{ 1303d522f475Smrg toggle_keyboard_type(term, keyboardIsVT220); 1304d522f475Smrg} 1305d522f475Smrg#endif 1306d522f475Smrg 1307d522f475Smrg#if OPT_TCAP_FKEYS 1308d522f475Smrgstatic void 1309d522f475Smrgdo_tcap_fkeys(Widget gw GCC_UNUSED, 1310d522f475Smrg XtPointer closure GCC_UNUSED, 1311d522f475Smrg XtPointer data GCC_UNUSED) 1312d522f475Smrg{ 1313d522f475Smrg toggle_keyboard_type(term, keyboardIsTermcap); 1314d522f475Smrg} 1315d522f475Smrg#endif 1316d522f475Smrg 1317d522f475Smrg/* 1318d522f475Smrg * The following cases use the pid instead of the process group so that we 1319d522f475Smrg * don't get hosed by programs that change their process group 1320d522f475Smrg */ 1321d522f475Smrg 1322d522f475Smrg/* ARGSUSED */ 1323d522f475Smrgstatic void 1324d522f475Smrgdo_suspend(Widget gw, 1325d522f475Smrg XtPointer closure GCC_UNUSED, 1326d522f475Smrg XtPointer data GCC_UNUSED) 1327d522f475Smrg{ 1328d522f475Smrg#if defined(SIGTSTP) 1329d522f475Smrg handle_send_signal(gw, SIGTSTP); 1330d522f475Smrg#endif 1331d522f475Smrg} 1332d522f475Smrg 1333d522f475Smrg/* ARGSUSED */ 1334d522f475Smrgstatic void 1335d522f475Smrgdo_continue(Widget gw, 1336d522f475Smrg XtPointer closure GCC_UNUSED, 1337d522f475Smrg XtPointer data GCC_UNUSED) 1338d522f475Smrg{ 1339d522f475Smrg#if defined(SIGCONT) 1340d522f475Smrg handle_send_signal(gw, SIGCONT); 1341d522f475Smrg#endif 1342d522f475Smrg} 1343d522f475Smrg 1344d522f475Smrg/* ARGSUSED */ 1345d522f475Smrgstatic void 1346d522f475Smrgdo_interrupt(Widget gw, 1347d522f475Smrg XtPointer closure GCC_UNUSED, 1348d522f475Smrg XtPointer data GCC_UNUSED) 1349d522f475Smrg{ 1350d522f475Smrg handle_send_signal(gw, SIGINT); 1351d522f475Smrg} 1352d522f475Smrg 1353d522f475Smrg/* ARGSUSED */ 1354d522f475Smrgvoid 1355d522f475Smrgdo_hangup(Widget gw, 1356d522f475Smrg XtPointer closure GCC_UNUSED, 1357d522f475Smrg XtPointer data GCC_UNUSED) 1358d522f475Smrg{ 1359d522f475Smrg handle_send_signal(gw, SIGHUP); 1360d522f475Smrg} 1361d522f475Smrg 1362d522f475Smrg/* ARGSUSED */ 1363d522f475Smrgstatic void 1364d522f475Smrgdo_terminate(Widget gw, 1365d522f475Smrg XtPointer closure GCC_UNUSED, 1366d522f475Smrg XtPointer data GCC_UNUSED) 1367d522f475Smrg{ 1368d522f475Smrg handle_send_signal(gw, SIGTERM); 1369d522f475Smrg} 1370d522f475Smrg 1371d522f475Smrg/* ARGSUSED */ 1372d522f475Smrgstatic void 1373d522f475Smrgdo_kill(Widget gw, 1374d522f475Smrg XtPointer closure GCC_UNUSED, 1375d522f475Smrg XtPointer data GCC_UNUSED) 1376d522f475Smrg{ 1377d522f475Smrg handle_send_signal(gw, SIGKILL); 1378d522f475Smrg} 1379d522f475Smrg 1380d522f475Smrgstatic void 1381d522f475Smrgdo_quit(Widget gw GCC_UNUSED, 1382d522f475Smrg XtPointer closure GCC_UNUSED, 1383d522f475Smrg XtPointer data GCC_UNUSED) 1384d522f475Smrg{ 1385d522f475Smrg Cleanup(SIGHUP); 1386d522f475Smrg} 1387d522f475Smrg 1388d522f475Smrg/* 1389d522f475Smrg * vt menu callbacks 1390d522f475Smrg */ 1391d522f475Smrg 1392d522f475Smrgstatic void 1393d522f475Smrgdo_scrollbar(Widget gw GCC_UNUSED, 1394d522f475Smrg XtPointer closure GCC_UNUSED, 1395d522f475Smrg XtPointer data GCC_UNUSED) 1396d522f475Smrg{ 1397d522f475Smrg ToggleScrollBar(term); 1398d522f475Smrg} 1399d522f475Smrg 1400d522f475Smrgstatic void 1401d522f475Smrgdo_jumpscroll(Widget gw GCC_UNUSED, 1402d522f475Smrg XtPointer closure GCC_UNUSED, 1403d522f475Smrg XtPointer data GCC_UNUSED) 1404d522f475Smrg{ 1405d522f475Smrg TScreen *screen = TScreenOf(term); 1406d522f475Smrg 1407d522f475Smrg term->flags ^= SMOOTHSCROLL; 1408d522f475Smrg if (term->flags & SMOOTHSCROLL) { 1409d522f475Smrg screen->jumpscroll = False; 1410d522f475Smrg if (screen->scroll_amt) 1411d522f475Smrg FlushScroll(term); 1412d522f475Smrg } else { 1413d522f475Smrg screen->jumpscroll = True; 1414d522f475Smrg } 1415d522f475Smrg update_jumpscroll(); 1416d522f475Smrg} 1417d522f475Smrg 1418d522f475Smrgstatic void 1419d522f475Smrgdo_reversevideo(Widget gw GCC_UNUSED, 1420d522f475Smrg XtPointer closure GCC_UNUSED, 1421d522f475Smrg XtPointer data GCC_UNUSED) 1422d522f475Smrg{ 1423d522f475Smrg ReverseVideo(term); 1424d522f475Smrg} 1425d522f475Smrg 1426d522f475Smrgstatic void 1427d522f475Smrgdo_autowrap(Widget gw GCC_UNUSED, 1428d522f475Smrg XtPointer closure GCC_UNUSED, 1429d522f475Smrg XtPointer data GCC_UNUSED) 1430d522f475Smrg{ 1431d522f475Smrg term->flags ^= WRAPAROUND; 1432d522f475Smrg update_autowrap(); 1433d522f475Smrg} 1434d522f475Smrg 1435d522f475Smrgstatic void 1436d522f475Smrgdo_reversewrap(Widget gw GCC_UNUSED, 1437d522f475Smrg XtPointer closure GCC_UNUSED, 1438d522f475Smrg XtPointer data GCC_UNUSED) 1439d522f475Smrg{ 1440d522f475Smrg term->flags ^= REVERSEWRAP; 1441d522f475Smrg update_reversewrap(); 1442d522f475Smrg} 1443d522f475Smrg 1444d522f475Smrgstatic void 1445d522f475Smrgdo_autolinefeed(Widget gw GCC_UNUSED, 1446d522f475Smrg XtPointer closure GCC_UNUSED, 1447d522f475Smrg XtPointer data GCC_UNUSED) 1448d522f475Smrg{ 1449d522f475Smrg term->flags ^= LINEFEED; 1450d522f475Smrg update_autolinefeed(); 1451d522f475Smrg} 1452d522f475Smrg 1453d522f475Smrgstatic void 1454d522f475Smrgdo_appcursor(Widget gw GCC_UNUSED, 1455d522f475Smrg XtPointer closure GCC_UNUSED, 1456d522f475Smrg XtPointer data GCC_UNUSED) 1457d522f475Smrg{ 1458d522f475Smrg term->keyboard.flags ^= MODE_DECCKM; 1459d522f475Smrg update_appcursor(); 1460d522f475Smrg} 1461d522f475Smrg 1462d522f475Smrgstatic void 1463d522f475Smrgdo_appkeypad(Widget gw GCC_UNUSED, 1464d522f475Smrg XtPointer closure GCC_UNUSED, 1465d522f475Smrg XtPointer data GCC_UNUSED) 1466d522f475Smrg{ 1467d522f475Smrg term->keyboard.flags ^= MODE_DECKPAM; 1468d522f475Smrg update_appkeypad(); 1469d522f475Smrg} 1470d522f475Smrg 1471d522f475Smrgstatic void 1472d522f475Smrgdo_scrollkey(Widget gw GCC_UNUSED, 1473d522f475Smrg XtPointer closure GCC_UNUSED, 1474d522f475Smrg XtPointer data GCC_UNUSED) 1475d522f475Smrg{ 1476d522f475Smrg TScreen *screen = TScreenOf(term); 1477d522f475Smrg 1478956cc18dSsnj ToggleFlag(screen->scrollkey); 1479d522f475Smrg update_scrollkey(); 1480d522f475Smrg} 1481d522f475Smrg 1482d522f475Smrgstatic void 1483d522f475Smrgdo_scrollttyoutput(Widget gw GCC_UNUSED, 1484d522f475Smrg XtPointer closure GCC_UNUSED, 1485d522f475Smrg XtPointer data GCC_UNUSED) 1486d522f475Smrg{ 1487d522f475Smrg TScreen *screen = TScreenOf(term); 1488d522f475Smrg 1489956cc18dSsnj ToggleFlag(screen->scrollttyoutput); 1490d522f475Smrg update_scrollttyoutput(); 1491d522f475Smrg} 1492d522f475Smrg 14932e4f8982Smrgstatic void 14942e4f8982Smrgdo_keepClipboard(Widget gw GCC_UNUSED, 14952e4f8982Smrg XtPointer closure GCC_UNUSED, 14962e4f8982Smrg XtPointer data GCC_UNUSED) 14972e4f8982Smrg{ 14982e4f8982Smrg TScreen *screen = TScreenOf(term); 14992e4f8982Smrg 15002e4f8982Smrg ToggleFlag(screen->keepClipboard); 15012e4f8982Smrg update_keepClipboard(); 15022e4f8982Smrg} 15032e4f8982Smrg 1504d522f475Smrgstatic void 1505d522f475Smrgdo_keepSelection(Widget gw GCC_UNUSED, 1506d522f475Smrg XtPointer closure GCC_UNUSED, 1507d522f475Smrg XtPointer data GCC_UNUSED) 1508d522f475Smrg{ 1509d522f475Smrg TScreen *screen = TScreenOf(term); 1510d522f475Smrg 1511956cc18dSsnj ToggleFlag(screen->keepSelection); 1512d522f475Smrg update_keepSelection(); 1513d522f475Smrg} 1514d522f475Smrg 1515d522f475Smrgstatic void 1516d522f475Smrgdo_selectClipboard(Widget gw GCC_UNUSED, 1517d522f475Smrg XtPointer closure GCC_UNUSED, 1518d522f475Smrg XtPointer data GCC_UNUSED) 1519d522f475Smrg{ 1520d522f475Smrg TScreen *screen = TScreenOf(term); 1521d522f475Smrg 1522956cc18dSsnj ToggleFlag(screen->selectToClipboard); 1523d522f475Smrg update_selectToClipboard(); 1524d522f475Smrg} 1525d522f475Smrg 1526d522f475Smrgstatic void 1527d522f475Smrgdo_allow132(Widget gw GCC_UNUSED, 1528d522f475Smrg XtPointer closure GCC_UNUSED, 1529d522f475Smrg XtPointer data GCC_UNUSED) 1530d522f475Smrg{ 1531d522f475Smrg TScreen *screen = TScreenOf(term); 1532d522f475Smrg 1533956cc18dSsnj ToggleFlag(screen->c132); 1534d522f475Smrg update_allow132(); 1535d522f475Smrg} 1536d522f475Smrg 1537d522f475Smrgstatic void 1538d522f475Smrgdo_cursesemul(Widget gw GCC_UNUSED, 1539d522f475Smrg XtPointer closure GCC_UNUSED, 1540d522f475Smrg XtPointer data GCC_UNUSED) 1541d522f475Smrg{ 1542d522f475Smrg TScreen *screen = TScreenOf(term); 1543d522f475Smrg 1544956cc18dSsnj ToggleFlag(screen->curses); 1545d522f475Smrg update_cursesemul(); 1546d522f475Smrg} 1547d522f475Smrg 1548d522f475Smrgstatic void 1549d522f475Smrgdo_marginbell(Widget gw GCC_UNUSED, 1550d522f475Smrg XtPointer closure GCC_UNUSED, 1551d522f475Smrg XtPointer data GCC_UNUSED) 1552d522f475Smrg{ 1553d522f475Smrg TScreen *screen = TScreenOf(term); 1554d522f475Smrg 1555a1f3da82Smrg if ((ToggleFlag(screen->marginbell)) == 0) 155620d2c4d2Smrg screen->bellArmed = -1; 1557d522f475Smrg update_marginbell(); 1558d522f475Smrg} 1559d522f475Smrg 1560d522f475Smrg#if OPT_TEK4014 1561d522f475Smrgstatic void 1562d522f475Smrghandle_tekshow(Widget gw GCC_UNUSED, Bool allowswitch) 1563d522f475Smrg{ 156420d2c4d2Smrg XtermWidget xw = term; 156520d2c4d2Smrg TScreen *screen = TScreenOf(xw); 1566d522f475Smrg 1567d522f475Smrg TRACE(("Show tek-window\n")); 156820d2c4d2Smrg if (!TEK4014_SHOWN(xw)) { /* not showing, turn on */ 1569d522f475Smrg set_tek_visibility(True); 1570d522f475Smrg } else if (screen->Vshow || allowswitch) { /* is showing, turn off */ 1571d522f475Smrg set_tek_visibility(False); 1572d522f475Smrg end_tek_mode(); /* WARNING: this does a longjmp */ 1573d522f475Smrg } else 157420d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 1575d522f475Smrg} 1576d522f475Smrg 1577d522f475Smrg/* ARGSUSED */ 1578d522f475Smrgstatic void 1579d522f475Smrgdo_tekshow(Widget gw, 1580d522f475Smrg XtPointer closure GCC_UNUSED, 1581d522f475Smrg XtPointer data GCC_UNUSED) 1582d522f475Smrg{ 1583d522f475Smrg handle_tekshow(gw, True); 1584d522f475Smrg} 1585d522f475Smrg 1586d522f475Smrg/* ARGSUSED */ 1587d522f475Smrgstatic void 1588d522f475Smrgdo_tekonoff(Widget gw, 1589d522f475Smrg XtPointer closure GCC_UNUSED, 1590d522f475Smrg XtPointer data GCC_UNUSED) 1591d522f475Smrg{ 1592d522f475Smrg handle_tekshow(gw, False); 1593d522f475Smrg} 1594d522f475Smrg#endif /* OPT_TEK4014 */ 1595d522f475Smrg 1596d522f475Smrg#if OPT_BLINK_CURS 1597d522f475Smrg/* ARGSUSED */ 1598d522f475Smrgstatic void 1599d522f475Smrgdo_cursorblink(Widget gw GCC_UNUSED, 1600d522f475Smrg XtPointer closure GCC_UNUSED, 1601d522f475Smrg XtPointer data GCC_UNUSED) 1602d522f475Smrg{ 1603d522f475Smrg TScreen *screen = TScreenOf(term); 1604d522f475Smrg ToggleCursorBlink(screen); 1605d522f475Smrg} 1606d522f475Smrg#endif 1607d522f475Smrg 1608d522f475Smrg/* ARGSUSED */ 1609d522f475Smrgstatic void 1610d522f475Smrgdo_altscreen(Widget gw GCC_UNUSED, 1611d522f475Smrg XtPointer closure GCC_UNUSED, 1612d522f475Smrg XtPointer data GCC_UNUSED) 1613d522f475Smrg{ 1614d522f475Smrg ToggleAlternate(term); 1615d522f475Smrg} 1616d522f475Smrg 1617d522f475Smrg/* ARGSUSED */ 1618d522f475Smrgstatic void 1619d522f475Smrgdo_titeInhibit(Widget gw GCC_UNUSED, 1620d522f475Smrg XtPointer closure GCC_UNUSED, 1621d522f475Smrg XtPointer data GCC_UNUSED) 1622d522f475Smrg{ 1623956cc18dSsnj ToggleFlag(term->misc.titeInhibit); 1624d522f475Smrg update_titeInhibit(); 1625d522f475Smrg} 1626d522f475Smrg 1627d522f475Smrg#ifndef NO_ACTIVE_ICON 1628d522f475Smrg/* ARGSUSED */ 1629d522f475Smrgstatic void 1630d522f475Smrgdo_activeicon(Widget gw GCC_UNUSED, 1631d522f475Smrg XtPointer closure GCC_UNUSED, 1632d522f475Smrg XtPointer data GCC_UNUSED) 1633d522f475Smrg{ 1634d522f475Smrg TScreen *screen = TScreenOf(term); 1635d522f475Smrg 1636d522f475Smrg if (screen->iconVwin.window) { 1637d522f475Smrg Widget shell = XtParent(term); 16380bd37d32Smrg ToggleFlag(term->work.active_icon); 1639d522f475Smrg XtVaSetValues(shell, XtNiconWindow, 16400bd37d32Smrg term->work.active_icon ? screen->iconVwin.window : None, 1641d522f475Smrg (XtPointer) 0); 1642d522f475Smrg update_activeicon(); 1643d522f475Smrg } 1644d522f475Smrg} 1645d522f475Smrg#endif /* NO_ACTIVE_ICON */ 1646d522f475Smrg 1647d522f475Smrgstatic void 1648d522f475Smrgdo_softreset(Widget gw GCC_UNUSED, 1649d522f475Smrg XtPointer closure GCC_UNUSED, 1650d522f475Smrg XtPointer data GCC_UNUSED) 1651d522f475Smrg{ 1652d522f475Smrg VTReset(term, False, False); 1653d522f475Smrg} 1654d522f475Smrg 1655d522f475Smrgstatic void 1656d522f475Smrgdo_hardreset(Widget gw GCC_UNUSED, 1657d522f475Smrg XtPointer closure GCC_UNUSED, 1658d522f475Smrg XtPointer data GCC_UNUSED) 1659d522f475Smrg{ 1660d522f475Smrg VTReset(term, True, False); 1661d522f475Smrg} 1662d522f475Smrg 1663d522f475Smrgstatic void 1664d522f475Smrgdo_clearsavedlines(Widget gw GCC_UNUSED, 1665d522f475Smrg XtPointer closure GCC_UNUSED, 1666d522f475Smrg XtPointer data GCC_UNUSED) 1667d522f475Smrg{ 1668d522f475Smrg VTReset(term, True, True); 1669d522f475Smrg} 1670d522f475Smrg 1671d522f475Smrg#if OPT_TEK4014 1672d522f475Smrgstatic void 1673d522f475Smrgdo_tekmode(Widget gw GCC_UNUSED, 1674d522f475Smrg XtPointer closure GCC_UNUSED, 1675d522f475Smrg XtPointer data GCC_UNUSED) 1676d522f475Smrg{ 1677d522f475Smrg switch_modes(TEK4014_ACTIVE(term)); /* switch to tek mode */ 1678d522f475Smrg} 1679d522f475Smrg 1680d522f475Smrg/* ARGSUSED */ 1681d522f475Smrgstatic void 1682d522f475Smrgdo_vthide(Widget gw GCC_UNUSED, 1683d522f475Smrg XtPointer closure GCC_UNUSED, 1684d522f475Smrg XtPointer data GCC_UNUSED) 1685d522f475Smrg{ 1686d522f475Smrg hide_vt_window(); 1687d522f475Smrg} 1688d522f475Smrg#endif /* OPT_TEK4014 */ 1689d522f475Smrg 1690d522f475Smrg/* 1691d522f475Smrg * vtfont menu 1692d522f475Smrg */ 1693d522f475Smrg 1694d522f475Smrgstatic void 1695d522f475Smrgdo_vtfont(Widget gw GCC_UNUSED, 1696d522f475Smrg XtPointer closure, 1697d522f475Smrg XtPointer data GCC_UNUSED) 1698d522f475Smrg{ 169920d2c4d2Smrg XtermWidget xw = term; 1700d522f475Smrg char *entryname = (char *) closure; 1701d522f475Smrg int i; 1702d522f475Smrg 17030bd37d32Smrg TRACE(("do_vtfont(%s)\n", entryname)); 1704d522f475Smrg for (i = 0; i < NMENUFONTS; i++) { 1705d522f475Smrg if (strcmp(entryname, fontMenuEntries[i].name) == 0) { 170620d2c4d2Smrg SetVTFont(xw, i, True, NULL); 1707d522f475Smrg return; 1708d522f475Smrg } 1709d522f475Smrg } 171020d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 1711d522f475Smrg} 1712d522f475Smrg 1713d522f475Smrg#if OPT_DEC_CHRSET 1714d522f475Smrgstatic void 1715d522f475Smrgdo_font_doublesize(Widget gw GCC_UNUSED, 1716d522f475Smrg XtPointer closure GCC_UNUSED, 1717d522f475Smrg XtPointer data GCC_UNUSED) 1718d522f475Smrg{ 171920d2c4d2Smrg XtermWidget xw = term; 172020d2c4d2Smrg 172120d2c4d2Smrg if (TScreenOf(xw)->cache_doublesize != 0) 172220d2c4d2Smrg ToggleFlag(TScreenOf(xw)->font_doublesize); 1723d522f475Smrg update_font_doublesize(); 1724d522f475Smrg Redraw(); 1725d522f475Smrg} 1726d522f475Smrg#endif 1727d522f475Smrg 1728d522f475Smrg#if OPT_BOX_CHARS 1729d522f475Smrgstatic void 1730d522f475Smrgdo_font_boxchars(Widget gw GCC_UNUSED, 1731d522f475Smrg XtPointer closure GCC_UNUSED, 1732d522f475Smrg XtPointer data GCC_UNUSED) 1733d522f475Smrg{ 173420d2c4d2Smrg ToggleFlag(TScreenOf(term)->force_box_chars); 1735d522f475Smrg update_font_boxchars(); 1736d522f475Smrg Redraw(); 1737d522f475Smrg} 173820d2c4d2Smrg 173920d2c4d2Smrgstatic void 174020d2c4d2Smrgdo_font_packed(Widget gw GCC_UNUSED, 174120d2c4d2Smrg XtPointer closure GCC_UNUSED, 174220d2c4d2Smrg XtPointer data GCC_UNUSED) 174320d2c4d2Smrg{ 174420d2c4d2Smrg ToggleFlag(TScreenOf(term)->force_packed); 174520d2c4d2Smrg update_font_packed(); 174620d2c4d2Smrg SetVTFont(term, TScreenOf(term)->menu_font_number, True, NULL); 174720d2c4d2Smrg} 1748d522f475Smrg#endif 1749d522f475Smrg 1750d522f475Smrg#if OPT_DEC_SOFTFONT 1751d522f475Smrgstatic void 1752d522f475Smrgdo_font_loadable(Widget gw GCC_UNUSED, 1753d522f475Smrg XtPointer closure GCC_UNUSED, 1754d522f475Smrg XtPointer data GCC_UNUSED) 1755d522f475Smrg{ 1756956cc18dSsnj ToggleFlag(term->misc.font_loadable); 1757d522f475Smrg update_font_loadable(); 1758d522f475Smrg} 1759d522f475Smrg#endif 1760d522f475Smrg 1761d522f475Smrg#if OPT_RENDERFONT 1762d522f475Smrgstatic void 1763d522f475Smrgdo_font_renderfont(Widget gw GCC_UNUSED, 1764d522f475Smrg XtPointer closure GCC_UNUSED, 1765d522f475Smrg XtPointer data GCC_UNUSED) 1766d522f475Smrg{ 176720d2c4d2Smrg XtermWidget xw = (XtermWidget) term; 176820d2c4d2Smrg TScreen *screen = TScreenOf(xw); 1769d522f475Smrg int fontnum = screen->menu_font_number; 177020d2c4d2Smrg String name = TScreenOf(xw)->MenuFontName(fontnum); 1771d522f475Smrg 177220d2c4d2Smrg DefaultRenderFont(xw); 17730bd37d32Smrg ToggleFlag(xw->work.render_font); 1774d522f475Smrg update_font_renderfont(); 177520d2c4d2Smrg xtermLoadFont(xw, xtermFontName(name), True, fontnum); 1776d522f475Smrg ScrnRefresh(term, 0, 0, 1777d522f475Smrg MaxRows(screen), 1778d522f475Smrg MaxCols(screen), True); 1779d522f475Smrg} 1780d522f475Smrg#endif 1781d522f475Smrg 1782d522f475Smrg#if OPT_WIDE_CHARS 1783e39b573cSmrgstatic void 1784e39b573cSmrgsetup_wide_fonts(XtermWidget xw) 1785e39b573cSmrg{ 1786e39b573cSmrg TScreen *screen = TScreenOf(xw); 1787e39b573cSmrg 1788e39b573cSmrg if (screen->wide_chars) { 1789e39b573cSmrg if (xtermLoadWideFonts(xw, True)) { 1790e39b573cSmrg SetVTFont(xw, screen->menu_font_number, True, NULL); 1791e39b573cSmrg } 1792e39b573cSmrg } else { 1793e39b573cSmrg ChangeToWide(xw); 1794e39b573cSmrg } 1795e39b573cSmrg} 1796e39b573cSmrg 1797e39b573cSmrgstatic void 1798e39b573cSmrgsetup_narrow_fonts(XtermWidget xw) 1799e39b573cSmrg{ 1800e39b573cSmrg TScreen *screen = TScreenOf(xw); 1801e39b573cSmrg 1802e39b573cSmrg if (xtermLoadDefaultFonts(xw)) { 1803e39b573cSmrg SetVTFont(xw, screen->menu_font_number, True, NULL); 1804e39b573cSmrg } 1805e39b573cSmrg} 1806e39b573cSmrg 1807d522f475Smrgstatic void 1808d522f475Smrgdo_font_utf8_mode(Widget gw GCC_UNUSED, 1809d522f475Smrg XtPointer closure GCC_UNUSED, 1810d522f475Smrg XtPointer data GCC_UNUSED) 1811d522f475Smrg{ 1812e39b573cSmrg XtermWidget xw = term; 1813e39b573cSmrg TScreen *screen = TScreenOf(xw); 1814d522f475Smrg 1815d522f475Smrg /* 1816d522f475Smrg * If xterm was started with -wc option, it might not have the wide fonts. 1817d522f475Smrg * If xterm was not started with -wc, it might not have wide cells. 1818d522f475Smrg */ 1819d522f475Smrg if (!screen->utf8_mode) { 1820e39b573cSmrg setup_wide_fonts(xw); 1821d522f475Smrg } 1822d522f475Smrg switchPtyData(screen, !screen->utf8_mode); 1823d522f475Smrg /* 1824d522f475Smrg * We don't repaint the screen when switching UTF-8 on/off. When switching 1825d522f475Smrg * on - the Latin-1 codes should paint as-is. When switching off, that's 1826d522f475Smrg * hard to do properly. 1827d522f475Smrg */ 1828d522f475Smrg} 1829d522f475Smrg 1830e39b573cSmrgstatic void 1831e39b573cSmrgdo_font_utf8_fonts(Widget gw GCC_UNUSED, 1832e39b573cSmrg XtPointer closure GCC_UNUSED, 1833e39b573cSmrg XtPointer data GCC_UNUSED) 1834e39b573cSmrg{ 1835e39b573cSmrg XtermWidget xw = term; 1836e39b573cSmrg TScreen *screen = TScreenOf(xw); 1837e39b573cSmrg 1838e39b573cSmrg ToggleFlag(screen->utf8_fonts); 1839e39b573cSmrg update_font_utf8_fonts(); 1840e39b573cSmrg 1841e39b573cSmrg if (screen->utf8_fonts) { 1842e39b573cSmrg setup_wide_fonts(xw); 1843e39b573cSmrg } else { 1844e39b573cSmrg setup_narrow_fonts(xw); 1845e39b573cSmrg } 1846e39b573cSmrg} 1847e39b573cSmrg 1848d522f475Smrgstatic void 1849d522f475Smrgdo_font_utf8_title(Widget gw GCC_UNUSED, 1850d522f475Smrg XtPointer closure GCC_UNUSED, 1851d522f475Smrg XtPointer data GCC_UNUSED) 1852d522f475Smrg{ 1853d522f475Smrg TScreen *screen = TScreenOf(term); 1854d522f475Smrg 1855956cc18dSsnj ToggleFlag(screen->utf8_title); 1856d522f475Smrg update_font_utf8_title(); 1857d522f475Smrg} 1858d522f475Smrg#endif 1859d522f475Smrg 1860d522f475Smrg/* 1861d522f475Smrg * tek menu 1862d522f475Smrg */ 1863d522f475Smrg 1864d522f475Smrg#if OPT_TEK4014 1865d522f475Smrgstatic void 1866956cc18dSsnjdo_tektextlarge(Widget gw, 1867d522f475Smrg XtPointer closure GCC_UNUSED, 1868d522f475Smrg XtPointer data GCC_UNUSED) 1869d522f475Smrg{ 1870956cc18dSsnj TekSetFontSize(getTekWidget(gw), True, tekMenu_tektextlarge); 1871d522f475Smrg} 1872d522f475Smrg 1873d522f475Smrgstatic void 1874956cc18dSsnjdo_tektext2(Widget gw, 1875d522f475Smrg XtPointer closure GCC_UNUSED, 1876d522f475Smrg XtPointer data GCC_UNUSED) 1877d522f475Smrg{ 1878956cc18dSsnj TekSetFontSize(getTekWidget(gw), True, tekMenu_tektext2); 1879d522f475Smrg} 1880d522f475Smrg 1881d522f475Smrgstatic void 1882956cc18dSsnjdo_tektext3(Widget gw, 1883d522f475Smrg XtPointer closure GCC_UNUSED, 1884d522f475Smrg XtPointer data GCC_UNUSED) 1885d522f475Smrg{ 1886956cc18dSsnj TekSetFontSize(getTekWidget(gw), True, tekMenu_tektext3); 1887d522f475Smrg} 1888d522f475Smrg 1889d522f475Smrgstatic void 1890956cc18dSsnjdo_tektextsmall(Widget gw, 1891d522f475Smrg XtPointer closure GCC_UNUSED, 1892d522f475Smrg XtPointer data GCC_UNUSED) 1893d522f475Smrg{ 1894956cc18dSsnj TekSetFontSize(getTekWidget(gw), True, tekMenu_tektextsmall); 1895d522f475Smrg} 1896d522f475Smrg 1897d522f475Smrgstatic void 1898956cc18dSsnjdo_tekpage(Widget gw, 1899d522f475Smrg XtPointer closure GCC_UNUSED, 1900d522f475Smrg XtPointer data GCC_UNUSED) 1901d522f475Smrg{ 1902956cc18dSsnj TekSimulatePageButton(getTekWidget(gw), False); 1903d522f475Smrg} 1904d522f475Smrg 1905d522f475Smrgstatic void 1906956cc18dSsnjdo_tekreset(Widget gw, 1907d522f475Smrg XtPointer closure GCC_UNUSED, 1908d522f475Smrg XtPointer data GCC_UNUSED) 1909d522f475Smrg{ 1910956cc18dSsnj TekSimulatePageButton(getTekWidget(gw), True); 1911d522f475Smrg} 1912d522f475Smrg 1913d522f475Smrgstatic void 1914956cc18dSsnjdo_tekcopy(Widget gw, 1915d522f475Smrg XtPointer closure GCC_UNUSED, 1916d522f475Smrg XtPointer data GCC_UNUSED) 1917d522f475Smrg{ 1918956cc18dSsnj TekCopy(getTekWidget(gw)); 1919d522f475Smrg} 1920d522f475Smrg 1921d522f475Smrgstatic void 1922d522f475Smrghandle_vtshow(Widget gw GCC_UNUSED, Bool allowswitch) 1923d522f475Smrg{ 192420d2c4d2Smrg XtermWidget xw = term; 192520d2c4d2Smrg TScreen *screen = TScreenOf(xw); 1926d522f475Smrg 1927d522f475Smrg TRACE(("Show vt-window\n")); 1928d522f475Smrg if (!screen->Vshow) { /* not showing, turn on */ 1929d522f475Smrg set_vt_visibility(True); 193020d2c4d2Smrg } else if (TEK4014_SHOWN(xw) || allowswitch) { /* is showing, turn off */ 1931d522f475Smrg set_vt_visibility(False); 193220d2c4d2Smrg if (!TEK4014_ACTIVE(xw) && tekRefreshList) 1933d522f475Smrg TekRefresh(tekWidget); 1934d522f475Smrg end_vt_mode(); /* WARNING: this does a longjmp... */ 1935d522f475Smrg } else 193620d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 1937d522f475Smrg} 1938d522f475Smrg 1939d522f475Smrgstatic void 1940d522f475Smrgdo_vtshow(Widget gw, 1941d522f475Smrg XtPointer closure GCC_UNUSED, 1942d522f475Smrg XtPointer data GCC_UNUSED) 1943d522f475Smrg{ 1944d522f475Smrg handle_vtshow(gw, True); 1945d522f475Smrg} 1946d522f475Smrg 1947d522f475Smrgstatic void 1948d522f475Smrgdo_vtonoff(Widget gw, 1949d522f475Smrg XtPointer closure GCC_UNUSED, 1950d522f475Smrg XtPointer data GCC_UNUSED) 1951d522f475Smrg{ 1952d522f475Smrg handle_vtshow(gw, False); 1953d522f475Smrg} 1954d522f475Smrg 1955d522f475Smrgstatic void 1956d522f475Smrgdo_vtmode(Widget gw GCC_UNUSED, 1957d522f475Smrg XtPointer closure GCC_UNUSED, 1958d522f475Smrg XtPointer data GCC_UNUSED) 1959d522f475Smrg{ 1960d522f475Smrg switch_modes(TEK4014_ACTIVE(term)); /* switch to vt, or from */ 1961d522f475Smrg} 1962d522f475Smrg 1963d522f475Smrg/* ARGSUSED */ 1964d522f475Smrgstatic void 1965d522f475Smrgdo_tekhide(Widget gw GCC_UNUSED, 1966d522f475Smrg XtPointer closure GCC_UNUSED, 1967d522f475Smrg XtPointer data GCC_UNUSED) 1968d522f475Smrg{ 1969d522f475Smrg hide_tek_window(); 1970d522f475Smrg} 1971d522f475Smrg#endif /* OPT_TEK4014 */ 1972d522f475Smrg 1973d522f475Smrg/* 1974d522f475Smrg * public handler routines 1975d522f475Smrg */ 19760bd37d32Smrgint 1977894e0ac8SmrgdecodeToggle(XtermWidget xw, String *params, Cardinal nparams) 1978d522f475Smrg{ 19790bd37d32Smrg int dir = toggleErr; 1980d522f475Smrg 1981d522f475Smrg switch (nparams) { 1982d522f475Smrg case 0: 19830bd37d32Smrg dir = toggleAll; 1984d522f475Smrg break; 1985d522f475Smrg case 1: 1986d522f475Smrg if (XmuCompareISOLatin1(params[0], "on") == 0) 19870bd37d32Smrg dir = toggleOn; 1988d522f475Smrg else if (XmuCompareISOLatin1(params[0], "off") == 0) 19890bd37d32Smrg dir = toggleOff; 1990d522f475Smrg else if (XmuCompareISOLatin1(params[0], "toggle") == 0) 19910bd37d32Smrg dir = toggleAll; 1992d522f475Smrg break; 1993d522f475Smrg } 1994d522f475Smrg 19950bd37d32Smrg if (dir == toggleErr) { 199620d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 19970bd37d32Smrg } 19980bd37d32Smrg 19990bd37d32Smrg return dir; 20000bd37d32Smrg} 2001d522f475Smrg 20020bd37d32Smrgstatic void 20030bd37d32Smrghandle_toggle(void (*proc) PROTO_XT_CALLBACK_ARGS, 20040bd37d32Smrg int var, 2005894e0ac8Smrg String *params, 20060bd37d32Smrg Cardinal nparams, 20070bd37d32Smrg Widget w, 20080bd37d32Smrg XtPointer closure, 20090bd37d32Smrg XtPointer data) 20100bd37d32Smrg{ 20110bd37d32Smrg XtermWidget xw = term; 20120bd37d32Smrg 20130bd37d32Smrg switch (decodeToggle(xw, params, nparams)) { 20140bd37d32Smrg 20150bd37d32Smrg case toggleAll: 2016d522f475Smrg (*proc) (w, closure, data); 2017d522f475Smrg break; 2018d522f475Smrg 20190bd37d32Smrg case toggleOff: 2020d522f475Smrg if (var) 2021d522f475Smrg (*proc) (w, closure, data); 2022d522f475Smrg else 202320d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 2024d522f475Smrg break; 2025d522f475Smrg 20260bd37d32Smrg case toggleOn: 2027d522f475Smrg if (!var) 2028d522f475Smrg (*proc) (w, closure, data); 2029d522f475Smrg else 203020d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 2031d522f475Smrg break; 2032d522f475Smrg } 2033d522f475Smrg return; 2034d522f475Smrg} 2035d522f475Smrg 2036d522f475Smrg#define handle_vt_toggle(proc, var, params, nparams, w) \ 2037d522f475Smrg handle_toggle(proc, (int) (var), params, nparams, w, (XtPointer)0, (XtPointer)0) 2038d522f475Smrg 203920d2c4d2Smrg#define HANDLE_VT_TOGGLE(name) \ 204020d2c4d2Smrg handle_vt_toggle(do_##name, TScreenOf(term)->name, params, *param_count, w) 204120d2c4d2Smrg 2042d522f475Smrg#define handle_tek_toggle(proc, var, params, nparams, w) \ 2043d522f475Smrg handle_toggle(proc, (int) (var), params, nparams, w, (XtPointer)0, (XtPointer)0) 2044d522f475Smrg 2045d522f475Smrgvoid 2046d522f475SmrgHandleAllowSends(Widget w, 2047894e0ac8Smrg XEvent *event GCC_UNUSED, 2048894e0ac8Smrg String *params, 2049d522f475Smrg Cardinal *param_count) 2050d522f475Smrg{ 205120d2c4d2Smrg handle_vt_toggle(do_allowsends, TScreenOf(term)->allowSendEvents, 2052d522f475Smrg params, *param_count, w); 2053d522f475Smrg} 2054d522f475Smrg 2055d522f475Smrgvoid 2056d522f475SmrgHandleSetVisualBell(Widget w, 2057894e0ac8Smrg XEvent *event GCC_UNUSED, 2058894e0ac8Smrg String *params, 2059d522f475Smrg Cardinal *param_count) 2060d522f475Smrg{ 206120d2c4d2Smrg HANDLE_VT_TOGGLE(visualbell); 2062d522f475Smrg} 2063d522f475Smrg 2064d522f475Smrgvoid 2065d522f475SmrgHandleSetPopOnBell(Widget w, 2066894e0ac8Smrg XEvent *event GCC_UNUSED, 2067894e0ac8Smrg String *params, 2068d522f475Smrg Cardinal *param_count) 2069d522f475Smrg{ 207020d2c4d2Smrg HANDLE_VT_TOGGLE(poponbell); 2071d522f475Smrg} 2072d522f475Smrg 2073d522f475Smrg#ifdef ALLOWLOGGING 2074d522f475Smrgvoid 2075d522f475SmrgHandleLogging(Widget w, 2076894e0ac8Smrg XEvent *event GCC_UNUSED, 2077894e0ac8Smrg String *params, 2078d522f475Smrg Cardinal *param_count) 2079d522f475Smrg{ 208020d2c4d2Smrg HANDLE_VT_TOGGLE(logging); 2081d522f475Smrg} 2082d522f475Smrg#endif 2083d522f475Smrg 2084e39b573cSmrg#if OPT_PRINT_ON_EXIT 2085e39b573cSmrgvoid 2086e39b573cSmrgHandleWriteNow(Widget w, 2087894e0ac8Smrg XEvent *event GCC_UNUSED, 2088894e0ac8Smrg String *params GCC_UNUSED, 2089e39b573cSmrg Cardinal *param_count GCC_UNUSED) 2090e39b573cSmrg{ 2091e39b573cSmrg do_write_now(w, 0, 0); 2092e39b573cSmrg} 2093e39b573cSmrg 2094e39b573cSmrgvoid 2095e39b573cSmrgHandleWriteError(Widget w, 2096894e0ac8Smrg XEvent *event GCC_UNUSED, 2097894e0ac8Smrg String *params, 2098e39b573cSmrg Cardinal *param_count) 2099e39b573cSmrg{ 2100e39b573cSmrg HANDLE_VT_TOGGLE(write_error); 2101e39b573cSmrg} 2102e39b573cSmrg#endif 2103e39b573cSmrg 2104d522f475Smrg/* ARGSUSED */ 2105d522f475Smrgvoid 210620d2c4d2SmrgHandlePrintScreen(Widget w GCC_UNUSED, 2107894e0ac8Smrg XEvent *event GCC_UNUSED, 2108894e0ac8Smrg String *params GCC_UNUSED, 2109d522f475Smrg Cardinal *param_count GCC_UNUSED) 2110d522f475Smrg{ 211120d2c4d2Smrg xtermPrintScreen(term, True, getPrinterFlags(term, params, param_count)); 2112d522f475Smrg} 2113d522f475Smrg 2114956cc18dSsnj/* ARGSUSED */ 2115956cc18dSsnjvoid 211620d2c4d2SmrgHandlePrintEverything(Widget w GCC_UNUSED, 2117894e0ac8Smrg XEvent *event GCC_UNUSED, 2118894e0ac8Smrg String *params, 211920d2c4d2Smrg Cardinal *param_count) 2120956cc18dSsnj{ 212120d2c4d2Smrg xtermPrintEverything(term, getPrinterFlags(term, params, param_count)); 2122956cc18dSsnj} 2123956cc18dSsnj 2124d522f475Smrg/* ARGSUSED */ 2125d522f475Smrgvoid 2126d522f475SmrgHandlePrintControlMode(Widget w, 2127894e0ac8Smrg XEvent *event GCC_UNUSED, 2128894e0ac8Smrg String *params GCC_UNUSED, 2129d522f475Smrg Cardinal *param_count GCC_UNUSED) 2130d522f475Smrg{ 2131d522f475Smrg do_print_redir(w, (XtPointer) 0, (XtPointer) 0); 2132d522f475Smrg} 2133d522f475Smrg 2134d522f475Smrg/* ARGSUSED */ 2135d522f475Smrgvoid 2136d522f475SmrgHandleRedraw(Widget w, 2137894e0ac8Smrg XEvent *event GCC_UNUSED, 2138894e0ac8Smrg String *params GCC_UNUSED, 2139d522f475Smrg Cardinal *param_count GCC_UNUSED) 2140d522f475Smrg{ 2141d522f475Smrg do_redraw(w, (XtPointer) 0, (XtPointer) 0); 2142d522f475Smrg} 2143d522f475Smrg 2144d522f475Smrg/* ARGSUSED */ 2145d522f475Smrgvoid 2146d522f475SmrgHandleSendSignal(Widget w, 2147894e0ac8Smrg XEvent *event GCC_UNUSED, 2148894e0ac8Smrg String *params, 2149d522f475Smrg Cardinal *param_count) 2150d522f475Smrg{ 2151d522f475Smrg /* *INDENT-OFF* */ 215201037d57Smrg static const struct sigtab { 215320d2c4d2Smrg const char *name; 2154d522f475Smrg int sig; 2155d522f475Smrg } signals[] = { 2156d522f475Smrg#ifdef SIGTSTP 2157d522f475Smrg { "suspend", SIGTSTP }, 2158d522f475Smrg { "tstp", SIGTSTP }, 2159d522f475Smrg#endif 2160d522f475Smrg#ifdef SIGCONT 2161d522f475Smrg { "cont", SIGCONT }, 2162d522f475Smrg#endif 2163d522f475Smrg { "int", SIGINT }, 2164d522f475Smrg { "hup", SIGHUP }, 2165d522f475Smrg { "quit", SIGQUIT }, 2166d522f475Smrg { "alrm", SIGALRM }, 2167d522f475Smrg { "alarm", SIGALRM }, 2168d522f475Smrg { "term", SIGTERM }, 2169d522f475Smrg { "kill", SIGKILL }, 2170d522f475Smrg { NULL, 0 }, 2171d522f475Smrg }; 2172d522f475Smrg /* *INDENT-ON* */ 2173d522f475Smrg 2174d522f475Smrg if (*param_count == 1) { 217501037d57Smrg const struct sigtab *st; 2176d522f475Smrg 2177d522f475Smrg for (st = signals; st->name; st++) { 2178d522f475Smrg if (XmuCompareISOLatin1(st->name, params[0]) == 0) { 2179d522f475Smrg handle_send_signal(w, st->sig); 2180d522f475Smrg return; 2181d522f475Smrg } 2182d522f475Smrg } 2183d522f475Smrg /* one could allow numeric values, but that would be a security hole */ 2184d522f475Smrg } 2185d522f475Smrg 218620d2c4d2Smrg Bell(term, XkbBI_MinorError, 0); 2187d522f475Smrg} 2188d522f475Smrg 2189d522f475Smrg/* ARGSUSED */ 2190d522f475Smrgvoid 2191d522f475SmrgHandleQuit(Widget w, 2192894e0ac8Smrg XEvent *event GCC_UNUSED, 2193894e0ac8Smrg String *params GCC_UNUSED, 2194d522f475Smrg Cardinal *param_count GCC_UNUSED) 2195d522f475Smrg{ 2196d522f475Smrg do_quit(w, (XtPointer) 0, (XtPointer) 0); 2197d522f475Smrg} 2198d522f475Smrg 2199d522f475Smrgvoid 2200d522f475SmrgHandle8BitControl(Widget w, 2201894e0ac8Smrg XEvent *event GCC_UNUSED, 2202894e0ac8Smrg String *params, 2203d522f475Smrg Cardinal *param_count) 2204d522f475Smrg{ 220520d2c4d2Smrg handle_vt_toggle(do_8bit_control, TScreenOf(term)->control_eight_bits, 2206d522f475Smrg params, *param_count, w); 2207d522f475Smrg} 2208d522f475Smrg 2209d522f475Smrgvoid 2210d522f475SmrgHandleBackarrow(Widget w, 2211894e0ac8Smrg XEvent *event GCC_UNUSED, 2212894e0ac8Smrg String *params, 2213d522f475Smrg Cardinal *param_count) 2214d522f475Smrg{ 2215d522f475Smrg handle_vt_toggle(do_backarrow, term->keyboard.flags & MODE_DECBKM, 2216d522f475Smrg params, *param_count, w); 2217d522f475Smrg} 2218d522f475Smrg 22190bd37d32Smrg#if OPT_MAXIMIZE 22200bd37d32Smrg#if OPT_TEK4014 22210bd37d32Smrg#define WhichEWMH (TEK4014_ACTIVE(xw) != 0) 22220bd37d32Smrg#else 22230bd37d32Smrg#define WhichEWMH 0 22240bd37d32Smrg#endif 22250bd37d32Smrgstatic void 22260bd37d32Smrgdo_fullscreen(Widget gw GCC_UNUSED, 22270bd37d32Smrg XtPointer closure GCC_UNUSED, 22280bd37d32Smrg XtPointer data GCC_UNUSED) 22290bd37d32Smrg{ 22300bd37d32Smrg XtermWidget xw = term; 22310bd37d32Smrg 22320bd37d32Smrg if (resource.fullscreen != esNever) 22330bd37d32Smrg FullScreen(xw, !xw->work.ewmh[WhichEWMH].mode); 22340bd37d32Smrg} 22350bd37d32Smrg 22360bd37d32Smrg/* ARGSUSED */ 22370bd37d32Smrgvoid 22380bd37d32SmrgHandleFullscreen(Widget w, 2239894e0ac8Smrg XEvent *event GCC_UNUSED, 2240894e0ac8Smrg String *params GCC_UNUSED, 22410bd37d32Smrg Cardinal *param_count GCC_UNUSED) 22420bd37d32Smrg{ 22430bd37d32Smrg XtermWidget xw = term; 22440bd37d32Smrg 22450bd37d32Smrg if (resource.fullscreen != esNever) { 22460bd37d32Smrg handle_vt_toggle(do_fullscreen, xw->work.ewmh[WhichEWMH].mode, 22470bd37d32Smrg params, *param_count, w); 22480bd37d32Smrg } 22490bd37d32Smrg} 22500bd37d32Smrg 22510bd37d32Smrgvoid 22520bd37d32Smrgupdate_fullscreen(void) 22530bd37d32Smrg{ 22540bd37d32Smrg XtermWidget xw = term; 22550bd37d32Smrg 22560bd37d32Smrg if (resource.fullscreen <= 1) { 22570bd37d32Smrg UpdateCheckbox("update_fullscreen", 22580bd37d32Smrg mainMenuEntries, 22590bd37d32Smrg mainMenu_fullscreen, 22600bd37d32Smrg xw->work.ewmh[WhichEWMH].mode); 22610bd37d32Smrg } else { 22620bd37d32Smrg SetItemSensitivity(mainMenuEntries[mainMenu_fullscreen].widget, 22630bd37d32Smrg False); 22640bd37d32Smrg } 22650bd37d32Smrg} 22660bd37d32Smrg 22670bd37d32Smrg#endif /* OPT_MAXIMIZE */ 22680bd37d32Smrg 2269e0a2b6dfSmrg#if OPT_SIXEL_GRAPHICS 2270e0a2b6dfSmrgstatic void 2271e0a2b6dfSmrgdo_sixelscrolling(Widget gw GCC_UNUSED, 2272e0a2b6dfSmrg XtPointer closure GCC_UNUSED, 2273e0a2b6dfSmrg XtPointer data GCC_UNUSED) 2274e0a2b6dfSmrg{ 2275e0a2b6dfSmrg term->keyboard.flags ^= MODE_DECSDM; 2276e0a2b6dfSmrg update_decsdm(); 2277e0a2b6dfSmrg} 2278e0a2b6dfSmrg 2279894e0ac8Smrgvoid 2280894e0ac8Smrgupdate_decsdm(void) 2281894e0ac8Smrg{ 2282894e0ac8Smrg UpdateCheckbox("update_decsdm", 2283894e0ac8Smrg vtMenuEntries, 2284894e0ac8Smrg vtMenu_sixelscrolling, 2285894e0ac8Smrg (term->keyboard.flags & MODE_DECSDM) != 0); 2286894e0ac8Smrg} 2287894e0ac8Smrg 2288894e0ac8Smrgvoid 2289894e0ac8SmrgHandleSixelScrolling(Widget w, 2290894e0ac8Smrg XEvent *event GCC_UNUSED, 2291894e0ac8Smrg String *params, 2292894e0ac8Smrg Cardinal *param_count) 2293894e0ac8Smrg{ 2294894e0ac8Smrg handle_vt_toggle(do_sixelscrolling, term->keyboard.flags & MODE_DECSDM, 2295894e0ac8Smrg params, *param_count, w); 2296894e0ac8Smrg} 2297894e0ac8Smrg#endif 2298894e0ac8Smrg 2299894e0ac8Smrg#if OPT_GRAPHICS 2300e0a2b6dfSmrgstatic void 2301e0a2b6dfSmrgdo_privatecolorregisters(Widget gw GCC_UNUSED, 2302e0a2b6dfSmrg XtPointer closure GCC_UNUSED, 2303e0a2b6dfSmrg XtPointer data GCC_UNUSED) 2304e0a2b6dfSmrg{ 2305e0a2b6dfSmrg TScreen *screen = TScreenOf(term); 2306e0a2b6dfSmrg 2307e0a2b6dfSmrg ToggleFlag(screen->privatecolorregisters); 2308e0a2b6dfSmrg update_privatecolorregisters(); 2309e0a2b6dfSmrg} 2310e0a2b6dfSmrg 2311e0a2b6dfSmrgvoid 2312e0a2b6dfSmrgupdate_privatecolorregisters(void) 2313e0a2b6dfSmrg{ 2314e0a2b6dfSmrg UpdateCheckbox("update_privatecolorregisters", 2315e0a2b6dfSmrg vtMenuEntries, 2316e0a2b6dfSmrg vtMenu_privatecolorregisters, 2317e0a2b6dfSmrg TScreenOf(term)->privatecolorregisters); 2318e0a2b6dfSmrg} 2319e0a2b6dfSmrg 2320e0a2b6dfSmrgvoid 2321e0a2b6dfSmrgHandleSetPrivateColorRegisters(Widget w, 2322894e0ac8Smrg XEvent *event GCC_UNUSED, 2323894e0ac8Smrg String *params, 2324e0a2b6dfSmrg Cardinal *param_count) 2325e0a2b6dfSmrg{ 2326e0a2b6dfSmrg HANDLE_VT_TOGGLE(privatecolorregisters); 2327e0a2b6dfSmrg} 2328e0a2b6dfSmrg#endif 2329e0a2b6dfSmrg 2330d522f475Smrg#if OPT_SUN_FUNC_KEYS 2331d522f475Smrgvoid 2332d522f475SmrgHandleSunFunctionKeys(Widget w, 2333894e0ac8Smrg XEvent *event GCC_UNUSED, 2334894e0ac8Smrg String *params, 2335d522f475Smrg Cardinal *param_count) 2336d522f475Smrg{ 2337d522f475Smrg handle_vt_toggle(do_sun_fkeys, term->keyboard.type == keyboardIsSun, 2338d522f475Smrg params, *param_count, w); 2339d522f475Smrg} 2340d522f475Smrg#endif 2341d522f475Smrg 2342d522f475Smrg#if OPT_NUM_LOCK 2343d522f475Smrgvoid 2344d522f475SmrgHandleNumLock(Widget w, 2345894e0ac8Smrg XEvent *event GCC_UNUSED, 2346894e0ac8Smrg String *params, 2347d522f475Smrg Cardinal *param_count) 2348d522f475Smrg{ 2349d522f475Smrg handle_vt_toggle(do_num_lock, term->misc.real_NumLock, 2350d522f475Smrg params, *param_count, w); 2351d522f475Smrg} 2352d522f475Smrg 2353d522f475Smrgvoid 2354d522f475SmrgHandleAltEsc(Widget w, 2355894e0ac8Smrg XEvent *event GCC_UNUSED, 2356894e0ac8Smrg String *params, 2357d522f475Smrg Cardinal *param_count) 2358d522f475Smrg{ 23590bd37d32Smrg handle_vt_toggle(do_alt_esc, !TScreenOf(term)->alt_sends_esc, 2360d522f475Smrg params, *param_count, w); 2361d522f475Smrg} 2362d522f475Smrg 2363d522f475Smrgvoid 2364d522f475SmrgHandleMetaEsc(Widget w, 2365894e0ac8Smrg XEvent *event GCC_UNUSED, 2366894e0ac8Smrg String *params, 2367d522f475Smrg Cardinal *param_count) 2368d522f475Smrg{ 236920d2c4d2Smrg handle_vt_toggle(do_meta_esc, TScreenOf(term)->meta_sends_esc, 2370d522f475Smrg params, *param_count, w); 2371d522f475Smrg} 2372d522f475Smrg#endif 2373d522f475Smrg 2374d522f475Smrgvoid 2375d522f475SmrgHandleDeleteIsDEL(Widget w, 2376894e0ac8Smrg XEvent *event GCC_UNUSED, 2377894e0ac8Smrg String *params, 2378d522f475Smrg Cardinal *param_count) 2379d522f475Smrg{ 238020d2c4d2Smrg handle_vt_toggle(do_delete_del, TScreenOf(term)->delete_is_del, 2381d522f475Smrg params, *param_count, w); 2382d522f475Smrg} 2383d522f475Smrg 2384d522f475Smrgvoid 2385d522f475SmrgHandleOldFunctionKeys(Widget w, 2386894e0ac8Smrg XEvent *event GCC_UNUSED, 2387894e0ac8Smrg String *params, 2388d522f475Smrg Cardinal *param_count) 2389d522f475Smrg{ 2390d522f475Smrg handle_vt_toggle(do_old_fkeys, term->keyboard.type == keyboardIsLegacy, 2391d522f475Smrg params, *param_count, w); 2392d522f475Smrg} 2393d522f475Smrg 2394d522f475Smrg#if OPT_SUNPC_KBD 2395d522f475Smrgvoid 2396d522f475SmrgHandleSunKeyboard(Widget w, 2397894e0ac8Smrg XEvent *event GCC_UNUSED, 2398894e0ac8Smrg String *params, 2399d522f475Smrg Cardinal *param_count) 2400d522f475Smrg{ 2401d522f475Smrg handle_vt_toggle(do_sun_kbd, term->keyboard.type == keyboardIsVT220, 2402d522f475Smrg params, *param_count, w); 2403d522f475Smrg} 2404d522f475Smrg#endif 2405d522f475Smrg 2406d522f475Smrg#if OPT_HP_FUNC_KEYS 2407d522f475Smrgvoid 2408d522f475SmrgHandleHpFunctionKeys(Widget w, 2409894e0ac8Smrg XEvent *event GCC_UNUSED, 2410894e0ac8Smrg String *params, 2411d522f475Smrg Cardinal *param_count) 2412d522f475Smrg{ 2413d522f475Smrg handle_vt_toggle(do_hp_fkeys, term->keyboard.type == keyboardIsHP, 2414d522f475Smrg params, *param_count, w); 2415d522f475Smrg} 2416d522f475Smrg#endif 2417d522f475Smrg 2418d522f475Smrg#if OPT_SCO_FUNC_KEYS 2419d522f475Smrgvoid 2420d522f475SmrgHandleScoFunctionKeys(Widget w, 2421894e0ac8Smrg XEvent *event GCC_UNUSED, 2422894e0ac8Smrg String *params, 2423d522f475Smrg Cardinal *param_count) 2424d522f475Smrg{ 2425d522f475Smrg handle_vt_toggle(do_sco_fkeys, term->keyboard.type == keyboardIsSCO, 2426d522f475Smrg params, *param_count, w); 2427d522f475Smrg} 2428d522f475Smrg#endif 2429d522f475Smrg 2430d522f475Smrgvoid 2431d522f475SmrgHandleScrollbar(Widget w, 2432894e0ac8Smrg XEvent *event GCC_UNUSED, 2433894e0ac8Smrg String *params, 2434d522f475Smrg Cardinal *param_count) 2435d522f475Smrg{ 243620d2c4d2Smrg XtermWidget xw = term; 243720d2c4d2Smrg 243820d2c4d2Smrg if (IsIcon(TScreenOf(xw))) { 243920d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 2440d522f475Smrg } else { 244120d2c4d2Smrg handle_vt_toggle(do_scrollbar, TScreenOf(xw)->fullVwin.sb_info.width, 2442d522f475Smrg params, *param_count, w); 2443d522f475Smrg } 2444d522f475Smrg} 2445d522f475Smrg 2446d522f475Smrgvoid 2447d522f475SmrgHandleJumpscroll(Widget w, 2448894e0ac8Smrg XEvent *event GCC_UNUSED, 2449894e0ac8Smrg String *params, 2450d522f475Smrg Cardinal *param_count) 2451d522f475Smrg{ 245220d2c4d2Smrg HANDLE_VT_TOGGLE(jumpscroll); 2453d522f475Smrg} 2454d522f475Smrg 24552e4f8982Smrgvoid 24562e4f8982SmrgHandleKeepClipboard(Widget w, 24572e4f8982Smrg XEvent *event GCC_UNUSED, 24582e4f8982Smrg String *params, 24592e4f8982Smrg Cardinal *param_count) 24602e4f8982Smrg{ 24612e4f8982Smrg HANDLE_VT_TOGGLE(keepClipboard); 24622e4f8982Smrg} 24632e4f8982Smrg 2464d522f475Smrgvoid 2465d522f475SmrgHandleKeepSelection(Widget w, 2466894e0ac8Smrg XEvent *event GCC_UNUSED, 2467894e0ac8Smrg String *params, 2468d522f475Smrg Cardinal *param_count) 2469d522f475Smrg{ 247020d2c4d2Smrg HANDLE_VT_TOGGLE(keepSelection); 2471d522f475Smrg} 2472d522f475Smrg 2473d522f475Smrgvoid 2474d522f475SmrgHandleSetSelect(Widget w, 2475894e0ac8Smrg XEvent *event GCC_UNUSED, 2476894e0ac8Smrg String *params, 2477d522f475Smrg Cardinal *param_count) 2478d522f475Smrg{ 247920d2c4d2Smrg handle_vt_toggle(do_selectClipboard, TScreenOf(term)->selectToClipboard, 2480d522f475Smrg params, *param_count, w); 2481d522f475Smrg} 2482d522f475Smrg 2483d522f475Smrgvoid 2484d522f475SmrgHandleReverseVideo(Widget w, 2485894e0ac8Smrg XEvent *event GCC_UNUSED, 2486894e0ac8Smrg String *params, 2487d522f475Smrg Cardinal *param_count) 2488d522f475Smrg{ 2489d522f475Smrg handle_vt_toggle(do_reversevideo, (term->misc.re_verse0), 2490d522f475Smrg params, *param_count, w); 2491d522f475Smrg} 2492d522f475Smrg 2493d522f475Smrgvoid 2494d522f475SmrgHandleAutoWrap(Widget w, 2495894e0ac8Smrg XEvent *event GCC_UNUSED, 2496894e0ac8Smrg String *params, 2497d522f475Smrg Cardinal *param_count) 2498d522f475Smrg{ 2499d522f475Smrg handle_vt_toggle(do_autowrap, (term->flags & WRAPAROUND), 2500d522f475Smrg params, *param_count, w); 2501d522f475Smrg} 2502d522f475Smrg 2503d522f475Smrgvoid 2504d522f475SmrgHandleReverseWrap(Widget w, 2505894e0ac8Smrg XEvent *event GCC_UNUSED, 2506894e0ac8Smrg String *params, 2507d522f475Smrg Cardinal *param_count) 2508d522f475Smrg{ 2509d522f475Smrg handle_vt_toggle(do_reversewrap, (term->flags & REVERSEWRAP), 2510d522f475Smrg params, *param_count, w); 2511d522f475Smrg} 2512d522f475Smrg 2513d522f475Smrgvoid 2514d522f475SmrgHandleAutoLineFeed(Widget w, 2515894e0ac8Smrg XEvent *event GCC_UNUSED, 2516894e0ac8Smrg String *params, 2517d522f475Smrg Cardinal *param_count) 2518d522f475Smrg{ 2519d522f475Smrg handle_vt_toggle(do_autolinefeed, (term->flags & LINEFEED), 2520d522f475Smrg params, *param_count, w); 2521d522f475Smrg} 2522d522f475Smrg 2523d522f475Smrgvoid 2524d522f475SmrgHandleAppCursor(Widget w, 2525894e0ac8Smrg XEvent *event GCC_UNUSED, 2526894e0ac8Smrg String *params, 2527d522f475Smrg Cardinal *param_count) 2528d522f475Smrg{ 2529d522f475Smrg handle_vt_toggle(do_appcursor, (term->keyboard.flags & MODE_DECCKM), 2530d522f475Smrg params, *param_count, w); 2531d522f475Smrg} 2532d522f475Smrg 2533d522f475Smrgvoid 2534d522f475SmrgHandleAppKeypad(Widget w, 2535894e0ac8Smrg XEvent *event GCC_UNUSED, 2536894e0ac8Smrg String *params, 2537d522f475Smrg Cardinal *param_count) 2538d522f475Smrg{ 2539d522f475Smrg handle_vt_toggle(do_appkeypad, (term->keyboard.flags & MODE_DECKPAM), 2540d522f475Smrg params, *param_count, w); 2541d522f475Smrg} 2542d522f475Smrg 2543d522f475Smrgvoid 2544d522f475SmrgHandleScrollKey(Widget w, 2545894e0ac8Smrg XEvent *event GCC_UNUSED, 2546894e0ac8Smrg String *params, 2547d522f475Smrg Cardinal *param_count) 2548d522f475Smrg{ 254920d2c4d2Smrg HANDLE_VT_TOGGLE(scrollkey); 2550d522f475Smrg} 2551d522f475Smrg 2552d522f475Smrgvoid 2553d522f475SmrgHandleScrollTtyOutput(Widget w, 2554894e0ac8Smrg XEvent *event GCC_UNUSED, 2555894e0ac8Smrg String *params, 2556d522f475Smrg Cardinal *param_count) 2557d522f475Smrg{ 255820d2c4d2Smrg HANDLE_VT_TOGGLE(scrollttyoutput); 2559d522f475Smrg} 2560d522f475Smrg 2561d522f475Smrgvoid 2562d522f475SmrgHandleAllow132(Widget w, 2563894e0ac8Smrg XEvent *event GCC_UNUSED, 2564894e0ac8Smrg String *params, 2565d522f475Smrg Cardinal *param_count) 2566d522f475Smrg{ 256720d2c4d2Smrg handle_vt_toggle(do_allow132, TScreenOf(term)->c132, 2568d522f475Smrg params, *param_count, w); 2569d522f475Smrg} 2570d522f475Smrg 2571d522f475Smrgvoid 2572d522f475SmrgHandleCursesEmul(Widget w, 2573894e0ac8Smrg XEvent *event GCC_UNUSED, 2574894e0ac8Smrg String *params, 2575d522f475Smrg Cardinal *param_count) 2576d522f475Smrg{ 257720d2c4d2Smrg handle_vt_toggle(do_cursesemul, TScreenOf(term)->curses, 2578d522f475Smrg params, *param_count, w); 2579d522f475Smrg} 2580d522f475Smrg 2581d522f475Smrgvoid 2582d522f475SmrgHandleBellIsUrgent(Widget w, 2583894e0ac8Smrg XEvent *event GCC_UNUSED, 2584894e0ac8Smrg String *params, 2585d522f475Smrg Cardinal *param_count) 2586d522f475Smrg{ 258720d2c4d2Smrg HANDLE_VT_TOGGLE(bellIsUrgent); 2588d522f475Smrg} 2589d522f475Smrg 2590d522f475Smrgvoid 2591d522f475SmrgHandleMarginBell(Widget w, 2592894e0ac8Smrg XEvent *event GCC_UNUSED, 2593894e0ac8Smrg String *params, 2594d522f475Smrg Cardinal *param_count) 2595d522f475Smrg{ 259620d2c4d2Smrg HANDLE_VT_TOGGLE(marginbell); 2597d522f475Smrg} 2598d522f475Smrg 2599d522f475Smrg#if OPT_BLINK_CURS 2600d522f475Smrgvoid 2601d522f475SmrgHandleCursorBlink(Widget w, 2602894e0ac8Smrg XEvent *event GCC_UNUSED, 2603894e0ac8Smrg String *params, 2604d522f475Smrg Cardinal *param_count) 2605d522f475Smrg{ 2606d522f475Smrg /* eventually want to see if sensitive or not */ 260720d2c4d2Smrg handle_vt_toggle(do_cursorblink, TScreenOf(term)->cursor_blink, 2608d522f475Smrg params, *param_count, w); 2609d522f475Smrg} 2610d522f475Smrg#endif 2611d522f475Smrg 2612d522f475Smrgvoid 2613d522f475SmrgHandleAltScreen(Widget w, 2614894e0ac8Smrg XEvent *event GCC_UNUSED, 2615894e0ac8Smrg String *params, 2616d522f475Smrg Cardinal *param_count) 2617d522f475Smrg{ 2618d522f475Smrg /* eventually want to see if sensitive or not */ 261920d2c4d2Smrg handle_vt_toggle(do_altscreen, TScreenOf(term)->whichBuf, 2620d522f475Smrg params, *param_count, w); 2621d522f475Smrg} 2622d522f475Smrg 2623d522f475Smrgvoid 2624d522f475SmrgHandleTiteInhibit(Widget w, 2625894e0ac8Smrg XEvent *event GCC_UNUSED, 2626894e0ac8Smrg String *params, 2627d522f475Smrg Cardinal *param_count) 2628d522f475Smrg{ 2629d522f475Smrg /* eventually want to see if sensitive or not */ 2630d522f475Smrg handle_vt_toggle(do_titeInhibit, !(term->misc.titeInhibit), 2631d522f475Smrg params, *param_count, w); 2632d522f475Smrg} 2633d522f475Smrg 2634d522f475Smrg/* ARGSUSED */ 2635d522f475Smrgvoid 2636d522f475SmrgHandleSoftReset(Widget w, 2637894e0ac8Smrg XEvent *event GCC_UNUSED, 2638894e0ac8Smrg String *params GCC_UNUSED, 2639d522f475Smrg Cardinal *param_count GCC_UNUSED) 2640d522f475Smrg{ 2641d522f475Smrg do_softreset(w, (XtPointer) 0, (XtPointer) 0); 2642d522f475Smrg} 2643d522f475Smrg 2644d522f475Smrg/* ARGSUSED */ 2645d522f475Smrgvoid 2646d522f475SmrgHandleHardReset(Widget w, 2647894e0ac8Smrg XEvent *event GCC_UNUSED, 2648894e0ac8Smrg String *params GCC_UNUSED, 2649d522f475Smrg Cardinal *param_count GCC_UNUSED) 2650d522f475Smrg{ 2651d522f475Smrg do_hardreset(w, (XtPointer) 0, (XtPointer) 0); 2652d522f475Smrg} 2653d522f475Smrg 2654d522f475Smrg/* ARGSUSED */ 2655d522f475Smrgvoid 2656d522f475SmrgHandleClearSavedLines(Widget w, 2657894e0ac8Smrg XEvent *event GCC_UNUSED, 2658894e0ac8Smrg String *params GCC_UNUSED, 2659d522f475Smrg Cardinal *param_count GCC_UNUSED) 2660d522f475Smrg{ 2661d522f475Smrg do_clearsavedlines(w, (XtPointer) 0, (XtPointer) 0); 2662d522f475Smrg} 2663d522f475Smrg 2664e39b573cSmrgvoid 2665e39b573cSmrgHandleAllowBoldFonts(Widget w, 2666894e0ac8Smrg XEvent *event GCC_UNUSED, 2667894e0ac8Smrg String *params, 2668e39b573cSmrg Cardinal *param_count) 2669e39b573cSmrg{ 2670e39b573cSmrg HANDLE_VT_TOGGLE(allowBoldFonts); 2671e39b573cSmrg} 2672e39b573cSmrg 267301037d57Smrg#if OPT_LOAD_VTFONTS 267401037d57Smrgvoid 267501037d57Smrgupdate_font_escape(void) 267601037d57Smrg{ 267701037d57Smrg TScreen *screen = TScreenOf(term); 267801037d57Smrg 267901037d57Smrg SetItemSensitivity(fontMenuEntries[fontMenu_fontescape].widget, 268001037d57Smrg ((screen->allowFontOps && 268101037d57Smrg screen->EscapeFontName()) 268201037d57Smrg ? True : False)); 268301037d57Smrg} 268401037d57Smrg#endif 268501037d57Smrg 2686d522f475Smrg#if OPT_DEC_CHRSET 2687d522f475Smrgvoid 2688d522f475SmrgHandleFontDoublesize(Widget w, 2689894e0ac8Smrg XEvent *event GCC_UNUSED, 2690894e0ac8Smrg String *params, 2691d522f475Smrg Cardinal *param_count) 2692d522f475Smrg{ 269320d2c4d2Smrg HANDLE_VT_TOGGLE(font_doublesize); 2694d522f475Smrg} 2695d522f475Smrg#endif 2696d522f475Smrg 2697d522f475Smrg#if OPT_BOX_CHARS 2698d522f475Smrgvoid 2699d522f475SmrgHandleFontBoxChars(Widget w, 2700894e0ac8Smrg XEvent *event GCC_UNUSED, 2701894e0ac8Smrg String *params, 2702d522f475Smrg Cardinal *param_count) 2703d522f475Smrg{ 270420d2c4d2Smrg handle_vt_toggle(do_font_boxchars, TScreenOf(term)->force_box_chars, 270520d2c4d2Smrg params, *param_count, w); 270620d2c4d2Smrg} 270720d2c4d2Smrg 270820d2c4d2Smrgvoid 270920d2c4d2SmrgHandleFontPacked(Widget w, 2710894e0ac8Smrg XEvent *event GCC_UNUSED, 2711894e0ac8Smrg String *params, 271220d2c4d2Smrg Cardinal *param_count) 271320d2c4d2Smrg{ 271420d2c4d2Smrg handle_vt_toggle(do_font_packed, TScreenOf(term)->force_packed, 2715d522f475Smrg params, *param_count, w); 2716d522f475Smrg} 2717d522f475Smrg#endif 2718d522f475Smrg 2719d522f475Smrg#if OPT_DEC_SOFTFONT 2720d522f475Smrgvoid 2721d522f475SmrgHandleFontLoading(Widget w, 2722894e0ac8Smrg XEvent *event GCC_UNUSED, 2723894e0ac8Smrg String *params, 2724d522f475Smrg Cardinal *param_count) 2725d522f475Smrg{ 2726d522f475Smrg handle_vt_toggle(do_font_loadable, term->misc.font_loadable, 2727d522f475Smrg params, *param_count, w); 2728d522f475Smrg} 2729d522f475Smrg#endif 2730d522f475Smrg 2731d522f475Smrg#if OPT_RENDERFONT 27320bd37d32Smrgstatic void 27330bd37d32Smrgupdate_fontmenu(XtermWidget xw) 27340bd37d32Smrg{ 27350bd37d32Smrg TScreen *screen = TScreenOf(xw); 27360bd37d32Smrg int n; 27370bd37d32Smrg 27380bd37d32Smrg for (n = 0; n <= fontMenu_lastBuiltin; ++n) { 27390bd37d32Smrg Boolean active = (Boolean) (xw->work.render_font || 27400bd37d32Smrg (screen->menu_font_sizes[n] >= 0)); 27410bd37d32Smrg SetItemSensitivity(fontMenuEntries[n].widget, active); 27420bd37d32Smrg } 27430bd37d32Smrg} 27440bd37d32Smrg 2745d522f475Smrgvoid 2746d522f475SmrgHandleRenderFont(Widget w, 2747894e0ac8Smrg XEvent *event GCC_UNUSED, 2748894e0ac8Smrg String *params, 2749d522f475Smrg Cardinal *param_count) 2750d522f475Smrg{ 275120d2c4d2Smrg XtermWidget xw = (XtermWidget) term; 275220d2c4d2Smrg 275320d2c4d2Smrg DefaultRenderFont(xw); 275420d2c4d2Smrg 27550bd37d32Smrg handle_vt_toggle(do_font_renderfont, xw->work.render_font, 2756d522f475Smrg params, *param_count, w); 27570bd37d32Smrg 27580bd37d32Smrg update_fontmenu(xw); 2759d522f475Smrg} 2760d522f475Smrg#endif 2761d522f475Smrg 2762d522f475Smrg#if OPT_WIDE_CHARS 2763d522f475Smrgvoid 2764d522f475SmrgHandleUTF8Mode(Widget w, 2765894e0ac8Smrg XEvent *event GCC_UNUSED, 2766894e0ac8Smrg String *params, 2767d522f475Smrg Cardinal *param_count) 2768d522f475Smrg{ 276920d2c4d2Smrg handle_vt_toggle(do_font_utf8_mode, TScreenOf(term)->utf8_mode, 2770d522f475Smrg params, *param_count, w); 2771d522f475Smrg} 2772d522f475Smrg 2773e39b573cSmrgvoid 2774e39b573cSmrgHandleUTF8Fonts(Widget w, 2775894e0ac8Smrg XEvent *event GCC_UNUSED, 2776894e0ac8Smrg String *params, 2777e39b573cSmrg Cardinal *param_count) 2778e39b573cSmrg{ 2779e39b573cSmrg handle_vt_toggle(do_font_utf8_fonts, TScreenOf(term)->utf8_fonts, 2780e39b573cSmrg params, *param_count, w); 2781e39b573cSmrg} 2782e39b573cSmrg 2783d522f475Smrgvoid 2784d522f475SmrgHandleUTF8Title(Widget w, 2785894e0ac8Smrg XEvent *event GCC_UNUSED, 2786894e0ac8Smrg String *params, 2787d522f475Smrg Cardinal *param_count) 2788d522f475Smrg{ 278920d2c4d2Smrg handle_vt_toggle(do_font_utf8_title, TScreenOf(term)->utf8_title, 2790d522f475Smrg params, *param_count, w); 2791d522f475Smrg} 2792d522f475Smrg#endif 2793d522f475Smrg 27942e4f8982Smrg#if OPT_SCREEN_DUMPS 27952e4f8982Smrgvoid 27962e4f8982SmrgHandleDumpHtml(Widget w GCC_UNUSED, 27972e4f8982Smrg XEvent *event GCC_UNUSED, 27982e4f8982Smrg String *params GCC_UNUSED, 27992e4f8982Smrg Cardinal *param_count GCC_UNUSED) 28002e4f8982Smrg{ 28012e4f8982Smrg xtermDumpHtml(term); 28022e4f8982Smrg} 28032e4f8982Smrg 28042e4f8982Smrgvoid 28052e4f8982SmrgHandleDumpSvg(Widget w GCC_UNUSED, 28062e4f8982Smrg XEvent *event GCC_UNUSED, 28072e4f8982Smrg String *params GCC_UNUSED, 28082e4f8982Smrg Cardinal *param_count GCC_UNUSED) 28092e4f8982Smrg{ 28102e4f8982Smrg xtermDumpSvg(term); 28112e4f8982Smrg} 28122e4f8982Smrg#endif 28132e4f8982Smrg 2814d522f475Smrg#if OPT_TEK4014 2815d522f475Smrgvoid 2816d522f475SmrgHandleSetTerminalType(Widget w, 2817894e0ac8Smrg XEvent *event GCC_UNUSED, 2818894e0ac8Smrg String *params, 2819d522f475Smrg Cardinal *param_count) 2820d522f475Smrg{ 282120d2c4d2Smrg XtermWidget xw = term; 282220d2c4d2Smrg 2823d522f475Smrg if (*param_count == 1) { 2824d522f475Smrg switch (params[0][0]) { 2825d522f475Smrg case 'v': 2826d522f475Smrg case 'V': 282720d2c4d2Smrg if (TEK4014_ACTIVE(xw)) 2828d522f475Smrg do_vtmode(w, (XtPointer) 0, (XtPointer) 0); 2829d522f475Smrg break; 2830d522f475Smrg case 't': 2831d522f475Smrg case 'T': 283220d2c4d2Smrg if (!TEK4014_ACTIVE(xw)) 2833d522f475Smrg do_tekmode(w, (XtPointer) 0, (XtPointer) 0); 2834d522f475Smrg break; 2835d522f475Smrg default: 283620d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 2837d522f475Smrg } 2838d522f475Smrg } else { 283920d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 2840d522f475Smrg } 2841d522f475Smrg} 2842d522f475Smrg 2843d522f475Smrgvoid 2844d522f475SmrgHandleVisibility(Widget w, 2845894e0ac8Smrg XEvent *event GCC_UNUSED, 2846894e0ac8Smrg String *params, 2847d522f475Smrg Cardinal *param_count) 2848d522f475Smrg{ 284920d2c4d2Smrg XtermWidget xw = term; 285020d2c4d2Smrg 2851d522f475Smrg if (*param_count == 2) { 2852d522f475Smrg switch (params[0][0]) { 2853d522f475Smrg case 'v': 2854d522f475Smrg case 'V': 285520d2c4d2Smrg handle_tek_toggle(do_vtonoff, (int) TScreenOf(xw)->Vshow, 2856d522f475Smrg params + 1, (*param_count) - 1, w); 2857d522f475Smrg break; 2858d522f475Smrg case 't': 2859d522f475Smrg case 'T': 286020d2c4d2Smrg handle_tek_toggle(do_tekonoff, (int) TEK4014_SHOWN(xw), 2861d522f475Smrg params + 1, (*param_count) - 1, w); 2862d522f475Smrg break; 2863d522f475Smrg default: 286420d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 2865d522f475Smrg } 2866d522f475Smrg } else { 286720d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 2868d522f475Smrg } 2869d522f475Smrg} 2870d522f475Smrg 2871d522f475Smrg/* ARGSUSED */ 2872d522f475Smrgvoid 2873d522f475SmrgHandleSetTekText(Widget w, 2874894e0ac8Smrg XEvent *event GCC_UNUSED, 2875894e0ac8Smrg String *params, 2876d522f475Smrg Cardinal *param_count) 2877d522f475Smrg{ 287820d2c4d2Smrg XtermWidget xw = term; 2879d522f475Smrg void (*proc) PROTO_XT_CALLBACK_ARGS = 0; 2880d522f475Smrg 2881d522f475Smrg switch (*param_count) { 2882d522f475Smrg case 0: 2883d522f475Smrg proc = do_tektextlarge; 2884d522f475Smrg break; 2885d522f475Smrg case 1: 2886d522f475Smrg switch (TekGetFontSize(params[0])) { 2887d522f475Smrg case TEK_FONT_LARGE: 2888d522f475Smrg proc = do_tektextlarge; 2889d522f475Smrg break; 2890d522f475Smrg case TEK_FONT_2: 2891d522f475Smrg proc = do_tektext2; 2892d522f475Smrg break; 2893d522f475Smrg case TEK_FONT_3: 2894d522f475Smrg proc = do_tektext3; 2895d522f475Smrg break; 2896d522f475Smrg case TEK_FONT_SMALL: 2897d522f475Smrg proc = do_tektextsmall; 2898d522f475Smrg break; 2899d522f475Smrg } 2900d522f475Smrg break; 2901d522f475Smrg } 2902d522f475Smrg if (proc) 2903d522f475Smrg (*proc) (w, (XtPointer) 0, (XtPointer) 0); 2904d522f475Smrg else 290520d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 2906d522f475Smrg} 2907d522f475Smrg 2908d522f475Smrg/* ARGSUSED */ 2909d522f475Smrgvoid 2910d522f475SmrgHandleTekPage(Widget w, 2911894e0ac8Smrg XEvent *event GCC_UNUSED, 2912894e0ac8Smrg String *params GCC_UNUSED, 2913d522f475Smrg Cardinal *param_count GCC_UNUSED) 2914d522f475Smrg{ 2915d522f475Smrg do_tekpage(w, (XtPointer) 0, (XtPointer) 0); 2916d522f475Smrg} 2917d522f475Smrg 2918d522f475Smrg/* ARGSUSED */ 2919d522f475Smrgvoid 2920d522f475SmrgHandleTekReset(Widget w, 2921894e0ac8Smrg XEvent *event GCC_UNUSED, 2922894e0ac8Smrg String *params GCC_UNUSED, 2923d522f475Smrg Cardinal *param_count GCC_UNUSED) 2924d522f475Smrg{ 2925d522f475Smrg do_tekreset(w, (XtPointer) 0, (XtPointer) 0); 2926d522f475Smrg} 2927d522f475Smrg 2928d522f475Smrg/* ARGSUSED */ 2929d522f475Smrgvoid 2930d522f475SmrgHandleTekCopy(Widget w, 2931894e0ac8Smrg XEvent *event GCC_UNUSED, 2932894e0ac8Smrg String *params GCC_UNUSED, 2933d522f475Smrg Cardinal *param_count GCC_UNUSED) 2934d522f475Smrg{ 2935d522f475Smrg do_tekcopy(w, (XtPointer) 0, (XtPointer) 0); 2936d522f475Smrg} 2937d522f475Smrg#endif /* OPT_TEK4014 */ 2938d522f475Smrg 2939d522f475Smrg#if OPT_TOOLBAR 2940d522f475Smrg/* 2941d522f475Smrg * The normal style of xterm popup menu delays initialization until the menu is 2942d522f475Smrg * first requested. When using a toolbar, we can use the same initialization, 2943d522f475Smrg * though on the first popup there will be a little geometry layout jitter, 2944d522f475Smrg * since the menu is already managed when this callback is invoked. 2945d522f475Smrg */ 2946d522f475Smrgstatic void 2947d522f475SmrgInitPopup(Widget gw, 2948d522f475Smrg XtPointer closure, 2949d522f475Smrg XtPointer data GCC_UNUSED) 2950d522f475Smrg{ 2951d522f475Smrg String params[2]; 2952d522f475Smrg Cardinal count = 1; 2953d522f475Smrg 2954d522f475Smrg params[0] = (char *) closure; 2955d522f475Smrg params[1] = 0; 2956d522f475Smrg TRACE(("InitPopup(%s)\n", params[0])); 2957d522f475Smrg 2958d522f475Smrg domenu(gw, (XEvent *) 0, params, &count); 2959d522f475Smrg 2960894e0ac8Smrg XtRemoveCallback(gw, XtNpopupCallback, InitPopup, closure); 2961d522f475Smrg} 2962d522f475Smrg 2963d522f475Smrgstatic Dimension 2964d522f475SmrgSetupShell(Widget *menus, MenuList * shell, int n, int m) 2965d522f475Smrg{ 2966d522f475Smrg char temp[80]; 2967d522f475Smrg char *external_name = 0; 2968d522f475Smrg Dimension button_height; 2969d522f475Smrg Dimension button_border; 2970d522f475Smrg String saveLocale = setMenuLocale(True, resource.menuLocale); 2971d522f475Smrg 2972d522f475Smrg shell[n].w = XtVaCreatePopupShell(menu_names[n].internal_name, 2973d522f475Smrg simpleMenuWidgetClass, 2974d522f475Smrg *menus, 2975d522f475Smrg XtNgeometry, NULL, 2976d522f475Smrg (XtPointer) 0); 2977d522f475Smrg 2978d522f475Smrg XtAddCallback(shell[n].w, XtNpopupCallback, InitPopup, menu_names[n].internal_name); 2979d522f475Smrg XtVaGetValues(shell[n].w, 2980d522f475Smrg XtNlabel, &external_name, 2981d522f475Smrg (XtPointer) 0); 2982d522f475Smrg 2983d522f475Smrg TRACE(("...SetupShell(%s) -> %s -> %#lx\n", 2984d522f475Smrg menu_names[n].internal_name, 2985d522f475Smrg external_name, 2986d522f475Smrg (long) shell[n].w)); 2987d522f475Smrg 2988d522f475Smrg sprintf(temp, "%sButton", menu_names[n].internal_name); 2989d522f475Smrg shell[n].b = XtVaCreateManagedWidget(temp, 2990d522f475Smrg menuButtonWidgetClass, 2991d522f475Smrg *menus, 2992d522f475Smrg XtNfromHoriz, ((m >= 0) 2993d522f475Smrg ? shell[m].b 2994d522f475Smrg : 0), 2995d522f475Smrg XtNmenuName, menu_names[n].internal_name, 2996d522f475Smrg XtNlabel, external_name, 2997d522f475Smrg (XtPointer) 0); 2998d522f475Smrg XtVaGetValues(shell[n].b, 2999d522f475Smrg XtNheight, &button_height, 3000d522f475Smrg XtNborderWidth, &button_border, 3001d522f475Smrg (XtPointer) 0); 3002d522f475Smrg 3003956cc18dSsnj (void) setMenuLocale(False, saveLocale); 3004956cc18dSsnj return (Dimension) (button_height + (button_border * 2)); 3005d522f475Smrg} 3006d522f475Smrg#endif /* OPT_TOOLBAR */ 3007d522f475Smrg 3008d522f475Smrgvoid 3009894e0ac8SmrgSetupMenus(Widget shell, Widget *forms, Widget *menus, Dimension *menu_high) 3010d522f475Smrg{ 3011d522f475Smrg#if OPT_TOOLBAR 3012d522f475Smrg Dimension button_height = 0; 3013d522f475Smrg Dimension toolbar_hSpace; 3014d522f475Smrg Arg args[10]; 3015d522f475Smrg#endif 3016d522f475Smrg 3017d522f475Smrg TRACE(("SetupMenus(%s)\n", shell == toplevel ? "vt100" : "tek4014")); 3018d522f475Smrg 3019d522f475Smrg *menu_high = 0; 3020d522f475Smrg 3021d522f475Smrg if (shell == toplevel) { 3022d522f475Smrg XawSimpleMenuAddGlobalActions(app_con); 3023d522f475Smrg XtRegisterGrabAction(HandlePopupMenu, True, 30240bd37d32Smrg (unsigned) (ButtonPressMask | ButtonReleaseMask), 3025d522f475Smrg GrabModeAsync, GrabModeAsync); 3026d522f475Smrg } 3027d522f475Smrg#if OPT_TOOLBAR 3028d522f475Smrg *forms = XtVaCreateManagedWidget("form", 3029d522f475Smrg formWidgetClass, shell, 3030d522f475Smrg (XtPointer) 0); 3031d522f475Smrg xtermAddInput(*forms); 3032d522f475Smrg 3033d522f475Smrg /* 3034d522f475Smrg * Set a nominal value for the preferred pane size, which lets the 3035d522f475Smrg * buttons determine the actual height of the menu bar. We don't show 3036d522f475Smrg * the grip, because it's too easy to make the toolbar look bad that 3037d522f475Smrg * way. 3038d522f475Smrg */ 3039d522f475Smrg XtSetArg(args[0], XtNorientation, XtorientHorizontal); 3040d522f475Smrg XtSetArg(args[1], XtNtop, XawChainTop); 3041d522f475Smrg XtSetArg(args[2], XtNbottom, XawChainTop); 3042d522f475Smrg XtSetArg(args[3], XtNleft, XawChainLeft); 3043d522f475Smrg XtSetArg(args[4], XtNright, XawChainLeft); 3044d522f475Smrg 3045d522f475Smrg if (resource.toolBar) { 3046d522f475Smrg *menus = XtCreateManagedWidget("menubar", boxWidgetClass, *forms, 3047d522f475Smrg args, 5); 3048d522f475Smrg } else { 3049d522f475Smrg *menus = XtCreateWidget("menubar", boxWidgetClass, *forms, args, 5); 3050d522f475Smrg } 3051d522f475Smrg 3052d522f475Smrg /* 3053d522f475Smrg * The toolbar widget's height is not necessarily known yet. If the 3054d522f475Smrg * toolbar is not created as a managed widget, we can still make a good 3055d522f475Smrg * guess about its height by collecting the widget's other resource values. 3056d522f475Smrg */ 3057d522f475Smrg XtVaGetValues(*menus, 3058d522f475Smrg XtNhSpace, &toolbar_hSpace, 3059d522f475Smrg (XtPointer) 0); 3060d522f475Smrg 3061d522f475Smrg if (shell == toplevel) { /* vt100 */ 3062d522f475Smrg int j; 3063d522f475Smrg for (j = mainMenu; j <= fontMenu; j++) { 3064d522f475Smrg button_height = SetupShell(menus, vt_shell, j, j - 1); 3065d522f475Smrg } 3066d522f475Smrg } 3067d522f475Smrg#if OPT_TEK4014 3068d522f475Smrg else { /* tek4014 */ 306920d2c4d2Smrg (void) SetupShell(menus, tek_shell, mainMenu, -1); 3070d522f475Smrg button_height = SetupShell(menus, tek_shell, tekMenu, mainMenu); 3071d522f475Smrg } 3072d522f475Smrg#endif 3073d522f475Smrg 3074d522f475Smrg /* 3075d522f475Smrg * Tell the main program how high the toolbar is, to help with the initial 3076d522f475Smrg * layout. 3077d522f475Smrg */ 3078956cc18dSsnj *menu_high = (Dimension) (button_height + 2 * (toolbar_hSpace)); 30792eaa94a1Schristos TRACE(("...menuHeight:%d = (%d + 2 * %d)\n", 30802eaa94a1Schristos *menu_high, button_height, toolbar_hSpace)); 3081d522f475Smrg 3082d522f475Smrg#else /* !OPT_TOOLBAR */ 3083d522f475Smrg *forms = shell; 3084d522f475Smrg *menus = shell; 3085d522f475Smrg#endif 3086d522f475Smrg 3087d522f475Smrg TRACE(("...shell=%#lx\n", (long) shell)); 3088d522f475Smrg TRACE(("...forms=%#lx\n", (long) *forms)); 3089d522f475Smrg TRACE(("...menus=%#lx\n", (long) *menus)); 3090d522f475Smrg} 3091d522f475Smrg 3092d522f475Smrgvoid 3093d522f475SmrgrepairSizeHints(void) 3094d522f475Smrg{ 3095a1f3da82Smrg XtermWidget xw = term; 3096a1f3da82Smrg TScreen *screen = TScreenOf(xw); 3097d522f475Smrg 3098a1f3da82Smrg if (XtIsRealized((Widget) xw)) { 3099a1f3da82Smrg getXtermSizeHints(xw); 3100a1f3da82Smrg xtermSizeHints(xw, ScrollbarWidth(screen)); 3101d522f475Smrg 3102a1f3da82Smrg XSetWMNormalHints(screen->display, VShellWindow(xw), &xw->hints); 3103d522f475Smrg } 3104d522f475Smrg} 3105d522f475Smrg 3106d522f475Smrg#if OPT_TOOLBAR 3107d522f475Smrg#define INIT_POPUP(s, n) InitPopup(s[n].w, menu_names[n].internal_name, 0) 3108d522f475Smrg 3109d522f475Smrgstatic Bool 3110d522f475SmrgInitWidgetMenu(Widget shell) 3111d522f475Smrg{ 3112d522f475Smrg Bool result = False; 3113d522f475Smrg 311420d2c4d2Smrg TRACE(("InitWidgetMenu(%p)\n", (void *) shell)); 3115d522f475Smrg if (term != 0) { 3116d522f475Smrg if (shell == toplevel) { /* vt100 */ 3117d522f475Smrg if (!term->init_menu) { 3118d522f475Smrg INIT_POPUP(vt_shell, mainMenu); 3119d522f475Smrg INIT_POPUP(vt_shell, vtMenu); 3120d522f475Smrg INIT_POPUP(vt_shell, fontMenu); 3121d522f475Smrg term->init_menu = True; 3122d522f475Smrg TRACE(("...InitWidgetMenu(vt)\n")); 3123d522f475Smrg } 3124d522f475Smrg result = term->init_menu; 3125d522f475Smrg } 3126d522f475Smrg#if OPT_TEK4014 3127d522f475Smrg else if (tekWidget) { /* tek4014 */ 3128d522f475Smrg if (!tekWidget->init_menu) { 3129d522f475Smrg INIT_POPUP(tek_shell, mainMenu); 3130d522f475Smrg INIT_POPUP(tek_shell, tekMenu); 3131d522f475Smrg tekWidget->init_menu = True; 3132d522f475Smrg TRACE(("...InitWidgetMenu(tek)\n")); 3133d522f475Smrg } 3134d522f475Smrg result = tekWidget->init_menu; 3135d522f475Smrg } 3136d522f475Smrg#endif 3137d522f475Smrg } 3138d522f475Smrg TRACE(("...InitWidgetMenu ->%d\n", result)); 3139d522f475Smrg return result; 3140d522f475Smrg} 3141d522f475Smrg 3142d522f475Smrgstatic TbInfo * 3143d522f475Smrgtoolbar_info(Widget w) 3144d522f475Smrg{ 3145d522f475Smrg TRACE(("...getting toolbar_info\n")); 3146d522f475Smrg#if OPT_TEK4014 3147d522f475Smrg if (w != (Widget) term) 3148d522f475Smrg return &(tekWidget->tek.tb_info); 3149d522f475Smrg#else 3150d522f475Smrg (void) w; 3151d522f475Smrg#endif 315220d2c4d2Smrg return &(WhichVWin(TScreenOf(term))->tb_info); 3153d522f475Smrg} 3154d522f475Smrg 3155d522f475Smrgstatic void 3156d522f475Smrghide_toolbar(Widget w) 3157d522f475Smrg{ 3158d522f475Smrg if (w != 0) { 3159d522f475Smrg TbInfo *info = toolbar_info(w); 3160d522f475Smrg 3161d522f475Smrg TRACE(("hiding toolbar\n")); 3162d522f475Smrg XtVaSetValues(w, 3163d522f475Smrg XtNfromVert, (Widget) 0, 3164d522f475Smrg (XtPointer) 0); 3165d522f475Smrg 3166d522f475Smrg if (info->menu_bar != 0) { 3167d522f475Smrg repairSizeHints(); 3168d522f475Smrg XtUnmanageChild(info->menu_bar); 3169d522f475Smrg if (XtIsRealized(info->menu_bar)) { 3170d522f475Smrg XtUnmapWidget(info->menu_bar); 3171d522f475Smrg } 3172d522f475Smrg } 3173d522f475Smrg TRACE(("...hiding toolbar (done)\n")); 3174d522f475Smrg } 3175d522f475Smrg} 3176d522f475Smrg 3177d522f475Smrgstatic void 3178d522f475Smrgshow_toolbar(Widget w) 3179d522f475Smrg{ 3180d522f475Smrg if (w != 0) { 3181d522f475Smrg TbInfo *info = toolbar_info(w); 3182d522f475Smrg 3183d522f475Smrg TRACE(("showing toolbar\n")); 3184d522f475Smrg if (info->menu_bar != 0) { 3185d522f475Smrg XtVaSetValues(w, 3186d522f475Smrg XtNfromVert, info->menu_bar, 3187d522f475Smrg (XtPointer) 0); 3188d522f475Smrg if (XtIsRealized(info->menu_bar)) 3189d522f475Smrg repairSizeHints(); 3190d522f475Smrg XtManageChild(info->menu_bar); 3191d522f475Smrg if (XtIsRealized(info->menu_bar)) { 3192d522f475Smrg XtMapWidget(info->menu_bar); 3193d522f475Smrg } 3194d522f475Smrg } 3195d522f475Smrg /* 3196d522f475Smrg * This is needed to make the terminal widget move down below the 3197d522f475Smrg * toolbar. 3198d522f475Smrg */ 3199d522f475Smrg XawFormDoLayout(XtParent(w), True); 3200d522f475Smrg TRACE(("...showing toolbar (done)\n")); 3201d522f475Smrg } 3202d522f475Smrg} 3203d522f475Smrg 3204d522f475Smrg/* 3205d522f475Smrg * Make the toolbar visible or invisible in the current window(s). 3206d522f475Smrg */ 3207d522f475Smrgvoid 3208d522f475SmrgShowToolbar(Bool enable) 3209d522f475Smrg{ 321020d2c4d2Smrg XtermWidget xw = term; 321120d2c4d2Smrg 3212d522f475Smrg TRACE(("ShowToolbar(%d)\n", enable)); 3213d522f475Smrg 321420d2c4d2Smrg if (IsIcon(TScreenOf(xw))) { 321520d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 3216d522f475Smrg } else { 3217d522f475Smrg if (enable) { 3218d522f475Smrg if (InitWidgetMenu(toplevel)) 321920d2c4d2Smrg show_toolbar((Widget) xw); 3220d522f475Smrg#if OPT_TEK4014 3221d522f475Smrg if (InitWidgetMenu(tekshellwidget)) 3222d522f475Smrg show_toolbar((Widget) tekWidget); 3223d522f475Smrg#endif 3224d522f475Smrg } else { 322520d2c4d2Smrg hide_toolbar((Widget) xw); 3226d522f475Smrg#if OPT_TEK4014 3227d522f475Smrg hide_toolbar((Widget) tekWidget); 3228d522f475Smrg#endif 3229d522f475Smrg } 3230956cc18dSsnj resource.toolBar = (Boolean) enable; 3231d522f475Smrg update_toolbar(); 3232d522f475Smrg } 3233d522f475Smrg} 3234d522f475Smrg 3235d522f475Smrgvoid 3236d522f475SmrgHandleToolbar(Widget w, 3237894e0ac8Smrg XEvent *event GCC_UNUSED, 3238894e0ac8Smrg String *params GCC_UNUSED, 3239d522f475Smrg Cardinal *param_count GCC_UNUSED) 3240d522f475Smrg{ 324120d2c4d2Smrg XtermWidget xw = term; 324220d2c4d2Smrg 324320d2c4d2Smrg if (IsIcon(TScreenOf(xw))) { 324420d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 3245d522f475Smrg } else { 3246d522f475Smrg handle_vt_toggle(do_toolbar, resource.toolBar, 3247d522f475Smrg params, *param_count, w); 3248d522f475Smrg } 3249d522f475Smrg} 3250d522f475Smrg 3251d522f475Smrg/* ARGSUSED */ 3252d522f475Smrgstatic void 3253d522f475Smrgdo_toolbar(Widget gw GCC_UNUSED, 3254d522f475Smrg XtPointer closure GCC_UNUSED, 3255d522f475Smrg XtPointer data GCC_UNUSED) 3256d522f475Smrg{ 325720d2c4d2Smrg XtermWidget xw = term; 325820d2c4d2Smrg 3259d522f475Smrg /* 3260d522f475Smrg * Toggle toolbars for both vt100 and tek windows, since they share the 3261d522f475Smrg * menu which contains the checkbox indicating whether the toolbar is 3262d522f475Smrg * active. 3263d522f475Smrg */ 326420d2c4d2Smrg if (IsIcon(TScreenOf(xw))) { 326520d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 3266d522f475Smrg } else { 3267956cc18dSsnj ShowToolbar(ToggleFlag(resource.toolBar)); 3268d522f475Smrg } 3269d522f475Smrg} 3270d522f475Smrg 3271d522f475Smrgvoid 3272d522f475Smrgupdate_toolbar(void) 3273d522f475Smrg{ 3274d522f475Smrg UpdateCheckbox("update_toolbar", 3275d522f475Smrg mainMenuEntries, 3276d522f475Smrg mainMenu_toolbar, 3277d522f475Smrg resource.toolBar); 3278d522f475Smrg} 3279d522f475Smrg#endif /* OPT_TOOLBAR */ 3280d522f475Smrg 3281d522f475Smrgvoid 3282d522f475Smrgupdate_securekbd(void) 3283d522f475Smrg{ 3284d522f475Smrg UpdateCheckbox("update_securekbd", 3285d522f475Smrg mainMenuEntries, 3286d522f475Smrg mainMenu_securekbd, 328720d2c4d2Smrg TScreenOf(term)->grabbedKbd); 3288d522f475Smrg} 3289d522f475Smrg 3290d522f475Smrgvoid 3291d522f475Smrgupdate_allowsends(void) 3292d522f475Smrg{ 3293d522f475Smrg UpdateCheckbox("update_allowsends", 3294d522f475Smrg mainMenuEntries, 3295d522f475Smrg mainMenu_allowsends, 329620d2c4d2Smrg TScreenOf(term)->allowSendEvents); 3297d522f475Smrg} 3298d522f475Smrg 3299d522f475Smrg#ifdef ALLOWLOGGING 3300d522f475Smrgvoid 3301d522f475Smrgupdate_logging(void) 3302d522f475Smrg{ 3303d522f475Smrg UpdateCheckbox("update_logging", 3304d522f475Smrg mainMenuEntries, 3305d522f475Smrg mainMenu_logging, 330620d2c4d2Smrg TScreenOf(term)->logging); 3307d522f475Smrg} 3308d522f475Smrg#endif 3309d522f475Smrg 3310e39b573cSmrg#if OPT_PRINT_ON_EXIT 3311e39b573cSmrgvoid 3312e39b573cSmrgupdate_write_error(void) 3313e39b573cSmrg{ 3314e39b573cSmrg UpdateCheckbox("update_write_error", 3315e39b573cSmrg mainMenuEntries, 3316e39b573cSmrg mainMenu_write_error, 3317e39b573cSmrg TScreenOf(term)->write_error); 3318e39b573cSmrg} 3319e39b573cSmrg#endif 3320e39b573cSmrg 3321d522f475Smrgvoid 3322d522f475Smrgupdate_print_redir(void) 3323d522f475Smrg{ 3324d522f475Smrg UpdateCheckbox("update_print_redir", 3325d522f475Smrg mainMenuEntries, 3326d522f475Smrg mainMenu_print_redir, 3327e39b573cSmrg PrinterOf(TScreenOf(term)).printer_controlmode); 3328d522f475Smrg} 3329d522f475Smrg 3330d522f475Smrgvoid 3331d522f475Smrgupdate_8bit_control(void) 3332d522f475Smrg{ 3333d522f475Smrg UpdateCheckbox("update_8bit_control", 3334d522f475Smrg mainMenuEntries, 3335d522f475Smrg mainMenu_8bit_ctrl, 333620d2c4d2Smrg TScreenOf(term)->control_eight_bits); 3337d522f475Smrg} 3338d522f475Smrg 3339d522f475Smrgvoid 3340d522f475Smrgupdate_decbkm(void) 3341d522f475Smrg{ 3342d522f475Smrg UpdateCheckbox("update_decbkm", 3343d522f475Smrg mainMenuEntries, 3344d522f475Smrg mainMenu_backarrow, 3345d522f475Smrg (term->keyboard.flags & MODE_DECBKM) != 0); 3346d522f475Smrg} 3347d522f475Smrg 3348d522f475Smrg#if OPT_NUM_LOCK 3349d522f475Smrgvoid 3350d522f475Smrgupdate_num_lock(void) 3351d522f475Smrg{ 3352d522f475Smrg UpdateCheckbox("update_num_lock", 3353d522f475Smrg mainMenuEntries, 3354d522f475Smrg mainMenu_num_lock, 3355d522f475Smrg term->misc.real_NumLock); 3356d522f475Smrg} 3357d522f475Smrg 3358d522f475Smrgvoid 3359d522f475Smrgupdate_alt_esc(void) 3360d522f475Smrg{ 3361d522f475Smrg UpdateCheckbox("update_alt_esc", 3362d522f475Smrg mainMenuEntries, 3363d522f475Smrg mainMenu_alt_esc, 336420d2c4d2Smrg TScreenOf(term)->alt_sends_esc); 3365d522f475Smrg} 3366d522f475Smrg 3367d522f475Smrgvoid 3368d522f475Smrgupdate_meta_esc(void) 3369d522f475Smrg{ 3370d522f475Smrg UpdateCheckbox("update_meta_esc", 3371d522f475Smrg mainMenuEntries, 3372d522f475Smrg mainMenu_meta_esc, 337320d2c4d2Smrg TScreenOf(term)->meta_sends_esc); 3374d522f475Smrg} 3375d522f475Smrg#endif 3376d522f475Smrg 3377d522f475Smrg#if OPT_SUN_FUNC_KEYS 3378d522f475Smrgvoid 3379d522f475Smrgupdate_sun_fkeys(void) 3380d522f475Smrg{ 3381d522f475Smrg UpdateCheckbox("update_sun_fkeys", 3382d522f475Smrg mainMenuEntries, 3383d522f475Smrg mainMenu_sun_fkeys, 3384d522f475Smrg term->keyboard.type == keyboardIsSun); 3385d522f475Smrg} 3386d522f475Smrg#endif 3387d522f475Smrg 3388d522f475Smrg#if OPT_TCAP_FKEYS 3389d522f475Smrgvoid 3390d522f475Smrgupdate_tcap_fkeys(void) 3391d522f475Smrg{ 3392d522f475Smrg UpdateCheckbox("update_tcap_fkeys", 3393d522f475Smrg mainMenuEntries, 3394d522f475Smrg mainMenu_tcap_fkeys, 3395d522f475Smrg term->keyboard.type == keyboardIsTermcap); 3396d522f475Smrg} 3397d522f475Smrg#endif 3398d522f475Smrg 3399d522f475Smrgvoid 3400d522f475Smrgupdate_old_fkeys(void) 3401d522f475Smrg{ 3402d522f475Smrg UpdateCheckbox("update_old_fkeys", 3403d522f475Smrg mainMenuEntries, 3404d522f475Smrg mainMenu_old_fkeys, 3405d522f475Smrg term->keyboard.type == keyboardIsLegacy); 3406d522f475Smrg} 3407d522f475Smrg 3408d522f475Smrgvoid 3409d522f475Smrgupdate_delete_del(void) 3410d522f475Smrg{ 3411d522f475Smrg UpdateCheckbox("update_delete_del", 3412d522f475Smrg mainMenuEntries, 3413d522f475Smrg mainMenu_delete_del, 3414d522f475Smrg xtermDeleteIsDEL(term)); 3415d522f475Smrg} 3416d522f475Smrg 3417d522f475Smrg#if OPT_SUNPC_KBD 3418d522f475Smrgvoid 3419d522f475Smrgupdate_sun_kbd(void) 3420d522f475Smrg{ 3421d522f475Smrg UpdateCheckbox("update_sun_kbd", 3422d522f475Smrg mainMenuEntries, 3423d522f475Smrg mainMenu_sun_kbd, 3424d522f475Smrg term->keyboard.type == keyboardIsVT220); 3425d522f475Smrg} 3426d522f475Smrg#endif 3427d522f475Smrg 3428d522f475Smrg#if OPT_HP_FUNC_KEYS 3429d522f475Smrgvoid 3430d522f475Smrgupdate_hp_fkeys(void) 3431d522f475Smrg{ 3432d522f475Smrg UpdateCheckbox("update_hp_fkeys", 3433d522f475Smrg mainMenuEntries, 3434d522f475Smrg mainMenu_hp_fkeys, 3435d522f475Smrg term->keyboard.type == keyboardIsHP); 3436d522f475Smrg} 3437d522f475Smrg#endif 3438d522f475Smrg 3439d522f475Smrg#if OPT_SCO_FUNC_KEYS 3440d522f475Smrgvoid 3441d522f475Smrgupdate_sco_fkeys(void) 3442d522f475Smrg{ 3443d522f475Smrg UpdateCheckbox("update_sco_fkeys", 3444d522f475Smrg mainMenuEntries, 3445d522f475Smrg mainMenu_sco_fkeys, 3446d522f475Smrg term->keyboard.type == keyboardIsSCO); 3447d522f475Smrg} 3448d522f475Smrg#endif 3449d522f475Smrg 3450d522f475Smrgvoid 3451d522f475Smrgupdate_scrollbar(void) 3452d522f475Smrg{ 3453d522f475Smrg UpdateCheckbox("update_scrollbar", 3454d522f475Smrg vtMenuEntries, 3455d522f475Smrg vtMenu_scrollbar, 3456d522f475Smrg ScrollbarWidth(TScreenOf(term))); 3457d522f475Smrg} 3458d522f475Smrg 3459d522f475Smrgvoid 3460d522f475Smrgupdate_jumpscroll(void) 3461d522f475Smrg{ 3462d522f475Smrg UpdateCheckbox("update_jumpscroll", 3463d522f475Smrg vtMenuEntries, 3464d522f475Smrg vtMenu_jumpscroll, 346520d2c4d2Smrg TScreenOf(term)->jumpscroll); 3466d522f475Smrg} 3467d522f475Smrg 3468d522f475Smrgvoid 3469d522f475Smrgupdate_reversevideo(void) 3470d522f475Smrg{ 3471d522f475Smrg UpdateCheckbox("update_reversevideo", 3472d522f475Smrg vtMenuEntries, 3473d522f475Smrg vtMenu_reversevideo, 3474d522f475Smrg (term->misc.re_verse)); 3475d522f475Smrg} 3476d522f475Smrg 3477d522f475Smrgvoid 3478d522f475Smrgupdate_autowrap(void) 3479d522f475Smrg{ 3480d522f475Smrg UpdateCheckbox("update_autowrap", 3481d522f475Smrg vtMenuEntries, 3482d522f475Smrg vtMenu_autowrap, 3483d522f475Smrg (term->flags & WRAPAROUND) != 0); 3484d522f475Smrg} 3485d522f475Smrg 3486d522f475Smrgvoid 3487d522f475Smrgupdate_reversewrap(void) 3488d522f475Smrg{ 3489d522f475Smrg UpdateCheckbox("update_reversewrap", 3490d522f475Smrg vtMenuEntries, 3491d522f475Smrg vtMenu_reversewrap, 3492d522f475Smrg (term->flags & REVERSEWRAP) != 0); 3493d522f475Smrg} 3494d522f475Smrg 3495d522f475Smrgvoid 3496d522f475Smrgupdate_autolinefeed(void) 3497d522f475Smrg{ 3498d522f475Smrg UpdateCheckbox("update_autolinefeed", 3499d522f475Smrg vtMenuEntries, 3500d522f475Smrg vtMenu_autolinefeed, 3501d522f475Smrg (term->flags & LINEFEED) != 0); 3502d522f475Smrg} 3503d522f475Smrg 3504d522f475Smrgvoid 3505d522f475Smrgupdate_appcursor(void) 3506d522f475Smrg{ 3507d522f475Smrg UpdateCheckbox("update_appcursor", 3508d522f475Smrg vtMenuEntries, 3509d522f475Smrg vtMenu_appcursor, 3510d522f475Smrg (term->keyboard.flags & MODE_DECCKM) != 0); 3511d522f475Smrg} 3512d522f475Smrg 3513d522f475Smrgvoid 3514d522f475Smrgupdate_appkeypad(void) 3515d522f475Smrg{ 3516d522f475Smrg UpdateCheckbox("update_appkeypad", 3517d522f475Smrg vtMenuEntries, 3518d522f475Smrg vtMenu_appkeypad, 3519d522f475Smrg (term->keyboard.flags & MODE_DECKPAM) != 0); 3520d522f475Smrg} 3521d522f475Smrg 3522d522f475Smrgvoid 3523d522f475Smrgupdate_scrollkey(void) 3524d522f475Smrg{ 3525d522f475Smrg UpdateCheckbox("update_scrollkey", 3526d522f475Smrg vtMenuEntries, 3527d522f475Smrg vtMenu_scrollkey, 352820d2c4d2Smrg TScreenOf(term)->scrollkey); 3529d522f475Smrg} 3530d522f475Smrg 3531d522f475Smrgvoid 3532d522f475Smrgupdate_scrollttyoutput(void) 3533d522f475Smrg{ 3534d522f475Smrg UpdateCheckbox("update_scrollttyoutput", 3535d522f475Smrg vtMenuEntries, 3536d522f475Smrg vtMenu_scrollttyoutput, 353720d2c4d2Smrg TScreenOf(term)->scrollttyoutput); 3538d522f475Smrg} 3539d522f475Smrg 3540d522f475Smrgvoid 3541d522f475Smrgupdate_keepSelection(void) 3542d522f475Smrg{ 3543d522f475Smrg UpdateCheckbox("update_keepSelection", 3544d522f475Smrg vtMenuEntries, 3545d522f475Smrg vtMenu_keepSelection, 354620d2c4d2Smrg TScreenOf(term)->keepSelection); 3547d522f475Smrg} 3548d522f475Smrg 3549d522f475Smrgvoid 3550d522f475Smrgupdate_selectToClipboard(void) 3551d522f475Smrg{ 3552d522f475Smrg UpdateCheckbox("update_selectToClipboard", 3553d522f475Smrg vtMenuEntries, 3554d522f475Smrg vtMenu_selectToClipboard, 355520d2c4d2Smrg TScreenOf(term)->selectToClipboard); 3556d522f475Smrg} 3557d522f475Smrg 3558d522f475Smrgvoid 3559d522f475Smrgupdate_allow132(void) 3560d522f475Smrg{ 3561d522f475Smrg UpdateCheckbox("update_allow132", 3562d522f475Smrg vtMenuEntries, 3563d522f475Smrg vtMenu_allow132, 356420d2c4d2Smrg TScreenOf(term)->c132); 3565d522f475Smrg} 3566d522f475Smrg 3567d522f475Smrgvoid 3568d522f475Smrgupdate_cursesemul(void) 3569d522f475Smrg{ 3570d522f475Smrg#if 0 /* 2006-2-12: no longer menu entry */ 3571d522f475Smrg UpdateMenuItem("update_cursesemul", vtMenuEntries, vtMenu_cursesemul, 357220d2c4d2Smrg TScreenOf(term)->curses); 3573d522f475Smrg#endif 3574d522f475Smrg} 3575d522f475Smrg 3576d522f475Smrgvoid 3577d522f475Smrgupdate_visualbell(void) 3578d522f475Smrg{ 3579d522f475Smrg UpdateCheckbox("update_visualbell", 3580d522f475Smrg vtMenuEntries, 3581d522f475Smrg vtMenu_visualbell, 358220d2c4d2Smrg TScreenOf(term)->visualbell); 3583d522f475Smrg} 3584d522f475Smrg 3585d522f475Smrgvoid 3586d522f475Smrgupdate_bellIsUrgent(void) 3587d522f475Smrg{ 3588d522f475Smrg UpdateCheckbox("update_bellIsUrgent", 3589d522f475Smrg vtMenuEntries, 3590d522f475Smrg vtMenu_bellIsUrgent, 359120d2c4d2Smrg TScreenOf(term)->bellIsUrgent); 3592d522f475Smrg} 3593d522f475Smrg 3594d522f475Smrgvoid 3595d522f475Smrgupdate_poponbell(void) 3596d522f475Smrg{ 3597d522f475Smrg UpdateCheckbox("update_poponbell", 3598d522f475Smrg vtMenuEntries, 3599d522f475Smrg vtMenu_poponbell, 360020d2c4d2Smrg TScreenOf(term)->poponbell); 3601d522f475Smrg} 3602d522f475Smrg 3603d522f475Smrg#ifndef update_marginbell /* 2007-3-7: no longer menu entry */ 3604d522f475Smrgvoid 3605d522f475Smrgupdate_marginbell(void) 3606d522f475Smrg{ 3607d522f475Smrg UpdateCheckbox("update_marginbell", 3608d522f475Smrg vtMenuEntries, 3609d522f475Smrg vtMenu_marginbell, 361020d2c4d2Smrg TScreenOf(term)->marginbell); 3611d522f475Smrg} 3612d522f475Smrg#endif 3613d522f475Smrg 3614d522f475Smrg#if OPT_BLINK_CURS 3615d522f475Smrgvoid 3616d522f475Smrgupdate_cursorblink(void) 3617d522f475Smrg{ 3618d522f475Smrg UpdateCheckbox("update_cursorblink", 3619d522f475Smrg vtMenuEntries, 3620d522f475Smrg vtMenu_cursorblink, 362120d2c4d2Smrg TScreenOf(term)->cursor_blink); 3622d522f475Smrg} 3623d522f475Smrg#endif 3624d522f475Smrg 3625d522f475Smrgvoid 3626d522f475Smrgupdate_altscreen(void) 3627d522f475Smrg{ 3628d522f475Smrg UpdateCheckbox("update_altscreen", 3629d522f475Smrg vtMenuEntries, 3630d522f475Smrg vtMenu_altscreen, 363120d2c4d2Smrg TScreenOf(term)->whichBuf); 3632d522f475Smrg} 3633d522f475Smrg 3634d522f475Smrgvoid 3635d522f475Smrgupdate_titeInhibit(void) 3636d522f475Smrg{ 3637d522f475Smrg UpdateCheckbox("update_titeInhibit", 3638d522f475Smrg vtMenuEntries, 3639d522f475Smrg vtMenu_titeInhibit, 3640d522f475Smrg !(term->misc.titeInhibit)); 3641d522f475Smrg} 3642d522f475Smrg 3643d522f475Smrg#ifndef NO_ACTIVE_ICON 3644d522f475Smrgvoid 3645d522f475Smrgupdate_activeicon(void) 3646d522f475Smrg{ 3647d522f475Smrg UpdateCheckbox("update_activeicon", 3648d522f475Smrg vtMenuEntries, 3649d522f475Smrg vtMenu_activeicon, 36500bd37d32Smrg term->work.active_icon); 3651d522f475Smrg} 3652d522f475Smrg#endif /* NO_ACTIVE_ICON */ 3653d522f475Smrg 3654e39b573cSmrgstatic void 3655e39b573cSmrgdo_allowBoldFonts(Widget w, 3656e39b573cSmrg XtPointer closure GCC_UNUSED, 3657e39b573cSmrg XtPointer data GCC_UNUSED) 3658e39b573cSmrg{ 3659e39b573cSmrg XtermWidget xw = getXtermWidget(w); 3660e39b573cSmrg if (xw != 0) { 3661e39b573cSmrg ToggleFlag(TScreenOf(xw)->allowBoldFonts); 3662e39b573cSmrg update_menu_allowBoldFonts(); 3663e39b573cSmrg Redraw(); 3664e39b573cSmrg } 3665e39b573cSmrg} 3666e39b573cSmrg 3667d522f475Smrg#if OPT_DEC_CHRSET 3668d522f475Smrgvoid 3669d522f475Smrgupdate_font_doublesize(void) 3670d522f475Smrg{ 3671d522f475Smrg UpdateCheckbox("update_font_doublesize", 3672d522f475Smrg fontMenuEntries, 3673d522f475Smrg fontMenu_font_doublesize, 367420d2c4d2Smrg TScreenOf(term)->font_doublesize); 3675d522f475Smrg} 3676d522f475Smrg#endif 3677d522f475Smrg 3678d522f475Smrg#if OPT_BOX_CHARS 3679d522f475Smrgvoid 3680d522f475Smrgupdate_font_boxchars(void) 3681d522f475Smrg{ 3682d522f475Smrg UpdateCheckbox("update_font_boxchars", 3683d522f475Smrg fontMenuEntries, 3684d522f475Smrg fontMenu_font_boxchars, 368520d2c4d2Smrg TScreenOf(term)->force_box_chars); 368620d2c4d2Smrg} 368720d2c4d2Smrg 368820d2c4d2Smrgvoid 368920d2c4d2Smrgupdate_font_packed(void) 369020d2c4d2Smrg{ 369120d2c4d2Smrg UpdateCheckbox("update_font_packed", 369220d2c4d2Smrg fontMenuEntries, 369320d2c4d2Smrg fontMenu_font_packedfont, 369420d2c4d2Smrg TScreenOf(term)->force_packed); 3695d522f475Smrg} 3696d522f475Smrg#endif 3697d522f475Smrg 3698d522f475Smrg#if OPT_DEC_SOFTFONT 3699d522f475Smrgvoid 3700d522f475Smrgupdate_font_loadable(void) 3701d522f475Smrg{ 3702d522f475Smrg UpdateCheckbox("update_font_loadable", 3703d522f475Smrg fontMenuEntries, 3704d522f475Smrg fontMenu_font_loadable, 3705d522f475Smrg term->misc.font_loadable); 3706d522f475Smrg} 3707d522f475Smrg#endif 3708d522f475Smrg 3709d522f475Smrg#if OPT_RENDERFONT 3710d522f475Smrgvoid 3711d522f475Smrgupdate_font_renderfont(void) 3712d522f475Smrg{ 3713d522f475Smrg UpdateCheckbox("update_font_renderfont", 3714d522f475Smrg fontMenuEntries, 3715d522f475Smrg fontMenu_render_font, 37160bd37d32Smrg (term->work.render_font == True)); 371720d2c4d2Smrg SetItemSensitivity(fontMenuEntries[fontMenu_render_font].widget, 3718913cc679Smrg !IsEmpty(CurrentXftFont(term))); 37190bd37d32Smrg update_fontmenu(term); 3720d522f475Smrg} 3721d522f475Smrg#endif 3722d522f475Smrg 3723d522f475Smrg#if OPT_WIDE_CHARS 3724d522f475Smrgvoid 3725d522f475Smrgupdate_font_utf8_mode(void) 3726d522f475Smrg{ 372720d2c4d2Smrg Bool active = (TScreenOf(term)->utf8_mode != uAlways); 372820d2c4d2Smrg Bool enable = (TScreenOf(term)->utf8_mode != uFalse); 3729d522f475Smrg 3730d522f475Smrg TRACE(("update_font_utf8_mode active %d, enable %d\n", active, enable)); 3731e39b573cSmrg SetItemSensitivity(fontMenuEntries[fontMenu_utf8_mode].widget, active); 3732d522f475Smrg UpdateCheckbox("update_font_utf8_mode", 3733d522f475Smrg fontMenuEntries, 3734e39b573cSmrg fontMenu_utf8_mode, 3735e39b573cSmrg enable); 3736e39b573cSmrg} 3737e39b573cSmrg 3738e39b573cSmrgvoid 3739e39b573cSmrgupdate_font_utf8_fonts(void) 3740e39b573cSmrg{ 3741e39b573cSmrg Bool active = (TScreenOf(term)->utf8_fonts != uAlways); 3742e39b573cSmrg Bool enable = (TScreenOf(term)->utf8_fonts != uFalse); 3743e39b573cSmrg 3744e39b573cSmrg TRACE(("update_font_utf8_fonts active %d, enable %d\n", active, enable)); 3745e39b573cSmrg SetItemSensitivity(fontMenuEntries[fontMenu_utf8_fonts].widget, active); 3746e39b573cSmrg UpdateCheckbox("update_font_utf8_fonts", 3747e39b573cSmrg fontMenuEntries, 3748e39b573cSmrg fontMenu_utf8_fonts, 3749d522f475Smrg enable); 3750d522f475Smrg} 3751d522f475Smrg 3752d522f475Smrgvoid 3753d522f475Smrgupdate_font_utf8_title(void) 3754d522f475Smrg{ 375520d2c4d2Smrg Bool active = (TScreenOf(term)->utf8_mode != uFalse); 375620d2c4d2Smrg Bool enable = (TScreenOf(term)->utf8_title); 3757d522f475Smrg 3758d522f475Smrg TRACE(("update_font_utf8_title active %d, enable %d\n", active, enable)); 3759e39b573cSmrg SetItemSensitivity(fontMenuEntries[fontMenu_utf8_title].widget, active); 3760d522f475Smrg UpdateCheckbox("update_font_utf8_title", 3761d522f475Smrg fontMenuEntries, 3762e39b573cSmrg fontMenu_utf8_title, 3763d522f475Smrg enable); 3764d522f475Smrg} 3765d522f475Smrg#endif 3766d522f475Smrg 37670bd37d32Smrg#if OPT_DEC_CHRSET || OPT_BOX_CHARS || OPT_DEC_SOFTFONT 3768e39b573cSmrgvoid 3769e39b573cSmrgupdate_menu_allowBoldFonts(void) 3770e39b573cSmrg{ 3771e39b573cSmrg UpdateCheckbox("update_menu_allowBoldFonts", 3772e39b573cSmrg fontMenuEntries, 3773e39b573cSmrg fontMenu_allowBoldFonts, 3774e39b573cSmrg TScreenOf(term)->allowBoldFonts); 3775e39b573cSmrg} 37760bd37d32Smrg#endif 3777e39b573cSmrg 3778956cc18dSsnj#if OPT_ALLOW_XXX_OPS 3779956cc18dSsnjstatic void 3780956cc18dSsnjenable_allow_xxx_ops(Bool enable) 3781956cc18dSsnj{ 3782956cc18dSsnj SetItemSensitivity(fontMenuEntries[fontMenu_allowFontOps].widget, enable); 3783913cc679Smrg SetItemSensitivity(fontMenuEntries[fontMenu_allowMouseOps].widget, enable); 3784956cc18dSsnj SetItemSensitivity(fontMenuEntries[fontMenu_allowTcapOps].widget, enable); 3785956cc18dSsnj SetItemSensitivity(fontMenuEntries[fontMenu_allowTitleOps].widget, enable); 3786956cc18dSsnj SetItemSensitivity(fontMenuEntries[fontMenu_allowWindowOps].widget, enable); 3787956cc18dSsnj} 3788956cc18dSsnj 378920d2c4d2Smrgstatic void 379020d2c4d2Smrgdo_allowColorOps(Widget w, 379120d2c4d2Smrg XtPointer closure GCC_UNUSED, 379220d2c4d2Smrg XtPointer data GCC_UNUSED) 379320d2c4d2Smrg{ 379420d2c4d2Smrg XtermWidget xw = getXtermWidget(w); 379520d2c4d2Smrg if (xw != 0) { 379620d2c4d2Smrg ToggleFlag(TScreenOf(xw)->allowColorOps); 379720d2c4d2Smrg update_menu_allowColorOps(); 379820d2c4d2Smrg } 379920d2c4d2Smrg} 380020d2c4d2Smrg 3801956cc18dSsnjstatic void 3802956cc18dSsnjdo_allowFontOps(Widget w, 3803956cc18dSsnj XtPointer closure GCC_UNUSED, 3804956cc18dSsnj XtPointer data GCC_UNUSED) 3805956cc18dSsnj{ 3806956cc18dSsnj XtermWidget xw = getXtermWidget(w); 3807956cc18dSsnj if (xw != 0) { 380820d2c4d2Smrg ToggleFlag(TScreenOf(xw)->allowFontOps); 3809956cc18dSsnj update_menu_allowFontOps(); 3810956cc18dSsnj } 3811956cc18dSsnj} 3812956cc18dSsnj 3813913cc679Smrgstatic void 3814913cc679Smrgdo_allowMouseOps(Widget w, 3815913cc679Smrg XtPointer closure GCC_UNUSED, 3816913cc679Smrg XtPointer data GCC_UNUSED) 3817913cc679Smrg{ 3818913cc679Smrg XtermWidget xw = getXtermWidget(w); 3819913cc679Smrg if (xw != 0) { 3820913cc679Smrg ToggleFlag(TScreenOf(xw)->allowMouseOps); 3821913cc679Smrg update_menu_allowMouseOps(); 3822913cc679Smrg } 3823913cc679Smrg} 3824913cc679Smrg 3825956cc18dSsnjstatic void 3826956cc18dSsnjdo_allowTcapOps(Widget w, 3827956cc18dSsnj XtPointer closure GCC_UNUSED, 3828956cc18dSsnj XtPointer data GCC_UNUSED) 3829956cc18dSsnj{ 3830956cc18dSsnj XtermWidget xw = getXtermWidget(w); 3831956cc18dSsnj if (xw != 0) { 383220d2c4d2Smrg ToggleFlag(TScreenOf(xw)->allowTcapOps); 3833956cc18dSsnj update_menu_allowTcapOps(); 3834956cc18dSsnj } 3835956cc18dSsnj} 3836956cc18dSsnj 3837956cc18dSsnjstatic void 3838956cc18dSsnjdo_allowTitleOps(Widget w, 3839956cc18dSsnj XtPointer closure GCC_UNUSED, 3840956cc18dSsnj XtPointer data GCC_UNUSED) 3841956cc18dSsnj{ 3842956cc18dSsnj XtermWidget xw = getXtermWidget(w); 3843956cc18dSsnj if (xw != 0) { 384420d2c4d2Smrg ToggleFlag(TScreenOf(xw)->allowTitleOps); 3845956cc18dSsnj update_menu_allowTitleOps(); 3846956cc18dSsnj } 3847956cc18dSsnj} 3848956cc18dSsnj 3849956cc18dSsnjstatic void 3850956cc18dSsnjdo_allowWindowOps(Widget w, 3851956cc18dSsnj XtPointer closure GCC_UNUSED, 3852956cc18dSsnj XtPointer data GCC_UNUSED) 3853956cc18dSsnj{ 3854956cc18dSsnj XtermWidget xw = getXtermWidget(w); 3855956cc18dSsnj if (xw != 0) { 385620d2c4d2Smrg ToggleFlag(TScreenOf(xw)->allowWindowOps); 3857956cc18dSsnj update_menu_allowWindowOps(); 3858956cc18dSsnj } 3859956cc18dSsnj} 3860956cc18dSsnj 386120d2c4d2Smrgvoid 386220d2c4d2SmrgHandleAllowColorOps(Widget w, 3863894e0ac8Smrg XEvent *event GCC_UNUSED, 3864894e0ac8Smrg String *params, 386520d2c4d2Smrg Cardinal *param_count) 386620d2c4d2Smrg{ 386720d2c4d2Smrg HANDLE_VT_TOGGLE(allowColorOps); 386820d2c4d2Smrg} 386920d2c4d2Smrg 3870956cc18dSsnjvoid 3871956cc18dSsnjHandleAllowFontOps(Widget w, 3872894e0ac8Smrg XEvent *event GCC_UNUSED, 3873894e0ac8Smrg String *params, 3874956cc18dSsnj Cardinal *param_count) 3875956cc18dSsnj{ 387620d2c4d2Smrg HANDLE_VT_TOGGLE(allowFontOps); 3877956cc18dSsnj} 3878956cc18dSsnj 3879913cc679Smrgvoid 3880913cc679SmrgHandleAllowMouseOps(Widget w, 3881913cc679Smrg XEvent *event GCC_UNUSED, 3882913cc679Smrg String *params, 3883913cc679Smrg Cardinal *param_count) 3884913cc679Smrg{ 3885913cc679Smrg HANDLE_VT_TOGGLE(allowMouseOps); 3886913cc679Smrg} 3887913cc679Smrg 3888956cc18dSsnjvoid 3889956cc18dSsnjHandleAllowTcapOps(Widget w, 3890894e0ac8Smrg XEvent *event GCC_UNUSED, 3891894e0ac8Smrg String *params, 3892956cc18dSsnj Cardinal *param_count) 3893956cc18dSsnj{ 389420d2c4d2Smrg HANDLE_VT_TOGGLE(allowTcapOps); 3895956cc18dSsnj} 3896956cc18dSsnj 3897956cc18dSsnjvoid 3898956cc18dSsnjHandleAllowTitleOps(Widget w, 3899894e0ac8Smrg XEvent *event GCC_UNUSED, 3900894e0ac8Smrg String *params, 3901956cc18dSsnj Cardinal *param_count) 3902956cc18dSsnj{ 390320d2c4d2Smrg HANDLE_VT_TOGGLE(allowTitleOps); 3904956cc18dSsnj} 3905956cc18dSsnj 3906956cc18dSsnjvoid 3907956cc18dSsnjHandleAllowWindowOps(Widget w, 3908894e0ac8Smrg XEvent *event GCC_UNUSED, 3909894e0ac8Smrg String *params, 3910956cc18dSsnj Cardinal *param_count) 3911956cc18dSsnj{ 391220d2c4d2Smrg HANDLE_VT_TOGGLE(allowWindowOps); 3913956cc18dSsnj} 3914956cc18dSsnj 3915956cc18dSsnjvoid 391620d2c4d2Smrgupdate_menu_allowColorOps(void) 3917956cc18dSsnj{ 391820d2c4d2Smrg UpdateCheckbox("update_menu_allowColorOps", 3919956cc18dSsnj fontMenuEntries, 392020d2c4d2Smrg fontMenu_allowColorOps, 392120d2c4d2Smrg TScreenOf(term)->allowColorOps); 3922956cc18dSsnj} 3923956cc18dSsnj 3924956cc18dSsnjvoid 3925956cc18dSsnjupdate_menu_allowFontOps(void) 3926956cc18dSsnj{ 3927956cc18dSsnj UpdateCheckbox("update_menu_allowFontOps", 3928956cc18dSsnj fontMenuEntries, 3929956cc18dSsnj fontMenu_allowFontOps, 393020d2c4d2Smrg TScreenOf(term)->allowFontOps); 393120d2c4d2Smrg} 393220d2c4d2Smrg 3933913cc679Smrgvoid 3934913cc679Smrgupdate_menu_allowMouseOps(void) 3935913cc679Smrg{ 3936913cc679Smrg UpdateCheckbox("update_menu_allowMouseOps", 3937913cc679Smrg fontMenuEntries, 3938913cc679Smrg fontMenu_allowMouseOps, 3939913cc679Smrg TScreenOf(term)->allowMouseOps); 3940913cc679Smrg} 3941913cc679Smrg 394220d2c4d2Smrgvoid 394320d2c4d2Smrgupdate_menu_allowTcapOps(void) 394420d2c4d2Smrg{ 394520d2c4d2Smrg UpdateCheckbox("update_menu_allowTcapOps", 394620d2c4d2Smrg fontMenuEntries, 394720d2c4d2Smrg fontMenu_allowTcapOps, 394820d2c4d2Smrg TScreenOf(term)->allowTcapOps); 3949956cc18dSsnj} 3950956cc18dSsnj 3951956cc18dSsnjvoid 3952956cc18dSsnjupdate_menu_allowTitleOps(void) 3953956cc18dSsnj{ 3954956cc18dSsnj UpdateCheckbox("update_menu_allowTitleOps", 3955956cc18dSsnj fontMenuEntries, 3956956cc18dSsnj fontMenu_allowTitleOps, 395720d2c4d2Smrg TScreenOf(term)->allowTitleOps); 3958956cc18dSsnj} 3959956cc18dSsnj 3960956cc18dSsnjvoid 3961956cc18dSsnjupdate_menu_allowWindowOps(void) 3962956cc18dSsnj{ 3963956cc18dSsnj UpdateCheckbox("update_menu_allowWindowOps", 3964956cc18dSsnj fontMenuEntries, 3965956cc18dSsnj fontMenu_allowWindowOps, 396620d2c4d2Smrg TScreenOf(term)->allowWindowOps); 3967956cc18dSsnj} 3968956cc18dSsnj#endif 3969956cc18dSsnj 3970d522f475Smrg#if OPT_TEK4014 3971d522f475Smrgvoid 3972d522f475Smrgupdate_tekshow(void) 3973d522f475Smrg{ 397420d2c4d2Smrg if (!(TScreenOf(term)->inhibit & I_TEK)) { 3975d522f475Smrg UpdateCheckbox("update_tekshow", 3976d522f475Smrg vtMenuEntries, 3977d522f475Smrg vtMenu_tekshow, 3978d522f475Smrg TEK4014_SHOWN(term)); 3979d522f475Smrg } 3980d522f475Smrg} 3981d522f475Smrg 3982d522f475Smrgvoid 3983d522f475Smrgupdate_vttekmode(void) 3984d522f475Smrg{ 39850bd37d32Smrg XtermWidget xw = term; 39860bd37d32Smrg 39870bd37d32Smrg if (!(TScreenOf(xw)->inhibit & I_TEK)) { 3988d522f475Smrg UpdateCheckbox("update_vtmode", 3989d522f475Smrg vtMenuEntries, 3990d522f475Smrg vtMenu_tekmode, 39910bd37d32Smrg TEK4014_ACTIVE(xw)); 3992d522f475Smrg UpdateCheckbox("update_tekmode", 3993d522f475Smrg tekMenuEntries, 3994d522f475Smrg tekMenu_vtmode, 39950bd37d32Smrg !TEK4014_ACTIVE(xw)); 39960bd37d32Smrg update_fullscreen(); 3997d522f475Smrg } 3998d522f475Smrg} 3999d522f475Smrg 4000d522f475Smrgvoid 4001d522f475Smrgupdate_vtshow(void) 4002d522f475Smrg{ 400320d2c4d2Smrg if (!(TScreenOf(term)->inhibit & I_TEK)) { 4004d522f475Smrg UpdateCheckbox("update_vtshow", 4005d522f475Smrg tekMenuEntries, 4006d522f475Smrg tekMenu_vtshow, 400720d2c4d2Smrg TScreenOf(term)->Vshow); 4008d522f475Smrg } 4009d522f475Smrg} 4010d522f475Smrg 4011d522f475Smrgvoid 4012d522f475Smrgset_vthide_sensitivity(void) 4013d522f475Smrg{ 401420d2c4d2Smrg if (!(TScreenOf(term)->inhibit & I_TEK)) { 4015d522f475Smrg SetItemSensitivity( 4016d522f475Smrg vtMenuEntries[vtMenu_vthide].widget, 4017d522f475Smrg TEK4014_SHOWN(term)); 4018d522f475Smrg } 4019d522f475Smrg} 4020d522f475Smrg 4021d522f475Smrgvoid 4022d522f475Smrgset_tekhide_sensitivity(void) 4023d522f475Smrg{ 402420d2c4d2Smrg if (!(TScreenOf(term)->inhibit & I_TEK)) { 4025d522f475Smrg SetItemSensitivity( 4026d522f475Smrg tekMenuEntries[tekMenu_tekhide].widget, 402720d2c4d2Smrg TScreenOf(term)->Vshow); 4028d522f475Smrg } 4029d522f475Smrg} 4030d522f475Smrg 4031d522f475Smrgvoid 4032d522f475Smrgset_tekfont_menu_item(int n, int val) 4033d522f475Smrg{ 403420d2c4d2Smrg if (!(TScreenOf(term)->inhibit & I_TEK)) { 4035d522f475Smrg UpdateCheckbox("set_tekfont_menu_item", tekMenuEntries, FS2MI(n), 4036d522f475Smrg (val)); 4037d522f475Smrg } 4038d522f475Smrg} 4039d522f475Smrg#endif /* OPT_TEK4014 */ 4040d522f475Smrg 4041d522f475Smrgvoid 4042d522f475Smrgset_menu_font(int val) 4043d522f475Smrg{ 4044d522f475Smrg UpdateCheckbox("set_menu_font", 4045d522f475Smrg fontMenuEntries, 404620d2c4d2Smrg TScreenOf(term)->menu_font_number, 4047d522f475Smrg (val)); 4048d522f475Smrg} 4049