--- rpl/modules/motif/motif.rplc 2017/07/05 13:53:40 1.3 +++ rpl/modules/motif/motif.rplc 2017/08/22 11:37:31 1.9 @@ -5,10 +5,20 @@ libraryName(motif); exportExternalFunctions( + XSynchronize, + XStoreName, + XtAddCallback, XtAppExitMainLoop, XtAppInitialize, XtAppMainLoop, - XtCreateWidget); + XtCreatePopupShell, + XtCreateManagedWidget, + XtCreateWidget, + XtDestroyWidget, + XtPopdown, + XtPopup, + XtRealizeWidget, + XtRemoveCallback); declareSubroutine(onLoading) notice(stdout, "\nMotif library V2R1 for RPL/2 (C) 2017 BERTRAND Joel\n"); @@ -56,11 +66,28 @@ declareSubroutine(onLoading) createVariable(XtGrabExclusive); createVariable(XmSTRING); + + 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 + + nullify(lCallbacks); #define purgeVariable(var) \ do { \