前回作成したプログラムは何もしないプログラム、すなわち終了しないプログラムでした。これでは具合が悪いので、今回はウインドウが閉じたときに終了するプログラムにします。
下のプログラムは前回のプログラムとあまりかわりませんが、多少追加した部分があります。その部分は註釈で示します。
#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」をつかうことによって、ウインドウを閉じる前に確認メッセージを表示するなどの動作を指定することができます。