From 184d4424b1174a56a742b81f0b7bf0791f3a694d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaakko=20Ker=C3=A4nen?= Date: Wed, 18 Dec 2013 07:51:16 +0200 Subject: [PATCH] Refactor|MenuWidget|Client: Handling deletion of sub-widgets When a widget is being deleted, only the de::Widget instance remains; a dynamic cast to a subclass will fail. --- doomsday/client/src/ui/widgets/menuwidget.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/doomsday/client/src/ui/widgets/menuwidget.cpp b/doomsday/client/src/ui/widgets/menuwidget.cpp index d9ed517bc9..baaf4df433 100644 --- a/doomsday/client/src/ui/widgets/menuwidget.cpp +++ b/doomsday/client/src/ui/widgets/menuwidget.cpp @@ -154,7 +154,7 @@ DENG2_PIMPL(MenuWidget) ListData defaultItems; Data const *items; ChildWidgetOrganizer organizer; - QSet openSubs; + QSet openSubs; SizePolicy colPolicy; SizePolicy rowPolicy; @@ -296,16 +296,18 @@ DENG2_PIMPL(MenuWidget) void panelBeingClosed(PanelWidget &popup) { - openSubs.remove(&popup.as()); + openSubs.remove(&popup); } void widgetBeingDeleted(Widget &widget) { - openSubs.remove(&widget.as()); + openSubs.remove(static_cast(&widget)); } - void keepTrackOfSubWidget(PopupWidget *w) + void keepTrackOfSubWidget(PanelWidget *w) { + DENG2_ASSERT(w->is()); + openSubs.insert(w); w->audienceForClose += this; @@ -452,7 +454,7 @@ bool MenuWidget::handleEvent(Event const &event) void MenuWidget::dismissPopups() { - foreach(PopupWidget *pop, d->openSubs) + foreach(PanelWidget *pop, d->openSubs) { pop->close(); }