New function ltime() returns a struct tm of the current local time.
[u/mdw/putty] / unix / gtkdlg.c
index 63e5101..c774c8b 100644 (file)
@@ -152,6 +152,8 @@ static void dlg_init(struct dlgparam *dp)
     dp->coloursel_result.ok = FALSE;
     dp->treeitems = NULL;
     dp->window = dp->cancelbutton = dp->currtreeitem = NULL;
+    dp->flags = 0;
+    dp->currfocus = NULL;
 }
 
 static void dlg_cleanup(struct dlgparam *dp)
@@ -307,15 +309,18 @@ void dlg_listbox_clear(union control *ctrl, void *dlg)
 {
     struct dlgparam *dp = (struct dlgparam *)dlg;
     struct uctrl *uc = dlg_find_byctrl(dp, ctrl);
-    GtkContainer *cont;
 
     assert(uc->ctrl->generic.type == CTRL_EDITBOX ||
           uc->ctrl->generic.type == CTRL_LISTBOX);
     assert(uc->menu != NULL || uc->list != NULL);
 
-    cont = (uc->menu ? GTK_CONTAINER(uc->menu) : GTK_CONTAINER(uc->list));
-
-    gtk_container_foreach(cont, container_remove_and_destroy, cont);
+    if (uc->menu) {
+       gtk_container_foreach(GTK_CONTAINER(uc->menu),
+                             container_remove_and_destroy,
+                             GTK_CONTAINER(uc->menu));
+    } else {
+       gtk_list_clear_items(GTK_LIST(uc->list), 0, -1);
+    }
 }
 
 void dlg_listbox_del(union control *ctrl, void *dlg, int index)
@@ -371,7 +376,8 @@ void dlg_listbox_addwithid(union control *ctrl, void *dlg,
        gtk_container_add(GTK_CONTAINER(uc->menu), menuitem);
        gtk_widget_show(menuitem);
 
-       gtk_object_set_data(GTK_OBJECT(menuitem), "user-data", (gpointer)id);
+       gtk_object_set_data(GTK_OBJECT(menuitem), "user-data",
+                           GINT_TO_POINTER(id));
        gtk_signal_connect(GTK_OBJECT(menuitem), "activate",
                           GTK_SIGNAL_FUNC(menuitem_activate), dp);
     } else if (!uc->entry) {
@@ -433,7 +439,8 @@ void dlg_listbox_addwithid(union control *ctrl, void *dlg,
                            GTK_SIGNAL_FUNC(widget_focus), dp);
        gtk_signal_connect(GTK_OBJECT(listitem), "button_press_event",
                           GTK_SIGNAL_FUNC(listitem_button), dp);
-       gtk_object_set_data(GTK_OBJECT(listitem), "user-data", (gpointer)id);
+       gtk_object_set_data(GTK_OBJECT(listitem), "user-data",
+                           GINT_TO_POINTER(id));
     } else {
        /*
         * List item in a combo-box list, which means the sensible
@@ -445,7 +452,8 @@ void dlg_listbox_addwithid(union control *ctrl, void *dlg,
        gtk_container_add(GTK_CONTAINER(uc->list), listitem);
        gtk_widget_show(listitem);
 
-       gtk_object_set_data(GTK_OBJECT(listitem), "user-data", (gpointer)id);
+       gtk_object_set_data(GTK_OBJECT(listitem), "user-data",
+                           GINT_TO_POINTER(id));
     }
 
     dp->flags &= ~FLAG_UPDATING_COMBO_LIST;
@@ -467,7 +475,7 @@ int dlg_listbox_getid(union control *ctrl, void *dlg, int index)
     item = GTK_OBJECT(g_list_nth_data(children, index));
     g_list_free(children);
 
-    return (int)gtk_object_get_data(GTK_OBJECT(item), "user-data");
+    return GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(item), "user-data"));
 }
 
 /* dlg_listbox_index returns <0 if no single element is selected. */
@@ -486,6 +494,8 @@ int dlg_listbox_index(union control *ctrl, void *dlg)
 
     if (uc->menu)
        activeitem = gtk_menu_get_active(GTK_MENU(uc->menu));
+    else
+       activeitem = NULL;             /* unnecessarily placate gcc */
 
     children = gtk_container_children(GTK_CONTAINER(uc->menu ? uc->menu :
                                                    uc->list));
@@ -1935,7 +1945,8 @@ int get_listitemheight(void)
     return req.height;
 }
 
-int do_config_box(const char *title, Config *cfg, int midsession)
+int do_config_box(const char *title, Config *cfg, int midsession,
+                 int protcfginfo)
 {
     GtkWidget *window, *hbox, *vbox, *cols, *label,
        *tree, *treescroll, *panels, *panelvbox;
@@ -1964,7 +1975,7 @@ int do_config_box(const char *title, Config *cfg, int midsession)
     window = gtk_dialog_new();
 
     ctrlbox = ctrl_new_box();
-    setup_config_box(ctrlbox, &sl, midsession, 0);
+    setup_config_box(ctrlbox, &sl, midsession, cfg->protocol, protcfginfo);
     unix_setup_config_box(ctrlbox, midsession, window);
 
     gtk_window_set_title(GTK_WINDOW(window), title);
@@ -2288,7 +2299,7 @@ void verify_ssh_host_key(void *frontend, char *host, int port, char *keytype,
     static const char absenttxt[] =
        "The server's host key is not cached. You have no guarantee "
        "that the server is the computer you think it is.\n"
-       "The server's key fingerprint is:\n"
+       "The server's %s key fingerprint is:\n"
        "%s\n"
        "If you trust this host, press \"Accept\" to add the key to "
        "PuTTY's cache and carry on connecting.\n"
@@ -2302,7 +2313,7 @@ void verify_ssh_host_key(void *frontend, char *host, int port, char *keytype,
        "cached. This means that either the server administrator "
        "has changed the host key, or you have actually connected "
        "to another computer pretending to be the server.\n"
-       "The new key fingerprint is:\n"
+       "The new %s key fingerprint is:\n"
        "%s\n"
        "If you were expecting this change and trust the new key, "
        "press \"Accept\" to update PuTTY's cache and continue connecting.\n"
@@ -2322,7 +2333,7 @@ void verify_ssh_host_key(void *frontend, char *host, int port, char *keytype,
     if (ret == 0)                     /* success - key matched OK */
        return;
 
-    text = dupprintf((ret == 2 ? wrongtxt : absenttxt), fingerprint);
+    text = dupprintf((ret == 2 ? wrongtxt : absenttxt), keytype, fingerprint);
 
     ret = messagebox(GTK_WIDGET(get_window(frontend)),
                     "PuTTY Security Alert", text,
@@ -2341,22 +2352,19 @@ void verify_ssh_host_key(void *frontend, char *host, int port, char *keytype,
 }
 
 /*
- * Ask whether the selected cipher is acceptable (since it was
+ * Ask whether the selected algorithm is acceptable (since it was
  * below the configured 'warn' threshold).
- * cs: 0 = both ways, 1 = client->server, 2 = server->client
  */
-void askcipher(void *frontend, char *ciphername, int cs)
+void askalg(void *frontend, const char *algtype, const char *algname)
 {
     static const char msg[] =
-       "The first %scipher supported by the server is "
+       "The first %s supported by the server is "
        "%s, which is below the configured warning threshold.\n"
        "Continue with connection?";
     char *text;
     int ret;
 
-    text = dupprintf(msg, (cs == 0) ? "" :
-                     (cs == 1) ? "client-to-server " : "server-to-client ",
-                     ciphername);
+    text = dupprintf(msg, algtype, algname);
     ret = messagebox(GTK_WIDGET(get_window(frontend)),
                     "PuTTY Security Alert", text,
                     string_width("Continue with connection?"),
@@ -2411,11 +2419,11 @@ static void licence_clicked(GtkButton *button, gpointer data)
     char *title;
 
     char *licence =
-       "Copyright 1997-2003 Simon Tatham.\n\n"
+       "Copyright 1997-2005 Simon Tatham.\n\n"
 
        "Portions copyright Robert de Bath, Joris van Rantwijk, Delian "
        "Delchev, Andreas Schultz, Jeroen Massar, Wez Furlong, Nicolas "
-       "Barry, Justin Bradford, Ben Harris, and CORE SDI S.A.\n\n"
+       "Barry, Justin Bradford, Ben Harris, Malcolm Smith, and CORE SDI S.A.\n\n"
 
        "Permission is hereby granted, free of charge, to any person "
        "obtaining a copy of this software and associated documentation "
@@ -2491,7 +2499,7 @@ void about_box(void *window)
                       w, FALSE, FALSE, 5);
     gtk_widget_show(w);
 
-    w = gtk_label_new("Copyright 1997-2003 Simon Tatham. All rights reserved");
+    w = gtk_label_new("Copyright 1997-2005 Simon Tatham. All rights reserved");
     gtk_box_pack_start(GTK_BOX(GTK_DIALOG(aboutbox)->vbox),
                       w, FALSE, FALSE, 5);
     gtk_widget_show(w);
@@ -2715,21 +2723,20 @@ void *eventlogstuff_new(void)
     return es;
 }
 
-void logevent_dlg(void *estuff, char *string)
+void logevent_dlg(void *estuff, const char *string)
 {
     struct eventlog_stuff *es = (struct eventlog_stuff *)estuff;
 
     char timebuf[40];
-    time_t t;
+    struct tm tm;
 
     if (es->nevents >= es->negsize) {
        es->negsize += 64;
        es->events = sresize(es->events, es->negsize, char *);
     }
 
-    time(&t);
-    strftime(timebuf, sizeof(timebuf), "%Y-%m-%d %H:%M:%S\t",
-            localtime(&t));
+    tm=ltime();
+    strftime(timebuf, sizeof(timebuf), "%Y-%m-%d %H:%M:%S\t", &tm);
 
     es->events[es->nevents] = snewn(strlen(timebuf) + strlen(string) + 1, char);
     strcpy(es->events[es->nevents], timebuf);