Skip to content

Commit a110d53

Browse files
Fixed crash in DockFocusController
DockWidget pointers are now wrapped into QPointer to detect deleted DockWidgets
1 parent 0270993 commit a110d53

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

src/DockFocusController.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232

3333
namespace ads
3434
{
35+
static const char* const FocusedDockWidgetProperty = "FocusedDockWidget";
36+
3537
/**
3638
* Private data class of CDockFocusController class (pimpl)
3739
*/
@@ -57,8 +59,8 @@ struct DockFocusControllerPrivate
5759
* the dock area that it belongs to
5860
*/
5961
void updateDockWidgetFocus(CDockWidget* DockWidget);
60-
};
61-
// struct DockFocusControllerPrivate
62+
}; // struct DockFocusControllerPrivate
63+
6264

6365

6466
//===========================================================================
@@ -125,7 +127,7 @@ void DockFocusControllerPrivate::updateDockWidgetFocus(CDockWidget* DockWidget)
125127

126128
if (Window)
127129
{
128-
Window->setProperty("FocusedDockWidget", QVariant::fromValue<CDockWidget*>(DockWidget));
130+
Window->setProperty(FocusedDockWidgetProperty, QVariant::fromValue(QPointer<CDockWidget>(DockWidget)));
129131
}
130132
CDockAreaWidget* NewFocusedDockArea = nullptr;
131133
if (FocusedDockWidget)
@@ -161,7 +163,7 @@ void DockFocusControllerPrivate::updateDockWidgetFocus(CDockWidget* DockWidget)
161163

162164
if (NewFloatingWidget)
163165
{
164-
NewFloatingWidget->setProperty("FocusedDockWidget", QVariant::fromValue(DockWidget));
166+
NewFloatingWidget->setProperty(FocusedDockWidgetProperty, QVariant::fromValue(QPointer<CDockWidget>(DockWidget)));
165167
}
166168

167169

@@ -243,13 +245,13 @@ void CDockFocusController::onFocusWindowChanged(QWindow *focusWindow)
243245
return;
244246
}
245247

246-
auto vDockWidget = focusWindow->property("FocusedDockWidget");
248+
auto vDockWidget = focusWindow->property(FocusedDockWidgetProperty);
247249
if (!vDockWidget.isValid())
248250
{
249251
return;
250252
}
251253

252-
auto DockWidget = vDockWidget.value<CDockWidget*>();
254+
auto DockWidget = vDockWidget.value<QPointer<CDockWidget>>();
253255
if (!DockWidget)
254256
{
255257
return;
@@ -376,13 +378,13 @@ void CDockFocusController::notifyFloatingWidgetDrop(CFloatingDockContainer* Floa
376378
return;
377379
}
378380

379-
auto vDockWidget = FloatingWidget->property("FocusedDockWidget");
381+
auto vDockWidget = FloatingWidget->property(FocusedDockWidgetProperty);
380382
if (!vDockWidget.isValid())
381383
{
382384
return;
383385
}
384386

385-
auto DockWidget = vDockWidget.value<CDockWidget*>();
387+
auto DockWidget = vDockWidget.value<QPointer<CDockWidget>>();
386388
if (DockWidget)
387389
{
388390
DockWidget->dockAreaWidget()->setCurrentDockWidget(DockWidget);

0 commit comments

Comments
 (0)