Make Pointing Device Auto Layer more configurable (#20061)
Co-authored-by: Pablo Martínez <58857054+elpekenin@users.noreply.github.com>
This commit is contained in:
parent
578102b400
commit
59eb8940b0
3 changed files with 59 additions and 5 deletions
|
@ -689,6 +689,10 @@ There are several functions that allow for more advanced interaction with the au
|
||||||
| `auto_mouse_layer_off(void)` | Disable target layer if appropriate will call (makes call to `layer_state_set`) | | `void`(None) |
|
| `auto_mouse_layer_off(void)` | Disable target layer if appropriate will call (makes call to `layer_state_set`) | | `void`(None) |
|
||||||
| `auto_mouse_toggle(void)` | Toggle on/off target toggle state (disables layer deactivation when true) | | `void`(None) |
|
| `auto_mouse_toggle(void)` | Toggle on/off target toggle state (disables layer deactivation when true) | | `void`(None) |
|
||||||
| `get_auto_mouse_toggle(void)` | Return value of toggling state variable | | `bool` |
|
| `get_auto_mouse_toggle(void)` | Return value of toggling state variable | | `bool` |
|
||||||
|
| `set_auto_mouse_timeout(uint16_t timeout)` | Change/set the timeout for turing off the layer | | `void`(None) |
|
||||||
|
| `get_auto_mouse_timeout(void)` | Return the current timeout for turing off the layer | | `uint16_t` |
|
||||||
|
| `set_auto_mouse_debounce(uint16_t timeout)` | Change/set the debounce for preventing layer activation | | `void`(None) |
|
||||||
|
| `get_auto_mouse_debounce(void)` | Return the current debounce for preventing layer activation | | `uint8_t` |
|
||||||
|
|
||||||
_NOTES:_
|
_NOTES:_
|
||||||
- _Due to the nature of how some functions work, the `auto_mouse_trigger_reset`, and `auto_mouse_layer_off` functions should never be called in the `layer_state_set_*` stack as this can cause indefinite loops._
|
- _Due to the nature of how some functions work, the `auto_mouse_trigger_reset`, and `auto_mouse_layer_off` functions should never be called in the `layer_state_set_*` stack as this can cause indefinite loops._
|
||||||
|
|
|
@ -20,7 +20,11 @@
|
||||||
# include "pointing_device_auto_mouse.h"
|
# include "pointing_device_auto_mouse.h"
|
||||||
|
|
||||||
/* local data structure for tracking auto mouse */
|
/* local data structure for tracking auto mouse */
|
||||||
static auto_mouse_context_t auto_mouse_context = {.config.layer = (uint8_t)AUTO_MOUSE_DEFAULT_LAYER};
|
static auto_mouse_context_t auto_mouse_context = {
|
||||||
|
.config.layer = (uint8_t)(AUTO_MOUSE_DEFAULT_LAYER),
|
||||||
|
.config.timeout = (uint16_t)(AUTO_MOUSE_TIME),
|
||||||
|
.config.debounce = (uint8_t)(AUTO_MOUSE_DEBOUNCE),
|
||||||
|
};
|
||||||
|
|
||||||
/* local functions */
|
/* local functions */
|
||||||
static bool is_mouse_record(uint16_t keycode, keyrecord_t* record);
|
static bool is_mouse_record(uint16_t keycode, keyrecord_t* record);
|
||||||
|
@ -62,6 +66,24 @@ uint8_t get_auto_mouse_layer(void) {
|
||||||
return auto_mouse_context.config.layer;
|
return auto_mouse_context.config.layer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the current timeout to turn off mouse layer
|
||||||
|
*
|
||||||
|
* @return uint16_t timeout in ms
|
||||||
|
*/
|
||||||
|
uint16_t get_auto_mouse_timeout(void) {
|
||||||
|
return auto_mouse_context.config.timeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get the auto mouse debouncing timeout
|
||||||
|
*
|
||||||
|
* @return uint8_t
|
||||||
|
*/
|
||||||
|
uint8_t get_auto_mouse_debounce(void) {
|
||||||
|
return auto_mouse_context.config.debounce;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief get layer_toggled value
|
* @brief get layer_toggled value
|
||||||
*
|
*
|
||||||
|
@ -114,6 +136,28 @@ void set_auto_mouse_layer(uint8_t layer) {
|
||||||
auto_mouse_reset();
|
auto_mouse_reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Changes the timeout for the mouse auto layer to be disabled
|
||||||
|
*
|
||||||
|
* @param timeout
|
||||||
|
*/
|
||||||
|
void set_auto_mouse_timeout(uint16_t timeout) {
|
||||||
|
if (auto_mouse_context.config.timeout == timeout) return;
|
||||||
|
auto_mouse_context.config.timeout = timeout;
|
||||||
|
auto_mouse_reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set the auto mouse key debounce
|
||||||
|
*
|
||||||
|
* @param debounce
|
||||||
|
*/
|
||||||
|
void set_auto_mouse_debounce(uint8_t debounce) {
|
||||||
|
if (auto_mouse_context.config.debounce == debounce) return;
|
||||||
|
auto_mouse_context.config.debounce = debounce;
|
||||||
|
auto_mouse_reset();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief toggle mouse layer setting
|
* @brief toggle mouse layer setting
|
||||||
*
|
*
|
||||||
|
@ -181,7 +225,7 @@ __attribute__((weak)) bool auto_mouse_activation(report_mouse_t mouse_report) {
|
||||||
*/
|
*/
|
||||||
void pointing_device_task_auto_mouse(report_mouse_t mouse_report) {
|
void pointing_device_task_auto_mouse(report_mouse_t mouse_report) {
|
||||||
// skip if disabled, delay timer running, or debounce
|
// skip if disabled, delay timer running, or debounce
|
||||||
if (!(AUTO_MOUSE_ENABLED) || timer_elapsed(auto_mouse_context.timer.active) <= AUTO_MOUSE_DEBOUNCE || timer_elapsed(auto_mouse_context.timer.delay) <= AUTO_MOUSE_DELAY) {
|
if (!(AUTO_MOUSE_ENABLED) || timer_elapsed(auto_mouse_context.timer.active) <= auto_mouse_context.config.debounce || timer_elapsed(auto_mouse_context.timer.delay) <= AUTO_MOUSE_DELAY) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// update activation and reset debounce
|
// update activation and reset debounce
|
||||||
|
@ -192,7 +236,7 @@ void pointing_device_task_auto_mouse(report_mouse_t mouse_report) {
|
||||||
if (!layer_state_is((AUTO_MOUSE_TARGET_LAYER))) {
|
if (!layer_state_is((AUTO_MOUSE_TARGET_LAYER))) {
|
||||||
layer_on((AUTO_MOUSE_TARGET_LAYER));
|
layer_on((AUTO_MOUSE_TARGET_LAYER));
|
||||||
}
|
}
|
||||||
} else if (layer_state_is((AUTO_MOUSE_TARGET_LAYER)) && timer_elapsed(auto_mouse_context.timer.active) > AUTO_MOUSE_TIME) {
|
} else if (layer_state_is((AUTO_MOUSE_TARGET_LAYER)) && timer_elapsed(auto_mouse_context.timer.active) > auto_mouse_context.config.timeout) {
|
||||||
layer_off((AUTO_MOUSE_TARGET_LAYER));
|
layer_off((AUTO_MOUSE_TARGET_LAYER));
|
||||||
auto_mouse_context.timer.active = 0;
|
auto_mouse_context.timer.active = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,8 +43,10 @@
|
||||||
/* data structure */
|
/* data structure */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
struct {
|
struct {
|
||||||
bool is_enabled;
|
bool is_enabled;
|
||||||
uint8_t layer;
|
uint8_t layer;
|
||||||
|
uint16_t timeout;
|
||||||
|
uint8_t debounce;
|
||||||
} config;
|
} config;
|
||||||
struct {
|
struct {
|
||||||
uint16_t active;
|
uint16_t active;
|
||||||
|
@ -62,6 +64,10 @@ void set_auto_mouse_enable(bool enable); // enabl
|
||||||
bool get_auto_mouse_enable(void); // get auto_mouse_enable
|
bool get_auto_mouse_enable(void); // get auto_mouse_enable
|
||||||
void set_auto_mouse_layer(uint8_t layer); // set target layer by index
|
void set_auto_mouse_layer(uint8_t layer); // set target layer by index
|
||||||
uint8_t get_auto_mouse_layer(void); // get target layer index
|
uint8_t get_auto_mouse_layer(void); // get target layer index
|
||||||
|
void set_auto_mouse_timeout(uint16_t timeout); // set layer timeout
|
||||||
|
uint16_t get_auto_mouse_timeout(void); // get layer timeout
|
||||||
|
void set_auto_mouse_debounce(uint8_t debounce); // set debounce
|
||||||
|
uint8_t get_auto_mouse_debounce(void); // get debounce
|
||||||
void auto_mouse_layer_off(void); // disable target layer if appropriate (DO NOT USE in layer_state_set stack!!)
|
void auto_mouse_layer_off(void); // disable target layer if appropriate (DO NOT USE in layer_state_set stack!!)
|
||||||
layer_state_t remove_auto_mouse_layer(layer_state_t state, bool force); // remove auto mouse target layer from state if appropriate (can be forced)
|
layer_state_t remove_auto_mouse_layer(layer_state_t state, bool force); // remove auto mouse target layer from state if appropriate (can be forced)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue