Pointer events may be associated with any RWindowBase
derived class. At the simplest, pointer down, drag and up events are generated, associated with the window in which the down occurred.
The window server allows applications to control pointer handling much more finely than this.
Multiple drag events which the window server receives from the pointer device driver are usually translated into a single drag event for the client application, incorporating all movement occurring between one pointer-related RWsSession::GetEvent()
and the next RWsSession::EventReady()
. This behaviour is appropriate for a typical application, and ensures that pointer events are delivered precisely at a rate which the application can handle.
If required, an application may request the window server to store all pointer events in a pointer buffer, and then deliver that entire buffer when it is full. This behaviour is useful for freehand drawing, or for handwriting recognition.
Double-click may be detected by the window server: the interval between double clicks is supported as a system-wide setting.
Repeated pointer-down events may be generated when the pointer is held still is a particular place — similar to keyboard auto-repeat.
Designated areas of a window may be designated as key areas, so that a pointer event in that window is turned into a key event, and delivered to the window’s owning client application as a key event: this is intended to support on-screen pseudo-keyboards.
The pointer may be grabbed by a particular window so that events generated outside that window's extent are associated with that window.
A window can capture pointer clicks from outsides it's visible area. In
order to do so it has to call the function RWindowBase::SetPointerCapture()
. Various values can be passed as a parameter to this
function allowing for example: no capturing to take place, capturing of all events from within the
windows window group,
capturing of all events from within all
groups.
If several windows request events to be captured then the window server
will do some arbitration.