/** datacallback.c **/ #include typedef struct { GtkWidget *app; gchar defaultFilename[40]; gchar currentFilename[40]; } pgmContext; gint eventDelete(GtkWidget *widget, GdkEvent *event,gpointer data); gint eventDestroy(GtkWidget *widget, GdkEvent *event,gpointer data); void saveAsButton(GtkWidget *widget,pgmContext *pc); void setTermination(GtkWidget *app); void fileSaveCallback(gchar *filename,pgmContext *pc); int main(int argc,char *argv[]) { GtkWidget *button; pgmContext pc; strcpy(pc.defaultFilename,"/var/dcall/sqlim.dat"); gnome_init("datacallback","1.0",argc,argv); pc.app = gnome_app_new("datacallback","Data Passing"); setTermination(pc.app); button = gtk_button_new_with_label( "Save As"); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(saveAsButton), &pc); gnome_app_set_contents(GNOME_APP(pc.app),button); gtk_container_set_border_width( GTK_CONTAINER(pc.app),30); gtk_widget_show(button); gtk_widget_show(pc.app); gtk_main(); exit(0); } void saveAsButton(GtkWidget *widget,pgmContext *pc) { GtkWidget *dialog; dialog = gnome_request_dialog(FALSE, "File name", pc->defaultFilename, 40, (GnomeStringCallback)fileSaveCallback, pc, GTK_WINDOW(pc->app)); gtk_window_set_modal(GTK_WINDOW(dialog),TRUE); } void fileSaveCallback(gchar *filename,pgmContext *pc) { if((filename == NULL) || (strlen(filename) == 0)) return; strcpy(pc->currentFilename,filename); g_print("Save file as %s\n",pc->currentFilename); } void setTermination(GtkWidget *app) { gtk_signal_connect(GTK_OBJECT(app), "delete_event", GTK_SIGNAL_FUNC(eventDelete), NULL); gtk_signal_connect(GTK_OBJECT(app), "destroy", GTK_SIGNAL_FUNC(eventDestroy), NULL); } gint eventDelete(GtkWidget *widget, GdkEvent *event,gpointer data) { return(FALSE); } gint eventDestroy(GtkWidget *widget, GdkEvent *event,gpointer data) { gtk_main_quit(); return(0); }