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; /* WM_HANDLER_DEFAULT, ... */
49 int flag; /* WM_HANDLER_BLOCKING, ... */
52 wmKeyMap *keymap; /* pointer to builtin/custom keymaps */
53 const rcti *bblocal, *bbwin; /* optional local and windowspace bb */
55 /* modal operator handler */
56 wmOperator *op; /* for derived/modal handlers */
57 struct ScrArea *op_area; /* for derived/modal handlers */
58 struct ARegion *op_region; /* for derived/modal handlers */
61 wmUIHandlerFunc ui_handle; /* callback receiving events */
62 wmUIHandlerRemoveFunc ui_remove; /* callback when handler is removed */
63 void *ui_userdata; /* user data pointer */
64 struct ScrArea *ui_area; /* for derived/modal handlers */
65 struct ARegion *ui_region; /* for derived/modal handlers */
66 struct ARegion *ui_menu; /* for derived/modal handlers */
68 /* fileselect handler re-uses modal operator data */
69 struct bScreen *filescreen; /* screen it started in, to validate exec */
71 /* drop box handler */
76 /* custom types for handlers, for signalling, freeing */
84 WM_HANDLER_BLOCKING = (1 << 0), /* after this handler all others are ignored */
85 WM_HANDLER_DO_FREE = (1 << 1), /* handler tagged to be freed in wm_handlers_do() */
86 WM_HANDLER_ACCEPT_DBL_CLICK = (1 << 2), /* handler accepts double key press events */
89 /* wm_event_system.c */
90 void wm_event_free_all (wmWindow *win);
91 void wm_event_free (wmEvent *event);
92 void wm_event_free_handler (wmEventHandler *handler);
94 /* goes over entire hierarchy: events -> window -> screen -> area -> region */
95 void wm_event_do_handlers (bContext *C);
97 void wm_event_add_ghostevent (wmWindowManager *wm, wmWindow *win, int type, int time, void *customdata);
99 void wm_event_do_notifiers (bContext *C);
104 void wm_dropbox_free(void);
105 void wm_drags_check_ops(bContext *C, wmEvent *event);
106 void wm_drags_draw(bContext *C, wmWindow *win, rcti *rect);
108 #endif /* __WM_EVENT_SYSTEM_H__ */