49 lines
859 B
C
49 lines
859 B
C
|
#include <u.h>
|
||
|
#include <libc.h>
|
||
|
#include <draw.h>
|
||
|
#include <event.h>
|
||
|
#include <panel.h>
|
||
|
#include "pldefs.h"
|
||
|
|
||
|
void plgrabkb(Panel *g){
|
||
|
plkbfocus=g;
|
||
|
}
|
||
|
void plkeyboard(Rune c){
|
||
|
if(plkbfocus)
|
||
|
plkbfocus->type(plkbfocus, c);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
* Return the most leafward, highest priority panel containing p
|
||
|
*/
|
||
|
Panel *pl_ptinpanel(Point p, Panel *g){
|
||
|
Panel *v;
|
||
|
for(;g;g=g->next) if(ptinrect(p, g->r)){
|
||
|
v=pl_ptinpanel(p, g->child);
|
||
|
if(v && v->pri(v, p)>=g->pri(g, p)) return v;
|
||
|
return g;
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
void plmouse(Panel *g, Mouse *m){
|
||
|
Panel *hit, *last;
|
||
|
if(g->flags&REMOUSE)
|
||
|
hit=g->lastmouse;
|
||
|
else{
|
||
|
hit=pl_ptinpanel(m->xy, g);
|
||
|
last=g->lastmouse;
|
||
|
if(last && last!=hit){
|
||
|
m->buttons|=OUT;
|
||
|
last->hit(last, m);
|
||
|
m->buttons&=~OUT;
|
||
|
}
|
||
|
}
|
||
|
if(hit){
|
||
|
if(hit->hit(hit, m))
|
||
|
g->flags|=REMOUSE;
|
||
|
else
|
||
|
g->flags&=~REMOUSE;
|
||
|
g->lastmouse=hit;
|
||
|
}
|
||
|
}
|