diff options
author | Michael Drake <tlsa@netsurf-browser.org> | 2013-01-15 21:05:54 +0000 |
---|---|---|
committer | Michael Drake <tlsa@netsurf-browser.org> | 2013-01-15 21:05:54 +0000 |
commit | d25289695360d16c25e39a022e949c6f56245adc (patch) | |
tree | a03be5395ddf6121630303d311bbd76f8cd9f216 /desktop/textarea.c | |
parent | 7a0b3475634642194b256ef3c4a294c72e312a18 (diff) | |
download | netsurf-d25289695360d16c25e39a022e949c6f56245adc.tar.gz netsurf-d25289695360d16c25e39a022e949c6f56245adc.tar.bz2 |
Ensure we know for sure if scrollbar widget will want to scroll us. Avoid double xy to offset conversion.
Diffstat (limited to 'desktop/textarea.c')
-rw-r--r-- | desktop/textarea.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/desktop/textarea.c b/desktop/textarea.c index 00c2ca4bc..d3f031fe1 100644 --- a/desktop/textarea.c +++ b/desktop/textarea.c @@ -264,8 +264,11 @@ static bool textarea_scroll_visible(struct textarea *ta) /* If scrolled, set new pos. */ if (xs != ta->scroll_x && ta->bar_x != NULL) { scrollbar_set(ta->bar_x, xs, false); - ta->scroll_x = scrollbar_get_offset(ta->bar_x); - scrolled = true; + xs = scrollbar_get_offset(ta->bar_x); + if (xs != ta->scroll_x) { + ta->scroll_x = xs; + scrolled = true; + } } else if (ta->flags & TEXTAREA_MULTILINE && ta->bar_x == NULL && ta->scroll_x != 0) { @@ -291,8 +294,11 @@ static bool textarea_scroll_visible(struct textarea *ta) /* If scrolled, set new pos. */ if (ys != ta->scroll_y && ta->bar_y != NULL) { scrollbar_set(ta->bar_y, ys, false); - ta->scroll_y = scrollbar_get_offset(ta->bar_y); - scrolled = true; + ys = scrollbar_get_offset(ta->bar_y); + if (ys != ta->scroll_y) { + ta->scroll_y = ys; + scrolled = true; + } } else if (ta->bar_y == NULL && ta->scroll_y != 0) { ta->scroll_y = 0; @@ -1673,10 +1679,10 @@ bool textarea_mouse_action(struct textarea *ta, browser_mouse_state mouse, /* mouse button pressed above the text area, move caret */ if (mouse & BROWSER_MOUSE_PRESS_1) { if (!(ta->flags & TEXTAREA_READONLY)) { - textarea_set_caret_xy(ta, x, y); - textarea_get_xy_offset(ta, x, y, &b_off, &c_off); ta->drag_start_char = c_off; + + textarea_set_caret(ta, c_off); } if (ta->sel_start != -1) { /* remove selection */ |