diff options
author | Ton Roosendaal <ton@blender.org> | 2008-12-08 18:02:57 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2008-12-08 18:02:57 +0300 |
commit | 02e23c16dd9e403deb1694829c11d16dc47392ee (patch) | |
tree | f5ec9e3f68bad13137bdeafa326281c74387327e /source/blender/blenkernel/intern/screen.c | |
parent | 11e15bf68979670b2257814aa296886222b3ee40 (diff) |
2.5
Part one of wrapping up area/region management.
Read design doc here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/AreaManager
This commit:
- brings keymap storage to WM, based on names/types. This structure
allows rna-ifying it too, so you can browse keymaps etc.
- creating areas and regions works slightly different now, wich
regiontypes stored in areatype.
Todo:
- better callbacks and structure for defining which handlers need to
be added.
- using region types to validate regions
- proper implementation of local region data
- code method for customizing keymaps. Current idea is that you have
to indicate an entire keymap to be custom, to prevent too complicated
merging problems of default and custom maps (like order, multiple keys
for same operator, disabling options, etc).
Diffstat (limited to 'source/blender/blenkernel/intern/screen.c')
-rw-r--r-- | source/blender/blenkernel/intern/screen.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c index 266a387732e..8332e7baea1 100644 --- a/source/blender/blenkernel/intern/screen.c +++ b/source/blender/blenkernel/intern/screen.c @@ -31,8 +31,11 @@ #include <stdio.h> #include <math.h> +#include "MEM_guardedalloc.h" + #include "DNA_screen_types.h" #include "DNA_space_types.h" + #include "BLI_blenlib.h" #include "BKE_screen.h" @@ -41,9 +44,27 @@ #include "BPY_extern.h" #endif +/* ************ Spacetype/regiontype handling ************** */ + /* keep global; this has to be accessible outside of windowmanager */ static ListBase spacetypes= {NULL, NULL}; +/* not SpaceType itself */ +static void spacetype_free(SpaceType *st) +{ + BLI_freelistN(&st->regiontypes); +} + +void BKE_spacetypes_free(void) +{ + SpaceType *st; + + for(st= spacetypes.first; st; st= st->next) + spacetype_free(st); + + BLI_freelistN(&spacetypes); +} + SpaceType *BKE_spacetype_from_id(int spaceid) { SpaceType *st; @@ -62,9 +83,21 @@ const ListBase *BKE_spacetypes_list() void BKE_spacetype_register(SpaceType *st) { + SpaceType *stype; + + /* sanity check */ + stype= BKE_spacetype_from_id(st->spaceid); + if(stype) { + printf("error: redefinition of spacetype %s\n", stype->name); + spacetype_free(stype); + MEM_freeN(stype); + } + BLI_addtail(&spacetypes, st); } +/* ***************** Space handling ********************** */ + void BKE_spacedata_freelist(ListBase *lb) { SpaceLink *sl; |