ButtonEvent split into distinct mouse/keyboard events
Public domain