--- rpl/modules/motif/XtCreateWidget.rplc 2017/07/10 07:25:24 1.4 +++ 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,7 +43,7 @@ declareExternalFunction(XtCreateWidget) returnOnError(freeObject(parametersObject); freeObject(parentObject)); - ifIsExternal(widget, WIDGET) then + ifIsExternal(parentObject, WIDGET) then orElse executionError("Type mismatch error"); returnOnError(freeObject(parametersObject); @@ -144,6 +145,7 @@ declareExternalFunction(XtCreateWidget) postIncr(argNum); endWhile +uprintf("%d\n", argNum); args = allocate(size(Arg) * argNum); argNum = 0; getDaisyChainFromList(parametersObject, current); @@ -151,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); @@ -162,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); @@ -191,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); @@ -215,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, target((sXtAppContext *) - objectContainer(parentObject)).widget, args, argNum); + XtCreateWidget(name, wc, target((Widget *) + objectContainer(parentObject)), args, argNum); XtManageChild(target((Widget *) objectContainer(widget))); pushOnStack(widget);