skertic@sal-sun55.usc.edu (Robert Skertic) (07/13/89)
Dear X-Community:
We have a protocol problem in our attempt to create
asciiStringWidgets on two different displays. When
we run the program the following error occurs:
Please see X Protocol error: BadCursor, invalid Cursor parameter
Major opcode of failed request: 1 (X_CreateWindow)
Minor opcode of failed request: 0
Resource id in failed request: 0x90000a
Serial number of failed request: 42
Current serial number in output stream: 49
NOTE: If we do not include asciiStringWidgets or textWidgets,
then we do NOT have a problem.
How do we find out what causes this error?
A Sample Program follows which does create the error.
NOTE: You must set "xhost" on the terminal you are trying to
connect to. Compile with, "cc -g -o exm exm.c
-I/usr/public/X11/include -L/usr/public/X11/lib
-lXaw -lXmu -lXt -lX11" and execute with
"exm <bogusfilename> host1:0 host2:0"
Thanks for taking your time to read and answer our
desparate request....Bob Skertic and Duc Truong
REPLY TO: skertic@merlin.usc.edu
truong@merlin.usc.edu
NOTE: Documentation Limited Due to Distribution.
--------------Program Follows-------------------
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <X11/Xlib.h>
#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <X11/Xatom.h>
#include <X11/Shell.h>
#include "AsciiText.h"
#include "Command.h"
#include "Box.h"
Widget toplevel1, box1, quit1, showbuf1,
toplevel2, box2, quit2, showbuf2;
Widget AsciiText1, AsciiText2;
char *filename, *Disp1, *Disp2;
char buffer1[1024], buffer2[1024]; /* strings for the text widgets */
static XrmOptionDescRec flags[] = {
{"-label", "*quit.label", XrmoptionSepArg, NULL}
};
void Msg_Handler()
{
return;
}
Syntax(call)
char *call;
{
fprintf(stderr, "Bogus flag, hoser: %s\n", call);
}
void Quit(w, client_data, call_data)
Widget w;
caddr_t client_data, call_data;
{
printf("quit called; button data: %s buffer: %s\n",
(char *)client_data, buffer1);
exit();
}
void DisplayBuffer(w, client_data, call_data)
Widget w;
caddr_t client_data, call_data;
{
XtTextBlock contents;
printf("button called; button data: %s\n buffer: %s\n",
(char *)client_data, buffer1);
#define geek 1
#ifdef geek
contents.firstPos = 0;
contents.length = strlen(buffer1);
contents.ptr = buffer1;
contents.format = FMT8BIT;
XtTextReplace(AsciiText2, 0, strlen(buffer1), &contents);
#endif
}
main(argc, argv)
unsigned int argc;
char *argv[];
{
static XtCallbackRec callbacks[] = {
{Quit, (caddr_t) "some data"}, /* proc name, string to return */
{NULL, NULL}
}; /* must be NULL terminated */
Arg args[25];
int n = 0;
XtAppContext context; /* this test's application context */
Display *disp1, *disp2; /* the two displays
we will connect to */
filename = (char *)malloc(1000);
Disp1 = (char *)malloc(100);
Disp2 = (char *)malloc(100);
strcpy(filename, argv[1]);
strcpy(Disp1, argv[2]);
strcpy(Disp2, argv[3]);
XtSetWarningMsgHandler(Msg_Handler);
XtToolkitInitialize();
context = XtCreateApplicationContext();
disp1 = XtOpenDisplay(context, Disp1, "dtest", "Dtest",
NULL, 0, &argc, argv);
disp2 = XtOpenDisplay(context, Disp2, "dtest", "Dtest",
NULL, 0, &argc, argv);
toplevel1 = XtAppCreateShell("dtest", "Dtest",
applicationShellWidgetClass, disp1, NULL, 0);
toplevel2 = XtAppCreateShell("dtest", "Dtest",
applicationShellWidgetClass, disp2, NULL, 0);
if(argc != 1) Syntax(filename);
n = 0;
box1 =
XtCreateManagedWidget("box1", boxWidgetClass, toplevel1,
args, n);
n = 0;
XtSetArg(args[n], XtNlabel, "quit"); n++;
XtSetArg(args[n], XtNheight, 100); n++;
XtSetArg(args[n], XtNwidth, 100); n++;
quit1 =
XtCreateManagedWidget("quit1", commandWidgetClass, box1,
args, n);
XtSetArg(args[n], XtNlabel, "display buffer contents"); n++;
showbuf1 =
XtCreateManagedWidget("showbuf1", commandWidgetClass, box1,
args, n);
/*HERE IS PROBLEM CODE, take this out and you can get two displays
n = 0;
XtSetArg(args[n], XtNeditType, XttextEdit); n++;
XtSetArg(args[n], XtNstring, buffer1); n++;
XtSetArg(args[n], XtNlength, 1000); n++;
XtSetArg(args[n], XtNwidth, 500); n++;
XtSetArg(args[n], XtNheight, 30); n++;
XtSetArg(args[n], XtNtextOptions, scrollVertical|scrollOnOverflow);
n++;
XtSetArg(args[n], XtNsensitive, True); n++;
AsciiText1 =
XtCreateManagedWidget("text1", asciiStringWidgetClass, box1,
args, n);
/*Here is the end of PROBLEM CODE*/
XtAddCallback(quit1, XtNcallback, Quit, "some data");
XtAddCallback(showbuf1, XtNcallback, DisplayBuffer, "me");
/*
* Create the layout for Display #2
*/
n = 0;
box2 =
XtCreateManagedWidget("box2", boxWidgetClass, toplevel2,
args, n);
n = 0;
XtSetArg(args[n], XtNlabel, "quit"); n++;
XtSetArg(args[n], XtNheight, 100); n++;
XtSetArg(args[n], XtNwidth, 100); n++;
quit2 =
XtCreateManagedWidget("quit2", commandWidgetClass, box2,
args, n);
XtSetArg(args[n], XtNlabel, "display buffer contents"); n++;
showbuf2 =
XtCreateManagedWidget("showbuf2", commandWidgetClass, box2,
args, n);
/*HERE IS PROBLEM CODE, Take this out and you can get two displays
n = 0;
XtSetArg(args[n], XtNeditType, XttextEdit); n++;
XtSetArg(args[n], XtNstring, buffer1); n++;
XtSetArg(args[n], XtNlength, 1024); n++;
XtSetArg(args[n], XtNwidth, 500); n++;
XtSetArg(args[n], XtNheight, 30); n++;
XtSetArg(args[n], XtNtextOptions, scrollVertical|scrollOnOverflow);
n++;
XtSetArg(args[n], XtNsensitive, True); n++;
AsciiText2 =
XtCreateManagedWidget("text2", asciiStringWidgetClass, box2,
args, n);
/*HERE is the end of the PROBLEM CODE*/
XtAddCallback(quit2, XtNcallback, Quit, "some data");
XtAddCallback(showbuf2, XtNcallback, DisplayBuffer, "him");
XtRealizeWidget(toplevel1);
XtRealizeWidget(toplevel2);
XtAppMainLoop(context);
}