69 lines
2.2 KiB
Markdown
69 lines
2.2 KiB
Markdown
|
Title: Initializing GTK
|
|||
|
|
|||
|
## Library initialization and main loop
|
|||
|
|
|||
|
Before using GTK, you need to initialize it using [func@Gtk.init]; this
|
|||
|
connects to the windowing system, sets up the locale and performs other
|
|||
|
initialization tasks. [func@Gtk.init] exits the application if errors occur;
|
|||
|
to avoid this, you can use [func@Gtk.init_check], which allows you to recover
|
|||
|
from a failed GTK initialization; for instance, you might start up your
|
|||
|
application in text mode instead.
|
|||
|
|
|||
|
Like most GUI toolkits, GTK uses an event-driven programming model. When the
|
|||
|
application is doing nothing, GTK sits in the “main loop” and waits for input.
|
|||
|
If the user performs some action - say, a mouse click - then the main loop
|
|||
|
“wakes up” and delivers an event to GTK. GTK forwards the event to one or
|
|||
|
more widgets.
|
|||
|
|
|||
|
When widgets receive an event, they frequently emit one or more “signals”.
|
|||
|
Signals notify your program that "something interesting happened" by invoking
|
|||
|
functions you’ve connected to the signal with `g_signal_connect()`. Functions
|
|||
|
connected to a signal are often called “callbacks”.
|
|||
|
|
|||
|
When your callbacks are invoked, you would typically take some action - for
|
|||
|
example, when an Open button is clicked you might display a [class@Gtk.FileChooserDialog].
|
|||
|
After a callback finishes, GTK will return to the main loop and await more
|
|||
|
user input.
|
|||
|
|
|||
|
### The `main()` function for a simple GTK application
|
|||
|
|
|||
|
```c
|
|||
|
int
|
|||
|
main (int argc, char **argv)
|
|||
|
{
|
|||
|
GtkWidget *window;
|
|||
|
// Initialize i18n support with bindtextdomain(), etc.
|
|||
|
|
|||
|
// ...
|
|||
|
|
|||
|
// Initialize the widget set
|
|||
|
gtk_init ();
|
|||
|
|
|||
|
// Create the main window
|
|||
|
window = gtk_window_new ();
|
|||
|
|
|||
|
// Set up our GUI elements
|
|||
|
|
|||
|
// ...
|
|||
|
|
|||
|
// Show the application window
|
|||
|
gtk_window_present (GTK_WINDOW (window));
|
|||
|
|
|||
|
// Enter the main event loop, and wait for user interaction
|
|||
|
while (!done)
|
|||
|
g_main_context_iteration (NULL, TRUE);
|
|||
|
|
|||
|
// The user lost interest
|
|||
|
return 0;
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
It's important to note that if you use [class@Gtk.Application], the
|
|||
|
application class will take care of initializing GTK for you, as well
|
|||
|
as spinning the main loop.
|
|||
|
|
|||
|
### See also
|
|||
|
|
|||
|
- the GLib manual, especially `GMainLoop`
|
|||
|
- signal-related functions, such as `g_signal_connect()` in GObject
|