/* **gcc -Wall --pedantic-errors -o hello hello.c `pkg-config --cflags --libs gtk+-2.0` */ #include GdkPixbuf *image[3]; static gboolean button_hover(GtkWidget *widget, GdkEvent *event, gpointer user_data) { gtk_button_set_image(GTK_BUTTON(widget), gtk_image_new_from_pixbuf(image[2])); return(TRUE); } static gboolean button_unhover(GtkWidget *widget, GdkEvent *event, gpointer user_data) { gtk_button_set_image(GTK_BUTTON(widget), gtk_image_new_from_pixbuf(image[0])); return(TRUE); } static void button_pressed(GtkWidget *widget, gpointer data) { gtk_button_set_image(GTK_BUTTON(widget), gtk_image_new_from_pixbuf(image[1])); } static void button_released(GtkWidget *widget, gpointer data) { gtk_button_set_image(GTK_BUTTON(widget), gtk_image_new_from_pixbuf(image[2])); } static gboolean delete_event(GtkWidget *widget, GdkEvent *event, gpointer data) { g_print("delete event occurred\n"); return(FALSE); } static void destroy(GtkWidget *widget, gpointer data) { g_print("destroy event occured\n"); gtk_main_quit(); } static void load_images() { image[0] = gdk_pixbuf_new_from_file("firefox-newlogo.png", NULL); image[1] = gdk_pixbuf_new_from_file("firefox.png", NULL); image[2] = gdk_pixbuf_new_from_file("firefox-old.png", NULL); } int main(int argc, char *argv[]) { GtkWidget *window; GtkWidget *button; GtkWidget *Exit_button; GtkWidget *vbox; GtkWidget *hbox; gtk_init(&argc, &argv); load_images(); /* Setting the window */ window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW (window), "Hello test"); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(delete_event), NULL); g_signal_connect (G_OBJECT(window), "destroy", G_CALLBACK(destroy), NULL); gtk_container_set_border_width(GTK_CONTAINER(window), 10); /* The two buttons */ button = gtk_button_new(); gtk_button_set_image(GTK_BUTTON(button), gtk_image_new_from_pixbuf(image[0])); gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); g_signal_connect(G_OBJECT(button), "enter-notify-event",G_CALLBACK (button_hover), NULL); g_signal_connect(G_OBJECT(button), "leave-notify-event",G_CALLBACK (button_unhover), NULL); g_signal_connect(G_OBJECT(button), "button-press-event",G_CALLBACK (button_pressed), NULL); g_signal_connect(G_OBJECT(button), "button-release-event",G_CALLBACK (button_released), NULL); Exit_button = gtk_button_new_with_label("Exit"); g_signal_connect(G_OBJECT(Exit_button), "button-press-event", G_CALLBACK(destroy), window); /* Adding the buttons to the box */ vbox = gtk_vbox_new(FALSE, 10); hbox = gtk_hbox_new(FALSE, 10); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(button), FALSE, FALSE, 1); gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(hbox), FALSE, FALSE, 1); hbox = gtk_hbox_new(FALSE, 10); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(Exit_button), FALSE, FALSE, 1); gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(hbox), FALSE, FALSE, 1); gtk_container_add(GTK_CONTAINER(window), vbox); /* Displaying all widgets */ gtk_widget_show_all(window); gtk_main(); return(0); }