+ visible_cell->signal_toggled().connect (sigc::mem_fun (*this, &EditorRoutes::visible_changed));
+
+ TreeViewColumn* visible_col = dynamic_cast<TreeViewColumn*> (_display.get_column (_visible_column));
+ visible_col->set_expand(false);
+ visible_col->set_sizing(TREE_VIEW_COLUMN_FIXED);
+ visible_col->set_fixed_width(30);
+ visible_col->set_alignment(ALIGN_CENTER);
+
+ CellRendererToggle* active_cell = dynamic_cast<CellRendererToggle*> (_display.get_column_cell_renderer (_active_column));
+
+ active_cell->property_activatable() = true;
+ active_cell->property_radio() = false;
+ active_cell->signal_toggled().connect (sigc::mem_fun (*this, &EditorRoutes::active_changed));
+
+ TreeViewColumn* active_col = dynamic_cast<TreeViewColumn*> (_display.get_column (_active_column));
+ active_col->set_expand (false);
+ active_col->set_sizing (TREE_VIEW_COLUMN_FIXED);
+ active_col->set_fixed_width (30);
+ active_col->set_alignment (ALIGN_CENTER);
+
+ _model->signal_row_deleted().connect (sigc::mem_fun (*this, &EditorRoutes::route_deleted));
+ _model->signal_rows_reordered().connect (sigc::mem_fun (*this, &EditorRoutes::reordered));
+
+ _display.signal_button_press_event().connect (sigc::mem_fun (*this, &EditorRoutes::button_press), false);
+ _scroller.signal_key_press_event().connect (sigc::mem_fun(*this, &EditorRoutes::key_press), false);
+
+ _scroller.signal_focus_in_event().connect (sigc::mem_fun (*this, &EditorRoutes::focus_in), false);
+ _scroller.signal_focus_out_event().connect (sigc::mem_fun (*this, &EditorRoutes::focus_out));
+
+ _display.signal_enter_notify_event().connect (sigc::mem_fun (*this, &EditorRoutes::enter_notify), false);
+ _display.signal_leave_notify_event().connect (sigc::mem_fun (*this, &EditorRoutes::leave_notify), false);
+
+ _display.set_enable_search (false);
+
+ Route::SyncOrderKeys.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::sync_treeview_from_order_keys, this, _1), gui_context());
+}
+
+bool
+EditorRoutes::focus_in (GdkEventFocus*)
+{
+ Window* win = dynamic_cast<Window*> (_scroller.get_toplevel ());
+
+ if (win) {
+ old_focus = win->get_focus ();
+ } else {
+ old_focus = 0;
+ }
+
+ name_editable = 0;
+
+ /* try to do nothing on focus in (doesn't work, hence selection_count nonsense) */
+ return true;
+}
+
+bool
+EditorRoutes::focus_out (GdkEventFocus*)
+{
+ if (old_focus) {
+ old_focus->grab_focus ();
+ old_focus = 0;
+ }