diff options
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/BKE_blender_version.h | 2 | ||||
-rw-r--r-- | source/blender/blenloader/CMakeLists.txt | 1 | ||||
-rw-r--r-- | source/blender/blenloader/intern/versioning_userdef.c | 40 | ||||
-rw-r--r-- | source/blender/editors/animation/anim_ops.c | 4 | ||||
-rw-r--r-- | source/blender/editors/space_graph/graph_ops.c | 4 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_windowmanager_types.h | 9 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_wm.c | 12 | ||||
-rw-r--r-- | source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c | 11 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 16 | ||||
-rw-r--r-- | source/blender/windowmanager/wm_event_types.h | 8 |
10 files changed, 63 insertions, 44 deletions
diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h index b695132416e..34a486dd66f 100644 --- a/source/blender/blenkernel/BKE_blender_version.h +++ b/source/blender/blenkernel/BKE_blender_version.h @@ -28,7 +28,7 @@ * and keep comment above the defines. * Use STRINGIFY() rather than defining with quotes */ #define BLENDER_VERSION 280 -#define BLENDER_SUBVERSION 30 +#define BLENDER_SUBVERSION 31 /* Several breakages with 280, e.g. collections vs layers */ #define BLENDER_MINVERSION 280 #define BLENDER_MINSUBVERSION 0 diff --git a/source/blender/blenloader/CMakeLists.txt b/source/blender/blenloader/CMakeLists.txt index e0453e71a05..49987cb860c 100644 --- a/source/blender/blenloader/CMakeLists.txt +++ b/source/blender/blenloader/CMakeLists.txt @@ -36,6 +36,7 @@ set(INC ../makesrna ../nodes ../render/extern/include + ../windowmanager ../../../intern/guardedalloc # for writefile.c: dna_type_offsets.h diff --git a/source/blender/blenloader/intern/versioning_userdef.c b/source/blender/blenloader/intern/versioning_userdef.c index b14b17cbd8f..2cf117067c2 100644 --- a/source/blender/blenloader/intern/versioning_userdef.c +++ b/source/blender/blenloader/intern/versioning_userdef.c @@ -40,6 +40,8 @@ #include "BLO_readfile.h" /* Own include. */ +#include "wm_event_types.h" + /* Disallow access to global userdef. */ #define U (_error_) @@ -92,6 +94,26 @@ static void do_versions_theme(UserDef *userdef, bTheme *btheme) #undef USER_VERSION_ATLEAST } +static void do_version_select_mouse(UserDef *userdef, wmKeyMapItem *kmi) +{ + /* Remove select/action mouse from user defined keymaps. */ + enum { + ACTIONMOUSE = 0x0005, + SELECTMOUSE = 0x0006, + EVT_TWEAK_A = 0x5005, + EVT_TWEAK_S = 0x5006, + }; + const bool left = (userdef->flag & USER_LMOUSESELECT) != 0; + + switch (kmi->type) { + case SELECTMOUSE: kmi->type = (left) ? LEFTMOUSE : RIGHTMOUSE; break; + case ACTIONMOUSE: kmi->type = (left) ? RIGHTMOUSE : LEFTMOUSE; break; + case EVT_TWEAK_S: kmi->type = (left) ? EVT_TWEAK_L : EVT_TWEAK_R; break; + case EVT_TWEAK_A: kmi->type = (left) ? EVT_TWEAK_R : EVT_TWEAK_L; break; + default: break; + } +} + /* patching UserDef struct and Themes */ void BLO_version_defaults_userpref_blend(Main *bmain, UserDef *userdef) { @@ -353,6 +375,24 @@ void BLO_version_defaults_userpref_blend(Main *bmain, UserDef *userdef) } } + if (!USER_VERSION_ATLEAST(280, 31)) { + /* Remove select/action mouse from user defined keymaps. */ + for (wmKeyMap *keymap = userdef->user_keymaps.first; keymap; keymap = keymap->next) { + for (wmKeyMapDiffItem *kmdi = keymap->diff_items.first; kmdi; kmdi = kmdi->next) { + if (kmdi->remove_item) { + do_version_select_mouse(userdef, kmdi->remove_item); + } + if (kmdi->add_item) { + do_version_select_mouse(userdef, kmdi->add_item); + } + } + + for (wmKeyMapItem *kmi = keymap->items.first; kmi; kmi = kmi->next) { + do_version_select_mouse(userdef, kmi); + } + } + } + /** * Include next version bump. */ diff --git a/source/blender/editors/animation/anim_ops.c b/source/blender/editors/animation/anim_ops.c index f6fdd539983..8914cf9492c 100644 --- a/source/blender/editors/animation/anim_ops.c +++ b/source/blender/editors/animation/anim_ops.c @@ -231,9 +231,7 @@ static int change_frame_modal(bContext *C, wmOperator *op, const wmEvent *event) case LEFTMOUSE: case RIGHTMOUSE: case MIDDLEMOUSE: - /* we check for either mouse-button to end, as checking for ACTIONMOUSE (which is used to init - * the modal op) doesn't work for some reason - */ + /* We check for either mouse-button to end, to work with all user keymaps. */ if (event->val == KM_RELEASE) ret = OPERATOR_FINISHED; break; diff --git a/source/blender/editors/space_graph/graph_ops.c b/source/blender/editors/space_graph/graph_ops.c index a6cc047d2dc..4ed6a980fcb 100644 --- a/source/blender/editors/space_graph/graph_ops.c +++ b/source/blender/editors/space_graph/graph_ops.c @@ -196,9 +196,7 @@ static int graphview_cursor_modal(bContext *C, wmOperator *op, const wmEvent *ev case LEFTMOUSE: case RIGHTMOUSE: case MIDDLEMOUSE: - /* we check for either mouse-button to end, as checking for ACTIONMOUSE (which is used to init - * the modal op) doesn't work for some reason - */ + /* We check for either mouse-button to end, to work with all user keymaps. */ if (event->val == KM_RELEASE) { if (screen) screen->scrubbing = false; diff --git a/source/blender/makesdna/DNA_windowmanager_types.h b/source/blender/makesdna/DNA_windowmanager_types.h index e51933f5a22..26ab24d8f9d 100644 --- a/source/blender/makesdna/DNA_windowmanager_types.h +++ b/source/blender/makesdna/DNA_windowmanager_types.h @@ -355,13 +355,18 @@ typedef struct wmKeyConfig { char basename[64]; /* idname of configuration this is derives from, "" if none */ ListBase keymaps; - int actkeymap, flag; + int actkeymap; + short flag; + + /* Supports select mouse switching? */ + char has_select_mouse; /* may remove in favor of custom properties. */ + char _pad0; } wmKeyConfig; /* wmKeyConfig.flag */ enum { KEYCONF_USER = (1 << 1), /* And what about (1 << 0)? */ - KEYCONF_INIT_DEFAULT = (1 << 2), + KEYCONF_INIT_DEFAULT = (1 << 2), /* Has default keymap been initialized? */ }; /* this one is the operator itself, stored in files for macros etc */ diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c index 4e79c516ae3..d7c256c2223 100644 --- a/source/blender/makesrna/intern/rna_wm.c +++ b/source/blender/makesrna/intern/rna_wm.c @@ -74,8 +74,6 @@ static const EnumPropertyItem event_tweak_type_items[] = { {EVT_TWEAK_L, "EVT_TWEAK_L", 0, "Left", ""}, {EVT_TWEAK_M, "EVT_TWEAK_M", 0, "Middle", ""}, {EVT_TWEAK_R, "EVT_TWEAK_R", 0, "Right", ""}, - {EVT_TWEAK_A, "EVT_TWEAK_A", 0, "Action", ""}, - {EVT_TWEAK_S, "EVT_TWEAK_S", 0, "Select", ""}, {0, NULL, 0, NULL, NULL} }; @@ -87,8 +85,6 @@ static const EnumPropertyItem event_mouse_type_items[] = { {BUTTON5MOUSE, "BUTTON5MOUSE", 0, "Button5", ""}, {BUTTON6MOUSE, "BUTTON6MOUSE", 0, "Button6", ""}, {BUTTON7MOUSE, "BUTTON7MOUSE", 0, "Button7", ""}, - {ACTIONMOUSE, "ACTIONMOUSE", 0, "Action", ""}, - {SELECTMOUSE, "SELECTMOUSE", 0, "Select", ""}, {0, "", 0, NULL, NULL}, {TABLET_STYLUS, "PEN", 0, "Pen", ""}, {TABLET_ERASER, "ERASER", 0, "Eraser", ""}, @@ -184,8 +180,6 @@ const EnumPropertyItem rna_enum_event_type_items[] = { {BUTTON5MOUSE, "BUTTON5MOUSE", 0, "Button5 Mouse", "MB5"}, {BUTTON6MOUSE, "BUTTON6MOUSE", 0, "Button6 Mouse", "MB6"}, {BUTTON7MOUSE, "BUTTON7MOUSE", 0, "Button7 Mouse", "MB7"}, - {ACTIONMOUSE, "ACTIONMOUSE", 0, "Action Mouse", "MBA"}, - {SELECTMOUSE, "SELECTMOUSE", 0, "Select Mouse", "MBS"}, {0, "", 0, NULL, NULL}, {TABLET_STYLUS, "PEN", 0, "Pen", ""}, {TABLET_ERASER, "ERASER", 0, "Eraser", ""}, @@ -204,8 +198,6 @@ const EnumPropertyItem rna_enum_event_type_items[] = { {EVT_TWEAK_L, "EVT_TWEAK_L", 0, "Tweak Left", "TwkL"}, {EVT_TWEAK_M, "EVT_TWEAK_M", 0, "Tweak Middle", "TwkM"}, {EVT_TWEAK_R, "EVT_TWEAK_R", 0, "Tweak Right", "TwkR"}, - {EVT_TWEAK_A, "EVT_TWEAK_A", 0, "Tweak Action", "TwkA"}, - {EVT_TWEAK_S, "EVT_TWEAK_S", 0, "Tweak Select", "TwkS"}, {0, "", 0, NULL, NULL}, {AKEY, "A", 0, "A", ""}, {BKEY, "B", 0, "B", ""}, @@ -2241,6 +2233,10 @@ static void rna_def_keyconfig(BlenderRNA *brna) RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "User Defined", "Indicates that a keyconfig was defined by the user"); + prop = RNA_def_property(srna, "has_select_mouse", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "has_select_mouse", 1); + RNA_def_property_ui_text(prop, "Has Select Mouse", "Configuration supports select mouse switching"); + RNA_api_keyconfig(srna); /* KeyMap */ diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c index 90a0ff8b651..5cafbaf6b03 100644 --- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c +++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c @@ -693,16 +693,19 @@ wmKeyMap *WM_gizmogroup_keymap_common_select( { /* Use area and region id since we might have multiple gizmos with the same name in different areas/regions */ wmKeyMap *km = WM_keymap_ensure(config, gzgt->name, gzgt->gzmap_params.spaceid, gzgt->gzmap_params.regionid); + const int select_mouse = (U.flag & USER_LMOUSESELECT) ? LEFTMOUSE : RIGHTMOUSE; + const int select_tweak = (U.flag & USER_LMOUSESELECT) ? EVT_TWEAK_L : EVT_TWEAK_R; + const int action_mouse = (U.flag & USER_LMOUSESELECT) ? RIGHTMOUSE : LEFTMOUSE; - WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_tweak", ACTIONMOUSE, KM_PRESS, KM_ANY, 0); - WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_tweak", EVT_TWEAK_S, KM_ANY, 0, 0); + WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_tweak", action_mouse, KM_PRESS, KM_ANY, 0); + WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_tweak", select_tweak, KM_ANY, 0, 0); gizmogroup_tweak_modal_keymap(config, gzgt->name); - wmKeyMapItem *kmi = WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_select", SELECTMOUSE, KM_PRESS, 0, 0); + wmKeyMapItem *kmi = WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_select", select_mouse, KM_PRESS, 0, 0); RNA_boolean_set(kmi->ptr, "extend", false); RNA_boolean_set(kmi->ptr, "deselect", false); RNA_boolean_set(kmi->ptr, "toggle", false); - kmi = WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0); + kmi = WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_select", select_mouse, KM_PRESS, KM_SHIFT, 0); RNA_boolean_set(kmi->ptr, "extend", false); RNA_boolean_set(kmi->ptr, "deselect", false); RNA_boolean_set(kmi->ptr, "toggle", true); diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index fcda06a7c2d..63c45407135 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -1769,14 +1769,6 @@ void WM_event_remove_handlers(bContext *C, ListBase *handlers) int WM_userdef_event_map(int kmitype) { switch (kmitype) { - case SELECTMOUSE: - return (U.flag & USER_LMOUSESELECT) ? LEFTMOUSE : RIGHTMOUSE; - case ACTIONMOUSE: - return (U.flag & USER_LMOUSESELECT) ? RIGHTMOUSE : LEFTMOUSE; - case EVT_TWEAK_A: - return (U.flag & USER_LMOUSESELECT) ? EVT_TWEAK_R : EVT_TWEAK_L; - case EVT_TWEAK_S: - return (U.flag & USER_LMOUSESELECT) ? EVT_TWEAK_L : EVT_TWEAK_R; case WHEELOUTMOUSE: return (U.uiflag & USER_WHEELZOOMDIR) ? WHEELUPMOUSE : WHEELDOWNMOUSE; case WHEELINMOUSE: @@ -1794,14 +1786,6 @@ int WM_userdef_event_map(int kmitype) int WM_userdef_event_type_from_keymap_type(int kmitype) { switch (kmitype) { - case SELECTMOUSE: - return (U.flag & USER_LMOUSESELECT) ? LEFTMOUSE : RIGHTMOUSE; - case ACTIONMOUSE: - return (U.flag & USER_LMOUSESELECT) ? RIGHTMOUSE : LEFTMOUSE; - case EVT_TWEAK_S: - return (U.flag & USER_LMOUSESELECT) ? LEFTMOUSE : RIGHTMOUSE; - case EVT_TWEAK_A: - return (U.flag & USER_LMOUSESELECT) ? RIGHTMOUSE : LEFTMOUSE; case EVT_TWEAK_L: return LEFTMOUSE; case EVT_TWEAK_M: diff --git a/source/blender/windowmanager/wm_event_types.h b/source/blender/windowmanager/wm_event_types.h index cfb43bf43ed..40a3d148b7b 100644 --- a/source/blender/windowmanager/wm_event_types.h +++ b/source/blender/windowmanager/wm_event_types.h @@ -61,9 +61,6 @@ enum { MIDDLEMOUSE = 0x0002, RIGHTMOUSE = 0x0003, MOUSEMOVE = 0x0004, - /* only use if you want user option switch possible */ - ACTIONMOUSE = 0x0005, - SELECTMOUSE = 0x0006, /* Extra mouse buttons */ BUTTON4MOUSE = 0x0007, BUTTON5MOUSE = 0x0008, @@ -324,9 +321,6 @@ enum { EVT_TWEAK_L = 0x5002, EVT_TWEAK_M = 0x5003, EVT_TWEAK_R = 0x5004, - /* tweak events for action or select mousebutton */ - EVT_TWEAK_A = 0x5005, - EVT_TWEAK_S = 0x5006, EVT_GESTURE = 0x5010, /* 0x5011 is taken, see EVT_ACTIONZONE_FULLSCREEN */ @@ -371,7 +365,7 @@ enum { #define ISMOUSE_GESTURE(event_type) ((event_type) >= MOUSEPAN && (event_type) <= MOUSEROTATE) #define ISMOUSE_BUTTON(event_type) \ (ELEM(event_type, \ - LEFTMOUSE, MIDDLEMOUSE, RIGHTMOUSE, ACTIONMOUSE, SELECTMOUSE, \ + LEFTMOUSE, MIDDLEMOUSE, RIGHTMOUSE, \ BUTTON4MOUSE, BUTTON5MOUSE, BUTTON6MOUSE, BUTTON7MOUSE)) /* test whether the event is tweak event */ |