From 05dba4badb5a928b485674ee0941fdc102bf5136 Mon Sep 17 00:00:00 2001 From: Paolo Borelli Date: Tue, 12 Aug 2008 17:21:13 +0000 Subject: [PATCH] Bug 526234 - make shift+ctrl+del delete till the end of line 2008-08-12 Paolo Borelli Bug 526234 - make shift+ctrl+del delete till the end of line * gtk/gtktextview.c: add shift+ctrl+del and shift+ctrl+backspace keyboard shortcuts to delete to the end/start of the current line. svn path=/trunk/; revision=21103 --- ChangeLog | 7 ++++++ gtk/gtktextview.c | 61 +++++++++++++++++++++++++++++++++++------------ 2 files changed, 53 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8d87436342..8514302f61 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-08-12 Paolo Borelli + + Bug 526234 - make shift+ctrl+del delete till the end of line + + * gtk/gtktextview.c: add shift+ctrl+del and shift+ctrl+backspace + keyboard shortcuts to delete to the end/start of the current line. + 2008-08-12 Michael Natterer * gtk/gtklinkbutton.c (set_link_color): bail out if there is no diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c index 0ac3c2e46f..9af93c89de 100644 --- a/gtk/gtktextview.c +++ b/gtk/gtktextview.c @@ -1130,6 +1130,21 @@ gtk_text_view_class_init (GtkTextViewClass *klass) G_TYPE_ENUM, GTK_DELETE_WORD_ENDS, G_TYPE_INT, -1); + gtk_binding_entry_add_signal (binding_set, GDK_Delete, GDK_SHIFT_MASK | GDK_CONTROL_MASK, + "delete_from_cursor", 2, + G_TYPE_ENUM, GTK_DELETE_PARAGRAPH_ENDS, + G_TYPE_INT, 1); + + gtk_binding_entry_add_signal (binding_set, GDK_KP_Delete, GDK_SHIFT_MASK | GDK_CONTROL_MASK, + "delete_from_cursor", 2, + G_TYPE_ENUM, GTK_DELETE_PARAGRAPH_ENDS, + G_TYPE_INT, 1); + + gtk_binding_entry_add_signal (binding_set, GDK_BackSpace, GDK_SHIFT_MASK | GDK_CONTROL_MASK, + "delete_from_cursor", 2, + G_TYPE_ENUM, GTK_DELETE_PARAGRAPH_ENDS, + G_TYPE_INT, -1); + /* Cut/copy/paste */ gtk_binding_entry_add_signal (binding_set, GDK_x, GDK_CONTROL_MASK, @@ -5480,26 +5495,42 @@ gtk_text_view_delete_from_cursor (GtkTextView *text_view, break; case GTK_DELETE_PARAGRAPH_ENDS: - /* If we're already at a newline, we need to - * simply delete that newline, instead of - * moving to the next one. - */ - if (gtk_text_iter_ends_line (&end)) + if (count > 0) { - gtk_text_iter_forward_line (&end); - --count; - } + /* If we're already at a newline, we need to + * simply delete that newline, instead of + * moving to the next one. + */ + if (gtk_text_iter_ends_line (&end)) + { + gtk_text_iter_forward_line (&end); + --count; + } - while (count > 0) + while (count > 0) + { + if (!gtk_text_iter_forward_to_line_end (&end)) + break; + + --count; + } + } + else if (count < 0) { - if (!gtk_text_iter_forward_to_line_end (&end)) - break; + if (gtk_text_iter_starts_line (&start)) + { + gtk_text_iter_backward_line (&start); + if (!gtk_text_iter_ends_line (&end)) + gtk_text_iter_forward_to_line_end (&start); + } + else + { + gtk_text_iter_set_line_offset (&start, 0); + } + ++count; - --count; + gtk_text_iter_backward_lines (&start, -count); } - - /* FIXME figure out what a negative count means - and support that */ break; case GTK_DELETE_PARAGRAPHS: