Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2008-12-10 16:56:54 +0300
committerTon Roosendaal <ton@blender.org>2008-12-10 16:56:54 +0300
commit54c4ed469ad632b06e444ff577f35effca952e38 (patch)
tree7571934754e1ebd1d95c146d7fc21ba1bddda4ed /source/blender/editors
parent1fdb9da2a730b9b9fc12cf6b70f5c3ba69cce178 (diff)
2.5
Cleanup in area/region management - more intelligence in area management for adding handlers and setting data correct. Space/Region type callbacks only have to do own things. - added option for adding default handlers to areas/regions. (flag in type definition) - ensured that region-types store the minsizes for regions. - added boundbox check for handlers; note that it accepts pointer to boundbox, because handlers don't get reset on area-resizing or view changes. Example: view2d handlers use mask rect. - handlers get now added on correct context levels (example frame change also worked in header) - removed ->refresh() callback. Context refreshing is Listener. - the ->init() is being called on all WM level actions, also after a file read, moving areas, re-opening areas etc. - fixed bug: crash on exit was caused by cleaning up Screen too late. - UI_view2d_size_update() removed from draw callback, is init() - regions now store (winx, winy) subwindow size.
Diffstat (limited to 'source/blender/editors')
-rw-r--r--source/blender/editors/include/ED_screen.h7
-rw-r--r--source/blender/editors/interface/interface_regions.c6
-rw-r--r--source/blender/editors/screen/area.c118
-rw-r--r--source/blender/editors/screen/screen_edit.c12
-rw-r--r--source/blender/editors/screen/spacetypes.c20
-rw-r--r--source/blender/editors/space_outliner/space_outliner.c43
-rw-r--r--source/blender/editors/space_time/space_time.c72
-rw-r--r--source/blender/editors/space_view3d/space_view3d.c15
8 files changed, 136 insertions, 157 deletions
diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h
index fe832baf7c9..4161da135e4 100644
--- a/source/blender/editors/include/ED_screen.h
+++ b/source/blender/editors/include/ED_screen.h
@@ -40,12 +40,11 @@ struct SpaceType;
struct AreagionType;
/* regions */
-void ED_region_initialize(struct wmWindowManager *wm, struct wmWindow *win, struct ARegion *ar);
void ED_region_do_listen(ARegion *ar, struct wmNotifier *note);
void ED_region_do_draw(struct bContext *C, ARegion *ar);
-void ED_region_do_refresh(struct bContext *C, ARegion *ar);
void ED_region_exit(struct bContext *C, ARegion *ar);
void ED_region_pixelspace(const struct bContext *C, ARegion *ar);
+void ED_region_init(struct bContext *C, ARegion *ar);
ARegion *ED_region_copy(ARegion *ar);
/* spaces */
@@ -75,6 +74,10 @@ int ED_operator_screenactive(struct bContext *C);
int ED_operator_screen_mainwinactive(struct bContext *C);
int ED_operator_areaactive(struct bContext *C);
+/* default keymaps, bitflags */
+#define ED_KEYMAP_UI 1
+#define ED_KEYMAP_VIEW2D 2
+#define ED_KEYMAP_MARKERS 4
#endif /* ED_SCREEN_H */
diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c
index 2154236cc59..251db907bf4 100644
--- a/source/blender/editors/interface/interface_regions.c
+++ b/source/blender/editors/interface/interface_regions.c
@@ -350,6 +350,9 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but)
ar->winrct.xmax= x2;
ar->winrct.ymax= y2;
+ /* adds subwindow */
+ ED_region_init(C, ar);
+
/* notify change and redraw */
WM_event_add_notifier(C, WM_NOTE_SCREEN_CHANGED, 0, NULL);
WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL);
@@ -663,6 +666,9 @@ uiMenuBlockHandle *ui_menu_block_create(bContext *C, ARegion *butregion, uiBut *
block->flag |= UI_BLOCK_LOOP|UI_BLOCK_MOVEMOUSE_QUIT;
+ /* adds subwindow */
+ ED_region_init(C, ar);
+
/* notify change and redraw */
WM_event_add_notifier(C, WM_NOTE_SCREEN_CHANGED, 0, NULL);
WM_event_add_notifier(C, WM_NOTE_WINDOW_REDRAW, 0, NULL);
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c
index c959e1da17d..7b85a7c6556 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -50,7 +50,9 @@
#include "BIF_gl.h"
#include "BIF_glutil.h"
+#include "UI_interface.h"
#include "UI_resources.h"
+#include "UI_view2d.h"
#ifndef DISABLE_PYTHON
#include "BPY_extern.h"
@@ -108,13 +110,9 @@ void ED_region_do_listen(ARegion *ar, wmNotifier *note)
case WM_NOTE_WINDOW_REDRAW:
case WM_NOTE_AREA_REDRAW:
case WM_NOTE_REGION_REDRAW:
- ar->do_draw= 1;
- break;
case WM_NOTE_GESTURE_REDRAW:
- ar->do_draw= 1;
- break;
case WM_NOTE_SCREEN_CHANGED:
- ar->do_draw= ar->do_refresh= 1;
+ ar->do_draw= 1;
break;
default:
if(ar->type->listener)
@@ -177,21 +175,6 @@ void ED_region_do_draw(bContext *C, ARegion *ar)
ar->do_draw= 0;
}
-void ED_region_do_refresh(bContext *C, ARegion *ar)
-{
- ARegionType *at= ar->type;
-
- /* refresh can be called before window opened */
- if(ar->swinid)
- wm_subwindow_set(C->window, ar->swinid);
-
- if (at->refresh) {
- at->refresh(C, ar);
- }
-
- ar->do_refresh= 0;
-}
-
/* *************************************************************** */
/* dir is direction to check, not the splitting edge direction! */
@@ -207,6 +190,8 @@ static int rct_fits(rcti *rect, char dir, int size)
static void region_rect_recursive(ARegion *ar, rcti *remainder)
{
+ int prefsizex, prefsizey;
+
if(ar==NULL)
return;
@@ -215,8 +200,8 @@ static void region_rect_recursive(ARegion *ar, rcti *remainder)
if(ar->next==NULL)
ar->alignment= RGN_ALIGN_NONE;
- if(ar->size<ar->minsize)
- ar->size= ar->minsize;
+ prefsizex= ar->type->minsizex;
+ prefsizey= ar->type->minsizey;
/* hidden is user flag */
if(ar->flag & RGN_FLAG_HIDDEN);
@@ -233,46 +218,46 @@ static void region_rect_recursive(ARegion *ar, rcti *remainder)
}
else if(ar->alignment==RGN_ALIGN_TOP || ar->alignment==RGN_ALIGN_BOTTOM) {
- if( rct_fits(remainder, 'v', ar->minsize) < 0 ) {
+ if( rct_fits(remainder, 'v', prefsizey) < 0 ) {
ar->flag |= RGN_FLAG_TOO_SMALL;
}
else {
- int fac= rct_fits(remainder, 'v', ar->size);
+ int fac= rct_fits(remainder, 'v', prefsizey);
if(fac < 0 )
- ar->size += fac;
+ prefsizey += fac;
ar->winrct= *remainder;
if(ar->alignment==RGN_ALIGN_TOP) {
- ar->winrct.ymin= ar->winrct.ymax - ar->size;
+ ar->winrct.ymin= ar->winrct.ymax - prefsizey;
remainder->ymax= ar->winrct.ymin-1;
}
else {
- ar->winrct.ymax= ar->winrct.ymin + ar->size;
+ ar->winrct.ymax= ar->winrct.ymin + prefsizey;
remainder->ymin= ar->winrct.ymax+1;
}
}
}
else if(ar->alignment==RGN_ALIGN_LEFT || ar->alignment==RGN_ALIGN_RIGHT) {
- if( rct_fits(remainder, 'h', ar->minsize) < 0 ) {
+ if( rct_fits(remainder, 'h', prefsizex) < 0 ) {
ar->flag |= RGN_FLAG_TOO_SMALL;
}
else {
- int fac= rct_fits(remainder, 'h', ar->size);
+ int fac= rct_fits(remainder, 'h', prefsizex);
if(fac < 0 )
- ar->size += fac;
+ prefsizex += fac;
ar->winrct= *remainder;
if(ar->alignment==RGN_ALIGN_RIGHT) {
- ar->winrct.xmin= ar->winrct.xmax - ar->size;
+ ar->winrct.xmin= ar->winrct.xmax - prefsizex;
remainder->xmax= ar->winrct.xmin-1;
}
else {
- ar->winrct.xmax= ar->winrct.xmin + ar->size;
+ ar->winrct.xmax= ar->winrct.xmin + prefsizex;
remainder->xmin= ar->winrct.xmax+1;
}
}
@@ -282,7 +267,7 @@ static void region_rect_recursive(ARegion *ar, rcti *remainder)
ar->winrct= *remainder;
if(ar->alignment==RGN_ALIGN_HSPLIT) {
- if( rct_fits(remainder, 'h', ar->size) > 4) {
+ if( rct_fits(remainder, 'h', prefsizex) > 4) {
ar->winrct.xmax= (remainder->xmin+remainder->xmax)/2;
remainder->xmin= ar->winrct.xmax+1;
}
@@ -291,7 +276,7 @@ static void region_rect_recursive(ARegion *ar, rcti *remainder)
}
}
else {
- if( rct_fits(remainder, 'v', ar->size) > 4) {
+ if( rct_fits(remainder, 'v', prefsizey) > 4) {
ar->winrct.ymax= (remainder->ymin+remainder->ymax)/2;
remainder->ymin= ar->winrct.ymax+1;
}
@@ -300,6 +285,9 @@ static void region_rect_recursive(ARegion *ar, rcti *remainder)
}
}
}
+ /* for speedup */
+ ar->winx= ar->winrct.xmax - ar->winrct.xmin + 1;
+ ar->winy= ar->winrct.ymax - ar->winrct.ymin + 1;
region_rect_recursive(ar->next, remainder);
}
@@ -356,8 +344,8 @@ void area_azone_initialize(ScrArea *sa)
}
}
-/* used for area and screen regions */
-void ED_region_initialize(wmWindowManager *wm, wmWindow *win, ARegion *ar)
+/* used for area initialize below */
+static void region_subwindow(wmWindowManager *wm, wmWindow *win, ARegion *ar)
{
if(ar->flag & (RGN_FLAG_HIDDEN|RGN_FLAG_TOO_SMALL)) {
if(ar->swinid)
@@ -370,7 +358,25 @@ void ED_region_initialize(wmWindowManager *wm, wmWindow *win, ARegion *ar)
wm_subwindow_position(win, ar->swinid, &ar->winrct);
}
-/* called in screen_refresh, or screens_init */
+static void ed_default_handlers(wmWindowManager *wm, ListBase *handlers, int flag)
+{
+ /* note, add-handler checks if it already exists */
+
+ if(flag & ED_KEYMAP_UI) {
+ UI_add_region_handlers(handlers);
+ }
+ if(flag & ED_KEYMAP_VIEW2D) {
+ ListBase *keymap= WM_keymap_listbase(wm, "View2D", 0, 0);
+ WM_event_add_keymap_handler(handlers, keymap);
+ }
+ if(flag & ED_KEYMAP_MARKERS) {
+ ListBase *keymap= WM_keymap_listbase(wm, "Markers", 0, 0);
+ WM_event_add_keymap_handler(handlers, keymap);
+ }
+}
+
+
+/* called in screen_refresh, or screens_init, also area size changes */
void ED_area_initialize(wmWindowManager *wm, wmWindow *win, ScrArea *sa)
{
ARegion *ar;
@@ -378,28 +384,52 @@ void ED_area_initialize(wmWindowManager *wm, wmWindow *win, ScrArea *sa)
/* set typedefinitions */
sa->type= BKE_spacetype_from_id(sa->spacetype);
+
if(sa->type==NULL) {
sa->spacetype= SPACE_VIEW3D;
sa->type= BKE_spacetype_from_id(sa->spacetype);
}
- area_calc_totrct(sa, win->sizex, win->sizey);
+ for(ar= sa->regionbase.first; ar; ar= ar->next)
+ ar->type= ED_regiontype_from_id(sa->type, ar->regiontype);
- /* regiontype callback, it should create/verify the amount of subregions with minsizes etc */
- if(sa->type->init)
- sa->type->init(wm, sa);
+ /* area sizes */
+ area_calc_totrct(sa, win->sizex, win->sizey);
/* region rect sizes */
rect= sa->totrct;
region_rect_recursive(sa->regionbase.first, &rect);
- /* region windows */
- for(ar= sa->regionbase.first; ar; ar= ar->next)
- ED_region_initialize(wm, win, ar);
+ /* default area handlers */
+ ed_default_handlers(wm, &sa->handlers, sa->type->keymapflag);
+ /* checks spacedata, adds own handlers */
+ if(sa->type->init)
+ sa->type->init(wm, sa);
+ /* region windows, default and own handlers */
+ for(ar= sa->regionbase.first; ar; ar= ar->next) {
+ region_subwindow(wm, win, ar);
+
+ /* default region handlers */
+ ed_default_handlers(wm, &ar->handlers, ar->type->keymapflag);
+
+ if(ar->type->init)
+ ar->type->init(wm, ar);
+
+ }
area_azone_initialize(sa);
}
+/* externally called for floating regions like menus */
+void ED_region_init(bContext *C, ARegion *ar)
+{
+// ARegionType *at= ar->type;
+
+ /* refresh can be called before window opened */
+ region_subwindow(C->wm, C->window, ar);
+
+}
+
ARegion *ED_region_copy(ARegion *ar)
{
diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c
index e2ac4d90645..94f907ee06b 100644
--- a/source/blender/editors/screen/screen_edit.c
+++ b/source/blender/editors/screen/screen_edit.c
@@ -878,7 +878,6 @@ void ED_screen_draw(wmWindow *win)
void ED_screen_refresh(wmWindowManager *wm, wmWindow *win)
{
ScrArea *sa;
- ARegion *ar;
rcti winrct= {0, win->sizex-1, 0, win->sizey-1};
screen_test_scale(win->screen, win->sizex, win->sizey);
@@ -889,16 +888,11 @@ void ED_screen_refresh(wmWindowManager *wm, wmWindow *win)
wm_subwindow_position(win, win->screen->mainwin, &winrct);
for(sa= win->screen->areabase.first; sa; sa= sa->next) {
- /* set spacetype and region callbacks */
- /* sets subwindow */
+ /* set spacetype and region callbacks, calls init() */
+ /* sets subwindows for regions, adds handlers */
ED_area_initialize(wm, win, sa);
}
- for(ar= win->screen->regionbase.first; ar; ar= ar->next) {
- /* set subwindow */
- ED_region_initialize(wm, win, ar);
- }
-
if(G.f & G_DEBUG) printf("set screen\n");
win->screen->do_refresh= 0;
@@ -942,7 +936,7 @@ void ED_area_exit(bContext *C, ScrArea *sa)
void ED_screen_exit(bContext *C, wmWindow *window, bScreen *screen)
{
- wmWindow *prevwin= C->window;
+ wmWindow *prevwin= C?C->window:NULL;
ScrArea *sa;
ARegion *ar;
diff --git a/source/blender/editors/screen/spacetypes.c b/source/blender/editors/screen/spacetypes.c
index 514a459df4f..d3d0bfe38d8 100644
--- a/source/blender/editors/screen/spacetypes.c
+++ b/source/blender/editors/screen/spacetypes.c
@@ -84,14 +84,21 @@ void ED_spacetypes_init(void)
void ED_spacetypes_keymap(wmWindowManager *wm)
{
const ListBase *spacetypes;
- SpaceType *type;
+ SpaceType *stype;
+ ARegionType *atype;
ED_keymap_screen(wm);
UI_view2d_keymap(wm);
spacetypes = BKE_spacetypes_list();
- for(type=spacetypes->first; type; type=type->next)
- type->keymap(wm);
+ for(stype=spacetypes->first; stype; stype=stype->next) {
+ if(stype->keymap)
+ stype->keymap(wm);
+ for(atype=stype->regiontypes.first; atype; atype=atype->next) {
+ if(atype->keymap)
+ atype->keymap(wm);
+ }
+ }
}
/* ****************************** space template *********************** */
@@ -119,12 +126,6 @@ static void xxx_init(wmWindowManager *wm, ScrArea *sa)
/* add types to regions */
}
-/* spacetype; external context changed */
-static void xxx_refresh(bContext *C, ScrArea *sa)
-{
-
-}
-
static SpaceLink *xxx_duplicate(SpaceLink *sl)
{
@@ -151,7 +152,6 @@ void ED_spacetype_xxx(void)
st.new= xxx_new;
st.free= xxx_free;
st.init= xxx_init;
- st.refresh= xxx_refresh;
st.duplicate= xxx_duplicate;
st.operatortypes= xxx_operatortypes;
st.keymap= xxx_keymap;
diff --git a/source/blender/editors/space_outliner/space_outliner.c b/source/blender/editors/space_outliner/space_outliner.c
index 558767ce97e..29a849541b2 100644
--- a/source/blender/editors/space_outliner/space_outliner.c
+++ b/source/blender/editors/space_outliner/space_outliner.c
@@ -331,6 +331,12 @@ static void rna_table_cell_func(void *userdata, int row, int col, rcti *rct, uiB
rna_but(cell, rct, block);
}
+static void outliner_main_area_init(wmWindowManager *wm, ARegion *ar)
+{
+ UI_view2d_size_update(&ar->v2d, ar->winx, ar->winy);
+
+}
+
static void outliner_main_area_draw(const bContext *C, ARegion *ar)
{
uiTable *table;
@@ -349,10 +355,8 @@ static void outliner_main_area_draw(const bContext *C, ARegion *ar)
glClearColor(col[0], col[1], col[2], 0.0);
glClear(GL_COLOR_BUFFER_BIT);
- awidth= width= ar->winrct.xmax - ar->winrct.xmin + 1;
- aheight= height= ar->winrct.ymax - ar->winrct.ymin + 1;
-
- UI_view2d_size_update(v2d, awidth, aheight);
+ awidth= width= ar->winx;
+ aheight= height= ar->winy;
/* create table */
cell.space= soutliner;
@@ -437,6 +441,7 @@ static void outliner_main_area_free(ARegion *ar)
/* ************************ header outliner area region *********************** */
+
static void outliner_header_area_draw(const bContext *C, ARegion *ar)
{
SpaceOops *soutliner= C->area->spacedata.first;
@@ -493,30 +498,6 @@ static void outliner_free(SpaceLink *sl)
/* spacetype; init callback */
static void outliner_init(wmWindowManager *wm, ScrArea *sa)
{
- ARegion *ar;
-
- /* add types to regions, check handlers */
- for(ar= sa->regionbase.first; ar; ar= ar->next) {
-
- ar->type= ED_regiontype_from_id(sa->type, ar->regiontype);
-
- if(ar->handlers.first==NULL) {
- ListBase *keymap;
-
- /* XXX fixme, should be smarter */
-
- UI_add_region_handlers(&ar->handlers);
-
- keymap= WM_keymap_listbase(wm, "View2D", 0, 0);
- WM_event_add_keymap_handler(&ar->handlers, keymap);
-
- }
- }
-}
-
-/* spacetype; context changed */
-static void outliner_refresh(bContext *C, ScrArea *sa)
-{
}
@@ -543,7 +524,6 @@ void ED_spacetype_outliner(void)
st->new= outliner_new;
st->free= outliner_free;
st->init= outliner_init;
- st->refresh= outliner_refresh;
st->duplicate= outliner_duplicate;
st->operatortypes= outliner_operatortypes;
st->keymap= outliner_keymap;
@@ -551,7 +531,9 @@ void ED_spacetype_outliner(void)
/* regions: main window */
art= MEM_callocN(sizeof(ARegionType), "spacetype time region");
art->regionid = RGN_TYPE_WINDOW;
+ art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D;
+ art->init= outliner_main_area_init;
art->draw= outliner_main_area_draw;
art->free= outliner_main_area_free;
BLI_addhead(&st->regiontypes, art);
@@ -559,12 +541,13 @@ void ED_spacetype_outliner(void)
/* regions: header */
art= MEM_callocN(sizeof(ARegionType), "spacetype time region");
art->regionid = RGN_TYPE_HEADER;
+ art->minsizey= HEADERY;
+ art->keymapflag= ED_KEYMAP_UI;
art->draw= outliner_header_area_draw;
art->free= outliner_header_area_free;
BLI_addhead(&st->regiontypes, art);
-
BKE_spacetype_register(st);
}
diff --git a/source/blender/editors/space_time/space_time.c b/source/blender/editors/space_time/space_time.c
index 51466e22944..a8fc955c485 100644
--- a/source/blender/editors/space_time/space_time.c
+++ b/source/blender/editors/space_time/space_time.c
@@ -103,31 +103,31 @@ static void time_draw_sfra_efra(const bContext *C, SpaceTime *stime, ARegion *ar
fdrawline(PEFRA, v2d->cur.ymin, PEFRA, v2d->cur.ymax);
}
-static void time_main_area_init(const bContext *C, ARegion *ar)
+/* add handlers, stuff you only do once or on area/region changes */
+static void time_main_area_init(wmWindowManager *wm, ARegion *ar)
{
- /* add handlers, stuff you only do once or on area/region changes */
+ ListBase *keymap;
+
+ UI_view2d_size_update(&ar->v2d, ar->winx, ar->winy);
+
+ /* own keymap */
+ keymap= WM_keymap_listbase(wm, "TimeLine", SPACE_TIME, 0); /* XXX weak? */
+ WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct);
}
-static void time_main_area_refresh(const bContext *C, ARegion *ar)
-{
- /* refresh to match contextual changes */
-}
static void time_main_area_draw(const bContext *C, ARegion *ar)
{
- /* draw entirely, windowsize changes should be handled here */
+ /* draw entirely, view changes should be handled here */
SpaceTime *stime= C->area->spacedata.first;
View2D *v2d= &ar->v2d;
View2DGrid *grid;
View2DScrollers *scrollers;
float col[3];
- int unit, winx, winy;
-
- // XXX this should become stored in regions too...
- winx= ar->winrct.xmax - ar->winrct.xmin + 1;
- winy= ar->winrct.ymax - ar->winrct.ymin + 1;
+ int unit;
- UI_view2d_size_update(v2d, winx, winy);
+ /* XXX can be removed */
+ UI_view2d_size_update(v2d, ar->winx, ar->winy);
/* clear and setup matrix */
UI_GetThemeColor3fv(TH_BACK, col);
@@ -141,7 +141,7 @@ static void time_main_area_draw(const bContext *C, ARegion *ar)
/* grid */
unit= (stime->flag & TIME_DRAWFRAMES)? V2D_UNIT_FRAMES: V2D_UNIT_SECONDS;
- grid= UI_view2d_grid_calc(C, v2d, unit, V2D_GRID_CLAMP, winx, winy);
+ grid= UI_view2d_grid_calc(C, v2d, unit, V2D_GRID_CLAMP, ar->winx, ar->winy);
UI_view2d_grid_draw(C, v2d, grid, (V2D_VERTICAL_LINES|V2D_VERTICAL_AXIS));
UI_view2d_grid_free(grid);
@@ -163,11 +163,12 @@ static void time_main_area_draw(const bContext *C, ARegion *ar)
static void time_main_area_listener(ARegion *ar, wmNotifier *wmn)
{
- /* draw entirely, windowsize changes should be handled here */
+ /* context changes */
}
/* ************************ header time area region *********************** */
+
static void time_header_area_draw(const bContext *C, ARegion *ar)
{
float col[3];
@@ -231,36 +232,10 @@ static void time_free(SpaceLink *sl)
/* spacetype; init callback in ED_area_initialize() */
/* init is called to (re)initialize an existing editor (file read, screen changes) */
+/* validate spacedata, add own area level handlers */
static void time_init(wmWindowManager *wm, ScrArea *sa)
{
- ARegion *ar;
-
- /* add types to regions, check handlers */
- for(ar= sa->regionbase.first; ar; ar= ar->next) {
-
- ar->type= ED_regiontype_from_id(sa->type, ar->regiontype);
-
- if(ar->handlers.first==NULL) {
- ListBase *keymap;
-
- /* XXX fixme, should be smarter */
-
- UI_add_region_handlers(&ar->handlers);
-
- keymap= WM_keymap_listbase(wm, "View2D", 0, 0);
- WM_event_add_keymap_handler(&ar->handlers, keymap);
-
- /* own keymap */
- keymap= WM_keymap_listbase(wm, "TimeLine", sa->spacetype, 0);
- WM_event_add_keymap_handler(&ar->handlers, keymap);
- }
- }
-}
-/* spacetype; context changed */
-static void time_refresh(bContext *C, ScrArea *sa)
-{
-
}
static SpaceLink *time_duplicate(SpaceLink *sl)
@@ -284,30 +259,31 @@ void ED_spacetype_time(void)
st->new= time_new;
st->free= time_free;
st->init= time_init;
- st->refresh= time_refresh;
st->duplicate= time_duplicate;
st->operatortypes= time_operatortypes;
- st->keymap= time_keymap;
+ st->keymap= NULL;
/* regions: main window */
art= MEM_callocN(sizeof(ARegionType), "spacetype time region");
art->regionid = RGN_TYPE_WINDOW;
-
+ art->keymapflag= ED_KEYMAP_VIEW2D|ED_KEYMAP_MARKERS;
+
art->init= time_main_area_init;
- art->refresh= time_main_area_refresh;
art->draw= time_main_area_draw;
art->listener= time_main_area_listener;
+ art->keymap= time_keymap;
BLI_addhead(&st->regiontypes, art);
/* regions: header */
art= MEM_callocN(sizeof(ARegionType), "spacetype time region");
art->regionid = RGN_TYPE_HEADER;
+ art->minsizey= HEADERY;
+ art->keymapflag= ED_KEYMAP_UI;
art->draw= time_header_area_draw;
art->free= time_header_area_free;
BLI_addhead(&st->regiontypes, art);
-
-
+
BKE_spacetype_register(st);
}
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index a9e3a382fbe..03a30e96e57 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -121,19 +121,7 @@ static void view3d_free(SpaceLink *sl)
/* spacetype; init callback */
static void view3d_init(struct wmWindowManager *wm, ScrArea *sa)
{
- ARegion *ar;
-
- /* add types to regions, handlers */
- for(ar= sa->regionbase.first; ar; ar= ar->next) {
- ar->type= ED_regiontype_from_id(sa->type, ar->regiontype);
-
- }
-}
-/* spacetype; context changed */
-static void view3d_refresh(bContext *C, ScrArea *sa)
-{
-
}
static SpaceLink *view3d_duplicate(SpaceLink *sl)
@@ -187,7 +175,6 @@ void ED_spacetype_view3d(void)
st->new= view3d_new;
st->free= view3d_free;
st->init= view3d_init;
- st->refresh= view3d_refresh;
st->duplicate= view3d_duplicate;
st->operatortypes= view3d_operatortypes;
st->keymap= view3d_keymap;
@@ -201,10 +188,10 @@ void ED_spacetype_view3d(void)
/* regions: header */
art= MEM_callocN(sizeof(ARegionType), "spacetype time region");
art->regionid = RGN_TYPE_HEADER;
+ art->minsizey= HEADERY;
BLI_addhead(&st->regiontypes, art);
-
BKE_spacetype_register(st);
}