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();
});
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()->on_key_release(key))
if(CompletionDialog::get()->on_key_release(event))
return true;
}
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) {}
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) {
auto unicode = gdk_keyval_to_unicode(key_event->keyval);
auto unicode = gdk_keyval_to_unicode(event->keyval);
if(unicode > 31 && unicode != 127)
return true;
}
return Gtk::FileChooserDialog::on_key_press_event(key_event);
return Gtk::FileChooserDialog::on_key_press_event(event);
}
};
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;
}
});
signal_key_press_event().connect([this](GdkEventKey *key) {
if(key->keyval == GDK_KEY_Up || key->keyval == GDK_KEY_KP_Up) {
signal_key_press_event().connect([this](GdkEventKey *event) {
if(event->keyval == GDK_KEY_Up || event->keyval == GDK_KEY_KP_Up) {
auto &history = entry_histories[get_placeholder_text()];
if(history.size() > 0) {
selected_history++;
@ -39,7 +39,7 @@ EntryBox::Entry::Entry(const std::string &content, std::function<void(const std:
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()];
if(history.size() > 0) {
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)
: 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());
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;
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(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) {
size_t pos = 0;
while((pos = row_lc.find('<', pos)) != std::string::npos) {
auto pos2 = row_lc.find('>', 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 false;
});
@ -238,11 +238,11 @@ SelectionDialog::SelectionDialog(Gtk::TextView *text_view, const boost::optional
return false;
});
search_entry.signal_changed().connect([this, search_key, filter_model]() {
*search_key = search_entry.get_text();
search_entry.signal_changed().connect([this, search_text, filter_model]() {
*search_text = search_entry.get_text();
filter_model->refilter();
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)
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) {
if((key->keyval == GDK_KEY_Down || key->keyval == GDK_KEY_KP_Down) && list_view_text.get_model()->children().size() > 0) {
bool SelectionDialog::on_key_press(GdkEventKey *event) {
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();
if(it) {
it++;
@ -272,7 +272,7 @@ bool SelectionDialog::on_key_press(GdkEventKey *key) {
}
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();
if(it) {
it--;
@ -281,7 +281,7 @@ bool SelectionDialog::on_key_press(GdkEventKey *key) {
}
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();
if(it) {
auto column = list_view_text.get_column(0);
@ -291,35 +291,35 @@ bool SelectionDialog::on_key_press(GdkEventKey *key) {
hide();
return true;
}
else if(key->keyval == GDK_KEY_Escape) {
else if(event->keyval == GDK_KEY_Escape) {
hide();
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();
return false;
}
else if(show_search_entry) {
#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();
if(key->keyval == GDK_KEY_dead_tilde) {
if(event->keyval == GDK_KEY_dead_tilde) {
search_entry.insert_text("~", 1, search_entry_length);
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);
return true;
}
else if(key->is_modifier)
else if(event->is_modifier)
return true;
else if(key->keyval == GDK_KEY_BackSpace) {
else if(event->keyval == GDK_KEY_BackSpace) {
auto length = search_entry.get_text_length();
if(length > 0)
search_entry.delete_text(length - 1, length);
return true;
}
else {
gunichar unicode = gdk_keyval_to_unicode(key->keyval);
gunichar unicode = gdk_keyval_to_unicode(event->keyval);
if(unicode >= 32 && unicode != 126) {
auto ustr = Glib::ustring(1, unicode);
search_entry.insert_text(ustr, ustr.bytes(), search_entry_length);
@ -327,7 +327,7 @@ bool SelectionDialog::on_key_press(GdkEventKey *key) {
}
}
#else
search_entry.on_key_press_event(key);
search_entry.on_key_press_event(event);
return true;
#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) {
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());
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;
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(search_key_lc.begin(), search_key_lc.end(), search_key_lc.begin(), ::tolower);
if(row_lc.find(search_key_lc) != std::string::npos)
std::transform(search_text_lc.begin(), search_text_lc.end(), search_text_lc.begin(), ::tolower);
if(row_lc.find(search_text_lc) != std::string::npos)
return true;
return false;
});
}
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;
iter->get_value(0, row);
if(row.find(*search_key) == 0)
if(row.find(*search_text) == 0)
return true;
return false;
});
}
list_view_text.set_model(filter_model);
search_entry.signal_changed().connect([this, search_key, filter_model]() {
*search_key = search_entry.get_text();
search_entry.signal_changed().connect([this, search_text, filter_model]() {
*search_text = search_entry.get_text();
filter_model->refilter();
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();
}
bool CompletionDialog::on_key_release(GdkEventKey *key) {
if(key->keyval == GDK_KEY_Down || key->keyval == GDK_KEY_KP_Down || key->keyval == GDK_KEY_Up || key->keyval == GDK_KEY_KP_Up)
bool CompletionDialog::on_key_release(GdkEventKey *event) {
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;
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;
}
bool CompletionDialog::on_key_press(GdkEventKey *key) {
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) {
bool CompletionDialog::on_key_press(GdkEventKey *event) {
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) {
text_view->get_buffer()->erase(start_mark->get_iter(), text_view->get_buffer()->get_insert()->get_iter());
row_in_entry = false;
if(key->keyval == GDK_KEY_BackSpace)
if(event->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)
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 ||
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;
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();
if(it) {
it++;
@ -437,7 +437,7 @@ bool CompletionDialog::on_key_press(GdkEventKey *key) {
select(false);
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();
if(it) {
it--;
@ -455,12 +455,12 @@ bool CompletionDialog::on_key_press(GdkEventKey *key) {
select(false);
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();
return true;
}
hide();
if(key->keyval == GDK_KEY_Escape)
if(event->keyval == GDK_KEY_Escape)
return true;
return false;
}

6
src/selection_dialog.hpp

@ -75,7 +75,7 @@ class SelectionDialog : public SelectionDialogBase {
static std::unique_ptr<SelectionDialog> instance;
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) {
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;
public:
bool on_key_release(GdkEventKey *key);
bool on_key_press(GdkEventKey *key);
bool on_key_release(GdkEventKey *event);
bool on_key_press(GdkEventKey *event);
static void create(Gtk::TextView *text_view, const Gtk::TextIter &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;
}
bool Source::View::on_key_press_event(GdkEventKey *key) {
bool Source::View::on_key_press_event(GdkEventKey *event) {
enable_multiple_cursors = true;
ScopeGuard guard{[this] {
enable_multiple_cursors = false;
}};
if(SelectionDialog::get() && SelectionDialog::get()->is_visible()) {
if(SelectionDialog::get()->on_key_press(key))
if(SelectionDialog::get()->on_key_press(event))
return true;
}
if(CompletionDialog::get() && CompletionDialog::get()->is_visible()) {
if(CompletionDialog::get()->on_key_press(key))
if(CompletionDialog::get()->on_key_press(event))
return true;
}
if(last_keyval < GDK_KEY_Shift_L || last_keyval > GDK_KEY_Hyper_R)
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;
if(on_key_press_event_extra_cursors(key))
if(on_key_press_event_extra_cursors(event))
return true;
{
LockGuard lock(snippets_mutex);
if(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);
return true;
}
@ -2035,7 +2035,7 @@ bool Source::View::on_key_press_event(GdkEventKey *key) {
get_buffer()->begin_user_action();
// 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();
if(!iter.ends_line()) {
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();
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();
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();
return true;
}
else if(on_key_press_event_basic(key)) {
else if(on_key_press_event_basic(event)) {
get_buffer()->end_user_action();
return true;
}
else {
get_buffer()->end_user_action();
return BaseView::on_key_press_event(key);
return BaseView::on_key_press_event(event);
}
}
// 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();
// 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);
iter = get_buffer()->get_insert()->get_iter();
@ -2104,7 +2104,7 @@ bool Source::View::on_key_press_event_basic(GdkEventKey *key) {
return true;
}
// 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:
if(iter.starts_line() && iter.ends_line() && !get_buffer()->get_has_selection()) {
auto prev_line_iter = iter;
@ -2148,7 +2148,7 @@ bool Source::View::on_key_press_event_basic(GdkEventKey *key) {
return true;
}
// 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;
get_buffer()->get_selection_bounds(selection_start, selection_end);
int line_start = selection_start.get_line();
@ -2187,7 +2187,7 @@ bool Source::View::on_key_press_event_basic(GdkEventKey *key) {
return true;
}
// "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();
bool do_smart_backspace = true;
for(auto &chr : line) {
@ -2212,7 +2212,7 @@ bool Source::View::on_key_press_event_basic(GdkEventKey *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;
bool do_smart_delete = true;
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
// Have only experienced this on OS X
// Note: valgrind reports issues on TextView::on_key_press_event as well
auto unicode = gdk_keyval_to_unicode(key->keyval);
if((key->state & (GDK_CONTROL_MASK | GDK_META_MASK)) == 0 && unicode >= 32 && unicode != 127 &&
auto unicode = gdk_keyval_to_unicode(event->keyval);
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)) {
if(get_buffer()->get_has_selection()) {
Gtk::TextIter selection_start, selection_end;
@ -2262,7 +2262,7 @@ bool Source::View::on_key_press_event_basic(GdkEventKey *key) {
}
//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) *\\(.*[^;}{] *$|"
"^[ \t]*[}]? *else if( +constexpr)? *\\(.*[^;}{] *$|"
"^[ \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)) {
// 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)))) {
cleanup_whitespace_characters(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
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);
iter = get_buffer()->get_insert()->get_iter();
@ -2711,14 +2711,14 @@ bool Source::View::on_key_press_event_bracket_language(GdkEventKey *key) {
return true;
}
// Indent left when writing }, ) or ] on a new line
else if(key->keyval == GDK_KEY_braceright ||
(use_fixed_continuation_indenting && (key->keyval == GDK_KEY_bracketright || key->keyval == GDK_KEY_parenright))) {
else if(event->keyval == GDK_KEY_braceright ||
(use_fixed_continuation_indenting && (event->keyval == GDK_KEY_bracketright || event->keyval == GDK_KEY_parenright))) {
std::string bracket;
if(key->keyval == GDK_KEY_braceright)
if(event->keyval == GDK_KEY_braceright)
bracket = "}";
if(key->keyval == GDK_KEY_bracketright)
if(event->keyval == GDK_KEY_bracketright)
bracket = "]";
else if(key->keyval == GDK_KEY_parenright)
else if(event->keyval == GDK_KEY_parenright)
bracket = ")";
std::string line = get_line_before();
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...
else if(key->keyval == GDK_KEY_braceleft) {
else if(event->keyval == GDK_KEY_braceleft) {
auto tabs_end_iter = get_tabs_end_iter();
auto tabs = get_line_before(tabs_end_iter);
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
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 == '>') {
iter.forward_char();
Gtk::TextIter parenthesis_end_iter;
@ -2811,7 +2811,7 @@ bool Source::View::on_key_press_event_bracket_language(GdkEventKey *key) {
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())
return false;
@ -2820,7 +2820,7 @@ bool Source::View::on_key_press_event_smart_brackets(GdkEventKey *key) {
previous_iter.backward_char();
if(is_code_iter(iter)) {
//Move after ')' if closed expression
if(key->keyval == GDK_KEY_parenright) {
if(event->keyval == GDK_KEY_parenright) {
if(*iter == ')' && symbol_count(iter, '(', ')') <= 0) {
iter.forward_char();
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
else if(key->keyval == GDK_KEY_greater) {
else if(event->keyval == GDK_KEY_greater) {
if(*iter == '>') {
iter.forward_char();
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
else if(key->keyval == GDK_KEY_parenleft) {
else if(event->keyval == GDK_KEY_parenleft) {
auto previous_iter = iter;
previous_iter.backward_char();
if(*previous_iter == '>') {
@ -2859,7 +2859,7 @@ bool Source::View::on_key_press_event_smart_brackets(GdkEventKey *key) {
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;
ScopeGuard guard{[this] {
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(is_bracket_language) {
// Remove /**/ around selection
if(key->keyval == GDK_KEY_slash) {
if(event->keyval == GDK_KEY_slash) {
Gtk::TextIter start, end;
get_buffer()->get_selection_bounds(start, end);
auto before_start = start;
@ -2890,56 +2890,56 @@ bool Source::View::on_key_press_event_smart_inserts(GdkEventKey *key) {
Glib::ustring left, right;
// Insert () around selection
if(key->keyval == GDK_KEY_parenleft) {
if(event->keyval == GDK_KEY_parenleft) {
left = '(';
right = ')';
}
// Insert [] around selection
else if(key->keyval == GDK_KEY_bracketleft) {
else if(event->keyval == GDK_KEY_bracketleft) {
left = '[';
right = ']';
}
// Insert {} around selection
else if(key->keyval == GDK_KEY_braceleft) {
else if(event->keyval == GDK_KEY_braceleft) {
left = '{';
right = '}';
}
// Insert <> around selection
else if(key->keyval == GDK_KEY_less) {
else if(event->keyval == GDK_KEY_less) {
left = '<';
right = '>';
}
// Insert '' around selection
else if(key->keyval == GDK_KEY_apostrophe) {
else if(event->keyval == GDK_KEY_apostrophe) {
left = '\'';
right = '\'';
}
// Insert "" around selection
else if(key->keyval == GDK_KEY_quotedbl) {
else if(event->keyval == GDK_KEY_quotedbl) {
left = '"';
right = '"';
}
else if(language && language->get_id() == "markdown") {
if(key->keyval == GDK_KEY_dead_grave) {
if(event->keyval == GDK_KEY_dead_grave) {
left = '`';
right = '`';
}
if(key->keyval == GDK_KEY_asterisk) {
if(event->keyval == GDK_KEY_asterisk) {
left = '*';
right = '*';
}
if(key->keyval == GDK_KEY_underscore) {
if(event->keyval == GDK_KEY_underscore) {
left = '_';
right = '_';
}
if(key->keyval == GDK_KEY_dead_tilde) {
if(event->keyval == GDK_KEY_dead_tilde) {
left = '~';
right = '~';
}
}
else if(is_bracket_language) {
// Insert /**/ around selection
if(key->keyval == GDK_KEY_slash) {
if(event->keyval == GDK_KEY_slash) {
left = "/*";
right = "*/";
}
@ -2975,7 +2975,7 @@ bool Source::View::on_key_press_event_smart_inserts(GdkEventKey *key) {
if(is_code_iter(iter)) {
// Insert ()
if(key->keyval == GDK_KEY_parenleft && allow_insertion(iter)) {
if(event->keyval == GDK_KEY_parenleft && allow_insertion(iter)) {
if(symbol_count(iter, '(', ')') >= 0) {
get_buffer()->insert_at_cursor(")");
auto iter = get_buffer()->get_insert()->get_iter();
@ -2986,7 +2986,7 @@ bool Source::View::on_key_press_event_smart_inserts(GdkEventKey *key) {
}
}
// 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) {
get_buffer()->insert_at_cursor("]");
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 []
else if(key->keyval == GDK_KEY_bracketright) {
else if(event->keyval == GDK_KEY_bracketright) {
if(*iter == ']' && symbol_count(iter, '[', ']') <= 0) {
iter.forward_char();
get_buffer()->place_cursor(iter);
@ -3006,7 +3006,7 @@ bool Source::View::on_key_press_event_smart_inserts(GdkEventKey *key) {
}
}
// 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);
// Do not add } if { is at end of line and next line has a higher indentation
auto test_iter = iter;
@ -3055,7 +3055,7 @@ bool Source::View::on_key_press_event_smart_inserts(GdkEventKey *key) {
return false;
}
// Move right on } in {}
else if(key->keyval == GDK_KEY_braceright) {
else if(event->keyval == GDK_KEY_braceright) {
if(*iter == '}' && symbol_count(iter, '{', '}') <= 0) {
iter.forward_char();
get_buffer()->place_cursor(iter);
@ -3064,7 +3064,7 @@ bool Source::View::on_key_press_event_smart_inserts(GdkEventKey *key) {
}
}
// 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("''");
auto iter = get_buffer()->get_insert()->get_iter();
iter.backward_char();
@ -3073,7 +3073,7 @@ bool Source::View::on_key_press_event_smart_inserts(GdkEventKey *key) {
return true;
}
// 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("\"\"");
auto iter = get_buffer()->get_insert()->get_iter();
iter.backward_char();
@ -3082,13 +3082,13 @@ bool Source::View::on_key_press_event_smart_inserts(GdkEventKey *key) {
return true;
}
// 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);
scroll_to(get_buffer()->get_insert());
return true;
}
// 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()) {
auto start_iter = get_start_of_expression(previous_iter);
if(*start_iter == '(') {
@ -3107,7 +3107,7 @@ bool Source::View::on_key_press_event_smart_inserts(GdkEventKey *key) {
}
}
// Delete ()
else if(key->keyval == GDK_KEY_BackSpace) {
else if(event->keyval == GDK_KEY_BackSpace) {
if(*previous_iter == '(' && *iter == ')' && symbol_count(iter, '(', ')') <= 0) {
auto next_iter = iter;
next_iter.forward_char();
@ -3132,7 +3132,7 @@ bool Source::View::on_key_press_event_smart_inserts(GdkEventKey *key) {
return true;
}
// Delete '' or ""
else if(key->keyval == GDK_KEY_BackSpace) {
else if(event->keyval == GDK_KEY_BackSpace) {
if((*previous_iter == '\'' && *iter == '\'') || (*previous_iter == '"' && *iter == '"')) {
get_buffer()->erase(previous_iter, next_iter);
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.
bool is_possible_argument();
bool on_key_press_event(GdkEventKey *key) override;
bool on_key_press_event_basic(GdkEventKey *key);
bool on_key_press_event_bracket_language(GdkEventKey *key);
bool on_key_press_event_smart_brackets(GdkEventKey *key);
bool on_key_press_event_smart_inserts(GdkEventKey *key);
bool on_key_press_event(GdkEventKey *event) override;
bool on_key_press_event_basic(GdkEventKey *event);
bool on_key_press_event_bracket_language(GdkEventKey *event);
bool on_key_press_event_smart_brackets(GdkEventKey *event);
bool on_key_press_event_smart_inserts(GdkEventKey *event);
bool on_button_press_event(GdkEventButton *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);
}
bool Source::BaseView::on_key_press_event(GdkEventKey *key) {
bool Source::BaseView::on_key_press_event(GdkEventKey *event) {
// 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 iter = get_buffer()->get_iter_at_line(get_buffer()->get_insert()->get_iter().get_line());
bool empty_line = false;
@ -962,7 +962,7 @@ bool Source::BaseView::on_key_press_event(GdkEventKey *key) {
iter.forward_char();
}
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);
else
get_buffer()->place_cursor(iter);
@ -970,7 +970,7 @@ bool Source::BaseView::on_key_press_event(GdkEventKey *key) {
return true;
}
//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 iter = get_buffer()->get_iter_at_line(get_buffer()->get_insert()->get_iter().get_line());
iter.backward_char();
@ -1000,7 +1000,7 @@ bool Source::BaseView::on_key_press_event(GdkEventKey *key) {
if(!iter.starts_line()) // For CR+LF
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);
else
get_buffer()->place_cursor(iter);
@ -1009,32 +1009,32 @@ bool Source::BaseView::on_key_press_event(GdkEventKey *key) {
}
// 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;
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();
}
auto insert = get_buffer()->get_insert();
auto iter = get_smart_home_iter(get_buffer()->get_insert()->get_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);
scroll_to(get_buffer()->get_insert());
enable_multiple_cursors = true;
return true;
}
// 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;
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());
}
auto insert = get_buffer()->get_insert();
auto iter = get_smart_end_iter(get_buffer()->get_insert()->get_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);
scroll_to(get_buffer()->get_insert());
enable_multiple_cursors = true;
@ -1042,48 +1042,48 @@ bool Source::BaseView::on_key_press_event(GdkEventKey *key) {
}
// 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;
for(auto &extra_cursor : extra_cursors) {
auto iter = extra_cursor.insert->get_iter();
iter.backward_word_start();
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 iter = insert->get_iter();
iter.backward_word_start();
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);
enable_multiple_cursors = true;
return true;
}
// 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;
for(auto &extra_cursor : extra_cursors) {
auto iter = extra_cursor.insert->get_iter();
iter.forward_word_end();
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());
}
auto insert = get_buffer()->get_insert();
auto iter = insert->get_iter();
iter.forward_word_end();
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);
enable_multiple_cursors = 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) {
if(key->keyval == GDK_KEY_Escape) {
bool Source::BaseView::on_key_press_event_extra_cursors(GdkEventKey *event) {
if(event->keyval == GDK_KEY_Escape) {
if(clear_snippet_marks())
return true;
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;
// 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())
return false;
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();
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())
return false;
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();
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())
return false;
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);
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())
return false;
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
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 insert_line_offset = iter.get_line_offset();
auto offset = iter.get_offset();
@ -1165,7 +1165,7 @@ bool Source::BaseView::on_key_press_event_extra_cursors(GdkEventKey *key) {
}
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 insert_line_offset = iter.get_line_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
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;
for(auto &extra_cursor : extra_cursors) {
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())
end_line_iter.forward_to_line_end();
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;
}
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;
for(auto &extra_cursor : extra_cursors) {
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())
end_line_iter.forward_to_line_end();
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;
}
// 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;
bool shift_pressed = (key->state & GDK_SHIFT_MASK) != 0;
bool shift_pressed = (event->state & GDK_SHIFT_MASK) != 0;
for(auto &extra_cursor : extra_cursors) {
auto iter = extra_cursor.insert->get_iter();
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;
}
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;
bool shift_pressed = (key->state & GDK_SHIFT_MASK) != 0;
bool shift_pressed = (event->state & GDK_SHIFT_MASK) != 0;
for(auto &extra_cursor : extra_cursors) {
auto iter = extra_cursor.insert->get_iter();
if(!shift_pressed && get_buffer()->get_has_selection())
@ -1284,7 +1284,6 @@ void Source::BaseView::setup_extra_cursor_signals() {
if(offset_diff != 0) {
for(auto &extra_cursor : extra_cursors) {
auto iter = extra_cursor.selection_bound->get_iter();
auto start = iter;
iter.forward_chars(offset_diff);
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;
protected:
bool on_key_press_event(GdkEventKey *key) override;
bool on_key_press_event(GdkEventKey *event) override;
private:
GtkSourceSearchContext *search_context;
@ -167,8 +167,8 @@ namespace Source {
protected:
Glib::RefPtr<Gtk::TextTag> extra_cursor_selection;
bool on_key_press_event(GdkEventKey *key) override;
bool on_key_press_event_extra_cursors(GdkEventKey *key);
bool on_key_press_event(GdkEventKey *event) override;
bool on_key_press_event_extra_cursors(GdkEventKey *event);
class ExtraCursor {
Glib::RefPtr<Gtk::TextTag> extra_cursor_selection;

10
src/source_clang.cpp

@ -730,12 +730,12 @@ Source::ClangViewAutocomplete::ClangViewAutocomplete(const boost::filesystem::pa
}, false);
// 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() &&
key->keyval != GDK_KEY_Down && key->keyval != GDK_KEY_Up &&
key->keyval != GDK_KEY_Return && key->keyval != GDK_KEY_KP_Enter &&
key->keyval != GDK_KEY_ISO_Left_Tab && key->keyval != GDK_KEY_Tab &&
(key->keyval < GDK_KEY_Shift_L || key->keyval > GDK_KEY_Hyper_R)) {
event->keyval != GDK_KEY_Down && event->keyval != GDK_KEY_Up &&
event->keyval != GDK_KEY_Return && event->keyval != GDK_KEY_KP_Enter &&
event->keyval != GDK_KEY_ISO_Left_Tab && event->keyval != GDK_KEY_Tab &&
(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());
CompletionDialog::get()->hide();
}

10
src/source_language_protocol.cpp

@ -1403,12 +1403,12 @@ void Source::LanguageProtocolView::setup_autocomplete() {
// Remove argument completions
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() &&
key->keyval != GDK_KEY_Down && key->keyval != GDK_KEY_Up &&
key->keyval != GDK_KEY_Return && key->keyval != GDK_KEY_KP_Enter &&
key->keyval != GDK_KEY_ISO_Left_Tab && key->keyval != GDK_KEY_Tab &&
(key->keyval < GDK_KEY_Shift_L || key->keyval > GDK_KEY_Hyper_R)) {
event->keyval != GDK_KEY_Down && event->keyval != GDK_KEY_Up &&
event->keyval != GDK_KEY_Return && event->keyval != GDK_KEY_KP_Enter &&
event->keyval != GDK_KEY_ISO_Left_Tab && event->keyval != GDK_KEY_Tab &&
(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());
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)
: 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;
CompletionDialog::CompletionDialog(Gtk::TextView *text_view, const Gtk::TextIter &start_iter)
: 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