前回作成したプログラムは何もしないプログラム、すなわち終了しないプログラムでした。これでは具合が悪いので、今回はウインドウが閉じたときに終了するプログラムにします。
下のプログラムは前回のプログラムとあまりかわりませんが、多少追加した部分があります。その部分は註釈で示します。
#include <gtk/gtk.h>
int main(int argc,char *argv[]){
GtkWidget *window;
gtk_init(&argc,&argv);
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_show(window);
/* ここから */
g_signal_connect(window,"destroy",gtk_main_quit,NULL);
/* ここまで */
gtk_main();
return 0;
}
ウインドウについている「閉じる」ボタンを押すと、プログラムが終了します。
追加した部分を説明します。
g_signal_connect(window,"destroy",gtk_main_quit,NULL);
オブジェクトに対してなにか動作があった場合、別の関数をつかう、というものです。オブジェクト名、動作、関数、関数の引数の順に引数をとります。
上の例では、windowが閉じた(destroyした)場合、gtk_main_quit()を使います。
windowが閉じたときのイベントだけでなく、ボタンを押したときのイベント、キーを押したときのイベントなども、このようにして使用します。
gtk_main_quit()は引数をとらず、gtk_main()のループを解除します。
なお、「閉じる」ボタンでウインドウを閉じるとき、「delete-event」、「destroy」の順番にイベントが進みます。今回の場合は、「destroy」の部分を「delete-event」にしても、動作はかわりませんが、「delete-event」をつかうことによって、ウインドウを閉じる前に確認メッセージを表示するなどの動作を指定することができます。