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:
authorSergey Sharybin <sergey.vfx@gmail.com>2010-10-02 13:28:41 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2010-10-02 13:28:41 +0400
commit1410df2f143fda0e21eef3e778ca5b6572d301cd (patch)
treef5d56e2fe77e173beaee91889cd7eaf5866579df /source/blender/editors/space_view3d/space_view3d.c
parentb6bdf681fbe7f223a3f469490514501a580aedd5 (diff)
Fix #23629: Layers doesn't sign there are objects on them, only if the object is selected
Also fixed layer buttons update when changing scene/screen
Diffstat (limited to 'source/blender/editors/space_view3d/space_view3d.c')
-rw-r--r--source/blender/editors/space_view3d/space_view3d.c50
1 files changed, 32 insertions, 18 deletions
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index a49ada8a4c9..4c9d8f88dd1 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -529,30 +529,30 @@ static void *view3d_main_area_duplicate(void *poin)
return NULL;
}
-static void view3d_recalc_used_layers(ARegion *ar, wmNotifier *wmn)
+static void view3d_recalc_used_layers(ARegion *ar, wmNotifier *wmn, Scene *scene)
{
wmWindow *win= wmn->wm->winactive;
ScrArea *sa;
+ int lay_used= 0;
+ Base *base;
if (!win) return;
- sa= win->screen->areabase.first;
+ base= scene->base.first;
+ while(base) {
+ lay_used|= base->lay;
+
+ if (lay_used & (1<<20-1)) break;
+
+ base= base->next;
+ }
+ sa= win->screen->areabase.first;
while(sa) {
if(sa->spacetype == SPACE_VIEW3D)
if(BLI_findindex(&sa->regionbase, ar) >= 0) {
View3D *v3d= sa->spacedata.first;
- Scene *scene= wmn->reference;
- Base *base;
-
- v3d->lay_used= 0;
- base= scene->base.first;
- while(base) {
- v3d->lay_used|= base->lay;
-
- base= base->next;
- }
-
+ v3d->lay_used= lay_used;
break;
}
@@ -562,6 +562,8 @@ static void view3d_recalc_used_layers(ARegion *ar, wmNotifier *wmn)
static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn)
{
+ bScreen *sc;
+
/* context changes */
switch(wmn->category) {
case NC_ANIMATION:
@@ -584,7 +586,7 @@ static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn)
case NC_SCENE:
switch(wmn->data) {
case ND_LAYER_CONTENT:
- view3d_recalc_used_layers(ar, wmn);
+ view3d_recalc_used_layers(ar, wmn, wmn->reference);
ED_region_tag_redraw(ar);
break;
case ND_FRAME:
@@ -681,10 +683,22 @@ static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn)
ED_region_tag_redraw(ar);
break;
case NC_SCREEN:
- if(wmn->data == ND_GPENCIL)
- ED_region_tag_redraw(ar);
- else if(wmn->data==ND_ANIMPLAY)
- ED_region_tag_redraw(ar);
+ switch(wmn->data) {
+ case ND_GPENCIL:
+ case ND_ANIMPLAY:
+ ED_region_tag_redraw(ar);
+ break;
+ case ND_SCREENBROWSE:
+ case ND_SCREENDELETE:
+ case ND_SCREENSET:
+ /* screen was changed, need to update used layers due to NC_SCENE|ND_LAYER_CONTENT */
+ /* updates used layers only for View3D in active screen */
+ sc= wmn->reference;
+ view3d_recalc_used_layers(ar, wmn, sc->scene);
+ ED_region_tag_redraw(ar);
+ break;
+ }
+
break;
}
}