diff --git a/src/dlangui/widgets/controls.d b/src/dlangui/widgets/controls.d index 0f681233..10fccfa6 100644 --- a/src/dlangui/widgets/controls.d +++ b/src/dlangui/widgets/controls.d @@ -213,6 +213,7 @@ class ImageWidget : Widget { /// handle theme change: e.g. reload some themed resources override void onThemeChanged() { + super.onThemeChanged(); if (_drawableId !is null) _drawable.clear(); // remove cached drawable } diff --git a/src/dlangui/widgets/lists.d b/src/dlangui/widgets/lists.d index 42b10c56..055ee8f6 100644 --- a/src/dlangui/widgets/lists.d +++ b/src/dlangui/widgets/lists.d @@ -886,6 +886,16 @@ class ListWidget : WidgetGroup, OnScrollHandler, OnAdapterChangeHandler { return true; } + /// handle theme change: e.g. reload some themed resources + override void onThemeChanged() { + super.onThemeChanged(); + _scrollbar.onThemeChanged(); + for (int i = 0; i < itemCount; i++) { + Widget w = itemWidget(i); + w.onThemeChanged(); + } + } + /// Measure widget according to desired width and height constraints. (Step 1 of two phase layout). override void measure(int parentWidth, int parentHeight) { if (visibility == Visibility.Gone) { diff --git a/src/dlangui/widgets/widget.d b/src/dlangui/widgets/widget.d index c351d19d..831ce44a 100644 --- a/src/dlangui/widgets/widget.d +++ b/src/dlangui/widgets/widget.d @@ -255,13 +255,15 @@ public: /// handle theme change: e.g. reload some themed resources void onThemeChanged() { - _cachedStyle = currentTheme.get(_styleId); // default implementation: call recursive for children for (int i = 0; i < childCount; i++) child(i).onThemeChanged(); if (_ownStyle) { _ownStyle.onThemeChanged(); } + if (_cachedStyle) { + _cachedStyle = currentTheme.get(_styleId); + } } /// returns widget id, null if not set