mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-07-27 08:58:28 +00:00
fix(core/rust/ui): expose method for completely repainting layout
[no changelog]
This commit is contained in:
parent
3b629a1ea4
commit
a5cff25209
@ -47,6 +47,7 @@ static void _librust_qstrs(void) {
|
|||||||
MP_QSTR_button_event;
|
MP_QSTR_button_event;
|
||||||
MP_QSTR_timer;
|
MP_QSTR_timer;
|
||||||
MP_QSTR_paint;
|
MP_QSTR_paint;
|
||||||
|
MP_QSTR_request_complete_repaint;
|
||||||
MP_QSTR_trace;
|
MP_QSTR_trace;
|
||||||
MP_QSTR_bounds;
|
MP_QSTR_bounds;
|
||||||
MP_QSTR_page_count;
|
MP_QSTR_page_count;
|
||||||
|
@ -282,6 +282,7 @@ impl LayoutObj {
|
|||||||
Qstr::MP_QSTR_button_event => obj_fn_var!(3, 3, ui_layout_button_event).as_obj(),
|
Qstr::MP_QSTR_button_event => obj_fn_var!(3, 3, ui_layout_button_event).as_obj(),
|
||||||
Qstr::MP_QSTR_timer => obj_fn_2!(ui_layout_timer).as_obj(),
|
Qstr::MP_QSTR_timer => obj_fn_2!(ui_layout_timer).as_obj(),
|
||||||
Qstr::MP_QSTR_paint => obj_fn_1!(ui_layout_paint).as_obj(),
|
Qstr::MP_QSTR_paint => obj_fn_1!(ui_layout_paint).as_obj(),
|
||||||
|
Qstr::MP_QSTR_request_complete_repaint => obj_fn_1!(ui_layout_request_complete_repaint).as_obj(),
|
||||||
Qstr::MP_QSTR_trace => obj_fn_2!(ui_layout_trace).as_obj(),
|
Qstr::MP_QSTR_trace => obj_fn_2!(ui_layout_trace).as_obj(),
|
||||||
Qstr::MP_QSTR_bounds => obj_fn_1!(ui_layout_bounds).as_obj(),
|
Qstr::MP_QSTR_bounds => obj_fn_1!(ui_layout_bounds).as_obj(),
|
||||||
Qstr::MP_QSTR_page_count => obj_fn_1!(ui_layout_page_count).as_obj(),
|
Qstr::MP_QSTR_page_count => obj_fn_1!(ui_layout_page_count).as_obj(),
|
||||||
@ -421,6 +422,22 @@ extern "C" fn ui_layout_paint(this: Obj) -> Obj {
|
|||||||
unsafe { util::try_or_raise(block) }
|
unsafe { util::try_or_raise(block) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" fn ui_layout_request_complete_repaint(this: Obj) -> Obj {
|
||||||
|
let block = || {
|
||||||
|
let this: Gc<LayoutObj> = this.try_into()?;
|
||||||
|
let event = Event::RequestPaint;
|
||||||
|
let msg = this.obj_event(event)?;
|
||||||
|
if msg != Obj::const_none() {
|
||||||
|
// Messages raised during a `RequestPaint` dispatch are not propagated, let's
|
||||||
|
// make sure we don't do that.
|
||||||
|
#[cfg(feature = "ui_debug")]
|
||||||
|
panic!("cannot raise messages during RequestPaint");
|
||||||
|
};
|
||||||
|
Ok(Obj::const_none())
|
||||||
|
};
|
||||||
|
unsafe { util::try_or_raise(block) }
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" fn ui_layout_page_count(this: Obj) -> Obj {
|
extern "C" fn ui_layout_page_count(this: Obj) -> Obj {
|
||||||
let block = || {
|
let block = || {
|
||||||
let this: Gc<LayoutObj> = this.try_into()?;
|
let this: Gc<LayoutObj> = this.try_into()?;
|
||||||
|
@ -28,6 +28,10 @@ class _RustLayout(ui.Layout):
|
|||||||
def set_timer(self, token: int, deadline: int) -> None:
|
def set_timer(self, token: int, deadline: int) -> None:
|
||||||
self.timer.schedule(deadline, token)
|
self.timer.schedule(deadline, token)
|
||||||
|
|
||||||
|
def request_complete_repaint(self) -> None:
|
||||||
|
msg = self.layout.request_complete_repaint()
|
||||||
|
assert msg is None
|
||||||
|
|
||||||
if __debug__:
|
if __debug__:
|
||||||
|
|
||||||
def create_tasks(self) -> tuple[loop.AwaitableTask, ...]:
|
def create_tasks(self) -> tuple[loop.AwaitableTask, ...]:
|
||||||
|
@ -185,6 +185,7 @@ async def _prompt_number(
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
num_input.request_complete_repaint()
|
||||||
|
|
||||||
|
|
||||||
async def slip39_prompt_threshold(
|
async def slip39_prompt_threshold(
|
||||||
|
Loading…
Reference in New Issue
Block a user