From: Philippe Normand Date: Fri, 8 Jun 2018 17:10:59 +0000 (+0100) Subject: gtkmain: Add gtk_get_main_thread() X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~22^2~183^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=2f181df1cf3d1738c112e06d31ccfb83c11d4f2a;p=gtk4.git gtkmain: Add gtk_get_main_thread() This utility function can be useful to know which thread was initialized for GTK+. --- 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