From: Michael D. Lowis Date: Thu, 17 Nov 2016 00:45:53 +0000 (-0500) Subject: tweaked mouse selection so only one region's selection is extended X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=8addcb46e90f17a8d5017f3dd0b6e3ab8ba69b81;p=projs%2Ftide.git tweaked mouse selection so only one region's selection is extended --- diff --git a/inc/edit.h b/inc/edit.h index bd4b3da..0e15682 100644 --- a/inc/edit.h +++ b/inc/edit.h @@ -210,6 +210,7 @@ typedef struct { uint32_t time; uint8_t count; bool pressed; + int region; } ButtonState; typedef struct { diff --git a/libedit/view.c b/libedit/view.c index 29917aa..b22d809 100644 --- a/libedit/view.c +++ b/libedit/view.c @@ -126,7 +126,7 @@ static void sync_view(View* view, size_t csr) { static size_t getoffset(View* view, size_t row, size_t col) { Row* scrrow = view_getrow(view, row); - assert(scrrow); + if (!scrrow) return SIZE_MAX; size_t pos = scrrow->off; if (col > scrrow->len) { pos = (scrrow->off + scrrow->rlen - 1); @@ -217,16 +217,17 @@ void view_byline(View* view, int move) { void view_setcursor(View* view, size_t row, size_t col) { size_t off = getoffset(view, row, col); - if (!in_selection(view->selection, off)) { - view->selection.beg = view->selection.end = off; - view->selection.col = buf_getcol(&(view->buffer), view->selection.end); - sync_view(view, view->selection.end); - } + view->selection.beg = view->selection.end = off; + view->selection.col = buf_getcol(&(view->buffer), view->selection.end); + sync_view(view, view->selection.end); } void view_selext(View* view, size_t row, size_t col) { - view->selection.end = getoffset(view, row, col); - sync_view(view, view->selection.end); + size_t off = getoffset(view, row, col); + if (off != SIZE_MAX) { + view->selection.end = off; + sync_view(view, view->selection.end); + } } void view_insert(View* view, Rune rune) { diff --git a/xedit b/xedit index e298f02..1fcba5c 100755 Binary files a/xedit and b/xedit differ diff --git a/xedit.c b/xedit.c index da0f2ea..9a43390 100644 --- a/xedit.c +++ b/xedit.c @@ -145,6 +145,8 @@ static void mouse_handler(MouseAct act, MouseBtn btn, int x, int y) { view_setcursor(getview(id), row, col); MouseBtns[MOUSE_BTN_LEFT].pressed = false; MouseBtns[MOUSE_BTN_LEFT].count = 0; + } else if (MouseBtns[MOUSE_BTN_LEFT].region < id) { + } else if (MouseBtns[MOUSE_BTN_LEFT].region > id) { } else { view_selext(getview(id), row, col); } @@ -155,6 +157,7 @@ static void mouse_handler(MouseAct act, MouseBtn btn, int x, int y) { uint32_t now = getmillis(); uint32_t elapsed = now - MouseBtns[btn].time; MouseBtns[btn].time = now; + MouseBtns[btn].region = id; if (elapsed <= 250) MouseBtns[btn].count++; else