alot of renaming...
[k8sterm.git] / src / mouseevents.c
blob61a9f0587a8c21c780a297128b1dd41858876a8d
1 static void xevtcbbpress (XEvent *e) {
2 if (curterm == NULL) return;
3 //
4 if (xw.tabheight > 0) {
5 if ((opt_tabposition == 0 && e->xbutton.y >= xw.h-xw.tabheight) ||
6 (opt_tabposition != 0 && e->xbutton.y < xw.tabheight)) {
7 switch (e->xbutton.button) {
8 case Button1: // left
9 msTabSwitch(e);
10 break;
11 case Button4: // wheel up
12 msTabScrollLeft();
13 break;
14 case Button5: // wheel down
15 msTabScrollRight();
16 break;
18 return;
22 if ((e->xbutton.state&ShiftMask) != 0) {
23 if (e->xbutton.button == Button1) {
24 if (curterm->sel.bx != -1) k8t_tmDirty(curterm, curterm->sel.b.y, curterm->sel.e.y);
25 curterm->sel.mode = 1;
26 curterm->sel.b.y = curterm->sel.e.y = curterm->row+1;
27 curterm->sel.ex = curterm->sel.bx = K8T_X2COL(e->xbutton.x);
28 curterm->sel.ey = curterm->sel.by = K8T_Y2ROW(curterm, e->xbutton.y);
29 //fprintf(stderr, "x=%d; y=%d\n", curterm->sel.bx, curterm->sel.by);
30 k8t_Draw(curterm, 1);
31 return;
34 if (e->xbutton.button == Button3) {
35 curterm->sel.bx = -1;
36 k8t_selCopy(curterm);
37 k8t_Draw(curterm, 1);
40 return;
42 if (K8T_ISSET(curterm, K8T_MODE_MOUSE)) k8t_mouseReport(curterm, e);
46 static void xevtcbbrelease (XEvent *e) {
47 if (curterm == NULL) return;
49 switch (opt_tabposition) {
50 case 0: // bottom
51 if (e->xbutton.y >= xw.h-xw.tabheight) return;
52 break;
53 case 1: // top
54 if (e->xbutton.y < xw.tabheight) return;
55 break;
58 if ((e->xbutton.state&ShiftMask) == 0 && !curterm->sel.mode) {
59 if (K8T_ISSET(curterm, K8T_MODE_MOUSE)) k8t_mouseReport(curterm, e);
60 return;
63 if (e->xbutton.button == Button2) {
64 selpaste(curterm, XA_PRIMARY);
65 } else if (e->xbutton.button == Button1) {
66 curterm->sel.mode = 0;
67 k8t_getButtonInfo(curterm, e, NULL, &curterm->sel.ex, &curterm->sel.ey); // this sets sel.b and sel.e
69 if (curterm->sel.bx == curterm->sel.ex && curterm->sel.by == curterm->sel.ey) {
70 // single line, single char selection
71 MSTime now;
73 k8t_tmDirtyMark(curterm, curterm->sel.ey, 2);
74 curterm->sel.bx = -1;
75 now = mclock_ticks();
76 if (now-curterm->sel.tclick2 <= opt_tripleclick_timeout) {
77 /* triple click on the line */
78 curterm->sel.b.x = curterm->sel.bx = 0;
79 curterm->sel.e.x = curterm->sel.ex = curterm->col;
80 curterm->sel.b.y = curterm->sel.e.y = curterm->sel.ey;
81 } else if (now-curterm->sel.tclick1 <= opt_doubleclick_timeout) {
82 /* double click to select word */
83 K8TLine l = k8t_selGet(curterm, curterm->sel.ey);
85 if (l != NULL) {
86 //FIXME: write better word selection code
87 curterm->sel.bx = curterm->sel.ex;
88 if (K8T_ISGFX(l[curterm->sel.bx].attr)) {
89 while (curterm->sel.bx > 0 && K8T_ISGFX(l[curterm->sel.bx-1].attr)) --curterm->sel.bx;
90 curterm->sel.b.x = curterm->sel.bx;
91 while (curterm->sel.ex < curterm->col-1 && K8T_ISGFX(l[curterm->sel.ex+1].attr)) ++curterm->sel.ex;
92 } else {
93 while (curterm->sel.bx > 0 && !K8T_ISGFX(l[curterm->sel.bx-1].attr) && l[curterm->sel.bx-1].c[0] != ' ') --curterm->sel.bx;
94 curterm->sel.b.x = curterm->sel.bx;
95 while (curterm->sel.ex < curterm->col-1 && !K8T_ISGFX(l[curterm->sel.ex+1].attr) && l[curterm->sel.ex+1].c[0] != ' ') ++curterm->sel.ex;
97 curterm->sel.e.x = curterm->sel.ex;
98 curterm->sel.b.y = curterm->sel.e.y = curterm->sel.ey;
102 k8t_selCopy(curterm);
103 k8t_Draw(curterm, 1);
104 } else {
105 // multiline or multichar selection
106 k8t_selCopy(curterm);
109 curterm->sel.tclick2 = curterm->sel.tclick1;
110 curterm->sel.tclick1 = mclock_ticks();
111 //k8t_Draw(1);
115 static void xevtcbbmotion (XEvent *e) {
116 if (curterm == NULL) return;
118 switch (opt_tabposition) {
119 case 0: // bottom
120 if (e->xbutton.y >= xw.h-xw.tabheight) return;
121 break;
122 case 1: // top
123 if (e->xbutton.y < xw.tabheight) return;
124 break;
127 if (curterm->sel.mode) {
128 int oldey = curterm->sel.ey, oldex = curterm->sel.ex;
130 k8t_getButtonInfo(curterm, e, NULL, &curterm->sel.ex, &curterm->sel.ey); // this sets sel.b and sel.e
131 if (oldey != curterm->sel.ey || oldex != curterm->sel.ex) {
132 int starty = K8T_MIN(oldey, curterm->sel.ey);
133 int endy = K8T_MAX(oldey, curterm->sel.ey);
135 k8t_tmDirty(curterm, starty, endy);
136 k8t_Draw(curterm, 1);
138 return;
140 //if (K8T_ISSET(curterm, K8T_MODE_MOUSE) && e->xbutton.button != 0) k8t_mouseReport(e);