Colin's const-fixing Patch Of Death. Seems to build fine on Windows
[u/mdw/putty] / unix / gtkdlg.c
index 000fe04..a9383e7 100644 (file)
@@ -307,15 +307,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)
@@ -486,6 +489,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));
@@ -1964,7 +1969,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);
     unix_setup_config_box(ctrlbox, midsession, window);
 
     gtk_window_set_title(GTK_WINDOW(window), title);
@@ -2715,7 +2720,7 @@ 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;
 
@@ -2739,3 +2744,31 @@ void logevent_dlg(void *estuff, char *string)
     }
     es->nevents++;
 }
+
+int askappend(void *frontend, Filename filename)
+{
+    static const char msgtemplate[] =
+       "The session log file \"%.*s\" already exists. "
+       "You can overwrite it with a new session log, "
+       "append your session log to the end of it, "
+       "or disable session logging for this session.";
+    char *message;
+    char *mbtitle;
+    int mbret;
+
+    message = dupprintf(msgtemplate, FILENAME_MAX, filename.path);
+    mbtitle = dupprintf("%s Log to File", appname);
+
+    mbret = messagebox(get_window(frontend), mbtitle, message,
+                      string_width("LINE OF TEXT SUITABLE FOR THE"
+                                   " ASKAPPEND WIDTH"),
+                      "Overwrite", 'o', 1, 2,
+                      "Append", 'a', 0, 1,
+                      "Disable", 'd', -1, 0,
+                      NULL);
+
+    sfree(message);
+    sfree(mbtitle);
+
+    return mbret;
+}