diff options
| author | Eduard Braun <Eduard.Braun2@gmx.de> | 2017-06-18 17:54:03 +0000 |
|---|---|---|
| committer | Eduard Braun <eduard.braun2@gmx.de> | 2017-06-23 21:55:03 +0000 |
| commit | 46fd67ec49c3988db20db422061a2f52582c896c (patch) | |
| tree | a302a68c1694ffa59872d0b50f611f97f68981ec /src/ui/tools | |
| parent | Merge branch 'ui-files-for-ui-xml' (diff) | |
| download | inkscape-46fd67ec49c3988db20db422061a2f52582c896c.tar.gz inkscape-46fd67ec49c3988db20db422061a2f52582c896c.zip | |
Improve and simplify shortcut handling.
Should fix many issues with unusuable keys, especially on non-English keyboard layouts.
Diffstat (limited to 'src/ui/tools')
| -rw-r--r-- | src/ui/tools/pen-tool.cpp | 8 | ||||
| -rw-r--r-- | src/ui/tools/tool-base.cpp | 29 | ||||
| -rw-r--r-- | src/ui/tools/tool-base.h | 2 |
3 files changed, 12 insertions, 27 deletions
diff --git a/src/ui/tools/pen-tool.cpp b/src/ui/tools/pen-tool.cpp index caf6faec2..0422dc9cd 100644 --- a/src/ui/tools/pen-tool.cpp +++ b/src/ui/tools/pen-tool.cpp @@ -1050,13 +1050,7 @@ bool PenTool::_handleKeyPress(GdkEvent *event) { // Check for undo if we have started drawing a path. if (this->npoints > 0) { - unsigned int shortcut = Inkscape::UI::Tools::get_group0_keyval (&event->key) | - ( event->key.state & GDK_SHIFT_MASK ? - SP_SHORTCUT_SHIFT_MASK : 0 ) | - ( event->key.state & GDK_CONTROL_MASK ? - SP_SHORTCUT_CONTROL_MASK : 0 ) | - ( event->key.state & GDK_MOD1_MASK ? - SP_SHORTCUT_ALT_MASK : 0 ); + unsigned int shortcut = sp_shortcut_get_for_event((GdkEventKey*)event); Inkscape::Verb* verb = sp_shortcut_get_verb(shortcut); if (verb) { unsigned int vcode = verb->get_code(); diff --git a/src/ui/tools/tool-base.cpp b/src/ui/tools/tool-base.cpp index 3d755eadc..490d0fb26 100644 --- a/src/ui/tools/tool-base.cpp +++ b/src/ui/tools/tool-base.cpp @@ -589,20 +589,7 @@ bool ToolBase::root_handler(GdkEvent* event) { case GDK_KEY_Tab: case GDK_KEY_ISO_Left_Tab: case GDK_KEY_F1: - shortcut = get_group0_keyval(&event->key); - - if (event->key.state & GDK_SHIFT_MASK) { - shortcut |= SP_SHORTCUT_SHIFT_MASK; - } - - if (event->key.state & GDK_CONTROL_MASK) { - shortcut |= SP_SHORTCUT_CONTROL_MASK; - } - - if (event->key.state & GDK_MOD1_MASK) { - shortcut |= SP_SHORTCUT_ALT_MASK; - } - + shortcut = sp_shortcut_get_for_event((GdkEventKey*)event); ret = sp_shortcut_invoke(shortcut, desktop); break; @@ -1153,14 +1140,18 @@ void sp_event_show_modifier_tip(Inkscape::MessageContext *message_context, * Use this instead of simply event->keyval, so that your keyboard shortcuts * work regardless of layouts (e.g., in Cyrillic). */ -guint get_group0_keyval(GdkEventKey const *event) { +guint get_group0_keyval(GdkEventKey const *event, guint *consumed_modifiers /*= NULL*/) { guint keyval = 0; + GdkModifierType modifiers; - gdk_keymap_translate_keyboard_state(gdk_keymap_get_for_display( - gdk_display_get_default()), event->hardware_keycode, - (GdkModifierType) event->state, 0 /*event->key.group*/, &keyval, - NULL, NULL, NULL); + gdk_keymap_translate_keyboard_state( + gdk_keymap_get_for_display(gdk_display_get_default()), + event->hardware_keycode, (GdkModifierType) event->state, 0 /*event->group*/, + &keyval, NULL, NULL, &modifiers); + if (consumed_modifiers) { + *consumed_modifiers = modifiers; + } return keyval; } diff --git a/src/ui/tools/tool-base.h b/src/ui/tools/tool-base.h index 3d22fc66f..69533e417 100644 --- a/src/ui/tools/tool-base.h +++ b/src/ui/tools/tool-base.h @@ -252,7 +252,7 @@ gint gobble_motion_events(gint mask); void sp_event_show_modifier_tip(Inkscape::MessageContext *message_context, GdkEvent *event, gchar const *ctrl_tip, gchar const *shift_tip, gchar const *alt_tip); -guint get_group0_keyval(GdkEventKey const *event); +guint get_group0_keyval(GdkEventKey const *event, guint *consumed_modifiers = NULL); SPItem *sp_event_context_find_item (SPDesktop *desktop, Geom::Point const &p, bool select_under, bool into_groups); SPItem *sp_event_context_over_item (SPDesktop *desktop, SPItem *item, Geom::Point const &p); |
