qp_lvgl: always signal flush ready even with no display (#26275)

qp_lvgl_flush() called lv_disp_flush_ready() only inside the
`if (selected_display)` block. When LVGL invokes the flush callback while
selected_display is NULL, the callback returns without ever signalling
completion, so LVGL keeps the flush marked "in progress" and stalls all
further rendering.

Move lv_disp_flush_ready() out of the conditional so it is always called,
per LVGL's contract that every flush_cb must signal ready exactly once.
This commit is contained in:
Arca Artem
2026-08-05 19:36:31 +01:00
committed by GitHub
parent af6115e215
commit beb57311cb
+4 -1
View File
@@ -28,8 +28,11 @@ void qp_lvgl_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color
qp_viewport(selected_display, area->x1, area->y1, area->x2, area->y2);
qp_pixdata(selected_display, (void *)color_p, number_pixels);
qp_flush(selected_display);
lv_disp_flush_ready(disp);
}
// Must always be signalled, even when there is no selected display:
// skipping it leaves LVGL's flush permanently "in progress" and stalls
// all further rendering.
lv_disp_flush_ready(disp);
}
static uint32_t tick_task_callback(uint32_t trigger_time, void *cb_arg) {