diff --git a/doomsday/libappfw/include/de/framework/guiwidget.h b/doomsday/libappfw/include/de/framework/guiwidget.h index 23ed08c162..2d784fea7a 100644 --- a/doomsday/libappfw/include/de/framework/guiwidget.h +++ b/doomsday/libappfw/include/de/framework/guiwidget.h @@ -261,6 +261,18 @@ class LIBAPPFW_PUBLIC GuiWidget : public QObject, public Widget */ void enableStateSerialization(bool enabled = true); + /** + * Save the state of the widget and all its children (those who support state + * serialization). + */ + void saveState(); + + /** + * Restore the state of the widget and all its children (those who support state + * serialization). + */ + void restoreState(); + // Events. void initialize(); void deinitialize(); diff --git a/doomsday/libappfw/src/guiwidget.cpp b/doomsday/libappfw/src/guiwidget.cpp index 3c67ed9cc0..7857ff6287 100644 --- a/doomsday/libappfw/src/guiwidget.cpp +++ b/doomsday/libappfw/src/guiwidget.cpp @@ -321,7 +321,6 @@ DENG2_PIMPL(GuiWidget) void restoreState() { - if(!stateSerializationEnabled) return; try { if(IPersistent *po = self.maybeAs()) @@ -339,7 +338,6 @@ DENG2_PIMPL(GuiWidget) void saveState() { - if(!stateSerializationEnabled) return; try { if(IPersistent *po = self.maybeAs()) @@ -548,6 +546,32 @@ void GuiWidget::enableStateSerialization(bool enabled) d->stateSerializationEnabled = enabled; } +void GuiWidget::saveState() +{ + d->saveState(); + + foreach(Widget *child, childWidgets()) + { + if(GuiWidget *widget = child->maybeAs()) + { + widget->saveState(); + } + } +} + +void GuiWidget::restoreState() +{ + d->restoreState(); + + foreach(Widget *child, childWidgets()) + { + if(GuiWidget *widget = child->maybeAs()) + { + widget->restoreState(); + } + } +} + void GuiWidget::initialize() { if(d->inited) return; @@ -557,7 +581,10 @@ void GuiWidget::initialize() d->inited = true; glInit(); - d->restoreState(); + if(d->stateSerializationEnabled) + { + d->restoreState(); + } } catch(Error const &er) { @@ -572,7 +599,10 @@ void GuiWidget::deinitialize() try { - d->saveState(); + if(d->stateSerializationEnabled) + { + d->saveState(); + } d->inited = false; d->deinitBlur();