diff --git a/ChangeLog b/ChangeLog index 694d0d53af..6178bf71ef 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,8 +1,12 @@ +2001-09-25 Havoc Pennington + + * gtk/gtktextview.c: fix for #50317 + 2001-09-25 Havoc Pennington * gtk/gtktextview.c (gtk_text_view_key_press_event): use gtk_text_iter_can_insert - + * gtk/gtktextbuffer.c: use gtk_text_iter_can_insert * gtk/gtktextiter.c (find_line_log_attrs): fixes, #57611, #57613 diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 694d0d53af..6178bf71ef 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,8 +1,12 @@ +2001-09-25 Havoc Pennington + + * gtk/gtktextview.c: fix for #50317 + 2001-09-25 Havoc Pennington * gtk/gtktextview.c (gtk_text_view_key_press_event): use gtk_text_iter_can_insert - + * gtk/gtktextbuffer.c: use gtk_text_iter_can_insert * gtk/gtktextiter.c (find_line_log_attrs): fixes, #57611, #57613 diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 694d0d53af..6178bf71ef 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,8 +1,12 @@ +2001-09-25 Havoc Pennington + + * gtk/gtktextview.c: fix for #50317 + 2001-09-25 Havoc Pennington * gtk/gtktextview.c (gtk_text_view_key_press_event): use gtk_text_iter_can_insert - + * gtk/gtktextbuffer.c: use gtk_text_iter_can_insert * gtk/gtktextiter.c (find_line_log_attrs): fixes, #57611, #57613 diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 694d0d53af..6178bf71ef 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,8 +1,12 @@ +2001-09-25 Havoc Pennington + + * gtk/gtktextview.c: fix for #50317 + 2001-09-25 Havoc Pennington * gtk/gtktextview.c (gtk_text_view_key_press_event): use gtk_text_iter_can_insert - + * gtk/gtktextbuffer.c: use gtk_text_iter_can_insert * gtk/gtktextiter.c (find_line_log_attrs): fixes, #57611, #57613 diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 694d0d53af..6178bf71ef 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,8 +1,12 @@ +2001-09-25 Havoc Pennington + + * gtk/gtktextview.c: fix for #50317 + 2001-09-25 Havoc Pennington * gtk/gtktextview.c (gtk_text_view_key_press_event): use gtk_text_iter_can_insert - + * gtk/gtktextbuffer.c: use gtk_text_iter_can_insert * gtk/gtktextiter.c (find_line_log_attrs): fixes, #57611, #57613 diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 694d0d53af..6178bf71ef 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,8 +1,12 @@ +2001-09-25 Havoc Pennington + + * gtk/gtktextview.c: fix for #50317 + 2001-09-25 Havoc Pennington * gtk/gtktextview.c (gtk_text_view_key_press_event): use gtk_text_iter_can_insert - + * gtk/gtktextbuffer.c: use gtk_text_iter_can_insert * gtk/gtktextiter.c (find_line_log_attrs): fixes, #57611, #57613 diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 694d0d53af..6178bf71ef 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,8 +1,12 @@ +2001-09-25 Havoc Pennington + + * gtk/gtktextview.c: fix for #50317 + 2001-09-25 Havoc Pennington * gtk/gtktextview.c (gtk_text_view_key_press_event): use gtk_text_iter_can_insert - + * gtk/gtktextbuffer.c: use gtk_text_iter_can_insert * gtk/gtktextiter.c (find_line_log_attrs): fixes, #57611, #57613 diff --git a/gtk/gtktextiter.c b/gtk/gtktextiter.c index 3e24beb385..a3245437c9 100644 --- a/gtk/gtktextiter.c +++ b/gtk/gtktextiter.c @@ -2003,6 +2003,8 @@ _gtk_text_iter_forward_indexable_segment (GtkTextIter *iter) { /* End of buffer */ + g_assert (!_gtk_text_line_is_last (real->line, real->tree)); + g_assert (_gtk_text_line_contains_end_iter (real->line, real->tree)); g_assert (gtk_text_iter_is_end (iter)); check_invariants (iter); diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c index 75df338719..ed38d1c9c7 100644 --- a/gtk/gtktextview.c +++ b/gtk/gtktextview.c @@ -980,6 +980,8 @@ gtk_text_view_init (GtkTextView *text_view) text_view->drag_start_x = -1; text_view->drag_start_y = -1; + + text_view->pending_place_cursor_button = 0; } /** @@ -3346,6 +3348,7 @@ gtk_text_view_button_press_event (GtkWidget *widget, GdkEventButton *event) { text_view->drag_start_x = event->x; text_view->drag_start_y = event->y; + text_view->pending_place_cursor_button = event->button; } else { @@ -3465,12 +3468,13 @@ gtk_text_view_button_release_event (GtkWidget *widget, GdkEventButton *event) text_view->just_selected_element = FALSE; return FALSE; } - else + else if (text_view->pending_place_cursor_button == event->button) { GtkTextIter iter; - /* Unselect everything; probably we were dragging, or clicked - * without dragging to remove selection. + /* Unselect everything; we clicked inside selection, but + * didn't move by the drag threshold, so just clear selection + * and place cursor. */ gtk_text_layout_get_iter_at_pixel (text_view->layout, &iter, @@ -3478,7 +3482,9 @@ gtk_text_view_button_release_event (GtkWidget *widget, GdkEventButton *event) event->y + text_view->yoffset); gtk_text_buffer_place_cursor (get_buffer (text_view), &iter); - + + text_view->pending_place_cursor_button = 0; + return FALSE; } } @@ -4680,7 +4686,8 @@ gtk_text_view_start_selection_dnd (GtkTextView *text_view, text_view->drag_start_x = -1; text_view->drag_start_y = -1; - + text_view->pending_place_cursor_button = 0; + target_list = gtk_target_list_new (target_table, G_N_ELEMENTS (target_table)); diff --git a/gtk/gtktextview.h b/gtk/gtktextview.h index b4c775daa9..430c53a9e4 100644 --- a/gtk/gtktextview.h +++ b/gtk/gtktextview.h @@ -143,6 +143,8 @@ struct _GtkTextView GtkTextPendingScroll *pending_scroll; GdkGC *cursor_gc; + + gint pending_place_cursor_button; }; struct _GtkTextViewClass