/* Triviální program využívající toolkit GTK. Zobrazí okno s tlačítkem, po * kliknutí na tlačítko skončí. */ /* Hlavičkový soubor GTK */ #include /* Callback funkce pro událost "delete_event". Návratová hodnota FALSE způsobí * vygenerování signálu "destroy". TRUE znamená, že okno nemá být zrušeno. * Obecně FALSE znamená, že událost se má dále propagovat, TRUE, že byla * obsloužena a neměla by se propagovat. */ static gint delete_event(GtkWidget *widget, GdkEvent *event, gpointer data) { g_print("delete event occurred\n"); return TRUE; } /* Callback pro signál "destroy". Funkce gtk_widget_destroy(), která pošle * tento signál, zruší okno. My ještě musíme zajistit ukončení smyčky pro * zpracování událostí. */ static void destroy(GtkWidget *widget, gpointer data) { gtk_main_quit(); } /* Callback pro "clicked" */ static void hello(GtkWidget *widget, gpointer data) { g_print("Hello World\n"); } int main(int argc, char *argv[]) { GtkWidget *window; /* Top-level okno */ GtkWidget *button; /* Tlačítko v okně */ /* Initializace okenního systému atoolkitu, zpracování standardních * přepínačŮ GTK: * --gtk-module * --g-fatal-warnings * --gtk-debug * --gtk-no-debug * --gdk-debug * --gdk-no-debug * --display * --sync * --no-xshm * --name * --class */ gtk_init(&argc, &argv); /* Vytvořit okno */ window = gtk_window_new(GTK_WINDOW_TOPLEVEL); /* Callback funkce delete_event() se bude volat po přijetí GTK události * "delete_event", typicky vygenerované window managerem. */ g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(delete_event), NULL); /* Napojení callbacku destroy() na GTK signál "destroy". Tento signál * je důsledkem gtk_window_destroy() nebo vrácení FALSE z callbacku pro * "delete_event". */ g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(destroy), NULL); /* Nastavení šířky okraje okna (oblasti, do které nebudou umísťovány * vložené widgety) */ gtk_container_set_border_width(GTK_CONTAINER(window), 10); /* Vytvoření tlačítka */ button = gtk_button_new_with_label("Hello World"); /* Volání funkce hello() při kliknutí na tlačítko */ g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(hello), NULL); /* Při kliknutí na tlačítko se zavolá gtk_widget_destroy(window). Více * callbacků napojených na stejný signál se volá v pořadí, v jakém byly * připojeny. */ g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK(gtk_widget_destroy), G_OBJECT(window)); /* Vložení tlačítka do hlavního okna */ gtk_container_add(GTK_CONTAINER(window), button); /* Zobrazení tlačítka (ve skutečnosti se objeví na obrazovce až po * zobrazení top-level okna) */ gtk_widget_show(button); /* Zobrazit hlavní okno. Obvykle se nejdřív volá gtk_widget_show() na * synovská okna, aby se obsah rodičovského okna vykreslil, až když je * uvnitř vše připraveno. */ gtk_widget_show(window); /* Hlavní smyčka pro zpracování událostí */ gtk_main(); /* Konec */ return 0; }