mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
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.
1624 lines
46 KiB
C
1624 lines
46 KiB
C
/*
|
||
* 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);
|
||
}
|
||
|