}
static void
-gtk_xtext_selection_render (GtkXText *xtext,
- textentry *start_ent, int start_offset,
- textentry *end_ent, int end_offset)
+gtk_xtext_selection_render (GtkXText *xtext, textentry *start_ent, textentry *end_ent)
{
textentry *ent;
+ int start_offset = start_ent->mark_start;
+ int end_offset = end_ent->mark_end;
int start, end;
xtext->skip_border_fills = TRUE;
int high_x;
int high_y;
int tmp;
+ int oob;
+ int marking_up;
if (xtext->select_start_y > xtext->select_end_y)
{
low_x = xtext->select_end_x;
low_y = xtext->select_end_y;
+ marking_up = TRUE;
high_x = xtext->select_start_x;
high_y = xtext->select_start_y;
} else
low_y = xtext->select_start_y;
high_x = xtext->select_end_x;
high_y = xtext->select_end_y;
+ marking_up = FALSE;
}
- ent_start = gtk_xtext_find_char (xtext, low_x, low_y, &offset_start, &tmp);
+ ent_start = gtk_xtext_find_char (xtext, low_x, low_y, &offset_start, &oob);
if (!ent_start)
{
if (xtext->adj->value != xtext->buffer->old_value)
gtk_xtext_render_page (xtext);
return;
}
- else if (tmp) {
- offset_start = xtext->buffer->last_offset_start;
+ else if (oob)
+ {
+ offset_start = marking_up == TRUE? 0: xtext->buffer->last_offset_start;
}
- ent_end = gtk_xtext_find_char (xtext, high_x, high_y, &offset_end, &tmp);
+ ent_end = gtk_xtext_find_char (xtext, high_x, high_y, &offset_end, &oob);
if (!ent_end)
{
ent_end = xtext->buffer->text_last;
}
offset_end = ent_end->str_len;
}
- else if (tmp)
+ else if (oob)
{
- offset_end = xtext->buffer->last_offset_end;
+ offset_end = marking_up == FALSE? ent_end->str_len: xtext->buffer->last_offset_end;
}
/* marking less than a complete line? */
}
if (render)
- gtk_xtext_selection_render (xtext, ent_start, offset_start, ent_end, offset_end);
+ gtk_xtext_selection_render (xtext, ent_start, ent_end);
}
static int
gtk_xtext_selection_clear (xtext->buffer);
ent->mark_start = offset;
ent->mark_end = offset + len;
- gtk_xtext_selection_render (xtext, ent, offset, ent, offset + len);
+ gtk_xtext_selection_render (xtext, ent, ent);
xtext->word_or_line_select = TRUE;
if (prefs.hex_text_autocopy_text)
{
gtk_xtext_selection_clear (xtext->buffer);
ent->mark_start = 0;
ent->mark_end = ent->str_len;
- gtk_xtext_selection_render (xtext, ent, 0, ent, ent->str_len);
+ gtk_xtext_selection_render (xtext, ent, ent);
xtext->word_or_line_select = TRUE;
if (prefs.hex_text_autocopy_text)
{