WM: move UI handler to it's own type
This commit is contained in:
@@ -10022,22 +10022,26 @@ void UI_popup_handlers_add(bContext *C, ListBase *handlers, uiPopupBlockHandle *
|
|||||||
|
|
||||||
void UI_popup_handlers_remove(ListBase *handlers, uiPopupBlockHandle *popup)
|
void UI_popup_handlers_remove(ListBase *handlers, uiPopupBlockHandle *popup)
|
||||||
{
|
{
|
||||||
wmEventHandler *handler;
|
LISTBASE_FOREACH (wmEventHandler *, handler_base, handlers) {
|
||||||
|
if (handler_base->type == WM_HANDLER_TYPE_UI) {
|
||||||
|
wmEventHandler_UI *handler = (wmEventHandler_UI *)handler_base;
|
||||||
|
|
||||||
for (handler = handlers->first; handler; handler = handler->next) {
|
if (handler->handle_fn == ui_popup_handler &&
|
||||||
if (handler->ui_handle == ui_popup_handler &&
|
handler->remove_fn == ui_popup_handler_remove &&
|
||||||
handler->ui_remove == ui_popup_handler_remove &&
|
handler->user_data == popup)
|
||||||
handler->ui_userdata == popup)
|
|
||||||
{
|
|
||||||
/* tag refresh parent popup */
|
|
||||||
if (handler->next &&
|
|
||||||
handler->next->ui_handle == ui_popup_handler &&
|
|
||||||
handler->next->ui_remove == ui_popup_handler_remove)
|
|
||||||
{
|
{
|
||||||
uiPopupBlockHandle *parent_popup = handler->next->ui_userdata;
|
/* tag refresh parent popup */
|
||||||
ED_region_tag_refresh_ui(parent_popup->region);
|
wmEventHandler_UI *handler_next = (wmEventHandler_UI *)handler->base.next;
|
||||||
|
if (handler_next &&
|
||||||
|
handler_next->base.type == WM_HANDLER_TYPE_UI &&
|
||||||
|
handler_next->handle_fn == ui_popup_handler &&
|
||||||
|
handler_next->remove_fn == ui_popup_handler_remove)
|
||||||
|
{
|
||||||
|
uiPopupBlockHandle *parent_popup = handler_next->user_data;
|
||||||
|
ED_region_tag_refresh_ui(parent_popup->region);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -543,7 +543,7 @@ static int wm_event_always_pass(const wmEvent *event)
|
|||||||
|
|
||||||
/* ********************* ui handler ******************* */
|
/* ********************* ui handler ******************* */
|
||||||
|
|
||||||
static int wm_handler_ui_call(bContext *C, wmEventHandler *handler, const wmEvent *event, int always_pass)
|
static int wm_handler_ui_call(bContext *C, wmEventHandler_UI *handler, const wmEvent *event, int always_pass)
|
||||||
{
|
{
|
||||||
ScrArea *area = CTX_wm_area(C);
|
ScrArea *area = CTX_wm_area(C);
|
||||||
ARegion *region = CTX_wm_region(C);
|
ARegion *region = CTX_wm_region(C);
|
||||||
@@ -554,7 +554,7 @@ static int wm_handler_ui_call(bContext *C, wmEventHandler *handler, const wmEven
|
|||||||
|
|
||||||
/* UI code doesn't handle return values - it just always returns break.
|
/* UI code doesn't handle return values - it just always returns break.
|
||||||
* to make the DBL_CLICK conversion work, we just don't send this to UI, except mouse clicks */
|
* to make the DBL_CLICK conversion work, we just don't send this to UI, except mouse clicks */
|
||||||
if (((handler->flag & WM_HANDLER_ACCEPT_DBL_CLICK) == 0) &&
|
if (((handler->base.flag & WM_HANDLER_ACCEPT_DBL_CLICK) == 0) &&
|
||||||
!ISMOUSE_BUTTON(event->type) &&
|
!ISMOUSE_BUTTON(event->type) &&
|
||||||
(event->val == KM_DBL_CLICK))
|
(event->val == KM_DBL_CLICK))
|
||||||
{
|
{
|
||||||
@@ -571,11 +571,17 @@ static int wm_handler_ui_call(bContext *C, wmEventHandler *handler, const wmEven
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* we set context to where ui handler came from */
|
/* we set context to where ui handler came from */
|
||||||
if (handler->ui_area) CTX_wm_area_set(C, handler->ui_area);
|
if (handler->context.area) {
|
||||||
if (handler->ui_region) CTX_wm_region_set(C, handler->ui_region);
|
CTX_wm_area_set(C, handler->context.area);
|
||||||
if (handler->ui_menu) CTX_wm_menu_set(C, handler->ui_menu);
|
}
|
||||||
|
if (handler->context.region) {
|
||||||
|
CTX_wm_region_set(C, handler->context.region);
|
||||||
|
}
|
||||||
|
if (handler->context.menu) {
|
||||||
|
CTX_wm_menu_set(C, handler->context.menu);
|
||||||
|
}
|
||||||
|
|
||||||
retval = handler->ui_handle(C, event, handler->ui_userdata);
|
retval = handler->handle_fn(C, event, handler->user_data);
|
||||||
|
|
||||||
/* putting back screen context */
|
/* putting back screen context */
|
||||||
if ((retval != WM_UI_HANDLER_BREAK) || always_pass) {
|
if ((retval != WM_UI_HANDLER_BREAK) || always_pass) {
|
||||||
@@ -604,20 +610,22 @@ static void wm_handler_ui_cancel(bContext *C)
|
|||||||
{
|
{
|
||||||
wmWindow *win = CTX_wm_window(C);
|
wmWindow *win = CTX_wm_window(C);
|
||||||
ARegion *ar = CTX_wm_region(C);
|
ARegion *ar = CTX_wm_region(C);
|
||||||
wmEventHandler *handler, *nexthandler;
|
|
||||||
|
|
||||||
if (!ar)
|
if (!ar)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (handler = ar->handlers.first; handler; handler = nexthandler) {
|
for (wmEventHandler *handler_base = ar->handlers.first, *handler_base_next;
|
||||||
nexthandler = handler->next;
|
handler_base;
|
||||||
|
handler_base = handler_base_next)
|
||||||
if (handler->ui_handle) {
|
{
|
||||||
|
handler_base_next = handler_base->next;
|
||||||
|
if (handler_base->type == WM_HANDLER_TYPE_UI) {
|
||||||
|
wmEventHandler_UI *handler = (wmEventHandler_UI *)handler_base;
|
||||||
|
BLI_assert(handler->handle_fn != NULL);
|
||||||
wmEvent event;
|
wmEvent event;
|
||||||
|
|
||||||
wm_event_init_from_window(win, &event);
|
wm_event_init_from_window(win, &event);
|
||||||
event.type = EVT_BUT_CANCEL;
|
event.type = EVT_BUT_CANCEL;
|
||||||
handler->ui_handle(C, &event, handler->ui_userdata);
|
handler->handle_fn(C, &event, handler->user_data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1732,25 +1740,25 @@ static void wm_handler_op_context(bContext *C, wmEventHandler *handler, const wm
|
|||||||
/* called on exit or remove area, only here call cancel callback */
|
/* called on exit or remove area, only here call cancel callback */
|
||||||
void WM_event_remove_handlers(bContext *C, ListBase *handlers)
|
void WM_event_remove_handlers(bContext *C, ListBase *handlers)
|
||||||
{
|
{
|
||||||
wmEventHandler *handler;
|
wmEventHandler *handler_base;
|
||||||
wmWindowManager *wm = CTX_wm_manager(C);
|
wmWindowManager *wm = CTX_wm_manager(C);
|
||||||
|
|
||||||
/* C is zero on freeing database, modal handlers then already were freed */
|
/* C is zero on freeing database, modal handlers then already were freed */
|
||||||
while ((handler = BLI_pophead(handlers))) {
|
while ((handler_base = BLI_pophead(handlers))) {
|
||||||
if (handler->op) {
|
if (handler_base->op) {
|
||||||
wmWindow *win = CTX_wm_window(C);
|
wmWindow *win = CTX_wm_window(C);
|
||||||
if (handler->op->type->cancel) {
|
if (handler_base->op->type->cancel) {
|
||||||
ScrArea *area = CTX_wm_area(C);
|
ScrArea *area = CTX_wm_area(C);
|
||||||
ARegion *region = CTX_wm_region(C);
|
ARegion *region = CTX_wm_region(C);
|
||||||
|
|
||||||
wm_handler_op_context(C, handler, win->eventstate);
|
wm_handler_op_context(C, handler_base, win->eventstate);
|
||||||
|
|
||||||
if (handler->op->type->flag & OPTYPE_UNDO)
|
if (handler_base->op->type->flag & OPTYPE_UNDO)
|
||||||
wm->op_undo_depth++;
|
wm->op_undo_depth++;
|
||||||
|
|
||||||
handler->op->type->cancel(C, handler->op);
|
handler_base->op->type->cancel(C, handler_base->op);
|
||||||
|
|
||||||
if (handler->op->type->flag & OPTYPE_UNDO)
|
if (handler_base->op->type->flag & OPTYPE_UNDO)
|
||||||
wm->op_undo_depth--;
|
wm->op_undo_depth--;
|
||||||
|
|
||||||
CTX_wm_area_set(C, area);
|
CTX_wm_area_set(C, area);
|
||||||
@@ -1758,25 +1766,35 @@ void WM_event_remove_handlers(bContext *C, ListBase *handlers)
|
|||||||
}
|
}
|
||||||
|
|
||||||
WM_cursor_grab_disable(win, NULL);
|
WM_cursor_grab_disable(win, NULL);
|
||||||
WM_operator_free(handler->op);
|
WM_operator_free(handler_base->op);
|
||||||
}
|
}
|
||||||
else if (handler->ui_remove) {
|
else if (handler_base->type == WM_HANDLER_TYPE_UI) {
|
||||||
ScrArea *area = CTX_wm_area(C);
|
wmEventHandler_UI *handler = (wmEventHandler_UI *)handler_base;
|
||||||
ARegion *region = CTX_wm_region(C);
|
|
||||||
ARegion *menu = CTX_wm_menu(C);
|
|
||||||
|
|
||||||
if (handler->ui_area) CTX_wm_area_set(C, handler->ui_area);
|
if (handler->remove_fn) {
|
||||||
if (handler->ui_region) CTX_wm_region_set(C, handler->ui_region);
|
ScrArea *area = CTX_wm_area(C);
|
||||||
if (handler->ui_menu) CTX_wm_menu_set(C, handler->ui_menu);
|
ARegion *region = CTX_wm_region(C);
|
||||||
|
ARegion *menu = CTX_wm_menu(C);
|
||||||
|
|
||||||
handler->ui_remove(C, handler->ui_userdata);
|
if (handler->context.area) {
|
||||||
|
CTX_wm_area_set(C, handler->context.area);
|
||||||
|
}
|
||||||
|
if (handler->context.region) {
|
||||||
|
CTX_wm_region_set(C, handler->context.region);
|
||||||
|
}
|
||||||
|
if (handler->context.menu) {
|
||||||
|
CTX_wm_menu_set(C, handler->context.menu);
|
||||||
|
}
|
||||||
|
|
||||||
CTX_wm_area_set(C, area);
|
handler->remove_fn(C, handler->user_data);
|
||||||
CTX_wm_region_set(C, region);
|
|
||||||
CTX_wm_menu_set(C, menu);
|
CTX_wm_area_set(C, area);
|
||||||
|
CTX_wm_region_set(C, region);
|
||||||
|
CTX_wm_menu_set(C, menu);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wm_event_free_handler(handler);
|
wm_event_free_handler(handler_base);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2388,9 +2406,11 @@ static int wm_handlers_do_intern(bContext *C, wmEvent *event, ListBase *handlers
|
|||||||
PRINT("fail\n");
|
PRINT("fail\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (handler->ui_handle) {
|
else if (handler->type == WM_HANDLER_TYPE_UI) {
|
||||||
|
wmEventHandler_UI *handler_ui = (wmEventHandler_UI *)handler;
|
||||||
|
BLI_assert(handler_ui->handle_fn != NULL);
|
||||||
if (!wm->is_interface_locked) {
|
if (!wm->is_interface_locked) {
|
||||||
action |= wm_handler_ui_call(C, handler, event, always_pass);
|
action |= wm_handler_ui_call(C, handler_ui, event, always_pass);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (handler->op_is_fileselect) {
|
else if (handler->op_is_fileselect) {
|
||||||
@@ -3399,72 +3419,80 @@ void WM_event_set_keymap_handler_callback(
|
|||||||
|
|
||||||
wmEventHandler *WM_event_add_ui_handler(
|
wmEventHandler *WM_event_add_ui_handler(
|
||||||
const bContext *C, ListBase *handlers,
|
const bContext *C, ListBase *handlers,
|
||||||
wmUIHandlerFunc ui_handle, wmUIHandlerRemoveFunc ui_remove,
|
wmUIHandlerFunc handle_fn, wmUIHandlerRemoveFunc remove_fn,
|
||||||
void *userdata, const char flag)
|
void *user_data, const char flag)
|
||||||
{
|
{
|
||||||
wmEventHandler *handler = MEM_callocN(sizeof(wmEventHandler), "event ui handler");
|
wmEventHandler_UI *handler = MEM_callocN(sizeof(*handler), __func__);
|
||||||
handler->ui_handle = ui_handle;
|
handler->base.type = WM_HANDLER_TYPE_UI;
|
||||||
handler->ui_remove = ui_remove;
|
handler->handle_fn = handle_fn;
|
||||||
handler->ui_userdata = userdata;
|
handler->remove_fn = remove_fn;
|
||||||
|
handler->user_data = user_data;
|
||||||
if (C) {
|
if (C) {
|
||||||
handler->ui_area = CTX_wm_area(C);
|
handler->context.area = CTX_wm_area(C);
|
||||||
handler->ui_region = CTX_wm_region(C);
|
handler->context.region = CTX_wm_region(C);
|
||||||
handler->ui_menu = CTX_wm_menu(C);
|
handler->context.menu = CTX_wm_menu(C);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
handler->ui_area = NULL;
|
handler->context.area = NULL;
|
||||||
handler->ui_region = NULL;
|
handler->context.region = NULL;
|
||||||
handler->ui_menu = NULL;
|
handler->context.menu = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
BLI_assert((flag & WM_HANDLER_DO_FREE) == 0);
|
BLI_assert((flag & WM_HANDLER_DO_FREE) == 0);
|
||||||
handler->flag = flag;
|
handler->base.flag = flag;
|
||||||
|
|
||||||
BLI_addhead(handlers, handler);
|
BLI_addhead(handlers, handler);
|
||||||
|
|
||||||
return handler;
|
return &handler->base;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* set "postpone" for win->modalhandlers, this is in a running for () loop in wm_handlers_do() */
|
/* set "postpone" for win->modalhandlers, this is in a running for () loop in wm_handlers_do() */
|
||||||
void WM_event_remove_ui_handler(
|
void WM_event_remove_ui_handler(
|
||||||
ListBase *handlers,
|
ListBase *handlers,
|
||||||
wmUIHandlerFunc ui_handle, wmUIHandlerRemoveFunc ui_remove,
|
wmUIHandlerFunc handle_fn, wmUIHandlerRemoveFunc remove_fn,
|
||||||
void *userdata, const bool postpone)
|
void *user_data, const bool postpone)
|
||||||
{
|
{
|
||||||
wmEventHandler *handler;
|
wmEventHandler *handler_base;
|
||||||
|
|
||||||
for (handler = handlers->first; handler; handler = handler->next) {
|
for (handler_base = handlers->first; handler_base; handler_base = handler_base->next) {
|
||||||
if ((handler->ui_handle == ui_handle) &&
|
if (handler_base->type == WM_HANDLER_TYPE_UI) {
|
||||||
(handler->ui_remove == ui_remove) &&
|
wmEventHandler_UI *handler = (wmEventHandler_UI *)handler_base;
|
||||||
(handler->ui_userdata == userdata))
|
if ((handler->handle_fn == handle_fn) &&
|
||||||
{
|
(handler->remove_fn == remove_fn) &&
|
||||||
/* handlers will be freed in wm_handlers_do() */
|
(handler->user_data == user_data))
|
||||||
if (postpone) {
|
{
|
||||||
handler->flag |= WM_HANDLER_DO_FREE;
|
/* handlers will be freed in wm_handlers_do() */
|
||||||
|
if (postpone) {
|
||||||
|
handler->base.flag |= WM_HANDLER_DO_FREE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
BLI_remlink(handlers, handler);
|
||||||
|
wm_event_free_handler(&handler->base);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
BLI_remlink(handlers, handler);
|
|
||||||
wm_event_free_handler(handler);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void WM_event_free_ui_handler_all(
|
void WM_event_free_ui_handler_all(
|
||||||
bContext *C, ListBase *handlers,
|
bContext *C, ListBase *handlers,
|
||||||
wmUIHandlerFunc ui_handle, wmUIHandlerRemoveFunc ui_remove)
|
wmUIHandlerFunc handle_fn, wmUIHandlerRemoveFunc remove_fn)
|
||||||
{
|
{
|
||||||
wmEventHandler *handler, *handler_next;
|
for (wmEventHandler *handler_base = handlers->first, *handler_base_next;
|
||||||
|
handler_base;
|
||||||
for (handler = handlers->first; handler; handler = handler_next) {
|
handler_base = handler_base_next)
|
||||||
handler_next = handler->next;
|
{
|
||||||
if ((handler->ui_handle == ui_handle) &&
|
handler_base_next = handler_base->next;
|
||||||
(handler->ui_remove == ui_remove))
|
if (handler_base->type == WM_HANDLER_TYPE_UI) {
|
||||||
{
|
wmEventHandler_UI *handler = (wmEventHandler_UI *)handler_base;
|
||||||
ui_remove(C, handler->ui_userdata);
|
if ((handler->handle_fn == handle_fn) &&
|
||||||
BLI_remlink(handlers, handler);
|
(handler->remove_fn == remove_fn))
|
||||||
wm_event_free_handler(handler);
|
{
|
||||||
|
remove_fn(C, handler->user_data);
|
||||||
|
BLI_remlink(handlers, handler);
|
||||||
|
wm_event_free_handler(&handler->base);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3490,14 +3518,17 @@ wmEventHandler *WM_event_add_dropbox_handler(ListBase *handlers, ListBase *dropb
|
|||||||
/* XXX solution works, still better check the real cause (ton) */
|
/* XXX solution works, still better check the real cause (ton) */
|
||||||
void WM_event_remove_area_handler(ListBase *handlers, void *area)
|
void WM_event_remove_area_handler(ListBase *handlers, void *area)
|
||||||
{
|
{
|
||||||
wmEventHandler *handler, *nexthandler;
|
|
||||||
|
|
||||||
for (handler = handlers->first; handler; handler = nexthandler) {
|
for (wmEventHandler *handler_base = handlers->first, *handler_base_next;
|
||||||
nexthandler = handler->next;
|
handler_base;
|
||||||
if (handler->op_is_fileselect == false) {
|
handler_base = handler_base_next)
|
||||||
if (handler->ui_area == area) {
|
{
|
||||||
|
handler_base_next = handler_base->next;
|
||||||
|
if (handler_base->type == WM_HANDLER_TYPE_UI) {
|
||||||
|
wmEventHandler_UI *handler = (wmEventHandler_UI *)handler_base;
|
||||||
|
if (handler->context.area == area) {
|
||||||
BLI_remlink(handlers, handler);
|
BLI_remlink(handlers, handler);
|
||||||
wm_event_free_handler(handler);
|
wm_event_free_handler(handler_base);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3843,9 +3874,11 @@ static wmWindow *wm_event_cursor_other_windows(wmWindowManager *wm, wmWindow *wi
|
|||||||
|
|
||||||
/* let's skip windows having modal handlers now */
|
/* let's skip windows having modal handlers now */
|
||||||
/* potential XXX ugly... I wouldn't have added a modalhandlers list (introduced in rev 23331, ton) */
|
/* potential XXX ugly... I wouldn't have added a modalhandlers list (introduced in rev 23331, ton) */
|
||||||
for (handler = win->modalhandlers.first; handler; handler = handler->next)
|
for (handler = win->modalhandlers.first; handler; handler = handler->next) {
|
||||||
if (handler->ui_handle || handler->op)
|
if ((handler->type == WM_HANDLER_TYPE_UI) || handler->op) {
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* to desktop space */
|
/* to desktop space */
|
||||||
mx += (int) (U.pixelsize * win->posx);
|
mx += (int) (U.pixelsize * win->posx);
|
||||||
|
@@ -44,6 +44,7 @@ struct wmEventHandler_KeymapFn {
|
|||||||
enum eWM_EventHandlerType {
|
enum eWM_EventHandlerType {
|
||||||
WM_HANDLER_TYPE_DEFAULT,
|
WM_HANDLER_TYPE_DEFAULT,
|
||||||
WM_HANDLER_TYPE_GIZMO,
|
WM_HANDLER_TYPE_GIZMO,
|
||||||
|
WM_HANDLER_TYPE_UI,
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct wmEventHandler {
|
typedef struct wmEventHandler {
|
||||||
@@ -67,13 +68,6 @@ typedef struct wmEventHandler {
|
|||||||
struct ARegion *op_region; /* for derived/modal handlers */
|
struct ARegion *op_region; /* for derived/modal handlers */
|
||||||
short op_region_type; /* for derived/modal handlers */
|
short op_region_type; /* for derived/modal handlers */
|
||||||
|
|
||||||
/* ui handler */
|
|
||||||
wmUIHandlerFunc ui_handle; /* callback receiving events */
|
|
||||||
wmUIHandlerRemoveFunc ui_remove; /* callback when handler is removed */
|
|
||||||
void *ui_userdata; /* user data pointer */
|
|
||||||
struct ScrArea *ui_area; /* for derived/modal handlers */
|
|
||||||
struct ARegion *ui_region; /* for derived/modal handlers */
|
|
||||||
struct ARegion *ui_menu; /* for derived/modal handlers */
|
|
||||||
|
|
||||||
/* drop box handler */
|
/* drop box handler */
|
||||||
ListBase *dropboxes;
|
ListBase *dropboxes;
|
||||||
@@ -87,6 +81,22 @@ typedef struct wmEventHandler_Gizmo {
|
|||||||
struct wmGizmoMap *gizmo_map;
|
struct wmGizmoMap *gizmo_map;
|
||||||
} wmEventHandler_Gizmo;
|
} wmEventHandler_Gizmo;
|
||||||
|
|
||||||
|
/** #WM_HANDLER_TYPE_UI */
|
||||||
|
typedef struct wmEventHandler_UI {
|
||||||
|
wmEventHandler base;
|
||||||
|
|
||||||
|
wmUIHandlerFunc handle_fn; /* callback receiving events */
|
||||||
|
wmUIHandlerRemoveFunc remove_fn; /* callback when handler is removed */
|
||||||
|
void *user_data; /* user data pointer */
|
||||||
|
|
||||||
|
/** Store context for this handler for derived/modal handlers. */
|
||||||
|
struct {
|
||||||
|
struct ScrArea *area;
|
||||||
|
struct ARegion *region;
|
||||||
|
struct ARegion *menu;
|
||||||
|
} context;
|
||||||
|
} wmEventHandler_UI;
|
||||||
|
|
||||||
/* wm_event_system.c */
|
/* wm_event_system.c */
|
||||||
void wm_event_free_all (wmWindow *win);
|
void wm_event_free_all (wmWindow *win);
|
||||||
void wm_event_free (wmEvent *event);
|
void wm_event_free (wmEvent *event);
|
||||||
|
Reference in New Issue
Block a user