irondash_run_loop 0.6.0

Consistent, platform-independent interface to system run loop.
Documentation
#[allow(non_camel_case_types)]
pub mod glib {
    use std::os::raw::{c_int, c_uint, c_void};
    pub type gboolean = c_int;
    pub type gpointer = *mut c_void;
    pub type GSourceFunc = Option<unsafe extern "C" fn(gpointer) -> gboolean>;
    pub type GDestroyNotify = Option<unsafe extern "C" fn(gpointer)>;
    pub const GFALSE: c_int = 0;
    pub const GTRUE: c_int = 1;
    pub const G_SOURCE_REMOVE: gboolean = GFALSE;

    #[repr(C)]
    pub struct GSource(c_void);

    #[repr(C)]
    pub struct GMainContext(c_void);

    #[repr(C)]
    pub struct GMainLoop(c_void);

    #[link(name = "glib-2.0")]
    extern "C" {
        pub fn g_main_loop_new(context: *mut GMainContext, is_running: gboolean) -> *mut GMainLoop;
        pub fn g_main_loop_unref(loop_: *mut GMainLoop);
        pub fn g_main_loop_run(loop_: *mut GMainLoop);
        pub fn g_main_loop_quit(loop_: *mut GMainLoop);
        pub fn g_main_context_push_thread_default(context: *mut GMainContext);
        pub fn g_main_context_pop_thread_default(context: *mut GMainContext);

        pub fn g_timeout_source_new(interval: c_uint) -> *mut GSource;
        pub fn g_source_set_callback(
            source: *mut GSource,
            func: GSourceFunc,
            data: gpointer,
            notify: GDestroyNotify,
        );
        pub fn g_source_attach(source: *mut GSource, context: *mut GMainContext) -> c_uint;
        pub fn g_source_unref(source: *mut GSource);
        pub fn g_source_destroy(source: *mut GSource);
        pub fn g_main_context_find_source_by_id(
            context: *mut GMainContext,
            source_id: c_uint,
        ) -> *mut GSource;
        pub fn g_main_context_ref(context: *mut GMainContext) -> *mut GMainContext;
        pub fn g_main_context_unref(context: *mut GMainContext);
        pub fn g_main_context_invoke_full(
            context: *mut GMainContext,
            priority: c_int,
            function: GSourceFunc,
            data: gpointer,
            notify: GDestroyNotify,
        );
        pub fn g_main_context_default() -> *mut GMainContext;
        pub fn g_main_context_new() -> *mut GMainContext;
        pub fn g_main_context_get_thread_default() -> *mut GMainContext;
        pub fn g_main_context_is_owner(context: *mut GMainContext) -> gboolean;
    }
    #[link(name = "gtk-3")]
    extern "C" {
        pub fn gtk_main();
        pub fn gtk_main_iteration();
        pub fn gtk_main_quit();
    }
}

#[allow(non_camel_case_types)]
pub mod libc {
    extern "C" {
        pub fn pthread_self() -> usize;
    }
}