summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authortmk <nobody@nowhere>2014-11-17 20:10:48 +0100
committertmk <nobody@nowhere>2014-11-17 20:10:48 +0100
commit196164146363d5f3bfb97435f3ac6dfa13c8da72 (patch)
treef8e8f4c855971ef93b909c8288a6e94916a98bb9 /common
parenta58b9ddbd5b725fc603e0b796638a488cdb31b46 (diff)
parent821c719e98f310938e2bb3f2ad3e6a726bd8b03e (diff)
downloadqmk_firmware-196164146363d5f3bfb97435f3ac6dfa13c8da72.tar.gz
qmk_firmware-196164146363d5f3bfb97435f3ac6dfa13c8da72.tar.xz
Merge branch 'action_fix'
Diffstat (limited to 'common')
-rw-r--r--common/action.c10
-rw-r--r--common/action_code.h3
2 files changed, 12 insertions, 1 deletions
diff --git a/common/action.c b/common/action.c
index fddb97c50..83bc8a618 100644
--- a/common/action.c
+++ b/common/action.c
@@ -237,6 +237,16 @@ void process_action(keyrecord_t *record)
case ACT_LAYER_TAP:
case ACT_LAYER_TAP_EXT:
switch (action.layer_tap.code) {
+ case 0xe0 ... 0xef:
+ /* layer On/Off with modifiers(left only) */
+ if (event.pressed) {
+ layer_on(action.layer_tap.val);
+ register_mods(action.layer_tap.code & 0x0f);
+ } else {
+ layer_off(action.layer_tap.val);
+ unregister_mods(action.layer_tap.code & 0x0f);
+ }
+ break;
case OP_TAP_TOGGLE:
/* tap toggle */
if (event.pressed) {
diff --git a/common/action_code.h b/common/action_code.h
index 50112d4d2..bc40e2c6f 100644
--- a/common/action_code.h
+++ b/common/action_code.h
@@ -71,7 +71,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* ACT_LAYER_TAP(101x):
* 101E|LLLL| keycode On/Off with tap key
- * 101E|LLLL|1110 xxxx Reserved(0xE0-EF)
+ * 101E|LLLL|1110 mods On/Off with modifiers(0xE0-EF)
* 101E|LLLL|1111 0000 Invert with tap toggle(0xF0)
* 101E|LLLL|1111 0001 On/Off
* 101E|LLLL|1111 0010 Off/On
@@ -266,6 +266,7 @@ enum layer_pram_tap_op {
#define ACTION_LAYER_ON_OFF(layer) ACTION_LAYER_TAP((layer), OP_ON_OFF)
#define ACTION_LAYER_OFF_ON(layer) ACTION_LAYER_TAP((layer), OP_OFF_ON)
#define ACTION_LAYER_SET_CLEAR(layer) ACTION_LAYER_TAP((layer), OP_SET_CLEAR)
+#define ACTION_LAYER_MODS(layer, mods) ACTION_LAYER_TAP((layer), 0xe0 | (mods)&0x0f)
/* With Tapping */
#define ACTION_LAYER_TAP_KEY(layer, key) ACTION_LAYER_TAP((layer), (key))
#define ACTION_LAYER_TAP_TOGGLE(layer) ACTION_LAYER_TAP((layer), OP_TAP_TOGGLE)