soh@shiva.trl.oz (kam hung soh) (08/03/90)
Dear Netters,
I have a quirky problem trying to change the cursor of an Athena
widget. If I set the fallback resource string, I can change a cursor.
For example:
String fallback_resources[] = {
"*scrollbar.scrollDCursor: gumby",
NULL,
};
However, if I try to do the following, I get an error from the server:
XtSetArg(args[num_args], XtNscrollDCursor, "trek"); num_args++;
scrollbar = XtCreateManagedWidget("scrollbar", scrollbarWidgetClass,
toplevel, args, num_args);
X Error of failed request: BadCursor (invalid Cursor parameter)
Major opcode of failed request: 1 (X_CreateWindow)
Minor opcode of failed request: 0
Resource id in failed request: 0x875d
Serial number of failed request: 65
Current serial number in output stream: 75
Below is a copy of my program.
Please email any ideas you have. Thanks!
---cut---cut---
#include <stdio.h>
#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <X11/Xaw/Scrollbar.h>
#include <X11/Xaw/Cardinals.h>
static XtCallbackProc Scrolled(), Jumped();
String fallback_resources[] = {
"*Scroll.Translations: #override \\n\
<Btn1Down>: StartScroll(Forward) \\n\
<Btn3Down>: StartScroll(Backward)",
"*scrollbar.scrollDCursor: gumby",
"*scrollbar.scrollHCursor: gumby",
"*scrollbar.scrollLCursor: gumby",
"*scrollbar.scrollRCursor: gumby",
"*scrollbar.scrollUCursor: gumby",
"*scrollbar.scrollVCursor: gumby",
NULL,
};
static XrmOptionDescRec options[] = {
{"-horiz", "scrollbar.orientation", XrmoptionNoArg, "horizontal"}
};
void main(argc, argv)
int argc;
char **argv;
{
static void Syntax();
XtAppContext app_con;
Widget toplevel, scrollbar;
XtArgVal *l_top;
float top;
Arg args[5];
Cardinal num_args;
toplevel = XtAppInitialize(&app_con, "Scroll", options, XtNumber(options),
&argc, argv, fallback_resources, NULL, ZERO);
if (argc != 1) Syntax(app_con, argv[0]);
top = 0.5;
num_args = 0;
if (sizeof(float) > sizeof(XtArgVal)) {
XtSetArg(args[num_args], XtNtopOfThumb, &top); num_args++;
}
else {
/* convince C not to perform an automatic conversion,
which would truncate 0.5 to 0. */
l_top = (XtArgVal *)⊤
XtSetArg(args[num_args], XtNtopOfThumb, *l_top); num_args++;
}
XtSetArg(args[num_args], XtNscrollDCursor, "trek"); num_args++;
XtSetArg(args[num_args], XtNlength, 200); num_args++;
scrollbar = XtCreateManagedWidget("scrollbar", scrollbarWidgetClass,
toplevel, args, num_args);
XtAddCallback(scrollbar, XtNjumpProc, Jumped, NULL);
XtAddCallback(scrollbar, XtNscrollProc, Scrolled, NULL);
XtRealizeWidget(toplevel);
XtAppMainLoop(app_con);
}
static XtCallbackProc Scrolled(w, closure, call_data)
Widget w;
XtPointer closure, call_data;
{
fprintf(stdout, "scrolled by %d pixels.\n", (int)call_data);
}
static XtCallbackProc Jumped(w, closure, call_data)
Widget w;
XtPointer closure, call_data;
{
float top = *((float *)call_data);
fprintf(stdout, "thumbewd at %4.2f%% the height of the scrollbar\n",
top*100);
}
static void Syntax(app_con, call)
XtAppContext app_con;
char *call;
{
XtDestroyApplicationContext(app_con);
fprintf(stderr, "Usage: %s [-horiz]\n", call);
exit(1);
}
---
Soh, Kam Hung email: h.soh@trl.oz.au tel: +61 03 541 6403
Telecom Research Laboratories, P.O. Box 249, Clayton, Victoria 3168, Australia