mirror of
https://github.com/MCV-Software/TWBlue.git
synced 2025-01-31 05:10:45 -06:00
57 lines
2.0 KiB
Python
57 lines
2.0 KiB
Python
from AppKit import *
|
|
from PyObjCTools import AppHelper
|
|
from Carbon.CarbonEvt import RegisterEventHotKey, GetApplicationEventTarget
|
|
from Carbon.Events import cmdKey, controlKey
|
|
import struct
|
|
from threading import Thread
|
|
|
|
from main import KeyboardHandler
|
|
|
|
kEventHotKeyPressedSubtype = 6
|
|
kEventHotKeyReleasedSubtype = 9
|
|
|
|
class OSXKeyboardHandler(KeyboardHandler):
|
|
|
|
def __init__(self):
|
|
super(OSXKeyboardHandler, self).__init__()
|
|
self.replacement_keys = dict()
|
|
self.app = KeyboardCapturingNSApplication.alloc().init()
|
|
self._event_thread = Thread(target=AppHelper.runEventLoop)
|
|
self._event_thread.start()
|
|
|
|
def register_key (self, key, function):
|
|
super(OSXKeyboardHandler, self).register_key(key, function)
|
|
k, m = self.parse_key(key)
|
|
key_id = RegisterEventHotKey(k, m, (0, 0), GetApplicationEventTarget(), 0)
|
|
self.key_ids[key] = key_id
|
|
|
|
def unregister_key (self, key, function):
|
|
super(OSXKeyboardHandler, self).unregister_key(key, function)
|
|
key_id = self.key_ids[key]
|
|
raise NotImplementedError
|
|
|
|
def parse_key (self, key):
|
|
key=key.split("+")
|
|
#replacements
|
|
#Modifier keys:
|
|
for index, item in enumerate(key[0:-1]):
|
|
if self.replacement_mods.has_key(item):
|
|
key[index] = self.replacement_mods[item]
|
|
if self.replacement_keys.has_key(key[-1]):
|
|
key[-1] = self.replacement_keys[key[-1]]
|
|
elif len(key[-1])==1:
|
|
key[-1] = ord(str(key[-1]))-36
|
|
mods = 0
|
|
for i in key[:-1]:
|
|
mods = mods|i
|
|
return [key[-1], mods]
|
|
|
|
class KeyboardCapturingNSApplication(NSApplication):
|
|
|
|
def sendEvent_(self, theEvent):
|
|
if theEvent.type() == NSSystemDefined and theEvent.subtype() == kEventHotKeyPressedSubtype:
|
|
self.activateIgnoringOtherApps_(True)
|
|
NSRunAlertPanel(u'Hot Key Pressed', u'Hot Key Pressed', None, None, None)
|
|
super(NSApplication, self).sendEvent_(theEvent)
|
|
|