Try to fix various advanced layers
This commit is contained in:
		@@ -63,6 +63,15 @@ class Firmware:
 | 
			
		||||
        self._hid_helper_inst.create_report(self._state.keys_pressed).send()
 | 
			
		||||
        self._state.resolve_hid()
 | 
			
		||||
 | 
			
		||||
    def _send_key(self, key):
 | 
			
		||||
        if not getattr(key, 'no_press', None):
 | 
			
		||||
            self._state.force_keycode_down(key)
 | 
			
		||||
            self._send_hid()
 | 
			
		||||
 | 
			
		||||
        if not getattr(key, 'no_release', None):
 | 
			
		||||
            self._state.force_keycode_up(key)
 | 
			
		||||
            self._send_hid()
 | 
			
		||||
 | 
			
		||||
    def go(self):
 | 
			
		||||
        assert self.keymap, 'must define a keymap with at least one row'
 | 
			
		||||
        assert self.row_pins, 'no GPIO pins defined for matrix rows'
 | 
			
		||||
@@ -95,15 +104,13 @@ class Firmware:
 | 
			
		||||
                if self._state.hid_pending:
 | 
			
		||||
                    self._send_hid()
 | 
			
		||||
 | 
			
		||||
                for key in self._state.pending_keys:
 | 
			
		||||
                    self._send_key(key)
 | 
			
		||||
                    self._state.pending_key_handled()
 | 
			
		||||
 | 
			
		||||
                if self._state.macro_pending:
 | 
			
		||||
                    for key in self._state.macro_pending(self):
 | 
			
		||||
                        if not getattr(key, 'no_press', None):
 | 
			
		||||
                            self._state.force_keycode_down(key)
 | 
			
		||||
                            self._send_hid()
 | 
			
		||||
 | 
			
		||||
                        if not getattr(key, 'no_release', None):
 | 
			
		||||
                            self._state.force_keycode_up(key)
 | 
			
		||||
                            self._send_hid()
 | 
			
		||||
                        self._send_key(key)
 | 
			
		||||
 | 
			
		||||
                    self._state.resolve_macro()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ GESC_TRIGGERS = {
 | 
			
		||||
 | 
			
		||||
class InternalState:
 | 
			
		||||
    keys_pressed = set()
 | 
			
		||||
    pending_keys = set()
 | 
			
		||||
    pending_keys = []
 | 
			
		||||
    macro_pending = None
 | 
			
		||||
    leader_pending = None
 | 
			
		||||
    leader_last_len = 0
 | 
			
		||||
@@ -176,10 +176,10 @@ class InternalState:
 | 
			
		||||
            # Sets the timer start and acts like MO otherwise
 | 
			
		||||
            self.start_time['lm'] = ticks_ms()
 | 
			
		||||
            self.keys_pressed.add(changed_key.kc)
 | 
			
		||||
            return self._layer_mo(changed_key, is_pressed)
 | 
			
		||||
        else:
 | 
			
		||||
            self.keys_pressed.discard(changed_key.kc)
 | 
			
		||||
            self.start_time['lm'] = None
 | 
			
		||||
 | 
			
		||||
        self.keys_pressed.discard(changed_key.kc)
 | 
			
		||||
        self.start_time['lm'] = None
 | 
			
		||||
        return self._layer_mo(changed_key, is_pressed)
 | 
			
		||||
 | 
			
		||||
    def _layer_lt(self, changed_key, is_pressed):
 | 
			
		||||
@@ -187,17 +187,18 @@ class InternalState:
 | 
			
		||||
        if is_pressed:
 | 
			
		||||
            # Sets the timer start and acts like MO otherwise
 | 
			
		||||
            self.start_time['lt'] = ticks_ms()
 | 
			
		||||
            return self._layer_mo(changed_key, is_pressed)
 | 
			
		||||
            self._layer_mo(changed_key, is_pressed)
 | 
			
		||||
        else:
 | 
			
		||||
            # On keyup, check timer, and press key if needed.
 | 
			
		||||
            if self.start_time['lt'] and (
 | 
			
		||||
                ticks_diff(ticks_ms(), self.start_time['lt']) < self.config.tap_time
 | 
			
		||||
            ):
 | 
			
		||||
                self.hid_pending = True
 | 
			
		||||
                self.pending_keys.append(changed_key.kc)
 | 
			
		||||
 | 
			
		||||
        # On keyup, check timer, and press key if needed.
 | 
			
		||||
        if self.start_time['lt'] and (
 | 
			
		||||
            ticks_diff(ticks_ms(), self.start_time['lt']) < self.config.tap_time
 | 
			
		||||
        ):
 | 
			
		||||
            self.hid_pending = True
 | 
			
		||||
            self.pending_keys.add(changed_key.kc)
 | 
			
		||||
 | 
			
		||||
        self.start_time['lt'] = None
 | 
			
		||||
        return self._layer_mo(changed_key, is_pressed)
 | 
			
		||||
            self._layer_mo(changed_key, is_pressed)
 | 
			
		||||
            self.start_time['lt'] = None
 | 
			
		||||
        return self
 | 
			
		||||
 | 
			
		||||
    def _layer_tg(self, changed_key, is_pressed):
 | 
			
		||||
        """Toggles the layer (enables it if not active, and vise versa)"""
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user