diff options
| author | Marc Jeanmougin <marc@jeanmougin.fr> | 2017-06-29 15:49:40 +0000 |
|---|---|---|
| committer | Marc Jeanmougin <marc@jeanmougin.fr> | 2017-06-29 15:49:40 +0000 |
| commit | b0f397d482c39849dbad823e5375272d49817f3c (patch) | |
| tree | 2686321c88a28a288efec610970f49b18505aa12 /src | |
| parent | Merge branch 'master' of gitlab.com:inkscape/inkscape (diff) | |
| parent | Allows one to use Super, Hyper and Meta key modifiers in shortcuts (diff) | |
| download | inkscape-b0f397d482c39849dbad823e5375272d49817f3c.tar.gz inkscape-b0f397d482c39849dbad823e5375272d49817f3c.zip | |
Merge commit 'd79cc2caf6'
Diffstat (limited to 'src')
| -rw-r--r-- | src/helper/window.cpp | 6 | ||||
| -rw-r--r-- | src/shortcuts.cpp | 21 | ||||
| -rw-r--r-- | src/shortcuts.h | 13 |
3 files changed, 36 insertions, 4 deletions
diff --git a/src/helper/window.cpp b/src/helper/window.cpp index 98e886a38..270f9a3c8 100644 --- a/src/helper/window.cpp +++ b/src/helper/window.cpp @@ -23,6 +23,12 @@ static bool on_window_key_press(GdkEventKey* event) shortcut = Inkscape::UI::Tools::get_group0_keyval (event) | ( event->state & GDK_SHIFT_MASK ? SP_SHORTCUT_SHIFT_MASK : 0 ) | + ( event->state & GDK_SUPER_MASK ? + SP_SHORTCUT_SUPER_MASK : 0 ) | + ( event->state & GDK_HYPER_MASK ? + SP_SHORTCUT_HYPER_MASK : 0 ) | + ( event->state & GDK_META_MASK ? + SP_SHORTCUT_META_MASK : 0 ) | ( event->state & GDK_CONTROL_MASK ? SP_SHORTCUT_CONTROL_MASK : 0 ) | ( event->state & GDK_MOD1_MASK ? diff --git a/src/shortcuts.cpp b/src/shortcuts.cpp index f8a647040..0cb0285f8 100644 --- a/src/shortcuts.cpp +++ b/src/shortcuts.cpp @@ -122,6 +122,12 @@ unsigned int sp_gdkmodifier_to_shortcut(guint accel_key, Gdk::ModifierType gdkmo SP_SHORTCUT_SHIFT_MASK : 0 ) | ( gdkmodifier & GDK_CONTROL_MASK ? SP_SHORTCUT_CONTROL_MASK : 0 ) | + ( gdkmodifier & GDK_SUPER_MASK ? + SP_SHORTCUT_SUPER_MASK : 0 ) | + ( gdkmodifier & GDK_HYPER_MASK ? + SP_SHORTCUT_HYPER_MASK : 0 ) | + ( gdkmodifier & GDK_META_MASK ? + SP_SHORTCUT_META_MASK : 0 ) | ( gdkmodifier & GDK_MOD1_MASK ? SP_SHORTCUT_ALT_MASK : 0 ); @@ -138,6 +144,12 @@ Glib::ustring sp_shortcut_to_label(unsigned int const shortcut) { modifiers += "Shift,"; if (shortcut & SP_SHORTCUT_ALT_MASK) modifiers += "Alt,"; + if (shortcut & SP_SHORTCUT_SUPER_MASK) + modifiers += "Super,"; + if (shortcut & SP_SHORTCUT_HYPER_MASK) + modifiers += "Hyper,"; + if (shortcut & SP_SHORTCUT_META_MASK) + modifiers += "Meta,"; if(modifiers.length() > 0 && modifiers.find(',',modifiers.length()-1)!=modifiers.npos) { @@ -607,6 +619,12 @@ static void read_shortcuts_file(char const *filename, bool const is_user_set) { modifiers |= SP_SHORTCUT_SHIFT_MASK; } else if (!strcmp(mod, "Alt")) { modifiers |= SP_SHORTCUT_ALT_MASK; + } else if (!strcmp(mod, "Super")) { + modifiers |= SP_SHORTCUT_SUPER_MASK; + } else if (!strcmp(mod, "Hyper")) { + modifiers |= SP_SHORTCUT_HYPER_MASK; + } else if (!strcmp(mod, "Meta")) { + modifiers |= SP_SHORTCUT_META_MASK; } else { g_warning("Unknown modifier %s for %s", mod, verb_name); } @@ -694,6 +712,9 @@ sp_shortcut_get_modifiers(unsigned int const shortcut) return static_cast<GdkModifierType>( ((shortcut & SP_SHORTCUT_SHIFT_MASK) ? GDK_SHIFT_MASK : 0) | ((shortcut & SP_SHORTCUT_CONTROL_MASK) ? GDK_CONTROL_MASK : 0) | + ((shortcut & SP_SHORTCUT_SUPER_MASK) ? GDK_SUPER_MASK : 0) | + ((shortcut & SP_SHORTCUT_HYPER_MASK) ? GDK_HYPER_MASK : 0) | + ((shortcut & SP_SHORTCUT_META_MASK) ? GDK_META_MASK : 0) | ((shortcut & SP_SHORTCUT_ALT_MASK) ? GDK_MOD1_MASK : 0) ); } diff --git a/src/shortcuts.h b/src/shortcuts.h index f24a82603..fb36dfd11 100644 --- a/src/shortcuts.h +++ b/src/shortcuts.h @@ -12,6 +12,8 @@ #include <vector> #include <gdkmm/types.h> +#include <gdk/gdktypes.h> + typedef struct _GtkAccelGroup GtkAccelGroup; typedef struct _GtkWidget GtkWidget; @@ -27,10 +29,13 @@ namespace Inkscape { /* We define high-bit mask for packing into single int */ -#define SP_SHORTCUT_SHIFT_MASK (1 << 24) -#define SP_SHORTCUT_CONTROL_MASK (1 << 25) -#define SP_SHORTCUT_ALT_MASK (1 << 26) -#define SP_SHORTCUT_MODIFIER_MASK (SP_SHORTCUT_SHIFT_MASK|SP_SHORTCUT_CONTROL_MASK|SP_SHORTCUT_ALT_MASK) +#define SP_SHORTCUT_SHIFT_MASK GDK_MODIFIER_RESERVED_20_MASK +#define SP_SHORTCUT_CONTROL_MASK GDK_MODIFIER_RESERVED_21_MASK +#define SP_SHORTCUT_ALT_MASK GDK_MODIFIER_RESERVED_22_MASK +#define SP_SHORTCUT_SUPER_MASK GDK_MODIFIER_RESERVED_23_MASK +#define SP_SHORTCUT_HYPER_MASK GDK_MODIFIER_RESERVED_24_MASK +#define SP_SHORTCUT_META_MASK GDK_MODIFIER_RESERVED_25_MASK +#define SP_SHORTCUT_MODIFIER_MASK (SP_SHORTCUT_SHIFT_MASK|SP_SHORTCUT_CONTROL_MASK|SP_SHORTCUT_ALT_MASK|SP_SHORTCUT_SUPER_MASK|SP_SHORTCUT_HYPER_MASK|SP_SHORTCUT_META_MASK) /* Returns true if action was performed */ |
