Added some more information on event delivery (STR 1983)
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@7466 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
parent
34736e17ac
commit
efd09a5a70
1
CHANGES
1
CHANGES
@ -1,5 +1,6 @@
|
||||
CHANGES IN FLTK 1.3.0
|
||||
|
||||
- Added documentation for event delivery (STR #1983)
|
||||
- Fixed menu and tooltip window animation bug under X11 (compiz)
|
||||
by setting an appropriate window type (STR #2082)
|
||||
- redesigned CMake files (STR #2317).
|
||||
|
||||
@ -337,15 +337,11 @@ These are all trivial inline functions and thus very fast and small:
|
||||
|
||||
\section events_propagation Event Propagation
|
||||
|
||||
FLTK follows very simple and unchangeable rules for sending
|
||||
events. The major innovation is that widgets can indicate (by
|
||||
returning 0 from the
|
||||
\p handle()
|
||||
method) that they are not
|
||||
interested in an event, and FLTK can then send that event
|
||||
elsewhere. This eliminates the need for \e "interests"
|
||||
(event masks or tables), and this is probably the main reason
|
||||
FLTK is much smaller than other toolkits.
|
||||
Widgets receive events via the virtual handle() function. The argument indicates
|
||||
the type of event that can be handled. The widget must indicat if it handled the
|
||||
event by returning 1. FLTK will then remove the event and wait for further events
|
||||
from the host. If the widget's handle function returns 0, FLTK may redistribute
|
||||
the event based on a few rules.
|
||||
|
||||
Most events are sent directly to the
|
||||
\p handle()
|
||||
@ -369,6 +365,44 @@ control those leaf widgets:
|
||||
\li Fl::release()
|
||||
\li Fl_Widget::take_focus()
|
||||
|
||||
FLTK propagetes events along the widget hierarchy depending on the kind of event
|
||||
and the status of the UI. Some events are injected directly into the widgets, others
|
||||
may be resend as anew event to a different group of receivers.
|
||||
|
||||
Mouse click events are first sent to the Window that caused them. The Window
|
||||
then forwards the event down the hierarchy until it reaches the Widget that
|
||||
is below the click position. It that Widget uses the given event, the widget
|
||||
is marked "pushed" and will receive all following mouse motion events until the
|
||||
mouse button release.
|
||||
|
||||
Mouse wheel events are sent to the Window that caused the event. The Window
|
||||
propagets the event down the tree, first to the widget that is below the
|
||||
mouse pointer, and if that does not succeed, to all other widgets in the Group.
|
||||
This ensures that Scroll widgets work as expected with the widget furthest
|
||||
down in the hierarchy getting the first opportunity to use the wheel event,
|
||||
but also giving scroll bars, that are ot directly below the mouse a chance.
|
||||
|
||||
Keyboard events are sent directly to the Widget that has keyboard focus.
|
||||
If the focused Widget rejects the event, it is resent as a Shortcut event,
|
||||
first to the top-most window, then to the widget below the mouse pointer,
|
||||
propagiting up the hierarchy to all its parents. Those send the event also
|
||||
to all widgets that are not below the mouse pointer. Now if that did not work
|
||||
out, the shortcut is sent to all registered shortcut handler.
|
||||
|
||||
If we are still unsuccessful, the event handler flips the case of the shortcut
|
||||
letter and starts over. Finally, if the key is "escape", FLTK sends a close
|
||||
event to the top-most window.
|
||||
|
||||
All other events are pretty much sent right away to the window that created
|
||||
the event.
|
||||
|
||||
Widgets can "grab" events. The grabbing window gets all events exclusively, but
|
||||
usually by the same rules as described above.
|
||||
|
||||
Windows can also request eclusivity in event handling by making the
|
||||
window non-modal.
|
||||
|
||||
|
||||
\section events_compose_characters FLTK Compose-Character Sequences
|
||||
|
||||
\todo Does Fltk Compose Character Sequences text need updating
|
||||
|
||||
Loading…
Reference in New Issue
Block a user