x11/panelwindow: do not look up engine generation in ~XPanelWindow()

Looking up engine generation in the destructor causes occasional
crashes. This commit caches it to prevent that from happening.
This commit is contained in:
outfoxxed 2025-06-13 20:12:32 -07:00
parent 517143adf9
commit 71fe3d9165
Signed by untrusted user: outfoxxed
GPG key ID: 4C88A185FB89301E
2 changed files with 9 additions and 4 deletions

View file

@ -40,17 +40,20 @@ public:
} }
void addPanel(XPanelWindow* panel) { void addPanel(XPanelWindow* panel) {
auto& panels = this->mPanels[EngineGeneration::findObjectGeneration(panel)]; panel->engineGeneration = EngineGeneration::findObjectGeneration(panel);
auto& panels = this->mPanels[panel->engineGeneration];
if (!panels.contains(panel)) { if (!panels.contains(panel)) {
panels.push_back(panel); panels.push_back(panel);
} }
} }
void removePanel(XPanelWindow* panel) { void removePanel(XPanelWindow* panel) {
auto& panels = this->mPanels[EngineGeneration::findObjectGeneration(panel)]; if (!panel->engineGeneration) return;
auto& panels = this->mPanels[panel->engineGeneration];
if (panels.removeOne(panel)) { if (panels.removeOne(panel)) {
if (panels.isEmpty()) { if (panels.isEmpty()) {
this->mPanels.erase(EngineGeneration::findObjectGeneration(panel)); this->mPanels.erase(panel->engineGeneration);
} }
// from the bottom up, update all panels // from the bottom up, update all panels
@ -61,7 +64,8 @@ public:
} }
void updateLowerDimensions(XPanelWindow* exclude) { void updateLowerDimensions(XPanelWindow* exclude) {
auto& panels = this->mPanels[EngineGeneration::findObjectGeneration(exclude)]; if (!exclude->engineGeneration) return;
auto& panels = this->mPanels[exclude->engineGeneration];
// update all panels lower than the one we start from // update all panels lower than the one we start from
auto found = false; auto found = false;

View file

@ -98,6 +98,7 @@ private:
Margins mMargins; Margins mMargins;
qint32 mExclusiveZone = 0; qint32 mExclusiveZone = 0;
ExclusionMode::Enum mExclusionMode = ExclusionMode::Auto; ExclusionMode::Enum mExclusionMode = ExclusionMode::Auto;
EngineGeneration* knownGeneration = nullptr;
QRect lastScreenVirtualGeometry; QRect lastScreenVirtualGeometry;
XPanelEventFilter eventFilter; XPanelEventFilter eventFilter;