--- rpl/modules/motif/XtAddCallback.rplc 2017/07/10 14:48:43 1.2 +++ rpl/modules/motif/XtAddCallback.rplc 2017/07/11 16:04:53 1.3 @@ -5,12 +5,14 @@ declareExternalFunction(XtAddCallback) declareObject(widget); declareObject(callbackName); declareObject(callbackProc); - declareObject(subList); - declareObject(procStatus); - string type; + sXtCallback *sCallback; - String callback; + string type; + + String callback; + + struct_liste_chainee *tmp; HEADER declareHelpString("Add callback to a widget\n" @@ -47,21 +49,18 @@ declareExternalFunction(XtAddCallback) freeObject(callbackName); freeObject(widget)); endIf - // Adding a copy of expression in a list. - - dupObject(callbackProc); - - createListObject(subList); - createObject(procStatus); - - objectContainer(procStatus) = address(procStatus(rpl_arguments)); - - insertObjectIntoList(subList, callbackProc); - insertObjectIntoList(subList, procStatus); - insertObjectIntoList(callbacksList, subList); + sCallback = allocate(size(sXtCallback)); + sCallback->status = procStatus(rpl_arguments); + sCallback->callback = callbackProc; + sCallback->widget = target((Widget *) objectContainer(widget)); XtAddCallback(target((Widget *) objectContainer(widget)), - callback, rplCallback, (XtPointer) subList); + callback, rplCallback, (XtPointer) sCallback); + + tmp = allocate(size(struct_liste_chainee)); + tmp->suivant = lCallbacks; + tmp->donnee = (void *) sCallback; + lCallbacks = tmp; orElse executionError("Application not initialized"); returnOnError();