d162dfbe424e317de51074ce592b48a16d882d06
braney
  Fri Feb 17 15:22:05 2017 -0800
fix weird bug with right-click dialogs that don't set cart variables for
ui variables that didn't chage.

diff --git src/hg/hgTracks/bedTrack.c src/hg/hgTracks/bedTrack.c
index e4e02f2..2a04b27 100644
--- src/hg/hgTracks/bedTrack.c
+++ src/hg/hgTracks/bedTrack.c
@@ -46,57 +46,56 @@
     // If there is a name, use it by default, otherwise no label by default 
     if (track->bedSize > 3)
         slAddHead(&track->labelColumns, slIntNew(3));
     }
 else if (sameString(labelList->name, "none"))
     return;  // no label
 else
     {
     // what has the user said to use as a label
     char cartVar[1024];
     safef(cartVar, sizeof cartVar, "%s.label", track->tdb->track);
     struct hashEl *labelEl = cartFindPrefix(cart, cartVar);
     struct hash *onHash = newHash(4);
 
     // fill hash with fields that should be used for labels
-    if (labelEl == NULL) 
-        {
-        // there are no cart variables, so look for defaults
+    // first turn on all the fields that are in defaultLabelFields
     struct slPair *defaultLabelList = buildFieldList(track->tdb, "defaultLabelFields",  as);
     if (defaultLabelList != NULL)
         {
         for(; defaultLabelList; defaultLabelList = defaultLabelList->next)
             hashStore(onHash, defaultLabelList->name);
         }
     else
         // no default list, use first entry in labelFields as default
         hashStore(onHash, labelList->name);
-        }
-    else
-        {
-        // use cart variables to fill in onHash
+
+    // use cart variables to tweak the default-on hash
     for(; labelEl; labelEl = labelEl->next)
         {
+        /* the field name is after the <trackName>.label string */
+        char *fieldName = &labelEl->name[strlen(cartVar) + 1];
+
         if (sameString((char *)labelEl->val, "1"))
-                hashStore(onHash, &labelEl->name[strlen(cartVar) + 1]);
-            }
+            hashStore(onHash, fieldName);
+        else if (sameString((char *)labelEl->val, "0"))
+            hashRemove(onHash, fieldName);
         }
 
     struct slPair *thisLabel = labelList;
     for(; thisLabel; thisLabel = thisLabel->next)
         {
-        
         if (hashLookup(onHash, thisLabel->name))
             {
             // put this column number in the list of columns to use to make label
             slAddHead(&track->labelColumns, slIntNew(ptToInt(thisLabel->val)));
             }
         }
     slReverse(&track->labelColumns);
     }
 }
 
 void loadSimpleBed(struct track *tg)
 /* Load the items in one track - just move beds in
  * window... */
 {
 struct bed *(*loader)(char **row);