summaryrefslogtreecommitdiff
path: root/gtk/gtktextview.c
diff options
context:
space:
mode:
authorPaolo Borelli <pborelli@katamail.com>2008-08-12 17:21:13 +0000
committerPaolo Borelli <pborelli@src.gnome.org>2008-08-12 17:21:13 +0000
commit05dba4badb5a928b485674ee0941fdc102bf5136 (patch)
tree3ca2b53c1d12caa95cef18d3a1759040b55097db /gtk/gtktextview.c
parentf28b71b34202962a2e1d64632b4f1ccc24efc78f (diff)
downloadgtk+-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.c61
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: