Unifix knowledge database - The original one

Dashboard - News - Search - List - About - Admin


GTK hello world in C (Not with Glade)

Author:ino - Sun Apr 3 16:57:42 2005

#include <gtk/gtk.h>

/* 
 * This is a callback function. The data arguments are ignored
 * in this example. More on callbacks below 
 */

static void hello(GtkWidget *widget, gpointer data){
	g_print("Hello World\n");
};

static gboolean delete_event(GtkWidget *widget, GdkEvent *event, gpointer data){
	/* If your return FALSE in the "delete_event" signal handler,
	 * GTK will emit the "destroy" signal. Returning TRUE means
	 * you don't want the window to be destroyed.
	 * This is useful for popping up 'are you sure you want to quit?'
	 * type dialogs.
	 */

	g_print("delete event occurred\n");

	/* Change TRUE to FALSE and the main window will be destroyed with
	 * a "delete_event".
	 */

	return TRUE;
};

/* Another callback */
static void destroy(GtkWidget *widget, gpointer data){
	gtk_main_quit();
};

/* And now the main :D */
int main(int argc, char *argv[]){
	/* GTkWidget is the storage type for widgets */
	GtkWidget *window;
	GtkWidget *button;
	
	/* This is called in all GTK applications. Arguments are parsed
	 * from the command line and are returned to the application.
	 */
	gtk_init(&argc, &argv);

	/* create a new window */
	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

	/* When the window is given the "delete_event" signal (this is given
	 * by the window manager, usally by the "close" opion, or on the
	 * titlebar), we ask it to call the delete_event() function
	 * as defined above. The data passed to the callback
	 * function is NULL and is ignored in the callback function.
	 */
	g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(delete_event), NULL);

	/* Here we connect the "destroy" event to a signal handler.
	 * This event occurs when we call gtk_widget_destroy() on the window,
	 * or if we return FALSE in the "delete_event" callback.
	 */
	g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(destroy), NULL);

	/* Sets the border with of the window. */
	gtk_container_set_border_width(GTK_CONTAINER(window), 10);

	/* Creates a new button with the label "Hello World". */
	button = gtk_button_new_with_label("Hello World");
	
	/* When the button receives the "clicked" signal, it will call the
	 * function hello() passing it NULL ad its argument. The hello()
	 * function is defined above. */
	g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(hello), NULL);

	/* This will cause the window th be destroyed by calling
	 * gtk_widget_destroy(window) when "clicked". Agin the destroy
	 * signal could come from here, or the window manager. */
	g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK(gtk_widget_destroy), G_OBJECT(window));
	
	/* This packs the button into the window(a gtk container). */
	gtk_container_add(GTK_CONTAINER(window), button);
	
	/* This final step is to display this newly created widget. */
	gtk_widget_show(button);

	/* and the window */
	gtk_widget_show(window);

	/* All GTK applications must have a gtk_main(). Control ends here
	 * and waits for an event to occur (like a key press or
	 * mouse event).
	 */
	gtk_main();

	return 0;
};

/*
 *  Compile: gcc helloworld.c -o helloworld `pkg-config --cflags --libs gtk+-2.0`
 */
Copyright(c) Unifix.org 2002-2011


Dashboard - News - Search - List - About - Admin
 
Powered by Mikjaer Consulting Solutions - Hosted by Specialhosting.dk