haiku/docs/develop/servers/app_server/input.rst

119 lines
2.2 KiB
ReStructuredText
Raw Normal View History

Input Processing
================
Input Server messages
---------------------
The Input Server collects information about keyboard and mouse events
and forwards them to the app_server via messages. They are sent to port
specifically for such messages, and the port is monitored by a thread
whose task is to monitor, process, and dispatch them to the appropriate
recipients. The Input Server is a regular BApplication, and unlike other
applications, it requests a port to which it can send input messages.
Mouse
-----
Mouse events consist of button changes, mouse movements, and the mouse
wheel. The message will consist of the time of the event and attachments
appropriate for each message listed below:
B_MOUSE_DOWN
............
- when
- buttons' status
- location of the cursor
- modifiers
- clicks
B_MOUSE_UP
..........
- time
- buttons' status
- location of the cursor
- modifiers
B_MOUSE_MOVED
.............
- time
- location of the cursor
- buttons' status
B_MOUSE_WHEEL_CHANGED
.....................
- time
- location of the cursor
- transit - in or out
- x delta
- y delta
Keyboard
--------
Keyboard events consist of notification when a key is pressed or
released. Any keypress or release will evoke a message, regardless of
whether or not the key is mapped. The message will consist of the
appropriate code and attachments listed below:
B_KEY_DOWN
..........
- time
- key code
- repeat count
- modifiers
- states
- UTF-8 code
- string generated
- modifier-independent ASCII code
B_KEY_UP
........
- time
- key code
- modifiers
- states
- UTF-8 code
- string generated
- modifier-independent ASCII code
B_UNMAPPED_KEY_DOWN
...................
- time
- key code
- modifiers
- states
B_UNMAPPED_KEY_UP
.................
- time
- key code
- modifiers
- states
B_MODIFIERS_CHANGED
...................
sent when a modifier key changes
- time
- modifier states
- previous modifier states
- states
Nearly all keypresses received by the app_server are passed onto the
appropriate application. Control-Tab, when held, is sent to the Deskbar
for app switching. Command+F?? is intercepted and a workspace is
switched. Left Control + Alt + Delete is not even intercepted by the
app_server. The Input Server receives it and shows the Team Monitor
window.