From: Chris Allegretta Date: Fri, 13 Nov 2009 20:38:32 +0000 (+0000) Subject: * nano.c (do_mouse): Fix mouse support not working with soft wrapping. Fixes X-Git-Tag: v2.1.99pre1~3 X-Git-Url: https://git.wh0rd.org/?a=commitdiff_plain;h=f55ada727e58c649232562dc921d8cb1a91842fb;p=nano.git * 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 --- diff --git a/ChangeLog b/ChangeLog index 125a9a62..09cd2cf2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,8 @@ 2009-11-13 Chris Allegretta * 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 * 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 index 880c7360..416d9e32 100644 --- 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