1
0
Fork 0
mirror of git://git.code.sf.net/p/cdesktopenv/code synced 2025-03-09 15:50:02 +00:00
cde/cde/lib/DtTerm/TermView/TermViewMenu.c
Patrick Georgi c48ec3adff lib/DtTerm: Remove dead assignments, initializations and increments
This shouldn't change behavior (or even object code) at all because
those assignments are all without effect. Removing that code removes
noise which helps working with code analysis tools.
2024-01-05 18:44:19 -07:00

1624 lines
46 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* CDE - Common Desktop Environment
*
* Copyright (c) 1993-2012, The Open Group. All rights reserved.
*
* These libraries and programs are free software; you can
* redistribute them and/or modify them under the terms of the GNU
* Lesser General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* These libraries and programs are distributed in the hope that
* they will be useful, but WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with these libraries and programs; if not, write
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
* Floor, Boston, MA 02110-1301 USA
*/
/* *
* (c) Copyright 1993, 1994, 1996 Hewlett-Packard Company *
* (c) Copyright 1993, 1994, 1996 International Business Machines Corp. *
* (c) Copyright 1993, 1994, 1996 Sun Microsystems, Inc. *
* (c) Copyright 1993, 1994, 1996 Novell, Inc. *
* (c) Copyright 1996 Digital Equipment Corporation. *
* (c) Copyright 1996 FUJITSU LIMITED. *
* (c) Copyright 1996 Hitachi. *
*/
#define PULLDOWN_ACCELERATORS
#define WINDOW_SIZE_TOGGLES
#include "TermHeader.h"
#include <string.h> /* for strdup */
#include <errno.h> /* for errno and sys_errlist[] */
#include <Xm/Xm.h>
#include <Xm/RowColumn.h>
#include <Xm/CascadeBG.h>
#include <Xm/ToggleBG.h>
#include <Xm/PushBG.h>
#include <Xm/LabelG.h>
#include <Xm/SeparatoG.h>
#include <Xm/SelectioB.h>
#include <X11/keysym.h>
#include "TermViewMenu.h"
#include "TermViewP.h"
#include "TermPrimFunction.h"
#include "TermViewGlobalDialog.h"
#include "TermViewTerminalDialog.h"
#include "TermPrimMessageCatI.h"
#include "TermPrimSelect.h"
#include "TermFunction.h"
static Widget currentWidget = (Widget ) 0;
/* widget for current menu
* context
*/
static Widget scrollBarToggle;
static Widget menuBarToggle;
static Widget *fontSizeToggles;
static int fontSizeTogglesDefault = -1;
#ifdef WINDOW_SIZE_TOGGLES
static Widget *windowSizeToggles;
#endif /* WINDOW_SIZE_TOGGLES */
static Widget newButton;
/* forward declarations...
*/
static Widget CreateMenu(Widget termView, Widget parent, Boolean menuBar,
Arg menuArglist[], int menuArgcount);
static void removeFromPostFromListCallback(Widget w, XtPointer client_data,
XtPointer call_data);
static void setContext(Widget w, XtPointer client_data, XtPointer call_data);
static void exitCallback(Widget w, XtPointer client_data, XtPointer call_data);
static void scrollBarToggleCallback(Widget w, XtPointer client_data,
XtPointer call_data);
static void menuBarToggleCallback(Widget w, XtPointer client_data,
XtPointer call_data);
static void cloneCallback(Widget w, XtPointer client_data,
XtPointer call_data);
#ifdef HPVUE
static void helpVersionCallback(Widget w, XtPointer client_data,
XtPointer call_data);
static void helpIntroCallback(Widget w, XtPointer client_data,
XtPointer call_data);
static void helpTasksCallback(Widget w, XtPointer client_data,
XtPointer call_data);
static void helpReferenceCallback(Widget w, XtPointer client_data,
XtPointer call_data);
static void helpOnHelpCallback(Widget w, XtPointer client_data,
XtPointer call_data);
#else /* HPVUE */
static void helpOverviewCallback(Widget w, XtPointer client_data,
XtPointer call_data);
static void helpTableOfContentsCallback(Widget w, XtPointer client_data,
XtPointer call_data);
static void helpTasksCallback(Widget w, XtPointer client_data,
XtPointer call_data);
static void helpReferenceCallback(Widget w, XtPointer client_data,
XtPointer call_data);
static void helpKeyboardCallback(Widget w, XtPointer client_data,
XtPointer call_data);
static void helpUsingHelpCallback(Widget w, XtPointer client_data,
XtPointer call_data);
static void helpAboutDttermCallback(Widget w, XtPointer client_data,
XtPointer call_data);
#endif /* HPVUE */
static void globalOptionsCallback(Widget w, XtPointer client_data,
XtPointer call_data);
static void terminalOptionsCallback(Widget w, XtPointer client_data,
XtPointer call_data);
static void sizeChangeCallback(Widget w, XtPointer client_data,
XtPointer call_data);
static void defaultSizeCallback(Widget w, XtPointer client_data,
XtPointer call_data);
static void fontChangeCallback(Widget w, XtPointer client_data,
XtPointer call_data);
static void defaultFontCallback(Widget w, XtPointer client_data,
XtPointer call_data);
static void softResetCallback(Widget w, XtPointer client_data,
XtPointer call_data);
static void hardResetCallback(Widget w, XtPointer client_data,
XtPointer call_data);
static void copyClipboardCallback(Widget w, XtPointer client_data,
XtPointer call_data);
static void pasteClipboardCallback(Widget w, XtPointer client_data,
XtPointer call_data);
/**************************************************************************/
#ifdef TOKEN_CALLBACK
static void
tokenCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
if (client_data) {
(void) printf("%s: button pressed\n", (char *) client_data);
}
}
#endif /* TOKEN_CALLBACK */
/*ARGSUSED*/
static void
postMenu(Widget w, XtPointer client_data, XEvent *event, Boolean *cont)
{
Widget popupMenu = (Widget) client_data;
/* now position and manage the menu... */
(void) XmMenuPosition(popupMenu, &event->xbutton);
(void) XtManageChild(popupMenu);
}
static Widget
createMenuWidget(WidgetClass widgetClass, char *callbackName,
Widget parent, Widget subMenuId, char *label, KeySym mnemonic,
char *accelerator, char *acceleratorText,
XtCallbackProc callback, XtPointer clientData)
{
Widget w;
XmString string;
XmString acceleratorString = (XmString) 0;
Arg arglist[20];
int i;
i = 0;
/* create the label string and stuff it... */
string = XmStringCreateLocalized(label);
(void) XtSetArg(arglist[i], XmNlabelString, string); i++;
/* if a mnemonic was specified, set the mnemonic and mnemonic charset... */
if (mnemonic != NoSymbol) {
(void) XtSetArg(arglist[i], XmNmnemonic, mnemonic); i++;
(void) XtSetArg(arglist[i], XmNmnemonicCharSet, XmFONTLIST_DEFAULT_TAG);
i++;
}
/* if an accelerator was specified, stuff it... */
if (accelerator && *accelerator) {
(void) XtSetArg(arglist[i], XmNaccelerator, accelerator); i++;
}
/* if acceleratorText was specified, create the XmString and stuff it... */
if (acceleratorText && *acceleratorText) {
acceleratorString = XmStringCreateLocalized(acceleratorText);
(void) XtSetArg(arglist[i], XmNacceleratorText, acceleratorString); i++;
}
/* if subMenuId was specified, stuff it... */
if (subMenuId) {
(void) XtSetArg(arglist[i], XmNsubMenuId, subMenuId); i++;
}
/* create the widget... */
w = XtCreateManagedWidget(label, widgetClass, parent, arglist, i);
if (callback) {
(void) XtAddCallback(w, callbackName, callback, clientData);
}
#ifdef TOKEN_CALLBACK
/*DKS -- this is to help debug the menu stuff... */
if (!strcmp(callbackName, XmNactivateCallback)) {
(void) XtAddCallback(w, callbackName, tokenCallback, strdup(label));
}
#endif /* TOKEN_CALLBACK */
/* free up storage... */
(void) XmStringFree(string);
if (acceleratorString)
(void) XmStringFree(acceleratorString);
/* return the widget... */
return(w);
}
Widget
_DtTermViewCreateCascadeButton(Widget parent, Widget subMenuId, char *label,
KeySym mnemonic, char *accelerator, char *acceleratorText,
XtCallbackProc callback, XtPointer clientData)
{
return(createMenuWidget(xmCascadeButtonGadgetClass, XmNactivateCallback,
parent, subMenuId, label, mnemonic, accelerator, acceleratorText,
callback, clientData));
}
Widget
_DtTermViewCreatePushButton(Widget parent, char *label, KeySym mnemonic,
char *accelerator, char *acceleratorText,
XtCallbackProc callback, XtPointer clientData)
{
return(createMenuWidget(xmPushButtonGadgetClass, XmNactivateCallback,
parent, NULL, label, mnemonic, accelerator, acceleratorText,
callback, clientData));
}
Widget
_DtTermViewCreateToggleButton(Widget parent, char *label, KeySym mnemonic,
char *accelerator, char *acceleratorText,
XtCallbackProc callback, XtPointer clientData)
{
return(createMenuWidget(xmToggleButtonGadgetClass, XmNvalueChangedCallback,
parent, NULL, label, mnemonic, accelerator, acceleratorText,
callback, clientData));
}
Widget
_DtTermViewCreateLabel(Widget parent, char *label)
{
return(createMenuWidget(xmLabelGadgetClass, NULL,
parent, NULL, label, 0, NULL, NULL, NULL, NULL));
}
Widget
_DtTermViewCreateSeparator(Widget parent, char *label)
{
return(createMenuWidget(xmSeparatorGadgetClass, NULL,
parent, NULL, label, 0, NULL, NULL, NULL, NULL));
}
static Widget
createPulldown(Widget parent, char *name, Arg *arglist, int argcnt)
{
Widget w;
w = XmCreatePulldownMenu(parent, name, arglist, argcnt);
(void) XtAddCallback(w, XmNmapCallback, setContext, (XtPointer) NULL);
return(w);
}
/*ARGSUSED*/
static void
removeFromPostFromListCallback(Widget w, XtPointer client_data,
XtPointer call_data)
{
(void) XmRemoveFromPostFromList((Widget) client_data, w);
}
static char *
mallocGETMESSAGE(int msgset, int msg, char *defaultString)
{
char *c1;
char *c2;
c2 = GETMESSAGE(msgset, msg, defaultString);
c1 = XtMalloc(strlen(c2) + 1);
(void) strcpy(c1, c2);
return(c1);
}
static void
createSizeMenu
(
Widget w,
Widget menu
)
{
DtTermViewWidget tw = (DtTermViewWidget) w;
Widget submenu;
Widget button;
long i1;
char *c1;
char *c2;
#ifdef NOTDEF
char mnemonics[BUFSIZ];
#endif /* NOTDEF */
char buffer[BUFSIZ];
KeySym ks;
Arg al[20];
int ac;
ac = 0;
(void) XtSetArg(al[ac], XmNradioBehavior, True); ac++;
submenu = createPulldown(menu, "Window Size", al, ac);
#ifdef NOTDEF
/* clear out mnemonics string... */
*mnemonics = '\0';
c1 = mnemonics;
#endif /* NOTDEF */
/* create the size buttons... */
#ifdef WINDOW_SIZE_TOGGLES
windowSizeToggles = (Widget *)
XtMalloc((1 + tw->termview.sizeList.numSizes) *sizeof(Widget));
#endif /* WINDOW_SIZE_TOGGLES */
for (i1 = 0; i1 < tw->termview.sizeList.numSizes; i1++) {
*buffer = '\0';
if (tw->termview.sizeList.sizes[i1].columns > 0) {
(void) sprintf(buffer + strlen(buffer), "%hd",
tw->termview.sizeList.sizes[i1].columns);
}
(void) strcat(buffer, "x");
if (tw->termview.sizeList.sizes[i1].rows > 0) {
(void) sprintf(buffer + strlen(buffer), "%hd",
tw->termview.sizeList.sizes[i1].rows);
}
#ifdef NOTDEF
for (c2 = buffer; *c2; c2++) {
if (!strchr(mnemonics, *c2) && !isspace(*c2)) {
break;
}
}
if (*c2) {
/* add it to the mnemonics list... */
*c1++ = *c2;
ks = XK_A + *c2 - 'A';
} else {
ks = NULL;
}
#endif
#ifdef WINDOW_SIZE_TOGGLES
windowSizeToggles[i1] = _DtTermViewCreateToggleButton(submenu, buffer,
0, NULL, NULL, sizeChangeCallback, (XtPointer) i1);
#else /* WINDOW_SIZE_TOGGLES */
button = _DtTermViewCreatePushButton(submenu, buffer,
0, NULL, NULL, sizeChangeCallback, (XtPointer) i1);
#endif /* WINDOW_SIZE_TOGGLES */
}
/* get a mnemonic for "Default"... */
snprintf(buffer, sizeof(buffer), "%s", (GETMESSAGE(NL_SETN_ViewMenu,1, "Default")));
#ifdef NOTDEF
for (c2 = buffer; *c2; c2++) {
if (!strchr(mnemonics, *c2) && !isspace(*c2))
break;
}
if (*c2) {
/* add it to the mnemonics list... */
*c1++ = *c2;
ks = XK_A + *c2 - 'A';
} else {
ks = NULL;
}
#endif
#ifdef WINDOW_SIZE_TOGGLES
windowSizeToggles[i1] = _DtTermViewCreateToggleButton(submenu, buffer,
0, NULL, NULL, defaultSizeCallback, NULL);
#else /* WINDOW_SIZE_TOGGLES */
button = _DtTermViewCreatePushButton(submenu, buffer,
0, NULL, NULL, defaultSizeCallback, NULL);
#endif /* WINDOW_SIZE_TOGGLES */
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,3, "W"));
(void) _DtTermViewCreateCascadeButton(menu,
submenu, (GETMESSAGE(NL_SETN_ViewMenu,2, "Window Size")),
ks,
NULL, NULL, NULL, NULL);
}
extern char _DtTermViewMenuDefaultFonts[];
typedef struct _fontArrayType {
char *labelName;
char *fontName;
XmFontList fontList;
} fontArrayType;
static fontArrayType *fontArray = (fontArrayType *) 0;
static short fontArrayCount = 0;
static void
createFontMenu
(
Widget w,
Widget menu
)
{
DtTermViewWidget tw = (DtTermViewWidget) w;
Widget submenu;
Widget button;
long i1;
int i2;
char *c1;
char *c2;
char mnemonics[BUFSIZ];
char buffer[BUFSIZ];
char fontName[BUFSIZ];
KeySym ks;
int dpi;
char **fontNames;
int fontNameCount;
float pointSize;
Arg al[20];
int ac;
if (!tw->termview.userFontList || !*tw->termview.userFontList) {
tw->termview.userFontList = _DtTermViewMenuDefaultFonts;
}
/* calculate dots per inch... */
dpi = HeightOfScreen(XtScreen(w)) / (HeightMMOfScreen(XtScreen(w)) / 25.4);
ac = 0;
(void) XtSetArg(al[ac], XmNradioBehavior, True); ac++;
submenu = createPulldown(menu, "Font Size", al, ac);
/* find out how many newlines there are in the userFontList so
* that we can build an array big enough to hold them...
*/
for (i1 = 1, c1 = tw->termview.userFontList; *c1; ) {
if (*c1++ == '\n') {
(void) i1++;
}
}
/* malloc out an array... */
fontArray = (fontArrayType *) XtMalloc(sizeof(fontArrayType) *
i1);
for (i1 = 0, c1 = tw->termview.userFontList; *c1; ) {
/* copy over the userFontList up to the end, or a newline... */
for (c2 = buffer; *c1 && (*c1 != '\n'); ) {
*c2++ = *c1++;
}
/* null term the copy and skip over the newline... */
*c2++ = '\0';
if (*c1 == '\n') {
(void) c1++;
}
/* if this entry is empty, skip it... */
if (!*buffer) {
continue;
}
fontArray[i1].labelName = XtMalloc(strlen(buffer) + 1);
(void) strcpy(fontArray[i1].labelName, buffer);
/* look for a separating '/'... */
if ((c2 = strchr(fontArray[i1].labelName, '/'))) {
/* found, null it out... */
*c2++ = '\0';
/* and assign it to the fontName... */
fontArray[i1].fontName = c2;
} else {
/* calculate the pixelsize for the font... */
fontArray[i1].fontName = fontArray[i1].labelName;
(void) strcpy(fontName, fontArray[i1].labelName);
/* clear out the .labelName... */
fontArray[i1].labelName = (char *) 0;
/* is it a fontset?... */
if (fontName[strlen(fontName) - 1] == ':') {
/* let's turn in into an iso8859-1 name for the query... */
fontName[strlen(fontName) - 1] = '\0';
/* strip off a '-' before the ':' (should not have been
* one, but)...
*/
if (fontName[strlen(fontName) - 1] == '-') {
fontName[strlen(fontName) - 1] = '\0';
}
(void) strcat(fontName, (GETMESSAGE(NL_SETN_ViewMenu,4, "-iso8859-1")));
}
if ((fontNames =
XListFonts(XtDisplay(w), fontName, 1, &fontNameCount))) {
c2 = *fontNames;
for (i2 = 0; i2 < 7; i2++) {
while (*c2 && (*c2 != '-')) {
c2++;
}
if (!*c2) {
break;
}
/* skip over the '-'... */
(void) c2++;
}
if (i2 == 7) {
pointSize = ((float) strtol(c2, (char **) 0, 0)) *
72 / dpi;
/* this was taken from the style manager... */
if (dpi <= 72) {
/* whole points... */
(void) sprintf(fontName, (GETMESSAGE(NL_SETN_ViewMenu,5, "%d point")),
(int) (pointSize + 0.5));
} else if (dpi <= 144) {
/* half points... */
(void) sprintf(fontName, (GETMESSAGE(NL_SETN_ViewMenu,6, "%.1f point")),
((int) (pointSize * 2.0 + 0.5)) / 2.0);
} else if (dpi <= 720) {
/* tenth point... */
(void) sprintf(fontName, (GETMESSAGE(NL_SETN_ViewMenu,7, "%.1f point")),
((int) (pointSize * 10.0 + 0.5)) / 10.0);
} else {
/* hundredth point... */
(void) sprintf(fontName, (GETMESSAGE(NL_SETN_ViewMenu,8, "%.2f point")),
((int) (pointSize * 100.0 + 0.5)) / 100.0);
}
fontArray[i1].labelName = XtMalloc(strlen(fontName) + 1);
(void) strcpy(fontArray[i1].labelName, fontName);
}
/* free up the fontNames... */
(void) XFreeFontNames(fontNames);
}
if (!fontArray[i1].labelName) {
fontArray[i1].labelName = fontArray[i1].fontName;
}
}
/* bump the count... */
(void) i1++;
}
/* we have our list... */
fontArrayCount = i1;
/* clear out mnemonics string... */
*mnemonics = '\0';
/* create the font buttons... */
fontSizeToggles = (Widget *) XtMalloc((fontArrayCount + 1) * sizeof(Widget));
for (i1 = 0; i1 < fontArrayCount; i1++) {
#ifdef NOTDEF
for (c2 = fontArray[i1].labelName; *c2; c2++) {
if (!strchr(mnemonics, *c2) && !isspace(*c2))
break;
}
if (*c2) {
/* add it to the mnemonics list... */
*c1++ = *c2;
ks = XK_A + *c2 - 'A';
} else {
ks = NULL;
}
#endif
fontSizeToggles[i1] = _DtTermViewCreateToggleButton(submenu,
fontArray[i1].labelName,
0, NULL, NULL, fontChangeCallback, (XtPointer) i1);
}
snprintf(buffer, sizeof(buffer), "%s", (GETMESSAGE(NL_SETN_ViewMenu,9, "Default")));
fontSizeToggles[i1] = _DtTermViewCreateToggleButton(submenu, buffer,
0, NULL, NULL, defaultFontCallback, NULL);
fontSizeTogglesDefault = i1;
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,11, "F"));
(void) _DtTermViewCreateCascadeButton(menu, submenu,
(GETMESSAGE(NL_SETN_ViewMenu,10, "Font Size")),
ks,
NULL, NULL, NULL, NULL);
}
#define numPulldowns 5
static Widget
CreateMenu(Widget termView, Widget parent, Boolean menuBar,
Arg menuArglist[], int menuArgcount)
{
Widget menu;
Widget cascade;
static Widget topLevel = (Widget) 0;
static Boolean first = True;
static Boolean firstPopup = True;
static Widget pulldown[numPulldowns];
static Widget popupMenu = (Widget) 0;
int pc;
Widget button;
Widget submenu;
Arg arglist[20];
Arg *newArglist;
int i;
KeySym ks = NoSymbol;
char *accelerator;
char *acceleratorText;
/* if this is the first time, we will need a topLevel widget... */
if (first) {
i = 0;
topLevel = XtAppCreateShell((char *) 0, "Dtterm",
applicationShellWidgetClass, XtDisplay(parent), arglist, i);
}
newArglist = (Arg *) XtMalloc((menuArgcount + 1) * sizeof(Arg));
for (i = 0; i < menuArgcount; i++) {
newArglist[i].name = menuArglist[i].name;
newArglist[i].value = menuArglist[i].value;
}
if (menuBar) {
/* we will create the menubar unmanaged so that our parent can mange
* it when it wants to...
*/
menu = XmCreateMenuBar(parent, "menu_pulldown", newArglist, i);
} else {
if (firstPopup) {
popupMenu = XmCreatePopupMenu(topLevel, "menu_popup", newArglist,
i);
}
menu = popupMenu;
(void) _DtTermViewCreateLabel(menu,
(GETMESSAGE(NL_SETN_ViewMenu,83, "Terminal")));
(void) _DtTermViewCreateSeparator(menu, "Separator");
}
(void) XtFree((char *) newArglist);
pc = 0;
if (first) {
/* create the "Window" pulldown... */
i = 0;
pulldown[pc] = createPulldown(topLevel, "Window", arglist, i);
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,13, "N"));
newButton = _DtTermViewCreatePushButton(pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,12, "New")),
ks,
NULL, NULL, cloneCallback, NULL);
#ifdef NOTDEF
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,15, "P"));
button = _DtTermViewCreatePushButton(pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,14, "Print")),
ks,
NULL, NULL, NULL, NULL);
(void) XtSetSensitive(button, False);
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,17, "r"));
button = _DtTermViewCreatePushButton(pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,16, "Print...")),
ks,
NULL, NULL, NULL, NULL);
(void) XtSetSensitive(button, False);
#endif /* NOTDEF */
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,19, "C"));
accelerator = mallocGETMESSAGE(NL_SETN_ViewMenu,62, "Alt F4");
acceleratorText = mallocGETMESSAGE(NL_SETN_ViewMenu,62, "Alt+F4");
(void) _DtTermViewCreatePushButton(pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,18, "Close")),
ks,
accelerator,
acceleratorText,
exitCallback, NULL);
(void) XtFree(accelerator);
(void) XtFree(acceleratorText);
}
if (menuBar || (!menuBar && firstPopup))
#ifdef PULLDOWN_ACCELERATORS
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,21, "W"));
(void) _DtTermViewCreateCascadeButton(menu, pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,20, "Window")),
ks,
NULL, NULL, NULL, NULL);
#else /* PULLDOWN_ACCELERATORS */
(void) _DtTermViewCreateCascadeButton(menu, pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,20, "Window")),
NoSymbol, NULL, NULL, NULL, NULL);
#endif /* PULLDOWN_ACCELERATORS */
(void) pc++;
if (first) {
i = 0;
pulldown[pc] = createPulldown(topLevel, "Edit", arglist, i);
accelerator = mallocGETMESSAGE(NL_SETN_ViewMenu,24,
"Ctrl <Key>osfInsert");
acceleratorText = mallocGETMESSAGE(NL_SETN_ViewMenu,25, "Ctrl+Insert");
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,23, "C"));
(void) _DtTermViewCreatePushButton(pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,22, "Copy")),
ks,
accelerator,
acceleratorText,
copyClipboardCallback, NULL);
(void) XtFree(accelerator);
(void) XtFree(acceleratorText);
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,27, "P"));
accelerator = mallocGETMESSAGE(NL_SETN_ViewMenu,28,
"Shift <Key>osfInsert");
acceleratorText = mallocGETMESSAGE(NL_SETN_ViewMenu,29, "Shift+Insert");
(void) _DtTermViewCreatePushButton(pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,26, "Paste")),
ks,
accelerator,
acceleratorText,
pasteClipboardCallback, NULL);
(void) XtFree(accelerator);
(void) XtFree(acceleratorText);
}
if (menuBar || (!menuBar && firstPopup))
#ifdef PULLDOWN_ACCELERATORS
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,31, "E"));
(void) _DtTermViewCreateCascadeButton(menu, pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,30, "Edit")),
ks,
NULL, NULL, NULL, NULL);
#else /* PULLDOWN_ACCELERATORS */
(void) _DtTermViewCreateCascadeButton(menu, pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,30, "Edit")),
NoSymbol, NULL, NULL, NULL, NULL);
#endif /* PULLDOWN_ACCELERATORS */
(void) pc++;
if (first) {
i = 0;
pulldown[pc] = createPulldown(topLevel, "Options", arglist, i);
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,33, "M"));
menuBarToggle = _DtTermViewCreateToggleButton(pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,32, "Menu Bar")),
ks,
NULL, NULL, menuBarToggleCallback, NULL);
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,35, "S"));
scrollBarToggle = _DtTermViewCreateToggleButton(pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,34, "Scroll Bar")),
ks,
NULL, NULL, scrollBarToggleCallback, NULL);
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,37, "G"));
(void) _DtTermViewCreatePushButton(pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,36, "Global...")),
ks,
NULL, NULL, globalOptionsCallback, NULL);
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,39, "T"));
(void) _DtTermViewCreatePushButton(pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,38, "Terminal...")),
ks,
NULL, NULL, terminalOptionsCallback, NULL);
(void) createSizeMenu(termView, pulldown[pc]);
(void) createFontMenu(termView, pulldown[pc]);
i = 0;
submenu = createPulldown(pulldown[pc], "Reset", arglist, i);
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,41, "S"));
(void)_DtTermViewCreatePushButton(submenu,
(GETMESSAGE(NL_SETN_ViewMenu,40, "Soft Reset")),
ks,
NULL, NULL, softResetCallback, NULL);
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,43, "H"));
(void)_DtTermViewCreatePushButton(submenu,
(GETMESSAGE(NL_SETN_ViewMenu,42, "Hard Reset")),
ks,
NULL, NULL, hardResetCallback, NULL);
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,45, "R"));
(void) _DtTermViewCreateCascadeButton(pulldown[pc], submenu,
(GETMESSAGE(NL_SETN_ViewMenu,44, "Reset")),
ks,
NULL, NULL, NULL, NULL);
}
if (menuBar || (!menuBar && firstPopup))
#ifdef PULLDOWN_ACCELERATORS
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,47, "O"));
(void) _DtTermViewCreateCascadeButton(menu, pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,46, "Options")),
ks,
NULL, NULL, NULL, NULL);
#else /* PULLDOWN_ACCELERATORS */
(void) _DtTermViewCreateCascadeButton(menu, pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,46, "Options")),
NoSymbol, NULL, NULL, NULL, NULL);
#endif /* PULLDOWN_ACCELERATORS */
(void) pc++;
if (first) {
i = 0;
pulldown[pc] = createPulldown(topLevel, "Help", arglist, i);
#ifdef HPVUE
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,49, "O"));
button = _DtTermViewCreatePushButton(pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,48, "Overview")),
ks,
NULL, NULL, helpIntroCallback, NULL);
button = _DtTermViewCreateSeparator(pulldown[pc], "Separator");
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,51,"T"));
button = _DtTermViewCreatePushButton(pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,50, "Tasks")),
ks,
NULL, NULL, helpTasksCallback, NULL);
(void) XtSetSensitive(button, False);
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,53,"R"));
button = _DtTermViewCreatePushButton(pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,52, "Reference")),
ks,
NULL, NULL, helpReferenceCallback, NULL) ;
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,55,"O"));
button = _DtTermViewCreatePushButton(pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,54, "On Item")),
ks,
NULL, NULL, NULL, NULL);
(void) XtSetSensitive(button, False);
button = _DtTermViewCreateSeparator(pulldown[pc], "Separator");
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,57,"U"));
button = _DtTermViewCreatePushButton(pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,56, "Using Help")),
ks,
NULL, NULL, helpOnHelpCallback, NULL);
button = _DtTermViewCreateSeparator(pulldown[pc], "Separator");
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,59,"A"));
button = _DtTermViewCreatePushButton(pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,82, "About Terminal")),
ks,
NULL, NULL, helpVersionCallback, NULL);
}
if (menuBar || (!menuBar && firstPopup))
#ifdef PULLDOWN_ACCELERATORS
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,61,"H"));
cascade = _DtTermViewCreateCascadeButton(menu, pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,60, "Help")),
ks,
NULL, NULL, NULL, NULL);
#else /* PULLDOWN_ACCELERATORS */
cascade = _DtTermViewCreateCascadeButton(menu, pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,60, "Help")),
NoSymbol, NULL, NULL, NULL, NULL);
#endif /* PULLDOWN_ACCELERATORS */
#else /* HPVUE */
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,65, "v"));
(void)_DtTermViewCreatePushButton(pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,64, "Overview")),
ks,
NULL, NULL, helpOverviewCallback, NULL);
(void)_DtTermViewCreateSeparator(pulldown[pc], "Separator");
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,69,"C"));
(void)_DtTermViewCreatePushButton(pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,68, "Table Of Contents")),
ks,
NULL, NULL, helpTableOfContentsCallback, NULL);
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,71,"T"));
(void)_DtTermViewCreatePushButton(pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,70, "Tasks")),
ks,
NULL, NULL, helpTasksCallback, NULL);
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,73,"R"));
(void)_DtTermViewCreatePushButton(pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,72, "Reference")),
ks,
NULL, NULL, helpReferenceCallback, NULL) ;
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,75,"K"));
(void)_DtTermViewCreatePushButton(pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,74, "Keyboard")),
ks,
NULL, NULL, helpKeyboardCallback, NULL) ;
(void)_DtTermViewCreateSeparator(pulldown[pc], "Separator");
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,77,"U"));
(void)_DtTermViewCreatePushButton(pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,76, "Using Help")),
ks,
NULL, NULL, helpUsingHelpCallback, NULL);
(void)_DtTermViewCreateSeparator(pulldown[pc], "Separator");
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,79,"A"));
(void)_DtTermViewCreatePushButton(pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,83, "About Terminal")),
ks,
NULL, NULL, helpAboutDttermCallback, NULL);
}
if (menuBar || (!menuBar && firstPopup))
#ifdef PULLDOWN_ACCELERATORS
ks = XStringToKeysym(GETMESSAGE(NL_SETN_ViewMenu,81,"H"));
cascade = _DtTermViewCreateCascadeButton(menu, pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,80, "Help")),
ks,
NULL, NULL, NULL, NULL);
#else /* PULLDOWN_ACCELERATORS */
cascade = _DtTermViewCreateCascadeButton(menu, pulldown[pc],
(GETMESSAGE(NL_SETN_ViewMenu,80, "Help")),
NoSymbol, NULL, NULL, NULL, NULL);
#endif /* PULLDOWN_ACCELERATORS */
#endif /* HPVUE */
if (menuBar) {
/* this is the help button... */
i = 0;
(void) XtSetArg(arglist[i], XmNmenuHelpWidget, cascade); i++;
(void) XtSetValues(menu, arglist, i);
}
if (!menuBar && firstPopup)
firstPopup = False;
if (first)
first = False;
return(menu);
}
Widget
_DtTermViewCreatePulldownMenu
(
Widget termView,
Widget parent,
Arg menuArglist[],
int menuArgcount
)
{
Widget w;
_DtTermProcessLock();
w = CreateMenu(termView, parent, True, menuArglist, menuArgcount);
_DtTermProcessUnlock();
return(w);
}
Widget
_DtTermViewCreatePopupMenu
(
Widget termView,
Widget parent,
Arg menuArglist[],
int menuArgcount
)
{
static Widget popupMenu = (Widget) 0; /* popup widget... */
_DtTermProcessLock();
if (!popupMenu) {
popupMenu = CreateMenu(termView, parent, False,
menuArglist, menuArgcount);
}
_DtTermProcessUnlock();
/* set up a handler to post the menu... */
(void) XtAddEventHandler(parent, ButtonPressMask, False,
postMenu, (XtPointer) popupMenu);
/* and add us to the postfrom list... */
(void) XmAddToPostFromList(popupMenu, parent);
/* set up a callback to remove the post from on destruction... */
(void) XtAddCallback(parent, XmNdestroyCallback,
removeFromPostFromListCallback, (XtPointer) popupMenu);
return(popupMenu);
}
/*ARGSUSED*/
static void
setContext(Widget w, XtPointer client_data, XtPointer call_data)
{
DtTermViewWidget tw;
Arg arglist[20];
int i;
Boolean menuBarState;
Boolean scrollBarState;
#ifdef WINDOW_SIZE_TOGGLES
short rows;
short columns;
#endif /* WINDOW_SIZE_TOGGLES */
_DtTermProcessLock();
/* get the widget we were posted from... */
while (w && !XmIsRowColumn(w)) {
w = XtParent(w);
}
if (!w) {
_DtTermProcessUnlock();
return;
}
w = XmGetPostedFromWidget(w);
/* walk up the tree until we find an DtTermView widget... */
while (w && !XtIsShell(w) && !XtIsSubclass(w, dtTermViewWidgetClass)) {
w = XtParent(w);
}
if (!w) {
_DtTermProcessUnlock();
return;
}
/* make sure it is an DtTermView widget... */
if (!XtIsSubclass(w, dtTermViewWidgetClass)) {
/* problem... */
(void) fprintf(stderr,
"unable to find dtTermViewWidgetClass parent for menu\n");
_DtTermProcessUnlock();
return;
}
tw = (DtTermViewWidget) w;
currentWidget = w;
/* update the menu toggle buttons... */
i = 0;
(void) XtSetArg(arglist[i], DtNscrollBar, &scrollBarState); i++;
(void) XtSetArg(arglist[i], DtNmenuBar, &menuBarState); i++;
#ifdef WINDOW_SIZE_TOGGLES
(void) XtSetArg(arglist[i], DtNrows, &rows); i++;
(void) XtSetArg(arglist[i], DtNcolumns, &columns); i++;
#endif /* WINDOW_SIZE_TOGGLES */
(void) XtGetValues(w, arglist, i);
/* set the toggles... */
(void) XmToggleButtonGadgetSetState(scrollBarToggle, scrollBarState, False);
(void) XmToggleButtonGadgetSetState(menuBarToggle, menuBarState, False);
/* set the font toggles...
*/
for (i = 0; i < fontSizeTogglesDefault; i++) {
if (tw->termview.currentFontToggleButtonIndex == i) {
(void) XmToggleButtonGadgetSetState(fontSizeToggles[i],
True, False);
} else {
(void) XmToggleButtonGadgetSetState(fontSizeToggles[i],
False, False);
}
}
if ((tw->termview.currentFontToggleButtonIndex >= fontSizeTogglesDefault) ||
(tw->termview.currentFontToggleButtonIndex < 0)) {
(void) XmToggleButtonGadgetSetState(fontSizeToggles[i],
True, False);
} else {
(void) XmToggleButtonGadgetSetState(fontSizeToggles[i],
False, False);
}
#ifdef WINDOW_SIZE_TOGGLES
/* set the window size toggles...
*/
for (i = 0; i < tw->termview.sizeList.numSizes; i++) {
if (((tw->termview.sizeList.sizes[i].rows <= 0) ||
(rows == tw->termview.sizeList.sizes[i].rows)) &&
((tw->termview.sizeList.sizes[i].columns <= 0) ||
(columns == tw->termview.sizeList.sizes[i].columns))) {
(void) XmToggleButtonGadgetSetState(windowSizeToggles[i],
True, False);
} else {
(void) XmToggleButtonGadgetSetState(windowSizeToggles[i],
False, False);
}
}
if (((tw->termview.sizeDefault.rows <= 0) ||
(tw->termview.sizeDefault.rows == rows)) &&
((tw->termview.sizeDefault.columns <= 0) ||
(tw->termview.sizeDefault.columns == columns))) {
(void) XmToggleButtonGadgetSetState(windowSizeToggles[i],
True, False);
} else {
(void) XmToggleButtonGadgetSetState(windowSizeToggles[i],
False, False);
}
#endif /* WINDOW_SIZE_TOGGLES */
/* set the sensitivity on the new button... */
(void) XtSetSensitive(newButton, DtTermViewGetCloneEnabled(w));
_DtTermProcessUnlock();
}
/*************************************************************************
*
* menu callbacks
*/
/*ARGSUSED*/
static void
exitCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
/* walk up the widget tree to find the shell... */
_DtTermProcessLock();
w = currentWidget;
_DtTermProcessUnlock();
/* invoke the callbacks for this terminal emulator... */
(void) XtCallCallbacks(w, DtNsubprocessTerminationCallback, (XtPointer) 0);
#ifdef NOTDEF
/* make sure things are dead by destroying the interface... */
while (w && !XtIsShell(w)) {
w = XtParent(w);
}
/* destroy the interface... */
(void) XtDestroyWidget(w);
#endif /* NOTDEF */
}
/*ARGSUSED*/
static void
scrollBarToggleCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
Arg arglist;
XmToggleButtonCallbackStruct *cb =
(XmToggleButtonCallbackStruct *) call_data;
_DtTermProcessLock();
(void) XtSetArg(arglist, DtNscrollBar, cb->set);
(void) XtSetValues(currentWidget, &arglist, 1);
_DtTermProcessUnlock();
}
void
_DtTermViewMenuToggleMenuBar
(
Widget w
)
{
Arg al;
Boolean toggle;
(void) XtSetArg(al, DtNmenuBar, &toggle);
(void) XtGetValues(w, &al, 1);
(void) XtSetArg(al, DtNmenuBar, !toggle);
(void) XtSetValues(w, &al, 1);
}
/*ARGSUSED*/
static void
menuBarToggleCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
Arg arglist;
XmToggleButtonCallbackStruct *cb =
(XmToggleButtonCallbackStruct *) call_data;
_DtTermProcessLock();
(void) XtSetArg(arglist, DtNmenuBar, cb->set);
(void) XtSetValues(currentWidget, &arglist, 1);
_DtTermProcessUnlock();
}
/*ARGSUSED*/
static void
cloneCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
Widget cw;
_DtTermProcessLock();
cw = currentWidget;
_DtTermProcessUnlock();
(void) DtTermViewCloneCallback(cw, client_data, call_data);
}
#ifdef HPVUE
/*ARGSUSED*/
static void
helpVersionCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
Widget cw;
_DtTermProcessLock();
cw = currentWidget;
_DtTermProcessUnlock();
(void) _DtTermViewMapHelp(cw, "Terminal", "_copyright");
}
/*ARGSUSED*/
static void
helpIntroCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
Widget cw;
_DtTermProcessLock();
cw = currentWidget;
_DtTermProcessUnlock();
(void) _DtTermViewMapHelp(cw, "Terminal", "_hometopic");
}
/*ARGSUSED*/
static void
helpTasksCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
Widget cw;
_DtTermProcessLock();
cw = currentWidget;
_DtTermProcessUnlock();
(void) _DtTermViewMapHelp(cw, "Terminal", "UsingTermEmulators");
}
/*ARGSUSED*/
static void
helpReferenceCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
Widget cw;
_DtTermProcessLock();
cw = currentWidget;
_DtTermProcessUnlock();
(void) _DtTermViewMapHelp(cw, "Terminal", "dtterm1x");
}
/*ARGSUSED*/
static void
helpOnHelpCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
Widget cw;
_DtTermProcessLock();
cw = currentWidget;
_DtTermProcessUnlock();
(void) _DtTermViewMapHelp(cw, "Help4Help", "_hometopic");
}
#else /* HPVUE */
/*ARGSUSED*/
static void
helpOverviewCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
Widget cw;
_DtTermProcessLock();
cw = currentWidget;
_DtTermProcessUnlock();
(void) _DtTermViewMapHelp(cw, "Terminal", "_hometopic");
}
/*ARGSUSED*/
static void
helpTableOfContentsCallback(Widget w, XtPointer client_data,
XtPointer call_data)
{
Widget cw;
_DtTermProcessLock();
cw = currentWidget;
_DtTermProcessUnlock();
(void) _DtTermViewMapHelp(cw, "Terminal", "TableOfContents");
}
/*ARGSUSED*/
static void
helpTasksCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
Widget cw;
_DtTermProcessLock();
cw = currentWidget;
_DtTermProcessUnlock();
(void) _DtTermViewMapHelp(cw, "Terminal", "Tasks");
}
/*ARGSUSED*/
static void
helpReferenceCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
Widget cw;
_DtTermProcessLock();
cw = currentWidget;
_DtTermProcessUnlock();
(void) _DtTermViewMapHelp(cw, "Terminal", "Reference");
}
/*ARGSUSED*/
static void
helpKeyboardCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
Widget cw;
_DtTermProcessLock();
cw = currentWidget;
_DtTermProcessUnlock();
(void) _DtTermViewMapHelp(cw, "Terminal", "Keyboard");
}
/*ARGSUSED*/
static void
helpUsingHelpCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
Widget cw;
_DtTermProcessLock();
cw = currentWidget;
_DtTermProcessUnlock();
(void) _DtTermViewMapHelp(cw, "Help4Help", "_hometopic");
}
/*ARGSUSED*/
static void
helpAboutDttermCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
Widget cw;
_DtTermProcessLock();
cw = currentWidget;
_DtTermProcessUnlock();
(void) _DtTermViewMapHelp(cw, "Terminal", "_copyright");
}
#endif /* HPVUE */
static void
raiseDialog(Widget w)
{
while (w && !XtIsShell(w)) {
w = XtParent(w);
}
if (w) {
(void) XRaiseWindow(XtDisplay(w), XtWindow(w));
}
}
/*ARGSUSED*/
static void
globalOptionsCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
DtTermViewWidget tw;
_DtTermProcessLock();
tw = (DtTermViewWidget) currentWidget;
_DtTermProcessUnlock();
if (tw->termview.globalOptionsDialog) {
(void) XtManageChild(tw->termview.globalOptionsDialog);
(void) raiseDialog(tw->termview.globalOptionsDialog);
} else {
tw->termview.globalOptionsDialog =
_DtTermViewCreateGlobalOptionsDialog((Widget)tw);
(void) raiseDialog(tw->termview.globalOptionsDialog);
}
}
/*ARGSUSED*/
static void
terminalOptionsCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
DtTermViewWidget tw;
_DtTermProcessLock();
tw = (DtTermViewWidget) currentWidget;
_DtTermProcessUnlock();
if (tw->termview.terminalOptionsDialog) {
(void) XtManageChild(tw->termview.terminalOptionsDialog);
(void) raiseDialog(tw->termview.terminalOptionsDialog);
} else {
tw->termview.terminalOptionsDialog =
_DtTermViewCreateTerminalOptionsDialog((Widget) tw);
(void) raiseDialog(tw->termview.terminalOptionsDialog);
}
}
/*ARGSUSED*/
static void
sizeChangeCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
DtTermViewWidget tw;
Arg al[10];
int ac;
long i1;
_DtTermProcessLock();
tw = (DtTermViewWidget) currentWidget;
_DtTermProcessUnlock();
i1 = (long) client_data;
ac = 0;
if (tw->termview.sizeList.sizes[i1].columns > 0) {
(void) XtSetArg(al[ac], DtNcolumns,
tw->termview.sizeList.sizes[i1].columns); ac++;
}
if (tw->termview.sizeList.sizes[i1].rows > 0) {
(void) XtSetArg(al[ac], DtNrows,
tw->termview.sizeList.sizes[i1].rows); ac++;
}
if (ac > 0) {
(void) XtSetValues((Widget) tw, al, ac);
}
}
/*ARGSUSED*/
static void
defaultSizeCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
DtTermViewWidget tw;
Arg al[10];
int ac;
_DtTermProcessLock();
tw = (DtTermViewWidget) currentWidget;
_DtTermProcessUnlock();
ac = 0;
if ((tw->termview.sizeDefault.columns > 0) &&
(tw->termview.sizeDefault.rows > 0)) {
(void) XtSetArg(al[ac], DtNcolumns, tw->termview.sizeDefault.columns);
ac++;
(void) XtSetArg(al[ac], DtNrows, tw->termview.sizeDefault.rows); ac++;
(void) XtSetValues((Widget) tw, al, ac);
}
}
/*ARGSUSED*/
static void
fontChangeCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
DtTermViewWidget tw;
XrmValue from;
XrmValue to;
Arg al[10];
int ac;
long i1;
_DtTermProcessLock();
tw = (DtTermViewWidget) currentWidget;
i1 = (long) client_data;
/* generate the fontlist from the font... */
from.size = strlen(fontArray[i1].fontName);
from.addr = (XtPointer) fontArray[i1].fontName;
to.size = sizeof(fontArray[i1].fontList);
to.addr = (XtPointer) &fontArray[i1].fontList;
if (!XtConvertAndStore((Widget) tw, XmRString, &from, XmRFontList,
&to)) {
/* Unable to convert to a fontlist. For now, let's just
* ignore it and return...
*/
_DtTermProcessUnlock();
return;
}
if (tw->termview.userFontName)
XtFree(tw->termview.userFontName);
tw->termview.userFontName = XtNewString(fontArray[i1].fontName);
if (tw->termview.fontList != fontArray[i1].fontList) {
ac = 0;
(void) XtSetArg(al[ac], DtNuserFont, fontArray[i1].fontList); ac++;
(void) XtSetValues((Widget) tw, al, ac);
}
tw->termview.currentFontToggleButtonIndex = i1;
_DtTermProcessUnlock();
}
/*ARGSUSED*/
static void
defaultFontCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
DtTermViewWidget tw;
Arg al[10];
int ac;
_DtTermProcessLock();
tw = (DtTermViewWidget) currentWidget;
_DtTermProcessUnlock();
if (tw->termview.userFontName)
XtFree(tw->termview.userFontName);
tw->termview.userFontName = NULL;
if (tw->termview.fontList != tw->termview.defaultFontList) {
ac = 0;
(void) XtSetArg(al[ac], DtNuserFont, tw->termview.defaultFontList);
ac++;
(void) XtSetValues((Widget) tw, al, ac);
}
tw->termview.currentFontToggleButtonIndex = fontSizeTogglesDefault;
}
/*ARGSUSED*/
static void
softResetCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
DtTermViewWidget tw;
_DtTermProcessLock();
tw = (DtTermViewWidget) currentWidget;
_DtTermProcessUnlock();
(void) _DtTermFuncSoftReset(_DtTermViewGetChild((Widget) tw,
DtTermTERM_WIDGET), 1, fromMenu);
}
/*ARGSUSED*/
static void
hardResetCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
DtTermViewWidget tw;
_DtTermProcessLock();
tw = (DtTermViewWidget) currentWidget;
_DtTermProcessUnlock();
(void) _DtTermFuncHardReset(_DtTermViewGetChild((Widget) tw,
DtTermTERM_WIDGET), 1, fromMenu);
}
/*ARGSUSED*/
static void
copyClipboardCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
Widget tw, cw;
/* since this may have been called from an accelerator, we need
* to insure that our context was set...
*/
(void) setContext(w, client_data, call_data);
_DtTermProcessLock();
cw = currentWidget;
_DtTermProcessUnlock();
tw = _DtTermViewGetChild(cw, DtTermTERM_WIDGET);
(void) _DtTermPrimSelectCopyClipboard(tw,
XtLastTimestampProcessed(XtDisplay(tw)));
}
/*ARGSUSED*/
static void
pasteClipboardCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
Widget tw, cw;
/* since this may have been called from an accelerator, we need
* to insure that our context was set...
*/
(void) setContext(w, client_data, call_data);
_DtTermProcessLock();
cw = currentWidget;
_DtTermProcessUnlock();
tw = _DtTermViewGetChild(cw, DtTermTERM_WIDGET);
(void) _DtTermPrimSelectPasteClipboard(tw);
}
int
_DtTermViewGetUserFontListIndex
(
Widget w
)
{
DtTermViewWidget tw = (DtTermViewWidget) w;
/* use 0 for default, index + 1 for specific buttons... */
if (tw->termview.currentFontToggleButtonIndex == fontSizeTogglesDefault) {
return(0);
} else {
return(tw->termview.currentFontToggleButtonIndex + 1);
}
}
void
_DtTermViewSetUserFontListIndex
(
Widget w,
long i1
)
{
DtTermViewWidget tw = (DtTermViewWidget) w;
_DtTermWidgetToAppContext(w);
_DtTermAppLock(app);
/* map from 0 for default, index + 1 for specific buttons to currect
* desired button...
*/
if (i1 == 0) {
i1 = fontSizeTogglesDefault;
} else {
i1 -= 1;
}
/* range check... */
if ((i1 < 0) || (i1 > fontSizeTogglesDefault)) {
i1 = fontSizeTogglesDefault;
}
/* set up for the callback... */
_DtTermProcessLock();
currentWidget = w;
if (i1 == fontSizeTogglesDefault) {
(void) defaultFontCallback(w, (XtPointer) i1, (XtPointer) 0);
} else {
(void) fontChangeCallback(w, (XtPointer) i1, (XtPointer) 0);
}
_DtTermProcessUnlock();
_DtTermAppUnlock(app);
}