xtext: Unselect old selection on button press

Fixes #943
Closes #1293
This commit is contained in:
RichardHitt 2015-02-11 09:56:08 -08:00 committed by TingPing
parent bbb81af550
commit 8ca96d7ea3

View File

@ -1878,6 +1878,9 @@ gtk_xtext_unselect (GtkXText *xtext)
{ {
xtext_buffer *buf = xtext->buffer; xtext_buffer *buf = xtext->buffer;
if (buf->last_ent_start == NULL)
return;
xtext->skip_border_fills = TRUE; xtext->skip_border_fills = TRUE;
xtext->skip_stamp = TRUE; xtext->skip_stamp = TRUE;
@ -1898,6 +1901,7 @@ gtk_xtext_unselect (GtkXText *xtext)
xtext->skip_border_fills = FALSE; xtext->skip_border_fills = FALSE;
xtext->skip_stamp = FALSE; xtext->skip_stamp = FALSE;
xtext->mark_stamp = FALSE;
xtext->buffer->last_ent_start = NULL; xtext->buffer->last_ent_start = NULL;
xtext->buffer->last_ent_end = NULL; xtext->buffer->last_ent_end = NULL;
@ -1959,11 +1963,8 @@ gtk_xtext_button_release (GtkWidget * widget, GdkEventButton * event)
} }
if (xtext->select_start_x == event->x && if (xtext->select_start_x == event->x &&
xtext->select_start_y == event->y && xtext->select_start_y == event->y)
xtext->buffer->last_ent_start)
{ {
gtk_xtext_unselect (xtext);
xtext->mark_stamp = FALSE;
return FALSE; return FALSE;
} }
@ -2014,7 +2015,7 @@ gtk_xtext_button_press (GtkWidget * widget, GdkEventButton * event)
{ {
if (len == 0) if (len == 0)
return FALSE; return FALSE;
gtk_xtext_selection_clear (xtext->buffer); gtk_xtext_unselect(xtext);
ent->mark_start = offset; ent->mark_start = offset;
ent->mark_end = offset + len; ent->mark_end = offset + len;
gtk_xtext_selection_render (xtext, ent, ent); gtk_xtext_selection_render (xtext, ent, ent);
@ -2029,7 +2030,7 @@ gtk_xtext_button_press (GtkWidget * widget, GdkEventButton * event)
gtk_xtext_check_mark_stamp (xtext, mask); gtk_xtext_check_mark_stamp (xtext, mask);
if (gtk_xtext_get_word (xtext, x, y, &ent, 0, 0, 0)) if (gtk_xtext_get_word (xtext, x, y, &ent, 0, 0, 0))
{ {
gtk_xtext_selection_clear (xtext->buffer); gtk_xtext_unselect (xtext);
ent->mark_start = 0; ent->mark_start = 0;
ent->mark_end = ent->str_len; ent->mark_end = ent->str_len;
gtk_xtext_selection_render (xtext, ent, ent); gtk_xtext_selection_render (xtext, ent, ent);
@ -2052,6 +2053,7 @@ gtk_xtext_button_press (GtkWidget * widget, GdkEventButton * event)
} }
} }
gtk_xtext_unselect (xtext);
xtext->button_down = TRUE; xtext->button_down = TRUE;
xtext->select_start_x = x; xtext->select_start_x = x;
xtext->select_start_y = y; xtext->select_start_y = y;
@ -2065,10 +2067,7 @@ gtk_xtext_button_press (GtkWidget * widget, GdkEventButton * event)
static gboolean static gboolean
gtk_xtext_selection_kill (GtkXText *xtext, GdkEventSelection *event) gtk_xtext_selection_kill (GtkXText *xtext, GdkEventSelection *event)
{ {
#ifndef WIN32
if (xtext->buffer->last_ent_start)
gtk_xtext_unselect (xtext); gtk_xtext_unselect (xtext);
#endif
return TRUE; return TRUE;
} }