gtkmain: Add gtk_get_main_thread()

This utility function can be useful to know which thread was initialized for
GTK+.
This commit is contained in:
Philippe Normand 2018-06-08 18:10:59 +01:00
parent 542ad4fdc5
commit 2f181df1cf
3 changed files with 26 additions and 0 deletions

View File

@ -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:
*

View File

@ -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

View File

@ -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