コード例 #1
0
        def callback(proxy, event_type, event, reference):
            SUPPRESS_EVENT = None
            PASS_EVENT_THROUGH = event

            # Don't pass on meta events meant for this event tap.
            is_unexpected_event = event_type not in self._KEYBOARD_EVENTS
            if is_unexpected_event:
                if event_type == kCGEventTapDisabledByTimeout:
                    # Re-enable the tap and hope we act faster next time
                    CGEventTapEnable(self._tap, True)
                    plover.log.warning(
                        "Keystrokes may have been missed. "
                        + "Keyboard event tap has been re-enabled. ")
                return SUPPRESS_EVENT

            # Don't intercept the event if it has modifiers, allow
            # Fn and Numeric flags so we can suppress the arrow and
            # extended (home, end, etc...) keys.
            suppressible_modifiers = (kCGEventFlagMaskNumericPad |
                                      kCGEventFlagMaskSecondaryFn |
                                      kCGEventFlagMaskNonCoalesced)
            has_nonsupressible_modifiers = \
                CGEventGetFlags(event) & ~suppressible_modifiers
            if has_nonsupressible_modifiers:
                return PASS_EVENT_THROUGH

            keycode = CGEventGetIntegerValueField(
                event, kCGKeyboardEventKeycode)
            key = KEYCODE_TO_KEY.get(keycode)
            self._async_dispatch(key, event_type)
            if key in self._suppressed_keys:
                return SUPPRESS_EVENT
            return PASS_EVENT_THROUGH
コード例 #2
0
 def callback(proxy, event_type, event, reference):
     # Don't pass on meta events meant for this event tap.
     if event_type not in self._KEYBOARD_EVENTS:
         return None
     # Don't intercept events from this module.
     if (CGEventGetIntegerValueField(event, kCGEventSourceStateID) ==
         MY_EVENT_SOURCE_ID):
         return event
     # Don't intercept the event if it has modifiers.
     if CGEventGetFlags(event) & ~kCGEventFlagMaskNonCoalesced:
         return event
     keycode = CGEventGetIntegerValueField(event, kCGKeyboardEventKeycode)
     if keycode not in KEYCODE_TO_CHAR:
         return event
     char = KEYCODE_TO_CHAR[keycode]
     handler_name = 'key_up' if event_type == kCGEventKeyUp else 'key_down'
     handler = getattr(self, handler_name, lambda event: None)
     handler(KeyboardEvent(char))
     return None if self.is_keyboard_suppressed() else event
コード例 #3
0
ファイル: osxkeyboardcontrol.py プロジェクト: buribu/plover
 def callback(proxy, event_type, event, reference):
     # Don't pass on meta events meant for this event tap.
     if event_type not in self._KEYBOARD_EVENTS:
         return None
     # Don't intercept the event if it has modifiers, allow
     # Fn and Numeric flags so we can suppress the arrow and
     # extended (home, end, etc...) keys.
     if CGEventGetFlags(event) & ~(kCGEventFlagMaskNumericPad
                                   | kCGEventFlagMaskSecondaryFn
                                   | kCGEventFlagMaskNonCoalesced):
         return event
     keycode = CGEventGetIntegerValueField(event,
                                           kCGKeyboardEventKeycode)
     key = KEYCODE_TO_KEY.get(keycode)
     if key is not None:
         handler = self.key_up if event_type == kCGEventKeyUp else self.key_down
         handler(key)
         if key in self._suppressed_keys:
             # Suppress event.
             event = None
     return event
コード例 #4
0
 def callback(proxy, type, event, refcon):
     if self.pid == CGEventGetIntegerValueField(
             event, kCGEventTargetUnixProcessID):
         CGEventPostToPid(pid, event)
     return event