forked from quickshell/quickshell
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:
parent
517143adf9
commit
71fe3d9165
2 changed files with 9 additions and 4 deletions
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue