diff --git a/juci/selectiondialog.cc b/juci/selectiondialog.cc index 00ca3f6..6a703ad 100644 --- a/juci/selectiondialog.cc +++ b/juci/selectiondialog.cc @@ -58,6 +58,7 @@ void SelectionDialog::show() { window->show_all(); shown=true; + selected=false; } void SelectionDialog::hide() { @@ -66,6 +67,7 @@ void SelectionDialog::hide() { } void SelectionDialog::select(bool hide_window) { + selected=true; auto selected=list_view_text->get_selected(); std::string select; if(selected.size()>0) { @@ -111,18 +113,20 @@ bool SelectionDialog::on_key_release(GdkEventKey* key) { } bool SelectionDialog::on_key_press(GdkEventKey* key) { - if(key->keyval>=GDK_KEY_0 && key->keyval<=GDK_KEY_9) - return false; - if(key->keyval>=GDK_KEY_A && key->keyval<=GDK_KEY_Z) - return false; - if(key->keyval>=GDK_KEY_a && key->keyval<=GDK_KEY_z) + if((key->keyval>=GDK_KEY_0 && key->keyval<=GDK_KEY_9) || + (key->keyval>=GDK_KEY_A && key->keyval<=GDK_KEY_Z) || + (key->keyval>=GDK_KEY_a && key->keyval<=GDK_KEY_z) || + key->keyval==GDK_KEY_underscore || key->keyval==GDK_KEY_BackSpace) { + if(selected) { + text_view.get_buffer()->erase(start_mark->get_iter(), text_view.get_buffer()->get_insert()->get_iter()); + selected=false; + if(key->keyval==GDK_KEY_BackSpace) + return true; + } return false; + } if(key->keyval==GDK_KEY_Shift_L || key->keyval==GDK_KEY_Shift_R || key->keyval==GDK_KEY_Alt_L || key->keyval==GDK_KEY_Alt_R || key->keyval==GDK_KEY_Control_L || key->keyval==GDK_KEY_Control_R || key->keyval==GDK_KEY_Meta_L || key->keyval==GDK_KEY_Meta_R) return false; - if(key->keyval==GDK_KEY_underscore) - return false; - if(key->keyval==GDK_KEY_BackSpace) - return false; if(key->keyval==GDK_KEY_Down) { auto it=list_view_text->get_selection()->get_selected(); if(it) { @@ -147,11 +151,7 @@ bool SelectionDialog::on_key_press(GdkEventKey* key) { select(false); return true; } - if(key->keyval==GDK_KEY_Return) { - select(); - return true; - } - if(key->keyval==GDK_KEY_ISO_Left_Tab || key->keyval==GDK_KEY_Tab) { + if(key->keyval==GDK_KEY_Return || key->keyval==GDK_KEY_ISO_Left_Tab || key->keyval==GDK_KEY_Tab) { select(); return true; } diff --git a/juci/selectiondialog.h b/juci/selectiondialog.h index e13bc95..eb979e9 100644 --- a/juci/selectiondialog.h +++ b/juci/selectiondialog.h @@ -10,7 +10,6 @@ public: void show(); void hide(); bool close(GdkEventFocus*); - void select(bool hide_window=true); void move(); bool on_key_release(GdkEventKey* key); bool on_key_press(GdkEventKey* key); @@ -18,11 +17,14 @@ public: std::map rows; bool shown=false; +private: + void resize(); + void select(bool hide_window=true); + Gtk::Entry search_entry; Glib::RefPtr start_mark; int start_offset; -private: - void resize(); + bool selected; Gtk::TextView& text_view; std::unique_ptr window;