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:
try:
self.refresh_grabs()
self.poll_modifier_interrupt_keys(event_queue)
self.poll_modifier_interrupt_keys()
if not self.display.pending_events():
time.sleep(0.01)
continue
@@ -374,7 +374,7 @@ class driver(inputDriver):
"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():
return
try:
@@ -387,9 +387,7 @@ class driver(inputDriver):
self.modifier_state = current_state
for key_name, modifier_mask in self.interrupt_modifier_masks():
if current_state & modifier_mask and not previous_state & modifier_mask:
self.queue_modifier_interrupt_event(event_queue, key_name, 1)
elif previous_state & modifier_mask and not current_state & modifier_mask:
self.queue_modifier_interrupt_event(event_queue, key_name, 0)
self.interrupt_output_on_modifier_key(key_name)
def should_poll_modifier_interrupt_keys(self):
try:
@@ -414,26 +412,17 @@ class driver(inputDriver):
("KEY_ALT", X.Mod1Mask),
]
def queue_modifier_interrupt_event(self, event_queue, key_name, event_state):
event_time = time.time()
input_event = {
"event_name": key_name,
"event_value": 0,
"event_sec": int(event_time),
"event_usec": int((event_time % 1) * 1000000),
"event_state": event_state,
"event_type": X.KeyPress if event_state == 1 else X.KeyRelease,
"event_raw_state": self.modifier_state,
"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 interrupt_output_on_modifier_key(self, key_name):
try:
self.env["runtime"]["OutputManager"].interrupt_output_async()
except Exception as e:
self.env["runtime"]["DebugManager"].write_debug_out(
"x11Driver modifier interrupt failed for "
+ key_name
+ ": "
+ str(e),
debug.DebugLevel.ERROR,
)
def refresh_modifier_state(self):
try:
+14 -17
View File
@@ -227,7 +227,7 @@ def test_x11_build_passive_grabs_for_fenrir_keys_and_shortcuts():
@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.active = True
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.get_setting_as_bool.return_value = True
settings_manager.get_setting.return_value = ""
output_manager = Mock()
x11.env = {
"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()
event = event_queue.put.call_args.args[0]
assert event["data"]["event_name"] == "KEY_CTRL"
assert event["data"]["event_state"] == 1
assert x11.env["input"]["event_buffer"][0]["event_synthetic"] is True
output_manager.interrupt_output_async.assert_called_once()
assert x11.env["input"]["event_buffer"] == []
event_queue.reset_mock()
x11.env["input"]["event_buffer"] = []
output_manager.interrupt_output_async.reset_mock()
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()
event = event_queue.put.call_args.args[0]
assert event["data"]["event_name"] == "KEY_CTRL"
assert event["data"]["event_state"] == 0
assert x11.env["input"]["event_buffer"][0]["event_synthetic"] is True
output_manager.interrupt_output_async.assert_not_called()
assert x11.env["input"]["event_buffer"] == []
@pytest.mark.unit