forked from mirrors/qmk_userspace
		
	Fix OSM on a OSL activated layer (#20410)
This commit is contained in:
		
					parent
					
						
							
								f35dee5c05
							
						
					
				
			
			
				commit
				
					
						e0eb90aba1
					
				
			
		
					 2 changed files with 47 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -374,7 +374,7 @@ void process_action(keyrecord_t *record, action_t action) {
 | 
			
		|||
    if (is_oneshot_layer_active() && event.pressed &&
 | 
			
		||||
        (action.kind.id == ACT_USAGE || !(IS_MODIFIER_KEYCODE(action.key.code)
 | 
			
		||||
#    ifndef NO_ACTION_TAPPING
 | 
			
		||||
                                          || (tap_count == 0 && (action.kind.id == ACT_LMODS_TAP || action.kind.id == ACT_RMODS_TAP))
 | 
			
		||||
                                          || ((action.kind.id == ACT_LMODS_TAP || action.kind.id == ACT_RMODS_TAP) && (action.layer_tap.code <= MODS_TAP_TOGGLE || tap_count == 0))
 | 
			
		||||
#    endif
 | 
			
		||||
                                              ))
 | 
			
		||||
#    ifdef SWAP_HANDS_ENABLE
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -337,3 +337,49 @@ TEST_F(OneShot, OSLWithAdditionalKeypress) {
 | 
			
		|||
    run_one_scan_loop();
 | 
			
		||||
    VERIFY_AND_CLEAR(driver);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_F(OneShot, OSLWithOsmAndAdditionalKeypress) {
 | 
			
		||||
    TestDriver driver;
 | 
			
		||||
    InSequence s;
 | 
			
		||||
    KeymapKey  osl_key     = KeymapKey{0, 0, 0, OSL(1)};
 | 
			
		||||
    KeymapKey  osm_key     = KeymapKey{1, 1, 0, OSM(MOD_LSFT), KC_LSFT};
 | 
			
		||||
    KeymapKey  regular_key = KeymapKey{1, 1, 1, KC_A};
 | 
			
		||||
 | 
			
		||||
    set_keymap({osl_key, osm_key, regular_key});
 | 
			
		||||
 | 
			
		||||
    /* Press OSL key */
 | 
			
		||||
    EXPECT_NO_REPORT(driver);
 | 
			
		||||
    osl_key.press();
 | 
			
		||||
    run_one_scan_loop();
 | 
			
		||||
    VERIFY_AND_CLEAR(driver);
 | 
			
		||||
 | 
			
		||||
    /* Release OSL key */
 | 
			
		||||
    EXPECT_NO_REPORT(driver);
 | 
			
		||||
    osl_key.release();
 | 
			
		||||
    run_one_scan_loop();
 | 
			
		||||
    EXPECT_TRUE(layer_state_is(1));
 | 
			
		||||
    VERIFY_AND_CLEAR(driver);
 | 
			
		||||
 | 
			
		||||
    /* Press and release OSM */
 | 
			
		||||
    EXPECT_NO_REPORT(driver);
 | 
			
		||||
    osm_key.press();
 | 
			
		||||
    run_one_scan_loop();
 | 
			
		||||
    osm_key.release();
 | 
			
		||||
    run_one_scan_loop();
 | 
			
		||||
    EXPECT_TRUE(layer_state_is(1));
 | 
			
		||||
    VERIFY_AND_CLEAR(driver);
 | 
			
		||||
 | 
			
		||||
    /* Press regular key */
 | 
			
		||||
    EXPECT_REPORT(driver, (osm_key.report_code, regular_key.report_code)).Times(1);
 | 
			
		||||
    EXPECT_EMPTY_REPORT(driver);
 | 
			
		||||
    regular_key.press();
 | 
			
		||||
    run_one_scan_loop();
 | 
			
		||||
    EXPECT_FALSE(layer_state_is(1));
 | 
			
		||||
    VERIFY_AND_CLEAR(driver);
 | 
			
		||||
 | 
			
		||||
    /* Release regular key */
 | 
			
		||||
    EXPECT_NO_REPORT(driver);
 | 
			
		||||
    regular_key.release();
 | 
			
		||||
    run_one_scan_loop();
 | 
			
		||||
    VERIFY_AND_CLEAR(driver);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue