[gtk+/wip/baedert/focus: 2/20] widget: Save pointer to focus child
- From: Timm Bäder <baedert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/baedert/focus: 2/20] widget: Save pointer to focus child
- Date: Fri, 10 Feb 2017 20:55:02 +0000 (UTC)
commit 726e9bfb17fb68d7975e5d49fe8bea3aa80b1dc6
Author: Timm Bäder <mail baedert org>
Date: Wed Feb 8 09:00:29 2017 +0100
widget: Save pointer to focus child
Do the same thing GtkContainer does.
gtk/gtkcontainer.c | 9 ++++-----
gtk/gtkexpander.c | 4 ++--
gtk/gtkflowbox.c | 4 ++--
gtk/gtklistbox.c | 4 ++--
gtk/gtknotebook.c | 7 ++-----
gtk/gtkpaned.c | 8 +++-----
gtk/gtkpopover.c | 2 +-
gtk/gtkscrolledwindow.c | 2 +-
gtk/gtktextview.c | 5 +----
gtk/gtktoolbar.c | 7 +++----
gtk/gtktreeview.c | 5 ++---
gtk/gtkwidget.c | 28 ++++++++++++++++++----------
gtk/gtkwidgetprivate.h | 4 ++++
gtk/gtkwindow.c | 8 ++++----
14 files changed, 49 insertions(+), 48 deletions(-)
---
diff --git a/gtk/gtkcontainer.c b/gtk/gtkcontainer.c
index 8968983..2065892 100644
--- a/gtk/gtkcontainer.c
+++ b/gtk/gtkcontainer.c
@@ -2114,10 +2114,9 @@ gtk_container_real_set_focus_child (GtkContainer *container,
{
focus_child = priv->focus_child;
- while (GTK_IS_CONTAINER (focus_child) && gtk_container_get_focus_child (GTK_CONTAINER
(focus_child)))
- {
- focus_child = gtk_container_get_focus_child (GTK_CONTAINER (focus_child));
- }
+
+ while (gtk_widget_get_focus_child (focus_child))
+ focus_child = gtk_widget_get_focus_child (focus_child);
gtk_widget_translate_coordinates (focus_child, priv->focus_child,
0, 0, &x, &y);
@@ -2310,7 +2309,7 @@ find_old_focus (GtkContainer *container,
parent = _gtk_widget_get_parent (widget);
- if (parent && (gtk_container_get_focus_child (GTK_CONTAINER (parent)) != widget))
+ if (parent && (gtk_widget_get_focus_child (parent) != widget))
goto next;
widget = parent;
diff --git a/gtk/gtkexpander.c b/gtk/gtkexpander.c
index 45286a1..3c61246 100644
--- a/gtk/gtkexpander.c
+++ b/gtk/gtkexpander.c
@@ -798,7 +798,7 @@ focus_current_site (GtkExpander *expander,
{
GtkWidget *current_focus;
- current_focus = gtk_container_get_focus_child (GTK_CONTAINER (expander));
+ current_focus = gtk_widget_get_focus_child (GTK_WIDGET (expander));
if (!current_focus)
return FALSE;
@@ -963,7 +963,7 @@ gtk_expander_focus (GtkWidget *widget,
FocusSite site = FOCUS_NONE;
widget_is_focus = gtk_widget_is_focus (widget);
- old_focus_child = gtk_container_get_focus_child (GTK_CONTAINER (widget));
+ old_focus_child = gtk_widget_get_focus_child (GTK_WIDGET (widget));
if (old_focus_child && old_focus_child == expander->priv->label_widget)
site = FOCUS_LABEL;
diff --git a/gtk/gtkflowbox.c b/gtk/gtkflowbox.c
index 9c496e8..22de06f 100644
--- a/gtk/gtkflowbox.c
+++ b/gtk/gtkflowbox.c
@@ -342,7 +342,7 @@ gtk_flow_box_child_focus (GtkWidget *widget,
return FALSE;
}
- else if (gtk_container_get_focus_child (GTK_CONTAINER (widget)) != NULL)
+ else if (gtk_widget_get_focus_child (widget) != NULL)
{
/* Child has focus, always navigate inside it first */
if (gtk_widget_child_focus (child, direction))
@@ -3230,7 +3230,7 @@ gtk_flow_box_focus (GtkWidget *widget,
return GTK_WIDGET_CLASS (gtk_flow_box_parent_class)->focus (widget, direction);
}
- focus_child = gtk_container_get_focus_child (GTK_CONTAINER (box));
+ focus_child = gtk_widget_get_focus_child (widget);
next_focus_child = NULL;
if (focus_child != NULL)
diff --git a/gtk/gtklistbox.c b/gtk/gtklistbox.c
index ce7accb..646d741 100644
--- a/gtk/gtklistbox.c
+++ b/gtk/gtklistbox.c
@@ -2016,7 +2016,7 @@ gtk_list_box_focus (GtkWidget *widget,
GtkWidget *row;
GtkWidget *header;
- focus_child = gtk_container_get_focus_child ((GtkContainer *)box);
+ focus_child = gtk_widget_get_focus_child (widget);
next_focus_row = NULL;
if (focus_child != NULL)
@@ -3207,7 +3207,7 @@ gtk_list_box_row_focus (GtkWidget *widget,
return FALSE;
}
- else if (gtk_container_get_focus_child (GTK_CONTAINER (row)) != NULL)
+ else if (gtk_widget_get_focus_child (widget) != NULL)
{
/* Child has focus, always navigate inside it first */
if (gtk_widget_child_focus (child, direction))
diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c
index db1cd67..83c63ac 100644
--- a/gtk/gtknotebook.c
+++ b/gtk/gtknotebook.c
@@ -1436,7 +1436,7 @@ gtk_notebook_move_focus_out (GtkNotebook *notebook,
GtkDirectionType effective_direction = get_effective_direction (notebook, direction_type);
GtkWidget *toplevel;
- if (gtk_container_get_focus_child (GTK_CONTAINER (notebook)) && effective_direction == GTK_DIR_UP)
+ if (gtk_widget_get_focus_child (GTK_WIDGET (notebook)) && effective_direction == GTK_DIR_UP)
if (focus_tabs_in (notebook))
return;
if (gtk_widget_is_focus (GTK_WIDGET (notebook)) && effective_direction == GTK_DIR_DOWN)
@@ -4180,9 +4180,6 @@ gtk_notebook_focus (GtkWidget *widget,
gint last_action;
gboolean widget_is_focus;
- GtkContainer *container;
-
- container = GTK_CONTAINER (widget);
if (priv->tab_pos == GTK_POS_TOP ||
priv->tab_pos == GTK_POS_LEFT)
@@ -4203,7 +4200,7 @@ gtk_notebook_focus (GtkWidget *widget,
}
widget_is_focus = gtk_widget_is_focus (widget);
- old_focus_child = gtk_container_get_focus_child (container);
+ old_focus_child = gtk_widget_get_focus_child (widget);
effective_direction = get_effective_direction (notebook, direction);
diff --git a/gtk/gtkpaned.c b/gtk/gtkpaned.c
index 13edfd4..50c3add 100644
--- a/gtk/gtkpaned.c
+++ b/gtk/gtkpaned.c
@@ -2449,7 +2449,7 @@ gtk_paned_set_focus_child (GtkContainer *container,
if (GTK_IS_PANED (w))
last_focus = w;
- container_focus_child = gtk_container_get_focus_child (container);
+ container_focus_child = gtk_widget_get_focus_child (GTK_WIDGET (container));
if (container_focus_child == priv->child1)
gtk_paned_set_last_child1_focus (paned, last_focus);
else if (container_focus_child == priv->child2)
@@ -2467,7 +2467,6 @@ gtk_paned_get_cycle_chain (GtkPaned *paned,
GList **widgets)
{
GtkPanedPrivate *priv = paned->priv;
- GtkContainer *container = GTK_CONTAINER (paned);
GtkWidget *ancestor = NULL;
GtkWidget *focus_child;
GtkWidget *parent;
@@ -2504,7 +2503,7 @@ gtk_paned_get_cycle_chain (GtkPaned *paned,
* priv->last_child?_focus before priv->child?, both when we
* are going forward and backward.
*/
- focus_child = gtk_container_get_focus_child (container);
+ focus_child = gtk_widget_get_focus_child (GTK_WIDGET (paned));
if (direction == GTK_DIR_TAB_FORWARD)
{
if (focus_child == priv->child1)
@@ -2880,14 +2879,13 @@ gtk_paned_cycle_handle_focus (GtkPaned *paned,
}
else
{
- GtkContainer *container = GTK_CONTAINER (paned);
GtkPaned *focus;
GtkPaned *first;
GtkWidget *toplevel;
GtkWidget *focus_child;
gtk_paned_find_neighbours (paned, &next, &prev);
- focus_child = gtk_container_get_focus_child (container);
+ focus_child = gtk_widget_get_focus_child (GTK_WIDGET (paned));
if (focus_child == priv->child1)
{
diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c
index 94311ab..6c72402 100644
--- a/gtk/gtkpopover.c
+++ b/gtk/gtkpopover.c
@@ -1511,7 +1511,7 @@ gtk_popover_focus (GtkWidget *widget,
*/
while (focus && focus != widget)
{
- gtk_container_set_focus_child (GTK_CONTAINER (focus), NULL);
+ gtk_widget_set_focus_child (focus, NULL);
focus = gtk_widget_get_parent (focus);
}
diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
index bc23a13..66bd5b9 100644
--- a/gtk/gtkscrolledwindow.c
+++ b/gtk/gtkscrolledwindow.c
@@ -3642,7 +3642,7 @@ gtk_scrolled_window_focus (GtkWidget *widget,
GtkWidget *child;
gboolean had_focus_child;
- had_focus_child = gtk_container_get_focus_child (GTK_CONTAINER (widget)) != NULL;
+ had_focus_child = gtk_widget_get_focus_child (widget) != NULL;
if (priv->focus_out)
{
diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c
index 7f4f79a..7c466a9 100644
--- a/gtk/gtktextview.c
+++ b/gtk/gtktextview.c
@@ -5959,13 +5959,10 @@ static gboolean
gtk_text_view_focus (GtkWidget *widget,
GtkDirectionType direction)
{
- GtkContainer *container;
gboolean result;
- container = GTK_CONTAINER (widget);
-
if (!gtk_widget_is_focus (widget) &&
- gtk_container_get_focus_child (container) == NULL)
+ gtk_widget_get_focus_child (widget) == NULL)
{
if (gtk_widget_get_can_focus (widget))
{
diff --git a/gtk/gtktoolbar.c b/gtk/gtktoolbar.c
index 2eb4e08..2734934 100644
--- a/gtk/gtktoolbar.c
+++ b/gtk/gtktoolbar.c
@@ -1836,7 +1836,7 @@ gtk_toolbar_focus_home_or_end (GtkToolbar *toolbar,
{
GtkWidget *child = list->data;
- if (gtk_container_get_focus_child (GTK_CONTAINER (toolbar)) == child)
+ if (gtk_widget_get_focus_child (GTK_WIDGET (toolbar)) == child)
break;
if (gtk_widget_get_mapped (child) && gtk_widget_child_focus (child, dir))
@@ -1856,13 +1856,12 @@ gtk_toolbar_move_focus (GtkWidget *widget,
GtkDirectionType dir)
{
GtkToolbar *toolbar = GTK_TOOLBAR (widget);
- GtkContainer *container = GTK_CONTAINER (toolbar);
GtkWidget *focus_child;
GList *list;
gboolean try_focus = FALSE;
GList *children;
- focus_child = gtk_container_get_focus_child (container);
+ focus_child = gtk_widget_get_focus_child (widget);
if (focus_child && gtk_widget_child_focus (focus_child, dir))
return;
@@ -1899,7 +1898,7 @@ gtk_toolbar_focus (GtkWidget *widget,
* arrow keys or Ctrl TAB (both of which are handled by the
* gtk_toolbar_move_focus() keybinding function.
*/
- if (gtk_container_get_focus_child (GTK_CONTAINER (widget)))
+ if (gtk_widget_get_focus_child (widget))
return FALSE;
children = gtk_toolbar_list_children_in_focus_order (toolbar, dir);
diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c
index 898d5ba..986301a 100644
--- a/gtk/gtktreeview.c
+++ b/gtk/gtktreeview.c
@@ -8292,7 +8292,7 @@ gtk_tree_view_header_focus (GtkTreeView *tree_view,
if (! tree_view->priv->headers_visible)
return FALSE;
- focus_child = gtk_container_get_focus_child (GTK_CONTAINER (tree_view));
+ focus_child = gtk_widget_get_focus_child (GTK_WIDGET (tree_view));
first_column = tree_view->priv->columns;
while (first_column)
@@ -8489,13 +8489,12 @@ gtk_tree_view_focus (GtkWidget *widget,
GtkDirectionType direction)
{
GtkTreeView *tree_view = GTK_TREE_VIEW (widget);
- GtkContainer *container = GTK_CONTAINER (widget);
GtkWidget *focus_child;
if (!gtk_widget_is_sensitive (widget) || !gtk_widget_get_can_focus (widget))
return FALSE;
- focus_child = gtk_container_get_focus_child (container);
+ focus_child = gtk_widget_get_focus_child (widget);
gtk_tree_view_stop_editing (GTK_TREE_VIEW (widget), FALSE);
/* Case 1. Headers currently have focus. */
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index fcfcdc3..f2688be 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -4008,11 +4008,8 @@ gtk_widget_unparent (GtkWidget *widget)
if (_gtk_widget_is_toplevel (toplevel))
_gtk_window_unset_focus_and_default (GTK_WINDOW (toplevel), widget);
- if (GTK_IS_CONTAINER (priv->parent))
- {
- if (gtk_container_get_focus_child (GTK_CONTAINER (priv->parent)) == widget)
- gtk_container_set_focus_child (GTK_CONTAINER (priv->parent), NULL);
- }
+ if (gtk_widget_get_focus_child (priv->parent) == widget)
+ gtk_widget_set_focus_child (priv->parent, NULL);
if (_gtk_widget_is_drawable (priv->parent))
gtk_widget_queue_draw_area (priv->parent,
@@ -7154,12 +7151,9 @@ reset_focus_recurse (GtkWidget *widget,
{
if (GTK_IS_CONTAINER (widget))
{
- GtkContainer *container;
-
- container = GTK_CONTAINER (widget);
- gtk_container_set_focus_child (container, NULL);
+ gtk_widget_set_focus_child (widget, NULL);
- gtk_container_foreach (container,
+ gtk_container_foreach (GTK_CONTAINER (widget),
reset_focus_recurse,
NULL);
}
@@ -15768,6 +15762,8 @@ 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)
@@ -15776,8 +15772,20 @@ gtk_widget_set_focus_child (GtkWidget *widget,
g_return_if_fail (gtk_widget_get_parent (child) == widget);
}
+ g_set_object (&priv->focus_child, child);
+
if (GTK_IS_CONTAINER (widget))
gtk_container_set_focus_child (GTK_CONTAINER (widget), child);
/* TODO: ??? */
}
+
+GtkWidget *
+gtk_widget_get_focus_child (GtkWidget *widget)
+{
+ GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
+
+ g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
+
+ return priv->focus_child;
+}
diff --git a/gtk/gtkwidgetprivate.h b/gtk/gtkwidgetprivate.h
index ba46211..4723934 100644
--- a/gtk/gtkwidgetprivate.h
+++ b/gtk/gtkwidgetprivate.h
@@ -158,6 +158,8 @@ struct _GtkWidgetPrivate
GtkWidget *next_sibling;
GtkWidget *first_child;
GtkWidget *last_child;
+
+ GtkWidget *focus_child;
};
GtkCssNode * gtk_widget_get_css_node (GtkWidget *widget);
@@ -303,6 +305,8 @@ void gtk_widget_forall (GtkWidget
GtkCallback callback,
gpointer user_data);
+GtkWidget *gtk_widget_get_focus_child (GtkWidget *widget);
+
/* inline getters */
static inline gboolean
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index f22b9ec..af3a39e 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -7978,7 +7978,7 @@ gtk_window_focus (GtkWidget *widget,
priv = window->priv;
bin = GTK_BIN (widget);
- old_focus_child = gtk_container_get_focus_child (container);
+ old_focus_child = gtk_widget_get_focus_child (widget);
/* We need a special implementation here to deal properly with wrapping
* around in the tab chain without the danger of going into an
@@ -8004,7 +8004,7 @@ gtk_window_focus (GtkWidget *widget,
parent = _gtk_widget_get_parent (priv->focus_widget);
while (parent)
{
- gtk_container_set_focus_child (GTK_CONTAINER (parent), NULL);
+ gtk_widget_set_focus_child (parent, NULL);
parent = _gtk_widget_get_parent (parent);
}
@@ -8043,7 +8043,7 @@ gtk_window_move_focus (GtkWidget *widget,
gtk_widget_child_focus (widget, dir);
- if (! gtk_container_get_focus_child (GTK_CONTAINER (widget)))
+ if (!gtk_widget_get_focus_child (widget))
gtk_window_set_focus (GTK_WINDOW (widget), NULL);
}
@@ -8209,7 +8209,7 @@ _gtk_window_unset_focus_and_default (GtkWindow *window,
g_object_ref (widget);
parent = _gtk_widget_get_parent (widget);
- if (gtk_container_get_focus_child (GTK_CONTAINER (parent)) == widget)
+ if (gtk_widget_get_focus_child (parent) == widget)
{
child = priv->focus_widget;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]