19b8ccf38a2ce953f665b1abab447ad7a2b9b2cc
tdreszer
  Wed Nov 16 14:08:25 2011 -0800
Added cancel button for composite configuration.
diff --git src/hg/hgTrackUi/hgTrackUi.c src/hg/hgTrackUi/hgTrackUi.c
index 151636b..5b1d963 100644
--- src/hg/hgTrackUi/hgTrackUi.c
+++ src/hg/hgTrackUi/hgTrackUi.c
@@ -2768,30 +2768,38 @@
                 {
                 vis = tdbVisLimitedByAncestry(cart, tdb, TRUE);  // ajax popups should show currently inherited visability
                 if (tdbIsCompositeChild(tdb))
                     canPack = TRUE;
                 }
             else
                 vis = hTvFromString(cartUsualString(cart,tdb->track, hStringFromTv(vis))); // But hgTrackUi page should show local vis
             hTvDropDownClassVisOnlyAndExtra(tdb->track,vis,
                 canPack, "normalText visDD", trackDbSetting(tdb, "onlyVisibility"),
                                 (tdb->parent != NULL ?"onchange='return visTriggersHiddenSelect(this);'":NULL));
             }
     if (!ajax)
         {
         printf(" ");
         cgiMakeButton("Submit", "Submit");
+    #ifdef SUBTRACK_CFG
+        // Offer cancel button always?     // composites and multiTracks (not standAlones or supers)
+        if (tdbIsContainer(tdb))
+            {
+            printf(" ");
+            cgiMakeOnClickButton("window.history.back();","Cancel");
+            }
+    #endif///def SUBTRACK_CFG
 
         if(tdbIsComposite(tdb))
             printf("\n&nbsp;&nbsp;<a href='#' onclick='setVarAndPostForm(\"%s\",\"1\",\"mainForm\"); return false;'>Reset to defaults</a>\n",setting);
         }
 
     if (ct)
         {
         puts("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
         cgiMakeButton(CT_DO_REMOVE_VAR, "Remove custom track");
         cgiMakeHiddenVar(CT_SELECTED_TABLE_VAR, tdb->track);
         puts("&nbsp;");
         if (differentString(tdb->type, "chromGraph"))
             {
             char buf[256];
             if(ajax)