0 Replies
      Latest reply on Jun 15, 2015 12:54 PM by pkamb
      pkamb Level 1 Level 1 (0 points)

        I was very excited to find Input Method Kit. I was planning on creating software implementations of various specialized hardware keyboards.




        Unfortunately I have found that Input Method Kit does not catch NSEvents of type NSKeyUp.




        This immediately disqualifies all "chorded" input methods. One cannot calculate chording without knowing when keys are pressed down and (importantly) when they go back up.




        Because Input Method Kit does not catch NSKeyUp events, I cannot calculate if keys are being pressed at the same time. Chording keyboard input methods will thus not work.


        Other OS X technologies such as CGEventTap or [NSEvent addLocalMonitorForEventsMatchingMask:] allow for monitoring key events of NSKeyUp, in addition to NSKeyDown or other types. Input Method Kit only allows monitoring of NSKeyDown.


        Additionally, returning `NSKeyUpMask` from IMKStateSetting `recognizedEvents:` does NOT enable the NSKeyUp events in IMKit. It seems like it should.


        - (NSUInteger)recognizedEvents:(id)sender {

            return NSKeyUpMask;



        Using `recognizedEvents:` works for some other event types, such as FlagsChanged. But it doesn't work for KeyUp.


        Steps to Reproduce:

        1. Implement an Input Method Kit app (similar to the NumberInput Apple sample code)

        2. Implement the IMKit method `handleEvent:client:`

        3. Activate your Input Method

        4. As you press keys, notice that the `NSKeyDown` events are seen and handled by your input method.

        5. As the keys spring back up, notice that `NSKeyUp` events are NOT seen or handled by your input method.


        Expected Results:

        The input method should see both NSKeyDown and NSKeyUp events.


        IMKStateSetting `recognizedEvents:` allows setting of NSKeyUpMask.


        NSKeyUp events are *vital* for many input methods, such as chorded keyboards.


        Actual Results:

        NSKeyUp events are not observed by your input method. Only NSKeyDown events are seen.


        Unable to handle NSKeyUp events.


        Unable to implement a software chorded keyboard input method