Project

General

Profile

Bug #4790

Wt::WObject::addChild() bug

Added by Saif Rehman almost 7 years ago. Updated over 6 years ago.

Status:
Feedback
Priority:
Normal
Assignee:
Target version:
Start date:
03/04/2016
Due date:
% Done:

0%

Estimated time:

Description

Take the following example

MyLineEdit::MyLineEdit(WContainerWidget *parent) : WLineEdit(parent)
{
  _btn = new WPushButton();
  WObject::addChild(_btn);
}
WPushButton *MyLineEdit::getButton() const
{
  return _btn;
}

MyTemplate::MyTemplate()
{
  _myLineEdit = new MyLineEdit();
  bindWidget("edit", _myLineEdit);
  bindWidget("btn", _myLineEdit->getButton()); //Assertion failed: children_ != 0, file ...\src\Wt\WWebWidget.C, line 319
}

What I'm doing is setting _btn's parent to _myLineEdit so that if _btn is not reparented, it should be deleted along with _myLineEdit. However, when MyTemplate's constructor tries to reparent _btn the assertion in WWebWidget::removeChild() fails. That is because I used WObject::addChild() which does not create WWebWidget::children_ but instead creates WWidget::children_

#1

Updated by Koen Deforche over 6 years ago

  • Status changed from New to Feedback
  • Assignee set to Koen Deforche
  • Target version set to 4.0.0

Hey, you're correctly observing a messy situation in WObject:: versus WWebWidget:: addChild(), which leads to this error. This will be fixed in Wt4 (where we move to C++11 unique_ptr for widget ownership (and shared_ptr for models, etc...)).

Also available in: Atom PDF