[gtk/wip/matthiasc/focus2: 88/91] Add a ::set_focus_child vfunc back
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/matthiasc/focus2: 88/91] Add a ::set_focus_child vfunc back
- Date: Fri, 8 Mar 2019 22:25:05 +0000 (UTC)
commit 42c73a3495fa6b7021de949f8dcb4c9389905349
Author: Matthias Clasen <mclasen redhat com>
Date: Fri Mar 8 13:16:13 2019 -0500
Add a ::set_focus_child vfunc back
This will allow widgets to update state when a child
is focused. An example for where this is needed is
updating the selection in listbox or flowbox.
gtk/gtkwidget.c | 16 +++++++++++++---
gtk/gtkwidget.h | 6 +++++-
2 files changed, 18 insertions(+), 4 deletions(-)
---
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index d6e4154c22..5bd58fb450 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -588,7 +588,9 @@ static void gtk_widget_real_size_allocate (GtkWidget *widget,
static void gtk_widget_real_direction_changed(GtkWidget *widget,
GtkTextDirection previous_direction);
-static void gtk_widget_real_grab_focus (GtkWidget *focus_widget);
+static void gtk_widget_real_grab_focus (GtkWidget *focus_widget);
+static void gtk_widget_real_set_focus_child (GtkWidget *widget,
+ GtkWidget *child);
static gboolean gtk_widget_real_query_tooltip (GtkWidget *widget,
gint x,
gint y,
@@ -946,6 +948,7 @@ gtk_widget_class_init (GtkWidgetClass *klass)
klass->snapshot = gtk_widget_real_snapshot;
klass->mnemonic_activate = gtk_widget_real_mnemonic_activate;
klass->grab_focus = gtk_widget_real_grab_focus;
+ klass->set_focus_child = gtk_widget_real_set_focus_child;
klass->next_focus_child = gtk_widget_next_focus_child;
klass->move_focus = gtk_widget_real_move_focus;
klass->keynav_failed = gtk_widget_real_keynav_failed;
@@ -13286,8 +13289,6 @@ void
gtk_widget_set_focus_child (GtkWidget *widget,
GtkWidget *child)
{
- GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
-
g_return_if_fail (GTK_IS_WIDGET (widget));
if (child != NULL)
@@ -13296,6 +13297,15 @@ gtk_widget_set_focus_child (GtkWidget *widget,
g_return_if_fail (gtk_widget_get_parent (child) == widget);
}
+ GTK_WIDGET_GET_CLASS (widget)->set_focus_child (widget, child);
+}
+
+static void
+gtk_widget_real_set_focus_child (GtkWidget *widget,
+ GtkWidget *child)
+{
+ GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
+
g_set_object (&priv->focus_child, child);
}
diff --git a/gtk/gtkwidget.h b/gtk/gtkwidget.h
index df93e95f1e..438ef53011 100644
--- a/gtk/gtkwidget.h
+++ b/gtk/gtkwidget.h
@@ -185,6 +185,8 @@ struct _GtkWidget
* %FALSE, and just grabs the focus if @group_cycling is %TRUE.
* @grab_focus: Causes @widget to have the keyboard focus for the
* #GtkWindow it’s inside.
+ * @set_focus_child: Allows widget implementations to do extra actions when
+ * the child containing the focus is changed. Must chain up
* @next_focus_child: Returns the next child that is a candidate for receiving focus.
* Note that the returned child does not have to be focusable itself, it might just
* contain focusable children. The default implementation returns all children, in
@@ -280,7 +282,9 @@ struct _GtkWidgetClass
gboolean group_cycling);
/* explicit focus */
- void (* grab_focus) (GtkWidget *widget);
+ void (* grab_focus) (GtkWidget *widget);
+ void (* set_focus_child) (GtkWidget *widget,
+ GtkWidget *child);
GtkWidget * (* next_focus_child) (GtkWidget *widget,
GtkWidget *child,
GtkDirectionType direction);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]