--- rpl/modules/motif/motif.rplc 2017/07/10 07:25:24 1.4 +++ rpl/modules/motif/motif.rplc 2017/08/22 11:37:31 1.9 @@ -6,16 +6,19 @@ libraryName(motif); exportExternalFunctions( XSynchronize, + XStoreName, XtAddCallback, XtAppExitMainLoop, XtAppInitialize, XtAppMainLoop, XtCreatePopupShell, + XtCreateManagedWidget, XtCreateWidget, XtDestroyWidget, XtPopdown, XtPopup, - XtRealizeWidget); + XtRealizeWidget, + XtRemoveCallback); declareSubroutine(onLoading) notice(stdout, "\nMotif library V2R1 for RPL/2 (C) 2017 BERTRAND Joel\n"); @@ -64,16 +67,27 @@ declareSubroutine(onLoading) createVariable(XmSTRING); - createListObject(callbacksList); - setFalse(initializationDone); + nullify(lCallbacks); endSubroutine declareSubroutine(onClosing) - // Destruction des variables spécifiques + // Destruction des variables spécifiques et des callbacks declareObject(variable); + declareDaisyChain(current); + declareDaisyChain(next); + + current = lCallbacks; + + repeatWhile(not nullified(current)) + next = nextElementOfDaisyChain(current); + variable = fetchElementFromDaisyChain(current); + freeObject(variable); + free(current); + current = next; + endWhile - freeObject(callbacksList); + nullify(lCallbacks); #define purgeVariable(var) \ do { \