|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Motif
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Copyright (c) 1987-2012, The Open Group. All rights reserved.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are free software; you can
|
|
Packit |
b099d7 |
* redistribute them and/or modify them under the terms of the GNU
|
|
Packit |
b099d7 |
* Lesser General Public License as published by the Free Software
|
|
Packit |
b099d7 |
* Foundation; either version 2 of the License, or (at your option)
|
|
Packit |
b099d7 |
* any later version.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* These libraries and programs are distributed in the hope that
|
|
Packit |
b099d7 |
* they will be useful, but WITHOUT ANY WARRANTY; without even the
|
|
Packit |
b099d7 |
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
Packit |
b099d7 |
* PURPOSE. See the GNU Lesser General Public License for more
|
|
Packit |
b099d7 |
* details.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
b099d7 |
* License along with these librararies and programs; if not, write
|
|
Packit |
b099d7 |
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
|
|
Packit |
b099d7 |
* Floor, Boston, MA 02110-1301 USA
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Motif Release 1.2.4
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
#ifdef HAVE_CONFIG_H
|
|
Packit |
b099d7 |
#include <config.h>
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef REV_INFO
|
|
Packit |
b099d7 |
#ifndef lint
|
|
Packit |
b099d7 |
static char rcsid[] = "$XConsortium: WmError.c /main/6 1996/10/07 14:27:34 drk $"
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
#endif
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* (c) Copyright 1987, 1988, 1989, 1990 HEWLETT-PACKARD COMPANY */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Included Files:
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#include "WmGlobal.h"
|
|
Packit |
b099d7 |
#include <stdio.h>
|
|
Packit |
b099d7 |
#ifdef WSM
|
|
Packit |
b099d7 |
#include
|
|
Packit |
b099d7 |
#endif /* WSM */
|
|
Packit |
b099d7 |
#include "WmXSMP.h"
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Function Declarations:
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
#include "WmError.h"
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef DEBUG
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define E_MAJOR_CODE 0
|
|
Packit |
b099d7 |
#define E_MINOR_CODE 1
|
|
Packit |
b099d7 |
#define E_RESOURCE_ID 2
|
|
Packit |
b099d7 |
#define E_ERROR_SERIAL 3
|
|
Packit |
b099d7 |
#define E_CURRENT_SERIAL 4
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#define NUM_E_STRINGS 5
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static char *pchErrorFormatNames [NUM_E_STRINGS] = {
|
|
Packit |
b099d7 |
"MajorCode",
|
|
Packit |
b099d7 |
"MinorCode",
|
|
Packit |
b099d7 |
"ResourceID",
|
|
Packit |
b099d7 |
"ErrorSerial",
|
|
Packit |
b099d7 |
"CurrentSerial"
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static char *pchDefaultErrorFormat [NUM_E_STRINGS] = {
|
|
Packit |
b099d7 |
" %d ",
|
|
Packit |
b099d7 |
" %d ",
|
|
Packit |
b099d7 |
" %ld ",
|
|
Packit |
b099d7 |
" %ld ",
|
|
Packit |
b099d7 |
" %ld "
|
|
Packit |
b099d7 |
};
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
static char *pchErrorFormat [NUM_E_STRINGS];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#endif /* DEBUG */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*************************************<->*************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* WmInitErrorHandler (display)
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* -----------
|
|
Packit |
b099d7 |
* This function initializes the window manager error handler.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Inputs:
|
|
Packit |
b099d7 |
* ------
|
|
Packit |
b099d7 |
* display = display we're talking about
|
|
Packit |
b099d7 |
* -------
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*************************************<->***********************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
WmInitErrorHandler (Display *display)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
#ifdef DEBUG
|
|
Packit |
b099d7 |
char buffer[BUFSIZ];
|
|
Packit |
b099d7 |
int i;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Fetch the X error format strings from XErrorDB
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
for (i = 0; i< NUM_E_STRINGS; i++)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
XGetErrorDatabaseText (display, "XlibMessage",
|
|
Packit |
b099d7 |
pchErrorFormatNames[i],
|
|
Packit |
b099d7 |
pchDefaultErrorFormat[i], buffer, BUFSIZ);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((pchErrorFormat[i] = (char *) XtMalloc (1+strlen(buffer))) == NULL)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
Warning ("Insufficient memory for error message initialization.");
|
|
Packit |
b099d7 |
ExitWM (1);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
strcpy(pchErrorFormat[i], buffer);
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#endif /* DEBUG */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XSetErrorHandler (WmXErrorHandler);
|
|
Packit |
b099d7 |
XSetIOErrorHandler (WmXIOErrorHandler);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XtSetWarningHandler (WmXtWarningHandler);
|
|
Packit |
b099d7 |
XtSetErrorHandler (WmXtErrorHandler);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
} /* END OF FUNCTION WmInitErrorHandler */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*************************************<->*************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* WmXErrorHandler (display, errorEvent)
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* -----------
|
|
Packit |
b099d7 |
* This function is the X error handler that is registered with X to
|
|
Packit |
b099d7 |
* handle X errors resulting from window management activities.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Inputs:
|
|
Packit |
b099d7 |
* ------
|
|
Packit |
b099d7 |
* display = display on which X error occurred
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* errorEvent = pointer to a block of information describing the error
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Outputs:
|
|
Packit |
b099d7 |
* -------
|
|
Packit |
b099d7 |
* wmGD.errorFlag = set to True
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Return = 0
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*************************************<->***********************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
int
|
|
Packit |
b099d7 |
WmXErrorHandler (Display *display, XErrorEvent *errorEvent)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
ClientData *pCD;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef DEBUG
|
|
Packit |
b099d7 |
char buffer[BUFSIZ];
|
|
Packit |
b099d7 |
char message[BUFSIZ];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
XGetErrorText (display, errorEvent->error_code, buffer, BUFSIZ);
|
|
Packit |
b099d7 |
Warning ("X error occurred during window management operation");
|
|
Packit |
b099d7 |
fprintf (stderr, "Description = '%s'\n ", buffer);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
fprintf (stderr, pchErrorFormat[E_MAJOR_CODE], errorEvent->request_code);
|
|
Packit |
b099d7 |
sprintf(message, "%d", errorEvent->request_code);
|
|
Packit |
b099d7 |
XGetErrorDatabaseText (display, "XRequest", message,
|
|
Packit |
b099d7 |
" ", buffer, BUFSIZ);
|
|
Packit |
b099d7 |
fprintf (stderr, " (%s)\n ", buffer);
|
|
Packit |
b099d7 |
fprintf (stderr, pchErrorFormat[E_MINOR_CODE], errorEvent->minor_code);
|
|
Packit |
b099d7 |
fprintf (stderr, "\n ");
|
|
Packit |
b099d7 |
fprintf (stderr, pchErrorFormat[E_RESOURCE_ID], errorEvent->resourceid);
|
|
Packit |
b099d7 |
fprintf (stderr, "\n ");
|
|
Packit |
b099d7 |
fprintf (stderr, pchErrorFormat[E_ERROR_SERIAL], errorEvent->serial);
|
|
Packit |
b099d7 |
fprintf (stderr, "\n ");
|
|
Packit |
b099d7 |
fprintf (stderr, pchErrorFormat[E_CURRENT_SERIAL],
|
|
Packit |
b099d7 |
LastKnownRequestProcessed(display));
|
|
Packit |
b099d7 |
fprintf (stderr, "\n");
|
|
Packit |
b099d7 |
#endif /* DEBUG */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*
|
|
Packit |
b099d7 |
* Check for a BadWindow error for a managed window. If this error
|
|
Packit |
b099d7 |
* is detected indicate in the client data that the window no longer
|
|
Packit |
b099d7 |
* exists.
|
|
Packit |
b099d7 |
*/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
if ((errorEvent->error_code == BadWindow) &&
|
|
Packit |
b099d7 |
!XFindContext (DISPLAY, errorEvent->resourceid, wmGD.windowContextType,
|
|
Packit |
b099d7 |
(caddr_t *)&pCD))
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
if (errorEvent->resourceid == pCD->client)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
pCD->clientFlags |= CLIENT_DESTROYED;
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
}
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
wmGD.errorFlag = True;
|
|
Packit |
b099d7 |
wmGD.errorResource = errorEvent->resourceid;
|
|
Packit |
b099d7 |
wmGD.errorRequestCode = errorEvent->request_code;
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
return (0);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
} /* END OF FUNCTION WmXErrorHandler */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*************************************<->*************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* WmXIOErrorHandler (display)
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* -----------
|
|
Packit |
b099d7 |
* This function is the X IO error handler that is registered with X to
|
|
Packit |
b099d7 |
* handle X IO errors. This function exits the window manager.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Inputs:
|
|
Packit |
b099d7 |
* ------
|
|
Packit |
b099d7 |
* display = X display on which the X IO error occurred
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*************************************<->***********************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
int
|
|
Packit |
b099d7 |
WmXIOErrorHandler (Display *display)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
char err[100];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
sprintf (err, "%s: %s\n", "I/O error on display:", XDisplayString(display));
|
|
Packit |
b099d7 |
Warning(err);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
ExitWM (WM_ERROR_EXIT_VALUE);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*NOTREACHED*/
|
|
Packit |
b099d7 |
return 1;
|
|
Packit |
b099d7 |
} /* END OF FUNCTIONS WmXIOErrorHandler */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*************************************<->*************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* WmXtErrorHandler (message)
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* -----------
|
|
Packit |
b099d7 |
* This function is registered as the X Toolkit fatal error handler.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Inputs:
|
|
Packit |
b099d7 |
* ------
|
|
Packit |
b099d7 |
* message = pointer to an error message
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*************************************<->***********************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
WmXtErrorHandler (char *message)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
Warning (message);
|
|
Packit |
b099d7 |
ExitWM (WM_ERROR_EXIT_VALUE);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
} /* END OF FUNCTION WmXtErrorHandler */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*************************************<->*************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* WmXtWarningHandler (message)
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* -----------
|
|
Packit |
b099d7 |
* This function is registered as an X Toolkit warning handler.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Inputs:
|
|
Packit |
b099d7 |
* ------
|
|
Packit |
b099d7 |
* message = pointer to a warning message
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*************************************<->***********************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
WmXtWarningHandler (char *message)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef DEBUG
|
|
Packit |
b099d7 |
Warning (message);
|
|
Packit |
b099d7 |
#endif /* DEBUG */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
} /* END OF FUNCTIONS WmXtWarningHandler */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*************************************<->*************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Warning (message)
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* -----------
|
|
Packit |
b099d7 |
* This function lists a message to stderr.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Inputs:
|
|
Packit |
b099d7 |
* ------
|
|
Packit |
b099d7 |
* message = pointer to a message string
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*************************************<->***********************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
Warning (char *message)
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
#ifdef WSM
|
|
Packit |
b099d7 |
char pch[MAXWMPATH+1];
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
sprintf (pch, "%s: %s\n",
|
|
Packit |
b099d7 |
GETMESSAGE(20, 1, "Workspace Manager"), message);
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
_DtSimpleError (wmGD.mwmName, DtIgnore, NULL, pch, NULL);
|
|
Packit |
b099d7 |
#else /* WSM */
|
|
Packit |
b099d7 |
fprintf (stderr, "%s: %s\n", wmGD.mwmName, message);
|
|
Packit |
b099d7 |
fflush (stderr);
|
|
Packit |
b099d7 |
#endif /* WSM */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
} /* END OF FUNCTION Warning */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
#ifdef WSM
|
|
Packit |
b099d7 |
#ifdef DEBUGGER
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/******************************<->*************************************
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* PrintFormatted (format, message, message, ...)
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Description:
|
|
Packit |
b099d7 |
* -----------
|
|
Packit |
b099d7 |
* This function lists several messages to stderr using fprinf()
|
|
Packit |
b099d7 |
* formatting capabilities.
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Inputs:
|
|
Packit |
b099d7 |
* ------
|
|
Packit |
b099d7 |
* s0-s9 = pointers to message strings
|
|
Packit |
b099d7 |
*
|
|
Packit |
b099d7 |
* Comments:
|
|
Packit |
b099d7 |
* ------
|
|
Packit |
b099d7 |
* Caller must provide his/her own argv[0] to this function.
|
|
Packit |
b099d7 |
******************************<->***********************************/
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/*VARARGS1*/
|
|
Packit |
b099d7 |
void
|
|
Packit |
b099d7 |
PrintFormatted(char *f, char *s0, char *s1, char *s2, char *s3, char *s4, char *s5, char *s6, char *s7, char *s8, char *s9)
|
|
Packit |
b099d7 |
/* limit of ten args */
|
|
Packit |
b099d7 |
{
|
|
Packit |
b099d7 |
fprintf( stderr, f, s0, s1, s2, s3, s4, s5, s6, s7, s8, s9);
|
|
Packit |
b099d7 |
fflush (stderr);
|
|
Packit |
b099d7 |
} /* END OF FUNCTION PrintFormatted */
|
|
Packit |
b099d7 |
|
|
Packit |
b099d7 |
/************************ eof **************************/
|
|
Packit |
b099d7 |
#endif /* DEBUGGER */
|
|
Packit |
b099d7 |
#endif /* WSM */
|