Object Events (XForms (Forms Library) - Version 1.2 (Rev. 4) A Graphical User Interface Toolkit for X)

Previous: Form Events, Up: Interaction [Contents][Index]

#### 35.1.2 Object Events

Just as you can by-pass the internal event processing for a particular form, you can also do so for an object. Unlike in raw callbacks, you can not select individual events.

The mechanism provided is via the registration of a pre-handler for an object. The pre-handler will be called before the built-in object handler. By electing to handle some of the events, a pre-handler can, in effect, replace part of the built-in handler.

In the chapter about pre-emptive handlers the API was already discussed in detail, so here we just repeat the discussion for completeness as any use of pre-emptive handler is considered "dirty tricks".

To register a pre-handler, use the following routine

    typedef int (*FL_HANDLEPTR)(FL_OBJECT *obj, int event,
                                FL_Coord mx, FL_Coord my,
                                int key, void *raw_event);

    void fl_set_object_prehandler(FL_OBJECT *, FL_HANDLEPTR prehandler);

where `event` is the generic event in the Forms Library, that is, `FL DRAW`, `FL ENTER` etc. The arguments `mx` and `my` are the mouse position and `key` is the key pressed. The last parameter, `raw_event` is a pointer to the XEvent that caused the invocation of the pre-handler. cast to a void pointer.

Notice that the pre-handler has the same function prototype as the built-in handler. Actually they are called with the exact same parameters by the event dispatcher. The prehandler should return `0` if the processing by the built-in handler should continue. A return value of `FL PREEMPT` will prevent the dispatcher from calling the built-in handler.

See demo program `preemptive.c` for an example.

A similar mechanism exists for registering a post-handler, i.e., a handler invoked after the built-in handler is finished, by using

    void fl_set_object_posthandler(FL_OBJECT *, FL_HANDLEPTR prehandler);

Whenever possible a post-handler should be used instead of a pre-handler.

Previous: Form Events, Up: Interaction [Contents][Index]