Skip to content

Latest commit

 

History

History
56 lines (40 loc) · 1.81 KB

DEVELOP.md

File metadata and controls

56 lines (40 loc) · 1.81 KB

Document for Developers

The functions of KeyRemap4MacBook by Developer's perspective.

  • Change the key event. (For example, "Change Right Option to Enter")
  • Change the consumer key event. (The consumer key is the functional key such as "Volume Down")
  • Change the pointing event. (For example, "MiddleClick to Expose")
  • The key repeat function.
  • Add private setting dynamically by private.xml.
  • Filtering by application or input source or specific device, etc.
  • Send Growl notification. (The status of Modifier Lock and extra messages.)
  • Support to "Fast User Switching".
  • PreferencePane in System Preferences.
  • Check software updates automatically

How to build

See http://pqrs.org/macosx/keyremap4macbook/source.html

Main components

  • KeyRemap4MacBook.kext (Kernel Extension)
  • KeyRemap4MacBook_server.app (Userspace Application)

Sub components

  • KeyRemap4MacBook.app (Updater)
  • KeyRemap4MacBook.prefPane (PreferencePane)

About event handling (kext)

To prevent leakage of the input event, the modification of the input event is perfomed inside kernel entirely.

We set a hook function in the middle of hardware driver. And we modify the input event in the hook function.

...

Threads and Lock (kext)

We use a global lock to guard the status of modifier flags, the status of buttons, and other global variables. All threads use this global lock. The only one thread runs at the same time.

Threads:

  • Timer callback (*_timer_callback)
  • hooked function (EventInputQueue::push_*)
  • gIOMatchedNotification and gIOTerminatedNotification callback of input devices (Core::*Notification_callback)
  • IOUserClient callback (UserClient_kext::callback_*)