Initialize is indeed a callback. When you create a widget of a
particular class, it will initialize that the widget. This is pretty
easy to demonstrate. Load up nedit under a debugger, set a breakpoint
on Initialize, and you'll see that's it's called from deep inside the
Motif library.
Functions in C can be stored and called through function pointers.
Putting Initailize into a structure doesn't call it right then - it just
stores the function pointer there. Later on the library code will call
the function with the appropriate parentheses.
The whole point of callbacks is that you only need to make sure the type
signatures match, and that's the responsibility of the callee. There's
no way Xt can #include "text.h" since it's compiled before nedit even
exists. But Xt can call any category of functions that has that has a
particular function signature. We simply register the particular
function with it (via this structure), it knows how to call functions of
that type, and there you go. It has no idea *which* function we are
registering. We could deign to supply a function that took the same
signature and did absolutely nothing and it could not tell the difference.
A lot of the complexity you're seeing here isn't C, but a the reality of
any sort of user interface code. Every UI needs callbacks or a some
sort of abstract signal/slot mechanism.
--
NEdit Develop mailing list - [email protected]
http://www.nedit.org/mailman/listinfo/develop