diff --git a/app/widgets/gimpcontrollerkeyboard.c b/app/widgets/gimpcontrollerkeyboard.c index a2db1496e3..3277f2acfb 100644 --- a/app/widgets/gimpcontrollerkeyboard.c +++ b/app/widgets/gimpcontrollerkeyboard.c @@ -2,7 +2,7 @@ * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball * * gimpcontrollerkeyboard.c - * Copyright (C) 2004 Michael Natterer + * Copyright (C) 2004-2015 Michael Natterer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -40,7 +40,8 @@ typedef struct _KeyboardEvent KeyboardEvent; struct _KeyboardEvent { const guint keyval; - const GdkModifierType modifiers; + const gchar *modifier_string; + GdkModifierType modifiers; const gchar *name; const gchar *blurb; }; @@ -63,104 +64,104 @@ G_DEFINE_TYPE (GimpControllerKeyboard, gimp_controller_keyboard, static KeyboardEvent keyboard_events[] = { - { GDK_KEY_Up, GDK_MOD1_MASK | GDK_CONTROL_MASK | GDK_SHIFT_MASK, - "cursor-up-shift-control-alt", - N_("Cursor Up") }, - { GDK_KEY_Up, GDK_MOD1_MASK | GDK_CONTROL_MASK, - "cursor-up-control-alt", - N_("Cursor Up") }, - { GDK_KEY_Up, GDK_MOD1_MASK | GDK_SHIFT_MASK, - "cursor-up-shift-alt", - N_("Cursor Up") }, - { GDK_KEY_Up, GDK_CONTROL_MASK | GDK_SHIFT_MASK, - "cursor-up-shift-control", - N_("Cursor Up") }, - { GDK_KEY_Up, GDK_MOD1_MASK, - "cursor-up-alt", - N_("Cursor Up") }, - { GDK_KEY_Up, GDK_CONTROL_MASK, - "cursor-up-control", - N_("Cursor Up") }, - { GDK_KEY_Up, GDK_SHIFT_MASK, - "cursor-up-shift", - N_("Cursor Up") }, - { GDK_KEY_Up, 0, + { GDK_KEY_Up, NULL, 0, "cursor-up", N_("Cursor Up") }, + { GDK_KEY_Up, "", 0, + "cursor-up-shift", + N_("Cursor Up") }, + { GDK_KEY_Up, "", 0, + "cursor-up-control", + N_("Cursor Up") }, + { GDK_KEY_Up, "", 0, + "cursor-up-alt", + N_("Cursor Up") }, + { GDK_KEY_Up, "", 0, + "cursor-up-shift-control", + N_("Cursor Up") }, + { GDK_KEY_Up, "", 0, + "cursor-up-shift-alt", + N_("Cursor Up") }, + { GDK_KEY_Up, "", 0, + "cursor-up-control-alt", + N_("Cursor Up") }, + { GDK_KEY_Up, "", 0, + "cursor-up-shift-control-alt", + N_("Cursor Up") }, - { GDK_KEY_Down, GDK_MOD1_MASK | GDK_CONTROL_MASK | GDK_SHIFT_MASK, - "cursor-down-shift-control-alt", - N_("Cursor Down") }, - { GDK_KEY_Down, GDK_MOD1_MASK | GDK_CONTROL_MASK, - "cursor-down-control-alt", - N_("Cursor Down") }, - { GDK_KEY_Down, GDK_MOD1_MASK | GDK_SHIFT_MASK, - "cursor-down-shift-alt", - N_("Cursor Down") }, - { GDK_KEY_Down, GDK_CONTROL_MASK | GDK_SHIFT_MASK, - "cursor-down-shift-control", - N_("Cursor Down") }, - { GDK_KEY_Down, GDK_MOD1_MASK, - "cursor-down-alt", - N_("Cursor Down") }, - { GDK_KEY_Down, GDK_CONTROL_MASK, - "cursor-down-control", - N_("Cursor Down") }, - { GDK_KEY_Down, GDK_SHIFT_MASK, - "cursor-down-shift", - N_("Cursor Down") }, - { GDK_KEY_Down, 0, + { GDK_KEY_Down, NULL, 0, "cursor-down", N_("Cursor Down") }, + { GDK_KEY_Down, "", 0, + "cursor-down-shift", + N_("Cursor Down") }, + { GDK_KEY_Down, "", 0, + "cursor-down-control", + N_("Cursor Down") }, + { GDK_KEY_Down, "", 0, + "cursor-down-alt", + N_("Cursor Down") }, + { GDK_KEY_Down, "", 0, + "cursor-down-shift-control", + N_("Cursor Down") }, + { GDK_KEY_Down, "", 0, + "cursor-down-shift-alt", + N_("Cursor Down") }, + { GDK_KEY_Down, "", 0, + "cursor-down-control-alt", + N_("Cursor Down") }, + { GDK_KEY_Down, "", 0, + "cursor-down-shift-control-alt", + N_("Cursor Down") }, - { GDK_KEY_Left, GDK_MOD1_MASK | GDK_CONTROL_MASK | GDK_SHIFT_MASK, - "cursor-left-shift-control-alt", - N_("Cursor Left") }, - { GDK_KEY_Left, GDK_MOD1_MASK | GDK_CONTROL_MASK, - "cursor-left-control-alt", - N_("Cursor Left") }, - { GDK_KEY_Left, GDK_MOD1_MASK | GDK_SHIFT_MASK, - "cursor-left-shift-alt", - N_("Cursor Left") }, - { GDK_KEY_Left, GDK_CONTROL_MASK | GDK_SHIFT_MASK, - "cursor-left-shift-control", - N_("Cursor Left") }, - { GDK_KEY_Left, GDK_MOD1_MASK, - "cursor-left-alt", - N_("Cursor Left") }, - { GDK_KEY_Left, GDK_CONTROL_MASK, - "cursor-left-control", - N_("Cursor Left") }, - { GDK_KEY_Left, GDK_SHIFT_MASK, - "cursor-left-shift", - N_("Cursor Left") }, - { GDK_KEY_Left, 0, + { GDK_KEY_Left, NULL, 0, "cursor-left", N_("Cursor Left") }, + { GDK_KEY_Left, "", 0, + "cursor-left-shift", + N_("Cursor Left") }, + { GDK_KEY_Left, "", 0, + "cursor-left-control", + N_("Cursor Left") }, + { GDK_KEY_Left, "", 0, + "cursor-left-alt", + N_("Cursor Left") }, + { GDK_KEY_Left, "", 0, + "cursor-left-shift-control", + N_("Cursor Left") }, + { GDK_KEY_Left, "", 0, + "cursor-left-shift-alt", + N_("Cursor Left") }, + { GDK_KEY_Left, "", 0, + "cursor-left-control-alt", + N_("Cursor Left") }, + { GDK_KEY_Left, "", 0, + "cursor-left-shift-control-alt", + N_("Cursor Left") }, - { GDK_KEY_Right, GDK_MOD1_MASK | GDK_CONTROL_MASK | GDK_SHIFT_MASK, - "cursor-right-shift-control-alt", + { GDK_KEY_Right, NULL, 0, + "cursor-right", N_("Cursor Right") }, - { GDK_KEY_Right, GDK_MOD1_MASK | GDK_CONTROL_MASK, - "cursor-right-control-alt", - N_("Cursor Right") }, - { GDK_KEY_Right, GDK_MOD1_MASK | GDK_SHIFT_MASK, - "cursor-right-shift-alt", - N_("Cursor Right") }, - { GDK_KEY_Right, GDK_CONTROL_MASK | GDK_SHIFT_MASK, - "cursor-right-shift-control", - N_("Cursor Right") }, - { GDK_KEY_Right, GDK_MOD1_MASK, - "cursor-right-alt", - N_("Cursor Right") }, - { GDK_KEY_Right, GDK_CONTROL_MASK, - "cursor-right-control", - N_("Cursor Right") }, - { GDK_KEY_Right, GDK_SHIFT_MASK, + { GDK_KEY_Right, "", 0, "cursor-right-shift", N_("Cursor Right") }, - { GDK_KEY_Right, 0, - "cursor-right", + { GDK_KEY_Right, "", 0, + "cursor-right-control", + N_("Cursor Right") }, + { GDK_KEY_Right, "", 0, + "cursor-right-alt", + N_("Cursor Right") }, + { GDK_KEY_Right, "", 0, + "cursor-right-shift-control", + N_("Cursor Right") }, + { GDK_KEY_Right, "", 0, + "cursor-right-shift-alt", + N_("Cursor Right") }, + { GDK_KEY_Right, "", 0, + "cursor-right-control-alt", + N_("Cursor Right") }, + { GDK_KEY_Right, "", 0, + "cursor-right-shift-control-alt", N_("Cursor Right") } }; @@ -195,12 +196,22 @@ gimp_controller_keyboard_init (GimpControllerKeyboard *keyboard) { KeyboardEvent *kevent = &keyboard_events[i]; + if (kevent->modifier_string) + { + gtk_accelerator_parse (kevent->modifier_string, NULL, + &kevent->modifiers); + } + if (kevent->modifiers != 0) { kevent->blurb = g_strdup_printf ("%s (%s)", gettext (kevent->blurb), gimp_get_mod_string (kevent->modifiers)); } + else + { + kevent->blurb = gettext (kevent->blurb); + } } event_names_initialized = TRUE; @@ -253,7 +264,10 @@ gimp_controller_keyboard_key_press (GimpControllerKeyboard *keyboard, g_return_val_if_fail (GIMP_IS_CONTROLLER_KEYBOARD (keyboard), FALSE); g_return_val_if_fail (kevent != NULL, FALSE); - for (i = 0; i < G_N_ELEMENTS (keyboard_events); i++) + /* start with the last event because the last ones in the + * up,down,left,right groups have the most keyboard modifiers + */ + for (i = G_N_ELEMENTS (keyboard_events) - 1; i >= 0; i--) { if (keyboard_events[i].keyval == kevent->keyval) { diff --git a/app/widgets/gimpcontrollerwheel.c b/app/widgets/gimpcontrollerwheel.c index e97ce93ea7..b3f5ea1c47 100644 --- a/app/widgets/gimpcontrollerwheel.c +++ b/app/widgets/gimpcontrollerwheel.c @@ -2,7 +2,7 @@ * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball * * gimpcontrollerwheel.c - * Copyright (C) 2004 Michael Natterer + * Copyright (C) 2004-2015 Michael Natterer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -34,15 +34,13 @@ #include "gimp-intl.h" -#define MODIFIER_MASK (GDK_MOD1_MASK | GDK_CONTROL_MASK | GDK_SHIFT_MASK) - - typedef struct _WheelEvent WheelEvent; struct _WheelEvent { const GdkScrollDirection direction; - const GdkModifierType modifiers; + const gchar *modifier_string; + GdkModifierType modifiers; const gchar *name; const gchar *blurb; }; @@ -65,104 +63,104 @@ G_DEFINE_TYPE (GimpControllerWheel, gimp_controller_wheel, static WheelEvent wheel_events[] = { - { GDK_SCROLL_UP, 0, + { GDK_SCROLL_UP, NULL, 0, "scroll-up", N_("Scroll Up") }, - { GDK_SCROLL_UP, GDK_SHIFT_MASK, + { GDK_SCROLL_UP, "", 0, "scroll-up-shift", N_("Scroll Up") }, - { GDK_SCROLL_UP, GDK_CONTROL_MASK, - "scroll-up-control", + { GDK_SCROLL_UP, "", 0, + "scroll-up-primary", N_("Scroll Up") }, - { GDK_SCROLL_UP, GDK_MOD1_MASK, + { GDK_SCROLL_UP, "", 0, "scroll-up-alt", N_("Scroll Up") }, - { GDK_SCROLL_UP, GDK_CONTROL_MASK | GDK_SHIFT_MASK, - "scroll-up-shift-control", + { GDK_SCROLL_UP, "", 0, + "scroll-up-shift-primary", N_("Scroll Up") }, - { GDK_SCROLL_UP, GDK_MOD1_MASK | GDK_SHIFT_MASK, + { GDK_SCROLL_UP, "", 0, "scroll-up-shift-alt", N_("Scroll Up") }, - { GDK_SCROLL_UP, GDK_MOD1_MASK | GDK_CONTROL_MASK, - "scroll-up-control-alt", + { GDK_SCROLL_UP, "", 0, + "scroll-up-primary-alt", N_("Scroll Up") }, - { GDK_SCROLL_UP, GDK_MOD1_MASK | GDK_CONTROL_MASK | GDK_SHIFT_MASK, - "scroll-up-shift-control-alt", + { GDK_SCROLL_UP, "", 0, + "scroll-up-shift-primary-alt", N_("Scroll Up") }, - { GDK_SCROLL_DOWN, 0, + { GDK_SCROLL_DOWN, NULL, 0, "scroll-down", N_("Scroll Down") }, - { GDK_SCROLL_DOWN, GDK_SHIFT_MASK, + { GDK_SCROLL_DOWN, "", 0, "scroll-down-shift", N_("Scroll Down") }, - { GDK_SCROLL_DOWN, GDK_CONTROL_MASK, - "scroll-down-control", + { GDK_SCROLL_DOWN, "", 0, + "scroll-down-primary", N_("Scroll Down") }, - { GDK_SCROLL_DOWN, GDK_MOD1_MASK, + { GDK_SCROLL_DOWN, "", 0, "scroll-down-alt", N_("Scroll Down") }, - { GDK_SCROLL_DOWN, GDK_CONTROL_MASK | GDK_SHIFT_MASK, - "scroll-down-shift-control", + { GDK_SCROLL_DOWN, "", 0, + "scroll-down-shift-primary", N_("Scroll Down") }, - { GDK_SCROLL_DOWN, GDK_MOD1_MASK | GDK_SHIFT_MASK, + { GDK_SCROLL_DOWN, "", 0, "scroll-down-shift-alt", N_("Scroll Down") }, - { GDK_SCROLL_DOWN, GDK_MOD1_MASK | GDK_CONTROL_MASK, - "scroll-down-control-alt", + { GDK_SCROLL_DOWN, "", 0, + "scroll-down-primary-alt", N_("Scroll Down") }, - { GDK_SCROLL_DOWN, GDK_MOD1_MASK | GDK_CONTROL_MASK | GDK_SHIFT_MASK, - "scroll-down-shift-control-alt", + { GDK_SCROLL_DOWN, "", 0, + "scroll-down-shift-primary-alt", N_("Scroll Down") }, - { GDK_SCROLL_LEFT, 0, + { GDK_SCROLL_LEFT, NULL, 0, "scroll-left", N_("Scroll Left") }, - { GDK_SCROLL_LEFT, GDK_SHIFT_MASK, + { GDK_SCROLL_LEFT, "", 0, "scroll-left-shift", N_("Scroll Left") }, - { GDK_SCROLL_LEFT, GDK_CONTROL_MASK, - "scroll-left-control", + { GDK_SCROLL_LEFT, "", 0, + "scroll-left-primary", N_("Scroll Left") }, - { GDK_SCROLL_LEFT, GDK_MOD1_MASK, + { GDK_SCROLL_LEFT, "", 0, "scroll-left-alt", N_("Scroll Left") }, - { GDK_SCROLL_LEFT, GDK_CONTROL_MASK | GDK_SHIFT_MASK, - "scroll-left-shift-control", + { GDK_SCROLL_LEFT, "", 0, + "scroll-left-shift-primary", N_("Scroll Left") }, - { GDK_SCROLL_LEFT, GDK_MOD1_MASK | GDK_SHIFT_MASK, + { GDK_SCROLL_LEFT, "", 0, "scroll-left-shift-alt", N_("Scroll Left") }, - { GDK_SCROLL_LEFT, GDK_MOD1_MASK | GDK_CONTROL_MASK, - "scroll-left-control-alt", + { GDK_SCROLL_LEFT, "", 0, + "scroll-left-primary-alt", N_("Scroll Left") }, - { GDK_SCROLL_LEFT, GDK_MOD1_MASK | GDK_CONTROL_MASK | GDK_SHIFT_MASK, - "scroll-left-shift-control-alt", + { GDK_SCROLL_LEFT, "", 0, + "scroll-left-shift-primary-alt", N_("Scroll Left") }, - { GDK_SCROLL_RIGHT, 0, + { GDK_SCROLL_RIGHT, NULL, 0, "scroll-right", N_("Scroll Right") }, - { GDK_SCROLL_RIGHT, GDK_SHIFT_MASK, + { GDK_SCROLL_RIGHT, "", 0, "scroll-right-shift", N_("Scroll Right") }, - { GDK_SCROLL_RIGHT, GDK_CONTROL_MASK, - "scroll-right-control", + { GDK_SCROLL_RIGHT, "", 0, + "scroll-right-primary", N_("Scroll Right") }, - { GDK_SCROLL_RIGHT, GDK_MOD1_MASK, + { GDK_SCROLL_RIGHT, "", 0, "scroll-right-alt", N_("Scroll Right") }, - { GDK_SCROLL_RIGHT, GDK_CONTROL_MASK | GDK_SHIFT_MASK, - "scroll-right-shift-control", + { GDK_SCROLL_RIGHT, "", 0, + "scroll-right-shift-primary", N_("Scroll Right") }, - { GDK_SCROLL_RIGHT, GDK_MOD1_MASK | GDK_SHIFT_MASK, + { GDK_SCROLL_RIGHT, "", 0, "scroll-right-shift-alt", N_("Scroll Right") }, - { GDK_SCROLL_RIGHT, GDK_MOD1_MASK | GDK_CONTROL_MASK, - "scroll-right-control-alt", + { GDK_SCROLL_RIGHT, "", 0, + "scroll-right-primary-alt", N_("Scroll Right") }, - { GDK_SCROLL_RIGHT, GDK_MOD1_MASK | GDK_CONTROL_MASK | GDK_SHIFT_MASK, - "scroll-right-shift-control-alt", + { GDK_SCROLL_RIGHT, "", 0, + "scroll-right-shift-primary-alt", N_("Scroll Right") } }; @@ -187,9 +185,9 @@ gimp_controller_wheel_class_init (GimpControllerWheelClass *klass) static void gimp_controller_wheel_init (GimpControllerWheel *wheel) { - static gboolean event_names_initialized = FALSE; + static gboolean events_initialized = FALSE; - if (! event_names_initialized) + if (! events_initialized) { gint i; @@ -197,15 +195,25 @@ gimp_controller_wheel_init (GimpControllerWheel *wheel) { WheelEvent *wevent = &wheel_events[i]; + if (wevent->modifier_string) + { + gtk_accelerator_parse (wevent->modifier_string, NULL, + &wevent->modifiers); + } + if (wevent->modifiers != 0) { wevent->blurb = g_strdup_printf ("%s (%s)", gettext (wevent->blurb), gimp_get_mod_string (wevent->modifiers)); } + else + { + wevent->blurb = gettext (wevent->blurb); + } } - event_names_initialized = TRUE; + events_initialized = TRUE; } } @@ -255,11 +263,15 @@ gimp_controller_wheel_scroll (GimpControllerWheel *wheel, g_return_val_if_fail (GIMP_IS_CONTROLLER_WHEEL (wheel), FALSE); g_return_val_if_fail (sevent != NULL, FALSE); - for (i = 0; i < G_N_ELEMENTS (wheel_events); i++) + /* start with the last event because the last ones in the + * up,down,left,right groups have the most keyboard modifiers + */ + for (i = G_N_ELEMENTS (wheel_events) - 1; i >= 0; i--) { if (wheel_events[i].direction == sevent->direction) { - if ((sevent->state & MODIFIER_MASK) == wheel_events[i].modifiers) + if ((wheel_events[i].modifiers & sevent->state) == + wheel_events[i].modifiers) { GimpControllerEvent controller_event; GimpControllerEventTrigger *trigger; diff --git a/etc/controllerrc b/etc/controllerrc index ca10179b12..94bf218a1d 100644 --- a/etc/controllerrc +++ b/etc/controllerrc @@ -7,14 +7,14 @@ (mapping (map "scroll-up-alt" "tools-opacity-increase-skip") (map "scroll-down-alt" "tools-opacity-decrease-skip") - (map "scroll-up-control-alt" "context-gradient-select-next") - (map "scroll-down-control-alt" "context-gradient-select-previous") + (map "scroll-up-primary-alt" "context-gradient-select-next") + (map "scroll-down-primary-alt" "context-gradient-select-previous") (map "scroll-up-shift-alt" "context-pattern-select-next") (map "scroll-down-shift-alt" "context-pattern-select-previous") - (map "scroll-up-shift-control" "context-brush-select-next") - (map "scroll-down-shift-control" "context-brush-select-previous") - (map "scroll-up-shift-control-alt" "context-font-select-next") - (map "scroll-down-shift-control-alt" "context-font-select-previous"))) + (map "scroll-up-shift-primary" "context-brush-select-next") + (map "scroll-down-shift-primary" "context-brush-select-previous") + (map "scroll-up-shift-primary-alt" "context-font-select-next") + (map "scroll-down-shift-primary-alt" "context-font-select-previous"))) (GimpControllerInfo "Main Keyboard" (enabled yes) @@ -25,10 +25,10 @@ (map "cursor-down-shift" "view-scroll-page-down") (map "cursor-left-shift" "view-scroll-page-left") (map "cursor-right-shift" "view-scroll-page-right") - (map "cursor-up-control" "view-scroll-top-border") - (map "cursor-down-control" "view-scroll-bottom-border") - (map "cursor-left-control" "view-scroll-left-border") - (map "cursor-right-control" "view-scroll-right-border") + (map "cursor-up-primary" "view-scroll-top-border") + (map "cursor-down-primary" "view-scroll-bottom-border") + (map "cursor-left-primary" "view-scroll-left-border") + (map "cursor-right-primary" "view-scroll-right-border") (map "cursor-up-alt" "tools-value-1-increase-skip") (map "cursor-down-alt" "tools-value-1-decrease-skip") (map "cursor-left-alt" "tools-value-1-decrease")