This adds some resource-ownership tracking.
Time to start spreading this out, more.
This commit is contained in:
34
dw/layout.cc
34
dw/layout.cc
@ -327,10 +327,8 @@ Layout::~Layout ()
|
||||
if (bgImage)
|
||||
bgImage->unref ();
|
||||
if (topLevel) {
|
||||
detachWidget (topLevel);
|
||||
Widget *w = topLevel;
|
||||
topLevel = NULL;
|
||||
delete w;
|
||||
detachWidget (topLevel.get());
|
||||
topLevel.reset();
|
||||
}
|
||||
|
||||
delete queueResizeList;
|
||||
@ -364,7 +362,7 @@ void Layout::detachWidget (Widget *widget)
|
||||
it->unref ();
|
||||
}
|
||||
|
||||
void Layout::addWidget (Widget *widget)
|
||||
void Layout::addWidget (std::unique_ptr< Widget > widget)
|
||||
{
|
||||
if (topLevel) {
|
||||
MSG_WARN("widget already set\n");
|
||||
@ -374,20 +372,20 @@ void Layout::addWidget (Widget *widget)
|
||||
// The toplevel widget always establishes a stacking context. It could
|
||||
// already be set in Widget::setStyle().
|
||||
if (widget->stackingContextMgr == NULL && IMPL_POS) {
|
||||
widget->stackingContextMgr = new StackingContextMgr (widget);
|
||||
DBG_OBJ_ASSOC (widget, widget->stackingContextMgr);
|
||||
widget->stackingContextWidget = widget;
|
||||
widget->stackingContextMgr = new StackingContextMgr (widget.get());
|
||||
DBG_OBJ_ASSOC (widget.get(), widget->stackingContextMgr);
|
||||
widget->stackingContextWidget = widget.get();
|
||||
}
|
||||
|
||||
topLevel = widget;
|
||||
widget->layout = this;
|
||||
widget->container = NULL;
|
||||
DBG_OBJ_SET_PTR_O (widget, "container", widget->container);
|
||||
topLevel = std::move( widget );
|
||||
topLevel->layout = this;
|
||||
topLevel->container = NULL;
|
||||
DBG_OBJ_SET_PTR_O (topLevel.get(), "container", topLevel->container);
|
||||
|
||||
queueResizeList->clear ();
|
||||
widget->notifySetAsTopLevel ();
|
||||
topLevel->notifySetAsTopLevel ();
|
||||
|
||||
findtextState.setWidget (widget);
|
||||
findtextState.setWidget (topLevel.get());
|
||||
|
||||
canvasHeightGreater = false;
|
||||
DBG_OBJ_SET_SYM ("canvasHeightGreater",
|
||||
@ -426,18 +424,16 @@ void Layout::removeWidget ()
|
||||
updateCursor ();
|
||||
}
|
||||
|
||||
void Layout::setWidget (Widget *widget)
|
||||
void Layout::setWidget (std::unique_ptr< Widget >widget)
|
||||
{
|
||||
DBG_OBJ_ASSOC_CHILD (widget);
|
||||
|
||||
widgetAtPoint = NULL;
|
||||
if (topLevel) {
|
||||
Widget *w = topLevel;
|
||||
topLevel = NULL;
|
||||
delete w;
|
||||
topLevel.reset();
|
||||
}
|
||||
textZone->zoneFree ();
|
||||
addWidget (widget);
|
||||
addWidget (std::move(widget));
|
||||
|
||||
updateCursor ();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user