This tutorial will deal with the concept of signal handling in PHP-GTK 2 which
is an important and fundamental, since this is what makes your application
You might have noticed that at the end of every PHP-GTK 2 program we write
What this means is that an infinite loop is started which waits for
something to occur. Obviously you do not want to just create, display widgets
and quit! This loop is what keeps that from happening and is the key to keep
your application running. Conversely, the statement:
exits from that loop. We use this whenever we really want to stop our
First, it will be useful to define some terms that we will use frequently.
Action: This is something that occurs. For example, the user clicking on a
button counts as an action.
Signal: This is a notification generated whenever an event occurs. This is
the way your application knows that an action has just occurred.
Callback: A function or method that is invoked by some other piece of code.
Signal Handler: A callback that is invoked in response to a signal being
emitted. Here is where you place the code that will handle the signal.
Events: These are a continuous stream of impulses that communicate low-level
changes the environment of the underlying windowing system.
Signal handling basically consists of connecting a signal to its signal
handler, and of course, writing the signal handler itself. The job of
generating the signal whenever an action occurs is taken care by PHP-GTK 2.
Another thing to note is that signal generation does not guarantee that the
user has performed some action. It is possible to manually generate a
signal, and PHP-GTK 2 generates signals internally all the time.
A common instance of a signal being internally generated and used is when
GtkAdjustment emits the
"value-changed" for a
GtkProgressBar to use it. Hence, some signals have a
default handler already inbuilt, which will be executed whether or not you
manually connect a signal handler to that signal.
Most of the times however, if you want something to happen when a
signal is generated, you need to create a signal handler for it.