Forbade setting a parent on a toplevel.

This commit is contained in:
Pietro Gagliardi 2015-08-20 19:17:19 -04:00
parent 0fd453fa91
commit 9da5feb0be
3 changed files with 9 additions and 3 deletions

View File

@ -42,13 +42,18 @@ uiControl *uiControlParent(uiControl *c)
return cb->parent;
}
int isToplevel(uiControl *c)
{
return uiIsA(c, uiWindowType(), 0) != NULL;
}
// returns self if self is a window
uiControl *toplevelOwning(uiControl *c)
{
struct controlBase *cb;
for (;;) {
if (uiIsA(c, uiWindowType(), 0) != NULL)
if (isToplevel(c))
return c;
cb = controlBase(c);
if (cb->parent == NULL)
@ -63,6 +68,8 @@ void uiControlSetParent(uiControl *c, uiControl *parent)
{
struct controlBase *cb = controlBase(c);
if (isToplevel(c))
complain("cannot set a parent on a toplevel (uiWindow)");
if (parent != NULL && cb->parent != NULL)
complain("attempt to reparent uiControl %p (has parent %p, attempt to give parent %p)", c, cb->parent, parent);
if (parent == NULL && cb->parent == NULL)

View File

@ -98,8 +98,6 @@ static void onDestroy(uiWindow *w)
[windowDelegate unregisterWindow:w];
}
// TODO forbid setting a parent
static void windowCommitShow(uiControl *c)
{
uiWindow *w = (uiWindow *) c;

View File

@ -15,6 +15,7 @@ extern void uiFree(void *);
extern void complain(const char *, ...);
extern int isToplevel(uiControl *);
extern uiControl *toplevelOwning(uiControl *);
extern void osCommitShow(uiControl *);