summaryrefslogtreecommitdiffstats
path: root/src/tui.c
diff options
context:
space:
mode:
authorAndrés <andmarti@gmail.com>2021-03-14 15:26:28 -0300
committerAndrés <andmarti@gmail.com>2021-03-14 15:26:28 -0300
commit50ea88259e22270e9ff0c2f3e3b5b0c863fa276b (patch)
tree9421ca6e4a5220b76c795edc3bd4d2f5b5e27a7c /src/tui.c
parent326105427d4b48ed8141293299b661793304680b (diff)
Added mouse support for virtual terminals. Define macro MOUSE un Makefile for its use
Diffstat (limited to 'src/tui.c')
-rw-r--r--src/tui.c61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/tui.c b/src/tui.c
index 6414bcb..758a5c3 100644
--- a/src/tui.c
+++ b/src/tui.c
@@ -140,6 +140,10 @@ void ui_start_screen() {
noecho();
curs_set(0);
+ // Mouse support
+ mmask_t old;
+ mousemask (ALL_MOUSE_EVENTS, &old);
+
#ifndef NETBSD
if ((char *) getenv ("ESCDELAY") == NULL) set_escdelay(ESC_DELAY);
#endif
@@ -1474,3 +1478,60 @@ void ui_mv_bottom_bar() {
mvwin(input_win, atoi(get_conf_value("input_bar_bottom")) ? LINES-RESROW : 0, 0);
return;
}
+
+#ifdef MOUSE
+void ui_handle_mouse(MEVENT event) {
+ int i, r = 0, c = 0;
+ if ( event.x < RESCOL || ( atoi(get_conf_value("input_bar_bottom")) && (event.y == 0 || event.y >= LINES - RESROW)) ||
+ ( !atoi(get_conf_value("input_bar_bottom")) && (event.y <= RESROW))) return;
+
+ if (event.bstate & BUTTON4_PRESSED || // scroll up
+ event.bstate & BUTTON5_PRESSED) { // scroll down
+ int n = LINES - RESROW - 1;
+ if (atoi(get_conf_value("half_page_scroll"))) n = n / 2;
+ lastcol = curcol;
+ lastrow = currow;
+ currow = event.bstate & BUTTON5_PRESSED ? forw_row(n)->row : back_row(n)->row;
+ unselect_ranges();
+ if (event.bstate & BUTTON5_PRESSED) scroll_down(n);
+ else scroll_up(n);
+ unselect_ranges();
+ ui_update(TRUE);
+ return;
+ }
+
+ // not single click
+ if (! (event.bstate & BUTTON1_CLICKED)) return;
+
+ c = event.x - RESCOL;
+ r = event.y - RESROW + (atoi(get_conf_value("input_bar_bottom")) ? 1 : - 1);
+
+
+ int mxcol = offscr_sc_cols + calc_offscr_sc_cols() - 1;
+ int col = 0;
+ int freeze = freeze_ranges && (freeze_ranges->type == 'c' || freeze_ranges->type == 'a') ? 1 : 0;
+
+ for (i = 0; i <= mxcol; i++) {
+ if (i >= maxcols) {
+ sc_error("i >= maxcols in ui_show_sc_col_headings. please check calc_offscr_sc_cols.");
+ break;
+ }
+ //if (i < offscr_sc_cols && !(freeze && i >= freeze_ranges->tl->col && i <= freeze_ranges->br->col)) continue;
+
+ if (col_hidden[i]) continue;
+
+ // skip center_hidden_cols
+ if (freeze && ((
+ i > freeze_ranges->br->col && i <= freeze_ranges->br->col + center_hidden_cols) || (
+ i < freeze_ranges->tl->col && i >= freeze_ranges->tl->col - center_hidden_cols))) continue;
+
+
+// sc_debug("i:%d off%d mxcol:%d col:%d c:%d", i, offscr_sc_cols, mxcol, col, c);
+ col += fwidth[i];
+ if (col > c + 1) break;
+ }
+ currow = r;
+ curcol = i;
+ ui_update(TRUE);
+}
+#endif