[libadwaita/libadwaita-1-0] expander-row: Fix focus
- From: Alexander Mikhaylenko <alexm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libadwaita/libadwaita-1-0] expander-row: Fix focus
- Date: Mon, 24 Jan 2022 11:40:08 +0000 (UTC)
commit 874f910dd5ee7613a08adedf4d72b8c32a2fd56b
Author: Alexander Mikhaylenko <alexm gnome org>
Date: Tue Jan 18 13:42:45 2022 +0500
expander-row: Fix focus
Fixes https://gitlab.gnome.org/GNOME/libadwaita/-/issues/391
(cherry picked from commit 6cfd3f8c310e6652862b1f8053ff0dd030bd2106)
src/adw-expander-row.c | 37 +++++++++++++++++++++++++++++--------
src/adw-expander-row.ui | 2 ++
2 files changed, 31 insertions(+), 8 deletions(-)
---
diff --git a/src/adw-expander-row.c b/src/adw-expander-row.c
index 3ba175a9..60eb6776 100644
--- a/src/adw-expander-row.c
+++ b/src/adw-expander-row.c
@@ -9,6 +9,7 @@
#include "adw-action-row.h"
#include "adw-macros-private.h"
+#include "adw-widget-utils-private.h"
/**
* AdwExpanderRow:
@@ -81,6 +82,30 @@ enum {
static GParamSpec *props[LAST_PROP];
+static void
+activate_cb (AdwExpanderRow *self)
+{
+ AdwExpanderRowPrivate *priv = adw_expander_row_get_instance_private (self);
+
+ adw_expander_row_set_expanded (self, !priv->expanded);
+}
+
+static gboolean
+keynav_failed_cb (AdwExpanderRow *self,
+ GtkDirectionType direction)
+{
+ GtkWidget *toplevel = GTK_WIDGET (gtk_widget_get_root (GTK_WIDGET (self)));
+
+ if (!toplevel)
+ return FALSE;
+
+ if (direction != GTK_DIR_UP && direction != GTK_DIR_DOWN)
+ return FALSE;
+
+ return gtk_widget_child_focus (toplevel, direction == GTK_DIR_UP ?
+ GTK_DIR_TAB_BACKWARD : GTK_DIR_TAB_FORWARD);
+}
+
static void
adw_expander_row_get_property (GObject *object,
guint prop_id,
@@ -139,14 +164,6 @@ adw_expander_row_set_property (GObject *object,
}
}
-static void
-activate_cb (AdwExpanderRow *self)
-{
- AdwExpanderRowPrivate *priv = adw_expander_row_get_instance_private (self);
-
- adw_expander_row_set_expanded (self, !priv->expanded);
-}
-
static void
adw_expander_row_class_init (AdwExpanderRowClass *klass)
{
@@ -156,6 +173,9 @@ adw_expander_row_class_init (AdwExpanderRowClass *klass)
object_class->get_property = adw_expander_row_get_property;
object_class->set_property = adw_expander_row_set_property;
+ widget_class->focus = adw_widget_focus_child;
+ widget_class->grab_focus = adw_widget_grab_focus_child;
+
/**
* AdwExpanderRow:subtitle: (attributes org.gtk.Property.get=adw_expander_row_get_subtitle
org.gtk.Property.set=adw_expander_row_set_subtitle)
*
@@ -237,6 +257,7 @@ adw_expander_row_class_init (AdwExpanderRowClass *klass)
gtk_widget_class_bind_template_child_private (widget_class, AdwExpanderRow, image);
gtk_widget_class_bind_template_child_private (widget_class, AdwExpanderRow, enable_switch);
gtk_widget_class_bind_template_callback (widget_class, activate_cb);
+ gtk_widget_class_bind_template_callback (widget_class, keynav_failed_cb);
}
#define NOTIFY(func, prop) \
diff --git a/src/adw-expander-row.ui b/src/adw-expander-row.ui
index 58fe456b..9f59d3e1 100644
--- a/src/adw-expander-row.ui
+++ b/src/adw-expander-row.ui
@@ -18,6 +18,7 @@
by clicking it or via keyboard. Activating the row should
toggle its expansion. -->
<signal name="row-activated" handler="activate_cb" after="yes" swapped="yes"/>
+ <signal name="keynav-failed" handler="keynav_failed_cb" swapped="yes"/>
<child>
<object class="AdwActionRow" id="action_row">
<!-- The header row must be activatable to toggle expansion by
@@ -64,6 +65,7 @@
<child>
<object class="GtkListBox" id="list">
<property name="selection-mode">none</property>
+ <signal name="keynav-failed" handler="keynav_failed_cb" swapped="yes"/>
<style>
<class name="nested"/>
</style>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]