[gtk/wip/matthiasc/popup: 33/63] Factor out a common function
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/matthiasc/popup: 33/63] Factor out a common function
- Date: Mon, 4 Mar 2019 04:32:40 +0000 (UTC)
commit a6d4c2adeb357838be59b37582f2bde930a80883
Author: Matthias Clasen <mclasen redhat com>
Date: Sun Mar 3 14:18:25 2019 -0500
Factor out a common function
Use the same helper function to determine if a widget
can be made the focus-widget in all the places where
it is what we want to know.
The helper function takes into account can-focus,
sensitive and child-focusable.
gtk/gtkwidgetfocus.c | 22 +++++++++++++++++++++-
gtk/gtkwidgetprivate.h | 2 ++
gtk/gtkwindow.c | 21 +--------------------
3 files changed, 24 insertions(+), 21 deletions(-)
---
diff --git a/gtk/gtkwidgetfocus.c b/gtk/gtkwidgetfocus.c
index 691275d701..230f76d19e 100644
--- a/gtk/gtkwidgetfocus.c
+++ b/gtk/gtkwidgetfocus.c
@@ -449,6 +449,25 @@ gtk_widget_focus_sort (GtkWidget *widget,
}
}
+gboolean
+gtk_widget_can_take_focus (GtkWidget *widget)
+{
+ GtkWidget *w;
+
+ if (!gtk_widget_is_sensitive (widget) ||
+ !gtk_widget_get_can_focus (widget))
+ return FALSE;
+
+ w = widget;
+ do {
+ if (!gtk_widget_get_child_focusable (w))
+ return FALSE;
+ w = gtk_widget_get_parent (w);
+ } while (w != NULL);
+
+ return TRUE;
+}
+
/**
* gtk_widget_get_next_focus:
* @widget: a #GtkWidget
@@ -477,7 +496,7 @@ gtk_widget_get_next_focus (GtkWidget *widget,
prev = widget;
widget = gtk_widget_get_parent (widget);
}
- else if (gtk_widget_get_can_focus (next))
+ else if (gtk_widget_can_take_focus (next))
{
break;
}
@@ -495,6 +514,7 @@ gtk_widget_get_next_focus (GtkWidget *widget,
} while (widget);
g_hash_table_unref (seen);
+
return next;
}
diff --git a/gtk/gtkwidgetprivate.h b/gtk/gtkwidgetprivate.h
index 7848874954..01460da838 100644
--- a/gtk/gtkwidgetprivate.h
+++ b/gtk/gtkwidgetprivate.h
@@ -340,6 +340,8 @@ gboolean gtk_widget_run_controllers (GtkWidget
gboolean gtk_widget_send_focus_change (GtkWidget *widget,
GdkEvent *event);
+gboolean gtk_widget_can_take_focus (GtkWidget *widget);
+
/* inline getters */
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index af902229d5..2b131641f7 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -7122,25 +7122,6 @@ set_focus_widget (GtkWindow *window,
do_focus_change (priv->focus_widget, TRUE);
}
-static gboolean
-can_focus_widget (GtkWidget *widget)
-{
- GtkWidget *w;
-
- if (!gtk_widget_is_sensitive (widget) ||
- !gtk_widget_get_can_focus (widget))
- return FALSE;
-
- w = widget;
- do {
- if (!gtk_widget_get_child_focusable (w))
- return FALSE;
- w = gtk_widget_get_parent (w);
- } while (w != NULL);
-
- return TRUE;
-}
-
/**
* gtk_window_set_focus:
* @window: a #GtkWindow
@@ -7159,7 +7140,7 @@ gtk_window_set_focus (GtkWindow *window,
{
g_return_if_fail (GTK_IS_WINDOW (window));
- if (focus && !can_focus_widget (focus))
+ if (focus && !gtk_widget_can_take_focus (focus))
return;
unset_focus_widget (window);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]