[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32610] trunk/blender/source/blender/ editors: bugfix [#24333] Horizon Color Picker Crashes Blender if Two 3D View Windows are Open
Campbell Barton
ideasman42 at gmail.com
Wed Oct 20 06:12:02 CEST 2010
Revision: 32610
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32610
Author: campbellbarton
Date: 2010-10-20 06:12:01 +0200 (Wed, 20 Oct 2010)
Log Message:
-----------
bugfix [#24333] Horizon Color Picker Crashes Blender if Two 3D View Windows are Open
also added api function ED_area_tag_redraw_regiontype(), so an area can redraw all regions by type.
In this case there is a view3d area listener that needs to draw all WINDOW regions.
Modified Paths:
--------------
trunk/blender/source/blender/editors/include/ED_screen.h
trunk/blender/source/blender/editors/object/object_relations.c
trunk/blender/source/blender/editors/screen/area.c
trunk/blender/source/blender/editors/space_view3d/space_view3d.c
Modified: trunk/blender/source/blender/editors/include/ED_screen.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_screen.h 2010-10-20 02:47:53 UTC (rev 32609)
+++ trunk/blender/source/blender/editors/include/ED_screen.h 2010-10-20 04:12:01 UTC (rev 32610)
@@ -78,6 +78,7 @@
int ED_screen_area_active(const struct bContext *C);
void ED_area_do_listen(ScrArea *sa, struct wmNotifier *note);
void ED_area_tag_redraw(ScrArea *sa);
+void ED_area_tag_redraw_regiontype(ScrArea *sa, int type);
void ED_area_tag_refresh(ScrArea *sa);
void ED_area_do_refresh(struct bContext *C, ScrArea *sa);
void ED_area_headerprint(ScrArea *sa, char *str);
Modified: trunk/blender/source/blender/editors/object/object_relations.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_relations.c 2010-10-20 02:47:53 UTC (rev 32609)
+++ trunk/blender/source/blender/editors/object/object_relations.c 2010-10-20 04:12:01 UTC (rev 32610)
@@ -668,6 +668,7 @@
DAG_scene_sort(bmain, scene);
DAG_ids_flush_update(bmain, 0);
WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
+ WM_event_add_notifier(C, NC_OBJECT|ND_PARENT, NULL);
return OPERATOR_FINISHED;
}
Modified: trunk/blender/source/blender/editors/screen/area.c
===================================================================
--- trunk/blender/source/blender/editors/screen/area.c 2010-10-20 02:47:53 UTC (rev 32609)
+++ trunk/blender/source/blender/editors/screen/area.c 2010-10-20 04:12:01 UTC (rev 32610)
@@ -405,6 +405,19 @@
ED_region_tag_redraw(ar);
}
+void ED_area_tag_redraw_regiontype(ScrArea *sa, int regiontype)
+{
+ ARegion *ar;
+
+ if(sa) {
+ for(ar= sa->regionbase.first; ar; ar= ar->next) {
+ if(ar->regiontype == regiontype) {
+ ED_region_tag_redraw(ar);
+ }
+ }
+ }
+}
+
void ED_area_tag_refresh(ScrArea *sa)
{
if(sa)
Modified: trunk/blender/source/blender/editors/space_view3d/space_view3d.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/space_view3d.c 2010-10-20 02:47:53 UTC (rev 32609)
+++ trunk/blender/source/blender/editors/space_view3d/space_view3d.c 2010-10-20 04:12:01 UTC (rev 32610)
@@ -559,25 +559,9 @@
}
}
-static View3D *view3d_from_wmn(ARegion *ar, wmNotifier *wmn)
-{
- wmWindow *win= wmn->wm->winactive;
- ScrArea *sa;
-
- for(sa= win->screen->areabase.first; sa; sa= sa->next) {
- if(sa->spacetype == SPACE_VIEW3D)
- if(BLI_findindex(&sa->regionbase, ar) != -1) {
- return (View3D *)sa->spacedata.first;
- }
- }
-
- return NULL;
-}
-
static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn)
{
bScreen *sc;
- View3D *v3d;
/* context changes */
switch(wmn->category) {
@@ -615,9 +599,7 @@
ED_region_tag_redraw(ar);
break;
case ND_WORLD:
- v3d= view3d_from_wmn(ar, wmn);
- if(v3d->flag2 & V3D_RENDER_OVERRIDE)
- ED_region_tag_redraw(ar);
+ /* handled by space_view3d_listener() for v3d access */
break;
}
if (wmn->action == NA_EDITED)
@@ -669,9 +651,7 @@
case NC_WORLD:
switch(wmn->data) {
case ND_WORLD_DRAW:
- v3d= view3d_from_wmn(ar, wmn);
- if(v3d->flag2 & V3D_RENDER_OVERRIDE)
- ED_region_tag_redraw(ar);
+ /* handled by space_view3d_listener() for v3d access */
break;
}
break;
@@ -910,6 +890,47 @@
}
}
+/*area (not region) level listener*/
+void space_view3d_listener(struct ScrArea *sa, struct wmNotifier *wmn)
+{
+ View3D *v3d = sa->spacedata.first;
+
+ /* context changes */
+ switch(wmn->category) {
+ case NC_SCENE:
+ switch(wmn->data) {
+ case ND_WORLD:
+ if(v3d->flag2 & V3D_RENDER_OVERRIDE)
+ ED_area_tag_redraw_regiontype(sa, RGN_TYPE_WINDOW);
+ break;
+ }
+ break;
+ case NC_WORLD:
+ switch(wmn->data) {
+ case ND_WORLD_DRAW:
+ if(v3d->flag2 & V3D_RENDER_OVERRIDE)
+ ED_area_tag_redraw_regiontype(sa, RGN_TYPE_WINDOW);
+ break;
+ }
+ break;
+
+ }
+
+#if 0 // removed since BKE_image_user_calc_frame is now called in draw_bgpic because screen_ops doesnt call the notifier.
+ if (wmn->category == NC_SCENE && wmn->data == ND_FRAME) {
+ View3D *v3d = area->spacedata.first;
+ BGpic *bgpic = v3d->bgpicbase.first;
+
+ for (; bgpic; bgpic = bgpic->next) {
+ if (bgpic->ima) {
+ Scene *scene = wmn->reference;
+ BKE_image_user_calc_frame(&bgpic->iuser, scene->r.cfra, 0);
+ }
+ }
+ }
+#endif
+}
+
static int view3d_context(const bContext *C, const char *member, bContextDataResult *result)
{
View3D *v3d= CTX_wm_view3d(C);
@@ -1012,24 +1033,7 @@
return -1; /* found but not available */
}
-/*area (not region) level listener*/
-#if 0 // removed since BKE_image_user_calc_frame is now called in draw_bgpic because screen_ops doesnt call the notifier.
-void space_view3d_listener(struct ScrArea *area, struct wmNotifier *wmn)
-{
- if (wmn->category == NC_SCENE && wmn->data == ND_FRAME) {
- View3D *v3d = area->spacedata.first;
- BGpic *bgpic = v3d->bgpicbase.first;
- for (; bgpic; bgpic = bgpic->next) {
- if (bgpic->ima) {
- Scene *scene = wmn->reference;
- BKE_image_user_calc_frame(&bgpic->iuser, scene->r.cfra, 0);
- }
- }
- }
-}
-#endif
-
/* only called once, from space/spacetypes.c */
void ED_spacetype_view3d(void)
{
@@ -1042,7 +1046,7 @@
st->new= view3d_new;
st->free= view3d_free;
st->init= view3d_init;
-// st->listener = space_view3d_listener;
+ st->listener = space_view3d_listener;
st->duplicate= view3d_duplicate;
st->operatortypes= view3d_operatortypes;
st->keymap= view3d_keymap;
More information about the Bf-blender-cvs
mailing list