Skip to content

Commit bf975ad

Browse files
authored
Fix roll-over in file browser and archive (#2811)
1 parent 6f1c46e commit bf975ad

File tree

2 files changed

+21
-15
lines changed

2 files changed

+21
-15
lines changed

applications/main/archive/views/archive_browser_view.c

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -345,11 +345,13 @@ static bool archive_view_input(InputEvent* event, void* context) {
345345

346346
if(event->key == InputKeyUp) {
347347
if(model->item_idx < scroll_speed) {
348-
scroll_speed = model->item_idx;
348+
model->button_held_for_ticks = 0;
349+
model->item_idx = model->item_cnt - 1;
350+
} else {
351+
model->item_idx =
352+
((model->item_idx - scroll_speed) + model->item_cnt) %
353+
model->item_cnt;
349354
}
350-
351-
model->item_idx =
352-
((model->item_idx - scroll_speed) + model->item_cnt) % model->item_cnt;
353355
if(is_file_list_load_required(model)) {
354356
model->list_loading = true;
355357
browser->callback(ArchiveBrowserEventLoadPrevItems, browser->context);
@@ -361,11 +363,12 @@ static bool archive_view_input(InputEvent* event, void* context) {
361363
model->button_held_for_ticks += 1;
362364
} else if(event->key == InputKeyDown) {
363365
int32_t count = model->item_cnt;
364-
if(model->item_idx >= (count - scroll_speed)) {
365-
scroll_speed = model->item_cnt - model->item_idx - 1;
366+
if(model->item_idx + scroll_speed >= count) {
367+
model->button_held_for_ticks = 0;
368+
model->item_idx = 0;
369+
} else {
370+
model->item_idx = (model->item_idx + scroll_speed) % model->item_cnt;
366371
}
367-
368-
model->item_idx = (model->item_idx + scroll_speed) % model->item_cnt;
369372
if(is_file_list_load_required(model)) {
370373
model->list_loading = true;
371374
browser->callback(ArchiveBrowserEventLoadNextItems, browser->context);

applications/services/gui/modules/file_browser.c

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -602,11 +602,13 @@ static bool file_browser_view_input_callback(InputEvent* event, void* context) {
602602

603603
if(event->key == InputKeyUp) {
604604
if(model->item_idx < scroll_speed) {
605-
scroll_speed = model->item_idx;
605+
model->button_held_for_ticks = 0;
606+
model->item_idx = model->item_cnt - 1;
607+
} else {
608+
model->item_idx =
609+
((model->item_idx - scroll_speed) + model->item_cnt) %
610+
model->item_cnt;
606611
}
607-
608-
model->item_idx =
609-
((model->item_idx - scroll_speed) + model->item_cnt) % model->item_cnt;
610612
if(browser_is_list_load_required(model)) {
611613
model->list_loading = true;
612614
int32_t load_offset = CLAMP(
@@ -622,10 +624,11 @@ static bool file_browser_view_input_callback(InputEvent* event, void* context) {
622624
} else if(event->key == InputKeyDown) {
623625
int32_t count = model->item_cnt;
624626
if(model->item_idx + scroll_speed >= count) {
625-
scroll_speed = count - model->item_idx - 1;
627+
model->button_held_for_ticks = 0;
628+
model->item_idx = 0;
629+
} else {
630+
model->item_idx = (model->item_idx + scroll_speed) % model->item_cnt;
626631
}
627-
628-
model->item_idx = (model->item_idx + scroll_speed) % model->item_cnt;
629632
if(browser_is_list_load_required(model)) {
630633
model->list_loading = true;
631634
int32_t load_offset = CLAMP(

0 commit comments

Comments
 (0)