[Bf-blender-cvs] [bb6692be8a9] master: WM: move keymap handler to it's own type

Campbell Barton noreply at git.blender.org
Tue Feb 19 06:26:25 CET 2019


Commit: bb6692be8a90f7d86d620557a893c6bb48bdd236
Author: Campbell Barton
Date:   Tue Feb 19 16:09:14 2019 +1100
Branches: master
https://developer.blender.org/rBbb6692be8a90f7d86d620557a893c6bb48bdd236

WM: move keymap handler to it's own type

Illuminate dead code, using wmEventHandler_KeymapFn from gizmo handler
type where it was never set.

===================================================================

M	source/blender/editors/interface/interface_region_popover.c
M	source/blender/windowmanager/WM_api.h
M	source/blender/windowmanager/intern/wm_event_system.c
M	source/blender/windowmanager/intern/wm_keymap.c
M	source/blender/windowmanager/wm_event_system.h

===================================================================

diff --git a/source/blender/editors/interface/interface_region_popover.c b/source/blender/editors/interface/interface_region_popover.c
index 21c78ebd286..f4af29bee48 100644
--- a/source/blender/editors/interface/interface_region_popover.c
+++ b/source/blender/editors/interface/interface_region_popover.c
@@ -76,7 +76,7 @@ struct uiPopover {
 	/* Needed for keymap removal. */
 	wmWindow *window;
 	wmKeyMap *keymap;
-	struct wmEventHandler *keymap_handler;
+	struct wmEventHandler_Keymap *keymap_handler;
 
 	uiMenuCreateFunc menu_func;
 	void *menu_arg;
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 0520532fb0e..77b1f9781df 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -58,6 +58,7 @@ struct wmDrag;
 struct wmDropBox;
 struct wmEvent;
 struct wmEventHandler;
+struct wmEventHandler_Keymap;
 struct wmGesture;
 struct wmJob;
 struct wmMsgSubscribeKey;
@@ -187,16 +188,19 @@ int			WM_userdef_event_type_from_keymap_type(int kmitype);
 
 			/* handlers */
 
-struct wmEventHandler *WM_event_add_keymap_handler(ListBase *handlers, wmKeyMap *keymap);
-						/* boundbox, optional subwindow boundbox for offset */
-struct wmEventHandler *WM_event_add_keymap_handler_bb(ListBase *handlers, wmKeyMap *keymap, const rcti *bb, const rcti *swinbb);
-						/* priority not implemented, it adds in begin */
-struct wmEventHandler *WM_event_add_keymap_handler_priority(ListBase *handlers, wmKeyMap *keymap, int priority);
+struct wmEventHandler_Keymap *WM_event_add_keymap_handler(
+        ListBase *handlers, wmKeyMap *keymap);
+/* boundbox, optional subwindow boundbox for offset */
+struct wmEventHandler_Keymap *WM_event_add_keymap_handler_bb(
+        ListBase *handlers, wmKeyMap *keymap, const rcti *bb, const rcti *swinbb);
+/* priority not implemented, it adds in begin */
+struct wmEventHandler_Keymap *WM_event_add_keymap_handler_priority(
+        ListBase *handlers, wmKeyMap *keymap, int priority);
 
 void		WM_event_remove_keymap_handler(ListBase *handlers, wmKeyMap *keymap);
 
 void WM_event_set_keymap_handler_callback(
-        struct wmEventHandler *handler,
+        struct wmEventHandler_Keymap *handler,
         void (keymap_tag)(wmKeyMap *keymap, wmKeyMapItem *kmi, void *user_data),
         void *user_data);
 
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 41f11321a02..2cb4e10ecd5 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -2071,11 +2071,15 @@ static int wm_handler_operator_call(
 		if (ot && wm_operator_check_locked_interface(C, ot)) {
 			bool use_last_properties = true;
 			PointerRNA tool_properties = {{0}};
-			const bool is_tool = (handler_base->keymap_tool != NULL);
+
+			bToolRef *keymap_tool = (
+			        (handler_base->type == WM_HANDLER_TYPE_KEYMAP) ?
+			        ((wmEventHandler_Keymap *)handler_base)->keymap_tool : NULL);
+			const bool is_tool = (keymap_tool != NULL);
 			const bool use_tool_properties = is_tool;
 
 			if (use_tool_properties) {
-				WM_toolsystem_ref_properties_init_for_keymap(handler_base->keymap_tool, &tool_properties, properties, ot);
+				WM_toolsystem_ref_properties_init_for_keymap(keymap_tool, &tool_properties, properties, ot);
 				properties = &tool_properties;
 				use_last_properties = false;
 			}
@@ -2089,7 +2093,7 @@ static int wm_handler_operator_call(
 			/* Link gizmo if 'WM_GIZMOGROUPTYPE_TOOL_INIT' is set. */
 			if (retval & OPERATOR_FINISHED) {
 				if (is_tool) {
-					bToolRef_Runtime *tref_rt = handler_base->keymap_tool->runtime;
+					bToolRef_Runtime *tref_rt = keymap_tool->runtime;
 					if (tref_rt->gizmo_group[0]) {
 						const char *idname = tref_rt->gizmo_group;
 						wmGizmoGroupType *gzgt = WM_gizmogrouptype_find(idname, false);
@@ -2372,8 +2376,9 @@ static int wm_handlers_do_intern(bContext *C, wmEvent *event, ListBase *handlers
 			if (handler->flag & WM_HANDLER_BLOCKING)
 				action |= WM_HANDLER_BREAK;
 
-			if (handler->keymap) {
-				wmKeyMap *keymap = WM_keymap_active(wm, handler->keymap);
+			if (handler->type == WM_HANDLER_TYPE_KEYMAP) {
+				wmEventHandler_Keymap *handler_km = (wmEventHandler_Keymap *)handler;
+				wmKeyMap *keymap = WM_keymap_active(wm, handler_km->keymap);
 				wmKeyMapItem *kmi;
 
 				PRINT("%s:   checking '%s' ...", __func__, keymap->idname);
@@ -2384,7 +2389,7 @@ static int wm_handlers_do_intern(bContext *C, wmEvent *event, ListBase *handlers
 
 					for (kmi = keymap->items.first; kmi; kmi = kmi->next) {
 						if (wm_eventmatch(event, kmi)) {
-							struct wmEventHandler_KeymapFn keymap_callback = handler->keymap_callback;
+							struct wmEventHandler_KeymapFn keymap_callback = handler_km->keymap_callback;
 
 							PRINT("%s:     item matched '%s'\n", __func__, kmi->idname);
 
@@ -2553,7 +2558,6 @@ static int wm_handlers_do_intern(bContext *C, wmEvent *event, ListBase *handlers
 							PRINT("pass\n");
 							for (kmi = keymap->items.first; kmi; kmi = kmi->next) {
 								if (wm_eventmatch(event, kmi)) {
-									struct wmEventHandler_KeymapFn keymap_callback = handler->keymap_callback;
 									PRINT("%s:     item matched '%s'\n", __func__, kmi->idname);
 
 									/* weak, but allows interactive callback to not use rawkey */
@@ -2567,10 +2571,6 @@ static int wm_handlers_do_intern(bContext *C, wmEvent *event, ListBase *handlers
 									CTX_wm_gizmo_group_set(C, NULL);
 
 									if (action & WM_HANDLER_BREAK) {
-										if (keymap_callback.handle_post_fn != NULL) {
-											keymap_callback.handle_post_fn(keymap, kmi, keymap_callback.user_data);
-										}
-
 										if (G.debug & (G_DEBUG_EVENTS | G_DEBUG_HANDLERS)) {
 											printf("%s:       handled - and pass on! '%s'\n",
 											       __func__, kmi->idname);
@@ -2902,7 +2902,7 @@ static bool wm_event_pie_filter(wmWindow *win, const wmEvent *event)
 
 #ifdef USE_WORKSPACE_TOOL
 static void wm_event_temp_tool_handler_apply(
-        bContext *C, ScrArea *sa, ARegion *ar, wmEventHandler *sneaky_handler)
+        bContext *C, ScrArea *sa, ARegion *ar, wmEventHandler_Keymap *sneaky_handler)
 {
 	if (ar->regiontype == RGN_TYPE_WINDOW) {
 		bToolRef_Runtime *tref_rt = sa->runtime.tool ? sa->runtime.tool->runtime : NULL;
@@ -2912,6 +2912,7 @@ static void wm_event_temp_tool_handler_apply(
 			/* We shouldn't use keymaps from unrelated spaces. */
 			if (km != NULL) {
 				// printf("Keymap: '%s' -> '%s'\n", tref_rt->keymap, sa->runtime.tool->idname);
+				sneaky_handler->base.type = WM_HANDLER_TYPE_KEYMAP;
 				sneaky_handler->keymap = km;
 				sneaky_handler->keymap_tool = sa->runtime.tool;
 
@@ -2931,7 +2932,7 @@ static void wm_event_temp_tool_handler_apply(
 }
 
 static void wm_event_temp_tool_handler_clear(
-        bContext *UNUSED(C), ScrArea *UNUSED(sa), ARegion *ar, wmEventHandler *sneaky_handler)
+        bContext *UNUSED(C), ScrArea *UNUSED(sa), ARegion *ar, wmEventHandler_Keymap *sneaky_handler)
 {
 	if (sneaky_handler->keymap) {
 		BLI_remlink(&ar->handlers, sneaky_handler);
@@ -3122,7 +3123,7 @@ void wm_event_do_handlers(bContext *C)
 									 * We might need to add a more dynamic handler type that uses a callback
 									 * to fetch its current keymap.
 									 */
-									wmEventHandler sneaky_handler = {NULL};
+									wmEventHandler_Keymap sneaky_handler = {NULL};
 									wm_event_temp_tool_handler_apply(C, sa, ar, &sneaky_handler);
 #endif /* USE_WORKSPACE_TOOL */
 
@@ -3369,21 +3370,25 @@ void WM_event_modal_handler_region_replace(wmWindow *win, const ARegion *old_reg
 	}
 }
 
-wmEventHandler *WM_event_add_keymap_handler(ListBase *handlers, wmKeyMap *keymap)
+wmEventHandler_Keymap *WM_event_add_keymap_handler(ListBase *handlers, wmKeyMap *keymap)
 {
-	wmEventHandler *handler;
-
 	if (!keymap) {
 		CLOG_WARN(WM_LOG_HANDLERS, "called with NULL keymap");
 		return NULL;
 	}
 
 	/* only allow same keymap once */
-	for (handler = handlers->first; handler; handler = handler->next)
-		if (handler->keymap == keymap)
-			return handler;
+	for (wmEventHandler *handler_base = handlers->first; handler_base; handler_base = handler_base->next) {
+		if (handler_base->type == WM_HANDLER_TYPE_KEYMAP) {
+			wmEventHandler_Keymap *handler = (wmEventHandler_Keymap *)handler_base;
+			if (handler->keymap == keymap) {
+				return handler;
+			}
+		}
+	}
 
-	handler = MEM_callocN(sizeof(wmEventHandler), "event keymap handler");
+	wmEventHandler_Keymap *handler = MEM_callocN(sizeof(*handler), __func__);
+	handler->base.type = WM_HANDLER_TYPE_KEYMAP;
 	BLI_addtail(handlers, handler);
 	handler->keymap = keymap;
 
@@ -3391,45 +3396,46 @@ wmEventHandler *WM_event_add_keymap_handler(ListBase *handlers, wmKeyMap *keymap
 }
 
 /* priorities not implemented yet, for time being just insert in begin of list */
-wmEventHandler *WM_event_add_keymap_handler_priority(ListBase *handlers, wmKeyMap *keymap, int UNUSED(priority))
+wmEventHandler_Keymap *WM_event_add_keymap_handler_priority(ListBase *handlers, wmKeyMap *keymap, int UNUSED(priority))
 {
-	wmEventHandler *handler;
-
 	WM_event_remove_keymap_handler(handlers, keymap);
 
-	handler = MEM_callocN(sizeof(wmEventHandler), "event keymap handler");
+	wmEventHandler_Keymap *handler = MEM_callocN(sizeof(*handler), "event keymap handler");
+	handler->base.type = WM_HANDLER_TYPE_KEYMAP;
+
 	BLI_addhead(handlers, handler);
 	handler->keymap = keymap;
 
 	return handler;
 }
 
-wmEventHandler *WM_event_add_keymap_handler_bb(ListBase *handlers, wmKeyMap *keymap, const rcti *bblocal, const rcti *bbwin)
+wmEventHandler_Keymap *WM_event_add_keymap_handler_bb(ListBase *handlers, wmKeyMap *keymap, const rcti *bblocal, const rcti *bbwin)
 {
-	wmEventHandler *handler = WM_event_add_keymap_handler(handlers, keymap);
+	wmEventHandler_Keymap *handler = WM_event_add_keymap_handler(handlers, keymap);
 
 	if (handler) {
-		handler->bblocal = bblocal;
-		handler->bbwin = bbwin;
+		handler->base.bblocal = bblocal;
+		handler->base.bbwin = bbwin;
 	}
 	return handler;
 }
 
 void WM_event_remove_keymap_handler(ListBase *handlers, wmKeyMap *keymap)
 {
-	wmEventHandler *handler;
-
-	for (handler = handlers

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list