From 48b46c8d08edbac5eab95a83bdb41171272c66b0 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Sun, 12 Aug 2018 03:24:26 +0200 Subject: [PATCH] textview: Port bindings to use shortcuts --- gtk/gtktextview.c | 319 ++++++++++++++++++++++++++-------------------- 1 file changed, 178 insertions(+), 141 deletions(-) diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c index 19d0b946d6..30e55352d4 100644 --- a/gtk/gtktextview.c +++ b/gtk/gtktextview.c @@ -30,7 +30,6 @@ #include #include "gtkadjustmentprivate.h" -#include "gtkbindings.h" #include "gtkcsscolorvalueprivate.h" #include "gtkdebug.h" #include "gtkdropcontrollermotion.h" @@ -779,7 +778,7 @@ gtk_text_view_drop_scroll_leave (GtkDropControllerMotion *motion, } static void -add_move_binding (GtkBindingSet *binding_set, +add_move_binding (GtkWidgetClass *widget_class, guint keyval, guint modmask, GtkMovementStep step, @@ -787,18 +786,16 @@ add_move_binding (GtkBindingSet *binding_set, { g_assert ((modmask & GDK_SHIFT_MASK) == 0); - gtk_binding_entry_add_signal (binding_set, keyval, modmask, - "move-cursor", 3, - G_TYPE_ENUM, step, - G_TYPE_INT, count, - G_TYPE_BOOLEAN, FALSE); + gtk_widget_class_add_binding_signal (widget_class, + keyval, modmask, + "move-cursor", + "(iib)", step, count, FALSE); /* Selection-extending version */ - gtk_binding_entry_add_signal (binding_set, keyval, modmask | GDK_SHIFT_MASK, - "move-cursor", 3, - G_TYPE_ENUM, step, - G_TYPE_INT, count, - G_TYPE_BOOLEAN, TRUE); + gtk_widget_class_add_binding_signal (widget_class, + keyval, modmask | GDK_SHIFT_MASK, + "move-cursor", + "(iib)", step, count, TRUE); } static void @@ -807,7 +804,6 @@ gtk_text_view_class_init (GtkTextViewClass *klass) GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass); - GtkBindingSet *binding_set; /* Default handlers and virtual methods */ @@ -1476,232 +1472,273 @@ gtk_text_view_class_init (GtkTextViewClass *klass) * Key bindings */ - binding_set = gtk_binding_set_by_class (klass); - /* Moving the insertion point */ - add_move_binding (binding_set, GDK_KEY_Right, 0, + add_move_binding (widget_class, GDK_KEY_Right, 0, GTK_MOVEMENT_VISUAL_POSITIONS, 1); - add_move_binding (binding_set, GDK_KEY_KP_Right, 0, + add_move_binding (widget_class, GDK_KEY_KP_Right, 0, GTK_MOVEMENT_VISUAL_POSITIONS, 1); - add_move_binding (binding_set, GDK_KEY_Left, 0, + add_move_binding (widget_class, GDK_KEY_Left, 0, GTK_MOVEMENT_VISUAL_POSITIONS, -1); - add_move_binding (binding_set, GDK_KEY_KP_Left, 0, + add_move_binding (widget_class, GDK_KEY_KP_Left, 0, GTK_MOVEMENT_VISUAL_POSITIONS, -1); - add_move_binding (binding_set, GDK_KEY_Right, GDK_CONTROL_MASK, + add_move_binding (widget_class, GDK_KEY_Right, GDK_CONTROL_MASK, GTK_MOVEMENT_WORDS, 1); - add_move_binding (binding_set, GDK_KEY_KP_Right, GDK_CONTROL_MASK, + add_move_binding (widget_class, GDK_KEY_KP_Right, GDK_CONTROL_MASK, GTK_MOVEMENT_WORDS, 1); - add_move_binding (binding_set, GDK_KEY_Left, GDK_CONTROL_MASK, + add_move_binding (widget_class, GDK_KEY_Left, GDK_CONTROL_MASK, GTK_MOVEMENT_WORDS, -1); - add_move_binding (binding_set, GDK_KEY_KP_Left, GDK_CONTROL_MASK, + add_move_binding (widget_class, GDK_KEY_KP_Left, GDK_CONTROL_MASK, GTK_MOVEMENT_WORDS, -1); - add_move_binding (binding_set, GDK_KEY_Up, 0, + add_move_binding (widget_class, GDK_KEY_Up, 0, GTK_MOVEMENT_DISPLAY_LINES, -1); - add_move_binding (binding_set, GDK_KEY_KP_Up, 0, + add_move_binding (widget_class, GDK_KEY_KP_Up, 0, GTK_MOVEMENT_DISPLAY_LINES, -1); - add_move_binding (binding_set, GDK_KEY_Down, 0, + add_move_binding (widget_class, GDK_KEY_Down, 0, GTK_MOVEMENT_DISPLAY_LINES, 1); - add_move_binding (binding_set, GDK_KEY_KP_Down, 0, + add_move_binding (widget_class, GDK_KEY_KP_Down, 0, GTK_MOVEMENT_DISPLAY_LINES, 1); - add_move_binding (binding_set, GDK_KEY_Up, GDK_CONTROL_MASK, + add_move_binding (widget_class, GDK_KEY_Up, GDK_CONTROL_MASK, GTK_MOVEMENT_PARAGRAPHS, -1); - add_move_binding (binding_set, GDK_KEY_KP_Up, GDK_CONTROL_MASK, + add_move_binding (widget_class, GDK_KEY_KP_Up, GDK_CONTROL_MASK, GTK_MOVEMENT_PARAGRAPHS, -1); - add_move_binding (binding_set, GDK_KEY_Down, GDK_CONTROL_MASK, + add_move_binding (widget_class, GDK_KEY_Down, GDK_CONTROL_MASK, GTK_MOVEMENT_PARAGRAPHS, 1); - add_move_binding (binding_set, GDK_KEY_KP_Down, GDK_CONTROL_MASK, + add_move_binding (widget_class, GDK_KEY_KP_Down, GDK_CONTROL_MASK, GTK_MOVEMENT_PARAGRAPHS, 1); - add_move_binding (binding_set, GDK_KEY_Home, 0, + add_move_binding (widget_class, GDK_KEY_Home, 0, GTK_MOVEMENT_DISPLAY_LINE_ENDS, -1); - add_move_binding (binding_set, GDK_KEY_KP_Home, 0, + add_move_binding (widget_class, GDK_KEY_KP_Home, 0, GTK_MOVEMENT_DISPLAY_LINE_ENDS, -1); - add_move_binding (binding_set, GDK_KEY_End, 0, + add_move_binding (widget_class, GDK_KEY_End, 0, GTK_MOVEMENT_DISPLAY_LINE_ENDS, 1); - add_move_binding (binding_set, GDK_KEY_KP_End, 0, + add_move_binding (widget_class, GDK_KEY_KP_End, 0, GTK_MOVEMENT_DISPLAY_LINE_ENDS, 1); - add_move_binding (binding_set, GDK_KEY_Home, GDK_CONTROL_MASK, + add_move_binding (widget_class, GDK_KEY_Home, GDK_CONTROL_MASK, GTK_MOVEMENT_BUFFER_ENDS, -1); - add_move_binding (binding_set, GDK_KEY_KP_Home, GDK_CONTROL_MASK, + add_move_binding (widget_class, GDK_KEY_KP_Home, GDK_CONTROL_MASK, GTK_MOVEMENT_BUFFER_ENDS, -1); - add_move_binding (binding_set, GDK_KEY_End, GDK_CONTROL_MASK, + add_move_binding (widget_class, GDK_KEY_End, GDK_CONTROL_MASK, GTK_MOVEMENT_BUFFER_ENDS, 1); - add_move_binding (binding_set, GDK_KEY_KP_End, GDK_CONTROL_MASK, + add_move_binding (widget_class, GDK_KEY_KP_End, GDK_CONTROL_MASK, GTK_MOVEMENT_BUFFER_ENDS, 1); - add_move_binding (binding_set, GDK_KEY_Page_Up, 0, + add_move_binding (widget_class, GDK_KEY_Page_Up, 0, GTK_MOVEMENT_PAGES, -1); - add_move_binding (binding_set, GDK_KEY_KP_Page_Up, 0, + add_move_binding (widget_class, GDK_KEY_KP_Page_Up, 0, GTK_MOVEMENT_PAGES, -1); - add_move_binding (binding_set, GDK_KEY_Page_Down, 0, + add_move_binding (widget_class, GDK_KEY_Page_Down, 0, GTK_MOVEMENT_PAGES, 1); - add_move_binding (binding_set, GDK_KEY_KP_Page_Down, 0, + add_move_binding (widget_class, GDK_KEY_KP_Page_Down, 0, GTK_MOVEMENT_PAGES, 1); - add_move_binding (binding_set, GDK_KEY_Page_Up, GDK_CONTROL_MASK, + add_move_binding (widget_class, GDK_KEY_Page_Up, GDK_CONTROL_MASK, GTK_MOVEMENT_HORIZONTAL_PAGES, -1); - add_move_binding (binding_set, GDK_KEY_KP_Page_Up, GDK_CONTROL_MASK, + add_move_binding (widget_class, GDK_KEY_KP_Page_Up, GDK_CONTROL_MASK, GTK_MOVEMENT_HORIZONTAL_PAGES, -1); - add_move_binding (binding_set, GDK_KEY_Page_Down, GDK_CONTROL_MASK, + add_move_binding (widget_class, GDK_KEY_Page_Down, GDK_CONTROL_MASK, GTK_MOVEMENT_HORIZONTAL_PAGES, 1); - add_move_binding (binding_set, GDK_KEY_KP_Page_Down, GDK_CONTROL_MASK, + add_move_binding (widget_class, GDK_KEY_KP_Page_Down, GDK_CONTROL_MASK, GTK_MOVEMENT_HORIZONTAL_PAGES, 1); /* Select all */ - gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_CONTROL_MASK, - "select-all", 1, - G_TYPE_BOOLEAN, TRUE); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_a, GDK_CONTROL_MASK, + "select-all", + "(b)", TRUE); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_slash, GDK_CONTROL_MASK, - "select-all", 1, - G_TYPE_BOOLEAN, TRUE); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_slash, GDK_CONTROL_MASK, + "select-all", + "(b)", TRUE); /* Unselect all */ - gtk_binding_entry_add_signal (binding_set, GDK_KEY_backslash, GDK_CONTROL_MASK, - "select-all", 1, - G_TYPE_BOOLEAN, FALSE); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_backslash, GDK_CONTROL_MASK, + "select-all", + "(b)", FALSE); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_a, GDK_SHIFT_MASK | GDK_CONTROL_MASK, - "select-all", 1, - G_TYPE_BOOLEAN, FALSE); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_a, GDK_SHIFT_MASK | GDK_CONTROL_MASK, + "select-all", + "(b)", FALSE); /* Deleting text */ - gtk_binding_entry_add_signal (binding_set, GDK_KEY_Delete, 0, - "delete-from-cursor", 2, - G_TYPE_ENUM, GTK_DELETE_CHARS, - G_TYPE_INT, 1); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_Delete, 0, + "delete-from-cursor", + "(ii)", GTK_DELETE_CHARS, 1); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Delete, 0, - "delete-from-cursor", 2, - G_TYPE_ENUM, GTK_DELETE_CHARS, - G_TYPE_INT, 1); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_KP_Delete, 0, + "delete-from-cursor", + "(ii)", GTK_DELETE_CHARS, 1); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_BackSpace, 0, - "backspace", 0); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_BackSpace, 0, + "backspace", + NULL); /* Make this do the same as Backspace, to help with mis-typing */ - gtk_binding_entry_add_signal (binding_set, GDK_KEY_BackSpace, GDK_SHIFT_MASK, - "backspace", 0); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_BackSpace, GDK_SHIFT_MASK, + "backspace", + NULL); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_Delete, GDK_CONTROL_MASK, - "delete-from-cursor", 2, - G_TYPE_ENUM, GTK_DELETE_WORD_ENDS, - G_TYPE_INT, 1); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_Delete, GDK_CONTROL_MASK, + "delete-from-cursor", + "(ii)", GTK_DELETE_WORD_ENDS, 1); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Delete, GDK_CONTROL_MASK, - "delete-from-cursor", 2, - G_TYPE_ENUM, GTK_DELETE_WORD_ENDS, - G_TYPE_INT, 1); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_KP_Delete, GDK_CONTROL_MASK, + "delete-from-cursor", + "(ii)", GTK_DELETE_WORD_ENDS, 1); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_BackSpace, GDK_CONTROL_MASK, - "delete-from-cursor", 2, - G_TYPE_ENUM, GTK_DELETE_WORD_ENDS, - G_TYPE_INT, -1); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_BackSpace, GDK_CONTROL_MASK, + "delete-from-cursor", + "(ii)", GTK_DELETE_WORD_ENDS, -1); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_Delete, GDK_SHIFT_MASK | GDK_CONTROL_MASK, - "delete-from-cursor", 2, - G_TYPE_ENUM, GTK_DELETE_PARAGRAPH_ENDS, - G_TYPE_INT, 1); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_Delete, GDK_SHIFT_MASK | GDK_CONTROL_MASK, + "delete-from-cursor", + "(ii)", GTK_DELETE_PARAGRAPH_ENDS, 1); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Delete, GDK_SHIFT_MASK | GDK_CONTROL_MASK, - "delete-from-cursor", 2, - G_TYPE_ENUM, GTK_DELETE_PARAGRAPH_ENDS, - G_TYPE_INT, 1); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_KP_Delete, GDK_SHIFT_MASK | GDK_CONTROL_MASK, + "delete-from-cursor", + "(ii)", GTK_DELETE_PARAGRAPH_ENDS, 1); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_BackSpace, GDK_SHIFT_MASK | GDK_CONTROL_MASK, - "delete-from-cursor", 2, - G_TYPE_ENUM, GTK_DELETE_PARAGRAPH_ENDS, - G_TYPE_INT, -1); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_BackSpace, GDK_SHIFT_MASK | GDK_CONTROL_MASK, + "delete-from-cursor", + "(ii)", GTK_DELETE_PARAGRAPH_ENDS, -1); /* Cut/copy/paste */ - gtk_binding_entry_add_signal (binding_set, GDK_KEY_x, GDK_CONTROL_MASK, - "cut-clipboard", 0); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_c, GDK_CONTROL_MASK, - "copy-clipboard", 0); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_v, GDK_CONTROL_MASK, - "paste-clipboard", 0); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_x, GDK_CONTROL_MASK, + "cut-clipboard", + NULL); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_c, GDK_CONTROL_MASK, + "copy-clipboard", + NULL); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_v, GDK_CONTROL_MASK, + "paste-clipboard", + NULL); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Delete, GDK_SHIFT_MASK, - "cut-clipboard", 0); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Insert, GDK_CONTROL_MASK, - "copy-clipboard", 0); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Insert, GDK_SHIFT_MASK, - "paste-clipboard", 0); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_KP_Delete, GDK_SHIFT_MASK, + "cut-clipboard", + NULL); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_KP_Insert, GDK_CONTROL_MASK, + "copy-clipboard", + NULL); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_KP_Insert, GDK_SHIFT_MASK, + "paste-clipboard", + NULL); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_Delete, GDK_SHIFT_MASK, - "cut-clipboard", 0); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_Insert, GDK_CONTROL_MASK, - "copy-clipboard", 0); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_Insert, GDK_SHIFT_MASK, - "paste-clipboard", 0); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_Delete, GDK_SHIFT_MASK, + "cut-clipboard", + NULL); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_Insert, GDK_CONTROL_MASK, + "copy-clipboard", + NULL); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_Insert, GDK_SHIFT_MASK, + "paste-clipboard", + NULL); /* Undo/Redo */ - gtk_binding_entry_add_action (binding_set, GDK_KEY_z, GDK_CONTROL_MASK, - "text.undo", NULL); - gtk_binding_entry_add_action (binding_set, GDK_KEY_y, GDK_CONTROL_MASK, - "text.redo", NULL); - gtk_binding_entry_add_action (binding_set, GDK_KEY_z, GDK_CONTROL_MASK | GDK_SHIFT_MASK, - "text.redo", NULL); + gtk_widget_class_add_binding_action (widget_class, + GDK_KEY_z, GDK_CONTROL_MASK, + "text.undo", NULL); + gtk_widget_class_add_binding_action (widget_class, + GDK_KEY_y, GDK_CONTROL_MASK, + "text.redo", NULL); + gtk_widget_class_add_binding_action (widget_class, + GDK_KEY_z, GDK_CONTROL_MASK | GDK_SHIFT_MASK, + "text.redo", NULL); /* Overwrite */ - gtk_binding_entry_add_signal (binding_set, GDK_KEY_Insert, 0, - "toggle-overwrite", 0); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Insert, 0, - "toggle-overwrite", 0); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_Insert, 0, + "toggle-overwrite", + NULL); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_KP_Insert, 0, + "toggle-overwrite", + NULL); /* Emoji */ - gtk_binding_entry_add_signal (binding_set, GDK_KEY_period, GDK_CONTROL_MASK, - "insert-emoji", 0); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_semicolon, GDK_CONTROL_MASK, - "insert-emoji", 0); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_period, GDK_CONTROL_MASK, + "insert-emoji", + NULL); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_semicolon, GDK_CONTROL_MASK, + "insert-emoji", + NULL); /* Caret mode */ - gtk_binding_entry_add_signal (binding_set, GDK_KEY_F7, 0, - "toggle-cursor-visible", 0); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_F7, 0, + "toggle-cursor-visible", + NULL); /* Control-tab focus motion */ - gtk_binding_entry_add_signal (binding_set, GDK_KEY_Tab, GDK_CONTROL_MASK, - "move-focus", 1, - GTK_TYPE_DIRECTION_TYPE, GTK_DIR_TAB_FORWARD); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Tab, GDK_CONTROL_MASK, - "move-focus", 1, - GTK_TYPE_DIRECTION_TYPE, GTK_DIR_TAB_FORWARD); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_Tab, GDK_CONTROL_MASK, + "move-focus", + "(i)", GTK_DIR_TAB_FORWARD); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_KP_Tab, GDK_CONTROL_MASK, + "move-focus", + "(i)", GTK_DIR_TAB_FORWARD); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_Tab, GDK_SHIFT_MASK | GDK_CONTROL_MASK, - "move-focus", 1, - GTK_TYPE_DIRECTION_TYPE, GTK_DIR_TAB_BACKWARD); - gtk_binding_entry_add_signal (binding_set, GDK_KEY_KP_Tab, GDK_SHIFT_MASK | GDK_CONTROL_MASK, - "move-focus", 1, - GTK_TYPE_DIRECTION_TYPE, GTK_DIR_TAB_BACKWARD); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_Tab, GDK_SHIFT_MASK | GDK_CONTROL_MASK, + "move-focus", + "(i)", GTK_DIR_TAB_BACKWARD); + gtk_widget_class_add_binding_signal (widget_class, + GDK_KEY_KP_Tab, GDK_SHIFT_MASK | GDK_CONTROL_MASK, + "move-focus", + "(i)", GTK_DIR_TAB_BACKWARD); gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_TEXT_VIEW_ACCESSIBLE); gtk_widget_class_set_css_name (widget_class, I_("textview"));