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:
authorCampbell Barton <ideasman42@gmail.com>2019-02-19 08:09:14 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-02-19 08:18:23 +0300
commitbb6692be8a90f7d86d620557a893c6bb48bdd236 (patch)
tree7f79d2d0682b6b59a477e2ad370ae4cd023bafd3 /source/blender/windowmanager
parentd718338828c19f6fa1bbaa0530dcc0fbc72e46c4 (diff)
WM: move keymap handler to it's own type
Illuminate dead code, using wmEventHandler_KeymapFn from gizmo handler type where it was never set.
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r--source/blender/windowmanager/WM_api.h16
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c91
-rw-r--r--source/blender/windowmanager/intern/wm_keymap.c22
-rw-r--r--source/blender/windowmanager/wm_event_system.h18
4 files changed, 84 insertions, 63 deletions
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->first; handler; handler = handler->next) {
- if (handler->keymap == keymap) {
- BLI_remlink(handlers, handler);
- wm_event_free_handler(handler);
- break;
+ 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) {
+ BLI_remlink(handlers, handler);
+ wm_event_free_handler(&handler->base);
+ break;
+ }
}
}
}
void WM_event_set_keymap_handler_callback(
- wmEventHandler *handler,
+ wmEventHandler_Keymap *handler,
void (keymap_tag)(wmKeyMap *keymap, wmKeyMapItem *kmi, void *user_data),
void *user_data)
{
@@ -4482,13 +4488,14 @@ static wmKeyMapItem *wm_kmi_from_event(
bContext *C, wmWindowManager *wm,
ListBase *handlers, const wmEvent *event)
{
- for (wmEventHandler *handler = handlers->first; handler; handler = handler->next) {
+ for (wmEventHandler *handler_base = handlers->first; handler_base; handler_base = handler_base->next) {
/* during this loop, ui handlers for nested menus can tag multiple handlers free */
- if (handler->flag & WM_HANDLER_DO_FREE) {
+ if (handler_base->flag & WM_HANDLER_DO_FREE) {
/* pass */
}
- else if (handler_boundbox_test(handler, event)) { /* optional boundbox */
- if (handler->keymap) {
+ else if (handler_boundbox_test(handler_base, event)) { /* optional boundbox */
+ if (handler_base->type == WM_HANDLER_TYPE_KEYMAP) {
+ wmEventHandler_Keymap *handler = (wmEventHandler_Keymap *)handler_base;
wmKeyMap *keymap = WM_keymap_active(wm, handler->keymap);
if (WM_keymap_poll(C, keymap)) {
for (wmKeyMapItem *kmi = keymap->items.first; kmi; kmi = kmi->next) {
@@ -4694,7 +4701,7 @@ void WM_window_cursor_keymap_status_refresh(bContext *C, wmWindow *win)
CTX_wm_region_set(C, ar);
#ifdef USE_WORKSPACE_TOOL
- wmEventHandler sneaky_handler = {NULL};
+ wmEventHandler_Keymap sneaky_handler = {NULL};
wm_event_temp_tool_handler_apply(C, sa, ar, &sneaky_handler);
#endif
diff --git a/source/blender/windowmanager/intern/wm_keymap.c b/source/blender/windowmanager/intern/wm_keymap.c
index 7d01e4d0553..c170f0589c0 100644
--- a/source/blender/windowmanager/intern/wm_keymap.c
+++ b/source/blender/windowmanager/intern/wm_keymap.c
@@ -1226,20 +1226,22 @@ static wmKeyMapItem *wm_keymap_item_find_handlers(
wmKeyMap **r_keymap)
{
wmWindowManager *wm = CTX_wm_manager(C);
- wmEventHandler *handler;
wmKeyMap *keymap;
/* find keymap item in handlers */
- for (handler = handlers->first; handler; handler = handler->next) {
- keymap = WM_keymap_active(wm, handler->keymap);
- if (keymap && WM_keymap_poll((bContext *)C, keymap)) {
- wmKeyMapItem *kmi = wm_keymap_item_find_in_keymap(
- keymap, opname, properties, is_strict, params);
- if (kmi != NULL) {
- if (r_keymap) {
- *r_keymap = keymap;
+ 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;
+ keymap = WM_keymap_active(wm, handler->keymap);
+ if (keymap && WM_keymap_poll((bContext *)C, keymap)) {
+ wmKeyMapItem *kmi = wm_keymap_item_find_in_keymap(
+ keymap, opname, properties, is_strict, params);
+ if (kmi != NULL) {
+ if (r_keymap) {
+ *r_keymap = keymap;
+ }
+ return kmi;
}
- return kmi;
}
}
}
diff --git a/source/blender/windowmanager/wm_event_system.h b/source/blender/windowmanager/wm_event_system.h
index 9448bba9f3b..5508e5359e8 100644
--- a/source/blender/windowmanager/wm_event_system.h
+++ b/source/blender/windowmanager/wm_event_system.h
@@ -47,6 +47,7 @@ enum eWM_EventHandlerType {
WM_HANDLER_TYPE_UI,
WM_HANDLER_TYPE_OP,
WM_HANDLER_TYPE_DROPBOX,
+ WM_HANDLER_TYPE_KEYMAP,
};
typedef struct wmEventHandler {
@@ -55,14 +56,21 @@ typedef struct wmEventHandler {
enum eWM_EventHandlerType type;
char flag; /* WM_HANDLER_BLOCKING, ... */
- /* keymap handler */
- wmKeyMap *keymap; /* pointer to builtin/custom keymaps */
- const rcti *bblocal, *bbwin; /* optional local and windowspace bb */
- /* Run after the keymap item runs. */
+ /** Optional local and windowspace bb. */
+ const rcti *bblocal, *bbwin;
+} wmEventHandler;
+
+/** #WM_HANDLER_TYPE_KEYMAP */
+typedef struct wmEventHandler_Keymap {
+ wmEventHandler base;
+
+ /** Pointer to builtin/custom keymaps (never NULL). */
+ wmKeyMap *keymap;
+ /** Run after the keymap item runs. */
struct wmEventHandler_KeymapFn keymap_callback;
struct bToolRef *keymap_tool;
-} wmEventHandler;
+} wmEventHandler_Keymap;
/** #WM_HANDLER_TYPE_GIZMO */
typedef struct wmEventHandler_Gizmo {