Attempt to fix forward keypress and numpad state.
This commit is contained in:
@@ -437,8 +437,8 @@ class driver(inputDriver):
|
||||
self.refresh_interesting_keys()
|
||||
passive_grabs = self.build_passive_grabs()
|
||||
failed_before = self.failed_grabs
|
||||
for key_name, modifier_mask in passive_grabs:
|
||||
self.grab_key_name(key_name, modifier_mask)
|
||||
for key_name, modifier_mask, include_num_lock in passive_grabs:
|
||||
self.grab_key_name(key_name, modifier_mask, include_num_lock)
|
||||
self.display.flush()
|
||||
self.grab_signature = signature
|
||||
self.write_debug(
|
||||
@@ -454,9 +454,10 @@ class driver(inputDriver):
|
||||
def build_passive_grabs(self):
|
||||
grabs = set()
|
||||
for fenrir_key in self.env["input"]["fenrir_key"]:
|
||||
grabs.add((fenrir_key, 0))
|
||||
grabs.add((fenrir_key, 0, True))
|
||||
for script_key in self.env["input"]["script_key"]:
|
||||
grabs.add((script_key, 0))
|
||||
grabs.add((script_key, 0, True))
|
||||
grabs.add(("KEY_NUMLOCK", 0, True))
|
||||
for shortcut in self.env.get("rawBindings", {}).values():
|
||||
keys = shortcut[1]
|
||||
expanded_keys = self.expand_special_keys(keys)
|
||||
@@ -470,12 +471,40 @@ class driver(inputDriver):
|
||||
final_key = non_modifier_keys[-1]
|
||||
if "KEY_FENRIR" in keys:
|
||||
for fenrir_key in self.env["input"]["fenrir_key"]:
|
||||
grabs.add((fenrir_key, modifier_mask))
|
||||
grabs.add((fenrir_key, modifier_mask, True))
|
||||
fenrir_modifier_mask = self.modifier_masks.get(
|
||||
fenrir_key, 0
|
||||
)
|
||||
if fenrir_modifier_mask:
|
||||
grabs.add(
|
||||
(
|
||||
final_key,
|
||||
modifier_mask | fenrir_modifier_mask,
|
||||
not final_key.startswith("KEY_KP"),
|
||||
)
|
||||
)
|
||||
elif "KEY_SCRIPT" in keys:
|
||||
for script_key in self.env["input"]["script_key"]:
|
||||
grabs.add((script_key, modifier_mask))
|
||||
grabs.add((script_key, modifier_mask, True))
|
||||
script_modifier_mask = self.modifier_masks.get(
|
||||
script_key, 0
|
||||
)
|
||||
if script_modifier_mask:
|
||||
grabs.add(
|
||||
(
|
||||
final_key,
|
||||
modifier_mask | script_modifier_mask,
|
||||
not final_key.startswith("KEY_KP"),
|
||||
)
|
||||
)
|
||||
else:
|
||||
grabs.add((final_key, modifier_mask))
|
||||
grabs.add(
|
||||
(
|
||||
final_key,
|
||||
modifier_mask,
|
||||
not final_key.startswith("KEY_KP"),
|
||||
)
|
||||
)
|
||||
return grabs
|
||||
|
||||
def expand_special_keys(self, keys):
|
||||
@@ -495,7 +524,9 @@ class driver(inputDriver):
|
||||
modifier_mask |= self.modifier_masks.get(key_name, 0)
|
||||
return modifier_mask
|
||||
|
||||
def grab_key_name(self, key_name, modifier_mask=0):
|
||||
def grab_key_name(
|
||||
self, key_name, modifier_mask=0, include_num_lock=True
|
||||
):
|
||||
keysym_names = self.key_name_to_keysym_names(key_name)
|
||||
for keysym_name in keysym_names:
|
||||
keysym = XK.string_to_keysym(keysym_name)
|
||||
@@ -504,7 +535,9 @@ class driver(inputDriver):
|
||||
keycode = self.display.keysym_to_keycode(keysym)
|
||||
if not keycode:
|
||||
continue
|
||||
for effective_mask in self.optional_modifier_masks(modifier_mask):
|
||||
for effective_mask in self.optional_modifier_masks(
|
||||
modifier_mask, include_num_lock
|
||||
):
|
||||
try:
|
||||
self.window.grab_key(
|
||||
keycode,
|
||||
@@ -524,9 +557,9 @@ class driver(inputDriver):
|
||||
debug.DebugLevel.WARNING,
|
||||
)
|
||||
|
||||
def optional_modifier_masks(self, modifier_mask):
|
||||
def optional_modifier_masks(self, modifier_mask, include_num_lock=True):
|
||||
optional_masks = [0, X.LockMask]
|
||||
if self.num_lock_mask:
|
||||
if include_num_lock and self.num_lock_mask:
|
||||
optional_masks += [self.num_lock_mask, self.num_lock_mask | X.LockMask]
|
||||
return {modifier_mask | optional for optional in optional_masks}
|
||||
|
||||
@@ -610,6 +643,15 @@ class driver(inputDriver):
|
||||
self.ungrab_all_devices()
|
||||
|
||||
def get_led_state(self, led=0):
|
||||
try:
|
||||
pointer = self.root.query_pointer()
|
||||
mask = getattr(pointer, "mask", 0)
|
||||
if led == 0:
|
||||
return bool(self.num_lock_mask and mask & self.num_lock_mask)
|
||||
if led == 1:
|
||||
return bool(mask & X.LockMask)
|
||||
except Exception:
|
||||
pass
|
||||
return False
|
||||
|
||||
def set_led_state(self, led_dict):
|
||||
|
||||
Reference in New Issue
Block a user