diff options
| author | Nathan Lee <2431820-nathanal@users.noreply.gitlab.com> | 2019-06-27 09:33:42 +0000 |
|---|---|---|
| committer | Marc Jeanmougin <marcjeanmougin@free.fr> | 2019-07-15 10:34:16 +0000 |
| commit | 3c9687d3d8cebe107716c14562d6446890f89651 (patch) | |
| tree | 27ae30f12397645a20b8ccb9ad796688639fb6f1 /src/widgets/gradient-selector.cpp | |
| parent | Eraser tool fixes (diff) | |
| download | inkscape-3c9687d3d8cebe107716c14562d6446890f89651.tar.gz inkscape-3c9687d3d8cebe107716c14562d6446890f89651.zip | |
Override navigation in swatch/gradient list
Fix gitlab.com/inkscape/inkscape/issues/237
Diffstat (limited to 'src/widgets/gradient-selector.cpp')
| -rw-r--r-- | src/widgets/gradient-selector.cpp | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/widgets/gradient-selector.cpp b/src/widgets/gradient-selector.cpp index 9cd0cf19f..19dc184eb 100644 --- a/src/widgets/gradient-selector.cpp +++ b/src/widgets/gradient-selector.cpp @@ -149,6 +149,8 @@ static void sp_gradient_selector_init(SPGradientSelector *sel) count_column->set_clickable(true); count_column->set_resizable(true); + sel->treeview->signal_key_press_event().connect(sigc::mem_fun(*sel, &SPGradientSelector::onKeyPressEvent), false); + sel->treeview->show(); icon_column->signal_clicked().connect( sigc::mem_fun(*sel, &SPGradientSelector::onTreeColorColClick) ); @@ -334,6 +336,66 @@ void SPGradientSelector::onTreeCountColClick() { column->set_sort_column(columns->refcount); } +void SPGradientSelector::moveSelection(int amount) +{ + Glib::RefPtr<Gtk::TreeSelection> select = treeview->get_selection(); + auto iter = select->get_selected(); + auto canary = iter; + + for (--canary; amount < 0 && canary; ++amount) { + --canary; + --iter; + } + + canary = iter; + for (++canary; amount > 0 && canary; --amount) { + ++canary; + ++iter; + } + + select->select(iter); + treeview->scroll_to_row(store->get_path(iter), 0.5); +} + +bool SPGradientSelector::onKeyPressEvent(GdkEventKey *event) +{ + bool consume = false; + auto display = Gdk::Display::get_default(); + auto keymap = display->get_keymap(); + guint key = 0; + gdk_keymap_translate_keyboard_state(keymap, event->hardware_keycode, + static_cast<GdkModifierType>(event->state), + 0, &key, 0, 0, 0); + + switch (key) { + case GDK_KEY_Up: + case GDK_KEY_KP_Up: { + moveSelection(-1); + consume = true; + break; + } + case GDK_KEY_Down: + case GDK_KEY_KP_Down: { + moveSelection(1); + consume = true; + break; + } + case GDK_KEY_Page_Up: + case GDK_KEY_KP_Page_Up: { + moveSelection(-5); + consume = true; + break; + } + + case GDK_KEY_Page_Down: + case GDK_KEY_KP_Page_Down: { + moveSelection(5); + consume = true; + break; + } + } + return consume; +} void SPGradientSelector::onTreeSelection() { |
