--- rpl/modules/motif/XtAddCallback.rplc 2017/07/11 16:04:53 1.3 +++ rpl/modules/motif/XtAddCallback.rplc 2017/07/17 21:35:32 1.4 @@ -4,7 +4,9 @@ declareExternalFunction(XtAddCallback) declareObject(widget); declareObject(callbackName); + declareObject(callbackObject); declareObject(callbackProc); + declareDaisyChain(tmp); sXtCallback *sCallback; @@ -12,13 +14,12 @@ declareExternalFunction(XtAddCallback) String callback; - struct_liste_chainee *tmp; - HEADER declareHelpString("Add callback to a widget\n" " 3: widget\n" " 2: callback name (XmNactivateCallback)\n" - " 1: expression\n"); + " 1: expression\n" + " -> 1: callback\n"); numberOfArguments(3); FUNCTION if (initializationDone eq true) then @@ -49,18 +50,23 @@ declareExternalFunction(XtAddCallback) freeObject(callbackName); freeObject(widget)); endIf + createExternalObject(callbackObject, CALLBACK); + sCallback = allocate(size(sXtCallback)); sCallback->status = procStatus(rpl_arguments); sCallback->callback = callbackProc; sCallback->widget = target((Widget *) objectContainer(widget)); + objectContainer(callbackObject) = sCallback; XtAddCallback(target((Widget *) objectContainer(widget)), callback, rplCallback, (XtPointer) sCallback); tmp = allocate(size(struct_liste_chainee)); - tmp->suivant = lCallbacks; - tmp->donnee = (void *) sCallback; + tmp->next = lCallbacks; + tmp->data = callbackObject; lCallbacks = tmp; + + pushOnStack(callbackObject); orElse executionError("Application not initialized"); returnOnError();