commit f55ada727e58c649232562dc921d8cb1a91842fb
parent 99c8d40db1f519cb2887089c4ef3814b150d97a0
Author: Chris Allegretta <chrisa@asty.org>
Date: Fri, 13 Nov 2009 20:38:32 +0000
* nano.c (do_mouse): Fix mouse support not working with soft wrapping. Fixes
Savannah bug 27549 reported by Hannes Schueller.
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@4422 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
Diffstat:
2 files changed, 48 insertions(+), 10 deletions(-)
diff --git a/ChangeLog b/ChangeLog
@@ -1,6 +1,8 @@
2009-11-13 Chris Allegretta <chrisa@asty.org>
* winio.c: Add new static maxsize to be able to easier calculation with
softwrap.
+ * nano.c (do_mouse): Fix mouse support not working with soft wrapping. Fixes
+ Savannah bug 27549 reported by Hannes Schueller.
2009-11-11 Chris Allegretta <chrisa@asty.org>
* winio.c: Large tweaking of cursor and text display based on COLS not COLS - 1,
diff --git a/src/nano.c b/src/nano.c
@@ -1667,17 +1667,53 @@ int do_mouse(void)
sameline = (mouse_y == openfile->current_y);
- /* Move to where the click occurred. */
- for (; openfile->current_y < mouse_y && openfile->current !=
- openfile->filebot; openfile->current_y++)
- openfile->current = openfile->current->next;
- for (; openfile->current_y > mouse_y && openfile->current !=
- openfile->fileage; openfile->current_y--)
- openfile->current = openfile->current->prev;
-
- openfile->current_x = actual_x(openfile->current->data,
+#ifdef DEBUG
+ fprintf(stderr, "mouse_y = %d, current_y = %d\n", mouse_y, openfile->current_y);
+#endif
+
+ if (ISSET(SOFTWRAP)) {
+ int i = 0;
+ for (openfile->current = openfile->edittop;
+ openfile->current->next && i < mouse_y;
+ openfile->current = openfile->current->next, i++) {
+ openfile->current_y = i;
+ i += strlenpt(openfile->current->data) / COLS;
+ }
+
+#ifdef DEBUG
+ fprintf(stderr, "do_mouse(): moving to current_y = %d, i %d\n", openfile->current_y, i);
+ fprintf(stderr, " openfile->current->data = \"%s\"\n", openfile->current->data);
+#endif
+
+ if (i > mouse_y) {
+ openfile->current = openfile->current->prev;
+ openfile->current_x = actual_x(openfile->current->data, mouse_x + (mouse_y - openfile->current_y) * COLS);
+#ifdef DEBUG
+ fprintf(stderr, "do_mouse(): i > mouse_y, mouse_x = %d, current_x to = %d\n", mouse_x, openfile->current_x);
+#endif
+ } else {
+ openfile->current_x = actual_x(openfile->current->data, mouse_x);
+#ifdef DEBUG
+ fprintf(stderr, "do_mouse(): i <= mouse_y, mouse_x = %d, setting current_x to = %d\n", mouse_x, openfile->current_x);
+#endif
+ }
+
+ openfile->placewewant = xplustabs();
+
+ } else {
+ /* Move to where the click occurred. */
+ for (; openfile->current_y < mouse_y && openfile->current !=
+ openfile->filebot; openfile->current_y++)
+ openfile->current = openfile->current->next;
+ for (; openfile->current_y > mouse_y && openfile->current !=
+ openfile->fileage; openfile->current_y--)
+ openfile->current = openfile->current->prev;
+
+ openfile->current_x = actual_x(openfile->current->data,
get_page_start(xplustabs()) + mouse_x);
- openfile->placewewant = xplustabs();
+
+ openfile->placewewant = xplustabs();
+ }
#ifndef NANO_TINY
/* Clicking where the cursor is toggles the mark, as does