KeyEditor::add_tab (string const & name, Bindings& bindings)
{
Tab* t = new Tab (*this, name, &bindings);
- t->populate ();
+
+ if (t->populate () == 0) {
+ /* no bindings */
+ delete t;
+ return;
+ }
+
t->show_all ();
notebook.append_page (*t, name);
}
}
}
}
+ cerr << "Removed " << name << endl;
}
void
}
bool
-KeyEditor::Tab::on_key_press_event (GdkEventKey* ev)
+KeyEditor::Tab::key_press_event (GdkEventKey* ev)
{
+ if (view.get_selection()->count_selected_rows() != 1) {
+ return false;
+ }
+
if (!ev->is_modifier) {
last_keyval = ev->keyval;
}
}
bool
-KeyEditor::Tab::on_key_release_event (GdkEventKey* ev)
+KeyEditor::Tab::key_release_event (GdkEventKey* ev)
{
+ if (view.get_selection()->count_selected_rows() != 1) {
+ return false;
+ }
+
if (last_keyval == 0) {
return false;
}
{
data_model = TreeStore::create(columns);
populate ();
-
+
filter = TreeModelFilter::create(data_model);
filter->set_visible_func (sigc::mem_fun (*this, &Tab::visible_func));
view.set_name (X_("KeyEditorTree"));
view.signal_cursor_changed().connect (sigc::mem_fun (*this, &Tab::action_selected));
+ view.signal_key_press_event().connect (sigc::mem_fun (*this, &Tab::key_press_event), false);
+ view.signal_key_release_event().connect (sigc::mem_fun (*this, &Tab::key_release_event), false);
view.get_column(0)->set_sort_column (columns.name);
view.get_column(1)->set_sort_column (columns.binding);
}
}
-void
+uint32_t
KeyEditor::Tab::populate ()
{
vector<string> paths;
}
row[columns.action] = *a;
}
+
+ return data_model->children().size();
}
void
KeyEditor::search_string_updated (const std::string& filter)
{
filter_string = boost::to_lower_copy(filter);
- current_tab ()->filter->refilter ();
+ KeyEditor::Tab* tab = current_tab ();
+ if (tab) {
+ tab->filter->refilter ();
+ }
}
-