[gtk: 2/3] gtkmain: Add gtk_get_main_thread()



commit 2f181df1cf3d1738c112e06d31ccfb83c11d4f2a
Author: Philippe Normand <philn igalia com>
Date:   Fri Jun 8 18:10:59 2018 +0100

    gtkmain: Add gtk_get_main_thread()
    
    This utility function can be useful to know which thread was initialized for
    GTK+.

 gtk/gtkmain.c        | 17 +++++++++++++++++
 gtk/gtkmain.h        |  3 +++
 testsuite/gtk/main.c |  6 ++++++
 3 files changed, 26 insertions(+)
---
diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c
index f0bbb899e8..fd26bdef73 100644
--- a/gtk/gtkmain.c
+++ b/gtk/gtkmain.c
@@ -140,6 +140,7 @@ static guint gtk_main_loop_level = 0;
 static gint pre_initialized = FALSE;
 static gint gtk_initialized = FALSE;
 static GList *current_events = NULL;
+static GThread *initialized_thread = NULL;
 
 static GSList *main_loops = NULL;      /* stack of currently executing main loops */
 
@@ -774,6 +775,8 @@ gtk_init_check (void)
   do_pre_parse_initialization ();
   do_post_parse_initialization ();
 
+  initialized_thread = g_thread_self ();
+
   ret = gdk_display_open_default () != NULL;
 
   if (ret && (gtk_get_debug_flags () & GTK_DEBUG_INTERACTIVE))
@@ -898,6 +901,20 @@ gtk_is_initialized (void)
   return gtk_initialized;
 }
 
+/**
+ * gtk_get_main_thread:
+ *
+ * Get the thread from which GTK+ was initialized.
+ *
+ * Returns: (transfer none): The #GThread initialized for GTK+, must not be freed
+ */
+GThread *
+gtk_get_main_thread (void)
+{
+  return initialized_thread;
+}
+
+
 /**
  * gtk_get_locale_direction:
  *
diff --git a/gtk/gtkmain.h b/gtk/gtkmain.h
index 438e5985e0..b80da107d5 100644
--- a/gtk/gtkmain.h
+++ b/gtk/gtkmain.h
@@ -81,6 +81,9 @@ gboolean gtk_init_check           (void);
 GDK_AVAILABLE_IN_ALL
 gboolean gtk_is_initialized       (void);
 
+GDK_AVAILABLE_IN_ALL
+GThread * gtk_get_main_thread     (void);
+
 #ifdef G_OS_WIN32
 
 /* Variants that are used to check for correct struct packing
diff --git a/testsuite/gtk/main.c b/testsuite/gtk/main.c
index dc5e249069..727ae032bb 100644
--- a/testsuite/gtk/main.c
+++ b/testsuite/gtk/main.c
@@ -4,9 +4,15 @@
 static void
 test_init (void)
 {
+  GThread *self = g_thread_self ();
+
   g_assert (gtk_is_initialized () == FALSE);
+  g_assert (gtk_get_main_thread () == NULL);
+
   g_assert (gtk_init_check ());
   g_assert (gtk_is_initialized () == TRUE);
+
+  g_assert (gtk_get_main_thread () == self);
 }
 
 int


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