Emulated Cursor
KaiOS supports emulating a cursor in app, which user can control with d-pad. There are two types of settings to invoke emulated cursor in app.
1. Emulated Cursor Handled by System
To enable emulated cursor in app, set cursor to true in manifest.webmanifest file b2g_features item:
{
  "cursor": true
}
App with this setting will have the feature of emulated cursor just as browser tab does. For example, cursor is automatically turned off when focusing on input field, and is turned on after leaving input field.
Note: This type of cursor usage is strongly recommended. For PWA app, KaiOS has enabled emulated cursor as default to provide better user experience, it can be disabled if the app has its own solution (keypad interaction). For package app, it can be enabled if the app needs.
2. Emulated Cursor Handled by App
Note: This type of cursor usage by design lets app have
FULL CONTROLof emulated cursor, which means that system willNOTturn on or off cursor for app. That is, app has full responsibilities of when to show and when to hide the cursor. Furthermore, some key events are treated differently when cursor is on, please find more details in the followings:
- Turning on cursor will prevent default and stop propagation on key events of
 Enter,Up,Right,Down,Left.- Turning on cursor will
 NOTprevent default or stop propagation on key event ofRSK, in addition, it will triggercontextmenuevent on key event ofRSK.- When focus is on an input element (IME is active), app should remember to turn cursor off by itself.
 - Other than the case of focusing on input elements, there might be other cases that apps need to control.
 
Emulated cursor handled by system makes the emulated cursor exist in the app all the time like browser tab.
If app needs to control cursor on their own, another api virtualcursor is supported.
To get permissions, app must be at least a signed app. Set virtualcursor in manifest.webmanifest file b2g_features item:
{
  "permissions": {
    "virtualcursor": {}
  }
}
To turn on cursor:
navigator.b2g.virtualCursor.enable()
To turn off cursor:
navigator.b2g.virtualCursor.disable()