aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortmk <nobody@nowhere>2013-02-20 15:52:32 +0900
committertmk <nobody@nowhere>2013-02-20 15:52:32 +0900
commitc3d57b69e02fce40455c96f4a9ac6b68b89ce027 (patch)
treecafa784fcc2c8ba91827d2417d57c740570b8ac4
parente0f960a576e090808e5cc25c5368441c11f36ea6 (diff)
downloadqmk_firmware-c3d57b69e02fce40455c96f4a9ac6b68b89ce027.tar.gz
qmk_firmware-c3d57b69e02fce40455c96f4a9ac6b68b89ce027.zip
Add keymap clear/reset action
-rw-r--r--common/action.c34
-rw-r--r--common/action.h23
-rw-r--r--common/keymap.c4
3 files changed, 44 insertions, 17 deletions
diff --git a/common/action.c b/common/action.c
index 3703b4e8c..844a35b3e 100644
--- a/common/action.c
+++ b/common/action.c
@@ -355,26 +355,50 @@ static void process_action(keyrecord_t *record)
355 355
356 case ACT_KEYMAP: 356 case ACT_KEYMAP:
357 switch (action.layer.code) { 357 switch (action.layer.code) {
358 /* Keymap Reset */ 358 /* Keymap clear */
359 case OP_RESET: 359 case OP_RESET:
360 default_layer_set(action.layer.val); 360 switch (action.layer.val & 0x03) {
361 case 0:
362 overlay_clear();
363 keymap_clear();
364 break;
365 case ON_PRESS:
366 if (event.pressed) {
367 overlay_clear();
368 keymap_clear();
369 }
370 break;
371 case ON_RELEASE:
372 if (!event.pressed) {
373 overlay_clear();
374 keymap_clear();
375 }
376 break;
377 case ON_BOTH:
378 overlay_clear();
379 keymap_clear();
380 break;
381 }
361 break; 382 break;
362 /* Keymap Reset default layer */ 383 /* Keymap Reset default layer */
363 case (OP_RESET | ON_PRESS): 384 case (OP_RESET | ON_PRESS):
364 if (event.pressed) { 385 if (event.pressed) {
365 default_layer_set(action.layer.val);
366 overlay_clear(); 386 overlay_clear();
387 keymap_clear();
388 default_layer_set(action.layer.val);
367 } 389 }
368 break; 390 break;
369 case (OP_RESET | ON_RELEASE): 391 case (OP_RESET | ON_RELEASE):
370 if (!event.pressed) { 392 if (!event.pressed) {
371 default_layer_set(action.layer.val);
372 overlay_clear(); 393 overlay_clear();
394 keymap_clear();
395 default_layer_set(action.layer.val);
373 } 396 }
374 break; 397 break;
375 case (OP_RESET | ON_BOTH): 398 case (OP_RESET | ON_BOTH):
376 default_layer_set(action.layer.val);
377 overlay_clear(); 399 overlay_clear();
400 keymap_clear();
401 default_layer_set(action.layer.val);
378 break; 402 break;
379 403
380 /* Keymap Bit invert */ 404 /* Keymap Bit invert */
diff --git a/common/action.h b/common/action.h
index c02a2e71f..611490ebf 100644
--- a/common/action.h
+++ b/common/action.h
@@ -157,8 +157,8 @@ bool waiting_buffer_has_anykey_pressed(void);
157 * Layer Actions 157 * Layer Actions
158 * ------------- 158 * -------------
159 * ACT_KEYMAP: 159 * ACT_KEYMAP:
160 * 1000|LLLL|0000 0000 Reset default layer 160 * 1000|--xx|0000 0000 Clear keyamp and overlay
161 * 1000|LLLL|0000 00xx Reset default layer and clear overlay 161 * 1000|LLLL|0000 00xx Reset default layer and clear keymap and overlay
162 * 1000|LLLL| keycode Invert with tap key 162 * 1000|LLLL| keycode Invert with tap key
163 * 1000|LLLL|1111 0000 Invert with tap toggle 163 * 1000|LLLL|1111 0000 Invert with tap toggle
164 * 1000|LLLL|1111 00xx Invert[^= L] 164 * 1000|LLLL|1111 00xx Invert[^= L]
@@ -274,22 +274,25 @@ enum layer_params {
274 OP_SET = 0xFC, 274 OP_SET = 0xFC,
275}; 275};
276 276
277/* 277/*
278 * Default Layer 278 * Default Layer
279 */ 279 */
280#define ACTION_KEYMAP(layer) ACTION_KEYMAP_MOMENTARY(layer) 280#define ACTION_DEFAULT_LAYER ACTION(ACT_KEYMAP, 0<<8 | OP_RESET | 0)
281#define ACTION_KEYMAP_MOMENTARY(layer) ACTION_KEYMAP_INV_B(layer)
282#define ACTION_KEYMAP_TOGGLE(layer) ACTION_KEYMAP_INV_R(layer)
283/* Set default layer */
284#define ACTION_SET_DEFAULT_LAYER(layer) ACTION_KEYMAP_RESET(layer) 281#define ACTION_SET_DEFAULT_LAYER(layer) ACTION_KEYMAP_RESET(layer)
285#define ACTION_SET_DEFAULT_LAYER_P(layer) ACTION_KEYMAP_RESET_P(layer) 282#define ACTION_SET_DEFAULT_LAYER_P(layer) ACTION_KEYMAP_RESET_P(layer)
286#define ACTION_SET_DEFAULT_LAYER_R(layer) ACTION_KEYMAP_RESET_R(layer) 283#define ACTION_SET_DEFAULT_LAYER_R(layer) ACTION_KEYMAP_RESET_R(layer)
287#define ACTION_SET_DEFAULT_LAYER_B(layer) ACTION_KEYMAP_RESET_B(layer) 284#define ACTION_SET_DEFAULT_LAYER_B(layer) ACTION_KEYMAP_RESET_B(layer)
285/*
286 * Keymap Layer
287 */
288#define ACTION_KEYMAP(layer) ACTION_KEYMAP_MOMENTARY(layer)
289#define ACTION_KEYMAP_MOMENTARY(layer) ACTION_KEYMAP_ON_OFF(layer)
290#define ACTION_KEYMAP_TOGGLE(layer) ACTION_KEYMAP_INV_R(layer)
288/* Keymap Set and clear overaly */ 291/* Keymap Set and clear overaly */
289#define ACTION_KEYMAP_RESET(layer) ACTION(ACT_KEYMAP, (layer)<<8 | OP_RESET | 0) 292#define ACTION_KEYMAP_RESET(layer) ACTION_KEYMAP_RESET_R(layer)
290#define ACTION_KEYMAP_RESET_P(layer) ACTION(ACT_KEYMAP, (layer)<<8 | OP_RESET | ON_PRESS) 293#define ACTION_KEYMAP_RESET_P(layer) ACTION(ACT_KEYMAP, (layer)<<8 | OP_RESET | ON_PRESS)
291#define ACTION_KEYMAP_RESET_R(layer) ACTION(ACT_KEYMAP, (layer)<<8 | OP_RESET | ON_PRESS) 294#define ACTION_KEYMAP_RESET_R(layer) ACTION(ACT_KEYMAP, (layer)<<8 | OP_RESET | ON_RELEASE)
292#define ACTION_KEYMAP_RESET_B(layer) ACTION(ACT_KEYMAP, (layer)<<8 | OP_RESET | ON_PRESS) 295#define ACTION_KEYMAP_RESET_B(layer) ACTION(ACT_KEYMAP, (layer)<<8 | OP_RESET | ON_BOTH)
293/* Keymap Invert */ 296/* Keymap Invert */
294#define ACTION_KEYMAP_INV(layer) ACTION_KEYMAP_INV_B(layer) 297#define ACTION_KEYMAP_INV(layer) ACTION_KEYMAP_INV_B(layer)
295#define ACTION_KEYMAP_TAP_TOGGLE(layer) ACTION(ACT_KEYMAP, (layer)<<8 | OP_INV | 0) 298#define ACTION_KEYMAP_TAP_TOGGLE(layer) ACTION(ACT_KEYMAP, (layer)<<8 | OP_INV | 0)
diff --git a/common/keymap.c b/common/keymap.c
index 3f13d4497..ddc321052 100644
--- a/common/keymap.c
+++ b/common/keymap.c
@@ -39,7 +39,7 @@ action_t action_for_key(uint8_t layer, key_t key)
39} 39}
40 40
41__attribute__ ((weak)) 41__attribute__ ((weak))
42void action_function(keyrecord_t *event, uint8_t id, uint8_t opt) 42void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
43{ 43{
44} 44}
45#else 45#else
@@ -70,7 +70,7 @@ action_t action_for_key(uint8_t layer, key_t key)
70 } 70 }
71} 71}
72/* not used for legacy keymap */ 72/* not used for legacy keymap */
73void action_function(keyrecord_t *event, uint8_t id, uint8_t opt) 73void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
74{ 74{
75} 75}
76#endif 76#endif