summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2019-06-23 22:59:08 +0000
committerMatthias Clasen <mclasen@redhat.com>2019-06-24 22:44:31 +0000
commit532a1c6d0d9e8023a324c2018dca5f81c8668444 (patch)
treec8d7554c5057154470111e7d5ffc5de02cae2921
parentd1691c5a48ac9513b4f54ca3903a12652a317d89 (diff)
downloadgtk+-532a1c6d0d9e8023a324c2018dca5f81c8668444.tar.gz
Replace move-focus signal by focus.move action
-rw-r--r--gtk/gtknotebook.c3
-rw-r--r--gtk/gtkpopover.c8
-rw-r--r--gtk/gtkpopovermenu.c24
-rw-r--r--gtk/gtkscrolledwindow.c7
-rw-r--r--gtk/gtktextview.c45
-rw-r--r--gtk/gtktoolbar.c53
-rw-r--r--gtk/gtkwindow.c57
-rw-r--r--testsuite/gtk/test-focus-chain.c2
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));