Fix sorting of saved sessions list box so Default Settings is back at
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Fri, 6 Oct 2000 16:19:44 +0000 (16:19 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Fri, 6 Oct 2000 16:19:44 +0000 (16:19 +0000)
the top of the list instead of being filed under D

git-svn-id: svn://svn.tartarus.org/sgt/putty@686 cda61777-01e9-0310-a592-d414129be87e

settings.c
windlg.c

index 6204227..1bbf6fb 100644 (file)
@@ -280,6 +280,21 @@ void do_defaults (char *session, Config *cfg) {
        load_settings ("Default Settings", FALSE, cfg);
 }
 
+static int sessioncmp(const void *av, const void *bv) {
+    const char *a = *(const char *const *)av;
+    const char *b = *(const char *const *)bv;
+
+    /*
+     * Alphabetical order, except that "Default Settings" is a
+     * special case and comes first.
+     */
+    if (!strcmp(a, "Default Settings"))
+        return -1;                     /* a comes first */
+    if (!strcmp(b, "Default Settings"))
+        return +1;                     /* b comes first */
+    return strcmp(a, b);               /* otherwise, compare normally */
+}
+
 void get_sesslist(int allocate) {
     static char otherbuf[2048];
     static char *buffer;
@@ -311,24 +326,23 @@ void get_sesslist(int allocate) {
        buffer[buflen] = '\0';
 
        p = buffer;
-       nsessions = 1;                 /* "Default Settings" counts as one */
+       nsessions = 0;
        while (*p) {
-           if (strcmp(p, "Default Settings"))
-               nsessions++;
+            nsessions++;
            while (*p) p++;
            p++;
        }
 
        sessions = smalloc(nsessions * sizeof(char *));
-       sessions[0] = "Default Settings";
        p = buffer;
-       i = 1;
+       i = 0;
        while (*p) {
-           if (strcmp(p, "Default Settings"))
-               sessions[i++] = p;
+            sessions[i++] = p;
            while (*p) p++;
            p++;
        }
+
+        qsort(sessions, i, sizeof(char *), sessioncmp);
     } else {
        sfree (buffer);
        sfree (sessions);
index b2f46be..7cae7e6 100644 (file)
--- a/windlg.c
+++ b/windlg.c
@@ -568,7 +568,7 @@ static void sesssaver(struct ctlpos *cp, char *text,
     cp->ypos += y + GAPBETWEEN;
     doctl(cp, r, "LISTBOX",
           WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL | 
-          LBS_STANDARD | LBS_HASSTRINGS,
+          LBS_NOTIFY | LBS_HASSTRINGS,
           WS_EX_CLIENTEDGE,
           "", listid);
 }