From effe750ec103d56ff96f12ce64ac977a8ae51909 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 20 Feb 2019 14:29:29 +1100 Subject: WM: support dynamic keymap handlers Add getter callback support for 'WM_HANDLER_TYPE_KEYMAP' type handlers this is needed for key-maps which change based on the active tool. Replaces 'sneaky_handler' hack which temporarily inserted a handler. --- source/blender/editors/include/ED_screen.h | 13 +++++++------ source/blender/editors/screen/area.c | 3 +++ source/blender/editors/space_image/space_image.c | 2 +- source/blender/editors/space_node/space_node.c | 2 +- source/blender/editors/space_view3d/space_view3d.c | 2 +- 5 files changed, 13 insertions(+), 9 deletions(-) (limited to 'source/blender/editors') diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h index c20d8e0555f..5d4f0919c44 100644 --- a/source/blender/editors/include/ED_screen.h +++ b/source/blender/editors/include/ED_screen.h @@ -356,12 +356,13 @@ void ED_area_type_hud_ensure(struct bContext *C, struct ScrArea *sa); enum { ED_KEYMAP_UI = (1 << 1), ED_KEYMAP_GIZMO = (1 << 2), - ED_KEYMAP_VIEW2D = (1 << 3), - ED_KEYMAP_MARKERS = (1 << 4), - ED_KEYMAP_ANIMATION = (1 << 5), - ED_KEYMAP_FRAMES = (1 << 6), - ED_KEYMAP_HEADER = (1 << 7), - ED_KEYMAP_GPENCIL = (1 << 8), + ED_KEYMAP_TOOL = (1 << 3), + ED_KEYMAP_VIEW2D = (1 << 4), + ED_KEYMAP_MARKERS = (1 << 5), + ED_KEYMAP_ANIMATION = (1 << 6), + ED_KEYMAP_FRAMES = (1 << 7), + ED_KEYMAP_HEADER = (1 << 8), + ED_KEYMAP_GPENCIL = (1 << 9), }; /* SCREEN_OT_space_context_cycle direction */ diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index 6df0702b126..32b85b40950 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -1474,6 +1474,9 @@ static void ed_default_handlers(wmWindowManager *wm, ScrArea *sa, ARegion *ar, L WM_gizmomap_add_handlers(ar, ar->gizmo_map); } } + if (flag & ED_KEYMAP_TOOL) { + WM_event_add_keymap_handler_dynamic(&ar->handlers, WM_event_get_keymap_from_toolsystem, sa); + } if (flag & ED_KEYMAP_VIEW2D) { /* 2d-viewport handling+manipulation */ wmKeyMap *keymap = WM_keymap_ensure(wm->defaultconf, "View2D", 0, 0); diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c index 9171b923bad..6ae4eb9767b 100644 --- a/source/blender/editors/space_image/space_image.c +++ b/source/blender/editors/space_image/space_image.c @@ -1028,7 +1028,7 @@ void ED_spacetype_image(void) /* regions: main window */ art = MEM_callocN(sizeof(ARegionType), "spacetype image region"); art->regionid = RGN_TYPE_WINDOW; - art->keymapflag = ED_KEYMAP_GIZMO | ED_KEYMAP_FRAMES | ED_KEYMAP_GPENCIL; + art->keymapflag = ED_KEYMAP_GIZMO | ED_KEYMAP_TOOL | ED_KEYMAP_FRAMES | ED_KEYMAP_GPENCIL; art->init = image_main_region_init; art->draw = image_main_region_draw; art->listener = image_main_region_listener; diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c index 0c15a6c2a7d..0039fb1e2ab 100644 --- a/source/blender/editors/space_node/space_node.c +++ b/source/blender/editors/space_node/space_node.c @@ -975,7 +975,7 @@ void ED_spacetype_node(void) art->regionid = RGN_TYPE_WINDOW; art->init = node_main_region_init; art->draw = node_main_region_draw; - art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_GIZMO | ED_KEYMAP_VIEW2D | ED_KEYMAP_FRAMES | ED_KEYMAP_GPENCIL; + art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_GIZMO | ED_KEYMAP_TOOL | ED_KEYMAP_VIEW2D | ED_KEYMAP_FRAMES | ED_KEYMAP_GPENCIL; art->listener = node_region_listener; art->cursor = node_cursor; art->event_cursor = true; diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index f312dc971f3..10fadd9aaec 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -1473,7 +1473,7 @@ void ED_spacetype_view3d(void) /* regions: main window */ art = MEM_callocN(sizeof(ARegionType), "spacetype view3d main region"); art->regionid = RGN_TYPE_WINDOW; - art->keymapflag = ED_KEYMAP_GIZMO | ED_KEYMAP_GPENCIL; + art->keymapflag = ED_KEYMAP_GIZMO | ED_KEYMAP_TOOL | ED_KEYMAP_GPENCIL; art->draw = view3d_main_region_draw; art->init = view3d_main_region_init; art->exit = view3d_main_region_exit; -- cgit v1.2.3