File:
[local] /
rpl /
modules /
motif /
XtRemoveCallback.rplc
Revision
1.2:
download - view:
text,
annotated -
select for diffs -
revision graph
Sun Jul 30 21:59:41 2017 UTC (7 years, 9 months ago) by
bertrand
Branches:
MAIN
CVS tags:
rpl-4_1_35,
rpl-4_1_34,
rpl-4_1_33,
rpl-4_1_32,
rpl-4_1_31,
rpl-4_1_30,
rpl-4_1_29,
rpl-4_1_28,
rpl-4_1_27,
HEAD
Ajout d'une série de patches pour gérer les instructions de type A->B
dans les bibliothèques externes.
1: #include "src/rplexternals.h"
2: #include "motif.h"
3:
4: declareExternalFunction(XtRemoveCallback)
5: declareObject(widget);
6: declareObject(callback);
7: declareObject(callbackFromList);
8: declareDaisyChain(current);
9: declareDaisyChain(previous);
10: declareDaisyChain(next);
11:
12: HEADER
13: declareHelpString("Remove callback from a widget\n"
14: " 2: widget\n"
15: " 1: callback\n");
16: numberOfArguments(2);
17: FUNCTION
18: if (initializationDone eq true) then
19: pullFromStack(callback, external);
20: returnOnError(freeObject(callback));
21:
22: pullFromStack(widget, external);
23: returnOnError(freeObject(callback); freeObject(widget));
24:
25: ifIsExternal(widget, WIDGET) then
26: orElse
27: executionError("Type mismatch error");
28: returnOnError(freeObject(callback); freeObject(widget));
29: endIf
30:
31: ifIsExternal(callback, CALLBACK) then
32: orElse
33: executionError("Type mismatch error");
34: returnOnError(freeObject(callback); freeObject(widget));
35: endIf
36:
37: current = lCallbacks;
38: nullify(previous);
39:
40: repeatWhile(not nullified(current))
41: callbackFromList = fetchElementFromDaisyChain(current);
42:
43: if (((objectContainer(sXtCallback, callbackFromList))->widget
44: eq target(objectContainer(Widget, widget))) and
45: (callback eq callbackFromList)) then
46: break;
47: endIf
48:
49: previous = current;
50: nextElementOfDaisyChain(current);
51: endWhile
52:
53: if (nullified(current)) then
54: executionError("Callback not found");
55: returnOnError(freeObject(callback); freeObject(widget));
56: endIf
57:
58: if (callbackFromList eq fetchElementFromDaisyChain(lCallbacks)) then
59: next = current;
60: nextElementOfDaisyChain(next);
61: lCallbacks = next;
62:
63: freeObject(callbackFromList);
64: free(current);
65: orElse
66: previous->next = current->next;
67:
68: freeObject(callbackFromList);
69: free(current);
70: endIf
71: orElse
72: executionError("Application not initialized");
73: returnOnError();
74: endIf
75: END
76: endExternalFunction
77:
78: // vim: ts=4
CVSweb interface <joel.bertrand@systella.fr>