]> git.mdlowis.com Git - projs/tide.git/commitdiff
tweaked mouse selection so only one region's selection is extended
authorMichael D. Lowis <mike@mdlowis.com>
Thu, 17 Nov 2016 00:45:53 +0000 (19:45 -0500)
committerMichael D. Lowis <mike@mdlowis.com>
Thu, 17 Nov 2016 00:45:53 +0000 (19:45 -0500)
inc/edit.h
libedit/view.c
xedit
xedit.c

index bd4b3da4ba02df99703c8f104040cc23cf170b02..0e15682496e750898f259946c6f85dfcf465d0eb 100644 (file)
@@ -210,6 +210,7 @@ typedef struct {
     uint32_t time;
     uint8_t count;
     bool pressed;
+    int region;
 } ButtonState;
 
 typedef struct {
index 29917aa78276b0637d218dae2818349a1decfd8a..b22d8091583d18d5684c4a74fa16bd83b84db470 100644 (file)
@@ -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 e298f02102728ffb2405147563b43142811c32fe..1fcba5c325e9816058def21d62ad6e791867e3a1 100755 (executable)
Binary files a/xedit and b/xedit differ
diff --git a/xedit.c b/xedit.c
index da0f2ea6904ec452c325b707af1674ccb8d68427..9a4339020272b21d11dded75610d91af4b9fe41c 100644 (file)
--- 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