I was able to reproduce this from the latest develop-branch. It only occurs when the app is shutdown and all components are destroyed.
I’m using a custom row component which contains labels. Originally i had a custom label, but i’m able to reproduce this with using only stock juce::Label
. I have to set setEditable (false, true)
on the label in order to reproduce. Also some amount of scrolling is required - probably to generate some create/destroy calls for the row components. I haven’t intentionally changed anything regarding accessibility handlers.
Here’s a stack trace from develop using stock label
<app name>.exe!std::unique_ptr<juce::ScrollBar,std::default_delete<juce::ScrollBar>>::operator*() Line 3243 C++
<app name>.exe!juce::Viewport::getVerticalScrollBar() Line 254 C++
<app name>.exe!juce::ListBox::getVerticalScrollBar() Line 1003 C++
<app name>.exe!Sidebar::scrollbarWidthCompensation() Line 35 C++
<app name>.exe!Sidebar::paintListBoxItem(int rowNumber, juce::Graphics & g, int width, int height, bool rowIsSelected) Line 47 C++
<app name>.exe!juce::ListBox::RowComponent::paint(juce::Graphics & g) Line 64 C++
<app name>.exe!juce::Component::paintComponentAndChildren(juce::Graphics & g) Line 1986 C++
<app name>.exe!juce::Component::paintEntireComponent(juce::Graphics & g, bool ignoreAlphaLevel) Line 2087 C++
<app name>.exe!juce::Component::paintWithinParentContext(juce::Graphics & g) Line 1971 C++
<app name>.exe!juce::Component::paintComponentAndChildren(juce::Graphics & g) Line 2028 C++
<app name>.exe!juce::Component::paintEntireComponent(juce::Graphics & g, bool ignoreAlphaLevel) Line 2087 C++
<app name>.exe!juce::Component::paintWithinParentContext(juce::Graphics & g) Line 1971 C++
<app name>.exe!juce::Component::paintComponentAndChildren(juce::Graphics & g) Line 2028 C++
<app name>.exe!juce::Component::paintEntireComponent(juce::Graphics & g, bool ignoreAlphaLevel) Line 2087 C++
<app name>.exe!juce::Component::paintWithinParentContext(juce::Graphics & g) Line 1971 C++
<app name>.exe!juce::Component::paintComponentAndChildren(juce::Graphics & g) Line 2028 C++
<app name>.exe!juce::Component::paintEntireComponent(juce::Graphics & g, bool ignoreAlphaLevel) Line 2087 C++
<app name>.exe!juce::Component::paintWithinParentContext(juce::Graphics & g) Line 1971 C++
<app name>.exe!juce::Component::paintComponentAndChildren(juce::Graphics & g) Line 2028 C++
<app name>.exe!juce::Component::paintEntireComponent(juce::Graphics & g, bool ignoreAlphaLevel) Line 2087 C++
<app name>.exe!juce::Component::paintWithinParentContext(juce::Graphics & g) Line 1971 C++
<app name>.exe!juce::Component::paintComponentAndChildren(juce::Graphics & g) Line 2028 C++
<app name>.exe!juce::Component::paintEntireComponent(juce::Graphics & g, bool ignoreAlphaLevel) Line 2087 C++
<app name>.exe!juce::Component::paintWithinParentContext(juce::Graphics & g) Line 1971 C++
<app name>.exe!juce::Component::paintComponentAndChildren(juce::Graphics & g) Line 2028 C++
<app name>.exe!juce::Component::paintEntireComponent(juce::Graphics & g, bool ignoreAlphaLevel) Line 2087 C++
<app name>.exe!juce::Component::paintWithinParentContext(juce::Graphics & g) Line 1971 C++
<app name>.exe!juce::Component::paintComponentAndChildren(juce::Graphics & g) Line 2028 C++
<app name>.exe!juce::Component::paintEntireComponent(juce::Graphics & g, bool ignoreAlphaLevel) Line 2087 C++
<app name>.exe!juce::Component::paintWithinParentContext(juce::Graphics & g) Line 1971 C++
<app name>.exe!juce::Component::paintComponentAndChildren(juce::Graphics & g) Line 2028 C++
<app name>.exe!juce::Component::paintEntireComponent(juce::Graphics & g, bool ignoreAlphaLevel) Line 2087 C++
<app name>.exe!juce::ComponentPeer::handlePaint(juce::LowLevelGraphicsContext & contextToPaintTo) Line 132 C++
<app name>.exe!juce::HWNDComponentPeer::performPaint(HDC__ * dc, HRGN__ * rgn, int regionType, tagPAINTSTRUCT & paintStruct) Line 2663 C++
<app name>.exe!juce::HWNDComponentPeer::handlePaintMessage() Line 2557 C++
<app name>.exe!juce::HWNDComponentPeer::peerWindowProc(HWND__ * h, unsigned int message, unsigned __int64 wParam, __int64 lParam) Line 3687 C++
<app name>.exe!juce::HWNDComponentPeer::windowProc(HWND__ * h, unsigned int message, unsigned __int64 wParam, __int64 lParam) Line 3627 C++
[External Code]
<app name>.exe!juce::ListBox::RowComponent::RowAccessibilityHandler::getCurrentState() Line 217 C++
<app name>.exe!juce::AccessibilityHandler::isIgnored() Line 89 C++
<app name>.exe!juce::getUnignoredAncestor(juce::AccessibilityHandler * handler) Line 163 C++
<app name>.exe!juce::AccessibilityHandler::getParent() Line 200 C++
<app name>.exe!juce::notifyAccessibilityEventInternal(const juce::AccessibilityHandler & handler, juce::InternalAccessibilityEvent eventType) Line 161 C++
<app name>.exe!juce::AccessibilityHandler::AccessibilityHandler(juce::Component & comp, juce::AccessibilityRole accessibilityRole, juce::AccessibilityActions accessibilityActions, juce::AccessibilityHandler::Interfaces interfacesIn) Line 66 C++
<app name>.exe!juce::LabelAccessibilityHandler::LabelAccessibilityHandler(juce::Label & labelToWrap) Line 531 C++
[External Code]
<app name>.exe!juce::Label::createAccessibilityHandler() Line 586 C++
<app name>.exe!juce::Component::getAccessibilityHandler() Line 3220 C++
<app name>.exe!juce::Component::internalKeyboardFocusLoss(juce::Component::FocusChangeType cause) Line 2734 C++
<app name>.exe!juce::ComponentPeer::handleFocusLoss() Line 363 C++
<app name>.exe!juce::HWNDComponentPeer::peerWindowProc(HWND__ * h, unsigned int message, unsigned __int64 wParam, __int64 lParam) Line 3826 C++
<app name>.exe!juce::HWNDComponentPeer::windowProc(HWND__ * h, unsigned int message, unsigned __int64 wParam, __int64 lParam) Line 3627 C++
[External Code]
<app name>.exe!juce::ListBox::RowComponent::RowAccessibilityHandler::getCurrentState() Line 217 C++
<app name>.exe!juce::AccessibilityHandler::isIgnored() Line 89 C++
<app name>.exe!juce::getUnignoredAncestor(juce::AccessibilityHandler * handler) Line 163 C++
<app name>.exe!juce::AccessibilityHandler::getParent() Line 200 C++
<app name>.exe!juce::notifyAccessibilityEventInternal(const juce::AccessibilityHandler & handler, juce::InternalAccessibilityEvent eventType) Line 161 C++
<app name>.exe!juce::AccessibilityHandler::AccessibilityHandler(juce::Component & comp, juce::AccessibilityRole accessibilityRole, juce::AccessibilityActions accessibilityActions, juce::AccessibilityHandler::Interfaces interfacesIn) Line 66 C++
<app name>.exe!juce::LabelAccessibilityHandler::LabelAccessibilityHandler(juce::Label & labelToWrap) Line 531 C++
[External Code]
<app name>.exe!juce::Label::createAccessibilityHandler() Line 586 C++
<app name>.exe!juce::Component::getAccessibilityHandler() Line 3220 C++
<app name>.exe!juce::Component::internalKeyboardFocusGain(juce::Component::FocusChangeType cause, const juce::WeakReference<juce::Component,juce::ReferenceCountedObject> & safePointer) Line 2717 C++
<app name>.exe!juce::Component::takeKeyboardFocus(juce::Component::FocusChangeType cause) Line 2874 C++
<app name>.exe!juce::Component::grabKeyboardFocusInternal(juce::Component::FocusChangeType cause, bool canTryParent) Line 2887 C++
<app name>.exe!juce::Component::grabKeyboardFocusInternal(juce::Component::FocusChangeType cause, bool canTryParent) Line 2897 C++
<app name>.exe!juce::Component::grabKeyboardFocusInternal(juce::Component::FocusChangeType cause, bool canTryParent) Line 2906 C++
<app name>.exe!juce::Component::grabKeyboardFocusInternal(juce::Component::FocusChangeType cause, bool canTryParent) Line 2906 C++
<app name>.exe!juce::Component::grabKeyboardFocus() Line 2920 C++
<app name>.exe!juce::Component::removeChildComponent(int index, bool sendParentEvents, bool sendChildEvents) Line 1581 C++
<app name>.exe!juce::Component::~Component() Line 516 C++
<app name>.exe!juce::Label::~Label() Line 49 C++
[External Code]
<app name>.exe!juce::ContainerDeletePolicy<juce::ListBox::RowComponent>::destroy(juce::ListBox::RowComponent * object) Line 54 C++
<app name>.exe!juce::OwnedArray<juce::ListBox::RowComponent,juce::DummyCriticalSection>::deleteAllObjects() Line 864 C++
<app name>.exe!juce::OwnedArray<juce::ListBox::RowComponent,juce::DummyCriticalSection>::~OwnedArray<juce::ListBox::RowComponent,juce::DummyCriticalSection>() Line 65 C++
[External Code]
<app name>.exe!juce::ListBox::~ListBox() Line 538 C++
[External Code]
<app name>.exe!Sidebar::~Sidebar() Line 18 C++
[External Code]
<app name>.exe!ProjectEditorView::~ProjectEditorView() Line 28 C++
<app name>.exe!MainComponent::~MainComponent() Line 159 C++
[External Code]
<app name>.exe!juce::Component::SafePointer<juce::Component>::deleteAndZero() Line 2314 C++
<app name>.exe!juce::ResizableWindow::clearContentComponent() Line 108 C++
<app name>.exe!juce::ResizableWindow::~ResizableWindow() Line 58 C++
<app name>.exe!juce::DocumentWindow::~DocumentWindow() Line 79 C++
[External Code]
<app name>.exe!<app name>Application::shutdown() Line 37 C++
<app name>.exe!juce::JUCEApplicationBase::shutdownApp() Line 324 C++
<app name>.exe!juce::JUCEApplicationBase::main() Line 266 C++
<app name>.exe!WinMain(HINSTANCE__ * __formal, HINSTANCE__ * __formal, char * __formal, int __formal) Line 111 C++
[External Code]