sam: chording

This commit is contained in:
cinap_lenrek 2012-02-10 01:40:13 +01:00
parent c00f5f5192
commit 0c22c05a96
2 changed files with 29 additions and 13 deletions

View file

@ -252,21 +252,18 @@ fldelete(Flayer *l, long p0, long p1)
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

View file

@ -28,7 +28,7 @@ int autoindent;
void
threadmain(int argc, char *argv[])
{
int i, got, scr;
int i, got, scr, chord;
Text *t;
Rectangle r;
Flayer *nwhich;
@ -51,6 +51,7 @@ threadmain(int argc, char *argv[])
startnewfile(Tstartcmdfile, &cmd);
got = 0;
chord = 0;
for(;;got = waitforio()){
if(hasunlocked && RESIZED())
resize();
@ -77,7 +78,23 @@ threadmain(int argc, char *argv[])
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);
@ -90,6 +107,8 @@ threadmain(int argc, char *argv[])
t->lock++;
}else if(t!=&cmd)
outcmd();
if(mousep->buttons&1)
chord = mousep->buttons;
}
}
}else if((mousep->buttons&2) && which){