XtAddEventHandler
:
XtAddEventHandler( Widget widget, EventMask event_mask, _XtBoolean nonmaskable, XtEventHandler eventhandler, XtPointer call_data );Το πρώτο όρισμα της
XtAddEventHandler
είναι το widget μέσα στο οποίο
λαμβάνει χώρα το γεγονός (ή αλλιώς το παράθυρο του widget). Το δεύτερο
όρισμα είναι το γεγονός (ή τα γεγονότα) για το οποίο θέλουμε να καλείται η
eventhandler συνάρτηση. Στο όρισμα αυτό χρησιμοποιούμε τους ίδιους
συμβολισμούς με την XSelectInput
της Xlib (π.χ. ButtonPressMask
). Το τρίτο
όρισμα έχει σχέση με τα nonmaskable events που αναλύονται εδώ, μια τιμή
FALSE
είναι αρκετή. Το τέταρτο όρισμα είναι η συνάρτηση που θα καλείται όταν
συμβαίνει το γεγονός και τέλος το πέμπτο όρισμα είναι κάποια δεδομένα που
ίσως θέλουμε να περνούν στην eventhandler συνάρτηση κατά την κλήση. Σε
περίπτωση που δεν θέλουμε να περάσουμε δεδομένα βάζουμε την τιμή NULL
(ισχθει και για την XtAddCallback
).
Οι eventhandler συναρτήσεις, όπως και οι callback, λαμβάνουν συγκεκριμένο αριθμό και τύπο ορισμάτων:
void eventhandler( Widget widget, caddr_t client_data, XEvent* event );Τα ορίσματα αυτά είναι το widget που κάλεσε την eventhandler συνάρτηση, τα δεδομένα που ορίσαμε να στέλνονται στην eventhandler και τέλος η δομή XEvent του γεγονότος που προκάλεσε την κλήση. Ένα παράδειγμα ορισμού συνάρτησης ως eventhandler φαίνεται στο παρακάτω απόσπασμα κώδικα, στο οποίο κάθε φορά που πατιέται ένα κουμπί του ποντικιού μέσα στην περιοχή του widget
areawidget
αυξάνεται κατά ένα η τιμή της μεταβλητής counter
:
Widget areawidget; int counter = 0; . . . XtAddEventHandler( areawidget, ButtonPressMask, FALSE, addone, &counter); . . . addone( w, number, event) Widget w; int* number; XEvent *event; { printf("Mouse Button was pressed once more. Increasing counter.\n); *number++; }