diff --git a/menu/drivers/rgui.c b/menu/drivers/rgui.c index 9bffa54cbc..f9b6b437ca 100644 --- a/menu/drivers/rgui.c +++ b/menu/drivers/rgui.c @@ -471,7 +471,6 @@ static void rgui_render(void *data) if (settings->menu.pointer.enable) { - bool pointer_dragged = false; unsigned new_val; menu_entries_ctl(MENU_ENTRIES_CTL_START_GET, &old_start); @@ -480,9 +479,8 @@ static void rgui_render(void *data) / 11 - 2 + old_start; menu_input_ctl(MENU_INPUT_CTL_POINTER_PTR, &new_val); - menu_input_ctl(MENU_INPUT_CTL_POINTER_DRAGGING, &pointer_dragged); - if (pointer_dragged) + if (menu_input_ctl(MENU_INPUT_CTL_IS_POINTER_DRAGGED, NULL)) { size_t start; int16_t delta_y = menu_input_pointer_state(MENU_POINTER_DELTA_Y_AXIS); diff --git a/menu/menu_input.c b/menu/menu_input.c index 18fe44b8b2..d24737d2f7 100644 --- a/menu/menu_input.c +++ b/menu/menu_input.c @@ -104,7 +104,6 @@ typedef struct menu_input int16_t dy; float accel; bool pressed[2]; - bool dragging; bool back; unsigned ptr; } pointer; @@ -636,9 +635,10 @@ static bool menu_input_key_bind_iterate(char *s, size_t len) bool menu_input_ctl(enum menu_input_ctl_state state, void *data) { static char menu_input_keyboard_label_setting[256]; - static const char *menu_input_keyboard_label = NULL; static const char **menu_input_keyboard_buffer; - menu_input_t *menu_input = menu_input_get_ptr(); + static const char *menu_input_keyboard_label = NULL; + static bool pointer_dragging = false; + menu_input_t *menu_input = menu_input_get_ptr(); if (!menu_input) return false; @@ -674,6 +674,7 @@ bool menu_input_ctl(enum menu_input_ctl_state state, void *data) break; case MENU_INPUT_CTL_DEINIT: memset(menu_input, 0, sizeof(menu_input_t)); + pointer_dragging = false; break; case MENU_INPUT_CTL_SEARCH_START: { @@ -712,11 +713,13 @@ bool menu_input_ctl(enum menu_input_ctl_state state, void *data) menu_input->pointer.accel = *ptr; } break; - case MENU_INPUT_CTL_POINTER_DRAGGING: - { - bool *ptr = (bool*)data; - *ptr = menu_input->pointer.dragging; - } + case MENU_INPUT_CTL_IS_POINTER_DRAGGED: + return pointer_dragging; + case MENU_INPUT_CTL_SET_POINTER_DRAGGED: + pointer_dragging = true; + break; + case MENU_INPUT_CTL_UNSET_POINTER_DRAGGED: + pointer_dragging = false; break; case MENU_INPUT_CTL_KEYBOARD_DISPLAY: { @@ -1119,7 +1122,8 @@ static int menu_input_pointer_post_iterate( || abs(pointer_y - start_y) > (dpi / 10)) { float s, delta_time; - menu_input->pointer.dragging = true; + + menu_input_ctl(MENU_INPUT_CTL_SET_POINTER_DRAGGED, NULL); menu_input->pointer.dx = pointer_x - pointer_old_x; menu_input->pointer.dy = pointer_y - pointer_old_y; pointer_old_x = pointer_x; @@ -1138,7 +1142,7 @@ static int menu_input_pointer_post_iterate( { if (pointer_oldpressed[0]) { - if (!menu_input->pointer.dragging) + if (!menu_input_ctl(MENU_INPUT_CTL_IS_POINTER_DRAGGED, NULL)) { menu_ctx_pointer_t point; @@ -1161,7 +1165,8 @@ static int menu_input_pointer_post_iterate( pointer_old_y = 0; menu_input->pointer.dx = 0; menu_input->pointer.dy = 0; - menu_input->pointer.dragging = false; + + menu_input_ctl(MENU_INPUT_CTL_UNSET_POINTER_DRAGGED, NULL); } } diff --git a/menu/menu_input.h b/menu/menu_input.h index 88a33485aa..a859e6ffca 100644 --- a/menu/menu_input.h +++ b/menu/menu_input.h @@ -73,7 +73,9 @@ enum menu_input_ctl_state MENU_INPUT_CTL_POINTER_PTR, MENU_INPUT_CTL_POINTER_ACCEL_READ, MENU_INPUT_CTL_POINTER_ACCEL_WRITE, - MENU_INPUT_CTL_POINTER_DRAGGING, + MENU_INPUT_CTL_IS_POINTER_DRAGGED, + MENU_INPUT_CTL_SET_POINTER_DRAGGED, + MENU_INPUT_CTL_UNSET_POINTER_DRAGGED, MENU_INPUT_CTL_KEYBOARD_DISPLAY, MENU_INPUT_CTL_SET_KEYBOARD_DISPLAY, MENU_INPUT_CTL_KEYBOARD_BUFF_PTR,