Index: editors/space_view3d/view3d_intern.h =================================================================== --- editors/space_view3d/view3d_intern.h (revision 24316) +++ editors/space_view3d/view3d_intern.h (working copy) @@ -63,6 +63,7 @@ /* view3d_ops.c */ void view3d_operatortypes(void); void view3d_keymap(struct wmKeyConfig *keyconf); +void view3d_keymap_update_move(struct wmKeyConfig *keyconf); /* view3d_edit.c */ void VIEW3D_OT_zoom(struct wmOperatorType *ot); Index: editors/space_view3d/view3d_ops.c =================================================================== --- editors/space_view3d/view3d_ops.c (revision 24316) +++ editors/space_view3d/view3d_ops.c (working copy) @@ -119,8 +119,8 @@ WM_keymap_verify_item(keymap, "VIEW3D_OT_cursor3d", ACTIONMOUSE, KM_PRESS, 0, 0); - WM_keymap_verify_item(keymap, "VIEW3D_OT_rotate", MIDDLEMOUSE, KM_PRESS, 0, 0); - WM_keymap_verify_item(keymap, "VIEW3D_OT_move", MIDDLEMOUSE, KM_PRESS, KM_SHIFT, 0); + WM_keymap_verify_item(keymap, "VIEW3D_OT_rotate", MIDDLEMOUSE, KM_PRESS, (U.flag & USER_VIEWMOVE ? KM_SHIFT : 0), 0); + WM_keymap_verify_item(keymap, "VIEW3D_OT_move", MIDDLEMOUSE, KM_PRESS, (U.flag & USER_VIEWMOVE ? 0 : KM_SHIFT), 0); WM_keymap_verify_item(keymap, "VIEW3D_OT_zoom", MIDDLEMOUSE, KM_PRESS, KM_CTRL, 0); WM_keymap_verify_item(keymap, "VIEW3D_OT_view_center", PADPERIOD, KM_PRESS, 0, 0); @@ -257,3 +257,19 @@ viewzoom_modal_keymap(keyconf); } +void view3d_keymap_update_move(wmKeyConfig *keyconf) +{ + wmKeyMap *keymap; + wmKeyMapItem *km; + + keymap = WM_keymap_find(keyconf, "View3D", SPACE_VIEW3D, 0); + + km = WM_keymap_verify_item(keymap, "VIEW3D_OT_rotate", 0, 0, 0, 0); + if (km) WM_keymap_remove_item(keymap, km); + km = WM_keymap_verify_item(keymap, "VIEW3D_OT_move", 0, 0, 0, 0); + if (km) WM_keymap_remove_item(keymap, km); + + WM_keymap_verify_item(keymap, "VIEW3D_OT_rotate", MIDDLEMOUSE, KM_PRESS, (U.flag & USER_VIEWMOVE ? KM_SHIFT : 0), 0); + WM_keymap_verify_item(keymap, "VIEW3D_OT_move", MIDDLEMOUSE, KM_PRESS, (U.flag & USER_VIEWMOVE ? 0 : KM_SHIFT), 0); +} + Index: makesrna/intern/rna_userdef.c =================================================================== --- makesrna/intern/rna_userdef.c (revision 24316) +++ makesrna/intern/rna_userdef.c (working copy) @@ -157,6 +157,13 @@ rna_userdef_update(C, ptr); } +static void rna_userdef_middle_mouse_update(bContext *C, PointerRNA *ptr) +{ + wmWindowManager *wm= CTX_wm_manager(C); + view3d_keymap_update_move(wm->defaultconf); + rna_userdef_update(C, ptr); +} + #else static void rna_def_userdef_theme_ui_font_style(BlenderRNA *brna) @@ -2272,8 +2279,8 @@ {0, NULL, 0, NULL, NULL}}; static EnumPropertyItem middle_mouse_mouse_items[] = { - {0, "PAN", 0, "Pan", "Use the middle mouse button for panning the viewport."}, - {USER_VIEWMOVE, "ROTATE", 0, "Rotate", "Use the middle mouse button for rotation the viewport."}, + {USER_VIEWMOVE, "PAN", 0, "Pan", "Use the middle mouse button for panning the viewport."}, + {0, "ROTATE", 0, "Rotate", "Use the middle mouse button for rotation the viewport."}, {0, NULL, 0, NULL, NULL}}; static EnumPropertyItem view_zoom_styles[] = { @@ -2291,6 +2298,7 @@ RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag"); RNA_def_property_enum_items(prop, middle_mouse_mouse_items); RNA_def_property_ui_text(prop, "Middle Mouse", "Use the middle mouse button to pan or zoom the view."); + RNA_def_property_update(prop, 0, "rna_userdef_middle_mouse_update"); prop= RNA_def_property(srna, "select_mouse", PROP_ENUM, PROP_NONE); RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");