--- rpl/modules/motif/XtCreateWidget.rplc 2017/07/06 10:18:04 1.3 +++ rpl/modules/motif/XtCreateWidget.rplc 2017/07/10 14:47:59 1.5 @@ -18,6 +18,7 @@ declareExternalFunction(XtCreateWidget) char target(name); char target(class); char target(cvalue); + char target(command); ArgList args; Cardinal argNum; @@ -42,6 +43,13 @@ declareExternalFunction(XtCreateWidget) returnOnError(freeObject(parametersObject); freeObject(parentObject)); + ifIsExternal(parentObject, WIDGET) then + orElse + executionError("Type mismatch error"); + returnOnError(freeObject(parametersObject); + freeObject(parentObject)); + endIf + pullFromStack(classObject, string); returnOnError(freeObject(parametersObject); freeObject(parentObject); @@ -137,6 +145,7 @@ declareExternalFunction(XtCreateWidget) postIncr(argNum); endWhile +uprintf("%d\n", argNum); args = allocate(size(Arg) * argNum); argNum = 0; getDaisyChainFromList(parametersObject, current); @@ -144,10 +153,10 @@ declareExternalFunction(XtCreateWidget) repeatWhile(not nullified(current)) list = fetchElementFromDaisyChain(current); getDaisyChainFromList(list, current2); - getString(fetchElementFromDaisyChain(current2), name); + getString(fetchElementFromDaisyChain(current2), command); current2 = nextElementOfDaisyChain(current2); - XmN_constants(name, argument); + XmN_constants(command, argument); returnOnError(freeObject(parametersObject); freeObject(parentObject); @@ -155,14 +164,19 @@ declareExternalFunction(XtCreateWidget) freeObject(nameObject)); ifIsExternal(fetchElementFromDaisyChain(current2), WIDGET) then - if ((strcmp(name, "XmNtopWidget") eq 0) or - (strcmp(name, "XmNbottomWidget") eq 0) or - (strcmp(name, "XmNleftWidget") eq 0) or - (strcmp(name, "XmNrightWidget") eq 0)) then + if ((strcmp(command, "XmNtopWidget") eq 0) or + (strcmp(command, "XmNbottomWidget") eq 0) or + (strcmp(command, "XmNleftWidget") eq 0) or + (strcmp(command, "XmNrightWidget") eq 0)) then +/* XtSetArg(args[argNum], argument, (XtArgVal) (*((sXtAppContext *) objectContainer(fetchElementFromDaisyChain( current2)))).widget); +*/ + XtSetArg(args[argNum], argument, + (XtArgVal) target((Widget *) objectContainer( + fetchElementFromDaisyChain(current2)))); orElse executionError("Wait for XmN*Widget"); deallocate(args); @@ -184,13 +198,13 @@ declareExternalFunction(XtCreateWidget) getInteger(directive, value); XtSetArg(args[argNum], argument, (XtArgVal) value); elseIfIsExternal(directive, WIDGET) then - if ((strcmp(name, "XmNtopWidget") eq 0) or - (strcmp(name, "XmNbottomWidget") eq 0) or - (strcmp(name, "XmNleftWidget") eq 0) or - (strcmp(name, "XmNrightWidget") eq 0)) then - XtSetArg(args[argNum], argument, - (XtArgVal) (*((sXtAppContext *) - objectContainer(directive))).widget); + if ((strcmp(command, "XmNtopWidget") eq 0) or + (strcmp(command, "XmNbottomWidget") eq 0) or + (strcmp(command, "XmNleftWidget") eq 0) or + (strcmp(command, "XmNrightWidget") eq 0)) then + XtSetArg(args[argNum], argument, + (XtArgVal) target((Widget *) objectContainer( + directive))); orElse executionError("Wait for XmN*Widget"); deallocate(args); @@ -208,13 +222,17 @@ declareExternalFunction(XtCreateWidget) x_string = XmStringCreate(cvalue, XmFONTLIST_DEFAULT_TAG); XtSetArg(args[argNum], argument, (XtArgVal) x_string); endIf + + current = nextElementOfDaisyChain(current); + postIncr(argNum); endWhile createExternalObject(widget, WIDGET); + objectContainer(widget) = allocate(size(Widget)); target((Widget *) objectContainer(widget)) = - XtCreateWidget(name, wc, (*((sXtAppContext *) - objectContainer(parentObject))).widget, args, argNum); + XtCreateWidget(name, wc, target((Widget *) + objectContainer(parentObject)), args, argNum); XtManageChild(target((Widget *) objectContainer(widget))); pushOnStack(widget);