Gtk+ is an event-driven toolkit. This means that the application sleeps in the main loop until something happens, after which the control is passed to the appropriate function.

The passing of control is implemented via signals. When a widget experiences an event, it emits a signal. Every signal is uniquely identified by name, but two different widgets may have the signal of the same name but different meaning. Signals are inherited by widgets from up the widget hierarchy, i.e. GtkButton will have all the signals that GtkWidget has.

Signals present a way to customize application's behavior according to the developer's needs and user's actions. Each signal has a default internal handler, but one or more custom handlers can be connected to a signal to initiate some sort of response.

For example, the 'OK' button (GtkButton) has the clicked signal that is emitted when the user clicks the button with the mouse. You may want to connect a custom handler to this signal in order to perform an action that the 'OK' button implies.