Browse Source

Cleanup of event naming

pipelines/235045657
eidheim 5 years ago
parent
commit
28fc254cb7
  1. 4
      src/autocomplete.cpp
  2. 6
      src/dialogs.cpp
  3. 6
      src/entrybox.cpp
  4. 82
      src/selection_dialog.cpp
  5. 6
      src/selection_dialog.hpp
  6. 118
      src/source.cpp
  7. 10
      src/source.hpp
  8. 69
      src/source_base.cpp
  9. 6
      src/source_base.hpp
  10. 10
      src/source_clang.cpp
  11. 10
      src/source_language_protocol.cpp
  12. 6
      tests/stubs/selection_dialog.cpp

4
src/autocomplete.cpp

@ -25,9 +25,9 @@ Autocomplete::Autocomplete(Gsv::View *view, bool &interactive_completion, guint
stop(); stop();
}); });
view->signal_key_release_event().connect([](GdkEventKey *key) { view->signal_key_release_event().connect([](GdkEventKey *event) {
if(CompletionDialog::get() && CompletionDialog::get()->is_visible()) { if(CompletionDialog::get() && CompletionDialog::get()->is_visible()) {
if(CompletionDialog::get()->on_key_release(key)) if(CompletionDialog::get()->on_key_release(event))
return true; return true;
} }
return false; return false;

6
src/dialogs.cpp

@ -59,13 +59,13 @@ std::string Dialog::gtk_dialog(const boost::filesystem::path &path, const std::s
FileChooserDialog(const Glib::ustring &title, Gtk::FileChooserAction action) : Gtk::FileChooserDialog(title, action), action(action) {} FileChooserDialog(const Glib::ustring &title, Gtk::FileChooserAction action) : Gtk::FileChooserDialog(title, action), action(action) {}
protected: protected:
bool on_key_press_event(GdkEventKey *key_event) override { bool on_key_press_event(GdkEventKey *event) override {
if(action == Gtk::FileChooserAction::FILE_CHOOSER_ACTION_OPEN || action == Gtk::FileChooserAction::FILE_CHOOSER_ACTION_SELECT_FOLDER) { if(action == Gtk::FileChooserAction::FILE_CHOOSER_ACTION_OPEN || action == Gtk::FileChooserAction::FILE_CHOOSER_ACTION_SELECT_FOLDER) {
auto unicode = gdk_keyval_to_unicode(key_event->keyval); auto unicode = gdk_keyval_to_unicode(event->keyval);
if(unicode > 31 && unicode != 127) if(unicode > 31 && unicode != 127)
return true; return true;
} }
return Gtk::FileChooserDialog::on_key_press_event(key_event); return Gtk::FileChooserDialog::on_key_press_event(event);
} }
}; };
FileChooserDialog dialog(title, action); FileChooserDialog dialog(title, action);

6
src/entrybox.cpp

@ -24,8 +24,8 @@ EntryBox::Entry::Entry(const std::string &content, std::function<void(const std:
selected_history = -1; selected_history = -1;
} }
}); });
signal_key_press_event().connect([this](GdkEventKey *key) { signal_key_press_event().connect([this](GdkEventKey *event) {
if(key->keyval == GDK_KEY_Up || key->keyval == GDK_KEY_KP_Up) { if(event->keyval == GDK_KEY_Up || event->keyval == GDK_KEY_KP_Up) {
auto &history = entry_histories[get_placeholder_text()]; auto &history = entry_histories[get_placeholder_text()];
if(history.size() > 0) { if(history.size() > 0) {
selected_history++; selected_history++;
@ -39,7 +39,7 @@ EntryBox::Entry::Entry(const std::string &content, std::function<void(const std:
set_position(-1); set_position(-1);
} }
} }
if(key->keyval == GDK_KEY_Down || key->keyval == GDK_KEY_KP_Down) { if(event->keyval == GDK_KEY_Down || event->keyval == GDK_KEY_KP_Down) {
auto &history = entry_histories[get_placeholder_text()]; auto &history = entry_histories[get_placeholder_text()];
if(history.size() > 0) { if(history.size() > 0) {
selected_history--; selected_history--;

82
src/selection_dialog.cpp

@ -210,24 +210,24 @@ std::unique_ptr<SelectionDialog> SelectionDialog::instance;
SelectionDialog::SelectionDialog(Gtk::TextView *text_view, const boost::optional<Gtk::TextIter> &start_iter, bool show_search_entry, bool use_markup) SelectionDialog::SelectionDialog(Gtk::TextView *text_view, const boost::optional<Gtk::TextIter> &start_iter, bool show_search_entry, bool use_markup)
: SelectionDialogBase(text_view, start_iter, show_search_entry, use_markup) { : SelectionDialogBase(text_view, start_iter, show_search_entry, use_markup) {
auto search_key = std::make_shared<std::string>(); auto search_text = std::make_shared<std::string>();
auto filter_model = Gtk::TreeModelFilter::create(list_view_text.get_model()); auto filter_model = Gtk::TreeModelFilter::create(list_view_text.get_model());
filter_model->set_visible_func([this, search_key](const Gtk::TreeModel::const_iterator &iter) { filter_model->set_visible_func([this, search_text](const Gtk::TreeModel::const_iterator &iter) {
std::string row_lc; std::string row_lc;
iter->get_value(0, row_lc); iter->get_value(0, row_lc);
auto search_key_lc = *search_key; auto search_text_lc = *search_text;
std::transform(row_lc.begin(), row_lc.end(), row_lc.begin(), ::tolower); std::transform(row_lc.begin(), row_lc.end(), row_lc.begin(), ::tolower);
std::transform(search_key_lc.begin(), search_key_lc.end(), search_key_lc.begin(), ::tolower); std::transform(search_text_lc.begin(), search_text_lc.end(), search_text_lc.begin(), ::tolower);
if(list_view_text.use_markup) { if(list_view_text.use_markup) {
size_t pos = 0; size_t pos = 0;
while((pos = row_lc.find('<', pos)) != std::string::npos) { while((pos = row_lc.find('<', pos)) != std::string::npos) {
auto pos2 = row_lc.find('>', pos + 1); auto pos2 = row_lc.find('>', pos + 1);
row_lc.erase(pos, pos2 - pos + 1); row_lc.erase(pos, pos2 - pos + 1);
} }
search_key_lc = Glib::Markup::escape_text(search_key_lc); search_text_lc = Glib::Markup::escape_text(search_text_lc);
} }
if(row_lc.find(search_key_lc) != std::string::npos) if(row_lc.find(search_text_lc) != std::string::npos)
return true; return true;
return false; return false;
}); });
@ -238,11 +238,11 @@ SelectionDialog::SelectionDialog(Gtk::TextView *text_view, const boost::optional
return false; return false;
}); });
search_entry.signal_changed().connect([this, search_key, filter_model]() { search_entry.signal_changed().connect([this, search_text, filter_model]() {
*search_key = search_entry.get_text(); *search_text = search_entry.get_text();
filter_model->refilter(); filter_model->refilter();
list_view_text.set_search_entry(search_entry); //TODO:Report the need of this to GTK's git (bug) list_view_text.set_search_entry(search_entry); //TODO:Report the need of this to GTK's git (bug)
if(search_key->empty()) { if(search_text->empty()) {
if(list_view_text.get_model()->children().size() > 0) if(list_view_text.get_model()->children().size() > 0)
list_view_text.set_cursor(list_view_text.get_model()->get_path(list_view_text.get_model()->children().begin())); list_view_text.set_cursor(list_view_text.get_model()->get_path(list_view_text.get_model()->children().begin()));
} }
@ -262,8 +262,8 @@ SelectionDialog::SelectionDialog(Gtk::TextView *text_view, const boost::optional
}); });
} }
bool SelectionDialog::on_key_press(GdkEventKey *key) { bool SelectionDialog::on_key_press(GdkEventKey *event) {
if((key->keyval == GDK_KEY_Down || key->keyval == GDK_KEY_KP_Down) && list_view_text.get_model()->children().size() > 0) { if((event->keyval == GDK_KEY_Down || event->keyval == GDK_KEY_KP_Down) && list_view_text.get_model()->children().size() > 0) {
auto it = list_view_text.get_selection()->get_selected(); auto it = list_view_text.get_selection()->get_selected();
if(it) { if(it) {
it++; it++;
@ -272,7 +272,7 @@ bool SelectionDialog::on_key_press(GdkEventKey *key) {
} }
return true; return true;
} }
else if((key->keyval == GDK_KEY_Up || key->keyval == GDK_KEY_KP_Up) && list_view_text.get_model()->children().size() > 0) { else if((event->keyval == GDK_KEY_Up || event->keyval == GDK_KEY_KP_Up) && list_view_text.get_model()->children().size() > 0) {
auto it = list_view_text.get_selection()->get_selected(); auto it = list_view_text.get_selection()->get_selected();
if(it) { if(it) {
it--; it--;
@ -281,7 +281,7 @@ bool SelectionDialog::on_key_press(GdkEventKey *key) {
} }
return true; return true;
} }
else if(key->keyval == GDK_KEY_Return || key->keyval == GDK_KEY_KP_Enter || key->keyval == GDK_KEY_ISO_Left_Tab || key->keyval == GDK_KEY_Tab) { else if(event->keyval == GDK_KEY_Return || event->keyval == GDK_KEY_KP_Enter || event->keyval == GDK_KEY_ISO_Left_Tab || event->keyval == GDK_KEY_Tab) {
auto it = list_view_text.get_selection()->get_selected(); auto it = list_view_text.get_selection()->get_selected();
if(it) { if(it) {
auto column = list_view_text.get_column(0); auto column = list_view_text.get_column(0);
@ -291,35 +291,35 @@ bool SelectionDialog::on_key_press(GdkEventKey *key) {
hide(); hide();
return true; return true;
} }
else if(key->keyval == GDK_KEY_Escape) { else if(event->keyval == GDK_KEY_Escape) {
hide(); hide();
return true; return true;
} }
else if(key->keyval == GDK_KEY_Left || key->keyval == GDK_KEY_KP_Left || key->keyval == GDK_KEY_Right || key->keyval == GDK_KEY_KP_Right) { else if(event->keyval == GDK_KEY_Left || event->keyval == GDK_KEY_KP_Left || event->keyval == GDK_KEY_Right || event->keyval == GDK_KEY_KP_Right) {
hide(); hide();
return false; return false;
} }
else if(show_search_entry) { else if(show_search_entry) {
#ifdef __APPLE__ //OS X bug most likely: Gtk::Entry will not work if window is of type POPUP #ifdef __APPLE__ //OS X bug most likely: Gtk::Entry will not work if window is of type POPUP
int search_entry_length = search_entry.get_text_length(); int search_entry_length = search_entry.get_text_length();
if(key->keyval == GDK_KEY_dead_tilde) { if(event->keyval == GDK_KEY_dead_tilde) {
search_entry.insert_text("~", 1, search_entry_length); search_entry.insert_text("~", 1, search_entry_length);
return true; return true;
} }
else if(key->keyval == GDK_KEY_dead_circumflex) { else if(event->keyval == GDK_KEY_dead_circumflex) {
search_entry.insert_text("^", 1, search_entry_length); search_entry.insert_text("^", 1, search_entry_length);
return true; return true;
} }
else if(key->is_modifier) else if(event->is_modifier)
return true; return true;
else if(key->keyval == GDK_KEY_BackSpace) { else if(event->keyval == GDK_KEY_BackSpace) {
auto length = search_entry.get_text_length(); auto length = search_entry.get_text_length();
if(length > 0) if(length > 0)
search_entry.delete_text(length - 1, length); search_entry.delete_text(length - 1, length);
return true; return true;
} }
else { else {
gunichar unicode = gdk_keyval_to_unicode(key->keyval); gunichar unicode = gdk_keyval_to_unicode(event->keyval);
if(unicode >= 32 && unicode != 126) { if(unicode >= 32 && unicode != 126) {
auto ustr = Glib::ustring(1, unicode); auto ustr = Glib::ustring(1, unicode);
search_entry.insert_text(ustr, ustr.bytes(), search_entry_length); search_entry.insert_text(ustr, ustr.bytes(), search_entry_length);
@ -327,7 +327,7 @@ bool SelectionDialog::on_key_press(GdkEventKey *key) {
} }
} }
#else #else
search_entry.on_key_press_event(key); search_entry.on_key_press_event(event);
return true; return true;
#endif #endif
} }
@ -340,32 +340,32 @@ std::unique_ptr<CompletionDialog> CompletionDialog::instance;
CompletionDialog::CompletionDialog(Gtk::TextView *text_view, const Gtk::TextIter &start_iter) : SelectionDialogBase(text_view, start_iter, false, false) { CompletionDialog::CompletionDialog(Gtk::TextView *text_view, const Gtk::TextIter &start_iter) : SelectionDialogBase(text_view, start_iter, false, false) {
show_offset = text_view->get_buffer()->get_insert()->get_iter().get_offset(); show_offset = text_view->get_buffer()->get_insert()->get_iter().get_offset();
auto search_key = std::make_shared<std::string>(); auto search_text = std::make_shared<std::string>();
auto filter_model = Gtk::TreeModelFilter::create(list_view_text.get_model()); auto filter_model = Gtk::TreeModelFilter::create(list_view_text.get_model());
if(show_offset == start_mark->get_iter().get_offset()) { if(show_offset == start_mark->get_iter().get_offset()) {
filter_model->set_visible_func([search_key](const Gtk::TreeModel::const_iterator &iter) { filter_model->set_visible_func([search_text](const Gtk::TreeModel::const_iterator &iter) {
std::string row_lc; std::string row_lc;
iter->get_value(0, row_lc); iter->get_value(0, row_lc);
auto search_key_lc = *search_key; auto search_text_lc = *search_text;
std::transform(row_lc.begin(), row_lc.end(), row_lc.begin(), ::tolower); std::transform(row_lc.begin(), row_lc.end(), row_lc.begin(), ::tolower);
std::transform(search_key_lc.begin(), search_key_lc.end(), search_key_lc.begin(), ::tolower); std::transform(search_text_lc.begin(), search_text_lc.end(), search_text_lc.begin(), ::tolower);
if(row_lc.find(search_key_lc) != std::string::npos) if(row_lc.find(search_text_lc) != std::string::npos)
return true; return true;
return false; return false;
}); });
} }
else { else {
filter_model->set_visible_func([search_key](const Gtk::TreeModel::const_iterator &iter) { filter_model->set_visible_func([search_text](const Gtk::TreeModel::const_iterator &iter) {
std::string row; std::string row;
iter->get_value(0, row); iter->get_value(0, row);
if(row.find(*search_key) == 0) if(row.find(*search_text) == 0)
return true; return true;
return false; return false;
}); });
} }
list_view_text.set_model(filter_model); list_view_text.set_model(filter_model);
search_entry.signal_changed().connect([this, search_key, filter_model]() { search_entry.signal_changed().connect([this, search_text, filter_model]() {
*search_key = search_entry.get_text(); *search_text = search_entry.get_text();
filter_model->refilter(); filter_model->refilter();
list_view_text.set_search_entry(search_entry); //TODO:Report the need of this to GTK's git (bug) list_view_text.set_search_entry(search_entry); //TODO:Report the need of this to GTK's git (bug)
}); });
@ -391,8 +391,8 @@ void CompletionDialog::select(bool hide_window) {
hide(); hide();
} }
bool CompletionDialog::on_key_release(GdkEventKey *key) { bool CompletionDialog::on_key_release(GdkEventKey *event) {
if(key->keyval == GDK_KEY_Down || key->keyval == GDK_KEY_KP_Down || key->keyval == GDK_KEY_Up || key->keyval == GDK_KEY_KP_Up) if(event->keyval == GDK_KEY_Down || event->keyval == GDK_KEY_KP_Down || event->keyval == GDK_KEY_Up || event->keyval == GDK_KEY_KP_Up)
return false; return false;
if(show_offset > text_view->get_buffer()->get_insert()->get_iter().get_offset()) if(show_offset > text_view->get_buffer()->get_insert()->get_iter().get_offset())
@ -410,20 +410,20 @@ bool CompletionDialog::on_key_release(GdkEventKey *key) {
return false; return false;
} }
bool CompletionDialog::on_key_press(GdkEventKey *key) { bool CompletionDialog::on_key_press(GdkEventKey *event) {
if((key->keyval >= '0' && key->keyval <= '9') || (key->keyval >= 'a' && key->keyval <= 'z') || (key->keyval >= 'A' && key->keyval <= 'Z') || key->keyval == '_' || gdk_keyval_to_unicode(key->keyval) >= 0x00C0 || key->keyval == GDK_KEY_BackSpace) { if((event->keyval >= '0' && event->keyval <= '9') || (event->keyval >= 'a' && event->keyval <= 'z') || (event->keyval >= 'A' && event->keyval <= 'Z') || event->keyval == '_' || gdk_keyval_to_unicode(event->keyval) >= 0x00C0 || event->keyval == GDK_KEY_BackSpace) {
if(row_in_entry) { if(row_in_entry) {
text_view->get_buffer()->erase(start_mark->get_iter(), text_view->get_buffer()->get_insert()->get_iter()); text_view->get_buffer()->erase(start_mark->get_iter(), text_view->get_buffer()->get_insert()->get_iter());
row_in_entry = false; row_in_entry = false;
if(key->keyval == GDK_KEY_BackSpace) if(event->keyval == GDK_KEY_BackSpace)
return true; return true;
} }
return false; 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 || if(event->keyval == GDK_KEY_Shift_L || event->keyval == GDK_KEY_Shift_R || event->keyval == GDK_KEY_Alt_L || event->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) event->keyval == GDK_KEY_Control_L || event->keyval == GDK_KEY_Control_R || event->keyval == GDK_KEY_Meta_L || event->keyval == GDK_KEY_Meta_R)
return false; return false;
if((key->keyval == GDK_KEY_Down || key->keyval == GDK_KEY_KP_Down) && list_view_text.get_model()->children().size() > 0) { if((event->keyval == GDK_KEY_Down || event->keyval == GDK_KEY_KP_Down) && list_view_text.get_model()->children().size() > 0) {
auto it = list_view_text.get_selection()->get_selected(); auto it = list_view_text.get_selection()->get_selected();
if(it) { if(it) {
it++; it++;
@ -437,7 +437,7 @@ bool CompletionDialog::on_key_press(GdkEventKey *key) {
select(false); select(false);
return true; return true;
} }
if((key->keyval == GDK_KEY_Up || key->keyval == GDK_KEY_KP_Up) && list_view_text.get_model()->children().size() > 0) { if((event->keyval == GDK_KEY_Up || event->keyval == GDK_KEY_KP_Up) && list_view_text.get_model()->children().size() > 0) {
auto it = list_view_text.get_selection()->get_selected(); auto it = list_view_text.get_selection()->get_selected();
if(it) { if(it) {
it--; it--;
@ -455,12 +455,12 @@ bool CompletionDialog::on_key_press(GdkEventKey *key) {
select(false); select(false);
return true; return true;
} }
if(key->keyval == GDK_KEY_Return || key->keyval == GDK_KEY_KP_Enter || key->keyval == GDK_KEY_ISO_Left_Tab || key->keyval == GDK_KEY_Tab) { if(event->keyval == GDK_KEY_Return || event->keyval == GDK_KEY_KP_Enter || event->keyval == GDK_KEY_ISO_Left_Tab || event->keyval == GDK_KEY_Tab) {
select(); select();
return true; return true;
} }
hide(); hide();
if(key->keyval == GDK_KEY_Escape) if(event->keyval == GDK_KEY_Escape)
return true; return true;
return false; return false;
} }

6
src/selection_dialog.hpp

@ -75,7 +75,7 @@ class SelectionDialog : public SelectionDialogBase {
static std::unique_ptr<SelectionDialog> instance; static std::unique_ptr<SelectionDialog> instance;
public: public:
bool on_key_press(GdkEventKey *key); bool on_key_press(GdkEventKey *event);
static void create(Gtk::TextView *text_view, bool show_search_entry = true, bool use_markup = false) { static void create(Gtk::TextView *text_view, bool show_search_entry = true, bool use_markup = false) {
instance = std::unique_ptr<SelectionDialog>(new SelectionDialog(text_view, text_view->get_buffer()->get_insert()->get_iter(), show_search_entry, use_markup)); instance = std::unique_ptr<SelectionDialog>(new SelectionDialog(text_view, text_view->get_buffer()->get_insert()->get_iter(), show_search_entry, use_markup));
@ -91,8 +91,8 @@ class CompletionDialog : public SelectionDialogBase {
static std::unique_ptr<CompletionDialog> instance; static std::unique_ptr<CompletionDialog> instance;
public: public:
bool on_key_release(GdkEventKey *key); bool on_key_release(GdkEventKey *event);
bool on_key_press(GdkEventKey *key); bool on_key_press(GdkEventKey *event);
static void create(Gtk::TextView *text_view, const Gtk::TextIter &start_iter) { static void create(Gtk::TextView *text_view, const Gtk::TextIter &start_iter) {
instance = std::unique_ptr<CompletionDialog>(new CompletionDialog(text_view, start_iter)); instance = std::unique_ptr<CompletionDialog>(new CompletionDialog(text_view, start_iter));

118
src/source.cpp

@ -1996,35 +1996,35 @@ bool Source::View::is_possible_argument() {
return false; return false;
} }
bool Source::View::on_key_press_event(GdkEventKey *key) { bool Source::View::on_key_press_event(GdkEventKey *event) {
enable_multiple_cursors = true; enable_multiple_cursors = true;
ScopeGuard guard{[this] { ScopeGuard guard{[this] {
enable_multiple_cursors = false; enable_multiple_cursors = false;
}}; }};
if(SelectionDialog::get() && SelectionDialog::get()->is_visible()) { if(SelectionDialog::get() && SelectionDialog::get()->is_visible()) {
if(SelectionDialog::get()->on_key_press(key)) if(SelectionDialog::get()->on_key_press(event))
return true; return true;
} }
if(CompletionDialog::get() && CompletionDialog::get()->is_visible()) { if(CompletionDialog::get() && CompletionDialog::get()->is_visible()) {
if(CompletionDialog::get()->on_key_press(key)) if(CompletionDialog::get()->on_key_press(event))
return true; return true;
} }
if(last_keyval < GDK_KEY_Shift_L || last_keyval > GDK_KEY_Hyper_R) if(last_keyval < GDK_KEY_Shift_L || last_keyval > GDK_KEY_Hyper_R)
previous_non_modifier_keyval = last_keyval; previous_non_modifier_keyval = last_keyval;
last_keyval = key->keyval; last_keyval = event->keyval;
if((key->keyval == GDK_KEY_Tab || key->keyval == GDK_KEY_ISO_Left_Tab) && (key->state & GDK_SHIFT_MASK) == 0 && select_snippet_parameter()) if((event->keyval == GDK_KEY_Tab || event->keyval == GDK_KEY_ISO_Left_Tab) && (event->state & GDK_SHIFT_MASK) == 0 && select_snippet_parameter())
return true; return true;
if(on_key_press_event_extra_cursors(key)) if(on_key_press_event_extra_cursors(event))
return true; return true;
{ {
LockGuard lock(snippets_mutex); LockGuard lock(snippets_mutex);
if(snippets) { if(snippets) {
for(auto &snippet : *snippets) { for(auto &snippet : *snippets) {
if(snippet.key == key->keyval && (snippet.modifier & key->state) == snippet.modifier) { if(snippet.key == event->keyval && (snippet.modifier & event->state) == snippet.modifier) {
insert_snippet(get_buffer()->get_insert()->get_iter(), snippet.body); insert_snippet(get_buffer()->get_insert()->get_iter(), snippet.body);
return true; return true;
} }
@ -2035,7 +2035,7 @@ bool Source::View::on_key_press_event(GdkEventKey *key) {
get_buffer()->begin_user_action(); get_buffer()->begin_user_action();
// Shift+enter: go to end of line and enter // Shift+enter: go to end of line and enter
if((key->keyval == GDK_KEY_Return || key->keyval == GDK_KEY_KP_Enter) && (key->state & GDK_SHIFT_MASK) > 0) { if((event->keyval == GDK_KEY_Return || event->keyval == GDK_KEY_KP_Enter) && (event->state & GDK_SHIFT_MASK) > 0) {
auto iter = get_buffer()->get_insert()->get_iter(); auto iter = get_buffer()->get_insert()->get_iter();
if(!iter.ends_line()) { if(!iter.ends_line()) {
iter.forward_to_line_end(); iter.forward_to_line_end();
@ -2043,35 +2043,35 @@ bool Source::View::on_key_press_event(GdkEventKey *key) {
} }
} }
if(Config::get().source.smart_brackets && on_key_press_event_smart_brackets(key)) { if(Config::get().source.smart_brackets && on_key_press_event_smart_brackets(event)) {
get_buffer()->end_user_action(); get_buffer()->end_user_action();
return true; return true;
} }
if(Config::get().source.smart_inserts && on_key_press_event_smart_inserts(key)) { if(Config::get().source.smart_inserts && on_key_press_event_smart_inserts(event)) {
get_buffer()->end_user_action(); get_buffer()->end_user_action();
return true; return true;
} }
if(is_bracket_language && on_key_press_event_bracket_language(key)) { if(is_bracket_language && on_key_press_event_bracket_language(event)) {
get_buffer()->end_user_action(); get_buffer()->end_user_action();
return true; return true;
} }
else if(on_key_press_event_basic(key)) { else if(on_key_press_event_basic(event)) {
get_buffer()->end_user_action(); get_buffer()->end_user_action();
return true; return true;
} }
else { else {
get_buffer()->end_user_action(); get_buffer()->end_user_action();
return BaseView::on_key_press_event(key); return BaseView::on_key_press_event(event);
} }
} }
// Basic indentation // Basic indentation
bool Source::View::on_key_press_event_basic(GdkEventKey *key) { bool Source::View::on_key_press_event_basic(GdkEventKey *event) {
auto iter = get_buffer()->get_insert()->get_iter(); auto iter = get_buffer()->get_insert()->get_iter();
// Indent as in current or next line // Indent as in current or next line
if((key->keyval == GDK_KEY_Return || key->keyval == GDK_KEY_KP_Enter) && !get_buffer()->get_has_selection() && !iter.starts_line()) { if((event->keyval == GDK_KEY_Return || event->keyval == GDK_KEY_KP_Enter) && !get_buffer()->get_has_selection() && !iter.starts_line()) {
cleanup_whitespace_characters(iter); cleanup_whitespace_characters(iter);
iter = get_buffer()->get_insert()->get_iter(); iter = get_buffer()->get_insert()->get_iter();
@ -2104,7 +2104,7 @@ bool Source::View::on_key_press_event_basic(GdkEventKey *key) {
return true; return true;
} }
// Indent as in next or previous line // Indent as in next or previous line
else if(key->keyval == GDK_KEY_Tab && (key->state & GDK_SHIFT_MASK) == 0) { else if(event->keyval == GDK_KEY_Tab && (event->state & GDK_SHIFT_MASK) == 0) {
// Special case if insert is at beginning of empty line: // Special case if insert is at beginning of empty line:
if(iter.starts_line() && iter.ends_line() && !get_buffer()->get_has_selection()) { if(iter.starts_line() && iter.ends_line() && !get_buffer()->get_has_selection()) {
auto prev_line_iter = iter; auto prev_line_iter = iter;
@ -2148,7 +2148,7 @@ bool Source::View::on_key_press_event_basic(GdkEventKey *key) {
return true; return true;
} }
// Indent left when clicking shift-tab, no matter where in the line the cursor is. Also works on selected text. // Indent left when clicking shift-tab, no matter where in the line the cursor is. Also works on selected text.
else if((key->keyval == GDK_KEY_ISO_Left_Tab || key->keyval == GDK_KEY_Tab) && (key->state & GDK_SHIFT_MASK) > 0) { else if((event->keyval == GDK_KEY_ISO_Left_Tab || event->keyval == GDK_KEY_Tab) && (event->state & GDK_SHIFT_MASK) > 0) {
Gtk::TextIter selection_start, selection_end; Gtk::TextIter selection_start, selection_end;
get_buffer()->get_selection_bounds(selection_start, selection_end); get_buffer()->get_selection_bounds(selection_start, selection_end);
int line_start = selection_start.get_line(); int line_start = selection_start.get_line();
@ -2187,7 +2187,7 @@ bool Source::View::on_key_press_event_basic(GdkEventKey *key) {
return true; return true;
} }
// "Smart" backspace key // "Smart" backspace key
else if(key->keyval == GDK_KEY_BackSpace && !get_buffer()->get_has_selection()) { else if(event->keyval == GDK_KEY_BackSpace && !get_buffer()->get_has_selection()) {
auto line = get_line_before(); auto line = get_line_before();
bool do_smart_backspace = true; bool do_smart_backspace = true;
for(auto &chr : line) { for(auto &chr : line) {
@ -2212,7 +2212,7 @@ bool Source::View::on_key_press_event_basic(GdkEventKey *key) {
} }
} }
// "Smart" delete key // "Smart" delete key
else if(key->keyval == GDK_KEY_Delete && !get_buffer()->get_has_selection()) { else if(event->keyval == GDK_KEY_Delete && !get_buffer()->get_has_selection()) {
auto insert_iter = iter; auto insert_iter = iter;
bool do_smart_delete = true; bool do_smart_delete = true;
do { do {
@ -2240,8 +2240,8 @@ bool Source::View::on_key_press_event_basic(GdkEventKey *key) {
// TODO: figure out the bug and create pull request to gtk // TODO: figure out the bug and create pull request to gtk
// Have only experienced this on OS X // Have only experienced this on OS X
// Note: valgrind reports issues on TextView::on_key_press_event as well // Note: valgrind reports issues on TextView::on_key_press_event as well
auto unicode = gdk_keyval_to_unicode(key->keyval); auto unicode = gdk_keyval_to_unicode(event->keyval);
if((key->state & (GDK_CONTROL_MASK | GDK_META_MASK)) == 0 && unicode >= 32 && unicode != 127 && if((event->state & (GDK_CONTROL_MASK | GDK_META_MASK)) == 0 && unicode >= 32 && unicode != 127 &&
(previous_non_modifier_keyval < GDK_KEY_dead_grave || previous_non_modifier_keyval > GDK_KEY_dead_greek)) { (previous_non_modifier_keyval < GDK_KEY_dead_grave || previous_non_modifier_keyval > GDK_KEY_dead_greek)) {
if(get_buffer()->get_has_selection()) { if(get_buffer()->get_has_selection()) {
Gtk::TextIter selection_start, selection_end; Gtk::TextIter selection_start, selection_end;
@ -2262,7 +2262,7 @@ bool Source::View::on_key_press_event_basic(GdkEventKey *key) {
} }
//Bracket language indentation //Bracket language indentation
bool Source::View::on_key_press_event_bracket_language(GdkEventKey *key) { bool Source::View::on_key_press_event_bracket_language(GdkEventKey *event) {
const static std::regex no_bracket_statement_regex("^[ \t]*(if( +constexpr)?|for|while) *\\(.*[^;}{] *$|" const static std::regex no_bracket_statement_regex("^[ \t]*(if( +constexpr)?|for|while) *\\(.*[^;}{] *$|"
"^[ \t]*[}]? *else if( +constexpr)? *\\(.*[^;}{] *$|" "^[ \t]*[}]? *else if( +constexpr)? *\\(.*[^;}{] *$|"
"^[ \t]*[}]? *else *$", std::regex::extended | std::regex::optimize); "^[ \t]*[}]? *else *$", std::regex::extended | std::regex::optimize);
@ -2274,7 +2274,7 @@ bool Source::View::on_key_press_event_bracket_language(GdkEventKey *key) {
if(!is_code_iter(iter)) { if(!is_code_iter(iter)) {
// Add * at start of line in comment blocks // Add * at start of line in comment blocks
if(key->keyval == GDK_KEY_Return || key->keyval == GDK_KEY_KP_Enter) { if(event->keyval == GDK_KEY_Return || event->keyval == GDK_KEY_KP_Enter) {
if(!iter.starts_line() && (!string_tag || (!iter.has_tag(string_tag) && !iter.ends_tag(string_tag)))) { if(!iter.starts_line() && (!string_tag || (!iter.has_tag(string_tag) && !iter.ends_tag(string_tag)))) {
cleanup_whitespace_characters(iter); cleanup_whitespace_characters(iter);
iter = get_buffer()->get_insert()->get_iter(); iter = get_buffer()->get_insert()->get_iter();
@ -2304,7 +2304,7 @@ bool Source::View::on_key_press_event_bracket_language(GdkEventKey *key) {
} }
// Indent depending on if/else/etc and brackets // Indent depending on if/else/etc and brackets
if((key->keyval == GDK_KEY_Return || key->keyval == GDK_KEY_KP_Enter) && !iter.starts_line()) { if((event->keyval == GDK_KEY_Return || event->keyval == GDK_KEY_KP_Enter) && !iter.starts_line()) {
cleanup_whitespace_characters(iter); cleanup_whitespace_characters(iter);
iter = get_buffer()->get_insert()->get_iter(); iter = get_buffer()->get_insert()->get_iter();
@ -2711,14 +2711,14 @@ bool Source::View::on_key_press_event_bracket_language(GdkEventKey *key) {
return true; return true;
} }
// Indent left when writing }, ) or ] on a new line // Indent left when writing }, ) or ] on a new line
else if(key->keyval == GDK_KEY_braceright || else if(event->keyval == GDK_KEY_braceright ||
(use_fixed_continuation_indenting && (key->keyval == GDK_KEY_bracketright || key->keyval == GDK_KEY_parenright))) { (use_fixed_continuation_indenting && (event->keyval == GDK_KEY_bracketright || event->keyval == GDK_KEY_parenright))) {
std::string bracket; std::string bracket;
if(key->keyval == GDK_KEY_braceright) if(event->keyval == GDK_KEY_braceright)
bracket = "}"; bracket = "}";
if(key->keyval == GDK_KEY_bracketright) if(event->keyval == GDK_KEY_bracketright)
bracket = "]"; bracket = "]";
else if(key->keyval == GDK_KEY_parenright) else if(event->keyval == GDK_KEY_parenright)
bracket = ")"; bracket = ")";
std::string line = get_line_before(); std::string line = get_line_before();
if(line.size() >= tab_size && iter.ends_line()) { if(line.size() >= tab_size && iter.ends_line()) {
@ -2740,7 +2740,7 @@ bool Source::View::on_key_press_event_bracket_language(GdkEventKey *key) {
} }
} }
// Indent left when writing { on a new line after for instance if(...)\n... // Indent left when writing { on a new line after for instance if(...)\n...
else if(key->keyval == GDK_KEY_braceleft) { else if(event->keyval == GDK_KEY_braceleft) {
auto tabs_end_iter = get_tabs_end_iter(); auto tabs_end_iter = get_tabs_end_iter();
auto tabs = get_line_before(tabs_end_iter); auto tabs = get_line_before(tabs_end_iter);
size_t line_nr = iter.get_line(); size_t line_nr = iter.get_line();
@ -2769,7 +2769,7 @@ bool Source::View::on_key_press_event_bracket_language(GdkEventKey *key) {
} }
} }
// Mark parameters of templated functions after pressing tab and after writing template argument // Mark parameters of templated functions after pressing tab and after writing template argument
else if(key->keyval == GDK_KEY_Tab && (key->state & GDK_SHIFT_MASK) == 0) { else if(event->keyval == GDK_KEY_Tab && (event->state & GDK_SHIFT_MASK) == 0) {
if(*iter == '>') { if(*iter == '>') {
iter.forward_char(); iter.forward_char();
Gtk::TextIter parenthesis_end_iter; Gtk::TextIter parenthesis_end_iter;
@ -2811,7 +2811,7 @@ bool Source::View::on_key_press_event_bracket_language(GdkEventKey *key) {
return false; return false;
} }
bool Source::View::on_key_press_event_smart_brackets(GdkEventKey *key) { bool Source::View::on_key_press_event_smart_brackets(GdkEventKey *event) {
if(get_buffer()->get_has_selection()) if(get_buffer()->get_has_selection())
return false; return false;
@ -2820,7 +2820,7 @@ bool Source::View::on_key_press_event_smart_brackets(GdkEventKey *key) {
previous_iter.backward_char(); previous_iter.backward_char();
if(is_code_iter(iter)) { if(is_code_iter(iter)) {
//Move after ')' if closed expression //Move after ')' if closed expression
if(key->keyval == GDK_KEY_parenright) { if(event->keyval == GDK_KEY_parenright) {
if(*iter == ')' && symbol_count(iter, '(', ')') <= 0) { if(*iter == ')' && symbol_count(iter, '(', ')') <= 0) {
iter.forward_char(); iter.forward_char();
get_buffer()->place_cursor(iter); get_buffer()->place_cursor(iter);
@ -2829,7 +2829,7 @@ bool Source::View::on_key_press_event_smart_brackets(GdkEventKey *key) {
} }
} }
//Move after '>' if >( and closed expression //Move after '>' if >( and closed expression
else if(key->keyval == GDK_KEY_greater) { else if(event->keyval == GDK_KEY_greater) {
if(*iter == '>') { if(*iter == '>') {
iter.forward_char(); iter.forward_char();
Gtk::TextIter parenthesis_end_iter; Gtk::TextIter parenthesis_end_iter;
@ -2841,7 +2841,7 @@ bool Source::View::on_key_press_event_smart_brackets(GdkEventKey *key) {
} }
} }
//Move after '(' if >( and select text inside parentheses //Move after '(' if >( and select text inside parentheses
else if(key->keyval == GDK_KEY_parenleft) { else if(event->keyval == GDK_KEY_parenleft) {
auto previous_iter = iter; auto previous_iter = iter;
previous_iter.backward_char(); previous_iter.backward_char();
if(*previous_iter == '>') { if(*previous_iter == '>') {
@ -2859,7 +2859,7 @@ bool Source::View::on_key_press_event_smart_brackets(GdkEventKey *key) {
return false; return false;
} }
bool Source::View::on_key_press_event_smart_inserts(GdkEventKey *key) { bool Source::View::on_key_press_event_smart_inserts(GdkEventKey *event) {
keep_snippet_marks = true; keep_snippet_marks = true;
ScopeGuard guard{[this] { ScopeGuard guard{[this] {
keep_snippet_marks = false; keep_snippet_marks = false;
@ -2868,7 +2868,7 @@ bool Source::View::on_key_press_event_smart_inserts(GdkEventKey *key) {
if(get_buffer()->get_has_selection()) { if(get_buffer()->get_has_selection()) {
if(is_bracket_language) { if(is_bracket_language) {
// Remove /**/ around selection // Remove /**/ around selection
if(key->keyval == GDK_KEY_slash) { if(event->keyval == GDK_KEY_slash) {
Gtk::TextIter start, end; Gtk::TextIter start, end;
get_buffer()->get_selection_bounds(start, end); get_buffer()->get_selection_bounds(start, end);
auto before_start = start; auto before_start = start;
@ -2890,56 +2890,56 @@ bool Source::View::on_key_press_event_smart_inserts(GdkEventKey *key) {
Glib::ustring left, right; Glib::ustring left, right;
// Insert () around selection // Insert () around selection
if(key->keyval == GDK_KEY_parenleft) { if(event->keyval == GDK_KEY_parenleft) {
left = '('; left = '(';
right = ')'; right = ')';
} }
// Insert [] around selection // Insert [] around selection
else if(key->keyval == GDK_KEY_bracketleft) { else if(event->keyval == GDK_KEY_bracketleft) {
left = '['; left = '[';
right = ']'; right = ']';
} }
// Insert {} around selection // Insert {} around selection
else if(key->keyval == GDK_KEY_braceleft) { else if(event->keyval == GDK_KEY_braceleft) {
left = '{'; left = '{';
right = '}'; right = '}';
} }
// Insert <> around selection // Insert <> around selection
else if(key->keyval == GDK_KEY_less) { else if(event->keyval == GDK_KEY_less) {
left = '<'; left = '<';
right = '>'; right = '>';
} }
// Insert '' around selection // Insert '' around selection
else if(key->keyval == GDK_KEY_apostrophe) { else if(event->keyval == GDK_KEY_apostrophe) {
left = '\''; left = '\'';
right = '\''; right = '\'';
} }
// Insert "" around selection // Insert "" around selection
else if(key->keyval == GDK_KEY_quotedbl) { else if(event->keyval == GDK_KEY_quotedbl) {
left = '"'; left = '"';
right = '"'; right = '"';
} }
else if(language && language->get_id() == "markdown") { else if(language && language->get_id() == "markdown") {
if(key->keyval == GDK_KEY_dead_grave) { if(event->keyval == GDK_KEY_dead_grave) {
left = '`'; left = '`';
right = '`'; right = '`';
} }
if(key->keyval == GDK_KEY_asterisk) { if(event->keyval == GDK_KEY_asterisk) {
left = '*'; left = '*';
right = '*'; right = '*';
} }
if(key->keyval == GDK_KEY_underscore) { if(event->keyval == GDK_KEY_underscore) {
left = '_'; left = '_';
right = '_'; right = '_';
} }
if(key->keyval == GDK_KEY_dead_tilde) { if(event->keyval == GDK_KEY_dead_tilde) {
left = '~'; left = '~';
right = '~'; right = '~';
} }
} }
else if(is_bracket_language) { else if(is_bracket_language) {
// Insert /**/ around selection // Insert /**/ around selection
if(key->keyval == GDK_KEY_slash) { if(event->keyval == GDK_KEY_slash) {
left = "/*"; left = "/*";
right = "*/"; right = "*/";
} }
@ -2975,7 +2975,7 @@ bool Source::View::on_key_press_event_smart_inserts(GdkEventKey *key) {
if(is_code_iter(iter)) { if(is_code_iter(iter)) {
// Insert () // Insert ()
if(key->keyval == GDK_KEY_parenleft && allow_insertion(iter)) { if(event->keyval == GDK_KEY_parenleft && allow_insertion(iter)) {
if(symbol_count(iter, '(', ')') >= 0) { if(symbol_count(iter, '(', ')') >= 0) {
get_buffer()->insert_at_cursor(")"); get_buffer()->insert_at_cursor(")");
auto iter = get_buffer()->get_insert()->get_iter(); auto iter = get_buffer()->get_insert()->get_iter();
@ -2986,7 +2986,7 @@ bool Source::View::on_key_press_event_smart_inserts(GdkEventKey *key) {
} }
} }
// Insert [] // Insert []
else if(key->keyval == GDK_KEY_bracketleft && allow_insertion(iter)) { else if(event->keyval == GDK_KEY_bracketleft && allow_insertion(iter)) {
if(symbol_count(iter, '[', ']') >= 0) { if(symbol_count(iter, '[', ']') >= 0) {
get_buffer()->insert_at_cursor("]"); get_buffer()->insert_at_cursor("]");
auto iter = get_buffer()->get_insert()->get_iter(); auto iter = get_buffer()->get_insert()->get_iter();
@ -2997,7 +2997,7 @@ bool Source::View::on_key_press_event_smart_inserts(GdkEventKey *key) {
} }
} }
// Move right on ] in [] // Move right on ] in []
else if(key->keyval == GDK_KEY_bracketright) { else if(event->keyval == GDK_KEY_bracketright) {
if(*iter == ']' && symbol_count(iter, '[', ']') <= 0) { if(*iter == ']' && symbol_count(iter, '[', ']') <= 0) {
iter.forward_char(); iter.forward_char();
get_buffer()->place_cursor(iter); get_buffer()->place_cursor(iter);
@ -3006,7 +3006,7 @@ bool Source::View::on_key_press_event_smart_inserts(GdkEventKey *key) {
} }
} }
// Insert {} // Insert {}
else if(key->keyval == GDK_KEY_braceleft && allow_insertion(iter)) { else if(event->keyval == GDK_KEY_braceleft && allow_insertion(iter)) {
auto start_iter = get_start_of_expression(iter); auto start_iter = get_start_of_expression(iter);
// Do not add } if { is at end of line and next line has a higher indentation // Do not add } if { is at end of line and next line has a higher indentation
auto test_iter = iter; auto test_iter = iter;
@ -3055,7 +3055,7 @@ bool Source::View::on_key_press_event_smart_inserts(GdkEventKey *key) {
return false; return false;
} }
// Move right on } in {} // Move right on } in {}
else if(key->keyval == GDK_KEY_braceright) { else if(event->keyval == GDK_KEY_braceright) {
if(*iter == '}' && symbol_count(iter, '{', '}') <= 0) { if(*iter == '}' && symbol_count(iter, '{', '}') <= 0) {
iter.forward_char(); iter.forward_char();
get_buffer()->place_cursor(iter); get_buffer()->place_cursor(iter);
@ -3064,7 +3064,7 @@ bool Source::View::on_key_press_event_smart_inserts(GdkEventKey *key) {
} }
} }
// Insert '' // Insert ''
else if(key->keyval == GDK_KEY_apostrophe && allow_insertion(iter) && symbol_count(iter, '\'') % 2 == 0) { else if(event->keyval == GDK_KEY_apostrophe && allow_insertion(iter) && symbol_count(iter, '\'') % 2 == 0) {
get_buffer()->insert_at_cursor("''"); get_buffer()->insert_at_cursor("''");
auto iter = get_buffer()->get_insert()->get_iter(); auto iter = get_buffer()->get_insert()->get_iter();
iter.backward_char(); iter.backward_char();
@ -3073,7 +3073,7 @@ bool Source::View::on_key_press_event_smart_inserts(GdkEventKey *key) {
return true; return true;
} }
// Insert "" // Insert ""
else if(key->keyval == GDK_KEY_quotedbl && allow_insertion(iter) && symbol_count(iter, '"') % 2 == 0) { else if(event->keyval == GDK_KEY_quotedbl && allow_insertion(iter) && symbol_count(iter, '"') % 2 == 0) {
get_buffer()->insert_at_cursor("\"\""); get_buffer()->insert_at_cursor("\"\"");
auto iter = get_buffer()->get_insert()->get_iter(); auto iter = get_buffer()->get_insert()->get_iter();
iter.backward_char(); iter.backward_char();
@ -3082,13 +3082,13 @@ bool Source::View::on_key_press_event_smart_inserts(GdkEventKey *key) {
return true; return true;
} }
// Move right on last ' in '', or last " in "" // Move right on last ' in '', or last " in ""
else if(((key->keyval == GDK_KEY_apostrophe && *iter == '\'') || (key->keyval == GDK_KEY_quotedbl && *iter == '\"')) && is_spellcheck_iter(iter)) { else if(((event->keyval == GDK_KEY_apostrophe && *iter == '\'') || (event->keyval == GDK_KEY_quotedbl && *iter == '\"')) && is_spellcheck_iter(iter)) {
get_buffer()->place_cursor(next_iter); get_buffer()->place_cursor(next_iter);
scroll_to(get_buffer()->get_insert()); scroll_to(get_buffer()->get_insert());
return true; return true;
} }
// Insert ; at the end of line, if iter is at the last ) // Insert ; at the end of line, if iter is at the last )
else if(key->keyval == GDK_KEY_semicolon) { else if(event->keyval == GDK_KEY_semicolon) {
if(*iter == ')' && symbol_count(iter, '(', ')') <= 0 && next_iter.ends_line()) { if(*iter == ')' && symbol_count(iter, '(', ')') <= 0 && next_iter.ends_line()) {
auto start_iter = get_start_of_expression(previous_iter); auto start_iter = get_start_of_expression(previous_iter);
if(*start_iter == '(') { if(*start_iter == '(') {
@ -3107,7 +3107,7 @@ bool Source::View::on_key_press_event_smart_inserts(GdkEventKey *key) {
} }
} }
// Delete () // Delete ()
else if(key->keyval == GDK_KEY_BackSpace) { else if(event->keyval == GDK_KEY_BackSpace) {
if(*previous_iter == '(' && *iter == ')' && symbol_count(iter, '(', ')') <= 0) { if(*previous_iter == '(' && *iter == ')' && symbol_count(iter, '(', ')') <= 0) {
auto next_iter = iter; auto next_iter = iter;
next_iter.forward_char(); next_iter.forward_char();
@ -3132,7 +3132,7 @@ bool Source::View::on_key_press_event_smart_inserts(GdkEventKey *key) {
return true; return true;
} }
// Delete '' or "" // Delete '' or ""
else if(key->keyval == GDK_KEY_BackSpace) { else if(event->keyval == GDK_KEY_BackSpace) {
if((*previous_iter == '\'' && *iter == '\'') || (*previous_iter == '"' && *iter == '"')) { if((*previous_iter == '\'' && *iter == '\'') || (*previous_iter == '"' && *iter == '"')) {
get_buffer()->erase(previous_iter, next_iter); get_buffer()->erase(previous_iter, next_iter);
scroll_to(get_buffer()->get_insert()); scroll_to(get_buffer()->get_insert());

10
src/source.hpp

@ -139,11 +139,11 @@ namespace Source {
/// If insert is at an possible argument. Also based on last key press. /// If insert is at an possible argument. Also based on last key press.
bool is_possible_argument(); bool is_possible_argument();
bool on_key_press_event(GdkEventKey *key) override; bool on_key_press_event(GdkEventKey *event) override;
bool on_key_press_event_basic(GdkEventKey *key); bool on_key_press_event_basic(GdkEventKey *event);
bool on_key_press_event_bracket_language(GdkEventKey *key); bool on_key_press_event_bracket_language(GdkEventKey *event);
bool on_key_press_event_smart_brackets(GdkEventKey *key); bool on_key_press_event_smart_brackets(GdkEventKey *event);
bool on_key_press_event_smart_inserts(GdkEventKey *key); bool on_key_press_event_smart_inserts(GdkEventKey *event);
bool on_button_press_event(GdkEventButton *event) override; bool on_button_press_event(GdkEventButton *event) override;
bool on_motion_notify_event(GdkEventMotion *motion_event) override; bool on_motion_notify_event(GdkEventMotion *motion_event) override;

69
src/source_base.cpp

@ -941,9 +941,9 @@ std::string Source::BaseView::get_selected_text() {
return get_buffer()->get_text(start, end); return get_buffer()->get_text(start, end);
} }
bool Source::BaseView::on_key_press_event(GdkEventKey *key) { bool Source::BaseView::on_key_press_event(GdkEventKey *event) {
// Move cursor one paragraph down // Move cursor one paragraph down
if((key->keyval == GDK_KEY_Down || key->keyval == GDK_KEY_KP_Down) && (key->state & GDK_CONTROL_MASK) > 0) { if((event->keyval == GDK_KEY_Down || event->keyval == GDK_KEY_KP_Down) && (event->state & GDK_CONTROL_MASK) > 0) {
auto selection_start_iter = get_buffer()->get_selection_bound()->get_iter(); auto selection_start_iter = get_buffer()->get_selection_bound()->get_iter();
auto iter = get_buffer()->get_iter_at_line(get_buffer()->get_insert()->get_iter().get_line()); auto iter = get_buffer()->get_iter_at_line(get_buffer()->get_insert()->get_iter().get_line());
bool empty_line = false; bool empty_line = false;
@ -962,7 +962,7 @@ bool Source::BaseView::on_key_press_event(GdkEventKey *key) {
iter.forward_char(); iter.forward_char();
} }
iter = get_buffer()->get_iter_at_line(iter.get_line()); iter = get_buffer()->get_iter_at_line(iter.get_line());
if((key->state & GDK_SHIFT_MASK) > 0) if((event->state & GDK_SHIFT_MASK) > 0)
get_buffer()->select_range(iter, selection_start_iter); get_buffer()->select_range(iter, selection_start_iter);
else else
get_buffer()->place_cursor(iter); get_buffer()->place_cursor(iter);
@ -970,7 +970,7 @@ bool Source::BaseView::on_key_press_event(GdkEventKey *key) {
return true; return true;
} }
//Move cursor one paragraph up //Move cursor one paragraph up
else if((key->keyval == GDK_KEY_Up || key->keyval == GDK_KEY_KP_Up) && (key->state & GDK_CONTROL_MASK) > 0) { else if((event->keyval == GDK_KEY_Up || event->keyval == GDK_KEY_KP_Up) && (event->state & GDK_CONTROL_MASK) > 0) {
auto selection_start_iter = get_buffer()->get_selection_bound()->get_iter(); auto selection_start_iter = get_buffer()->get_selection_bound()->get_iter();
auto iter = get_buffer()->get_iter_at_line(get_buffer()->get_insert()->get_iter().get_line()); auto iter = get_buffer()->get_iter_at_line(get_buffer()->get_insert()->get_iter().get_line());
iter.backward_char(); iter.backward_char();
@ -1000,7 +1000,7 @@ bool Source::BaseView::on_key_press_event(GdkEventKey *key) {
if(!iter.starts_line()) // For CR+LF if(!iter.starts_line()) // For CR+LF
iter.forward_char(); iter.forward_char();
} }
if((key->state & GDK_SHIFT_MASK) > 0) if((event->state & GDK_SHIFT_MASK) > 0)
get_buffer()->select_range(iter, selection_start_iter); get_buffer()->select_range(iter, selection_start_iter);
else else
get_buffer()->place_cursor(iter); get_buffer()->place_cursor(iter);
@ -1009,32 +1009,32 @@ bool Source::BaseView::on_key_press_event(GdkEventKey *key) {
} }
// Smart Home // Smart Home
if((key->keyval == GDK_KEY_Home || key->keyval == GDK_KEY_KP_Home) && (key->state & GDK_CONTROL_MASK) == 0) { if((event->keyval == GDK_KEY_Home || event->keyval == GDK_KEY_KP_Home) && (event->state & GDK_CONTROL_MASK) == 0) {
enable_multiple_cursors = false; enable_multiple_cursors = false;
for(auto &extra_cursor : extra_cursors) { for(auto &extra_cursor : extra_cursors) {
extra_cursor.move(get_smart_home_iter(extra_cursor.insert->get_iter()), key->state & GDK_SHIFT_MASK); extra_cursor.move(get_smart_home_iter(extra_cursor.insert->get_iter()), event->state & GDK_SHIFT_MASK);
extra_cursor.line_offset = extra_cursor.insert->get_iter().get_line_offset(); extra_cursor.line_offset = extra_cursor.insert->get_iter().get_line_offset();
} }
auto insert = get_buffer()->get_insert(); auto insert = get_buffer()->get_insert();
auto iter = get_smart_home_iter(get_buffer()->get_insert()->get_iter()); auto iter = get_smart_home_iter(get_buffer()->get_insert()->get_iter());
get_buffer()->move_mark(insert, iter); get_buffer()->move_mark(insert, iter);
if((key->state & GDK_SHIFT_MASK) == 0) if((event->state & GDK_SHIFT_MASK) == 0)
get_buffer()->move_mark_by_name("selection_bound", iter); get_buffer()->move_mark_by_name("selection_bound", iter);
scroll_to(get_buffer()->get_insert()); scroll_to(get_buffer()->get_insert());
enable_multiple_cursors = true; enable_multiple_cursors = true;
return true; return true;
} }
// Smart End // Smart End
if((key->keyval == GDK_KEY_End || key->keyval == GDK_KEY_KP_End) && (key->state & GDK_CONTROL_MASK) == 0) { if((event->keyval == GDK_KEY_End || event->keyval == GDK_KEY_KP_End) && (event->state & GDK_CONTROL_MASK) == 0) {
enable_multiple_cursors = false; enable_multiple_cursors = false;
for(auto &extra_cursor : extra_cursors) { for(auto &extra_cursor : extra_cursors) {
extra_cursor.move(get_smart_end_iter(extra_cursor.insert->get_iter()), key->state & GDK_SHIFT_MASK); extra_cursor.move(get_smart_end_iter(extra_cursor.insert->get_iter()), event->state & GDK_SHIFT_MASK);
extra_cursor.line_offset = std::max(extra_cursor.line_offset, extra_cursor.insert->get_iter().get_line_offset()); extra_cursor.line_offset = std::max(extra_cursor.line_offset, extra_cursor.insert->get_iter().get_line_offset());
} }
auto insert = get_buffer()->get_insert(); auto insert = get_buffer()->get_insert();
auto iter = get_smart_end_iter(get_buffer()->get_insert()->get_iter()); auto iter = get_smart_end_iter(get_buffer()->get_insert()->get_iter());
get_buffer()->move_mark(insert, iter); get_buffer()->move_mark(insert, iter);
if((key->state & GDK_SHIFT_MASK) == 0) if((event->state & GDK_SHIFT_MASK) == 0)
get_buffer()->move_mark_by_name("selection_bound", iter); get_buffer()->move_mark_by_name("selection_bound", iter);
scroll_to(get_buffer()->get_insert()); scroll_to(get_buffer()->get_insert());
enable_multiple_cursors = true; enable_multiple_cursors = true;
@ -1042,48 +1042,48 @@ bool Source::BaseView::on_key_press_event(GdkEventKey *key) {
} }
// Move cursors left one word // Move cursors left one word
if((key->keyval == GDK_KEY_Left || key->keyval == GDK_KEY_KP_Left) && (key->state & GDK_CONTROL_MASK) > 0) { if((event->keyval == GDK_KEY_Left || event->keyval == GDK_KEY_KP_Left) && (event->state & GDK_CONTROL_MASK) > 0) {
enable_multiple_cursors = false; enable_multiple_cursors = false;
for(auto &extra_cursor : extra_cursors) { for(auto &extra_cursor : extra_cursors) {
auto iter = extra_cursor.insert->get_iter(); auto iter = extra_cursor.insert->get_iter();
iter.backward_word_start(); iter.backward_word_start();
extra_cursor.line_offset = iter.get_line_offset(); extra_cursor.line_offset = iter.get_line_offset();
extra_cursor.move(iter, key->state & GDK_SHIFT_MASK); extra_cursor.move(iter, event->state & GDK_SHIFT_MASK);
} }
auto insert = get_buffer()->get_insert(); auto insert = get_buffer()->get_insert();
auto iter = insert->get_iter(); auto iter = insert->get_iter();
iter.backward_word_start(); iter.backward_word_start();
get_buffer()->move_mark(insert, iter); get_buffer()->move_mark(insert, iter);
if((key->state & GDK_SHIFT_MASK) == 0) if((event->state & GDK_SHIFT_MASK) == 0)
get_buffer()->move_mark_by_name("selection_bound", iter); get_buffer()->move_mark_by_name("selection_bound", iter);
enable_multiple_cursors = true; enable_multiple_cursors = true;
return true; return true;
} }
// Move cursors right one word // Move cursors right one word
if((key->keyval == GDK_KEY_Right || key->keyval == GDK_KEY_KP_Right) && (key->state & GDK_CONTROL_MASK) > 0) { if((event->keyval == GDK_KEY_Right || event->keyval == GDK_KEY_KP_Right) && (event->state & GDK_CONTROL_MASK) > 0) {
enable_multiple_cursors = false; enable_multiple_cursors = false;
for(auto &extra_cursor : extra_cursors) { for(auto &extra_cursor : extra_cursors) {
auto iter = extra_cursor.insert->get_iter(); auto iter = extra_cursor.insert->get_iter();
iter.forward_word_end(); iter.forward_word_end();
extra_cursor.line_offset = iter.get_line_offset(); extra_cursor.line_offset = iter.get_line_offset();
extra_cursor.move(iter, key->state & GDK_SHIFT_MASK); extra_cursor.move(iter, event->state & GDK_SHIFT_MASK);
extra_cursor.insert->get_buffer()->apply_tag(extra_cursor_selection, extra_cursor.insert->get_iter(), extra_cursor.selection_bound->get_iter()); extra_cursor.insert->get_buffer()->apply_tag(extra_cursor_selection, extra_cursor.insert->get_iter(), extra_cursor.selection_bound->get_iter());
} }
auto insert = get_buffer()->get_insert(); auto insert = get_buffer()->get_insert();
auto iter = insert->get_iter(); auto iter = insert->get_iter();
iter.forward_word_end(); iter.forward_word_end();
get_buffer()->move_mark(insert, iter); get_buffer()->move_mark(insert, iter);
if((key->state & GDK_SHIFT_MASK) == 0) if((event->state & GDK_SHIFT_MASK) == 0)
get_buffer()->move_mark_by_name("selection_bound", iter); get_buffer()->move_mark_by_name("selection_bound", iter);
enable_multiple_cursors = true; enable_multiple_cursors = true;
return true; return true;
} }
return Source::SearchView::on_key_press_event(key); return Source::SearchView::on_key_press_event(event);
} }
bool Source::BaseView::on_key_press_event_extra_cursors(GdkEventKey *key) { bool Source::BaseView::on_key_press_event_extra_cursors(GdkEventKey *event) {
if(key->keyval == GDK_KEY_Escape) { if(event->keyval == GDK_KEY_Escape) {
if(clear_snippet_marks()) if(clear_snippet_marks())
return true; return true;
if(!extra_cursors.empty()) { if(!extra_cursors.empty()) {
@ -1101,7 +1101,7 @@ bool Source::BaseView::on_key_press_event_extra_cursors(GdkEventKey *key) {
unsigned move_last_created_cursor_mask = GDK_SHIFT_MASK | GDK_MOD1_MASK; unsigned move_last_created_cursor_mask = GDK_SHIFT_MASK | GDK_MOD1_MASK;
// Move last created cursor // Move last created cursor
if((key->keyval == GDK_KEY_Left || key->keyval == GDK_KEY_KP_Left) && (key->state & move_last_created_cursor_mask) == move_last_created_cursor_mask) { if((event->keyval == GDK_KEY_Left || event->keyval == GDK_KEY_KP_Left) && (event->state & move_last_created_cursor_mask) == move_last_created_cursor_mask) {
if(extra_cursors.empty()) if(extra_cursors.empty())
return false; return false;
auto iter = extra_cursors.back().insert->get_iter(); auto iter = extra_cursors.back().insert->get_iter();
@ -1110,7 +1110,7 @@ bool Source::BaseView::on_key_press_event_extra_cursors(GdkEventKey *key) {
extra_cursors.back().line_offset = iter.get_line_offset(); extra_cursors.back().line_offset = iter.get_line_offset();
return true; return true;
} }
if((key->keyval == GDK_KEY_Right || key->keyval == GDK_KEY_KP_Right) && (key->state & move_last_created_cursor_mask) == move_last_created_cursor_mask) { if((event->keyval == GDK_KEY_Right || event->keyval == GDK_KEY_KP_Right) && (event->state & move_last_created_cursor_mask) == move_last_created_cursor_mask) {
if(extra_cursors.empty()) if(extra_cursors.empty())
return false; return false;
auto iter = extra_cursors.back().insert->get_iter(); auto iter = extra_cursors.back().insert->get_iter();
@ -1119,7 +1119,7 @@ bool Source::BaseView::on_key_press_event_extra_cursors(GdkEventKey *key) {
extra_cursors.back().line_offset = iter.get_line_offset(); extra_cursors.back().line_offset = iter.get_line_offset();
return true; return true;
} }
if((key->keyval == GDK_KEY_Up || key->keyval == GDK_KEY_KP_Up) && (key->state & move_last_created_cursor_mask) == move_last_created_cursor_mask) { if((event->keyval == GDK_KEY_Up || event->keyval == GDK_KEY_KP_Up) && (event->state & move_last_created_cursor_mask) == move_last_created_cursor_mask) {
if(extra_cursors.empty()) if(extra_cursors.empty())
return false; return false;
auto iter = extra_cursors.back().insert->get_iter(); auto iter = extra_cursors.back().insert->get_iter();
@ -1131,7 +1131,7 @@ bool Source::BaseView::on_key_press_event_extra_cursors(GdkEventKey *key) {
extra_cursors.back().move(iter, false); extra_cursors.back().move(iter, false);
return true; return true;
} }
if((key->keyval == GDK_KEY_Down || key->keyval == GDK_KEY_KP_Down) && (key->state & move_last_created_cursor_mask) == move_last_created_cursor_mask) { if((event->keyval == GDK_KEY_Down || event->keyval == GDK_KEY_KP_Down) && (event->state & move_last_created_cursor_mask) == move_last_created_cursor_mask) {
if(extra_cursors.empty()) if(extra_cursors.empty())
return false; return false;
auto iter = extra_cursors.back().insert->get_iter(); auto iter = extra_cursors.back().insert->get_iter();
@ -1145,7 +1145,7 @@ bool Source::BaseView::on_key_press_event_extra_cursors(GdkEventKey *key) {
} }
// Create extra cursor // Create extra cursor
if((key->keyval == GDK_KEY_Up || key->keyval == GDK_KEY_KP_Up) && (key->state & create_cursor_mask) == create_cursor_mask) { if((event->keyval == GDK_KEY_Up || event->keyval == GDK_KEY_KP_Up) && (event->state & create_cursor_mask) == create_cursor_mask) {
auto iter = get_buffer()->get_insert()->get_iter(); auto iter = get_buffer()->get_insert()->get_iter();
auto insert_line_offset = iter.get_line_offset(); auto insert_line_offset = iter.get_line_offset();
auto offset = iter.get_offset(); auto offset = iter.get_offset();
@ -1165,7 +1165,7 @@ bool Source::BaseView::on_key_press_event_extra_cursors(GdkEventKey *key) {
} }
return true; return true;
} }
if((key->keyval == GDK_KEY_Down || key->keyval == GDK_KEY_KP_Down) && (key->state & create_cursor_mask) == create_cursor_mask) { if((event->keyval == GDK_KEY_Down || event->keyval == GDK_KEY_KP_Down) && (event->state & create_cursor_mask) == create_cursor_mask) {
auto iter = get_buffer()->get_insert()->get_iter(); auto iter = get_buffer()->get_insert()->get_iter();
auto insert_line_offset = iter.get_line_offset(); auto insert_line_offset = iter.get_line_offset();
auto offset = iter.get_offset(); auto offset = iter.get_offset();
@ -1187,7 +1187,7 @@ bool Source::BaseView::on_key_press_event_extra_cursors(GdkEventKey *key) {
} }
// Move cursors up/down // Move cursors up/down
if((key->keyval == GDK_KEY_Up || key->keyval == GDK_KEY_KP_Up)) { if((event->keyval == GDK_KEY_Up || event->keyval == GDK_KEY_KP_Up)) {
enable_multiple_cursors = false; enable_multiple_cursors = false;
for(auto &extra_cursor : extra_cursors) { for(auto &extra_cursor : extra_cursors) {
auto iter = extra_cursor.insert->get_iter(); auto iter = extra_cursor.insert->get_iter();
@ -1196,11 +1196,11 @@ bool Source::BaseView::on_key_press_event_extra_cursors(GdkEventKey *key) {
if(!end_line_iter.ends_line()) if(!end_line_iter.ends_line())
end_line_iter.forward_to_line_end(); end_line_iter.forward_to_line_end();
iter.forward_chars(std::min(extra_cursor.line_offset, end_line_iter.get_line_offset())); iter.forward_chars(std::min(extra_cursor.line_offset, end_line_iter.get_line_offset()));
extra_cursor.move(iter, key->state & GDK_SHIFT_MASK); extra_cursor.move(iter, event->state & GDK_SHIFT_MASK);
} }
return false; return false;
} }
if((key->keyval == GDK_KEY_Down || key->keyval == GDK_KEY_KP_Down)) { if((event->keyval == GDK_KEY_Down || event->keyval == GDK_KEY_KP_Down)) {
enable_multiple_cursors = false; enable_multiple_cursors = false;
for(auto &extra_cursor : extra_cursors) { for(auto &extra_cursor : extra_cursors) {
auto iter = extra_cursor.insert->get_iter(); auto iter = extra_cursor.insert->get_iter();
@ -1209,15 +1209,15 @@ bool Source::BaseView::on_key_press_event_extra_cursors(GdkEventKey *key) {
if(!end_line_iter.ends_line()) if(!end_line_iter.ends_line())
end_line_iter.forward_to_line_end(); end_line_iter.forward_to_line_end();
iter.forward_chars(std::min(extra_cursor.line_offset, end_line_iter.get_line_offset())); iter.forward_chars(std::min(extra_cursor.line_offset, end_line_iter.get_line_offset()));
extra_cursor.move(iter, key->state & GDK_SHIFT_MASK); extra_cursor.move(iter, event->state & GDK_SHIFT_MASK);
} }
return false; return false;
} }
// Move cursors left/right of selection // Move cursors left/right of selection
if((key->keyval == GDK_KEY_Left || key->keyval == GDK_KEY_KP_Left)) { if((event->keyval == GDK_KEY_Left || event->keyval == GDK_KEY_KP_Left)) {
enable_multiple_cursors = false; enable_multiple_cursors = false;
bool shift_pressed = (key->state & GDK_SHIFT_MASK) != 0; bool shift_pressed = (event->state & GDK_SHIFT_MASK) != 0;
for(auto &extra_cursor : extra_cursors) { for(auto &extra_cursor : extra_cursors) {
auto iter = extra_cursor.insert->get_iter(); auto iter = extra_cursor.insert->get_iter();
if(!shift_pressed && get_buffer()->get_has_selection()) if(!shift_pressed && get_buffer()->get_has_selection())
@ -1228,9 +1228,9 @@ bool Source::BaseView::on_key_press_event_extra_cursors(GdkEventKey *key) {
} }
return false; return false;
} }
if((key->keyval == GDK_KEY_Right || key->keyval == GDK_KEY_KP_Right)) { if((event->keyval == GDK_KEY_Right || event->keyval == GDK_KEY_KP_Right)) {
enable_multiple_cursors = false; enable_multiple_cursors = false;
bool shift_pressed = (key->state & GDK_SHIFT_MASK) != 0; bool shift_pressed = (event->state & GDK_SHIFT_MASK) != 0;
for(auto &extra_cursor : extra_cursors) { for(auto &extra_cursor : extra_cursors) {
auto iter = extra_cursor.insert->get_iter(); auto iter = extra_cursor.insert->get_iter();
if(!shift_pressed && get_buffer()->get_has_selection()) if(!shift_pressed && get_buffer()->get_has_selection())
@ -1284,7 +1284,6 @@ void Source::BaseView::setup_extra_cursor_signals() {
if(offset_diff != 0) { if(offset_diff != 0) {
for(auto &extra_cursor : extra_cursors) { for(auto &extra_cursor : extra_cursors) {
auto iter = extra_cursor.selection_bound->get_iter(); auto iter = extra_cursor.selection_bound->get_iter();
auto start = iter;
iter.forward_chars(offset_diff); iter.forward_chars(offset_diff);
extra_cursor.move_selection_bound(iter); extra_cursor.move_selection_bound(iter);
} }

6
src/source_base.hpp

@ -41,7 +41,7 @@ namespace Source {
std::function<void(int number)> update_search_occurrences; std::function<void(int number)> update_search_occurrences;
protected: protected:
bool on_key_press_event(GdkEventKey *key) override; bool on_key_press_event(GdkEventKey *event) override;
private: private:
GtkSourceSearchContext *search_context; GtkSourceSearchContext *search_context;
@ -167,8 +167,8 @@ namespace Source {
protected: protected:
Glib::RefPtr<Gtk::TextTag> extra_cursor_selection; Glib::RefPtr<Gtk::TextTag> extra_cursor_selection;
bool on_key_press_event(GdkEventKey *key) override; bool on_key_press_event(GdkEventKey *event) override;
bool on_key_press_event_extra_cursors(GdkEventKey *key); bool on_key_press_event_extra_cursors(GdkEventKey *event);
class ExtraCursor { class ExtraCursor {
Glib::RefPtr<Gtk::TextTag> extra_cursor_selection; Glib::RefPtr<Gtk::TextTag> extra_cursor_selection;

10
src/source_clang.cpp

@ -730,12 +730,12 @@ Source::ClangViewAutocomplete::ClangViewAutocomplete(const boost::filesystem::pa
}, false); }, false);
// Remove argument completions // Remove argument completions
signal_key_press_event().connect([this](GdkEventKey *key) { signal_key_press_event().connect([this](GdkEventKey *event) {
if(show_parameters && CompletionDialog::get() && CompletionDialog::get()->is_visible() && if(show_parameters && CompletionDialog::get() && CompletionDialog::get()->is_visible() &&
key->keyval != GDK_KEY_Down && key->keyval != GDK_KEY_Up && event->keyval != GDK_KEY_Down && event->keyval != GDK_KEY_Up &&
key->keyval != GDK_KEY_Return && key->keyval != GDK_KEY_KP_Enter && event->keyval != GDK_KEY_Return && event->keyval != GDK_KEY_KP_Enter &&
key->keyval != GDK_KEY_ISO_Left_Tab && key->keyval != GDK_KEY_Tab && event->keyval != GDK_KEY_ISO_Left_Tab && event->keyval != GDK_KEY_Tab &&
(key->keyval < GDK_KEY_Shift_L || key->keyval > GDK_KEY_Hyper_R)) { (event->keyval < GDK_KEY_Shift_L || event->keyval > GDK_KEY_Hyper_R)) {
get_buffer()->erase(CompletionDialog::get()->start_mark->get_iter(), get_buffer()->get_insert()->get_iter()); get_buffer()->erase(CompletionDialog::get()->start_mark->get_iter(), get_buffer()->get_insert()->get_iter());
CompletionDialog::get()->hide(); CompletionDialog::get()->hide();
} }

10
src/source_language_protocol.cpp

@ -1403,12 +1403,12 @@ void Source::LanguageProtocolView::setup_autocomplete() {
// Remove argument completions // Remove argument completions
if(!has_named_parameters()) { // Do not remove named parameters in for instance Python if(!has_named_parameters()) { // Do not remove named parameters in for instance Python
signal_key_press_event().connect([this](GdkEventKey *key) { signal_key_press_event().connect([this](GdkEventKey *event) {
if(autocomplete_show_arguments && CompletionDialog::get() && CompletionDialog::get()->is_visible() && if(autocomplete_show_arguments && CompletionDialog::get() && CompletionDialog::get()->is_visible() &&
key->keyval != GDK_KEY_Down && key->keyval != GDK_KEY_Up && event->keyval != GDK_KEY_Down && event->keyval != GDK_KEY_Up &&
key->keyval != GDK_KEY_Return && key->keyval != GDK_KEY_KP_Enter && event->keyval != GDK_KEY_Return && event->keyval != GDK_KEY_KP_Enter &&
key->keyval != GDK_KEY_ISO_Left_Tab && key->keyval != GDK_KEY_Tab && event->keyval != GDK_KEY_ISO_Left_Tab && event->keyval != GDK_KEY_Tab &&
(key->keyval < GDK_KEY_Shift_L || key->keyval > GDK_KEY_Hyper_R)) { (event->keyval < GDK_KEY_Shift_L || event->keyval > GDK_KEY_Hyper_R)) {
get_buffer()->erase(CompletionDialog::get()->start_mark->get_iter(), get_buffer()->get_insert()->get_iter()); get_buffer()->erase(CompletionDialog::get()->start_mark->get_iter(), get_buffer()->get_insert()->get_iter());
CompletionDialog::get()->hide(); CompletionDialog::get()->hide();
} }

6
tests/stubs/selection_dialog.cpp

@ -16,13 +16,13 @@ std::unique_ptr<SelectionDialog> SelectionDialog::instance;
SelectionDialog::SelectionDialog(Gtk::TextView *text_view, const boost::optional<Gtk::TextIter> &start_iter, bool show_search_entry, bool use_markup) SelectionDialog::SelectionDialog(Gtk::TextView *text_view, const boost::optional<Gtk::TextIter> &start_iter, bool show_search_entry, bool use_markup)
: SelectionDialogBase(text_view, start_iter, show_search_entry, use_markup) {} : SelectionDialogBase(text_view, start_iter, show_search_entry, use_markup) {}
bool SelectionDialog::on_key_press(GdkEventKey *key) { return true; } bool SelectionDialog::on_key_press(GdkEventKey *event) { return true; }
std::unique_ptr<CompletionDialog> CompletionDialog::instance; std::unique_ptr<CompletionDialog> CompletionDialog::instance;
CompletionDialog::CompletionDialog(Gtk::TextView *text_view, const Gtk::TextIter &start_iter) CompletionDialog::CompletionDialog(Gtk::TextView *text_view, const Gtk::TextIter &start_iter)
: SelectionDialogBase(text_view, start_iter, false, false) {} : SelectionDialogBase(text_view, start_iter, false, false) {}
bool CompletionDialog::on_key_press(GdkEventKey *key) { return true; } bool CompletionDialog::on_key_press(GdkEventKey *event) { return true; }
bool CompletionDialog::on_key_release(GdkEventKey *key) { return true; } bool CompletionDialog::on_key_release(GdkEventKey *event) { return true; }

Loading…
Cancel
Save