/** hiding.c **/ #include void closeDialog(GtkWidget *widget,gpointer data); void showDialog(GtkWidget *widget,gpointer data); gint eventShutdown(GtkWidget *widget,gpointer data); typedef struct { GtkWidget *dialog; } hidingContext; int main(int argc,char *argv[]) { GtkWidget *topLevelWindow; GtkWidget *dialogButton; hidingContext context; context.dialog = NULL; gnome_init("hiding","1.0",argc,argv); topLevelWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_signal_connect(GTK_OBJECT(topLevelWindow), "destroy", GTK_SIGNAL_FUNC(eventShutdown), &context); gtk_container_set_border_width( GTK_CONTAINER(topLevelWindow),20); dialogButton = gtk_button_new_with_label("Dialog"); gtk_signal_connect(GTK_OBJECT(dialogButton), "clicked", GTK_SIGNAL_FUNC(showDialog), &context); gtk_container_add(GTK_CONTAINER(topLevelWindow), dialogButton); gtk_widget_show(dialogButton); gtk_widget_show(topLevelWindow); gtk_main(); exit(0); } gint eventShutdown(GtkWidget *widget,gpointer data) { hidingContext *context; context = (hidingContext *)data; if(context->dialog != NULL) gtk_widget_destroy(GTK_WIDGET(context->dialog)); gtk_main_quit(); return(0); } void showDialog(GtkWidget *widget,gpointer data) { GtkWidget *button; hidingContext *context; context = (hidingContext *)data; if(context->dialog == NULL) { context->dialog = gtk_window_new(GTK_WINDOW_DIALOG); button = gtk_button_new_with_label("Close Dialog"); gtk_container_set_border_width( GTK_CONTAINER(context->dialog),20); gtk_container_add(GTK_CONTAINER(context->dialog), button); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(closeDialog), context->dialog); gtk_window_set_modal(GTK_WINDOW(context->dialog), TRUE); gtk_widget_show(button); } gtk_widget_show(context->dialog); } void closeDialog(GtkWidget *widget,gpointer data) { gtk_widget_hide(GTK_WIDGET(data)); }