Index: gtk2_ardour/time_axis_view.cc
===================================================================
--- gtk2_ardour/time_axis_view.cc	(revision 1114)
+++ gtk2_ardour/time_axis_view.cc	(working copy)
@@ -374,7 +374,38 @@
 TimeAxisView::name_entry_key_release (GdkEventKey* ev)
 {
 	switch (ev->keyval) {
+	case GDK_Escape:
+		name_entry.select_region (0,0);
+		controls_ebox.grab_focus ();
+		name_entry_changed ();
+		return true;
 	case GDK_Tab:
+	case GDK_ISO_Left_Tab:
+		name_entry_changed ();
+		PublicEditor::TrackViewList *allviews = editor.get_valid_views (NULL);
+		if (allviews) {
+			PublicEditor::TrackViewList::iterator i = find (allviews->begin(), allviews->end(), this);
+			if (i != allviews->end()) {
+				if(ev->keyval == GDK_ISO_Left_Tab) { 
+					/* Shift+Tab pressed, go to previous visible entry... */
+					while (i-- != allviews->begin()) {
+						if ((*i != NULL) && !((*i)->hidden())) {
+							(*i)->name_entry.grab_focus();
+							break;
+						}
+					}
+				} else {
+					/* Tab pressed, go to next visible entry... */
+					while (++i != allviews->end()) {
+						if ((*i != NULL) && !((*i)->hidden())) {
+							(*i)->name_entry.grab_focus();
+							break;
+						}
+					}
+				}
+			}
+		}
+		return true;
 	case GDK_Up:
 	case GDK_Down:
 		name_entry_changed ();
@@ -424,6 +455,7 @@
 	last_name_entry_key_press_event = 0;
 	name_entry_key_timeout.disconnect ();
 	name_entry.set_name ("EditorTrackNameDisplay");
+	name_entry.select_region (0,0);
 	
 	/* do the real stuff */
 
