int
flselect(Flayer *l)
{
- int ret;
if(l->visible!=All)
flupfront(l);
- frselect(&l->f, mousectl);
- ret = 0;
- if(l->f.p0==l->f.p1){
- if(mousep->msec-l->click<Clicktime && l->f.p0+l->origin==l->p0){
- ret = 1;
+ if(l->f.p0==l->f.p1)
+ if(mousep->msec-l->click<Clicktime && l->f.p0+l->origin==l->p0 &&
+ l->f.p0==frcharofpt(&l->f, mousep->xy)){
l->click = 0;
- }else
- l->click = mousep->msec;
- }else
- l->click = 0;
+ return 1;
+ }
+ l->click = mousep->msec;
+ frselect(&l->f, mousectl);
l->p0 = l->f.p0+l->origin, l->p1 = l->f.p1+l->origin;
- return ret;
+ return 0;
}
void
void
threadmain(int argc, char *argv[])
{
- int i, got, scr;
+ int i, got, scr, chord;
Text *t;
Rectangle r;
Flayer *nwhich;
startnewfile(Tstartcmdfile, &cmd);
got = 0;
+ chord = 0;
for(;;got = waitforio()){
if(hasunlocked && RESIZED())
resize();
scr = which && ptinrect(mousep->xy, which->scroll);
if(mousep->buttons)
flushtyping(1);
- if(mousep->buttons&1){
+ if((mousep->buttons&1) == 0)
+ chord = 0;
+ if(chord && which && which==nwhich){
+ chord |= mousep->buttons;
+ t = (Text *)which->user1;
+ if(!t->lock){
+ int w = which-t->l;
+ if(chord&2){
+ cut(t, w, 1, 1);
+ chord &= ~2;
+ }
+ if(chord&4){
+ paste(t, w);
+ chord &= ~4;
+ }
+ }
+ } else if(mousep->buttons&1){
if(nwhich){
if(nwhich!=which)
current(nwhich);
t->lock++;
}else if(t!=&cmd)
outcmd();
+ if(mousep->buttons&1)
+ chord = mousep->buttons;
}
}
}else if((mousep->buttons&2) && which){