diff options
author | Campbell Barton <ideasman42@gmail.com> | 2015-06-01 09:40:43 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2015-06-01 09:40:43 +0300 |
commit | bfa7586ba33bd090af13b8671326cdffd4c7592b (patch) | |
tree | 9c0827f23da9c44851170b2423a2747339f028b4 /source/blender/windowmanager | |
parent | 565faadd8ef6bb44d04ac3ff4e8438d21da3383e (diff) |
Fix T44747: Drag toggle /w nodes (glitch)
It was possible to perform actions while performing a drag-toggle.
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r-- | source/blender/windowmanager/WM_api.h | 11 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 7 | ||||
-rw-r--r-- | source/blender/windowmanager/wm_event_system.h | 11 |
3 files changed, 15 insertions, 14 deletions
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 5491769fac2..bb37499ffec 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -151,7 +151,7 @@ typedef void (*wmUIHandlerRemoveFunc)(struct bContext *C, void *userdata); struct wmEventHandler *WM_event_add_ui_handler( const struct bContext *C, ListBase *handlers, wmUIHandlerFunc ui_handle, wmUIHandlerRemoveFunc ui_remove, - void *userdata, const bool accept_dbl_click); + void *userdata, const char flag); void WM_event_remove_ui_handler( ListBase *handlers, wmUIHandlerFunc ui_handle, wmUIHandlerRemoveFunc ui_remove, @@ -165,6 +165,15 @@ void WM_event_free_ui_handler_all( struct wmEventHandler *WM_event_add_modal_handler(struct bContext *C, struct wmOperator *op); void WM_event_remove_handlers(struct bContext *C, ListBase *handlers); +/* handler flag */ +enum { + WM_HANDLER_BLOCKING = (1 << 0), /* after this handler all others are ignored */ + WM_HANDLER_ACCEPT_DBL_CLICK = (1 << 1), /* handler accepts double key press events */ + + /* internal */ + WM_HANDLER_DO_FREE = (1 << 7), /* handler tagged to be freed in wm_handlers_do() */ +}; + struct wmEventHandler *WM_event_add_dropbox_handler(ListBase *handlers, ListBase *dropboxes); /* mouse */ diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 9505b060af7..b05c0818b31 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -2677,7 +2677,7 @@ void WM_event_remove_keymap_handler(ListBase *handlers, wmKeyMap *keymap) wmEventHandler *WM_event_add_ui_handler( const bContext *C, ListBase *handlers, wmUIHandlerFunc ui_handle, wmUIHandlerRemoveFunc ui_remove, - void *userdata, const bool accept_dbl_click) + void *userdata, const char flag) { wmEventHandler *handler = MEM_callocN(sizeof(wmEventHandler), "event ui handler"); handler->ui_handle = ui_handle; @@ -2694,9 +2694,8 @@ wmEventHandler *WM_event_add_ui_handler( handler->ui_menu = NULL; } - if (accept_dbl_click) { - handler->flag |= WM_HANDLER_ACCEPT_DBL_CLICK; - } + BLI_assert((flag & WM_HANDLER_DO_FREE) == 0); + handler->flag = flag; BLI_addhead(handlers, handler); diff --git a/source/blender/windowmanager/wm_event_system.h b/source/blender/windowmanager/wm_event_system.h index a097343d037..efc01b1f8a8 100644 --- a/source/blender/windowmanager/wm_event_system.h +++ b/source/blender/windowmanager/wm_event_system.h @@ -45,8 +45,8 @@ struct ARegion; typedef struct wmEventHandler { struct wmEventHandler *next, *prev; - int type; /* WM_HANDLER_DEFAULT, ... */ - int flag; /* WM_HANDLER_BLOCKING, ... */ + char type; /* WM_HANDLER_DEFAULT, ... */ + char flag; /* WM_HANDLER_BLOCKING, ... */ /* keymap handler */ wmKeyMap *keymap; /* pointer to builtin/custom keymaps */ @@ -77,13 +77,6 @@ enum { WM_HANDLER_FILESELECT }; -/* handler flag */ -enum { - WM_HANDLER_BLOCKING = (1 << 0), /* after this handler all others are ignored */ - WM_HANDLER_DO_FREE = (1 << 1), /* handler tagged to be freed in wm_handlers_do() */ - WM_HANDLER_ACCEPT_DBL_CLICK = (1 << 2), /* handler accepts double key press events */ -}; - /* wm_event_system.c */ void wm_event_free_all (wmWindow *win); void wm_event_free (wmEvent *event); |