diff options
| author | forsyth <forsyth@vitanuova.com> | 2010-08-21 18:01:11 +0100 |
|---|---|---|
| committer | forsyth <forsyth@vitanuova.com> | 2010-08-21 18:01:11 +0100 |
| commit | 5849851a19380dbb62a47d9c4d868a81e42fa79b (patch) | |
| tree | 075bc8e4607ab67e67781fdad26dcb6d93491b1a /libtk/cwind.c | |
| parent | 55b0bc0011ddae9df99d50fa0498110585d09a81 (diff) | |
20100821-1800
Diffstat (limited to 'libtk/cwind.c')
| -rw-r--r-- | libtk/cwind.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/libtk/cwind.c b/libtk/cwind.c index dd25eb1b..ffdb3626 100644 --- a/libtk/cwind.c +++ b/libtk/cwind.c @@ -64,6 +64,47 @@ tkcvswindsize(TkCitem *i) i->p.bb.max.y = p.y + s->act.height + bw; } +TkCitem* +tkcvsfindwin(Tk *tk) +{ + Tk *parent, *sub; + TkCitem *i; + TkCanvas *c; + TkCwind *w; + + sub = tkfindsub(tk); + if(sub == nil) + return nil; + parent = sub->parent; + if(parent->type != TKcanvas) + return nil; /* inconsistent */ + c = TKobj(TkCanvas, parent); + for(i = c->head; i != nil; i = i->next) { + if(i->type == TkCVwindow) { + w = TKobj(TkCwind, i); + if(w->sub == sub) + return i; + } + } + return nil; +} + +void +tkcvsforgetsub(Tk *sub, Tk *tk) +{ + TkCwind *w; + TkCitem *i; + + i = tkcvsfindwin(sub); + if(i == nil) + return; + w = TKobj(TkCwind, i); + if(w->focus == tk) { +if(0)print("tkcsvsforget sub %p %q focus %p %q\n", sub, tkname(sub), tk, tkname(tk)); + w->focus = nil; + } +} + static int tkcvschkwfocus(TkCwind *w, Tk *tk) { @@ -97,6 +138,7 @@ tkcvswindgeom(Tk *sub, int x, int y, int w, int h) } if(win->focus != nil) { +if(0)print("check focus %p %q %p %q\n", win, tkname(win->focus), sub, tkname(sub)); if(tkcvschkwfocus(win, sub) == 0) win->focus = nil; } @@ -128,6 +170,15 @@ tkcvssubdestry(Tk *sub) if(tk == nil) return; +if(0)print("tkcvssubdestry %p %q\n", sub, tkname(sub)); + i = tkcvsfindwin(sub); + if(i != nil){ + win = TKobj(TkCwind, i); + if(win->sub != sub){ + print("inconsistent tkcvssubdestry %p %q\n", sub, tkname(sub)); + } + } + c = TKobj(TkCanvas, tk); for(i = c->head; i; i = i->next) { if(i->type == TkCVwindow) { |
