menu.c revision a1f3da82
1a1f3da82Smrg/* $XTermId: menu.c,v 1.284 2011/02/17 00:46:18 tom Exp $ */ 2d522f475Smrg 3d522f475Smrg/* 4a1f3da82Smrg * Copyright 1999-2010,2011 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 92d522f475Smrg#elif defined(HAVE_LIB_NEXTAW) 93d522f475Smrg 94d522f475Smrg#include <X11/neXtaw/SimpleMenu.h> 95d522f475Smrg#include <X11/neXtaw/Box.h> 96d522f475Smrg#include <X11/neXtaw/SmeBSB.h> 97d522f475Smrg#include <X11/neXtaw/SmeLine.h> 98d522f475Smrg 99d522f475Smrg#if OPT_TOOLBAR 100d522f475Smrg#include <X11/neXtaw/MenuButton.h> 101d522f475Smrg#include <X11/neXtaw/Form.h> 102d522f475Smrg#endif 103d522f475Smrg 104d522f475Smrg#elif defined(HAVE_LIB_XAWPLUS) 105d522f475Smrg 106d522f475Smrg#include <X11/XawPlus/SimpleMenu.h> 107d522f475Smrg#include <X11/XawPlus/Box.h> 108d522f475Smrg#include <X11/XawPlus/SmeBSB.h> 109d522f475Smrg#include <X11/XawPlus/SmeLine.h> 110d522f475Smrg 111d522f475Smrg#if OPT_TOOLBAR 112d522f475Smrg#include <X11/XawPlus/MenuButton.h> 113d522f475Smrg#include <X11/XawPlus/Form.h> 114d522f475Smrg#endif 115d522f475Smrg 116d522f475Smrg#endif 117d522f475Smrg 118d522f475Smrg#undef app_con 119d522f475Smrg 120d522f475Smrg#include <stdio.h> 121d522f475Smrg#include <signal.h> 122956cc18dSsnj 123a1f3da82Smrg#if OPT_TRACE 124a1f3da82Smrg#define UpdateCheckbox(func, mn, mi, val) UpdateMenuItem(func, mn, mi, val) 125a1f3da82Smrg#else 126a1f3da82Smrg#define UpdateCheckbox(func, mn, mi, val) UpdateMenuItem(mn, mi, val) 127a1f3da82Smrg#endif 128a1f3da82Smrg 129956cc18dSsnj#define ToggleFlag(flag) flag = (Boolean) !flag 130d522f475Smrg/* *INDENT-OFF* */ 131d522f475Smrgstatic void do_8bit_control PROTO_XT_CALLBACK_ARGS; 132d522f475Smrgstatic void do_allow132 PROTO_XT_CALLBACK_ARGS; 133d522f475Smrgstatic void do_allowsends PROTO_XT_CALLBACK_ARGS; 134d522f475Smrgstatic void do_altscreen PROTO_XT_CALLBACK_ARGS; 135d522f475Smrgstatic void do_appcursor PROTO_XT_CALLBACK_ARGS; 136d522f475Smrgstatic void do_appkeypad PROTO_XT_CALLBACK_ARGS; 137d522f475Smrgstatic void do_autolinefeed PROTO_XT_CALLBACK_ARGS; 138d522f475Smrgstatic void do_autowrap PROTO_XT_CALLBACK_ARGS; 139d522f475Smrgstatic void do_backarrow PROTO_XT_CALLBACK_ARGS; 140d522f475Smrgstatic void do_bellIsUrgent PROTO_XT_CALLBACK_ARGS; 141d522f475Smrgstatic void do_clearsavedlines PROTO_XT_CALLBACK_ARGS; 142d522f475Smrgstatic void do_continue PROTO_XT_CALLBACK_ARGS; 143d522f475Smrgstatic void do_delete_del PROTO_XT_CALLBACK_ARGS; 144d522f475Smrgstatic void do_hardreset PROTO_XT_CALLBACK_ARGS; 145d522f475Smrgstatic void do_interrupt PROTO_XT_CALLBACK_ARGS; 146d522f475Smrgstatic void do_jumpscroll PROTO_XT_CALLBACK_ARGS; 147d522f475Smrgstatic void do_kill PROTO_XT_CALLBACK_ARGS; 148d522f475Smrgstatic void do_old_fkeys PROTO_XT_CALLBACK_ARGS; 149d522f475Smrgstatic void do_poponbell PROTO_XT_CALLBACK_ARGS; 150d522f475Smrgstatic void do_print PROTO_XT_CALLBACK_ARGS; 151d522f475Smrgstatic void do_print_redir PROTO_XT_CALLBACK_ARGS; 152d522f475Smrgstatic void do_quit PROTO_XT_CALLBACK_ARGS; 153d522f475Smrgstatic void do_redraw PROTO_XT_CALLBACK_ARGS; 154d522f475Smrgstatic void do_reversevideo PROTO_XT_CALLBACK_ARGS; 155d522f475Smrgstatic void do_reversewrap PROTO_XT_CALLBACK_ARGS; 156d522f475Smrgstatic void do_scrollbar PROTO_XT_CALLBACK_ARGS; 157d522f475Smrgstatic void do_scrollkey PROTO_XT_CALLBACK_ARGS; 158d522f475Smrgstatic void do_scrollttyoutput PROTO_XT_CALLBACK_ARGS; 159d522f475Smrgstatic void do_securekbd PROTO_XT_CALLBACK_ARGS; 160d522f475Smrgstatic void do_keepSelection PROTO_XT_CALLBACK_ARGS; 161d522f475Smrgstatic void do_selectClipboard PROTO_XT_CALLBACK_ARGS; 162d522f475Smrgstatic void do_softreset PROTO_XT_CALLBACK_ARGS; 163d522f475Smrgstatic void do_suspend PROTO_XT_CALLBACK_ARGS; 164d522f475Smrgstatic void do_terminate PROTO_XT_CALLBACK_ARGS; 165d522f475Smrgstatic void do_titeInhibit PROTO_XT_CALLBACK_ARGS; 166d522f475Smrgstatic void do_visualbell PROTO_XT_CALLBACK_ARGS; 167d522f475Smrgstatic void do_vtfont PROTO_XT_CALLBACK_ARGS; 168d522f475Smrg 169d522f475Smrg#ifdef ALLOWLOGGING 170d522f475Smrgstatic void do_logging PROTO_XT_CALLBACK_ARGS; 171d522f475Smrg#endif 172d522f475Smrg 173d522f475Smrg#ifndef NO_ACTIVE_ICON 174d522f475Smrgstatic void do_activeicon PROTO_XT_CALLBACK_ARGS; 175d522f475Smrg#endif /* NO_ACTIVE_ICON */ 176d522f475Smrg 177956cc18dSsnj#if OPT_ALLOW_XXX_OPS 178956cc18dSsnjstatic void enable_allow_xxx_ops (Bool); 17920d2c4d2Smrgstatic void do_allowColorOps PROTO_XT_CALLBACK_ARGS; 180956cc18dSsnjstatic void do_allowFontOps PROTO_XT_CALLBACK_ARGS; 18120d2c4d2Smrgstatic void do_allowTcapOps PROTO_XT_CALLBACK_ARGS; 182956cc18dSsnjstatic void do_allowTitleOps PROTO_XT_CALLBACK_ARGS; 183956cc18dSsnjstatic void do_allowWindowOps PROTO_XT_CALLBACK_ARGS; 184956cc18dSsnj#endif 185956cc18dSsnj 186d522f475Smrg#if OPT_BLINK_CURS 187d522f475Smrgstatic void do_cursorblink PROTO_XT_CALLBACK_ARGS; 188d522f475Smrg#endif 189d522f475Smrg 190d522f475Smrg#if OPT_BOX_CHARS 191d522f475Smrgstatic void do_font_boxchars PROTO_XT_CALLBACK_ARGS; 19220d2c4d2Smrgstatic void do_font_packed PROTO_XT_CALLBACK_ARGS; 193d522f475Smrg#endif 194d522f475Smrg 195d522f475Smrg#if OPT_DEC_CHRSET 196d522f475Smrgstatic void do_font_doublesize PROTO_XT_CALLBACK_ARGS; 197d522f475Smrg#endif 198d522f475Smrg 199d522f475Smrg#if OPT_DEC_SOFTFONT 200d522f475Smrgstatic void do_font_loadable PROTO_XT_CALLBACK_ARGS; 201d522f475Smrg#endif 202d522f475Smrg 203d522f475Smrg#if OPT_HP_FUNC_KEYS 204d522f475Smrgstatic void do_hp_fkeys PROTO_XT_CALLBACK_ARGS; 205d522f475Smrg#endif 206d522f475Smrg 207a1f3da82Smrg#if OPT_MAXIMIZE 208a1f3da82Smrgstatic void do_fullscreen PROTO_XT_CALLBACK_ARGS; 209a1f3da82Smrg#endif 210a1f3da82Smrg 211d522f475Smrg#if OPT_NUM_LOCK 212d522f475Smrgstatic void do_alt_esc PROTO_XT_CALLBACK_ARGS; 213d522f475Smrgstatic void do_num_lock PROTO_XT_CALLBACK_ARGS; 214d522f475Smrgstatic void do_meta_esc PROTO_XT_CALLBACK_ARGS; 215d522f475Smrg#endif 216d522f475Smrg 217d522f475Smrg#if OPT_RENDERFONT 218d522f475Smrgstatic void do_font_renderfont PROTO_XT_CALLBACK_ARGS; 219d522f475Smrg#endif 220d522f475Smrg 221d522f475Smrg#if OPT_SCO_FUNC_KEYS 222d522f475Smrgstatic void do_sco_fkeys PROTO_XT_CALLBACK_ARGS; 223d522f475Smrg#endif 224d522f475Smrg 225d522f475Smrg#if OPT_SUN_FUNC_KEYS 226d522f475Smrgstatic void do_sun_fkeys PROTO_XT_CALLBACK_ARGS; 227d522f475Smrg#endif 228d522f475Smrg 229d522f475Smrg#if OPT_SUNPC_KBD 230d522f475Smrgstatic void do_sun_kbd PROTO_XT_CALLBACK_ARGS; 231d522f475Smrg#endif 232d522f475Smrg 233d522f475Smrg#if OPT_TCAP_FKEYS 234d522f475Smrgstatic void do_tcap_fkeys PROTO_XT_CALLBACK_ARGS; 235d522f475Smrg#endif 236d522f475Smrg 237d522f475Smrg#if OPT_TEK4014 238d522f475Smrgstatic void do_tekcopy PROTO_XT_CALLBACK_ARGS; 239d522f475Smrgstatic void do_tekhide PROTO_XT_CALLBACK_ARGS; 240d522f475Smrgstatic void do_tekmode PROTO_XT_CALLBACK_ARGS; 241d522f475Smrgstatic void do_tekonoff PROTO_XT_CALLBACK_ARGS; 242d522f475Smrgstatic void do_tekpage PROTO_XT_CALLBACK_ARGS; 243d522f475Smrgstatic void do_tekreset PROTO_XT_CALLBACK_ARGS; 244d522f475Smrgstatic void do_tekshow PROTO_XT_CALLBACK_ARGS; 245d522f475Smrgstatic void do_tektext2 PROTO_XT_CALLBACK_ARGS; 246d522f475Smrgstatic void do_tektext3 PROTO_XT_CALLBACK_ARGS; 247d522f475Smrgstatic void do_tektextlarge PROTO_XT_CALLBACK_ARGS; 248d522f475Smrgstatic void do_tektextsmall PROTO_XT_CALLBACK_ARGS; 249d522f475Smrgstatic void do_vthide PROTO_XT_CALLBACK_ARGS; 250d522f475Smrgstatic void do_vtmode PROTO_XT_CALLBACK_ARGS; 251d522f475Smrgstatic void do_vtonoff PROTO_XT_CALLBACK_ARGS; 252d522f475Smrgstatic void do_vtshow PROTO_XT_CALLBACK_ARGS; 253d522f475Smrgstatic void handle_tekshow (Widget gw, Bool allowswitch); 254d522f475Smrgstatic void handle_vtshow (Widget gw, Bool allowswitch); 255d522f475Smrg#endif 256d522f475Smrg 257d522f475Smrg#if OPT_TOOLBAR 258d522f475Smrgstatic void do_toolbar PROTO_XT_CALLBACK_ARGS; 259d522f475Smrg#endif 260d522f475Smrg 261d522f475Smrg#if OPT_WIDE_CHARS 262d522f475Smrgstatic void do_font_utf8_mode PROTO_XT_CALLBACK_ARGS; 263d522f475Smrgstatic void do_font_utf8_title PROTO_XT_CALLBACK_ARGS; 264d522f475Smrg#endif 265d522f475Smrg 266d522f475Smrg/* 267d522f475Smrg * The order of entries MUST match the values given in menu.h 268d522f475Smrg */ 269d522f475SmrgMenuEntry mainMenuEntries[] = { 270d522f475Smrg#if OPT_TOOLBAR 271d522f475Smrg { "toolbar", do_toolbar, NULL }, 272a1f3da82Smrg#endif 273a1f3da82Smrg#if OPT_MAXIMIZE 274a1f3da82Smrg { "fullscreen", do_fullscreen, NULL }, 275d522f475Smrg#endif 276d522f475Smrg { "securekbd", do_securekbd, NULL }, 277d522f475Smrg { "allowsends", do_allowsends, NULL }, 278d522f475Smrg { "redraw", do_redraw, NULL }, 279d522f475Smrg { "line1", NULL, NULL }, 280d522f475Smrg#ifdef ALLOWLOGGING 281d522f475Smrg { "logging", do_logging, NULL }, 282d522f475Smrg#endif 283d522f475Smrg { "print", do_print, NULL }, 284d522f475Smrg { "print-redir", do_print_redir, NULL }, 285d522f475Smrg { "line2", NULL, NULL }, 286d522f475Smrg { "8-bit control", do_8bit_control,NULL }, 287d522f475Smrg { "backarrow key", do_backarrow, NULL }, 288d522f475Smrg#if OPT_NUM_LOCK 289d522f475Smrg { "num-lock", do_num_lock, NULL }, 290d522f475Smrg { "alt-esc", do_alt_esc, NULL }, 291d522f475Smrg { "meta-esc", do_meta_esc, NULL }, 292d522f475Smrg#endif 293d522f475Smrg { "delete-is-del", do_delete_del, NULL }, 294d522f475Smrg { "oldFunctionKeys",do_old_fkeys, NULL }, 295d522f475Smrg#if OPT_TCAP_FKEYS 296d522f475Smrg { "tcapFunctionKeys",do_tcap_fkeys, NULL }, 297d522f475Smrg#endif 298d522f475Smrg#if OPT_HP_FUNC_KEYS 299d522f475Smrg { "hpFunctionKeys", do_hp_fkeys, NULL }, 300d522f475Smrg#endif 301d522f475Smrg#if OPT_SCO_FUNC_KEYS 302d522f475Smrg { "scoFunctionKeys",do_sco_fkeys, NULL }, 303d522f475Smrg#endif 304d522f475Smrg#if OPT_SUN_FUNC_KEYS 305d522f475Smrg { "sunFunctionKeys",do_sun_fkeys, NULL }, 306d522f475Smrg#endif 307d522f475Smrg#if OPT_SUNPC_KBD 308d522f475Smrg { "sunKeyboard", do_sun_kbd, NULL }, 309d522f475Smrg#endif 310d522f475Smrg { "line3", NULL, NULL }, 311d522f475Smrg { "suspend", do_suspend, NULL }, 312d522f475Smrg { "continue", do_continue, NULL }, 313d522f475Smrg { "interrupt", do_interrupt, NULL }, 314d522f475Smrg { "hangup", do_hangup, NULL }, 315d522f475Smrg { "terminate", do_terminate, NULL }, 316d522f475Smrg { "kill", do_kill, NULL }, 317d522f475Smrg { "line4", NULL, NULL }, 318d522f475Smrg { "quit", do_quit, NULL }}; 319d522f475Smrg 320d522f475SmrgMenuEntry vtMenuEntries[] = { 321d522f475Smrg { "scrollbar", do_scrollbar, NULL }, 322d522f475Smrg { "jumpscroll", do_jumpscroll, NULL }, 323d522f475Smrg { "reversevideo", do_reversevideo, NULL }, 324d522f475Smrg { "autowrap", do_autowrap, NULL }, 325d522f475Smrg { "reversewrap", do_reversewrap, NULL }, 326d522f475Smrg { "autolinefeed", do_autolinefeed, NULL }, 327d522f475Smrg { "appcursor", do_appcursor, NULL }, 328d522f475Smrg { "appkeypad", do_appkeypad, NULL }, 329d522f475Smrg { "scrollkey", do_scrollkey, NULL }, 330d522f475Smrg { "scrollttyoutput",do_scrollttyoutput, NULL }, 331d522f475Smrg { "allow132", do_allow132, NULL }, 332d522f475Smrg { "keepSelection", do_keepSelection, NULL }, 333d522f475Smrg { "selectToClipboard",do_selectClipboard, NULL }, 334d522f475Smrg { "visualbell", do_visualbell, NULL }, 335d522f475Smrg { "bellIsUrgent", do_bellIsUrgent, NULL }, 336d522f475Smrg { "poponbell", do_poponbell, NULL }, 337d522f475Smrg#if OPT_BLINK_CURS 338d522f475Smrg { "cursorblink", do_cursorblink, NULL }, 339d522f475Smrg#endif 340d522f475Smrg { "titeInhibit", do_titeInhibit, NULL }, 341d522f475Smrg#ifndef NO_ACTIVE_ICON 342d522f475Smrg { "activeicon", do_activeicon, NULL }, 343d522f475Smrg#endif /* NO_ACTIVE_ICON */ 344d522f475Smrg { "line1", NULL, NULL }, 345d522f475Smrg { "softreset", do_softreset, NULL }, 346d522f475Smrg { "hardreset", do_hardreset, NULL }, 347d522f475Smrg { "clearsavedlines",do_clearsavedlines, NULL }, 348d522f475Smrg { "line2", NULL, NULL }, 349d522f475Smrg#if OPT_TEK4014 350d522f475Smrg { "tekshow", do_tekshow, NULL }, 351d522f475Smrg { "tekmode", do_tekmode, NULL }, 352d522f475Smrg { "vthide", do_vthide, NULL }, 353d522f475Smrg#endif 354d522f475Smrg { "altscreen", do_altscreen, NULL }, 355d522f475Smrg }; 356d522f475Smrg 357d522f475SmrgMenuEntry fontMenuEntries[] = { 358d522f475Smrg { "fontdefault", do_vtfont, NULL }, 359d522f475Smrg { "font1", do_vtfont, NULL }, 360d522f475Smrg { "font2", do_vtfont, NULL }, 361d522f475Smrg { "font3", do_vtfont, NULL }, 362d522f475Smrg { "font4", do_vtfont, NULL }, 363d522f475Smrg { "font5", do_vtfont, NULL }, 364d522f475Smrg { "font6", do_vtfont, NULL }, 365d522f475Smrg /* this is after the last builtin font; the other entries are special */ 366d522f475Smrg { "fontescape", do_vtfont, NULL }, 367d522f475Smrg { "fontsel", do_vtfont, NULL }, 368d522f475Smrg /* down to here should match NMENUFONTS in ptyx.h */ 369d522f475Smrg 370d522f475Smrg#if OPT_DEC_CHRSET || OPT_BOX_CHARS || OPT_DEC_SOFTFONT 371d522f475Smrg { "line1", NULL, NULL }, 372d522f475Smrg#if OPT_BOX_CHARS 373d522f475Smrg { "font-linedrawing",do_font_boxchars,NULL }, 37420d2c4d2Smrg { "font-packed", do_font_packed,NULL }, 375d522f475Smrg#endif 376d522f475Smrg#if OPT_DEC_CHRSET 377d522f475Smrg { "font-doublesize",do_font_doublesize,NULL }, 378d522f475Smrg#endif 379d522f475Smrg#if OPT_DEC_SOFTFONT 380d522f475Smrg { "font-loadable", do_font_loadable,NULL }, 381d522f475Smrg#endif 382d522f475Smrg#endif /* toggles for DEC font extensions */ 383d522f475Smrg 384d522f475Smrg#if OPT_RENDERFONT || OPT_WIDE_CHARS 385d522f475Smrg { "line2", NULL, NULL }, 386d522f475Smrg#if OPT_RENDERFONT 387d522f475Smrg { "render-font", do_font_renderfont,NULL }, 388d522f475Smrg#endif 389d522f475Smrg#if OPT_WIDE_CHARS 390d522f475Smrg { "utf8-mode", do_font_utf8_mode,NULL }, 391d522f475Smrg { "utf8-title", do_font_utf8_title,NULL }, 392d522f475Smrg#endif 393d522f475Smrg#endif /* toggles for other font extensions */ 394d522f475Smrg 395956cc18dSsnj#if OPT_ALLOW_XXX_OPS 396956cc18dSsnj { "line3", NULL, NULL }, 39720d2c4d2Smrg { "allow-color-ops",do_allowColorOps,NULL }, 398956cc18dSsnj { "allow-font-ops", do_allowFontOps,NULL }, 39920d2c4d2Smrg { "allow-tcap-ops", do_allowTcapOps,NULL }, 400956cc18dSsnj { "allow-title-ops",do_allowTitleOps,NULL }, 401956cc18dSsnj { "allow-window-ops",do_allowWindowOps,NULL }, 402956cc18dSsnj#endif 403956cc18dSsnj 404d522f475Smrg }; 405d522f475Smrg 406d522f475Smrg#if OPT_TEK4014 407d522f475SmrgMenuEntry tekMenuEntries[] = { 408d522f475Smrg { "tektextlarge", do_tektextlarge, NULL }, 409d522f475Smrg { "tektext2", do_tektext2, NULL }, 410d522f475Smrg { "tektext3", do_tektext3, NULL }, 411d522f475Smrg { "tektextsmall", do_tektextsmall, NULL }, 412d522f475Smrg { "line1", NULL, NULL }, 413d522f475Smrg { "tekpage", do_tekpage, NULL }, 414d522f475Smrg { "tekreset", do_tekreset, NULL }, 415d522f475Smrg { "tekcopy", do_tekcopy, NULL }, 416d522f475Smrg { "line2", NULL, NULL }, 417d522f475Smrg { "vtshow", do_vtshow, NULL }, 418d522f475Smrg { "vtmode", do_vtmode, NULL }, 419d522f475Smrg { "tekhide", do_tekhide, NULL }}; 420d522f475Smrg#endif 421d522f475Smrg 422d522f475Smrgtypedef struct { 423d522f475Smrg char *internal_name; 424d522f475Smrg MenuEntry *entry_list; 425d522f475Smrg Cardinal entry_len; 426d522f475Smrg} MenuHeader; 427d522f475Smrg 428d522f475Smrg /* This table is ordered to correspond with MenuIndex */ 429d522f475Smrgstatic MenuHeader menu_names[] = { 430d522f475Smrg { "mainMenu", mainMenuEntries, XtNumber(mainMenuEntries) }, 431d522f475Smrg { "vtMenu", vtMenuEntries, XtNumber(vtMenuEntries) }, 432d522f475Smrg { "fontMenu", fontMenuEntries, XtNumber(fontMenuEntries) }, 433d522f475Smrg#if OPT_TEK4014 434d522f475Smrg { "tekMenu", tekMenuEntries, XtNumber(tekMenuEntries) }, 435d522f475Smrg#endif 436d522f475Smrg { 0, 0, 0 }, 437d522f475Smrg}; 438d522f475Smrg/* *INDENT-ON* */ 439d522f475Smrg 440d522f475Smrg/* 441d522f475Smrg * FIXME: These are global data rather than in the xterm widget because they 442d522f475Smrg * are initialized before the widget is created. 443d522f475Smrg */ 444d522f475Smrgtypedef struct { 445d522f475Smrg Widget b; /* the toolbar's buttons */ 446d522f475Smrg Widget w; /* the popup shell activated by the button */ 447d522f475Smrg Cardinal entries; 448d522f475Smrg} MenuList; 449d522f475Smrg 450d522f475Smrgstatic MenuList vt_shell[NUM_POPUP_MENUS]; 451d522f475Smrg 452d522f475Smrg#if OPT_TEK4014 && OPT_TOOLBAR 453d522f475Smrgstatic MenuList tek_shell[NUM_POPUP_MENUS]; 454d522f475Smrg#endif 455d522f475Smrg 456d522f475Smrgstatic String 457d522f475SmrgsetMenuLocale(Bool before, String substitute) 458d522f475Smrg{ 45920d2c4d2Smrg String result = setlocale(LC_CTYPE, 0); 460d522f475Smrg 461d522f475Smrg if (before) { 462d522f475Smrg result = x_strdup(result); 46320d2c4d2Smrg } 46420d2c4d2Smrg (void) setlocale(LC_CTYPE, substitute); 46520d2c4d2Smrg TRACE(("setMenuLocale %s:%s\n", 46620d2c4d2Smrg (before 46720d2c4d2Smrg ? "before" 46820d2c4d2Smrg : "after"), 46920d2c4d2Smrg NonNull(result))); 47020d2c4d2Smrg if (!before) { 47120d2c4d2Smrg free((void *) substitute); 472d522f475Smrg } 473d522f475Smrg return result; 474d522f475Smrg} 475d522f475Smrg 476d522f475Smrg/* 477d522f475Smrg * Returns a pointer to the MenuList entry that matches the popup menu. 478d522f475Smrg */ 479d522f475Smrgstatic MenuList * 480d522f475Smrgselect_menu(Widget w GCC_UNUSED, MenuIndex num) 481d522f475Smrg{ 482d522f475Smrg#if OPT_TEK4014 && OPT_TOOLBAR 483d522f475Smrg while (w != 0) { 484d522f475Smrg if (w == tekshellwidget) { 485d522f475Smrg return &tek_shell[num]; 486d522f475Smrg } 487d522f475Smrg w = XtParent(w); 488d522f475Smrg } 489d522f475Smrg#endif 490d522f475Smrg return &vt_shell[num]; 491d522f475Smrg} 492d522f475Smrg 493d522f475Smrg/* 494d522f475Smrg * Returns a pointer to the given popup menu shell 495d522f475Smrg */ 496d522f475Smrgstatic Widget 497d522f475Smrgobtain_menu(Widget w, MenuIndex num) 498d522f475Smrg{ 499d522f475Smrg return select_menu(w, num)->w; 500d522f475Smrg} 501d522f475Smrg 502d522f475Smrg/* 503d522f475Smrg * Returns the number of entries in the given popup menu shell 504d522f475Smrg */ 505d522f475Smrgstatic Cardinal 506d522f475Smrgsizeof_menu(Widget w, MenuIndex num) 507d522f475Smrg{ 508d522f475Smrg return select_menu(w, num)->entries; 509d522f475Smrg} 510d522f475Smrg 511d522f475Smrg/* 512d522f475Smrg * create_menu - create a popup shell and stuff the menu into it. 513d522f475Smrg */ 514d522f475Smrg 515d522f475Smrgstatic Widget 516d522f475Smrgcreate_menu(Widget w, XtermWidget xtw, MenuIndex num) 517d522f475Smrg{ 518d522f475Smrg static XtCallbackRec cb[2] = 519d522f475Smrg { 520d522f475Smrg {NULL, NULL}, 521d522f475Smrg {NULL, NULL}}; 522d522f475Smrg static Arg arg = 523d522f475Smrg {XtNcallback, (XtArgVal) cb}; 524d522f475Smrg 52520d2c4d2Smrg TScreen *screen = TScreenOf(xtw); 526d522f475Smrg MenuHeader *data = &menu_names[num]; 527d522f475Smrg MenuList *list = select_menu(w, num); 528d522f475Smrg struct _MenuEntry *entries = data->entry_list; 529956cc18dSsnj Cardinal nentries = data->entry_len; 530d522f475Smrg#if !OPT_TOOLBAR 531d522f475Smrg String saveLocale; 532d522f475Smrg#endif 533d522f475Smrg 534d522f475Smrg if (screen->menu_item_bitmap == None) { 535d522f475Smrg /* 536d522f475Smrg * we really want to do these dynamically 537d522f475Smrg */ 538d522f475Smrg#define check_width 9 539d522f475Smrg#define check_height 8 540d522f475Smrg static unsigned char check_bits[] = 541d522f475Smrg { 542d522f475Smrg 0x00, 0x01, 0x80, 0x01, 0xc0, 0x00, 0x60, 0x00, 543d522f475Smrg 0x31, 0x00, 0x1b, 0x00, 0x0e, 0x00, 0x04, 0x00 544d522f475Smrg }; 545d522f475Smrg 546d522f475Smrg screen->menu_item_bitmap = 547d522f475Smrg XCreateBitmapFromData(XtDisplay(xtw), 548d522f475Smrg RootWindowOfScreen(XtScreen(xtw)), 549d522f475Smrg (char *) check_bits, check_width, check_height); 550d522f475Smrg } 551d522f475Smrg#if !OPT_TOOLBAR 552d522f475Smrg saveLocale = setMenuLocale(True, resource.menuLocale); 553d522f475Smrg list->w = XtCreatePopupShell(data->internal_name, 554d522f475Smrg simpleMenuWidgetClass, 555d522f475Smrg toplevel, 556d522f475Smrg NULL, 0); 557d522f475Smrg#endif 558d522f475Smrg if (list->w != 0) { 559d522f475Smrg list->entries = nentries; 560d522f475Smrg 561d522f475Smrg for (; nentries > 0; nentries--, entries++) { 562d522f475Smrg cb[0].callback = (XtCallbackProc) entries->function; 563d522f475Smrg cb[0].closure = (caddr_t) entries->name; 564d522f475Smrg entries->widget = XtCreateManagedWidget(entries->name, 565d522f475Smrg (entries->function 566d522f475Smrg ? smeBSBObjectClass 567d522f475Smrg : smeLineObjectClass), 568d522f475Smrg list->w, 569d522f475Smrg &arg, (Cardinal) 1); 570d522f475Smrg } 571d522f475Smrg } 572d522f475Smrg#if !OPT_TOOLBAR 573d522f475Smrg (void) setMenuLocale(False, saveLocale); 574d522f475Smrg#endif 575d522f475Smrg 576d522f475Smrg /* do not realize at this point */ 577d522f475Smrg return list->w; 578d522f475Smrg} 579d522f475Smrg 580d522f475Smrgstatic MenuIndex 581d522f475SmrgindexOfMenu(String menuName) 582d522f475Smrg{ 583d522f475Smrg MenuIndex me; 584d522f475Smrg switch (*menuName) { 585d522f475Smrg case 'm': 586d522f475Smrg me = mainMenu; 587d522f475Smrg break; 588d522f475Smrg case 'v': 589d522f475Smrg me = vtMenu; 590d522f475Smrg break; 591d522f475Smrg case 'f': 592d522f475Smrg me = fontMenu; 593d522f475Smrg break; 594d522f475Smrg#if OPT_TEK4014 595d522f475Smrg case 't': 596d522f475Smrg me = tekMenu; 597d522f475Smrg break; 598d522f475Smrg#endif 599d522f475Smrg default: 600d522f475Smrg me = noMenu; 601d522f475Smrg } 602d522f475Smrg return (me); 603d522f475Smrg} 604d522f475Smrg 605d522f475Smrg/* ARGSUSED */ 606d522f475Smrgstatic Bool 607d522f475Smrgdomenu(Widget w, 608d522f475Smrg XEvent * event GCC_UNUSED, 609d522f475Smrg String * params, /* mainMenu, vtMenu, or tekMenu */ 610d522f475Smrg Cardinal *param_count) /* 0 or 1 */ 611d522f475Smrg{ 61220d2c4d2Smrg XtermWidget xw = term; 61320d2c4d2Smrg TScreen *screen = TScreenOf(xw); 614d522f475Smrg MenuIndex me; 615d522f475Smrg Bool created = False; 616d522f475Smrg Widget mw; 617d522f475Smrg 618d522f475Smrg if (*param_count != 1) { 61920d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 620d522f475Smrg return False; 621d522f475Smrg } 622d522f475Smrg 623d522f475Smrg if ((me = indexOfMenu(params[0])) == noMenu) { 62420d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 625d522f475Smrg return False; 626d522f475Smrg } 627d522f475Smrg 628d522f475Smrg if ((mw = obtain_menu(w, me)) == 0 629d522f475Smrg || sizeof_menu(w, me) == 0) { 63020d2c4d2Smrg mw = create_menu(w, xw, me); 631d522f475Smrg created = (mw != 0); 632d522f475Smrg } 633d522f475Smrg if (mw == 0) 634d522f475Smrg return False; 635d522f475Smrg 636d522f475Smrg TRACE(("domenu(%s) %s\n", params[0], created ? "create" : "update")); 637d522f475Smrg switch (me) { 638d522f475Smrg case mainMenu: 639d522f475Smrg if (created) { 640d522f475Smrg update_toolbar(); 641a1f3da82Smrg update_fullscreen(); 642d522f475Smrg update_securekbd(); 643d522f475Smrg update_allowsends(); 644d522f475Smrg update_logging(); 645d522f475Smrg update_print_redir(); 646d522f475Smrg update_8bit_control(); 647d522f475Smrg update_decbkm(); 648d522f475Smrg update_num_lock(); 649d522f475Smrg update_alt_esc(); 650d522f475Smrg update_meta_esc(); 651d522f475Smrg update_delete_del(); 652d522f475Smrg update_keyboard_type(); 653d522f475Smrg#if OPT_NUM_LOCK 654d522f475Smrg if (!screen->alt_is_not_meta) { 655d522f475Smrg SetItemSensitivity(mainMenuEntries[mainMenu_alt_esc].widget, 656d522f475Smrg False); 657d522f475Smrg } 658d522f475Smrg#endif 65920d2c4d2Smrg if (!xtermHasPrinter(xw)) { 660d522f475Smrg SetItemSensitivity(mainMenuEntries[mainMenu_print].widget, 661d522f475Smrg False); 662d522f475Smrg SetItemSensitivity(mainMenuEntries[mainMenu_print_redir].widget, 663d522f475Smrg False); 664d522f475Smrg } 665d522f475Smrg if (screen->terminal_id < 200) { 666d522f475Smrg SetItemSensitivity( 667d522f475Smrg mainMenuEntries[mainMenu_8bit_ctrl].widget, 668d522f475Smrg False); 669d522f475Smrg } 670d522f475Smrg#if !defined(SIGTSTP) 671d522f475Smrg SetItemSensitivity( 672d522f475Smrg mainMenuEntries[mainMenu_suspend].widget, False); 673d522f475Smrg#endif 674d522f475Smrg#if !defined(SIGCONT) 675d522f475Smrg SetItemSensitivity( 676d522f475Smrg mainMenuEntries[mainMenu_continue].widget, False); 677d522f475Smrg#endif 678d522f475Smrg#ifdef ALLOWLOGGING 679d522f475Smrg if (screen->inhibit & I_LOG) { 680d522f475Smrg SetItemSensitivity( 681d522f475Smrg mainMenuEntries[mainMenu_logging].widget, False); 682d522f475Smrg } 683d522f475Smrg#endif 684d522f475Smrg if (screen->inhibit & I_SIGNAL) { 685d522f475Smrg int n; 686d522f475Smrg for (n = (int) mainMenu_suspend; n <= (int) mainMenu_quit; ++n) { 687d522f475Smrg SetItemSensitivity(mainMenuEntries[n].widget, False); 688d522f475Smrg } 689d522f475Smrg } 690d522f475Smrg } 691d522f475Smrg break; 692d522f475Smrg 693d522f475Smrg case vtMenu: 694d522f475Smrg if (created) { 695d522f475Smrg update_scrollbar(); 696d522f475Smrg update_jumpscroll(); 697d522f475Smrg update_reversevideo(); 698d522f475Smrg update_autowrap(); 699d522f475Smrg update_reversewrap(); 700d522f475Smrg update_autolinefeed(); 701d522f475Smrg update_appcursor(); 702d522f475Smrg update_appkeypad(); 703d522f475Smrg update_scrollkey(); 704d522f475Smrg update_scrollttyoutput(); 705d522f475Smrg update_allow132(); 706d522f475Smrg update_cursesemul(); 707d522f475Smrg update_keepSelection(); 708d522f475Smrg update_selectToClipboard(); 709d522f475Smrg update_visualbell(); 710d522f475Smrg update_poponbell(); 711d522f475Smrg update_bellIsUrgent(); 712d522f475Smrg update_cursorblink(); 713d522f475Smrg update_altscreen(); 714d522f475Smrg update_titeInhibit(); 715d522f475Smrg#ifndef NO_ACTIVE_ICON 716d522f475Smrg if (!screen->fnt_icon.fs || !screen->iconVwin.window) { 717d522f475Smrg SetItemSensitivity( 718d522f475Smrg vtMenuEntries[vtMenu_activeicon].widget, 719d522f475Smrg False); 720d522f475Smrg } else 721d522f475Smrg update_activeicon(); 722d522f475Smrg#endif /* NO_ACTIVE_ICON */ 723d522f475Smrg#if OPT_TEK4014 724d522f475Smrg if (screen->inhibit & I_TEK) { 725d522f475Smrg int n; 726d522f475Smrg for (n = (int) vtMenu_tekshow; n <= (int) vtMenu_vthide; ++n) { 727d522f475Smrg SetItemSensitivity(vtMenuEntries[n].widget, False); 728d522f475Smrg } 729d522f475Smrg } 730d522f475Smrg#endif 731d522f475Smrg } 732d522f475Smrg break; 733d522f475Smrg 734d522f475Smrg case fontMenu: 735d522f475Smrg if (created) { 736d522f475Smrg set_menu_font(True); 737d522f475Smrg SetItemSensitivity( 738d522f475Smrg fontMenuEntries[fontMenu_fontescape].widget, 739d522f475Smrg (screen->menu_font_names[fontMenu_fontescape][fNorm] 740d522f475Smrg ? True : False)); 741d522f475Smrg#if OPT_BOX_CHARS 742d522f475Smrg update_font_boxchars(); 743d522f475Smrg SetItemSensitivity( 744d522f475Smrg fontMenuEntries[fontMenu_font_boxchars].widget, 745d522f475Smrg True); 74620d2c4d2Smrg update_font_packed(); 74720d2c4d2Smrg SetItemSensitivity( 74820d2c4d2Smrg fontMenuEntries[fontMenu_font_packedfont].widget, 74920d2c4d2Smrg True); 750d522f475Smrg#endif 751d522f475Smrg#if OPT_DEC_SOFTFONT /* FIXME: not implemented */ 752d522f475Smrg update_font_loadable(); 753d522f475Smrg SetItemSensitivity( 754d522f475Smrg fontMenuEntries[fontMenu_font_loadable].widget, 755d522f475Smrg False); 756d522f475Smrg#endif 757d522f475Smrg#if OPT_DEC_CHRSET 758d522f475Smrg update_font_doublesize(); 75920d2c4d2Smrg if (TScreenOf(xw)->cache_doublesize == 0) 760d522f475Smrg SetItemSensitivity( 761d522f475Smrg fontMenuEntries[fontMenu_font_doublesize].widget, 762d522f475Smrg False); 763d522f475Smrg#endif 764d522f475Smrg#if OPT_RENDERFONT 765d522f475Smrg update_font_renderfont(); 766d522f475Smrg#endif 767d522f475Smrg#if OPT_WIDE_CHARS 768d522f475Smrg update_font_utf8_mode(); 769d522f475Smrg update_font_utf8_title(); 770956cc18dSsnj#endif 771956cc18dSsnj#if OPT_ALLOW_XXX_OPS 77220d2c4d2Smrg update_menu_allowColorOps(); 773956cc18dSsnj update_menu_allowFontOps(); 77420d2c4d2Smrg update_menu_allowTcapOps(); 775956cc18dSsnj update_menu_allowTitleOps(); 776956cc18dSsnj update_menu_allowWindowOps(); 777956cc18dSsnj enable_allow_xxx_ops(!(screen->allowSendEvents)); 778d522f475Smrg#endif 779d522f475Smrg } 78020d2c4d2Smrg FindFontSelection(xw, NULL, True); 781d522f475Smrg SetItemSensitivity( 782d522f475Smrg fontMenuEntries[fontMenu_fontsel].widget, 783d522f475Smrg (screen->menu_font_names[fontMenu_fontsel] 784d522f475Smrg ? True : False)); 785d522f475Smrg break; 786d522f475Smrg 787d522f475Smrg#if OPT_TEK4014 788d522f475Smrg case tekMenu: 789d522f475Smrg if (created && tekWidget) { 79020d2c4d2Smrg set_tekfont_menu_item(TekScreenOf(tekWidget)->cur.fontsize, True); 791d522f475Smrg update_vtshow(); 792d522f475Smrg } 793d522f475Smrg break; 794d522f475Smrg#endif 795d522f475Smrg case noMenu: 796d522f475Smrg default: 797d522f475Smrg break; 798d522f475Smrg } 799d522f475Smrg 800d522f475Smrg return True; 801d522f475Smrg} 802d522f475Smrg 803d522f475Smrg/* 804d522f475Smrg * public interfaces 805d522f475Smrg */ 806d522f475Smrg 807d522f475Smrgvoid 808d522f475SmrgHandleCreateMenu(Widget w, 809d522f475Smrg XEvent * event, 810d522f475Smrg String * params, /* mainMenu, vtMenu, or tekMenu */ 811d522f475Smrg Cardinal *param_count) /* 0 or 1 */ 812d522f475Smrg{ 813d522f475Smrg TRACE(("HandleCreateMenu\n")); 814d522f475Smrg (void) domenu(w, event, params, param_count); 815d522f475Smrg} 816d522f475Smrg 817d522f475Smrgvoid 818d522f475SmrgHandlePopupMenu(Widget w, 819d522f475Smrg XEvent * event, 820d522f475Smrg String * params, /* mainMenu, vtMenu, or tekMenu */ 821d522f475Smrg Cardinal *param_count) /* 0 or 1 */ 822d522f475Smrg{ 823d522f475Smrg TRACE(("HandlePopupMenu\n")); 824d522f475Smrg if (domenu(w, event, params, param_count)) { 825d522f475Smrg#if OPT_TOOLBAR 826d522f475Smrg w = select_menu(w, mainMenu)->w; 827d522f475Smrg#endif 828d522f475Smrg XtCallActionProc(w, "XawPositionSimpleMenu", event, params, 1); 829d522f475Smrg XtCallActionProc(w, "MenuPopup", event, params, 1); 830d522f475Smrg } 831d522f475Smrg} 832d522f475Smrg 833d522f475Smrg/* 834d522f475Smrg * private interfaces - keep out! 835d522f475Smrg */ 836d522f475Smrg 837d522f475Smrg/* ARGSUSED */ 838d522f475Smrgstatic void 839d522f475Smrghandle_send_signal(Widget gw GCC_UNUSED, int sig) 840d522f475Smrg{ 841d522f475Smrg#ifndef VMS 842d522f475Smrg TScreen *screen = TScreenOf(term); 843d522f475Smrg 844d522f475Smrg if (hold_screen > 1) 845d522f475Smrg hold_screen = 0; 846d522f475Smrg if (screen->pid > 1) 847d522f475Smrg kill_process_group(screen->pid, sig); 848d522f475Smrg#endif 849d522f475Smrg} 850d522f475Smrg 851a1f3da82Smrgstatic void 852a1f3da82SmrgUpdateMenuItem( 853a1f3da82Smrg#if OPT_TRACE 854a1f3da82Smrg const char *func, 855a1f3da82Smrg#endif 856a1f3da82Smrg MenuEntry * menu, 857a1f3da82Smrg int which, 858a1f3da82Smrg Bool val) 859a1f3da82Smrg{ 860a1f3da82Smrg static Arg menuArgs = 861a1f3da82Smrg {XtNleftBitmap, (XtArgVal) 0}; 862a1f3da82Smrg Widget mi = menu[which].widget; 863a1f3da82Smrg 864a1f3da82Smrg if (mi) { 865a1f3da82Smrg menuArgs.value = (XtArgVal) ((val) 866a1f3da82Smrg ? TScreenOf(term)->menu_item_bitmap 867a1f3da82Smrg : None); 868a1f3da82Smrg XtSetValues(mi, &menuArgs, (Cardinal) 1); 869a1f3da82Smrg } 870a1f3da82Smrg TRACE(("%s(%d): %s\n", func, which, BtoS(val))); 871a1f3da82Smrg} 872a1f3da82Smrg 873a1f3da82Smrgvoid 874a1f3da82SmrgSetItemSensitivity(Widget mi, Bool val) 875a1f3da82Smrg{ 876a1f3da82Smrg static Arg menuArgs = 877a1f3da82Smrg {XtNsensitive, (XtArgVal) 0}; 878a1f3da82Smrg 879a1f3da82Smrg if (mi) { 880a1f3da82Smrg menuArgs.value = (XtArgVal) (val); 881a1f3da82Smrg XtSetValues(mi, &menuArgs, (Cardinal) 1); 882a1f3da82Smrg } 883a1f3da82Smrg} 884a1f3da82Smrg 885d522f475Smrg/* 886d522f475Smrg * action routines 887d522f475Smrg */ 888d522f475Smrg 889a1f3da82Smrg#if OPT_MAXIMIZE 890a1f3da82Smrgstatic void 891a1f3da82Smrgdo_fullscreen(Widget gw GCC_UNUSED, 892a1f3da82Smrg XtPointer closure GCC_UNUSED, 893a1f3da82Smrg XtPointer data GCC_UNUSED) 894a1f3da82Smrg{ 895a1f3da82Smrg XtermWidget xw = term; 896a1f3da82Smrg TScreen *screen = TScreenOf(xw); 897a1f3da82Smrg 898a1f3da82Smrg if (resource.fullscreen != esNever) 899a1f3da82Smrg FullScreen(xw, !screen->fullscreen); 900a1f3da82Smrg} 901a1f3da82Smrg 902a1f3da82Smrg/* ARGSUSED */ 903a1f3da82Smrgvoid 904a1f3da82SmrgHandleFullscreen(Widget w, 905a1f3da82Smrg XEvent * event GCC_UNUSED, 906a1f3da82Smrg String * params GCC_UNUSED, 907a1f3da82Smrg Cardinal *param_count GCC_UNUSED) 908a1f3da82Smrg{ 909a1f3da82Smrg do_fullscreen(w, (XtPointer) 0, (XtPointer) 0); 910a1f3da82Smrg} 911a1f3da82Smrg 912a1f3da82Smrgvoid 913a1f3da82Smrgupdate_fullscreen(void) 914a1f3da82Smrg{ 915a1f3da82Smrg if (resource.fullscreen <= 1) { 916a1f3da82Smrg UpdateCheckbox("update_fullscreen", 917a1f3da82Smrg mainMenuEntries, 918a1f3da82Smrg mainMenu_fullscreen, 919a1f3da82Smrg TScreenOf(term)->fullscreen); 920a1f3da82Smrg } else { 921a1f3da82Smrg SetItemSensitivity(mainMenuEntries[mainMenu_fullscreen].widget, 922a1f3da82Smrg False); 923a1f3da82Smrg } 924a1f3da82Smrg} 925a1f3da82Smrg 926a1f3da82Smrg#endif /* OPT_MAXIMIZE */ 927a1f3da82Smrg 928d522f475Smrgstatic void 929d522f475Smrgdo_securekbd(Widget gw GCC_UNUSED, 930d522f475Smrg XtPointer closure GCC_UNUSED, 931d522f475Smrg XtPointer data GCC_UNUSED) 932d522f475Smrg{ 93320d2c4d2Smrg XtermWidget xw = term; 93420d2c4d2Smrg TScreen *screen = TScreenOf(xw); 935d522f475Smrg Time now = CurrentTime; /* XXX - wrong */ 936d522f475Smrg 937d522f475Smrg if (screen->grabbedKbd) { 938d522f475Smrg XUngrabKeyboard(screen->display, now); 93920d2c4d2Smrg ReverseVideo(xw); 940d522f475Smrg screen->grabbedKbd = False; 941d522f475Smrg } else { 942d522f475Smrg if (XGrabKeyboard(screen->display, XtWindow(CURRENT_EMU()), 943d522f475Smrg True, GrabModeAsync, GrabModeAsync, now) 944d522f475Smrg != GrabSuccess) { 94520d2c4d2Smrg Bell(xw, XkbBI_MinorError, 100); 946d522f475Smrg } else { 94720d2c4d2Smrg ReverseVideo(xw); 948d522f475Smrg screen->grabbedKbd = True; 949d522f475Smrg } 950d522f475Smrg } 951d522f475Smrg update_securekbd(); 952d522f475Smrg} 953d522f475Smrg 954d522f475Smrg/* ARGSUSED */ 955d522f475Smrgvoid 956d522f475SmrgHandleSecure(Widget w GCC_UNUSED, 957d522f475Smrg XEvent * event GCC_UNUSED, /* unused */ 958d522f475Smrg String * params GCC_UNUSED, /* [0] = volume */ 959d522f475Smrg Cardinal *param_count GCC_UNUSED) /* 0 or 1 */ 960d522f475Smrg{ 961d522f475Smrg#if 0 962d522f475Smrg Time ev_time = CurrentTime; 963d522f475Smrg 964d522f475Smrg if ((event->xany.type == KeyPress) || 965d522f475Smrg (event->xany.type == KeyRelease)) 966d522f475Smrg ev_time = event->xkey.time; 967d522f475Smrg else if ((event->xany.type == ButtonPress) || 968d522f475Smrg (event->xany.type == ButtonRelease)) 969d522f475Smrg ev_time = event->xbutton.time; 970d522f475Smrg#endif 971d522f475Smrg do_securekbd(vt_shell[mainMenu].w, (XtPointer) 0, (XtPointer) 0); 972d522f475Smrg} 973d522f475Smrg 974d522f475Smrgstatic void 975d522f475Smrgdo_allowsends(Widget gw GCC_UNUSED, 976d522f475Smrg XtPointer closure GCC_UNUSED, 977d522f475Smrg XtPointer data GCC_UNUSED) 978d522f475Smrg{ 979d522f475Smrg TScreen *screen = TScreenOf(term); 980d522f475Smrg 981956cc18dSsnj ToggleFlag(screen->allowSendEvents); 982d522f475Smrg update_allowsends(); 983956cc18dSsnj#if OPT_ALLOW_XXX_OPS 984956cc18dSsnj enable_allow_xxx_ops(!(screen->allowSendEvents)); 985956cc18dSsnj#endif 986d522f475Smrg} 987d522f475Smrg 988d522f475Smrgstatic void 989d522f475Smrgdo_visualbell(Widget gw GCC_UNUSED, 990d522f475Smrg XtPointer closure GCC_UNUSED, 991d522f475Smrg XtPointer data GCC_UNUSED) 992d522f475Smrg{ 993d522f475Smrg TScreen *screen = TScreenOf(term); 994d522f475Smrg 995956cc18dSsnj ToggleFlag(screen->visualbell); 996d522f475Smrg update_visualbell(); 997d522f475Smrg} 998d522f475Smrg 999d522f475Smrgstatic void 1000d522f475Smrgdo_bellIsUrgent(Widget gw GCC_UNUSED, 1001d522f475Smrg XtPointer closure GCC_UNUSED, 1002d522f475Smrg XtPointer data GCC_UNUSED) 1003d522f475Smrg{ 1004d522f475Smrg TScreen *screen = TScreenOf(term); 1005d522f475Smrg 1006956cc18dSsnj ToggleFlag(screen->bellIsUrgent); 1007d522f475Smrg update_bellIsUrgent(); 1008d522f475Smrg} 1009d522f475Smrg 1010d522f475Smrgstatic void 1011d522f475Smrgdo_poponbell(Widget gw GCC_UNUSED, 1012d522f475Smrg XtPointer closure GCC_UNUSED, 1013d522f475Smrg XtPointer data GCC_UNUSED) 1014d522f475Smrg{ 1015d522f475Smrg TScreen *screen = TScreenOf(term); 1016d522f475Smrg 1017956cc18dSsnj ToggleFlag(screen->poponbell); 1018d522f475Smrg update_poponbell(); 1019d522f475Smrg} 1020d522f475Smrg 1021d522f475Smrg#ifdef ALLOWLOGGING 1022d522f475Smrgstatic void 1023d522f475Smrgdo_logging(Widget gw GCC_UNUSED, 1024d522f475Smrg XtPointer closure GCC_UNUSED, 1025d522f475Smrg XtPointer data GCC_UNUSED) 1026d522f475Smrg{ 102720d2c4d2Smrg XtermWidget xw = term; 102820d2c4d2Smrg TScreen *screen = TScreenOf(xw); 1029d522f475Smrg 1030d522f475Smrg if (screen->logging) { 103120d2c4d2Smrg CloseLog(xw); 1032d522f475Smrg } else { 103320d2c4d2Smrg StartLog(xw); 1034d522f475Smrg } 1035d522f475Smrg /* update_logging done by CloseLog and StartLog */ 1036d522f475Smrg} 1037d522f475Smrg#endif 1038d522f475Smrg 1039d522f475Smrgstatic void 1040d522f475Smrgdo_print(Widget gw GCC_UNUSED, 1041d522f475Smrg XtPointer closure GCC_UNUSED, 1042d522f475Smrg XtPointer data GCC_UNUSED) 1043d522f475Smrg{ 104420d2c4d2Smrg xtermPrintScreen(term, True, getPrinterFlags(term, NULL, 0)); 1045d522f475Smrg} 1046d522f475Smrg 1047d522f475Smrgstatic void 1048d522f475Smrgdo_print_redir(Widget gw GCC_UNUSED, 1049d522f475Smrg XtPointer closure GCC_UNUSED, 1050d522f475Smrg XtPointer data GCC_UNUSED) 1051d522f475Smrg{ 105220d2c4d2Smrg setPrinterControlMode(term, TScreenOf(term)->printer_controlmode ? 0 : 2); 1053d522f475Smrg} 1054d522f475Smrg 1055d522f475Smrgstatic void 1056d522f475Smrgdo_redraw(Widget gw GCC_UNUSED, 1057d522f475Smrg XtPointer closure GCC_UNUSED, 1058d522f475Smrg XtPointer data GCC_UNUSED) 1059d522f475Smrg{ 1060d522f475Smrg Redraw(); 1061d522f475Smrg} 1062d522f475Smrg 1063d522f475Smrgvoid 1064d522f475Smrgshow_8bit_control(Bool value) 1065d522f475Smrg{ 106620d2c4d2Smrg if (TScreenOf(term)->control_eight_bits != value) { 106720d2c4d2Smrg TScreenOf(term)->control_eight_bits = (Boolean) value; 1068d522f475Smrg update_8bit_control(); 1069d522f475Smrg } 1070d522f475Smrg} 1071d522f475Smrg 1072d522f475Smrgstatic void 1073d522f475Smrgdo_8bit_control(Widget gw GCC_UNUSED, 1074d522f475Smrg XtPointer closure GCC_UNUSED, 1075d522f475Smrg XtPointer data GCC_UNUSED) 1076d522f475Smrg{ 107720d2c4d2Smrg show_8bit_control(!TScreenOf(term)->control_eight_bits); 1078d522f475Smrg} 1079d522f475Smrg 1080d522f475Smrgstatic void 1081d522f475Smrgdo_backarrow(Widget gw GCC_UNUSED, 1082d522f475Smrg XtPointer closure GCC_UNUSED, 1083d522f475Smrg XtPointer data GCC_UNUSED) 1084d522f475Smrg{ 1085d522f475Smrg term->keyboard.flags ^= MODE_DECBKM; 1086d522f475Smrg update_decbkm(); 1087d522f475Smrg} 1088d522f475Smrg 1089d522f475Smrg#if OPT_NUM_LOCK 1090d522f475Smrgstatic void 1091d522f475Smrgdo_num_lock(Widget gw GCC_UNUSED, 1092d522f475Smrg XtPointer closure GCC_UNUSED, 1093d522f475Smrg XtPointer data GCC_UNUSED) 1094d522f475Smrg{ 1095956cc18dSsnj ToggleFlag(term->misc.real_NumLock); 1096d522f475Smrg update_num_lock(); 1097d522f475Smrg} 1098d522f475Smrg 1099d522f475Smrgstatic void 1100d522f475Smrgdo_alt_esc(Widget gw GCC_UNUSED, 1101d522f475Smrg XtPointer closure GCC_UNUSED, 1102d522f475Smrg XtPointer data GCC_UNUSED) 1103d522f475Smrg{ 110420d2c4d2Smrg ToggleFlag(TScreenOf(term)->alt_sends_esc); 1105d522f475Smrg update_alt_esc(); 1106d522f475Smrg} 1107d522f475Smrg 1108d522f475Smrgstatic void 1109d522f475Smrgdo_meta_esc(Widget gw GCC_UNUSED, 1110d522f475Smrg XtPointer closure GCC_UNUSED, 1111d522f475Smrg XtPointer data GCC_UNUSED) 1112d522f475Smrg{ 111320d2c4d2Smrg ToggleFlag(TScreenOf(term)->meta_sends_esc); 1114d522f475Smrg update_meta_esc(); 1115d522f475Smrg} 1116d522f475Smrg#endif 1117d522f475Smrg 1118d522f475Smrgstatic void 1119d522f475Smrgdo_delete_del(Widget gw GCC_UNUSED, 1120d522f475Smrg XtPointer closure GCC_UNUSED, 1121d522f475Smrg XtPointer data GCC_UNUSED) 1122d522f475Smrg{ 1123d522f475Smrg if (xtermDeleteIsDEL(term)) 112420d2c4d2Smrg TScreenOf(term)->delete_is_del = False; 1125d522f475Smrg else 112620d2c4d2Smrg TScreenOf(term)->delete_is_del = True; 1127d522f475Smrg update_delete_del(); 1128d522f475Smrg} 1129d522f475Smrg 1130d522f475Smrgstatic void 1131d522f475Smrgdo_old_fkeys(Widget gw GCC_UNUSED, 1132d522f475Smrg XtPointer closure GCC_UNUSED, 1133d522f475Smrg XtPointer data GCC_UNUSED) 1134d522f475Smrg{ 1135d522f475Smrg toggle_keyboard_type(term, keyboardIsLegacy); 1136d522f475Smrg} 1137d522f475Smrg 1138d522f475Smrg#if OPT_HP_FUNC_KEYS 1139d522f475Smrgstatic void 1140d522f475Smrgdo_hp_fkeys(Widget gw GCC_UNUSED, 1141d522f475Smrg XtPointer closure GCC_UNUSED, 1142d522f475Smrg XtPointer data GCC_UNUSED) 1143d522f475Smrg{ 1144d522f475Smrg toggle_keyboard_type(term, keyboardIsHP); 1145d522f475Smrg} 1146d522f475Smrg#endif 1147d522f475Smrg 1148d522f475Smrg#if OPT_SCO_FUNC_KEYS 1149d522f475Smrgstatic void 1150d522f475Smrgdo_sco_fkeys(Widget gw GCC_UNUSED, 1151d522f475Smrg XtPointer closure GCC_UNUSED, 1152d522f475Smrg XtPointer data GCC_UNUSED) 1153d522f475Smrg{ 1154d522f475Smrg toggle_keyboard_type(term, keyboardIsSCO); 1155d522f475Smrg} 1156d522f475Smrg#endif 1157d522f475Smrg 1158d522f475Smrg#if OPT_SUN_FUNC_KEYS 1159d522f475Smrgstatic void 1160d522f475Smrgdo_sun_fkeys(Widget gw GCC_UNUSED, 1161d522f475Smrg XtPointer closure GCC_UNUSED, 1162d522f475Smrg XtPointer data GCC_UNUSED) 1163d522f475Smrg{ 1164d522f475Smrg toggle_keyboard_type(term, keyboardIsSun); 1165d522f475Smrg} 1166d522f475Smrg#endif 1167d522f475Smrg 1168d522f475Smrg#if OPT_SUNPC_KBD 1169d522f475Smrg/* 1170d522f475Smrg * This really means "Sun/PC keyboard emulating VT220". 1171d522f475Smrg */ 1172d522f475Smrgstatic void 1173d522f475Smrgdo_sun_kbd(Widget gw GCC_UNUSED, 1174d522f475Smrg XtPointer closure GCC_UNUSED, 1175d522f475Smrg XtPointer data GCC_UNUSED) 1176d522f475Smrg{ 1177d522f475Smrg toggle_keyboard_type(term, keyboardIsVT220); 1178d522f475Smrg} 1179d522f475Smrg#endif 1180d522f475Smrg 1181d522f475Smrg#if OPT_TCAP_FKEYS 1182d522f475Smrgstatic void 1183d522f475Smrgdo_tcap_fkeys(Widget gw GCC_UNUSED, 1184d522f475Smrg XtPointer closure GCC_UNUSED, 1185d522f475Smrg XtPointer data GCC_UNUSED) 1186d522f475Smrg{ 1187d522f475Smrg toggle_keyboard_type(term, keyboardIsTermcap); 1188d522f475Smrg} 1189d522f475Smrg#endif 1190d522f475Smrg 1191d522f475Smrg/* 1192d522f475Smrg * The following cases use the pid instead of the process group so that we 1193d522f475Smrg * don't get hosed by programs that change their process group 1194d522f475Smrg */ 1195d522f475Smrg 1196d522f475Smrg/* ARGSUSED */ 1197d522f475Smrgstatic void 1198d522f475Smrgdo_suspend(Widget gw, 1199d522f475Smrg XtPointer closure GCC_UNUSED, 1200d522f475Smrg XtPointer data GCC_UNUSED) 1201d522f475Smrg{ 1202d522f475Smrg#if defined(SIGTSTP) 1203d522f475Smrg handle_send_signal(gw, SIGTSTP); 1204d522f475Smrg#endif 1205d522f475Smrg} 1206d522f475Smrg 1207d522f475Smrg/* ARGSUSED */ 1208d522f475Smrgstatic void 1209d522f475Smrgdo_continue(Widget gw, 1210d522f475Smrg XtPointer closure GCC_UNUSED, 1211d522f475Smrg XtPointer data GCC_UNUSED) 1212d522f475Smrg{ 1213d522f475Smrg#if defined(SIGCONT) 1214d522f475Smrg handle_send_signal(gw, SIGCONT); 1215d522f475Smrg#endif 1216d522f475Smrg} 1217d522f475Smrg 1218d522f475Smrg/* ARGSUSED */ 1219d522f475Smrgstatic void 1220d522f475Smrgdo_interrupt(Widget gw, 1221d522f475Smrg XtPointer closure GCC_UNUSED, 1222d522f475Smrg XtPointer data GCC_UNUSED) 1223d522f475Smrg{ 1224d522f475Smrg handle_send_signal(gw, SIGINT); 1225d522f475Smrg} 1226d522f475Smrg 1227d522f475Smrg/* ARGSUSED */ 1228d522f475Smrgvoid 1229d522f475Smrgdo_hangup(Widget gw, 1230d522f475Smrg XtPointer closure GCC_UNUSED, 1231d522f475Smrg XtPointer data GCC_UNUSED) 1232d522f475Smrg{ 1233d522f475Smrg handle_send_signal(gw, SIGHUP); 1234d522f475Smrg} 1235d522f475Smrg 1236d522f475Smrg/* ARGSUSED */ 1237d522f475Smrgstatic void 1238d522f475Smrgdo_terminate(Widget gw, 1239d522f475Smrg XtPointer closure GCC_UNUSED, 1240d522f475Smrg XtPointer data GCC_UNUSED) 1241d522f475Smrg{ 1242d522f475Smrg handle_send_signal(gw, SIGTERM); 1243d522f475Smrg} 1244d522f475Smrg 1245d522f475Smrg/* ARGSUSED */ 1246d522f475Smrgstatic void 1247d522f475Smrgdo_kill(Widget gw, 1248d522f475Smrg XtPointer closure GCC_UNUSED, 1249d522f475Smrg XtPointer data GCC_UNUSED) 1250d522f475Smrg{ 1251d522f475Smrg handle_send_signal(gw, SIGKILL); 1252d522f475Smrg} 1253d522f475Smrg 1254d522f475Smrgstatic void 1255d522f475Smrgdo_quit(Widget gw GCC_UNUSED, 1256d522f475Smrg XtPointer closure GCC_UNUSED, 1257d522f475Smrg XtPointer data GCC_UNUSED) 1258d522f475Smrg{ 1259d522f475Smrg Cleanup(SIGHUP); 1260d522f475Smrg} 1261d522f475Smrg 1262d522f475Smrg/* 1263d522f475Smrg * vt menu callbacks 1264d522f475Smrg */ 1265d522f475Smrg 1266d522f475Smrgstatic void 1267d522f475Smrgdo_scrollbar(Widget gw GCC_UNUSED, 1268d522f475Smrg XtPointer closure GCC_UNUSED, 1269d522f475Smrg XtPointer data GCC_UNUSED) 1270d522f475Smrg{ 1271d522f475Smrg ToggleScrollBar(term); 1272d522f475Smrg} 1273d522f475Smrg 1274d522f475Smrgstatic void 1275d522f475Smrgdo_jumpscroll(Widget gw GCC_UNUSED, 1276d522f475Smrg XtPointer closure GCC_UNUSED, 1277d522f475Smrg XtPointer data GCC_UNUSED) 1278d522f475Smrg{ 1279d522f475Smrg TScreen *screen = TScreenOf(term); 1280d522f475Smrg 1281d522f475Smrg term->flags ^= SMOOTHSCROLL; 1282d522f475Smrg if (term->flags & SMOOTHSCROLL) { 1283d522f475Smrg screen->jumpscroll = False; 1284d522f475Smrg if (screen->scroll_amt) 1285d522f475Smrg FlushScroll(term); 1286d522f475Smrg } else { 1287d522f475Smrg screen->jumpscroll = True; 1288d522f475Smrg } 1289d522f475Smrg update_jumpscroll(); 1290d522f475Smrg} 1291d522f475Smrg 1292d522f475Smrgstatic void 1293d522f475Smrgdo_reversevideo(Widget gw GCC_UNUSED, 1294d522f475Smrg XtPointer closure GCC_UNUSED, 1295d522f475Smrg XtPointer data GCC_UNUSED) 1296d522f475Smrg{ 1297d522f475Smrg ReverseVideo(term); 1298d522f475Smrg} 1299d522f475Smrg 1300d522f475Smrgstatic void 1301d522f475Smrgdo_autowrap(Widget gw GCC_UNUSED, 1302d522f475Smrg XtPointer closure GCC_UNUSED, 1303d522f475Smrg XtPointer data GCC_UNUSED) 1304d522f475Smrg{ 1305d522f475Smrg term->flags ^= WRAPAROUND; 1306d522f475Smrg update_autowrap(); 1307d522f475Smrg} 1308d522f475Smrg 1309d522f475Smrgstatic void 1310d522f475Smrgdo_reversewrap(Widget gw GCC_UNUSED, 1311d522f475Smrg XtPointer closure GCC_UNUSED, 1312d522f475Smrg XtPointer data GCC_UNUSED) 1313d522f475Smrg{ 1314d522f475Smrg term->flags ^= REVERSEWRAP; 1315d522f475Smrg update_reversewrap(); 1316d522f475Smrg} 1317d522f475Smrg 1318d522f475Smrgstatic void 1319d522f475Smrgdo_autolinefeed(Widget gw GCC_UNUSED, 1320d522f475Smrg XtPointer closure GCC_UNUSED, 1321d522f475Smrg XtPointer data GCC_UNUSED) 1322d522f475Smrg{ 1323d522f475Smrg term->flags ^= LINEFEED; 1324d522f475Smrg update_autolinefeed(); 1325d522f475Smrg} 1326d522f475Smrg 1327d522f475Smrgstatic void 1328d522f475Smrgdo_appcursor(Widget gw GCC_UNUSED, 1329d522f475Smrg XtPointer closure GCC_UNUSED, 1330d522f475Smrg XtPointer data GCC_UNUSED) 1331d522f475Smrg{ 1332d522f475Smrg term->keyboard.flags ^= MODE_DECCKM; 1333d522f475Smrg update_appcursor(); 1334d522f475Smrg} 1335d522f475Smrg 1336d522f475Smrgstatic void 1337d522f475Smrgdo_appkeypad(Widget gw GCC_UNUSED, 1338d522f475Smrg XtPointer closure GCC_UNUSED, 1339d522f475Smrg XtPointer data GCC_UNUSED) 1340d522f475Smrg{ 1341d522f475Smrg term->keyboard.flags ^= MODE_DECKPAM; 1342d522f475Smrg update_appkeypad(); 1343d522f475Smrg} 1344d522f475Smrg 1345d522f475Smrgstatic void 1346d522f475Smrgdo_scrollkey(Widget gw GCC_UNUSED, 1347d522f475Smrg XtPointer closure GCC_UNUSED, 1348d522f475Smrg XtPointer data GCC_UNUSED) 1349d522f475Smrg{ 1350d522f475Smrg TScreen *screen = TScreenOf(term); 1351d522f475Smrg 1352956cc18dSsnj ToggleFlag(screen->scrollkey); 1353d522f475Smrg update_scrollkey(); 1354d522f475Smrg} 1355d522f475Smrg 1356d522f475Smrgstatic void 1357d522f475Smrgdo_scrollttyoutput(Widget gw GCC_UNUSED, 1358d522f475Smrg XtPointer closure GCC_UNUSED, 1359d522f475Smrg XtPointer data GCC_UNUSED) 1360d522f475Smrg{ 1361d522f475Smrg TScreen *screen = TScreenOf(term); 1362d522f475Smrg 1363956cc18dSsnj ToggleFlag(screen->scrollttyoutput); 1364d522f475Smrg update_scrollttyoutput(); 1365d522f475Smrg} 1366d522f475Smrg 1367d522f475Smrgstatic void 1368d522f475Smrgdo_keepSelection(Widget gw GCC_UNUSED, 1369d522f475Smrg XtPointer closure GCC_UNUSED, 1370d522f475Smrg XtPointer data GCC_UNUSED) 1371d522f475Smrg{ 1372d522f475Smrg TScreen *screen = TScreenOf(term); 1373d522f475Smrg 1374956cc18dSsnj ToggleFlag(screen->keepSelection); 1375d522f475Smrg update_keepSelection(); 1376d522f475Smrg} 1377d522f475Smrg 1378d522f475Smrgstatic void 1379d522f475Smrgdo_selectClipboard(Widget gw GCC_UNUSED, 1380d522f475Smrg XtPointer closure GCC_UNUSED, 1381d522f475Smrg XtPointer data GCC_UNUSED) 1382d522f475Smrg{ 1383d522f475Smrg TScreen *screen = TScreenOf(term); 1384d522f475Smrg 1385956cc18dSsnj ToggleFlag(screen->selectToClipboard); 1386d522f475Smrg update_selectToClipboard(); 1387d522f475Smrg} 1388d522f475Smrg 1389d522f475Smrgstatic void 1390d522f475Smrgdo_allow132(Widget gw GCC_UNUSED, 1391d522f475Smrg XtPointer closure GCC_UNUSED, 1392d522f475Smrg XtPointer data GCC_UNUSED) 1393d522f475Smrg{ 1394d522f475Smrg TScreen *screen = TScreenOf(term); 1395d522f475Smrg 1396956cc18dSsnj ToggleFlag(screen->c132); 1397d522f475Smrg update_allow132(); 1398d522f475Smrg} 1399d522f475Smrg 1400d522f475Smrgstatic void 1401d522f475Smrgdo_cursesemul(Widget gw GCC_UNUSED, 1402d522f475Smrg XtPointer closure GCC_UNUSED, 1403d522f475Smrg XtPointer data GCC_UNUSED) 1404d522f475Smrg{ 1405d522f475Smrg TScreen *screen = TScreenOf(term); 1406d522f475Smrg 1407956cc18dSsnj ToggleFlag(screen->curses); 1408d522f475Smrg update_cursesemul(); 1409d522f475Smrg} 1410d522f475Smrg 1411d522f475Smrgstatic void 1412d522f475Smrgdo_marginbell(Widget gw GCC_UNUSED, 1413d522f475Smrg XtPointer closure GCC_UNUSED, 1414d522f475Smrg XtPointer data GCC_UNUSED) 1415d522f475Smrg{ 1416d522f475Smrg TScreen *screen = TScreenOf(term); 1417d522f475Smrg 1418a1f3da82Smrg if ((ToggleFlag(screen->marginbell)) == 0) 141920d2c4d2Smrg screen->bellArmed = -1; 1420d522f475Smrg update_marginbell(); 1421d522f475Smrg} 1422d522f475Smrg 1423d522f475Smrg#if OPT_TEK4014 1424d522f475Smrgstatic void 1425d522f475Smrghandle_tekshow(Widget gw GCC_UNUSED, Bool allowswitch) 1426d522f475Smrg{ 142720d2c4d2Smrg XtermWidget xw = term; 142820d2c4d2Smrg TScreen *screen = TScreenOf(xw); 1429d522f475Smrg 1430d522f475Smrg TRACE(("Show tek-window\n")); 143120d2c4d2Smrg if (!TEK4014_SHOWN(xw)) { /* not showing, turn on */ 1432d522f475Smrg set_tek_visibility(True); 1433d522f475Smrg } else if (screen->Vshow || allowswitch) { /* is showing, turn off */ 1434d522f475Smrg set_tek_visibility(False); 1435d522f475Smrg end_tek_mode(); /* WARNING: this does a longjmp */ 1436d522f475Smrg } else 143720d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 1438d522f475Smrg} 1439d522f475Smrg 1440d522f475Smrg/* ARGSUSED */ 1441d522f475Smrgstatic void 1442d522f475Smrgdo_tekshow(Widget gw, 1443d522f475Smrg XtPointer closure GCC_UNUSED, 1444d522f475Smrg XtPointer data GCC_UNUSED) 1445d522f475Smrg{ 1446d522f475Smrg handle_tekshow(gw, True); 1447d522f475Smrg} 1448d522f475Smrg 1449d522f475Smrg/* ARGSUSED */ 1450d522f475Smrgstatic void 1451d522f475Smrgdo_tekonoff(Widget gw, 1452d522f475Smrg XtPointer closure GCC_UNUSED, 1453d522f475Smrg XtPointer data GCC_UNUSED) 1454d522f475Smrg{ 1455d522f475Smrg handle_tekshow(gw, False); 1456d522f475Smrg} 1457d522f475Smrg#endif /* OPT_TEK4014 */ 1458d522f475Smrg 1459d522f475Smrg#if OPT_BLINK_CURS 1460d522f475Smrg/* ARGSUSED */ 1461d522f475Smrgstatic void 1462d522f475Smrgdo_cursorblink(Widget gw GCC_UNUSED, 1463d522f475Smrg XtPointer closure GCC_UNUSED, 1464d522f475Smrg XtPointer data GCC_UNUSED) 1465d522f475Smrg{ 1466d522f475Smrg TScreen *screen = TScreenOf(term); 1467d522f475Smrg ToggleCursorBlink(screen); 1468d522f475Smrg} 1469d522f475Smrg#endif 1470d522f475Smrg 1471d522f475Smrg/* ARGSUSED */ 1472d522f475Smrgstatic void 1473d522f475Smrgdo_altscreen(Widget gw GCC_UNUSED, 1474d522f475Smrg XtPointer closure GCC_UNUSED, 1475d522f475Smrg XtPointer data GCC_UNUSED) 1476d522f475Smrg{ 1477d522f475Smrg ToggleAlternate(term); 1478d522f475Smrg} 1479d522f475Smrg 1480d522f475Smrg/* ARGSUSED */ 1481d522f475Smrgstatic void 1482d522f475Smrgdo_titeInhibit(Widget gw GCC_UNUSED, 1483d522f475Smrg XtPointer closure GCC_UNUSED, 1484d522f475Smrg XtPointer data GCC_UNUSED) 1485d522f475Smrg{ 1486956cc18dSsnj ToggleFlag(term->misc.titeInhibit); 1487d522f475Smrg update_titeInhibit(); 1488d522f475Smrg} 1489d522f475Smrg 1490d522f475Smrg#ifndef NO_ACTIVE_ICON 1491d522f475Smrg/* ARGSUSED */ 1492d522f475Smrgstatic void 1493d522f475Smrgdo_activeicon(Widget gw GCC_UNUSED, 1494d522f475Smrg XtPointer closure GCC_UNUSED, 1495d522f475Smrg XtPointer data GCC_UNUSED) 1496d522f475Smrg{ 1497d522f475Smrg TScreen *screen = TScreenOf(term); 1498d522f475Smrg 1499d522f475Smrg if (screen->iconVwin.window) { 1500d522f475Smrg Widget shell = XtParent(term); 1501956cc18dSsnj ToggleFlag(term->misc.active_icon); 1502d522f475Smrg XtVaSetValues(shell, XtNiconWindow, 1503d522f475Smrg term->misc.active_icon ? screen->iconVwin.window : None, 1504d522f475Smrg (XtPointer) 0); 1505d522f475Smrg update_activeicon(); 1506d522f475Smrg } 1507d522f475Smrg} 1508d522f475Smrg#endif /* NO_ACTIVE_ICON */ 1509d522f475Smrg 1510d522f475Smrgstatic void 1511d522f475Smrgdo_softreset(Widget gw GCC_UNUSED, 1512d522f475Smrg XtPointer closure GCC_UNUSED, 1513d522f475Smrg XtPointer data GCC_UNUSED) 1514d522f475Smrg{ 1515d522f475Smrg VTReset(term, False, False); 1516d522f475Smrg} 1517d522f475Smrg 1518d522f475Smrgstatic void 1519d522f475Smrgdo_hardreset(Widget gw GCC_UNUSED, 1520d522f475Smrg XtPointer closure GCC_UNUSED, 1521d522f475Smrg XtPointer data GCC_UNUSED) 1522d522f475Smrg{ 1523d522f475Smrg VTReset(term, True, False); 1524d522f475Smrg} 1525d522f475Smrg 1526d522f475Smrgstatic void 1527d522f475Smrgdo_clearsavedlines(Widget gw GCC_UNUSED, 1528d522f475Smrg XtPointer closure GCC_UNUSED, 1529d522f475Smrg XtPointer data GCC_UNUSED) 1530d522f475Smrg{ 1531d522f475Smrg VTReset(term, True, True); 1532d522f475Smrg} 1533d522f475Smrg 1534d522f475Smrg#if OPT_TEK4014 1535d522f475Smrgstatic void 1536d522f475Smrgdo_tekmode(Widget gw GCC_UNUSED, 1537d522f475Smrg XtPointer closure GCC_UNUSED, 1538d522f475Smrg XtPointer data GCC_UNUSED) 1539d522f475Smrg{ 1540d522f475Smrg switch_modes(TEK4014_ACTIVE(term)); /* switch to tek mode */ 1541d522f475Smrg} 1542d522f475Smrg 1543d522f475Smrg/* ARGSUSED */ 1544d522f475Smrgstatic void 1545d522f475Smrgdo_vthide(Widget gw GCC_UNUSED, 1546d522f475Smrg XtPointer closure GCC_UNUSED, 1547d522f475Smrg XtPointer data GCC_UNUSED) 1548d522f475Smrg{ 1549d522f475Smrg hide_vt_window(); 1550d522f475Smrg} 1551d522f475Smrg#endif /* OPT_TEK4014 */ 1552d522f475Smrg 1553d522f475Smrg/* 1554d522f475Smrg * vtfont menu 1555d522f475Smrg */ 1556d522f475Smrg 1557d522f475Smrgstatic void 1558d522f475Smrgdo_vtfont(Widget gw GCC_UNUSED, 1559d522f475Smrg XtPointer closure, 1560d522f475Smrg XtPointer data GCC_UNUSED) 1561d522f475Smrg{ 156220d2c4d2Smrg XtermWidget xw = term; 1563d522f475Smrg char *entryname = (char *) closure; 1564d522f475Smrg int i; 1565d522f475Smrg 1566d522f475Smrg for (i = 0; i < NMENUFONTS; i++) { 1567d522f475Smrg if (strcmp(entryname, fontMenuEntries[i].name) == 0) { 156820d2c4d2Smrg SetVTFont(xw, i, True, NULL); 1569d522f475Smrg return; 1570d522f475Smrg } 1571d522f475Smrg } 157220d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 1573d522f475Smrg} 1574d522f475Smrg 1575d522f475Smrg#if OPT_DEC_CHRSET 1576d522f475Smrgstatic void 1577d522f475Smrgdo_font_doublesize(Widget gw GCC_UNUSED, 1578d522f475Smrg XtPointer closure GCC_UNUSED, 1579d522f475Smrg XtPointer data GCC_UNUSED) 1580d522f475Smrg{ 158120d2c4d2Smrg XtermWidget xw = term; 158220d2c4d2Smrg 158320d2c4d2Smrg if (TScreenOf(xw)->cache_doublesize != 0) 158420d2c4d2Smrg ToggleFlag(TScreenOf(xw)->font_doublesize); 1585d522f475Smrg update_font_doublesize(); 1586d522f475Smrg Redraw(); 1587d522f475Smrg} 1588d522f475Smrg#endif 1589d522f475Smrg 1590d522f475Smrg#if OPT_BOX_CHARS 1591d522f475Smrgstatic void 1592d522f475Smrgdo_font_boxchars(Widget gw GCC_UNUSED, 1593d522f475Smrg XtPointer closure GCC_UNUSED, 1594d522f475Smrg XtPointer data GCC_UNUSED) 1595d522f475Smrg{ 159620d2c4d2Smrg ToggleFlag(TScreenOf(term)->force_box_chars); 1597d522f475Smrg update_font_boxchars(); 1598d522f475Smrg Redraw(); 1599d522f475Smrg} 160020d2c4d2Smrg 160120d2c4d2Smrgstatic void 160220d2c4d2Smrgdo_font_packed(Widget gw GCC_UNUSED, 160320d2c4d2Smrg XtPointer closure GCC_UNUSED, 160420d2c4d2Smrg XtPointer data GCC_UNUSED) 160520d2c4d2Smrg{ 160620d2c4d2Smrg ToggleFlag(TScreenOf(term)->force_packed); 160720d2c4d2Smrg update_font_packed(); 160820d2c4d2Smrg SetVTFont(term, TScreenOf(term)->menu_font_number, True, NULL); 160920d2c4d2Smrg} 1610d522f475Smrg#endif 1611d522f475Smrg 1612d522f475Smrg#if OPT_DEC_SOFTFONT 1613d522f475Smrgstatic void 1614d522f475Smrgdo_font_loadable(Widget gw GCC_UNUSED, 1615d522f475Smrg XtPointer closure GCC_UNUSED, 1616d522f475Smrg XtPointer data GCC_UNUSED) 1617d522f475Smrg{ 1618956cc18dSsnj ToggleFlag(term->misc.font_loadable); 1619d522f475Smrg update_font_loadable(); 1620d522f475Smrg} 1621d522f475Smrg#endif 1622d522f475Smrg 1623d522f475Smrg#if OPT_RENDERFONT 1624d522f475Smrgstatic void 1625d522f475Smrgdo_font_renderfont(Widget gw GCC_UNUSED, 1626d522f475Smrg XtPointer closure GCC_UNUSED, 1627d522f475Smrg XtPointer data GCC_UNUSED) 1628d522f475Smrg{ 162920d2c4d2Smrg XtermWidget xw = (XtermWidget) term; 163020d2c4d2Smrg TScreen *screen = TScreenOf(xw); 1631d522f475Smrg int fontnum = screen->menu_font_number; 163220d2c4d2Smrg String name = TScreenOf(xw)->MenuFontName(fontnum); 1633d522f475Smrg 163420d2c4d2Smrg DefaultRenderFont(xw); 163520d2c4d2Smrg ToggleFlag(xw->misc.render_font); 1636d522f475Smrg update_font_renderfont(); 163720d2c4d2Smrg xtermLoadFont(xw, xtermFontName(name), True, fontnum); 1638d522f475Smrg ScrnRefresh(term, 0, 0, 1639d522f475Smrg MaxRows(screen), 1640d522f475Smrg MaxCols(screen), True); 1641d522f475Smrg} 1642d522f475Smrg#endif 1643d522f475Smrg 1644d522f475Smrg#if OPT_WIDE_CHARS 1645d522f475Smrgstatic void 1646d522f475Smrgdo_font_utf8_mode(Widget gw GCC_UNUSED, 1647d522f475Smrg XtPointer closure GCC_UNUSED, 1648d522f475Smrg XtPointer data GCC_UNUSED) 1649d522f475Smrg{ 1650d522f475Smrg TScreen *screen = TScreenOf(term); 1651d522f475Smrg 1652d522f475Smrg /* 1653d522f475Smrg * If xterm was started with -wc option, it might not have the wide fonts. 1654d522f475Smrg * If xterm was not started with -wc, it might not have wide cells. 1655d522f475Smrg */ 1656d522f475Smrg if (!screen->utf8_mode) { 1657d522f475Smrg if (screen->wide_chars) { 1658d522f475Smrg if (xtermLoadWideFonts(term, True)) { 1659d522f475Smrg SetVTFont(term, screen->menu_font_number, True, NULL); 1660d522f475Smrg } 1661d522f475Smrg } else { 1662d522f475Smrg ChangeToWide(term); 1663d522f475Smrg } 1664d522f475Smrg } 1665d522f475Smrg switchPtyData(screen, !screen->utf8_mode); 1666d522f475Smrg /* 1667d522f475Smrg * We don't repaint the screen when switching UTF-8 on/off. When switching 1668d522f475Smrg * on - the Latin-1 codes should paint as-is. When switching off, that's 1669d522f475Smrg * hard to do properly. 1670d522f475Smrg */ 1671d522f475Smrg} 1672d522f475Smrg 1673d522f475Smrgstatic void 1674d522f475Smrgdo_font_utf8_title(Widget gw GCC_UNUSED, 1675d522f475Smrg XtPointer closure GCC_UNUSED, 1676d522f475Smrg XtPointer data GCC_UNUSED) 1677d522f475Smrg{ 1678d522f475Smrg TScreen *screen = TScreenOf(term); 1679d522f475Smrg 1680956cc18dSsnj ToggleFlag(screen->utf8_title); 1681d522f475Smrg update_font_utf8_title(); 1682d522f475Smrg} 1683d522f475Smrg#endif 1684d522f475Smrg 1685d522f475Smrg/* 1686d522f475Smrg * tek menu 1687d522f475Smrg */ 1688d522f475Smrg 1689d522f475Smrg#if OPT_TEK4014 1690d522f475Smrgstatic void 1691956cc18dSsnjdo_tektextlarge(Widget gw, 1692d522f475Smrg XtPointer closure GCC_UNUSED, 1693d522f475Smrg XtPointer data GCC_UNUSED) 1694d522f475Smrg{ 1695956cc18dSsnj TekSetFontSize(getTekWidget(gw), True, tekMenu_tektextlarge); 1696d522f475Smrg} 1697d522f475Smrg 1698d522f475Smrgstatic void 1699956cc18dSsnjdo_tektext2(Widget gw, 1700d522f475Smrg XtPointer closure GCC_UNUSED, 1701d522f475Smrg XtPointer data GCC_UNUSED) 1702d522f475Smrg{ 1703956cc18dSsnj TekSetFontSize(getTekWidget(gw), True, tekMenu_tektext2); 1704d522f475Smrg} 1705d522f475Smrg 1706d522f475Smrgstatic void 1707956cc18dSsnjdo_tektext3(Widget gw, 1708d522f475Smrg XtPointer closure GCC_UNUSED, 1709d522f475Smrg XtPointer data GCC_UNUSED) 1710d522f475Smrg{ 1711956cc18dSsnj TekSetFontSize(getTekWidget(gw), True, tekMenu_tektext3); 1712d522f475Smrg} 1713d522f475Smrg 1714d522f475Smrgstatic void 1715956cc18dSsnjdo_tektextsmall(Widget gw, 1716d522f475Smrg XtPointer closure GCC_UNUSED, 1717d522f475Smrg XtPointer data GCC_UNUSED) 1718d522f475Smrg{ 1719956cc18dSsnj TekSetFontSize(getTekWidget(gw), True, tekMenu_tektextsmall); 1720d522f475Smrg} 1721d522f475Smrg 1722d522f475Smrgstatic void 1723956cc18dSsnjdo_tekpage(Widget gw, 1724d522f475Smrg XtPointer closure GCC_UNUSED, 1725d522f475Smrg XtPointer data GCC_UNUSED) 1726d522f475Smrg{ 1727956cc18dSsnj TekSimulatePageButton(getTekWidget(gw), False); 1728d522f475Smrg} 1729d522f475Smrg 1730d522f475Smrgstatic void 1731956cc18dSsnjdo_tekreset(Widget gw, 1732d522f475Smrg XtPointer closure GCC_UNUSED, 1733d522f475Smrg XtPointer data GCC_UNUSED) 1734d522f475Smrg{ 1735956cc18dSsnj TekSimulatePageButton(getTekWidget(gw), True); 1736d522f475Smrg} 1737d522f475Smrg 1738d522f475Smrgstatic void 1739956cc18dSsnjdo_tekcopy(Widget gw, 1740d522f475Smrg XtPointer closure GCC_UNUSED, 1741d522f475Smrg XtPointer data GCC_UNUSED) 1742d522f475Smrg{ 1743956cc18dSsnj TekCopy(getTekWidget(gw)); 1744d522f475Smrg} 1745d522f475Smrg 1746d522f475Smrgstatic void 1747d522f475Smrghandle_vtshow(Widget gw GCC_UNUSED, Bool allowswitch) 1748d522f475Smrg{ 174920d2c4d2Smrg XtermWidget xw = term; 175020d2c4d2Smrg TScreen *screen = TScreenOf(xw); 1751d522f475Smrg 1752d522f475Smrg TRACE(("Show vt-window\n")); 1753d522f475Smrg if (!screen->Vshow) { /* not showing, turn on */ 1754d522f475Smrg set_vt_visibility(True); 175520d2c4d2Smrg } else if (TEK4014_SHOWN(xw) || allowswitch) { /* is showing, turn off */ 1756d522f475Smrg set_vt_visibility(False); 175720d2c4d2Smrg if (!TEK4014_ACTIVE(xw) && tekRefreshList) 1758d522f475Smrg TekRefresh(tekWidget); 1759d522f475Smrg end_vt_mode(); /* WARNING: this does a longjmp... */ 1760d522f475Smrg } else 176120d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 1762d522f475Smrg} 1763d522f475Smrg 1764d522f475Smrgstatic void 1765d522f475Smrgdo_vtshow(Widget gw, 1766d522f475Smrg XtPointer closure GCC_UNUSED, 1767d522f475Smrg XtPointer data GCC_UNUSED) 1768d522f475Smrg{ 1769d522f475Smrg handle_vtshow(gw, True); 1770d522f475Smrg} 1771d522f475Smrg 1772d522f475Smrgstatic void 1773d522f475Smrgdo_vtonoff(Widget gw, 1774d522f475Smrg XtPointer closure GCC_UNUSED, 1775d522f475Smrg XtPointer data GCC_UNUSED) 1776d522f475Smrg{ 1777d522f475Smrg handle_vtshow(gw, False); 1778d522f475Smrg} 1779d522f475Smrg 1780d522f475Smrgstatic void 1781d522f475Smrgdo_vtmode(Widget gw GCC_UNUSED, 1782d522f475Smrg XtPointer closure GCC_UNUSED, 1783d522f475Smrg XtPointer data GCC_UNUSED) 1784d522f475Smrg{ 1785d522f475Smrg switch_modes(TEK4014_ACTIVE(term)); /* switch to vt, or from */ 1786d522f475Smrg} 1787d522f475Smrg 1788d522f475Smrg/* ARGSUSED */ 1789d522f475Smrgstatic void 1790d522f475Smrgdo_tekhide(Widget gw GCC_UNUSED, 1791d522f475Smrg XtPointer closure GCC_UNUSED, 1792d522f475Smrg XtPointer data GCC_UNUSED) 1793d522f475Smrg{ 1794d522f475Smrg hide_tek_window(); 1795d522f475Smrg} 1796d522f475Smrg#endif /* OPT_TEK4014 */ 1797d522f475Smrg 1798d522f475Smrg/* 1799d522f475Smrg * public handler routines 1800d522f475Smrg */ 1801d522f475Smrg 1802d522f475Smrgstatic void 1803d522f475Smrghandle_toggle(void (*proc) PROTO_XT_CALLBACK_ARGS, 1804d522f475Smrg int var, 1805d522f475Smrg String * params, 1806d522f475Smrg Cardinal nparams, 1807d522f475Smrg Widget w, 1808d522f475Smrg XtPointer closure, 1809d522f475Smrg XtPointer data) 1810d522f475Smrg{ 181120d2c4d2Smrg XtermWidget xw = term; 1812d522f475Smrg int dir = -2; 1813d522f475Smrg 1814d522f475Smrg switch (nparams) { 1815d522f475Smrg case 0: 1816d522f475Smrg dir = -1; 1817d522f475Smrg break; 1818d522f475Smrg case 1: 1819d522f475Smrg if (XmuCompareISOLatin1(params[0], "on") == 0) 1820d522f475Smrg dir = 1; 1821d522f475Smrg else if (XmuCompareISOLatin1(params[0], "off") == 0) 1822d522f475Smrg dir = 0; 1823d522f475Smrg else if (XmuCompareISOLatin1(params[0], "toggle") == 0) 1824d522f475Smrg dir = -1; 1825d522f475Smrg break; 1826d522f475Smrg } 1827d522f475Smrg 1828d522f475Smrg switch (dir) { 1829d522f475Smrg case -2: 183020d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 1831d522f475Smrg break; 1832d522f475Smrg 1833d522f475Smrg case -1: 1834d522f475Smrg (*proc) (w, closure, data); 1835d522f475Smrg break; 1836d522f475Smrg 1837d522f475Smrg case 0: 1838d522f475Smrg if (var) 1839d522f475Smrg (*proc) (w, closure, data); 1840d522f475Smrg else 184120d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 1842d522f475Smrg break; 1843d522f475Smrg 1844d522f475Smrg case 1: 1845d522f475Smrg if (!var) 1846d522f475Smrg (*proc) (w, closure, data); 1847d522f475Smrg else 184820d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 1849d522f475Smrg break; 1850d522f475Smrg } 1851d522f475Smrg return; 1852d522f475Smrg} 1853d522f475Smrg 1854d522f475Smrg#define handle_vt_toggle(proc, var, params, nparams, w) \ 1855d522f475Smrg handle_toggle(proc, (int) (var), params, nparams, w, (XtPointer)0, (XtPointer)0) 1856d522f475Smrg 185720d2c4d2Smrg#define HANDLE_VT_TOGGLE(name) \ 185820d2c4d2Smrg handle_vt_toggle(do_##name, TScreenOf(term)->name, params, *param_count, w) 185920d2c4d2Smrg 1860d522f475Smrg#define handle_tek_toggle(proc, var, params, nparams, w) \ 1861d522f475Smrg handle_toggle(proc, (int) (var), params, nparams, w, (XtPointer)0, (XtPointer)0) 1862d522f475Smrg 1863d522f475Smrgvoid 1864d522f475SmrgHandleAllowSends(Widget w, 1865d522f475Smrg XEvent * event GCC_UNUSED, 1866d522f475Smrg String * params, 1867d522f475Smrg Cardinal *param_count) 1868d522f475Smrg{ 186920d2c4d2Smrg handle_vt_toggle(do_allowsends, TScreenOf(term)->allowSendEvents, 1870d522f475Smrg params, *param_count, w); 1871d522f475Smrg} 1872d522f475Smrg 1873d522f475Smrgvoid 1874d522f475SmrgHandleSetVisualBell(Widget w, 1875d522f475Smrg XEvent * event GCC_UNUSED, 1876d522f475Smrg String * params, 1877d522f475Smrg Cardinal *param_count) 1878d522f475Smrg{ 187920d2c4d2Smrg HANDLE_VT_TOGGLE(visualbell); 1880d522f475Smrg} 1881d522f475Smrg 1882d522f475Smrgvoid 1883d522f475SmrgHandleSetPopOnBell(Widget w, 1884d522f475Smrg XEvent * event GCC_UNUSED, 1885d522f475Smrg String * params, 1886d522f475Smrg Cardinal *param_count) 1887d522f475Smrg{ 188820d2c4d2Smrg HANDLE_VT_TOGGLE(poponbell); 1889d522f475Smrg} 1890d522f475Smrg 1891d522f475Smrg#ifdef ALLOWLOGGING 1892d522f475Smrgvoid 1893d522f475SmrgHandleLogging(Widget w, 1894d522f475Smrg XEvent * event GCC_UNUSED, 1895d522f475Smrg String * params, 1896d522f475Smrg Cardinal *param_count) 1897d522f475Smrg{ 189820d2c4d2Smrg HANDLE_VT_TOGGLE(logging); 1899d522f475Smrg} 1900d522f475Smrg#endif 1901d522f475Smrg 1902d522f475Smrg/* ARGSUSED */ 1903d522f475Smrgvoid 190420d2c4d2SmrgHandlePrintScreen(Widget w GCC_UNUSED, 1905d522f475Smrg XEvent * event GCC_UNUSED, 1906d522f475Smrg String * params GCC_UNUSED, 1907d522f475Smrg Cardinal *param_count GCC_UNUSED) 1908d522f475Smrg{ 190920d2c4d2Smrg xtermPrintScreen(term, True, getPrinterFlags(term, params, param_count)); 1910d522f475Smrg} 1911d522f475Smrg 1912956cc18dSsnj/* ARGSUSED */ 1913956cc18dSsnjvoid 191420d2c4d2SmrgHandlePrintEverything(Widget w GCC_UNUSED, 1915956cc18dSsnj XEvent * event GCC_UNUSED, 191620d2c4d2Smrg String * params, 191720d2c4d2Smrg Cardinal *param_count) 1918956cc18dSsnj{ 191920d2c4d2Smrg xtermPrintEverything(term, getPrinterFlags(term, params, param_count)); 1920956cc18dSsnj} 1921956cc18dSsnj 1922d522f475Smrg/* ARGSUSED */ 1923d522f475Smrgvoid 1924d522f475SmrgHandlePrintControlMode(Widget w, 1925d522f475Smrg XEvent * event GCC_UNUSED, 1926d522f475Smrg String * params GCC_UNUSED, 1927d522f475Smrg Cardinal *param_count GCC_UNUSED) 1928d522f475Smrg{ 1929d522f475Smrg do_print_redir(w, (XtPointer) 0, (XtPointer) 0); 1930d522f475Smrg} 1931d522f475Smrg 1932d522f475Smrg/* ARGSUSED */ 1933d522f475Smrgvoid 1934d522f475SmrgHandleRedraw(Widget w, 1935d522f475Smrg XEvent * event GCC_UNUSED, 1936d522f475Smrg String * params GCC_UNUSED, 1937d522f475Smrg Cardinal *param_count GCC_UNUSED) 1938d522f475Smrg{ 1939d522f475Smrg do_redraw(w, (XtPointer) 0, (XtPointer) 0); 1940d522f475Smrg} 1941d522f475Smrg 1942d522f475Smrg/* ARGSUSED */ 1943d522f475Smrgvoid 1944d522f475SmrgHandleSendSignal(Widget w, 1945d522f475Smrg XEvent * event GCC_UNUSED, 1946d522f475Smrg String * params, 1947d522f475Smrg Cardinal *param_count) 1948d522f475Smrg{ 1949d522f475Smrg /* *INDENT-OFF* */ 1950d522f475Smrg static struct sigtab { 195120d2c4d2Smrg const char *name; 1952d522f475Smrg int sig; 1953d522f475Smrg } signals[] = { 1954d522f475Smrg#ifdef SIGTSTP 1955d522f475Smrg { "suspend", SIGTSTP }, 1956d522f475Smrg { "tstp", SIGTSTP }, 1957d522f475Smrg#endif 1958d522f475Smrg#ifdef SIGCONT 1959d522f475Smrg { "cont", SIGCONT }, 1960d522f475Smrg#endif 1961d522f475Smrg { "int", SIGINT }, 1962d522f475Smrg { "hup", SIGHUP }, 1963d522f475Smrg { "quit", SIGQUIT }, 1964d522f475Smrg { "alrm", SIGALRM }, 1965d522f475Smrg { "alarm", SIGALRM }, 1966d522f475Smrg { "term", SIGTERM }, 1967d522f475Smrg { "kill", SIGKILL }, 1968d522f475Smrg { NULL, 0 }, 1969d522f475Smrg }; 1970d522f475Smrg /* *INDENT-ON* */ 1971d522f475Smrg 1972d522f475Smrg if (*param_count == 1) { 1973d522f475Smrg struct sigtab *st; 1974d522f475Smrg 1975d522f475Smrg for (st = signals; st->name; st++) { 1976d522f475Smrg if (XmuCompareISOLatin1(st->name, params[0]) == 0) { 1977d522f475Smrg handle_send_signal(w, st->sig); 1978d522f475Smrg return; 1979d522f475Smrg } 1980d522f475Smrg } 1981d522f475Smrg /* one could allow numeric values, but that would be a security hole */ 1982d522f475Smrg } 1983d522f475Smrg 198420d2c4d2Smrg Bell(term, XkbBI_MinorError, 0); 1985d522f475Smrg} 1986d522f475Smrg 1987d522f475Smrg/* ARGSUSED */ 1988d522f475Smrgvoid 1989d522f475SmrgHandleQuit(Widget w, 1990d522f475Smrg XEvent * event GCC_UNUSED, 1991d522f475Smrg String * params GCC_UNUSED, 1992d522f475Smrg Cardinal *param_count GCC_UNUSED) 1993d522f475Smrg{ 1994d522f475Smrg do_quit(w, (XtPointer) 0, (XtPointer) 0); 1995d522f475Smrg} 1996d522f475Smrg 1997d522f475Smrgvoid 1998d522f475SmrgHandle8BitControl(Widget w, 1999d522f475Smrg XEvent * event GCC_UNUSED, 2000d522f475Smrg String * params, 2001d522f475Smrg Cardinal *param_count) 2002d522f475Smrg{ 200320d2c4d2Smrg handle_vt_toggle(do_8bit_control, TScreenOf(term)->control_eight_bits, 2004d522f475Smrg params, *param_count, w); 2005d522f475Smrg} 2006d522f475Smrg 2007d522f475Smrgvoid 2008d522f475SmrgHandleBackarrow(Widget w, 2009d522f475Smrg XEvent * event GCC_UNUSED, 2010d522f475Smrg String * params, 2011d522f475Smrg Cardinal *param_count) 2012d522f475Smrg{ 2013d522f475Smrg handle_vt_toggle(do_backarrow, term->keyboard.flags & MODE_DECBKM, 2014d522f475Smrg params, *param_count, w); 2015d522f475Smrg} 2016d522f475Smrg 2017d522f475Smrg#if OPT_SUN_FUNC_KEYS 2018d522f475Smrgvoid 2019d522f475SmrgHandleSunFunctionKeys(Widget w, 2020d522f475Smrg XEvent * event GCC_UNUSED, 2021d522f475Smrg String * params, 2022d522f475Smrg Cardinal *param_count) 2023d522f475Smrg{ 2024d522f475Smrg handle_vt_toggle(do_sun_fkeys, term->keyboard.type == keyboardIsSun, 2025d522f475Smrg params, *param_count, w); 2026d522f475Smrg} 2027d522f475Smrg#endif 2028d522f475Smrg 2029d522f475Smrg#if OPT_NUM_LOCK 2030d522f475Smrgvoid 2031d522f475SmrgHandleNumLock(Widget w, 2032d522f475Smrg XEvent * event GCC_UNUSED, 2033d522f475Smrg String * params, 2034d522f475Smrg Cardinal *param_count) 2035d522f475Smrg{ 2036d522f475Smrg handle_vt_toggle(do_num_lock, term->misc.real_NumLock, 2037d522f475Smrg params, *param_count, w); 2038d522f475Smrg} 2039d522f475Smrg 2040d522f475Smrgvoid 2041d522f475SmrgHandleAltEsc(Widget w, 2042d522f475Smrg XEvent * event GCC_UNUSED, 2043d522f475Smrg String * params, 2044d522f475Smrg Cardinal *param_count) 2045d522f475Smrg{ 204620d2c4d2Smrg handle_vt_toggle(do_alt_esc, !TScreenOf(term)->input_eight_bits, 2047d522f475Smrg params, *param_count, w); 2048d522f475Smrg} 2049d522f475Smrg 2050d522f475Smrgvoid 2051d522f475SmrgHandleMetaEsc(Widget w, 2052d522f475Smrg XEvent * event GCC_UNUSED, 2053d522f475Smrg String * params, 2054d522f475Smrg Cardinal *param_count) 2055d522f475Smrg{ 205620d2c4d2Smrg handle_vt_toggle(do_meta_esc, TScreenOf(term)->meta_sends_esc, 2057d522f475Smrg params, *param_count, w); 2058d522f475Smrg} 2059d522f475Smrg#endif 2060d522f475Smrg 2061d522f475Smrgvoid 2062d522f475SmrgHandleDeleteIsDEL(Widget w, 2063d522f475Smrg XEvent * event GCC_UNUSED, 2064d522f475Smrg String * params, 2065d522f475Smrg Cardinal *param_count) 2066d522f475Smrg{ 206720d2c4d2Smrg handle_vt_toggle(do_delete_del, TScreenOf(term)->delete_is_del, 2068d522f475Smrg params, *param_count, w); 2069d522f475Smrg} 2070d522f475Smrg 2071d522f475Smrgvoid 2072d522f475SmrgHandleOldFunctionKeys(Widget w, 2073d522f475Smrg XEvent * event GCC_UNUSED, 2074d522f475Smrg String * params, 2075d522f475Smrg Cardinal *param_count) 2076d522f475Smrg{ 2077d522f475Smrg handle_vt_toggle(do_old_fkeys, term->keyboard.type == keyboardIsLegacy, 2078d522f475Smrg params, *param_count, w); 2079d522f475Smrg} 2080d522f475Smrg 2081d522f475Smrg#if OPT_SUNPC_KBD 2082d522f475Smrgvoid 2083d522f475SmrgHandleSunKeyboard(Widget w, 2084d522f475Smrg XEvent * event GCC_UNUSED, 2085d522f475Smrg String * params, 2086d522f475Smrg Cardinal *param_count) 2087d522f475Smrg{ 2088d522f475Smrg handle_vt_toggle(do_sun_kbd, term->keyboard.type == keyboardIsVT220, 2089d522f475Smrg params, *param_count, w); 2090d522f475Smrg} 2091d522f475Smrg#endif 2092d522f475Smrg 2093d522f475Smrg#if OPT_HP_FUNC_KEYS 2094d522f475Smrgvoid 2095d522f475SmrgHandleHpFunctionKeys(Widget w, 2096d522f475Smrg XEvent * event GCC_UNUSED, 2097d522f475Smrg String * params, 2098d522f475Smrg Cardinal *param_count) 2099d522f475Smrg{ 2100d522f475Smrg handle_vt_toggle(do_hp_fkeys, term->keyboard.type == keyboardIsHP, 2101d522f475Smrg params, *param_count, w); 2102d522f475Smrg} 2103d522f475Smrg#endif 2104d522f475Smrg 2105d522f475Smrg#if OPT_SCO_FUNC_KEYS 2106d522f475Smrgvoid 2107d522f475SmrgHandleScoFunctionKeys(Widget w, 2108d522f475Smrg XEvent * event GCC_UNUSED, 2109d522f475Smrg String * params, 2110d522f475Smrg Cardinal *param_count) 2111d522f475Smrg{ 2112d522f475Smrg handle_vt_toggle(do_sco_fkeys, term->keyboard.type == keyboardIsSCO, 2113d522f475Smrg params, *param_count, w); 2114d522f475Smrg} 2115d522f475Smrg#endif 2116d522f475Smrg 2117d522f475Smrgvoid 2118d522f475SmrgHandleScrollbar(Widget w, 2119d522f475Smrg XEvent * event GCC_UNUSED, 2120d522f475Smrg String * params, 2121d522f475Smrg Cardinal *param_count) 2122d522f475Smrg{ 212320d2c4d2Smrg XtermWidget xw = term; 212420d2c4d2Smrg 212520d2c4d2Smrg if (IsIcon(TScreenOf(xw))) { 212620d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 2127d522f475Smrg } else { 212820d2c4d2Smrg handle_vt_toggle(do_scrollbar, TScreenOf(xw)->fullVwin.sb_info.width, 2129d522f475Smrg params, *param_count, w); 2130d522f475Smrg } 2131d522f475Smrg} 2132d522f475Smrg 2133d522f475Smrgvoid 2134d522f475SmrgHandleJumpscroll(Widget w, 2135d522f475Smrg XEvent * event GCC_UNUSED, 2136d522f475Smrg String * params, 2137d522f475Smrg Cardinal *param_count) 2138d522f475Smrg{ 213920d2c4d2Smrg HANDLE_VT_TOGGLE(jumpscroll); 2140d522f475Smrg} 2141d522f475Smrg 2142d522f475Smrgvoid 2143d522f475SmrgHandleKeepSelection(Widget w, 2144d522f475Smrg XEvent * event GCC_UNUSED, 2145d522f475Smrg String * params, 2146d522f475Smrg Cardinal *param_count) 2147d522f475Smrg{ 214820d2c4d2Smrg HANDLE_VT_TOGGLE(keepSelection); 2149d522f475Smrg} 2150d522f475Smrg 2151d522f475Smrgvoid 2152d522f475SmrgHandleSetSelect(Widget w, 2153d522f475Smrg XEvent * event GCC_UNUSED, 2154d522f475Smrg String * params, 2155d522f475Smrg Cardinal *param_count) 2156d522f475Smrg{ 215720d2c4d2Smrg handle_vt_toggle(do_selectClipboard, TScreenOf(term)->selectToClipboard, 2158d522f475Smrg params, *param_count, w); 2159d522f475Smrg} 2160d522f475Smrg 2161d522f475Smrgvoid 2162d522f475SmrgHandleReverseVideo(Widget w, 2163d522f475Smrg XEvent * event GCC_UNUSED, 2164d522f475Smrg String * params, 2165d522f475Smrg Cardinal *param_count) 2166d522f475Smrg{ 2167d522f475Smrg handle_vt_toggle(do_reversevideo, (term->misc.re_verse0), 2168d522f475Smrg params, *param_count, w); 2169d522f475Smrg} 2170d522f475Smrg 2171d522f475Smrgvoid 2172d522f475SmrgHandleAutoWrap(Widget w, 2173d522f475Smrg XEvent * event GCC_UNUSED, 2174d522f475Smrg String * params, 2175d522f475Smrg Cardinal *param_count) 2176d522f475Smrg{ 2177d522f475Smrg handle_vt_toggle(do_autowrap, (term->flags & WRAPAROUND), 2178d522f475Smrg params, *param_count, w); 2179d522f475Smrg} 2180d522f475Smrg 2181d522f475Smrgvoid 2182d522f475SmrgHandleReverseWrap(Widget w, 2183d522f475Smrg XEvent * event GCC_UNUSED, 2184d522f475Smrg String * params, 2185d522f475Smrg Cardinal *param_count) 2186d522f475Smrg{ 2187d522f475Smrg handle_vt_toggle(do_reversewrap, (term->flags & REVERSEWRAP), 2188d522f475Smrg params, *param_count, w); 2189d522f475Smrg} 2190d522f475Smrg 2191d522f475Smrgvoid 2192d522f475SmrgHandleAutoLineFeed(Widget w, 2193d522f475Smrg XEvent * event GCC_UNUSED, 2194d522f475Smrg String * params, 2195d522f475Smrg Cardinal *param_count) 2196d522f475Smrg{ 2197d522f475Smrg handle_vt_toggle(do_autolinefeed, (term->flags & LINEFEED), 2198d522f475Smrg params, *param_count, w); 2199d522f475Smrg} 2200d522f475Smrg 2201d522f475Smrgvoid 2202d522f475SmrgHandleAppCursor(Widget w, 2203d522f475Smrg XEvent * event GCC_UNUSED, 2204d522f475Smrg String * params, 2205d522f475Smrg Cardinal *param_count) 2206d522f475Smrg{ 2207d522f475Smrg handle_vt_toggle(do_appcursor, (term->keyboard.flags & MODE_DECCKM), 2208d522f475Smrg params, *param_count, w); 2209d522f475Smrg} 2210d522f475Smrg 2211d522f475Smrgvoid 2212d522f475SmrgHandleAppKeypad(Widget w, 2213d522f475Smrg XEvent * event GCC_UNUSED, 2214d522f475Smrg String * params, 2215d522f475Smrg Cardinal *param_count) 2216d522f475Smrg{ 2217d522f475Smrg handle_vt_toggle(do_appkeypad, (term->keyboard.flags & MODE_DECKPAM), 2218d522f475Smrg params, *param_count, w); 2219d522f475Smrg} 2220d522f475Smrg 2221d522f475Smrgvoid 2222d522f475SmrgHandleScrollKey(Widget w, 2223d522f475Smrg XEvent * event GCC_UNUSED, 2224d522f475Smrg String * params, 2225d522f475Smrg Cardinal *param_count) 2226d522f475Smrg{ 222720d2c4d2Smrg HANDLE_VT_TOGGLE(scrollkey); 2228d522f475Smrg} 2229d522f475Smrg 2230d522f475Smrgvoid 2231d522f475SmrgHandleScrollTtyOutput(Widget w, 2232d522f475Smrg XEvent * event GCC_UNUSED, 2233d522f475Smrg String * params, 2234d522f475Smrg Cardinal *param_count) 2235d522f475Smrg{ 223620d2c4d2Smrg HANDLE_VT_TOGGLE(scrollttyoutput); 2237d522f475Smrg} 2238d522f475Smrg 2239d522f475Smrgvoid 2240d522f475SmrgHandleAllow132(Widget w, 2241d522f475Smrg XEvent * event GCC_UNUSED, 2242d522f475Smrg String * params, 2243d522f475Smrg Cardinal *param_count) 2244d522f475Smrg{ 224520d2c4d2Smrg handle_vt_toggle(do_allow132, TScreenOf(term)->c132, 2246d522f475Smrg params, *param_count, w); 2247d522f475Smrg} 2248d522f475Smrg 2249d522f475Smrgvoid 2250d522f475SmrgHandleCursesEmul(Widget w, 2251d522f475Smrg XEvent * event GCC_UNUSED, 2252d522f475Smrg String * params, 2253d522f475Smrg Cardinal *param_count) 2254d522f475Smrg{ 225520d2c4d2Smrg handle_vt_toggle(do_cursesemul, TScreenOf(term)->curses, 2256d522f475Smrg params, *param_count, w); 2257d522f475Smrg} 2258d522f475Smrg 2259d522f475Smrgvoid 2260d522f475SmrgHandleBellIsUrgent(Widget w, 2261d522f475Smrg XEvent * event GCC_UNUSED, 2262d522f475Smrg String * params, 2263d522f475Smrg Cardinal *param_count) 2264d522f475Smrg{ 226520d2c4d2Smrg HANDLE_VT_TOGGLE(bellIsUrgent); 2266d522f475Smrg} 2267d522f475Smrg 2268d522f475Smrgvoid 2269d522f475SmrgHandleMarginBell(Widget w, 2270d522f475Smrg XEvent * event GCC_UNUSED, 2271d522f475Smrg String * params, 2272d522f475Smrg Cardinal *param_count) 2273d522f475Smrg{ 227420d2c4d2Smrg HANDLE_VT_TOGGLE(marginbell); 2275d522f475Smrg} 2276d522f475Smrg 2277d522f475Smrg#if OPT_BLINK_CURS 2278d522f475Smrgvoid 2279d522f475SmrgHandleCursorBlink(Widget w, 2280d522f475Smrg XEvent * event GCC_UNUSED, 2281d522f475Smrg String * params, 2282d522f475Smrg Cardinal *param_count) 2283d522f475Smrg{ 2284d522f475Smrg /* eventually want to see if sensitive or not */ 228520d2c4d2Smrg handle_vt_toggle(do_cursorblink, TScreenOf(term)->cursor_blink, 2286d522f475Smrg params, *param_count, w); 2287d522f475Smrg} 2288d522f475Smrg#endif 2289d522f475Smrg 2290d522f475Smrgvoid 2291d522f475SmrgHandleAltScreen(Widget w, 2292d522f475Smrg XEvent * event GCC_UNUSED, 2293d522f475Smrg String * params, 2294d522f475Smrg Cardinal *param_count) 2295d522f475Smrg{ 2296d522f475Smrg /* eventually want to see if sensitive or not */ 229720d2c4d2Smrg handle_vt_toggle(do_altscreen, TScreenOf(term)->whichBuf, 2298d522f475Smrg params, *param_count, w); 2299d522f475Smrg} 2300d522f475Smrg 2301d522f475Smrgvoid 2302d522f475SmrgHandleTiteInhibit(Widget w, 2303d522f475Smrg XEvent * event GCC_UNUSED, 2304d522f475Smrg String * params, 2305d522f475Smrg Cardinal *param_count) 2306d522f475Smrg{ 2307d522f475Smrg /* eventually want to see if sensitive or not */ 2308d522f475Smrg handle_vt_toggle(do_titeInhibit, !(term->misc.titeInhibit), 2309d522f475Smrg params, *param_count, w); 2310d522f475Smrg} 2311d522f475Smrg 2312d522f475Smrg/* ARGSUSED */ 2313d522f475Smrgvoid 2314d522f475SmrgHandleSoftReset(Widget w, 2315d522f475Smrg XEvent * event GCC_UNUSED, 2316d522f475Smrg String * params GCC_UNUSED, 2317d522f475Smrg Cardinal *param_count GCC_UNUSED) 2318d522f475Smrg{ 2319d522f475Smrg do_softreset(w, (XtPointer) 0, (XtPointer) 0); 2320d522f475Smrg} 2321d522f475Smrg 2322d522f475Smrg/* ARGSUSED */ 2323d522f475Smrgvoid 2324d522f475SmrgHandleHardReset(Widget w, 2325d522f475Smrg XEvent * event GCC_UNUSED, 2326d522f475Smrg String * params GCC_UNUSED, 2327d522f475Smrg Cardinal *param_count GCC_UNUSED) 2328d522f475Smrg{ 2329d522f475Smrg do_hardreset(w, (XtPointer) 0, (XtPointer) 0); 2330d522f475Smrg} 2331d522f475Smrg 2332d522f475Smrg/* ARGSUSED */ 2333d522f475Smrgvoid 2334d522f475SmrgHandleClearSavedLines(Widget w, 2335d522f475Smrg XEvent * event GCC_UNUSED, 2336d522f475Smrg String * params GCC_UNUSED, 2337d522f475Smrg Cardinal *param_count GCC_UNUSED) 2338d522f475Smrg{ 2339d522f475Smrg do_clearsavedlines(w, (XtPointer) 0, (XtPointer) 0); 2340d522f475Smrg} 2341d522f475Smrg 2342d522f475Smrg#if OPT_DEC_CHRSET 2343d522f475Smrgvoid 2344d522f475SmrgHandleFontDoublesize(Widget w, 2345d522f475Smrg XEvent * event GCC_UNUSED, 2346d522f475Smrg String * params, 2347d522f475Smrg Cardinal *param_count) 2348d522f475Smrg{ 234920d2c4d2Smrg HANDLE_VT_TOGGLE(font_doublesize); 2350d522f475Smrg} 2351d522f475Smrg#endif 2352d522f475Smrg 2353d522f475Smrg#if OPT_BOX_CHARS 2354d522f475Smrgvoid 2355d522f475SmrgHandleFontBoxChars(Widget w, 2356d522f475Smrg XEvent * event GCC_UNUSED, 2357d522f475Smrg String * params, 2358d522f475Smrg Cardinal *param_count) 2359d522f475Smrg{ 236020d2c4d2Smrg handle_vt_toggle(do_font_boxchars, TScreenOf(term)->force_box_chars, 236120d2c4d2Smrg params, *param_count, w); 236220d2c4d2Smrg} 236320d2c4d2Smrg 236420d2c4d2Smrgvoid 236520d2c4d2SmrgHandleFontPacked(Widget w, 236620d2c4d2Smrg XEvent * event GCC_UNUSED, 236720d2c4d2Smrg String * params, 236820d2c4d2Smrg Cardinal *param_count) 236920d2c4d2Smrg{ 237020d2c4d2Smrg handle_vt_toggle(do_font_packed, TScreenOf(term)->force_packed, 2371d522f475Smrg params, *param_count, w); 2372d522f475Smrg} 2373d522f475Smrg#endif 2374d522f475Smrg 2375d522f475Smrg#if OPT_DEC_SOFTFONT 2376d522f475Smrgvoid 2377d522f475SmrgHandleFontLoading(Widget w, 2378d522f475Smrg XEvent * event GCC_UNUSED, 2379d522f475Smrg String * params, 2380d522f475Smrg Cardinal *param_count) 2381d522f475Smrg{ 2382d522f475Smrg handle_vt_toggle(do_font_loadable, term->misc.font_loadable, 2383d522f475Smrg params, *param_count, w); 2384d522f475Smrg} 2385d522f475Smrg#endif 2386d522f475Smrg 2387d522f475Smrg#if OPT_RENDERFONT 2388d522f475Smrgvoid 2389d522f475SmrgHandleRenderFont(Widget w, 2390d522f475Smrg XEvent * event GCC_UNUSED, 2391d522f475Smrg String * params, 2392d522f475Smrg Cardinal *param_count) 2393d522f475Smrg{ 239420d2c4d2Smrg XtermWidget xw = (XtermWidget) term; 239520d2c4d2Smrg 239620d2c4d2Smrg DefaultRenderFont(xw); 239720d2c4d2Smrg 239820d2c4d2Smrg handle_vt_toggle(do_font_renderfont, xw->misc.render_font, 2399d522f475Smrg params, *param_count, w); 2400d522f475Smrg} 2401d522f475Smrg#endif 2402d522f475Smrg 2403d522f475Smrg#if OPT_WIDE_CHARS 2404d522f475Smrgvoid 2405d522f475SmrgHandleUTF8Mode(Widget w, 2406d522f475Smrg XEvent * event GCC_UNUSED, 2407d522f475Smrg String * params, 2408d522f475Smrg Cardinal *param_count) 2409d522f475Smrg{ 241020d2c4d2Smrg handle_vt_toggle(do_font_utf8_mode, TScreenOf(term)->utf8_mode, 2411d522f475Smrg params, *param_count, w); 2412d522f475Smrg} 2413d522f475Smrg 2414d522f475Smrgvoid 2415d522f475SmrgHandleUTF8Title(Widget w, 2416d522f475Smrg XEvent * event GCC_UNUSED, 2417d522f475Smrg String * params, 2418d522f475Smrg Cardinal *param_count) 2419d522f475Smrg{ 242020d2c4d2Smrg handle_vt_toggle(do_font_utf8_title, TScreenOf(term)->utf8_title, 2421d522f475Smrg params, *param_count, w); 2422d522f475Smrg} 2423d522f475Smrg#endif 2424d522f475Smrg 2425d522f475Smrg#if OPT_TEK4014 2426d522f475Smrgvoid 2427d522f475SmrgHandleSetTerminalType(Widget w, 2428d522f475Smrg XEvent * event GCC_UNUSED, 2429d522f475Smrg String * params, 2430d522f475Smrg Cardinal *param_count) 2431d522f475Smrg{ 243220d2c4d2Smrg XtermWidget xw = term; 243320d2c4d2Smrg 2434d522f475Smrg if (*param_count == 1) { 2435d522f475Smrg switch (params[0][0]) { 2436d522f475Smrg case 'v': 2437d522f475Smrg case 'V': 243820d2c4d2Smrg if (TEK4014_ACTIVE(xw)) 2439d522f475Smrg do_vtmode(w, (XtPointer) 0, (XtPointer) 0); 2440d522f475Smrg break; 2441d522f475Smrg case 't': 2442d522f475Smrg case 'T': 244320d2c4d2Smrg if (!TEK4014_ACTIVE(xw)) 2444d522f475Smrg do_tekmode(w, (XtPointer) 0, (XtPointer) 0); 2445d522f475Smrg break; 2446d522f475Smrg default: 244720d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 2448d522f475Smrg } 2449d522f475Smrg } else { 245020d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 2451d522f475Smrg } 2452d522f475Smrg} 2453d522f475Smrg 2454d522f475Smrgvoid 2455d522f475SmrgHandleVisibility(Widget w, 2456d522f475Smrg XEvent * event GCC_UNUSED, 2457d522f475Smrg String * params, 2458d522f475Smrg Cardinal *param_count) 2459d522f475Smrg{ 246020d2c4d2Smrg XtermWidget xw = term; 246120d2c4d2Smrg 2462d522f475Smrg if (*param_count == 2) { 2463d522f475Smrg switch (params[0][0]) { 2464d522f475Smrg case 'v': 2465d522f475Smrg case 'V': 246620d2c4d2Smrg handle_tek_toggle(do_vtonoff, (int) TScreenOf(xw)->Vshow, 2467d522f475Smrg params + 1, (*param_count) - 1, w); 2468d522f475Smrg break; 2469d522f475Smrg case 't': 2470d522f475Smrg case 'T': 247120d2c4d2Smrg handle_tek_toggle(do_tekonoff, (int) TEK4014_SHOWN(xw), 2472d522f475Smrg params + 1, (*param_count) - 1, w); 2473d522f475Smrg break; 2474d522f475Smrg default: 247520d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 2476d522f475Smrg } 2477d522f475Smrg } else { 247820d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 2479d522f475Smrg } 2480d522f475Smrg} 2481d522f475Smrg 2482d522f475Smrg/* ARGSUSED */ 2483d522f475Smrgvoid 2484d522f475SmrgHandleSetTekText(Widget w, 2485d522f475Smrg XEvent * event GCC_UNUSED, 2486d522f475Smrg String * params, 2487d522f475Smrg Cardinal *param_count) 2488d522f475Smrg{ 248920d2c4d2Smrg XtermWidget xw = term; 2490d522f475Smrg void (*proc) PROTO_XT_CALLBACK_ARGS = 0; 2491d522f475Smrg 2492d522f475Smrg switch (*param_count) { 2493d522f475Smrg case 0: 2494d522f475Smrg proc = do_tektextlarge; 2495d522f475Smrg break; 2496d522f475Smrg case 1: 2497d522f475Smrg switch (TekGetFontSize(params[0])) { 2498d522f475Smrg case TEK_FONT_LARGE: 2499d522f475Smrg proc = do_tektextlarge; 2500d522f475Smrg break; 2501d522f475Smrg case TEK_FONT_2: 2502d522f475Smrg proc = do_tektext2; 2503d522f475Smrg break; 2504d522f475Smrg case TEK_FONT_3: 2505d522f475Smrg proc = do_tektext3; 2506d522f475Smrg break; 2507d522f475Smrg case TEK_FONT_SMALL: 2508d522f475Smrg proc = do_tektextsmall; 2509d522f475Smrg break; 2510d522f475Smrg } 2511d522f475Smrg break; 2512d522f475Smrg } 2513d522f475Smrg if (proc) 2514d522f475Smrg (*proc) (w, (XtPointer) 0, (XtPointer) 0); 2515d522f475Smrg else 251620d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 2517d522f475Smrg} 2518d522f475Smrg 2519d522f475Smrg/* ARGSUSED */ 2520d522f475Smrgvoid 2521d522f475SmrgHandleTekPage(Widget w, 2522d522f475Smrg XEvent * event GCC_UNUSED, 2523d522f475Smrg String * params GCC_UNUSED, 2524d522f475Smrg Cardinal *param_count GCC_UNUSED) 2525d522f475Smrg{ 2526d522f475Smrg do_tekpage(w, (XtPointer) 0, (XtPointer) 0); 2527d522f475Smrg} 2528d522f475Smrg 2529d522f475Smrg/* ARGSUSED */ 2530d522f475Smrgvoid 2531d522f475SmrgHandleTekReset(Widget w, 2532d522f475Smrg XEvent * event GCC_UNUSED, 2533d522f475Smrg String * params GCC_UNUSED, 2534d522f475Smrg Cardinal *param_count GCC_UNUSED) 2535d522f475Smrg{ 2536d522f475Smrg do_tekreset(w, (XtPointer) 0, (XtPointer) 0); 2537d522f475Smrg} 2538d522f475Smrg 2539d522f475Smrg/* ARGSUSED */ 2540d522f475Smrgvoid 2541d522f475SmrgHandleTekCopy(Widget w, 2542d522f475Smrg XEvent * event GCC_UNUSED, 2543d522f475Smrg String * params GCC_UNUSED, 2544d522f475Smrg Cardinal *param_count GCC_UNUSED) 2545d522f475Smrg{ 2546d522f475Smrg do_tekcopy(w, (XtPointer) 0, (XtPointer) 0); 2547d522f475Smrg} 2548d522f475Smrg#endif /* OPT_TEK4014 */ 2549d522f475Smrg 2550d522f475Smrg#if OPT_TOOLBAR 2551d522f475Smrg/* 2552d522f475Smrg * The normal style of xterm popup menu delays initialization until the menu is 2553d522f475Smrg * first requested. When using a toolbar, we can use the same initialization, 2554d522f475Smrg * though on the first popup there will be a little geometry layout jitter, 2555d522f475Smrg * since the menu is already managed when this callback is invoked. 2556d522f475Smrg */ 2557d522f475Smrgstatic void 2558d522f475SmrgInitPopup(Widget gw, 2559d522f475Smrg XtPointer closure, 2560d522f475Smrg XtPointer data GCC_UNUSED) 2561d522f475Smrg{ 2562d522f475Smrg String params[2]; 2563d522f475Smrg Cardinal count = 1; 2564d522f475Smrg 2565d522f475Smrg params[0] = (char *) closure; 2566d522f475Smrg params[1] = 0; 2567d522f475Smrg TRACE(("InitPopup(%s)\n", params[0])); 2568d522f475Smrg 2569d522f475Smrg domenu(gw, (XEvent *) 0, params, &count); 2570d522f475Smrg 2571d522f475Smrg if (gw) 2572d522f475Smrg XtRemoveCallback(gw, XtNpopupCallback, InitPopup, closure); 2573d522f475Smrg} 2574d522f475Smrg 2575d522f475Smrgstatic Dimension 2576d522f475SmrgSetupShell(Widget *menus, MenuList * shell, int n, int m) 2577d522f475Smrg{ 2578d522f475Smrg char temp[80]; 2579d522f475Smrg char *external_name = 0; 2580d522f475Smrg Dimension button_height; 2581d522f475Smrg Dimension button_border; 2582d522f475Smrg String saveLocale = setMenuLocale(True, resource.menuLocale); 2583d522f475Smrg 2584d522f475Smrg shell[n].w = XtVaCreatePopupShell(menu_names[n].internal_name, 2585d522f475Smrg simpleMenuWidgetClass, 2586d522f475Smrg *menus, 2587d522f475Smrg XtNgeometry, NULL, 2588d522f475Smrg (XtPointer) 0); 2589d522f475Smrg 2590d522f475Smrg XtAddCallback(shell[n].w, XtNpopupCallback, InitPopup, menu_names[n].internal_name); 2591d522f475Smrg XtVaGetValues(shell[n].w, 2592d522f475Smrg XtNlabel, &external_name, 2593d522f475Smrg (XtPointer) 0); 2594d522f475Smrg 2595d522f475Smrg TRACE(("...SetupShell(%s) -> %s -> %#lx\n", 2596d522f475Smrg menu_names[n].internal_name, 2597d522f475Smrg external_name, 2598d522f475Smrg (long) shell[n].w)); 2599d522f475Smrg 2600d522f475Smrg sprintf(temp, "%sButton", menu_names[n].internal_name); 2601d522f475Smrg shell[n].b = XtVaCreateManagedWidget(temp, 2602d522f475Smrg menuButtonWidgetClass, 2603d522f475Smrg *menus, 2604d522f475Smrg XtNfromHoriz, ((m >= 0) 2605d522f475Smrg ? shell[m].b 2606d522f475Smrg : 0), 2607d522f475Smrg XtNmenuName, menu_names[n].internal_name, 2608d522f475Smrg XtNlabel, external_name, 2609d522f475Smrg (XtPointer) 0); 2610d522f475Smrg XtVaGetValues(shell[n].b, 2611d522f475Smrg XtNheight, &button_height, 2612d522f475Smrg XtNborderWidth, &button_border, 2613d522f475Smrg (XtPointer) 0); 2614d522f475Smrg 2615956cc18dSsnj (void) setMenuLocale(False, saveLocale); 2616956cc18dSsnj return (Dimension) (button_height + (button_border * 2)); 2617d522f475Smrg} 2618d522f475Smrg#endif /* OPT_TOOLBAR */ 2619d522f475Smrg 2620d522f475Smrgvoid 2621d522f475SmrgSetupMenus(Widget shell, Widget *forms, Widget *menus, Dimension * menu_high) 2622d522f475Smrg{ 2623d522f475Smrg#if OPT_TOOLBAR 2624d522f475Smrg Dimension button_height = 0; 2625d522f475Smrg Dimension toolbar_hSpace; 2626d522f475Smrg Arg args[10]; 2627d522f475Smrg#endif 2628d522f475Smrg 2629d522f475Smrg TRACE(("SetupMenus(%s)\n", shell == toplevel ? "vt100" : "tek4014")); 2630d522f475Smrg 2631d522f475Smrg *menu_high = 0; 2632d522f475Smrg 2633d522f475Smrg if (shell == toplevel) { 2634d522f475Smrg XawSimpleMenuAddGlobalActions(app_con); 2635d522f475Smrg XtRegisterGrabAction(HandlePopupMenu, True, 2636d522f475Smrg (ButtonPressMask | ButtonReleaseMask), 2637d522f475Smrg GrabModeAsync, GrabModeAsync); 2638d522f475Smrg } 2639d522f475Smrg#if OPT_TOOLBAR 2640d522f475Smrg *forms = XtVaCreateManagedWidget("form", 2641d522f475Smrg formWidgetClass, shell, 2642d522f475Smrg (XtPointer) 0); 2643d522f475Smrg xtermAddInput(*forms); 2644d522f475Smrg 2645d522f475Smrg /* 2646d522f475Smrg * Set a nominal value for the preferred pane size, which lets the 2647d522f475Smrg * buttons determine the actual height of the menu bar. We don't show 2648d522f475Smrg * the grip, because it's too easy to make the toolbar look bad that 2649d522f475Smrg * way. 2650d522f475Smrg */ 2651d522f475Smrg XtSetArg(args[0], XtNorientation, XtorientHorizontal); 2652d522f475Smrg XtSetArg(args[1], XtNtop, XawChainTop); 2653d522f475Smrg XtSetArg(args[2], XtNbottom, XawChainTop); 2654d522f475Smrg XtSetArg(args[3], XtNleft, XawChainLeft); 2655d522f475Smrg XtSetArg(args[4], XtNright, XawChainLeft); 2656d522f475Smrg 2657d522f475Smrg if (resource.toolBar) { 2658d522f475Smrg *menus = XtCreateManagedWidget("menubar", boxWidgetClass, *forms, 2659d522f475Smrg args, 5); 2660d522f475Smrg } else { 2661d522f475Smrg *menus = XtCreateWidget("menubar", boxWidgetClass, *forms, args, 5); 2662d522f475Smrg } 2663d522f475Smrg 2664d522f475Smrg /* 2665d522f475Smrg * The toolbar widget's height is not necessarily known yet. If the 2666d522f475Smrg * toolbar is not created as a managed widget, we can still make a good 2667d522f475Smrg * guess about its height by collecting the widget's other resource values. 2668d522f475Smrg */ 2669d522f475Smrg XtVaGetValues(*menus, 2670d522f475Smrg XtNhSpace, &toolbar_hSpace, 2671d522f475Smrg (XtPointer) 0); 2672d522f475Smrg 2673d522f475Smrg if (shell == toplevel) { /* vt100 */ 2674d522f475Smrg int j; 2675d522f475Smrg for (j = mainMenu; j <= fontMenu; j++) { 2676d522f475Smrg button_height = SetupShell(menus, vt_shell, j, j - 1); 2677d522f475Smrg } 2678d522f475Smrg } 2679d522f475Smrg#if OPT_TEK4014 2680d522f475Smrg else { /* tek4014 */ 268120d2c4d2Smrg (void) SetupShell(menus, tek_shell, mainMenu, -1); 2682d522f475Smrg button_height = SetupShell(menus, tek_shell, tekMenu, mainMenu); 2683d522f475Smrg } 2684d522f475Smrg#endif 2685d522f475Smrg 2686d522f475Smrg /* 2687d522f475Smrg * Tell the main program how high the toolbar is, to help with the initial 2688d522f475Smrg * layout. 2689d522f475Smrg */ 2690956cc18dSsnj *menu_high = (Dimension) (button_height + 2 * (toolbar_hSpace)); 26912eaa94a1Schristos TRACE(("...menuHeight:%d = (%d + 2 * %d)\n", 26922eaa94a1Schristos *menu_high, button_height, toolbar_hSpace)); 2693d522f475Smrg 2694d522f475Smrg#else /* !OPT_TOOLBAR */ 2695d522f475Smrg *forms = shell; 2696d522f475Smrg *menus = shell; 2697d522f475Smrg#endif 2698d522f475Smrg 2699d522f475Smrg TRACE(("...shell=%#lx\n", (long) shell)); 2700d522f475Smrg TRACE(("...forms=%#lx\n", (long) *forms)); 2701d522f475Smrg TRACE(("...menus=%#lx\n", (long) *menus)); 2702d522f475Smrg} 2703d522f475Smrg 2704d522f475Smrgvoid 2705d522f475SmrgrepairSizeHints(void) 2706d522f475Smrg{ 2707a1f3da82Smrg XtermWidget xw = term; 2708a1f3da82Smrg TScreen *screen = TScreenOf(xw); 2709d522f475Smrg 2710a1f3da82Smrg if (XtIsRealized((Widget) xw)) { 2711a1f3da82Smrg getXtermSizeHints(xw); 2712a1f3da82Smrg xtermSizeHints(xw, ScrollbarWidth(screen)); 2713d522f475Smrg 2714a1f3da82Smrg XSetWMNormalHints(screen->display, VShellWindow(xw), &xw->hints); 2715d522f475Smrg } 2716d522f475Smrg} 2717d522f475Smrg 2718d522f475Smrg#if OPT_TOOLBAR 2719d522f475Smrg#define INIT_POPUP(s, n) InitPopup(s[n].w, menu_names[n].internal_name, 0) 2720d522f475Smrg 2721d522f475Smrgstatic Bool 2722d522f475SmrgInitWidgetMenu(Widget shell) 2723d522f475Smrg{ 2724d522f475Smrg Bool result = False; 2725d522f475Smrg 272620d2c4d2Smrg TRACE(("InitWidgetMenu(%p)\n", (void *) shell)); 2727d522f475Smrg if (term != 0) { 2728d522f475Smrg if (shell == toplevel) { /* vt100 */ 2729d522f475Smrg if (!term->init_menu) { 2730d522f475Smrg INIT_POPUP(vt_shell, mainMenu); 2731d522f475Smrg INIT_POPUP(vt_shell, vtMenu); 2732d522f475Smrg INIT_POPUP(vt_shell, fontMenu); 2733d522f475Smrg term->init_menu = True; 2734d522f475Smrg TRACE(("...InitWidgetMenu(vt)\n")); 2735d522f475Smrg } 2736d522f475Smrg result = term->init_menu; 2737d522f475Smrg } 2738d522f475Smrg#if OPT_TEK4014 2739d522f475Smrg else if (tekWidget) { /* tek4014 */ 2740d522f475Smrg if (!tekWidget->init_menu) { 2741d522f475Smrg INIT_POPUP(tek_shell, mainMenu); 2742d522f475Smrg INIT_POPUP(tek_shell, tekMenu); 2743d522f475Smrg tekWidget->init_menu = True; 2744d522f475Smrg TRACE(("...InitWidgetMenu(tek)\n")); 2745d522f475Smrg } 2746d522f475Smrg result = tekWidget->init_menu; 2747d522f475Smrg } 2748d522f475Smrg#endif 2749d522f475Smrg } 2750d522f475Smrg TRACE(("...InitWidgetMenu ->%d\n", result)); 2751d522f475Smrg return result; 2752d522f475Smrg} 2753d522f475Smrg 2754d522f475Smrgstatic TbInfo * 2755d522f475Smrgtoolbar_info(Widget w) 2756d522f475Smrg{ 2757d522f475Smrg TRACE(("...getting toolbar_info\n")); 2758d522f475Smrg#if OPT_TEK4014 2759d522f475Smrg if (w != (Widget) term) 2760d522f475Smrg return &(tekWidget->tek.tb_info); 2761d522f475Smrg#else 2762d522f475Smrg (void) w; 2763d522f475Smrg#endif 276420d2c4d2Smrg return &(WhichVWin(TScreenOf(term))->tb_info); 2765d522f475Smrg} 2766d522f475Smrg 2767d522f475Smrgstatic void 2768d522f475Smrghide_toolbar(Widget w) 2769d522f475Smrg{ 2770d522f475Smrg if (w != 0) { 2771d522f475Smrg TbInfo *info = toolbar_info(w); 2772d522f475Smrg 2773d522f475Smrg TRACE(("hiding toolbar\n")); 2774d522f475Smrg XtVaSetValues(w, 2775d522f475Smrg XtNfromVert, (Widget) 0, 2776d522f475Smrg (XtPointer) 0); 2777d522f475Smrg 2778d522f475Smrg if (info->menu_bar != 0) { 2779d522f475Smrg repairSizeHints(); 2780d522f475Smrg XtUnmanageChild(info->menu_bar); 2781d522f475Smrg if (XtIsRealized(info->menu_bar)) { 2782d522f475Smrg XtUnmapWidget(info->menu_bar); 2783d522f475Smrg } 2784d522f475Smrg } 2785d522f475Smrg TRACE(("...hiding toolbar (done)\n")); 2786d522f475Smrg } 2787d522f475Smrg} 2788d522f475Smrg 2789d522f475Smrgstatic void 2790d522f475Smrgshow_toolbar(Widget w) 2791d522f475Smrg{ 2792d522f475Smrg if (w != 0) { 2793d522f475Smrg TbInfo *info = toolbar_info(w); 2794d522f475Smrg 2795d522f475Smrg TRACE(("showing toolbar\n")); 2796d522f475Smrg if (info->menu_bar != 0) { 2797d522f475Smrg XtVaSetValues(w, 2798d522f475Smrg XtNfromVert, info->menu_bar, 2799d522f475Smrg (XtPointer) 0); 2800d522f475Smrg if (XtIsRealized(info->menu_bar)) 2801d522f475Smrg repairSizeHints(); 2802d522f475Smrg XtManageChild(info->menu_bar); 2803d522f475Smrg if (XtIsRealized(info->menu_bar)) { 2804d522f475Smrg XtMapWidget(info->menu_bar); 2805d522f475Smrg } 2806d522f475Smrg } 2807d522f475Smrg /* 2808d522f475Smrg * This is needed to make the terminal widget move down below the 2809d522f475Smrg * toolbar. 2810d522f475Smrg */ 2811d522f475Smrg XawFormDoLayout(XtParent(w), True); 2812d522f475Smrg TRACE(("...showing toolbar (done)\n")); 2813d522f475Smrg } 2814d522f475Smrg} 2815d522f475Smrg 2816d522f475Smrg/* 2817d522f475Smrg * Make the toolbar visible or invisible in the current window(s). 2818d522f475Smrg */ 2819d522f475Smrgvoid 2820d522f475SmrgShowToolbar(Bool enable) 2821d522f475Smrg{ 282220d2c4d2Smrg XtermWidget xw = term; 282320d2c4d2Smrg 2824d522f475Smrg TRACE(("ShowToolbar(%d)\n", enable)); 2825d522f475Smrg 282620d2c4d2Smrg if (IsIcon(TScreenOf(xw))) { 282720d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 2828d522f475Smrg } else { 2829d522f475Smrg if (enable) { 2830d522f475Smrg if (InitWidgetMenu(toplevel)) 283120d2c4d2Smrg show_toolbar((Widget) xw); 2832d522f475Smrg#if OPT_TEK4014 2833d522f475Smrg if (InitWidgetMenu(tekshellwidget)) 2834d522f475Smrg show_toolbar((Widget) tekWidget); 2835d522f475Smrg#endif 2836d522f475Smrg } else { 283720d2c4d2Smrg hide_toolbar((Widget) xw); 2838d522f475Smrg#if OPT_TEK4014 2839d522f475Smrg hide_toolbar((Widget) tekWidget); 2840d522f475Smrg#endif 2841d522f475Smrg } 2842956cc18dSsnj resource.toolBar = (Boolean) enable; 2843d522f475Smrg update_toolbar(); 2844d522f475Smrg } 2845d522f475Smrg} 2846d522f475Smrg 2847d522f475Smrgvoid 2848d522f475SmrgHandleToolbar(Widget w, 2849d522f475Smrg XEvent * event GCC_UNUSED, 2850d522f475Smrg String * params GCC_UNUSED, 2851d522f475Smrg Cardinal *param_count GCC_UNUSED) 2852d522f475Smrg{ 285320d2c4d2Smrg XtermWidget xw = term; 285420d2c4d2Smrg 285520d2c4d2Smrg if (IsIcon(TScreenOf(xw))) { 285620d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 2857d522f475Smrg } else { 2858d522f475Smrg handle_vt_toggle(do_toolbar, resource.toolBar, 2859d522f475Smrg params, *param_count, w); 2860d522f475Smrg } 2861d522f475Smrg} 2862d522f475Smrg 2863d522f475Smrg/* ARGSUSED */ 2864d522f475Smrgstatic void 2865d522f475Smrgdo_toolbar(Widget gw GCC_UNUSED, 2866d522f475Smrg XtPointer closure GCC_UNUSED, 2867d522f475Smrg XtPointer data GCC_UNUSED) 2868d522f475Smrg{ 286920d2c4d2Smrg XtermWidget xw = term; 287020d2c4d2Smrg 2871d522f475Smrg /* 2872d522f475Smrg * Toggle toolbars for both vt100 and tek windows, since they share the 2873d522f475Smrg * menu which contains the checkbox indicating whether the toolbar is 2874d522f475Smrg * active. 2875d522f475Smrg */ 287620d2c4d2Smrg if (IsIcon(TScreenOf(xw))) { 287720d2c4d2Smrg Bell(xw, XkbBI_MinorError, 0); 2878d522f475Smrg } else { 2879956cc18dSsnj ShowToolbar(ToggleFlag(resource.toolBar)); 2880d522f475Smrg } 2881d522f475Smrg} 2882d522f475Smrg 2883d522f475Smrgvoid 2884d522f475Smrgupdate_toolbar(void) 2885d522f475Smrg{ 2886d522f475Smrg UpdateCheckbox("update_toolbar", 2887d522f475Smrg mainMenuEntries, 2888d522f475Smrg mainMenu_toolbar, 2889d522f475Smrg resource.toolBar); 2890d522f475Smrg} 2891d522f475Smrg#endif /* OPT_TOOLBAR */ 2892d522f475Smrg 2893d522f475Smrgvoid 2894d522f475Smrgupdate_securekbd(void) 2895d522f475Smrg{ 2896d522f475Smrg UpdateCheckbox("update_securekbd", 2897d522f475Smrg mainMenuEntries, 2898d522f475Smrg mainMenu_securekbd, 289920d2c4d2Smrg TScreenOf(term)->grabbedKbd); 2900d522f475Smrg} 2901d522f475Smrg 2902d522f475Smrgvoid 2903d522f475Smrgupdate_allowsends(void) 2904d522f475Smrg{ 2905d522f475Smrg UpdateCheckbox("update_allowsends", 2906d522f475Smrg mainMenuEntries, 2907d522f475Smrg mainMenu_allowsends, 290820d2c4d2Smrg TScreenOf(term)->allowSendEvents); 2909d522f475Smrg} 2910d522f475Smrg 2911d522f475Smrg#ifdef ALLOWLOGGING 2912d522f475Smrgvoid 2913d522f475Smrgupdate_logging(void) 2914d522f475Smrg{ 2915d522f475Smrg UpdateCheckbox("update_logging", 2916d522f475Smrg mainMenuEntries, 2917d522f475Smrg mainMenu_logging, 291820d2c4d2Smrg TScreenOf(term)->logging); 2919d522f475Smrg} 2920d522f475Smrg#endif 2921d522f475Smrg 2922d522f475Smrgvoid 2923d522f475Smrgupdate_print_redir(void) 2924d522f475Smrg{ 2925d522f475Smrg UpdateCheckbox("update_print_redir", 2926d522f475Smrg mainMenuEntries, 2927d522f475Smrg mainMenu_print_redir, 292820d2c4d2Smrg TScreenOf(term)->printer_controlmode); 2929d522f475Smrg} 2930d522f475Smrg 2931d522f475Smrgvoid 2932d522f475Smrgupdate_8bit_control(void) 2933d522f475Smrg{ 2934d522f475Smrg UpdateCheckbox("update_8bit_control", 2935d522f475Smrg mainMenuEntries, 2936d522f475Smrg mainMenu_8bit_ctrl, 293720d2c4d2Smrg TScreenOf(term)->control_eight_bits); 2938d522f475Smrg} 2939d522f475Smrg 2940d522f475Smrgvoid 2941d522f475Smrgupdate_decbkm(void) 2942d522f475Smrg{ 2943d522f475Smrg UpdateCheckbox("update_decbkm", 2944d522f475Smrg mainMenuEntries, 2945d522f475Smrg mainMenu_backarrow, 2946d522f475Smrg (term->keyboard.flags & MODE_DECBKM) != 0); 2947d522f475Smrg} 2948d522f475Smrg 2949d522f475Smrg#if OPT_NUM_LOCK 2950d522f475Smrgvoid 2951d522f475Smrgupdate_num_lock(void) 2952d522f475Smrg{ 2953d522f475Smrg UpdateCheckbox("update_num_lock", 2954d522f475Smrg mainMenuEntries, 2955d522f475Smrg mainMenu_num_lock, 2956d522f475Smrg term->misc.real_NumLock); 2957d522f475Smrg} 2958d522f475Smrg 2959d522f475Smrgvoid 2960d522f475Smrgupdate_alt_esc(void) 2961d522f475Smrg{ 2962d522f475Smrg UpdateCheckbox("update_alt_esc", 2963d522f475Smrg mainMenuEntries, 2964d522f475Smrg mainMenu_alt_esc, 296520d2c4d2Smrg TScreenOf(term)->alt_sends_esc); 2966d522f475Smrg} 2967d522f475Smrg 2968d522f475Smrgvoid 2969d522f475Smrgupdate_meta_esc(void) 2970d522f475Smrg{ 2971d522f475Smrg UpdateCheckbox("update_meta_esc", 2972d522f475Smrg mainMenuEntries, 2973d522f475Smrg mainMenu_meta_esc, 297420d2c4d2Smrg TScreenOf(term)->meta_sends_esc); 2975d522f475Smrg} 2976d522f475Smrg#endif 2977d522f475Smrg 2978d522f475Smrg#if OPT_SUN_FUNC_KEYS 2979d522f475Smrgvoid 2980d522f475Smrgupdate_sun_fkeys(void) 2981d522f475Smrg{ 2982d522f475Smrg UpdateCheckbox("update_sun_fkeys", 2983d522f475Smrg mainMenuEntries, 2984d522f475Smrg mainMenu_sun_fkeys, 2985d522f475Smrg term->keyboard.type == keyboardIsSun); 2986d522f475Smrg} 2987d522f475Smrg#endif 2988d522f475Smrg 2989d522f475Smrg#if OPT_TCAP_FKEYS 2990d522f475Smrgvoid 2991d522f475Smrgupdate_tcap_fkeys(void) 2992d522f475Smrg{ 2993d522f475Smrg UpdateCheckbox("update_tcap_fkeys", 2994d522f475Smrg mainMenuEntries, 2995d522f475Smrg mainMenu_tcap_fkeys, 2996d522f475Smrg term->keyboard.type == keyboardIsTermcap); 2997d522f475Smrg} 2998d522f475Smrg#endif 2999d522f475Smrg 3000d522f475Smrgvoid 3001d522f475Smrgupdate_old_fkeys(void) 3002d522f475Smrg{ 3003d522f475Smrg UpdateCheckbox("update_old_fkeys", 3004d522f475Smrg mainMenuEntries, 3005d522f475Smrg mainMenu_old_fkeys, 3006d522f475Smrg term->keyboard.type == keyboardIsLegacy); 3007d522f475Smrg} 3008d522f475Smrg 3009d522f475Smrgvoid 3010d522f475Smrgupdate_delete_del(void) 3011d522f475Smrg{ 3012d522f475Smrg UpdateCheckbox("update_delete_del", 3013d522f475Smrg mainMenuEntries, 3014d522f475Smrg mainMenu_delete_del, 3015d522f475Smrg xtermDeleteIsDEL(term)); 3016d522f475Smrg} 3017d522f475Smrg 3018d522f475Smrg#if OPT_SUNPC_KBD 3019d522f475Smrgvoid 3020d522f475Smrgupdate_sun_kbd(void) 3021d522f475Smrg{ 3022d522f475Smrg UpdateCheckbox("update_sun_kbd", 3023d522f475Smrg mainMenuEntries, 3024d522f475Smrg mainMenu_sun_kbd, 3025d522f475Smrg term->keyboard.type == keyboardIsVT220); 3026d522f475Smrg} 3027d522f475Smrg#endif 3028d522f475Smrg 3029d522f475Smrg#if OPT_HP_FUNC_KEYS 3030d522f475Smrgvoid 3031d522f475Smrgupdate_hp_fkeys(void) 3032d522f475Smrg{ 3033d522f475Smrg UpdateCheckbox("update_hp_fkeys", 3034d522f475Smrg mainMenuEntries, 3035d522f475Smrg mainMenu_hp_fkeys, 3036d522f475Smrg term->keyboard.type == keyboardIsHP); 3037d522f475Smrg} 3038d522f475Smrg#endif 3039d522f475Smrg 3040d522f475Smrg#if OPT_SCO_FUNC_KEYS 3041d522f475Smrgvoid 3042d522f475Smrgupdate_sco_fkeys(void) 3043d522f475Smrg{ 3044d522f475Smrg UpdateCheckbox("update_sco_fkeys", 3045d522f475Smrg mainMenuEntries, 3046d522f475Smrg mainMenu_sco_fkeys, 3047d522f475Smrg term->keyboard.type == keyboardIsSCO); 3048d522f475Smrg} 3049d522f475Smrg#endif 3050d522f475Smrg 3051d522f475Smrgvoid 3052d522f475Smrgupdate_scrollbar(void) 3053d522f475Smrg{ 3054d522f475Smrg UpdateCheckbox("update_scrollbar", 3055d522f475Smrg vtMenuEntries, 3056d522f475Smrg vtMenu_scrollbar, 3057d522f475Smrg ScrollbarWidth(TScreenOf(term))); 3058d522f475Smrg} 3059d522f475Smrg 3060d522f475Smrgvoid 3061d522f475Smrgupdate_jumpscroll(void) 3062d522f475Smrg{ 3063d522f475Smrg UpdateCheckbox("update_jumpscroll", 3064d522f475Smrg vtMenuEntries, 3065d522f475Smrg vtMenu_jumpscroll, 306620d2c4d2Smrg TScreenOf(term)->jumpscroll); 3067d522f475Smrg} 3068d522f475Smrg 3069d522f475Smrgvoid 3070d522f475Smrgupdate_reversevideo(void) 3071d522f475Smrg{ 3072d522f475Smrg UpdateCheckbox("update_reversevideo", 3073d522f475Smrg vtMenuEntries, 3074d522f475Smrg vtMenu_reversevideo, 3075d522f475Smrg (term->misc.re_verse)); 3076d522f475Smrg} 3077d522f475Smrg 3078d522f475Smrgvoid 3079d522f475Smrgupdate_autowrap(void) 3080d522f475Smrg{ 3081d522f475Smrg UpdateCheckbox("update_autowrap", 3082d522f475Smrg vtMenuEntries, 3083d522f475Smrg vtMenu_autowrap, 3084d522f475Smrg (term->flags & WRAPAROUND) != 0); 3085d522f475Smrg} 3086d522f475Smrg 3087d522f475Smrgvoid 3088d522f475Smrgupdate_reversewrap(void) 3089d522f475Smrg{ 3090d522f475Smrg UpdateCheckbox("update_reversewrap", 3091d522f475Smrg vtMenuEntries, 3092d522f475Smrg vtMenu_reversewrap, 3093d522f475Smrg (term->flags & REVERSEWRAP) != 0); 3094d522f475Smrg} 3095d522f475Smrg 3096d522f475Smrgvoid 3097d522f475Smrgupdate_autolinefeed(void) 3098d522f475Smrg{ 3099d522f475Smrg UpdateCheckbox("update_autolinefeed", 3100d522f475Smrg vtMenuEntries, 3101d522f475Smrg vtMenu_autolinefeed, 3102d522f475Smrg (term->flags & LINEFEED) != 0); 3103d522f475Smrg} 3104d522f475Smrg 3105d522f475Smrgvoid 3106d522f475Smrgupdate_appcursor(void) 3107d522f475Smrg{ 3108d522f475Smrg UpdateCheckbox("update_appcursor", 3109d522f475Smrg vtMenuEntries, 3110d522f475Smrg vtMenu_appcursor, 3111d522f475Smrg (term->keyboard.flags & MODE_DECCKM) != 0); 3112d522f475Smrg} 3113d522f475Smrg 3114d522f475Smrgvoid 3115d522f475Smrgupdate_appkeypad(void) 3116d522f475Smrg{ 3117d522f475Smrg UpdateCheckbox("update_appkeypad", 3118d522f475Smrg vtMenuEntries, 3119d522f475Smrg vtMenu_appkeypad, 3120d522f475Smrg (term->keyboard.flags & MODE_DECKPAM) != 0); 3121d522f475Smrg} 3122d522f475Smrg 3123d522f475Smrgvoid 3124d522f475Smrgupdate_scrollkey(void) 3125d522f475Smrg{ 3126d522f475Smrg UpdateCheckbox("update_scrollkey", 3127d522f475Smrg vtMenuEntries, 3128d522f475Smrg vtMenu_scrollkey, 312920d2c4d2Smrg TScreenOf(term)->scrollkey); 3130d522f475Smrg} 3131d522f475Smrg 3132d522f475Smrgvoid 3133d522f475Smrgupdate_scrollttyoutput(void) 3134d522f475Smrg{ 3135d522f475Smrg UpdateCheckbox("update_scrollttyoutput", 3136d522f475Smrg vtMenuEntries, 3137d522f475Smrg vtMenu_scrollttyoutput, 313820d2c4d2Smrg TScreenOf(term)->scrollttyoutput); 3139d522f475Smrg} 3140d522f475Smrg 3141d522f475Smrgvoid 3142d522f475Smrgupdate_keepSelection(void) 3143d522f475Smrg{ 3144d522f475Smrg UpdateCheckbox("update_keepSelection", 3145d522f475Smrg vtMenuEntries, 3146d522f475Smrg vtMenu_keepSelection, 314720d2c4d2Smrg TScreenOf(term)->keepSelection); 3148d522f475Smrg} 3149d522f475Smrg 3150d522f475Smrgvoid 3151d522f475Smrgupdate_selectToClipboard(void) 3152d522f475Smrg{ 3153d522f475Smrg UpdateCheckbox("update_selectToClipboard", 3154d522f475Smrg vtMenuEntries, 3155d522f475Smrg vtMenu_selectToClipboard, 315620d2c4d2Smrg TScreenOf(term)->selectToClipboard); 3157d522f475Smrg} 3158d522f475Smrg 3159d522f475Smrgvoid 3160d522f475Smrgupdate_allow132(void) 3161d522f475Smrg{ 3162d522f475Smrg UpdateCheckbox("update_allow132", 3163d522f475Smrg vtMenuEntries, 3164d522f475Smrg vtMenu_allow132, 316520d2c4d2Smrg TScreenOf(term)->c132); 3166d522f475Smrg} 3167d522f475Smrg 3168d522f475Smrgvoid 3169d522f475Smrgupdate_cursesemul(void) 3170d522f475Smrg{ 3171d522f475Smrg#if 0 /* 2006-2-12: no longer menu entry */ 3172d522f475Smrg UpdateMenuItem("update_cursesemul", vtMenuEntries, vtMenu_cursesemul, 317320d2c4d2Smrg TScreenOf(term)->curses); 3174d522f475Smrg#endif 3175d522f475Smrg} 3176d522f475Smrg 3177d522f475Smrgvoid 3178d522f475Smrgupdate_visualbell(void) 3179d522f475Smrg{ 3180d522f475Smrg UpdateCheckbox("update_visualbell", 3181d522f475Smrg vtMenuEntries, 3182d522f475Smrg vtMenu_visualbell, 318320d2c4d2Smrg TScreenOf(term)->visualbell); 3184d522f475Smrg} 3185d522f475Smrg 3186d522f475Smrgvoid 3187d522f475Smrgupdate_bellIsUrgent(void) 3188d522f475Smrg{ 3189d522f475Smrg UpdateCheckbox("update_bellIsUrgent", 3190d522f475Smrg vtMenuEntries, 3191d522f475Smrg vtMenu_bellIsUrgent, 319220d2c4d2Smrg TScreenOf(term)->bellIsUrgent); 3193d522f475Smrg} 3194d522f475Smrg 3195d522f475Smrgvoid 3196d522f475Smrgupdate_poponbell(void) 3197d522f475Smrg{ 3198d522f475Smrg UpdateCheckbox("update_poponbell", 3199d522f475Smrg vtMenuEntries, 3200d522f475Smrg vtMenu_poponbell, 320120d2c4d2Smrg TScreenOf(term)->poponbell); 3202d522f475Smrg} 3203d522f475Smrg 3204d522f475Smrg#ifndef update_marginbell /* 2007-3-7: no longer menu entry */ 3205d522f475Smrgvoid 3206d522f475Smrgupdate_marginbell(void) 3207d522f475Smrg{ 3208d522f475Smrg UpdateCheckbox("update_marginbell", 3209d522f475Smrg vtMenuEntries, 3210d522f475Smrg vtMenu_marginbell, 321120d2c4d2Smrg TScreenOf(term)->marginbell); 3212d522f475Smrg} 3213d522f475Smrg#endif 3214d522f475Smrg 3215d522f475Smrg#if OPT_BLINK_CURS 3216d522f475Smrgvoid 3217d522f475Smrgupdate_cursorblink(void) 3218d522f475Smrg{ 3219d522f475Smrg UpdateCheckbox("update_cursorblink", 3220d522f475Smrg vtMenuEntries, 3221d522f475Smrg vtMenu_cursorblink, 322220d2c4d2Smrg TScreenOf(term)->cursor_blink); 3223d522f475Smrg} 3224d522f475Smrg#endif 3225d522f475Smrg 3226d522f475Smrgvoid 3227d522f475Smrgupdate_altscreen(void) 3228d522f475Smrg{ 3229d522f475Smrg UpdateCheckbox("update_altscreen", 3230d522f475Smrg vtMenuEntries, 3231d522f475Smrg vtMenu_altscreen, 323220d2c4d2Smrg TScreenOf(term)->whichBuf); 3233d522f475Smrg} 3234d522f475Smrg 3235d522f475Smrgvoid 3236d522f475Smrgupdate_titeInhibit(void) 3237d522f475Smrg{ 3238d522f475Smrg UpdateCheckbox("update_titeInhibit", 3239d522f475Smrg vtMenuEntries, 3240d522f475Smrg vtMenu_titeInhibit, 3241d522f475Smrg !(term->misc.titeInhibit)); 3242d522f475Smrg} 3243d522f475Smrg 3244d522f475Smrg#ifndef NO_ACTIVE_ICON 3245d522f475Smrgvoid 3246d522f475Smrgupdate_activeicon(void) 3247d522f475Smrg{ 3248d522f475Smrg UpdateCheckbox("update_activeicon", 3249d522f475Smrg vtMenuEntries, 3250d522f475Smrg vtMenu_activeicon, 3251d522f475Smrg term->misc.active_icon); 3252d522f475Smrg} 3253d522f475Smrg#endif /* NO_ACTIVE_ICON */ 3254d522f475Smrg 3255d522f475Smrg#if OPT_DEC_CHRSET 3256d522f475Smrgvoid 3257d522f475Smrgupdate_font_doublesize(void) 3258d522f475Smrg{ 3259d522f475Smrg UpdateCheckbox("update_font_doublesize", 3260d522f475Smrg fontMenuEntries, 3261d522f475Smrg fontMenu_font_doublesize, 326220d2c4d2Smrg TScreenOf(term)->font_doublesize); 3263d522f475Smrg} 3264d522f475Smrg#endif 3265d522f475Smrg 3266d522f475Smrg#if OPT_BOX_CHARS 3267d522f475Smrgvoid 3268d522f475Smrgupdate_font_boxchars(void) 3269d522f475Smrg{ 3270d522f475Smrg UpdateCheckbox("update_font_boxchars", 3271d522f475Smrg fontMenuEntries, 3272d522f475Smrg fontMenu_font_boxchars, 327320d2c4d2Smrg TScreenOf(term)->force_box_chars); 327420d2c4d2Smrg} 327520d2c4d2Smrg 327620d2c4d2Smrgvoid 327720d2c4d2Smrgupdate_font_packed(void) 327820d2c4d2Smrg{ 327920d2c4d2Smrg UpdateCheckbox("update_font_packed", 328020d2c4d2Smrg fontMenuEntries, 328120d2c4d2Smrg fontMenu_font_packedfont, 328220d2c4d2Smrg TScreenOf(term)->force_packed); 3283d522f475Smrg} 3284d522f475Smrg#endif 3285d522f475Smrg 3286d522f475Smrg#if OPT_DEC_SOFTFONT 3287d522f475Smrgvoid 3288d522f475Smrgupdate_font_loadable(void) 3289d522f475Smrg{ 3290d522f475Smrg UpdateCheckbox("update_font_loadable", 3291d522f475Smrg fontMenuEntries, 3292d522f475Smrg fontMenu_font_loadable, 3293d522f475Smrg term->misc.font_loadable); 3294d522f475Smrg} 3295d522f475Smrg#endif 3296d522f475Smrg 3297d522f475Smrg#if OPT_RENDERFONT 3298d522f475Smrgvoid 3299d522f475Smrgupdate_font_renderfont(void) 3300d522f475Smrg{ 3301d522f475Smrg UpdateCheckbox("update_font_renderfont", 3302d522f475Smrg fontMenuEntries, 3303d522f475Smrg fontMenu_render_font, 330420d2c4d2Smrg (term->misc.render_font == True)); 330520d2c4d2Smrg SetItemSensitivity(fontMenuEntries[fontMenu_render_font].widget, 330620d2c4d2Smrg !IsEmpty(term->misc.face_name)); 3307d522f475Smrg} 3308d522f475Smrg#endif 3309d522f475Smrg 3310d522f475Smrg#if OPT_WIDE_CHARS 3311d522f475Smrgvoid 3312d522f475Smrgupdate_font_utf8_mode(void) 3313d522f475Smrg{ 331420d2c4d2Smrg Bool active = (TScreenOf(term)->utf8_mode != uAlways); 331520d2c4d2Smrg Bool enable = (TScreenOf(term)->utf8_mode != uFalse); 3316d522f475Smrg 3317d522f475Smrg TRACE(("update_font_utf8_mode active %d, enable %d\n", active, enable)); 3318d522f475Smrg SetItemSensitivity(fontMenuEntries[fontMenu_wide_chars].widget, active); 3319d522f475Smrg UpdateCheckbox("update_font_utf8_mode", 3320d522f475Smrg fontMenuEntries, 3321d522f475Smrg fontMenu_wide_chars, 3322d522f475Smrg enable); 3323d522f475Smrg} 3324d522f475Smrg 3325d522f475Smrgvoid 3326d522f475Smrgupdate_font_utf8_title(void) 3327d522f475Smrg{ 332820d2c4d2Smrg Bool active = (TScreenOf(term)->utf8_mode != uFalse); 332920d2c4d2Smrg Bool enable = (TScreenOf(term)->utf8_title); 3330d522f475Smrg 3331d522f475Smrg TRACE(("update_font_utf8_title active %d, enable %d\n", active, enable)); 3332d522f475Smrg SetItemSensitivity(fontMenuEntries[fontMenu_wide_title].widget, active); 3333d522f475Smrg UpdateCheckbox("update_font_utf8_title", 3334d522f475Smrg fontMenuEntries, 3335d522f475Smrg fontMenu_wide_title, 3336d522f475Smrg enable); 3337d522f475Smrg} 3338d522f475Smrg#endif 3339d522f475Smrg 3340956cc18dSsnj#if OPT_ALLOW_XXX_OPS 3341956cc18dSsnjstatic void 3342956cc18dSsnjenable_allow_xxx_ops(Bool enable) 3343956cc18dSsnj{ 3344956cc18dSsnj SetItemSensitivity(fontMenuEntries[fontMenu_allowFontOps].widget, enable); 3345956cc18dSsnj SetItemSensitivity(fontMenuEntries[fontMenu_allowTcapOps].widget, enable); 3346956cc18dSsnj SetItemSensitivity(fontMenuEntries[fontMenu_allowTitleOps].widget, enable); 3347956cc18dSsnj SetItemSensitivity(fontMenuEntries[fontMenu_allowWindowOps].widget, enable); 3348956cc18dSsnj} 3349956cc18dSsnj 335020d2c4d2Smrgstatic void 335120d2c4d2Smrgdo_allowColorOps(Widget w, 335220d2c4d2Smrg XtPointer closure GCC_UNUSED, 335320d2c4d2Smrg XtPointer data GCC_UNUSED) 335420d2c4d2Smrg{ 335520d2c4d2Smrg XtermWidget xw = getXtermWidget(w); 335620d2c4d2Smrg if (xw != 0) { 335720d2c4d2Smrg ToggleFlag(TScreenOf(xw)->allowColorOps); 335820d2c4d2Smrg update_menu_allowColorOps(); 335920d2c4d2Smrg } 336020d2c4d2Smrg} 336120d2c4d2Smrg 3362956cc18dSsnjstatic void 3363956cc18dSsnjdo_allowFontOps(Widget w, 3364956cc18dSsnj XtPointer closure GCC_UNUSED, 3365956cc18dSsnj XtPointer data GCC_UNUSED) 3366956cc18dSsnj{ 3367956cc18dSsnj XtermWidget xw = getXtermWidget(w); 3368956cc18dSsnj if (xw != 0) { 336920d2c4d2Smrg ToggleFlag(TScreenOf(xw)->allowFontOps); 3370956cc18dSsnj update_menu_allowFontOps(); 3371956cc18dSsnj } 3372956cc18dSsnj} 3373956cc18dSsnj 3374956cc18dSsnjstatic void 3375956cc18dSsnjdo_allowTcapOps(Widget w, 3376956cc18dSsnj XtPointer closure GCC_UNUSED, 3377956cc18dSsnj XtPointer data GCC_UNUSED) 3378956cc18dSsnj{ 3379956cc18dSsnj XtermWidget xw = getXtermWidget(w); 3380956cc18dSsnj if (xw != 0) { 338120d2c4d2Smrg ToggleFlag(TScreenOf(xw)->allowTcapOps); 3382956cc18dSsnj update_menu_allowTcapOps(); 3383956cc18dSsnj } 3384956cc18dSsnj} 3385956cc18dSsnj 3386956cc18dSsnjstatic void 3387956cc18dSsnjdo_allowTitleOps(Widget w, 3388956cc18dSsnj XtPointer closure GCC_UNUSED, 3389956cc18dSsnj XtPointer data GCC_UNUSED) 3390956cc18dSsnj{ 3391956cc18dSsnj XtermWidget xw = getXtermWidget(w); 3392956cc18dSsnj if (xw != 0) { 339320d2c4d2Smrg ToggleFlag(TScreenOf(xw)->allowTitleOps); 3394956cc18dSsnj update_menu_allowTitleOps(); 3395956cc18dSsnj } 3396956cc18dSsnj} 3397956cc18dSsnj 3398956cc18dSsnjstatic void 3399956cc18dSsnjdo_allowWindowOps(Widget w, 3400956cc18dSsnj XtPointer closure GCC_UNUSED, 3401956cc18dSsnj XtPointer data GCC_UNUSED) 3402956cc18dSsnj{ 3403956cc18dSsnj XtermWidget xw = getXtermWidget(w); 3404956cc18dSsnj if (xw != 0) { 340520d2c4d2Smrg ToggleFlag(TScreenOf(xw)->allowWindowOps); 3406956cc18dSsnj update_menu_allowWindowOps(); 3407956cc18dSsnj } 3408956cc18dSsnj} 3409956cc18dSsnj 341020d2c4d2Smrgvoid 341120d2c4d2SmrgHandleAllowColorOps(Widget w, 341220d2c4d2Smrg XEvent * event GCC_UNUSED, 341320d2c4d2Smrg String * params, 341420d2c4d2Smrg Cardinal *param_count) 341520d2c4d2Smrg{ 341620d2c4d2Smrg HANDLE_VT_TOGGLE(allowColorOps); 341720d2c4d2Smrg} 341820d2c4d2Smrg 3419956cc18dSsnjvoid 3420956cc18dSsnjHandleAllowFontOps(Widget w, 3421956cc18dSsnj XEvent * event GCC_UNUSED, 3422956cc18dSsnj String * params, 3423956cc18dSsnj Cardinal *param_count) 3424956cc18dSsnj{ 342520d2c4d2Smrg HANDLE_VT_TOGGLE(allowFontOps); 3426956cc18dSsnj} 3427956cc18dSsnj 3428956cc18dSsnjvoid 3429956cc18dSsnjHandleAllowTcapOps(Widget w, 3430956cc18dSsnj XEvent * event GCC_UNUSED, 3431956cc18dSsnj String * params, 3432956cc18dSsnj Cardinal *param_count) 3433956cc18dSsnj{ 343420d2c4d2Smrg HANDLE_VT_TOGGLE(allowTcapOps); 3435956cc18dSsnj} 3436956cc18dSsnj 3437956cc18dSsnjvoid 3438956cc18dSsnjHandleAllowTitleOps(Widget w, 3439956cc18dSsnj XEvent * event GCC_UNUSED, 3440956cc18dSsnj String * params, 3441956cc18dSsnj Cardinal *param_count) 3442956cc18dSsnj{ 344320d2c4d2Smrg HANDLE_VT_TOGGLE(allowTitleOps); 3444956cc18dSsnj} 3445956cc18dSsnj 3446956cc18dSsnjvoid 3447956cc18dSsnjHandleAllowWindowOps(Widget w, 3448956cc18dSsnj XEvent * event GCC_UNUSED, 3449956cc18dSsnj String * params, 3450956cc18dSsnj Cardinal *param_count) 3451956cc18dSsnj{ 345220d2c4d2Smrg HANDLE_VT_TOGGLE(allowWindowOps); 3453956cc18dSsnj} 3454956cc18dSsnj 3455956cc18dSsnjvoid 345620d2c4d2Smrgupdate_menu_allowColorOps(void) 3457956cc18dSsnj{ 345820d2c4d2Smrg UpdateCheckbox("update_menu_allowColorOps", 3459956cc18dSsnj fontMenuEntries, 346020d2c4d2Smrg fontMenu_allowColorOps, 346120d2c4d2Smrg TScreenOf(term)->allowColorOps); 3462956cc18dSsnj} 3463956cc18dSsnj 3464956cc18dSsnjvoid 3465956cc18dSsnjupdate_menu_allowFontOps(void) 3466956cc18dSsnj{ 3467956cc18dSsnj UpdateCheckbox("update_menu_allowFontOps", 3468956cc18dSsnj fontMenuEntries, 3469956cc18dSsnj fontMenu_allowFontOps, 347020d2c4d2Smrg TScreenOf(term)->allowFontOps); 347120d2c4d2Smrg} 347220d2c4d2Smrg 347320d2c4d2Smrgvoid 347420d2c4d2Smrgupdate_menu_allowTcapOps(void) 347520d2c4d2Smrg{ 347620d2c4d2Smrg UpdateCheckbox("update_menu_allowTcapOps", 347720d2c4d2Smrg fontMenuEntries, 347820d2c4d2Smrg fontMenu_allowTcapOps, 347920d2c4d2Smrg TScreenOf(term)->allowTcapOps); 3480956cc18dSsnj} 3481956cc18dSsnj 3482956cc18dSsnjvoid 3483956cc18dSsnjupdate_menu_allowTitleOps(void) 3484956cc18dSsnj{ 3485956cc18dSsnj UpdateCheckbox("update_menu_allowTitleOps", 3486956cc18dSsnj fontMenuEntries, 3487956cc18dSsnj fontMenu_allowTitleOps, 348820d2c4d2Smrg TScreenOf(term)->allowTitleOps); 3489956cc18dSsnj} 3490956cc18dSsnj 3491956cc18dSsnjvoid 3492956cc18dSsnjupdate_menu_allowWindowOps(void) 3493956cc18dSsnj{ 3494956cc18dSsnj UpdateCheckbox("update_menu_allowWindowOps", 3495956cc18dSsnj fontMenuEntries, 3496956cc18dSsnj fontMenu_allowWindowOps, 349720d2c4d2Smrg TScreenOf(term)->allowWindowOps); 3498956cc18dSsnj} 3499956cc18dSsnj#endif 3500956cc18dSsnj 3501d522f475Smrg#if OPT_TEK4014 3502d522f475Smrgvoid 3503d522f475Smrgupdate_tekshow(void) 3504d522f475Smrg{ 350520d2c4d2Smrg if (!(TScreenOf(term)->inhibit & I_TEK)) { 3506d522f475Smrg UpdateCheckbox("update_tekshow", 3507d522f475Smrg vtMenuEntries, 3508d522f475Smrg vtMenu_tekshow, 3509d522f475Smrg TEK4014_SHOWN(term)); 3510d522f475Smrg } 3511d522f475Smrg} 3512d522f475Smrg 3513d522f475Smrgvoid 3514d522f475Smrgupdate_vttekmode(void) 3515d522f475Smrg{ 351620d2c4d2Smrg if (!(TScreenOf(term)->inhibit & I_TEK)) { 3517d522f475Smrg UpdateCheckbox("update_vtmode", 3518d522f475Smrg vtMenuEntries, 3519d522f475Smrg vtMenu_tekmode, 3520d522f475Smrg TEK4014_ACTIVE(term)); 3521d522f475Smrg UpdateCheckbox("update_tekmode", 3522d522f475Smrg tekMenuEntries, 3523d522f475Smrg tekMenu_vtmode, 3524d522f475Smrg !TEK4014_ACTIVE(term)); 3525d522f475Smrg } 3526d522f475Smrg} 3527d522f475Smrg 3528d522f475Smrgvoid 3529d522f475Smrgupdate_vtshow(void) 3530d522f475Smrg{ 353120d2c4d2Smrg if (!(TScreenOf(term)->inhibit & I_TEK)) { 3532d522f475Smrg UpdateCheckbox("update_vtshow", 3533d522f475Smrg tekMenuEntries, 3534d522f475Smrg tekMenu_vtshow, 353520d2c4d2Smrg TScreenOf(term)->Vshow); 3536d522f475Smrg } 3537d522f475Smrg} 3538d522f475Smrg 3539d522f475Smrgvoid 3540d522f475Smrgset_vthide_sensitivity(void) 3541d522f475Smrg{ 354220d2c4d2Smrg if (!(TScreenOf(term)->inhibit & I_TEK)) { 3543d522f475Smrg SetItemSensitivity( 3544d522f475Smrg vtMenuEntries[vtMenu_vthide].widget, 3545d522f475Smrg TEK4014_SHOWN(term)); 3546d522f475Smrg } 3547d522f475Smrg} 3548d522f475Smrg 3549d522f475Smrgvoid 3550d522f475Smrgset_tekhide_sensitivity(void) 3551d522f475Smrg{ 355220d2c4d2Smrg if (!(TScreenOf(term)->inhibit & I_TEK)) { 3553d522f475Smrg SetItemSensitivity( 3554d522f475Smrg tekMenuEntries[tekMenu_tekhide].widget, 355520d2c4d2Smrg TScreenOf(term)->Vshow); 3556d522f475Smrg } 3557d522f475Smrg} 3558d522f475Smrg 3559d522f475Smrgvoid 3560d522f475Smrgset_tekfont_menu_item(int n, int val) 3561d522f475Smrg{ 356220d2c4d2Smrg if (!(TScreenOf(term)->inhibit & I_TEK)) { 3563d522f475Smrg UpdateCheckbox("set_tekfont_menu_item", tekMenuEntries, FS2MI(n), 3564d522f475Smrg (val)); 3565d522f475Smrg } 3566d522f475Smrg} 3567d522f475Smrg#endif /* OPT_TEK4014 */ 3568d522f475Smrg 3569d522f475Smrgvoid 3570d522f475Smrgset_menu_font(int val) 3571d522f475Smrg{ 3572d522f475Smrg UpdateCheckbox("set_menu_font", 3573d522f475Smrg fontMenuEntries, 357420d2c4d2Smrg TScreenOf(term)->menu_font_number, 3575d522f475Smrg (val)); 3576d522f475Smrg} 3577