[gtk/wip/matthiasc/popup5: 103/118] Add gtk_widget_get_native



commit 96bb397d99a4685548a08d97bee8a389d590d1ad
Author: Matthias Clasen <mclasen redhat com>
Date:   Thu May 2 17:32:54 2019 -0400

    Add gtk_widget_get_native
    
    This is a common enough operation to deserve api.

 docs/reference/gtk/gtk4-sections.txt |  1 +
 gtk/gtktypes.h                       |  1 +
 gtk/gtkwidget.c                      | 23 ++++++++++++++++++++++-
 gtk/gtkwidget.h                      |  3 +++
 4 files changed, 27 insertions(+), 1 deletion(-)
---
diff --git a/docs/reference/gtk/gtk4-sections.txt b/docs/reference/gtk/gtk4-sections.txt
index bb9dcb5167..8e8f138fca 100644
--- a/docs/reference/gtk/gtk4-sections.txt
+++ b/docs/reference/gtk/gtk4-sections.txt
@@ -4438,6 +4438,7 @@ gtk_widget_set_sensitive
 gtk_widget_set_parent
 gtk_widget_get_toplevel
 gtk_widget_get_root
+gtk_widget_get_native
 gtk_widget_get_ancestor
 gtk_widget_is_ancestor
 gtk_widget_translate_coordinates
diff --git a/gtk/gtktypes.h b/gtk/gtktypes.h
index 8a48c1c4c8..2798bd1b02 100644
--- a/gtk/gtktypes.h
+++ b/gtk/gtktypes.h
@@ -39,6 +39,7 @@ typedef struct _GtkClipboard         GtkClipboard;
 typedef struct _GtkEventController     GtkEventController;
 typedef struct _GtkGesture             GtkGesture;
 typedef struct _GtkLayoutManager       GtkLayoutManager;
+typedef struct _GtkNative              GtkNative;
 typedef struct _GtkRequisition        GtkRequisition;
 typedef struct _GtkRoot               GtkRoot;
 typedef struct _GtkSelectionData       GtkSelectionData;
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index 2b7f51a54d..5a5022d3cb 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -3643,7 +3643,7 @@ sync_widget_surface_transform (GtkWidget *widget)
     }
   else
     {
-      GtkWidget *native = gtk_widget_get_ancestor (widget, GTK_TYPE_NATIVE);
+      GtkWidget *native = GTK_WIDGET (gtk_widget_get_native (widget));
 
       if (gtk_widget_compute_transform (widget, native,
                                         &surface_transform_data->cached_surface_transform))
@@ -6657,6 +6657,27 @@ gtk_widget_get_root (GtkWidget *widget)
   return _gtk_widget_get_root (widget);
 }
 
+/**
+ * gtk_widget_get_native:
+ * @widget: a #GtkWidget
+ *
+ * Returns the GtkNative widget that contains @widget,
+ * or %NULL if the widget is not contained inside a
+ * widget tree with a native ancestor.
+ *
+ * #GtkNative widgets will return themselves here.
+ *
+ * Returns: (transfer none) (nullable): the #GtkNative
+ *   widget of @widget, or %NULL
+ */
+GtkNative *
+gtk_widget_get_native (GtkWidget *widget)
+{
+  g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
+
+  return GTK_NATIVE (gtk_widget_get_ancestor (widget, GTK_TYPE_NATIVE));
+}
+
 static void
 gtk_widget_real_direction_changed (GtkWidget        *widget,
                                    GtkTextDirection  previous_direction)
diff --git a/gtk/gtkwidget.h b/gtk/gtkwidget.h
index 0a9aee1dd3..9e3bde19e9 100644
--- a/gtk/gtkwidget.h
+++ b/gtk/gtkwidget.h
@@ -544,6 +544,9 @@ GtkWidget *           gtk_widget_get_parent             (GtkWidget    *widget);
 GDK_AVAILABLE_IN_ALL
 GtkRoot *             gtk_widget_get_root               (GtkWidget    *widget);
 
+GDK_AVAILABLE_IN_ALL
+GtkNative *           gtk_widget_get_native             (GtkWidget    *widget);
+
 GDK_AVAILABLE_IN_ALL
 void                  gtk_widget_set_child_visible      (GtkWidget    *widget,
                                                          gboolean      child_visible);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]