Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/editors/space_view3d/space_view3d.c')
-rw-r--r--source/blender/editors/space_view3d/space_view3d.c86
1 files changed, 44 insertions, 42 deletions
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index 837f4a8475b..36ab867f2ae 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -209,9 +209,51 @@ static SpaceLink *view3d_duplicate(SpaceLink *sl)
return (SpaceLink *)v3dn;
}
+static void view3d_modal_keymaps(wmWindowManager *wm, ARegion *ar, int stype)
+{
+ RegionView3D *rv3d= ar->regiondata;
+ ListBase *keymap;
+
+ /* copy last mode, then we can re-init the region maps */
+ rv3d->lastmode= stype;
+
+ keymap= WM_keymap_listbase(wm, "Object Mode", 0, 0);
+ if(ELEM(stype, 0, NS_MODE_OBJECT))
+ WM_event_add_keymap_handler(&ar->handlers, keymap);
+ else
+ WM_event_remove_keymap_handler(&ar->handlers, keymap);
+
+ keymap= WM_keymap_listbase(wm, "EditMesh", 0, 0);
+ if(stype==NS_EDITMODE_MESH)
+ WM_event_add_keymap_handler(&ar->handlers, keymap);
+ else
+ WM_event_remove_keymap_handler(&ar->handlers, keymap);
+
+ keymap= WM_keymap_listbase(wm, "Curve", 0, 0);
+ if(stype==NS_EDITMODE_CURVE)
+ WM_event_add_keymap_handler(&ar->handlers, keymap);
+ else
+ WM_event_remove_keymap_handler(&ar->handlers, keymap);
+
+ keymap= WM_keymap_listbase(wm, "Armature", 0, 0);
+ if(stype==NS_EDITMODE_ARMATURE)
+ WM_event_add_keymap_handler(&ar->handlers, keymap);
+ else
+ WM_event_remove_keymap_handler(&ar->handlers, keymap);
+
+ /* editfont keymap swallows all... */
+ keymap= WM_keymap_listbase(wm, "Font", 0, 0);
+ if(stype==NS_EDITMODE_TEXT)
+ WM_event_add_keymap_handler_priority(&ar->handlers, keymap, 10);
+ else
+ WM_event_remove_keymap_handler(&ar->handlers, keymap);
+
+}
+
/* add handlers, stuff you only do once or on area/region changes */
static void view3d_main_area_init(wmWindowManager *wm, ARegion *ar)
{
+ RegionView3D *rv3d= ar->regiondata;
ListBase *keymap;
/* own keymap */
@@ -228,10 +270,8 @@ static void view3d_main_area_init(wmWindowManager *wm, ARegion *ar)
keymap= WM_keymap_listbase(wm, "Pose", 0, 0);
WM_event_add_keymap_handler(&ar->handlers, keymap);
- /* object modal ops default */
- keymap= WM_keymap_listbase(wm, "Object Mode", 0, 0);
- WM_event_add_keymap_handler(&ar->handlers, keymap);
-
+ /* modal ops keymaps */
+ view3d_modal_keymaps(wm, ar, rv3d->lastmode);
}
/* type callback, not region itself */
@@ -281,44 +321,6 @@ static void *view3d_main_area_duplicate(void *poin)
return NULL;
}
-
-static void view3d_modal_keymaps(wmWindowManager *wm, ARegion *ar, int stype)
-{
- ListBase *keymap;
-
- keymap= WM_keymap_listbase(wm, "Object Mode", 0, 0);
- if(stype==NS_MODE_OBJECT)
- WM_event_add_keymap_handler(&ar->handlers, keymap);
- else
- WM_event_remove_keymap_handler(&ar->handlers, keymap);
-
- keymap= WM_keymap_listbase(wm, "EditMesh", 0, 0);
- if(stype==NS_EDITMODE_MESH)
- WM_event_add_keymap_handler(&ar->handlers, keymap);
- else
- WM_event_remove_keymap_handler(&ar->handlers, keymap);
-
- keymap= WM_keymap_listbase(wm, "Curve", 0, 0);
- if(stype==NS_EDITMODE_CURVE)
- WM_event_add_keymap_handler(&ar->handlers, keymap);
- else
- WM_event_remove_keymap_handler(&ar->handlers, keymap);
-
- keymap= WM_keymap_listbase(wm, "Armature", 0, 0);
- if(stype==NS_EDITMODE_ARMATURE)
- WM_event_add_keymap_handler(&ar->handlers, keymap);
- else
- WM_event_remove_keymap_handler(&ar->handlers, keymap);
-
- /* editfont keymap swallows all... */
- keymap= WM_keymap_listbase(wm, "Font", 0, 0);
- if(stype==NS_EDITMODE_TEXT)
- WM_event_add_keymap_handler_priority(&ar->handlers, keymap, 10);
- else
- WM_event_remove_keymap_handler(&ar->handlers, keymap);
-
-}
-
static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn)
{
/* context changes */