--- rpl/modules/motif/XtAddCallback.rplc 2017/07/11 16:04:53 1.3 +++ rpl/modules/motif/XtAddCallback.rplc 2017/07/30 21:59:40 1.6 @@ -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,24 @@ 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)); + sCallback->widget = target(objectContainer(Widget, widget)); + objectOf(callbackObject) = sCallback; - XtAddCallback(target((Widget *) objectContainer(widget)), + XtAddCallback(target(objectContainer(Widget, widget)), callback, rplCallback, (XtPointer) sCallback); - tmp = allocate(size(struct_liste_chainee)); - tmp->suivant = lCallbacks; - tmp->donnee = (void *) sCallback; + tmp = allocate(size(daisyChain)); + tmp->next = lCallbacks; + tmp->data = callbackObject; lCallbacks = tmp; + + dupObject(callbackObject); + pushOnStack(callbackObject); orElse executionError("Application not initialized"); returnOnError();