Skip to content

Commit

Permalink
Widgets|libappfw: Closing a parent popup when child popup closes
Browse files Browse the repository at this point in the history
  • Loading branch information
skyjake committed Nov 12, 2017
1 parent 69a6a16 commit 114ccaf
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 0 deletions.
1 change: 1 addition & 0 deletions doomsday/sdk/libappfw/include/de/framework/item.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ class LIBAPPFW_PUBLIC Item
ActivationClosesPopup = 0x100,
Separator = 0x200,
Annotation = 0x400 | Separator,
ClosesParentPopup = 0x800,

DefaultSemantics = ShownAsLabel
};
Expand Down
6 changes: 6 additions & 0 deletions doomsday/sdk/libappfw/include/de/framework/subwidgetitem.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,12 @@ class LIBAPPFW_PUBLIC SubwidgetItem : public ImageItem
, _constructor(constructor)
, _dir(openingDirection) {}

SubwidgetItem(Semantics semantics, String const &label, ui::Direction openingDirection,
WidgetConstructor constructor)
: ImageItem(semantics, label)
, _constructor(constructor)
, _dir(openingDirection) {}

SubwidgetItem(Image const &image, String const &label, ui::Direction openingDirection,
WidgetConstructor constructor)
: ImageItem(ShownAsButton, image, label)
Expand Down
1 change: 1 addition & 0 deletions doomsday/sdk/libappfw/include/de/widgets/popupmenuwidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ class LIBAPPFW_PUBLIC PopupMenuWidget : public PopupWidget
PopupMenuWidget(String const &name = String());

void setParentPopup(PopupWidget *parentPopup);
PopupWidget *parentPopup() const;

MenuWidget &menu() const;

Expand Down
8 changes: 8 additions & 0 deletions doomsday/sdk/libappfw/src/widgets/menuwidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,14 @@ DENG2_PIMPL(MenuWidget)
setWidget(_item.makeWidget(), _item.openingDirection());
_widget->setDeleteAfterDismissed(true);

if (_item.semantics().testFlag(Item::ClosesParentPopup))
{
// PopupMenuWidget has a MenuWidget as content.
if (auto *selfPopup = maybeAs<PopupMenuWidget>(d->self().parentGuiWidget()))
{
QObject::connect(_widget.get(), SIGNAL(closed()), selfPopup, SLOT(close()));
}
}
SubAction::trigger();
}

Expand Down
5 changes: 5 additions & 0 deletions doomsday/sdk/libappfw/src/widgets/popupmenuwidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -431,6 +431,11 @@ void PopupMenuWidget::setParentPopup(PopupWidget *parentPopup)
d->parentPopup.reset(parentPopup);
}

PopupWidget *PopupMenuWidget::parentPopup() const
{
return d->parentPopup;
}

MenuWidget &PopupMenuWidget::menu() const
{
return static_cast<MenuWidget &>(content());
Expand Down

0 comments on commit 114ccaf

Please sign in to comment.