ウィンドウにtuxを表示させる

GTK+を用いたプログラミングの基本的な手法を組み合わせて
ウィンドウにtuxを表示させるプログラムを作って見ました。
ウェブアプリは簡単にさまざまなことができて確かに楽しいですが、
やはりローカル環境でスタンドアロンで動くGTK+のCプログラミングも奥が深くて面白いですね。

//showtux.c
#include<gtk/gtk.h>

// gtk_main_quit()を呼び出すコールバック関数を作成
// typedef void* gpointer
static void button_clicked(GtkWidget *button, gpointer user_data)
{
gtk_main_quit();
}

// main関数
int main(int argc, char **argv)
{

//初期化
gtk_init(&argc, &argv);

//一番の土台となるwindowウェジェットの生成及び各種設定

//windowオブジェクトの生成
GtkWidget *window;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_set_size_request(window, 300, 400);

//ツールチップヒントの作成。
// typedef gchar char gchar
gchar *text;
// gchar* gstrdup(const gchar *str);
text = g_strdup("We love linux programming!!");
gtk_widget_set_tooltip_text(window, text);

//アイコンを設定する。
gtk_window_set_default_icon_from_file("./tux.png", NULL);

//以下のスコープで画像とボタンをのせるためのバッキンボックス(vbox)を作成し、
//windowウェジェットに貼り付ける
{
GtkWidget *vbox;
vbox = gtk_vbox_new(FALSE, 2);
gtk_container_add(GTK_CONTAINER(window), vbox);

//以下のスコープで画像とボタンのウェジェットを作成し、
//パッキンボックス(vbox)上に貼り付ける。
{
GtkWidget *image;
GtkWidget *button;

image = gtk_image_new_from_file("./tux.png");
//パッキンボックス(vbox)上に貼り付ける。
gtk_box_pack_start(GTK_BOX(vbox), image, TRUE, TRUE, 0);

button = gtk_button_new_with_label("Quit");
//パッキンボックス(vbox)上に貼り付ける。
gtk_box_pack_start(GTK_BOX(vbox), button , FALSE, FALSE, 0);
//ボタンに関しては、clicked動作に際して、冒頭に作成したbutton_clicked関数を
//コールバックするように設定。
//g_sginal_connect connects a GCallback function 
//    to a signal for a particular object
g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(button_clicked), NULL);
}
}

//windowを閉じられた時は、gtk_main_quitが呼び出されるようにする。
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
gtk_window_set_default_icon_from_file("tux.png", NULL);

//生成したすべてのウェジェットを可視化する。
gtk_widget_show_all(window);
//メインループの開始
gtk_main();
return 0;
}