This in your ModuleWidget::step override looks suspicious to me.
I’m not understanding why it’s necessary to muck with your parent’s/parent like this. Seems like something that could cause issues and might be solving a problem that has a better solution (like dirtying when your setting is changed rather than unconditionally).
// if in the browser, force a panel redraw per frame with the current panel theme
if (!module) {
DirtyEvent eDirty;
parent->parent->onDirty(eDirty);
}
...