Some fenrir shortcuts were being fenicky. Hopefully ficked it.
This commit is contained in:
@@ -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:
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user