diff --git a/radio/src/thirdparty/libopenui/src/carousel.cpp b/radio/src/thirdparty/libopenui/src/carousel.cpp index 108cf166d..abcd1392d 100644 --- a/radio/src/thirdparty/libopenui/src/carousel.cpp +++ b/radio/src/thirdparty/libopenui/src/carousel.cpp @@ -25,10 +25,7 @@ void CarouselWindow::update() first = max(0, first); coord_t lastPosition = 0; - for (auto & item: items) { - item.front->detach(); - item.back->detach(); - } + detachItems(); for (uint8_t index = first; lastPosition < width() && index < items.size(); index++) { auto & item = items[index]; diff --git a/radio/src/thirdparty/libopenui/src/carousel.h b/radio/src/thirdparty/libopenui/src/carousel.h index f81893430..18abffdf6 100644 --- a/radio/src/thirdparty/libopenui/src/carousel.h +++ b/radio/src/thirdparty/libopenui/src/carousel.h @@ -47,6 +47,16 @@ class CarouselWindow: public Window { { } + ~CarouselWindow() override + { + detachItems(); + // TODO memory leak here +// for (auto & item: items) { +// item.front->deleteLater(); +// item.back->deleteLater(); +// } + } + void addItem(CarouselItem item) { items.emplace_back(item); @@ -70,6 +80,14 @@ class CarouselWindow: public Window { protected: std::vector items; + void detachItems() + { + for (auto & item: items) { + item.front->detach(); + item.back->detach(); + } + } + void update(); }; @@ -104,6 +122,10 @@ class Carousel: public Window { nextButton->enable(index < (int)body->items.size() - 1); } + int getSelection() + { + return body->selection; + } #if defined(HARDWARE_KEYS) void onEvent(event_t event) override;