Cleanup: remove redundant doxygen \file argument
[blender.git] / source / blender / blenlib / intern / callbacks.c
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  */
16
17 /** \file \ingroup bli
18  */
19
20 #include "BLI_utildefines.h"
21 #include "BLI_listbase.h"
22 #include "BLI_callbacks.h"
23
24 #include "MEM_guardedalloc.h"
25
26 static ListBase callback_slots[BLI_CB_EVT_TOT] = {{NULL}};
27
28 void BLI_callback_exec(struct Main *bmain, struct ID *self, eCbEvent evt)
29 {
30         ListBase *lb = &callback_slots[evt];
31         bCallbackFuncStore *funcstore;
32
33         for (funcstore = lb->first; funcstore; funcstore = funcstore->next) {
34                 funcstore->func(bmain, self, funcstore->arg);
35         }
36 }
37
38 void BLI_callback_add(bCallbackFuncStore *funcstore, eCbEvent evt)
39 {
40         ListBase *lb = &callback_slots[evt];
41         BLI_addtail(lb, funcstore);
42 }
43
44 void BLI_callback_global_init(void)
45 {
46         /* do nothing */
47 }
48
49 /* call on application exit */
50 void BLI_callback_global_finalize(void)
51 {
52         eCbEvent evt;
53         for (evt = 0; evt < BLI_CB_EVT_TOT; evt++) {
54                 ListBase *lb = &callback_slots[evt];
55                 bCallbackFuncStore *funcstore;
56                 bCallbackFuncStore *funcstore_next;
57                 for (funcstore = lb->first; funcstore; funcstore = funcstore_next) {
58                         funcstore_next = funcstore->next;
59                         BLI_remlink(lb, funcstore);
60                         if (funcstore->alloc) {
61                                 MEM_freeN(funcstore);
62                         }
63                 }
64         }
65 }