diff options
author | Matthias Clasen <mclasen@redhat.com> | 2019-06-23 22:59:08 +0000 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2019-06-24 22:44:31 +0000 |
commit | 532a1c6d0d9e8023a324c2018dca5f81c8668444 (patch) | |
tree | c8d7554c5057154470111e7d5ffc5de02cae2921 | |
parent | d1691c5a48ac9513b4f54ca3903a12652a317d89 (diff) | |
download | gtk+-532a1c6d0d9e8023a324c2018dca5f81c8668444.tar.gz |
Replace move-focus signal by focus.move action
-rw-r--r-- | gtk/gtknotebook.c | 3 | ||||
-rw-r--r-- | gtk/gtkpopover.c | 8 | ||||
-rw-r--r-- | gtk/gtkpopovermenu.c | 24 | ||||
-rw-r--r-- | gtk/gtkscrolledwindow.c | 7 | ||||
-rw-r--r-- | gtk/gtktextview.c | 45 | ||||
-rw-r--r-- | gtk/gtktoolbar.c | 53 | ||||
-rw-r--r-- | gtk/gtkwindow.c | 57 | ||||
-rw-r--r-- | testsuite/gtk/test-focus-chain.c | 2 |
8 files changed, 105 insertions, 94 deletions
diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c index 0fb75973dd..dcdf008fbe 100644 --- a/gtk/gtknotebook.c +++ b/gtk/gtknotebook.c @@ -1632,7 +1632,8 @@ gtk_notebook_move_focus_out (GtkNotebook *notebook, g_object_ref (notebook); priv->focus_out = TRUE; - g_signal_emit_by_name (toplevel, "move-focus", direction_type); + gtk_widget_activate_action (GTK_WIDGET (notebook), "focus.move", + "i", direction_type); priv->focus_out = FALSE; g_object_unref (notebook); diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c index f2d252c8af..106d0a8c2a 100644 --- a/gtk/gtkpopover.c +++ b/gtk/gtkpopover.c @@ -610,13 +610,6 @@ gtk_popover_unrealize (GtkWidget *widget) } static void -gtk_popover_move_focus (GtkWidget *widget, - GtkDirectionType direction) -{ - g_signal_emit_by_name (gtk_widget_get_root (widget), "move-focus", direction); -} - -static void gtk_popover_show (GtkWidget *widget) { GtkPopover *popover = GTK_POPOVER (widget); @@ -1299,7 +1292,6 @@ gtk_popover_class_init (GtkPopoverClass *klass) widget_class->measure = gtk_popover_measure; widget_class->size_allocate = gtk_popover_size_allocate; widget_class->snapshot = gtk_popover_snapshot; - widget_class->move_focus = gtk_popover_move_focus; container_class->add = gtk_popover_add; container_class->remove = gtk_popover_remove; diff --git a/gtk/gtkpopovermenu.c b/gtk/gtkpopovermenu.c index 29cbccd1cb..ec542ee81e 100644 --- a/gtk/gtkpopovermenu.c +++ b/gtk/gtkpopovermenu.c @@ -379,8 +379,8 @@ add_tab_bindings (GtkWidgetClass *widget_class, shortcut = gtk_shortcut_new_with_arguments ( gtk_alternative_trigger_new (gtk_keyval_trigger_new (GDK_KEY_Tab, modifiers), gtk_keyval_trigger_new (GDK_KEY_KP_Tab, modifiers)), - gtk_signal_action_new ("move-focus"), - "(i)", direction); + gtk_action_action_new ("focus.move"), + "i", direction); g_object_unref (shortcut); } @@ -392,21 +392,17 @@ add_arrow_bindings (GtkWidgetClass *widget_class, { guint keypad_keysym = keysym - GDK_KEY_Left + GDK_KEY_KP_Left; - gtk_widget_class_add_binding_signal (widget_class, keysym, 0, - "move-focus", - "(i)", + gtk_widget_class_bind_action (widget_class, keysym, 0, + "focus.move", "i", direction); - gtk_widget_class_add_binding_signal (widget_class, keysym, GDK_CONTROL_MASK, - "move-focus", - "(i)", + gtk_widget_class_bind_action (widget_class, keysym, GDK_CONTROL_MASK, + "focus.move", "i", direction); - gtk_widget_class_add_binding_signal (widget_class, keypad_keysym, 0, - "move-focus", - "(i)", + gtk_widget_class_bind_action (widget_class, keypad_keysym, 0, + "focus.move", "i", direction); - gtk_widget_class_add_binding_signal (widget_class, keypad_keysym, GDK_CONTROL_MASK, - "move-focus", - "(i)", + gtk_widget_class_bind_action (widget_class, keypad_keysym, GDK_CONTROL_MASK, + "focus.move", "i", direction); } diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c index c2545a405c..d0f07794d3 100644 --- a/gtk/gtkscrolledwindow.c +++ b/gtk/gtkscrolledwindow.c @@ -2920,19 +2920,16 @@ gtk_scrolled_window_move_focus_out (GtkScrolledWindow *scrolled_window, GtkDirectionType direction_type) { GtkScrolledWindowPrivate *priv = gtk_scrolled_window_get_instance_private (scrolled_window); - GtkWidget *toplevel; /* Focus out of the scrolled window entirely. We do this by setting * a flag, then propagating the focus motion to the notebook. */ - toplevel = GTK_WIDGET (gtk_widget_get_root (GTK_WIDGET (scrolled_window))); - if (!GTK_IS_ROOT (toplevel)) - return; g_object_ref (scrolled_window); priv->focus_out = TRUE; - g_signal_emit_by_name (toplevel, "move-focus", direction_type); + gtk_widget_activate_action (GTK_WIDGET (scrolled_window), + "focus.move", "i", direction_type); priv->focus_out = FALSE; g_object_unref (scrolled_window); diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c index 2e7be3cf9d..6b73a13681 100644 --- a/gtk/gtktextview.c +++ b/gtk/gtktextview.c @@ -1610,23 +1610,23 @@ gtk_text_view_class_init (GtkTextViewClass *klass) NULL); /* Control-tab focus motion */ - 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_widget_class_bind_action (widget_class, + GDK_KEY_Tab, GDK_CONTROL_MASK, + "focus.move", "i", + GTK_DIR_TAB_FORWARD); + gtk_widget_class_bind_action (widget_class, + GDK_KEY_KP_Tab, GDK_CONTROL_MASK, + "focus.move", "i", + GTK_DIR_TAB_FORWARD); - 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_bind_action (widget_class, + GDK_KEY_Tab, GDK_SHIFT_MASK | GDK_CONTROL_MASK, + "focus.move", "i", + GTK_DIR_TAB_BACKWARD); + gtk_widget_class_bind_action (widget_class, + GDK_KEY_KP_Tab, GDK_SHIFT_MASK | GDK_CONTROL_MASK, + "focus.move", "i", + GTK_DIR_TAB_BACKWARD); /* Context menu */ gtk_widget_class_add_binding (widget_class, @@ -5052,9 +5052,10 @@ gtk_text_view_key_controller_key_pressed (GtkEventControllerKey *controller, gtk_text_view_commit_text (text_view, "\t"); } else - g_signal_emit_by_name (text_view, "move-focus", - (state & GDK_SHIFT_MASK) ? - GTK_DIR_TAB_BACKWARD : GTK_DIR_TAB_FORWARD); + gtk_widget_activate_action (GTK_WIDGET (text_view), "focus.move", + "i", (state & GDK_SHIFT_MASK) + ? GTK_DIR_TAB_BACKWARD + : GTK_DIR_TAB_FORWARD); retval = TRUE; } @@ -5956,7 +5957,8 @@ gtk_text_view_move_cursor (GtkTextView *text_view, !gtk_widget_keynav_failed (GTK_WIDGET (text_view), leave_direction)) { - g_signal_emit_by_name (text_view, "move-focus", leave_direction); + gtk_widget_activate_action (GTK_WIDGET (text_view), "focus.move", + "i", leave_direction); } return; @@ -6141,7 +6143,8 @@ gtk_text_view_move_cursor (GtkTextView *text_view, if (!gtk_widget_keynav_failed (GTK_WIDGET (text_view), leave_direction)) { - g_signal_emit_by_name (text_view, "move-focus", leave_direction); + gtk_widget_activate_action (GTK_WIDGET (text_view), "focus.move", + "i", leave_direction); } } else if (! cancel_selection) diff --git a/gtk/gtktoolbar.c b/gtk/gtktoolbar.c index 6170d44a98..bc1a020cfb 100644 --- a/gtk/gtktoolbar.c +++ b/gtk/gtktoolbar.c @@ -206,8 +206,6 @@ static void gtk_toolbar_size_allocate (GtkWidget *widget, static void gtk_toolbar_style_updated (GtkWidget *widget); static gboolean gtk_toolbar_focus (GtkWidget *widget, GtkDirectionType dir); -static void gtk_toolbar_move_focus (GtkWidget *widget, - GtkDirectionType dir); static void gtk_toolbar_root (GtkWidget *widget); static void gtk_toolbar_unroot (GtkWidget *widget); static void gtk_toolbar_finalize (GObject *object); @@ -312,6 +310,9 @@ static void toolbar_tool_shell_iface_init (GtkToolShellIface static GtkOrientation toolbar_get_orientation (GtkToolShell *shell); static GtkToolbarStyle toolbar_get_style (GtkToolShell *shell); static void toolbar_rebuild_menu (GtkToolShell *shell); +static void gtk_toolbar_activate_focus_move (GtkWidget *widget, + const char *action_name, + GVariant *parameter); G_DEFINE_TYPE_WITH_CODE (GtkToolbar, gtk_toolbar, GTK_TYPE_CONTAINER, @@ -327,18 +328,16 @@ static guint toolbar_signals[LAST_SIGNAL] = { 0 }; static void add_arrow_bindings (GtkWidgetClass *widget_class, guint keysym, - GtkDirectionType dir) + GtkDirectionType direction) { guint keypad_keysym = keysym - GDK_KEY_Left + GDK_KEY_KP_Left; - gtk_widget_class_add_binding_signal (widget_class, - keysym, 0, - "move-focus", - "(i)", dir); - gtk_widget_class_add_binding_signal (widget_class, - keypad_keysym, 0, - "move-focus", - "(i)", dir); + gtk_widget_class_bind_action (widget_class, + keysym, 0, + "focus.move", "i", direction); + gtk_widget_class_bind_action (widget_class, + keypad_keysym, 0, + "focus.move", "i", direction); } static void @@ -346,14 +345,12 @@ add_ctrl_tab_bindings (GtkWidgetClass *widget_class, GdkModifierType modifiers, GtkDirectionType direction) { - gtk_widget_class_add_binding_signal (widget_class, - GDK_KEY_Tab, GDK_CONTROL_MASK | modifiers, - "move-focus", - "(i)", direction); - gtk_widget_class_add_binding_signal (widget_class, - GDK_KEY_KP_Tab, GDK_CONTROL_MASK | modifiers, - "move-focus", - "(i)", direction); + gtk_widget_class_bind_action (widget_class, + GDK_KEY_Tab, GDK_CONTROL_MASK | modifiers, + "focus.move", "i", direction); + gtk_widget_class_bind_action (widget_class, + GDK_KEY_KP_Tab, GDK_CONTROL_MASK | modifiers, + "focus.move", "i", direction); } static void @@ -380,12 +377,14 @@ gtk_toolbar_class_init (GtkToolbarClass *klass) gtk_widget_class_set_accessible_role (widget_class, ATK_ROLE_TOOL_BAR); - /* need to override the base class function via override_class_handler, - * because the signal slot is not available in GtkWidgetClass + /** + * GtkToolbar|focus.move: + * @direction: a #GtkDirectionType indicating the direction to move fous in + * + * The focus.move action moves the focus in the given direction. */ - g_signal_override_class_handler ("move-focus", - GTK_TYPE_TOOLBAR, - G_CALLBACK (gtk_toolbar_move_focus)); + gtk_widget_class_install_action (widget_class, "focus.move", "i", + gtk_toolbar_activate_focus_move); widget_class->root = gtk_toolbar_root; widget_class->unroot = gtk_toolbar_unroot; @@ -1579,10 +1578,12 @@ gtk_toolbar_focus_home_or_end (GtkToolbar *toolbar, * Ctrl TAB or an arrow key. */ static void -gtk_toolbar_move_focus (GtkWidget *widget, - GtkDirectionType dir) +gtk_toolbar_activate_focus_move (GtkWidget *widget, + const char *action_name, + GVariant *parameter) { GtkToolbar *toolbar = GTK_TOOLBAR (widget); + GtkDirectionType dir = g_variant_get_int32 (parameter); GtkWidget *focus_child; GList *list; gboolean try_focus = FALSE; diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index 2dcb43ece6..da300cddcc 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -507,6 +507,9 @@ static void gtk_window_activate_default_activate (GtkWidget *widget, static void gtk_window_activate_focus_activate (GtkWidget *widget, const char *action_name, GVariant *parameter); +static void gtk_window_activate_focus_move (GtkWidget *widget, + const char *action_name, + GVariant *parameter); static void gtk_window_do_popup (GtkWindow *window, GdkEventButton *event); @@ -594,8 +597,8 @@ add_tab_bindings (GtkWidgetClass *widget_class, shortcut = gtk_shortcut_new_with_arguments ( gtk_alternative_trigger_new (gtk_keyval_trigger_new (GDK_KEY_Tab, modifiers), gtk_keyval_trigger_new (GDK_KEY_KP_Tab, modifiers)), - gtk_signal_action_new ("move-focus"), - "(i)", direction); + gtk_action_action_new ("focus.move"), + "i", direction); gtk_widget_class_add_shortcut (widget_class, shortcut); @@ -609,22 +612,18 @@ add_arrow_bindings (GtkWidgetClass *widget_class, { guint keypad_keysym = keysym - GDK_KEY_Left + GDK_KEY_KP_Left; - gtk_widget_class_add_binding_signal (widget_class, keysym, 0, - "move-focus", - "(i)", - direction); - gtk_widget_class_add_binding_signal (widget_class, keysym, GDK_CONTROL_MASK, - "move-focus", - "(i)", - direction); - gtk_widget_class_add_binding_signal (widget_class, keypad_keysym, 0, - "move-focus", - "(i)", - direction); - gtk_widget_class_add_binding_signal (widget_class, keypad_keysym, GDK_CONTROL_MASK, - "move-focus", - "(i)", - direction); + gtk_widget_class_bind_action (widget_class, keysym, 0, + "focus.move", "i", + direction); + gtk_widget_class_bind_action (widget_class, keysym, GDK_CONTROL_MASK, + "focus.move", "i", + direction); + gtk_widget_class_bind_action (widget_class, keypad_keysym, 0, + "focus.move", "i", + direction); + gtk_widget_class_bind_action (widget_class, keypad_keysym, GDK_CONTROL_MASK, + "focus.move", "i", + direction); } static guint32 @@ -1134,6 +1133,16 @@ gtk_window_class_init (GtkWindowClass *klass) gtk_widget_class_install_action (widget_class, "focus.activate", NULL, gtk_window_activate_focus_activate); + + /** + * GtkWindow|focus.move: + * @direction: a #GtkDirectionType indicating the direction to move fous in + * + * The focus.move action moves the focus in the given direction. + */ + gtk_widget_class_install_action (widget_class, "focus.move", "i", + gtk_window_activate_focus_move); + /** * GtkWindow|debugging.enable: * @toggle: whether to toggle or enable @@ -6029,6 +6038,18 @@ gtk_window_move_focus (GtkWidget *widget, gtk_window_set_focus (GTK_WINDOW (widget), NULL); } +static void +gtk_window_activate_focus_move (GtkWidget *widget, + const char *action_name, + GVariant *parameter) +{ + GtkDirectionType dir; + + dir = g_variant_get_int32 (parameter); + dir = CLAMP (dir, GTK_DIR_TAB_FORWARD, GTK_DIR_RIGHT); + gtk_window_move_focus (widget, dir); +} + /** * gtk_window_set_focus: * @window: a #GtkWindow diff --git a/testsuite/gtk/test-focus-chain.c b/testsuite/gtk/test-focus-chain.c index a76082feca..62cf0b407b 100644 --- a/testsuite/gtk/test-focus-chain.c +++ b/testsuite/gtk/test-focus-chain.c @@ -104,7 +104,7 @@ generate_focus_chain (GtkWidget *window, while (TRUE) { - g_signal_emit_by_name (window, "move-focus", dir); + gtk_widget_activate_action (window, "focus.move", "i", dir); focus = gtk_window_get_focus (GTK_WINDOW (window)); |