Author: phlamethrower
Date: Sun Sep 10 16:08:30 2006
New Revision: 2942
URL:
http://svn.semichrome.net?rev=2942&view=rev
Log:
Fixed spurious newline after pasting into textarea; possibly fixed some selection
processing/rendering bugs
Modified:
trunk/netsurf/desktop/selection.c
trunk/netsurf/desktop/textinput.c
Modified: trunk/netsurf/desktop/selection.c
URL:
http://svn.semichrome.net/trunk/netsurf/desktop/selection.c?rev=2942&...
==============================================================================
--- trunk/netsurf/desktop/selection.c (original)
+++ trunk/netsurf/desktop/selection.c Sun Sep 10 16:08:30 2006
@@ -43,7 +43,8 @@
/** check whether the given text box is in the same number space as the
current selection; number spaces are identified by their uppermost nybble */
-#define SAME_SPACE(s, offset) (((s)->max_idx & 0xF0000000U) == ((offset) &
0xF0000000U))
+#define NUMBER_SPACE(x) ((x) & 0xF0000000U)
+#define SAME_SPACE(s, offset) (NUMBER_SPACE((s)->max_idx) == NUMBER_SPACE(offset))
struct rdw_info {
@@ -69,7 +70,8 @@
static bool selected_part(struct box *box, unsigned start_idx, unsigned end_idx,
unsigned *start_offset, unsigned *end_offset);
static bool traverse_tree(struct box *box, unsigned start_idx, unsigned end_idx,
- seln_traverse_handler handler, void *handle);
+ unsigned int num_space, seln_traverse_handler handler,
+ void *handle);
static struct box *get_box(struct box *b, unsigned offset, int *pidx);
@@ -409,13 +411,15 @@
* \param box box subtree
* \param start_idx start of range within textual representation (bytes)
* \param end_idx end of range
+ * \param num_space number space of the selection
* \param handler handler function to call
* \param handle handle to pass
* \return false iff traversal abandoned part-way through
*/
bool traverse_tree(struct box *box, unsigned start_idx, unsigned end_idx,
- seln_traverse_handler handler, void *handle)
+ unsigned int num_space, seln_traverse_handler handler,
+ void *handle)
{
struct box *child;
size_t box_length;
@@ -429,7 +433,7 @@
child = box->children;
box_length = box->length + box->space; /* include trailing space */
- if (IS_TEXT(box)) {
+ if (IS_TEXT(box) && (num_space == NUMBER_SPACE(box->byte_offset))) {
unsigned start_offset;
unsigned end_offset;
@@ -465,7 +469,7 @@
/* read before calling the handler in case it modifies the tree */
struct box *next = child->next;
- if (!traverse_tree(child, start_idx, end_idx, handler, handle))
+ if (!traverse_tree(child, start_idx, end_idx, num_space, handler, handle))
return false;
child = next;
@@ -493,7 +497,7 @@
return true; /* easy case, nothing to do */
if (s->root)
- return traverse_tree(s->root, s->start_idx, s->end_idx, handler, handle);
+ return traverse_tree(s->root, s->start_idx, s->end_idx,
NUMBER_SPACE(s->max_idx), handler, handle);
c = s->bw->current_content;
if (!c) return true;
@@ -569,7 +573,7 @@
rdw.inited = false;
if (s->root) {
- if (!traverse_tree(s->root, start_idx, end_idx, redraw_handler, &rdw))
+ if (!traverse_tree(s->root, start_idx, end_idx, NUMBER_SPACE(s->max_idx),
redraw_handler, &rdw))
return;
}
else {
Modified: trunk/netsurf/desktop/textinput.c
URL:
http://svn.semichrome.net/trunk/netsurf/desktop/textinput.c?rev=2942&...
==============================================================================
--- trunk/netsurf/desktop/textinput.c (original)
+++ trunk/netsurf/desktop/textinput.c Sun Sep 10 16:08:30 2006
@@ -1199,6 +1199,8 @@
return false;
char_offset += utf8_len;
+ if (p == ep)
+ break;
new_text = textarea_insert_break(bw, text_box, char_offset);
if (!new_text) {