## Library Initialization

Library Initialization — Perform general initialization with limited argument parsing.

## Synopsis

                        GskInitInfo;
    void                gsk_init_info_get_defaults          (GskInitInfo *info);
    void                gsk_init                            (int *argc,
                                                             char ***argv,
                                                             GskInitInfo *info);
    void                gsk_init_without_threads            (int *argc,
                                                             char ***argv);
    #define             gsk_init_get_support_threads        ()
    void                gsk_init_info_parse_args            (GskInitInfo *in_out,
                                                             int *argc,
                                                             char ***argv);
    void                gsk_init_raw                        (GskInitInfo *info);
    extern              _GskInitFlags gsk_init_flags;
    extern              gpointer gsk_main_thread;

## Description

Almost always one run `gsk_init()` at the top of main and forgets about it. But sometimes you wish to separate the parsing and the initialization so these routines give you more fine-grained control, by separating the parsing into `gsk_init_info_parse_args()` and the real initialization into `gsk_init_raw()`.

## Details

### GskInitInfo

    typedef struct {
      char *prgname;
      guint needs_threads : 1;
    } GskInitInfo;

Information about how to initialize GSK.

char *`prgname`; | The name of the program, may be NULL.
guint `needs_threads` : 1; | Whether the program needs threads. True by default.

### gsk_init_info_get_defaults ()

    void                gsk_init_info_get_defaults          (GskInitInfo *info);

Obtain the default initialization information. This should be run before `gsk_init()` or `gsk_init_info_parse_args()`.

This API has been deprecated for public use, because it doesn't allow us to expand GskInitInfo without breaking binary-compatibility.

Use `gsk_init_info_new()` instead.

`info` : | the GskInitInfo to fill.

### gsk_init ()

    void                gsk_init                            (int *argc,
                                                             char ***argv,
                                                             GskInitInfo *info);

Initialize the GSK library.

`argc` : | a reference to `main()`'s argc; this will be decreased if arguments are parsed out of the argument array.
`argv` : | a reference to `main()`'s argc; this may have arguments removed.
`info` : | the GskInitInfo to use as hints, which will be filled with the actual initialization information used. If NULL, default initialization parameters will be used.

### gsk_init_without_threads ()

    void                gsk_init_without_threads            (int *argc,
                                                             char ***argv);

Initialize the GSK library indicating that you will not use threads.

`argc` : | a reference to `main()`'s argc; this will be decreased if arguments are parsed out of the argument array.
`argv` : | a reference to `main()`'s argc; this may have arguments removed.

### gsk_init_get_support_threads()

    #define             gsk_init_get_support_threads()

Ascertain whether thread support is necessary.

### gsk_init_info_parse_args ()

    void                gsk_init_info_parse_args            (GskInitInfo *in_out,
                                                             int *argc,
                                                             char ***argv);

Parse/modify arguments and return their values in `in_out`.

The only currently supported argument is --gsk-debug=FLAGS.

`in_out` : | the GskInitInfo to fill.
`argc` : | the argument count (may be modified)
`argv` : | the arguments (may be modified)

### gsk_init_raw ()

    void                gsk_init_raw                        (GskInitInfo *info);

Initialize GSK.

`info` : | information to use for initializing.

### gsk_init_flags

    extern _GskInitFlags gsk_init_flags;

Flags given to `gsk_init()`.

### gsk_main_thread

    extern gpointer gsk_main_thread;