[gtk/wip/matthiasc/popup: 33/63] Factor out a common function



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]