2 * ***** BEGIN GPL LICENSE BLOCK *****
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software Foundation,
16 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 * The Original Code is Copyright (C) 2007 Blender Foundation.
19 * All rights reserved.
22 * Contributor(s): Blender Foundation
24 * ***** END GPL LICENSE BLOCK *****
27 /** \file blender/windowmanager/wm_event_system.h
31 #ifndef __WM_EVENT_SYSTEM_H__
32 #define __WM_EVENT_SYSTEM_H__
34 /* return value of handler-operator call */
35 #define WM_HANDLER_CONTINUE 0
36 #define WM_HANDLER_BREAK 1
37 #define WM_HANDLER_HANDLED 2
38 #define WM_HANDLER_MODAL 4 /* MODAL|BREAK means unhandled */
43 /* wmKeyMap is in DNA_windowmanager.h, it's savable */
45 typedef struct wmEventHandler {
46 struct wmEventHandler *next, *prev;
48 int type, flag; /* type default=0, rest is custom */
51 wmKeyMap *keymap; /* pointer to builtin/custom keymaps */
52 rcti *bblocal, *bbwin; /* optional local and windowspace bb */
54 /* modal operator handler */
55 wmOperator *op; /* for derived/modal handlers */
56 struct ScrArea *op_area; /* for derived/modal handlers */
57 struct ARegion *op_region; /* for derived/modal handlers */
60 wmUIHandlerFunc ui_handle; /* callback receiving events */
61 wmUIHandlerRemoveFunc ui_remove; /* callback when handler is removed */
62 void *ui_userdata; /* user data pointer */
63 struct ScrArea *ui_area; /* for derived/modal handlers */
64 struct ARegion *ui_region; /* for derived/modal handlers */
65 struct ARegion *ui_menu; /* for derived/modal handlers */
67 /* fileselect handler re-uses modal operator data */
68 struct bScreen *filescreen; /* screen it started in, to validate exec */
70 /* drop box handler */
77 /* after this handler all others are ignored */
78 #define WM_HANDLER_BLOCKING 1
79 /* handler tagged to be freed in wm_handlers_do() */
80 #define WM_HANDLER_DO_FREE 2
84 /* custom types for handlers, for signalling, freeing */
91 /* wm_event_system.c */
92 void wm_event_free_all (wmWindow *win);
93 void wm_event_free (wmEvent *event);
94 void wm_event_free_handler (wmEventHandler *handler);
96 /* goes over entire hierarchy: events -> window -> screen -> area -> region */
97 void wm_event_do_handlers (bContext *C);
99 void wm_event_add_ghostevent (wmWindowManager *wm, wmWindow *win, int type, int time, void *customdata);
101 void wm_event_do_notifiers (bContext *C);
106 void wm_dropbox_free(void);
107 void wm_drags_check_ops(bContext *C, wmEvent *event);
108 void wm_drags_draw(bContext *C, wmWindow *win, rcti *rect);
110 #endif /* __WM_EVENT_SYSTEM_H__ */