? gui.diff Index: Makefile =================================================================== RCS file: /usr/cvsroot/gastman/Makefile,v retrieving revision 1.2 diff -u -r1.2 Makefile --- Makefile 25 Mar 2003 19:45:15 -0000 1.2 +++ Makefile 27 May 2003 05:00:44 -0000 @@ -7,12 +7,32 @@ # # For GTK 1.2 # -GTKFLAGS=$(shell if [ -z "$(GTK2FLAGS)" ]; then echo `gtk12-config --cflags`; else echo $(GTK2FLAGS); fi) -GTKLIBS=$(shell if [ -z "$(GTK2LIBS)" ]; then echo `gtk12-config --libs`; else echo $(GTK2LIBS); fi) -#GTKFLAGS=$(shell gtk-config --cflags) -#GTKLIBS=$(shell gtk-config --libs) - -GLIBFLAGS=$(shell echo `glib12-config --cflags`) +GTKFLAGS=$(shell \ + if [ -z $(GTK2FLAGS) ]; then \ + if [ `which gtk12-config 2>/dev/null`="" ]; then \ + echo `gtk-config --cflags`; \ + else \ + echo `gtk12-config --cflags`; \ + fi \ + else \ + echo $(GTK2FLAGS); \ + fi) +GTKLIBS=$(shell \ + if [ -z "$(GTK2LIBS)" ]; then \ + if [ `which gtk12-config 2>/dev/null`="" ]; then \ + echo `gtk-config --cflags`; \ + else \ + echo `gtk12-config --libs`; \ + fi \ + else \ + echo $(GTK2LIBS); \ + fi) +GLIBFLAGS=$(shell \ + if [ `which glib12-config 2>/dev/null`="" ]; then \ + echo `glib-config --cflags 2>/dev/null`; \ + else \ + echo `glib12-config --cflags`; \ + fi) CFLAGS=-Wall -g $(GTKFLAGS) $(GLIBFLAGS) -Iinclude -DGTK_ENABLE_BROKEN LIBS=$(GTKLIBS) $(shell if [ -f /etc/master.passwd ]; then echo ""; else echo "-ldb "; fi) Index: gastman.c =================================================================== RCS file: /usr/cvsroot/gastman/gastman.c,v retrieving revision 1.3 diff -u -r1.3 gastman.c --- gastman.c 30 Mar 2003 20:35:24 -0000 1.3 +++ gastman.c 27 May 2003 05:00:44 -0000 @@ -1539,7 +1539,7 @@ strncpy(host, *argv, sizeof(host) - 1); if (strlen(host) || - (!gui_get_user_input("Enter hostname", "Enter the hostname you wish to connect to:", host, sizeof(host) - 1) && + (!gui_get_hostname(host, sizeof(host) - 1) && strlen(host))) { if (!login(host)) { manage_calls(host); Index: gastman.h =================================================================== RCS file: /usr/cvsroot/gastman/gastman.h,v retrieving revision 1.2 diff -u -r1.2 gastman.h --- gastman.h 30 Mar 2003 20:35:24 -0000 1.2 +++ gastman.h 27 May 2003 05:00:44 -0000 @@ -45,6 +45,7 @@ int gui_set_icon(int nformat); int gui_status(char *str); int gui_get_user_input(char *title, char *msg, char *buf, int buflen); +int gui_get_hostname(char *buf, int buflen); int gui_link(struct gui_object *obj1, struct gui_object *obj2); int gui_unlink(struct gui_object *obj1, struct gui_object *obj2); int gui_show_chan_menu(void); Index: gui.c =================================================================== RCS file: /usr/cvsroot/gastman/gui.c,v retrieving revision 1.3 diff -u -r1.3 gui.c --- gui.c 30 Mar 2003 20:35:24 -0000 1.3 +++ gui.c 27 May 2003 05:00:46 -0000 @@ -28,6 +28,10 @@ #include #include #include +#include +#include +#include +#include #include #include #include @@ -834,7 +838,7 @@ int gui_init(int *argc, char **argv[]) { char *fn = loc_file(); - int res; + int res = 0; if (fn) { #ifdef __FreeBSD__ if (!(db = dbopen(fn, O_CREAT | O_RDWR, 0664, DB_BTREE, NULL))) { @@ -852,7 +856,7 @@ } gtk_init(argc, argv); srand(time(NULL)); - return 0; + return res; } void dialog_answer(GtkWidget *widget, gpointer data) @@ -866,6 +870,7 @@ } static GtkWidget *entry; +static GtkWidget *combo; static char *outmsg; static int outmsglen; void entry_answer(GtkWidget *widget, gpointer data) @@ -879,6 +884,21 @@ dialog = NULL; } +void combo_answer(GtkWidget *widget, gpointer data) +{ + GtkCombo *combo2 = GTK_COMBO(combo); + choice = (int)(long)data; + if (!choice) { + char *extra; + strncpy(outmsg, gtk_entry_get_text(GTK_ENTRY(combo2->entry)), outmsglen - 1); + if ((extra = strstr(outmsg, " ("))) + extra[0] = '\0'; + } else + strcpy(outmsg, ""); + gtk_widget_destroy(dialog); + dialog = NULL; +} + static char lastcmd[512]; void command_ready(GtkWidget *widget, gpointer data) @@ -942,6 +962,108 @@ gtk_main_iteration_do(1); if (window) gtk_widget_set_sensitive(window, TRUE); + return choice; +} + +int gui_get_hostname(char *buf, int buflen) +{ + GtkWidget *button; + GtkWidget *tw; + GtkWidget *vbox, *hbox; + GtkWidget *icon; + GList *list = NULL; + char *rtext = "GAstman: Select hostname"; + int x; + int choices = 2; + DIR *gastman_dir; + struct dirent *gastman_dirent; + static char fn[256]; + + snprintf(fn, sizeof(fn), "%s" G_DIR_SEPARATOR_S ".gastman", gui_get_home_dir()); + gastman_dir = opendir(fn); + while (( gastman_dirent = readdir(gastman_dir) )) { + char *thedot; + if ( gastman_dirent->d_name[0] == '.' ) + continue; + if (( thedot = strstr(gastman_dirent->d_name, ".extens") )) { + char *copy; + struct hostent *hostent; + + thedot[0] = '\0'; + if ((hostent = gethostbyname(gastman_dirent->d_name))) { + struct in_addr addr; + memcpy(&addr, hostent->h_addr_list[0], sizeof(addr)); + if (strcmp(inet_ntoa(addr), gastman_dirent->d_name)) { + copy = alloca(strlen(gastman_dirent->d_name) + strlen(inet_ntoa(addr)) + 4); + if (copy) { + sprintf(copy, "%s (%s)", gastman_dirent->d_name, inet_ntoa(addr)); + list = g_list_append(list, copy); + } + } else { + copy = alloca(strlen(gastman_dirent->d_name) + 1); + if (copy) { + strcpy(copy, gastman_dirent->d_name); + list = g_list_append(list, copy); + } + } + } else { + copy = alloca(strlen(gastman_dirent->d_name) + 1); + if (copy) { + strcpy(copy, gastman_dirent->d_name); + list = g_list_append(list, copy); + } + } + } + } + closedir(gastman_dir); + + dialog = gtk_dialog_new(); + tw = gtk_label_new("Select or enter the hostname you wish to connect to:"); + gtk_window_set_title(GTK_WINDOW(dialog), rtext); + gtk_widget_realize(dialog); + fix_icon(dialog->window); + gtk_widget_show(tw); + vbox = gtk_vbox_new(FALSE, 0); + hbox = gtk_hbox_new(FALSE, 0); + icon = make_pixmap_from_data(dialog, inkwell_xpm); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox), icon, FALSE, FALSE, 10); + gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 10); + gtk_box_pack_start(GTK_BOX(vbox), tw, TRUE, TRUE, 15); + gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), 10); + combo = gtk_combo_new(); + gtk_combo_set_case_sensitive(GTK_COMBO(combo), FALSE); + gtk_combo_set_value_in_list(GTK_COMBO(combo), FALSE, FALSE); + gtk_combo_set_use_arrows(GTK_COMBO(combo), TRUE); + gtk_combo_set_use_arrows_always(GTK_COMBO(combo), TRUE); + gtk_combo_set_popdown_strings(GTK_COMBO(combo), list); + gtk_box_pack_start(GTK_BOX(vbox), combo, FALSE, FALSE, 5); + /* gtk_signal_connect(GTK_OBJECT(GTK_COMBO(combo)), "activate", GTK_SIGNAL_FUNC(combo_answer), (gpointer)(long)0); */ + choice = -1; + + for (x=0;xaction_area), button, FALSE, FALSE, 10); + } + gtk_widget_grab_focus(combo); + if (window) + gtk_widget_set_sensitive(window, FALSE); + outmsg = buf; + outmsglen = buflen; + gtk_window_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); + gtk_widget_show_all(dialog); + /* Block as long as dialog is here */ + while(dialog) + gtk_main_iteration_do(1); + if (window) + gtk_widget_set_sensitive(window, TRUE); + + /* Clean up associated memory */ + g_list_free(list); + return choice; }