From 71f9605a67f1b7c1f3ba99d8f32dd55b3fb6348d Mon Sep 17 00:00:00 2001 From: gullradriel Date: Tue, 10 Feb 2026 01:40:00 +0100 Subject: [PATCH] receiver: fix InputKeyOk model locking and redraw behavior --- views/protopirate_receiver.c | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/views/protopirate_receiver.c b/views/protopirate_receiver.c index a0c9433..ea146c9 100644 --- a/views/protopirate_receiver.c +++ b/views/protopirate_receiver.c @@ -469,34 +469,36 @@ bool protopirate_view_receiver_input(InputEvent* event, void* context) { consumed = true; break; case InputKeyOk: + bool do_ok_cb = false; + bool do_toggle = false; + /* Read-only: do not redraw */ with_view_model( receiver->view, ProtoPirateReceiverModel * model, { size_t item_count = ProtoPirateReceiverMenuItemArray_size(model->history_item_arr); + if(item_count > 0) { - if(receiver->callback) { - receiver->callback( - ProtoPirateCustomEventViewReceiverOK, receiver->context); - } - } else { - if(event->type == InputTypeLong) { - with_view_model( - receiver->view, - ProtoPirateReceiverModel * model, - { model->dolphin_view = !model->dolphin_view; }, - true); - } + do_ok_cb = true; + } else if(event->type == InputTypeLong) { + do_toggle = true; } }, false); - consumed = true; - break; - case InputKeyBack: - if(receiver->callback) { - receiver->callback(ProtoPirateCustomEventViewReceiverBack, receiver->context); + /* Only redraw if we actually changed dolphin_view */ + if(do_toggle) { + with_view_model( + receiver->view, + ProtoPirateReceiverModel * model, + { model->dolphin_view = !model->dolphin_view; }, + true); } + + if(do_ok_cb && receiver->callback) { + receiver->callback(ProtoPirateCustomEventViewReceiverOK, receiver->context); + } + consumed = true; break; default: