Some fenrir shortcuts were being fenicky. Hopefully ficked it.

This commit is contained in:
Storm Dragon
2026-05-22 15:02:33 -04:00
parent 3a1dded3ed
commit e341a26e90
2 changed files with 28 additions and 42 deletions
+14 -25
View File
@@ -276,7 +276,7 @@ class driver(inputDriver):
while active.value: while active.value:
try: try:
self.refresh_grabs() self.refresh_grabs()
self.poll_modifier_interrupt_keys(event_queue) self.poll_modifier_interrupt_keys()
if not self.display.pending_events(): if not self.display.pending_events():
time.sleep(0.01) time.sleep(0.01)
continue continue
@@ -374,7 +374,7 @@ class driver(inputDriver):
"event_x_time": getattr(event, "time", X.CurrentTime), "event_x_time": getattr(event, "time", X.CurrentTime),
} }
def poll_modifier_interrupt_keys(self, event_queue): def poll_modifier_interrupt_keys(self):
if not self.active or not self.should_poll_modifier_interrupt_keys(): if not self.active or not self.should_poll_modifier_interrupt_keys():
return return
try: try:
@@ -387,9 +387,7 @@ class driver(inputDriver):
self.modifier_state = current_state self.modifier_state = current_state
for key_name, modifier_mask in self.interrupt_modifier_masks(): for key_name, modifier_mask in self.interrupt_modifier_masks():
if current_state & modifier_mask and not previous_state & modifier_mask: if current_state & modifier_mask and not previous_state & modifier_mask:
self.queue_modifier_interrupt_event(event_queue, key_name, 1) self.interrupt_output_on_modifier_key(key_name)
elif previous_state & modifier_mask and not current_state & modifier_mask:
self.queue_modifier_interrupt_event(event_queue, key_name, 0)
def should_poll_modifier_interrupt_keys(self): def should_poll_modifier_interrupt_keys(self):
try: try:
@@ -414,26 +412,17 @@ class driver(inputDriver):
("KEY_ALT", X.Mod1Mask), ("KEY_ALT", X.Mod1Mask),
] ]
def queue_modifier_interrupt_event(self, event_queue, key_name, event_state): def interrupt_output_on_modifier_key(self, key_name):
event_time = time.time() try:
input_event = { self.env["runtime"]["OutputManager"].interrupt_output_async()
"event_name": key_name, except Exception as e:
"event_value": 0, self.env["runtime"]["DebugManager"].write_debug_out(
"event_sec": int(event_time), "x11Driver modifier interrupt failed for "
"event_usec": int((event_time % 1) * 1000000), + key_name
"event_state": event_state, + ": "
"event_type": X.KeyPress if event_state == 1 else X.KeyRelease, + str(e),
"event_raw_state": self.modifier_state, debug.DebugLevel.ERROR,
"event_x_time": X.CurrentTime, )
"event_synthetic": True,
}
self.env["input"]["event_buffer"].append(input_event.copy())
event_queue.put(
{
"Type": FenrirEventType.keyboard_input,
"data": input_event,
}
)
def refresh_modifier_state(self): def refresh_modifier_state(self):
try: try:
+14 -17
View File
@@ -227,7 +227,7 @@ def test_x11_build_passive_grabs_for_fenrir_keys_and_shortcuts():
@pytest.mark.unit @pytest.mark.unit
def test_x11_poll_modifier_interrupt_keys_emits_press_and_release(): def test_x11_poll_modifier_interrupt_keys_interrupts_without_input_events():
x11 = X11Driver() x11 = X11Driver()
x11.active = True x11.active = True
x11.modifier_interrupt_state = 0 x11.modifier_interrupt_state = 0
@@ -237,31 +237,28 @@ def test_x11_poll_modifier_interrupt_keys_emits_press_and_release():
settings_manager = Mock() settings_manager = Mock()
settings_manager.get_setting_as_bool.return_value = True settings_manager.get_setting_as_bool.return_value = True
settings_manager.get_setting.return_value = "" settings_manager.get_setting.return_value = ""
output_manager = Mock()
x11.env = { x11.env = {
"input": {"event_buffer": []}, "input": {"event_buffer": []},
"runtime": {"SettingsManager": settings_manager}, "runtime": {
"SettingsManager": settings_manager,
"OutputManager": output_manager,
"DebugManager": Mock(),
},
} }
event_queue = Mock()
x11.poll_modifier_interrupt_keys(event_queue) x11.poll_modifier_interrupt_keys()
event_queue.put.assert_called_once() output_manager.interrupt_output_async.assert_called_once()
event = event_queue.put.call_args.args[0] assert x11.env["input"]["event_buffer"] == []
assert event["data"]["event_name"] == "KEY_CTRL"
assert event["data"]["event_state"] == 1
assert x11.env["input"]["event_buffer"][0]["event_synthetic"] is True
event_queue.reset_mock() output_manager.interrupt_output_async.reset_mock()
x11.env["input"]["event_buffer"] = []
x11.root.query_pointer.return_value = Mock(mask=0) x11.root.query_pointer.return_value = Mock(mask=0)
x11.poll_modifier_interrupt_keys(event_queue) x11.poll_modifier_interrupt_keys()
event_queue.put.assert_called_once() output_manager.interrupt_output_async.assert_not_called()
event = event_queue.put.call_args.args[0] assert x11.env["input"]["event_buffer"] == []
assert event["data"]["event_name"] == "KEY_CTRL"
assert event["data"]["event_state"] == 0
assert x11.env["input"]["event_buffer"][0]["event_synthetic"] is True
@pytest.mark.unit @pytest.mark.unit