diff options
author | Paolo Borelli <pborelli@katamail.com> | 2008-08-12 17:21:13 +0000 |
---|---|---|
committer | Paolo Borelli <pborelli@src.gnome.org> | 2008-08-12 17:21:13 +0000 |
commit | 05dba4badb5a928b485674ee0941fdc102bf5136 (patch) | |
tree | 3ca2b53c1d12caa95cef18d3a1759040b55097db /gtk/gtktextview.c | |
parent | f28b71b34202962a2e1d64632b4f1ccc24efc78f (diff) | |
download | gtk+-05dba4badb5a928b485674ee0941fdc102bf5136.tar.gz |
Bug 526234 - make shift+ctrl+del delete till the end of line
2008-08-12 Paolo Borelli <pborelli@katamail.com>
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
Diffstat (limited to 'gtk/gtktextview.c')
-rw-r--r-- | gtk/gtktextview.c | 61 |
1 files changed, 46 insertions, 15 deletions
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) - { - if (!gtk_text_iter_forward_to_line_end (&end)) - break; + while (count > 0) + { + if (!gtk_text_iter_forward_to_line_end (&end)) + break; - --count; + --count; + } } + else if (count < 0) + { + 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; - /* FIXME figure out what a negative count means - and support that */ + gtk_text_iter_backward_lines (&start, -count); + } break; case GTK_DELETE_PARAGRAPHS: |