From 19c9708a1611415327fc5c76fcbcc5671c041a21 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 9 Jun 2009 17:56:07 +0000 Subject: [PATCH] Fix for bug #18855: in texture node editor, "Add New" for world did not set texture in correct place and crashed without an active object. --- source/blender/src/header_node.c | 8 ++++++-- source/blender/src/headerbuttons.c | 22 ++++++++++++++++++---- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/source/blender/src/header_node.c b/source/blender/src/header_node.c index c23913bb97c..1a8b7d44a7a 100644 --- a/source/blender/src/header_node.c +++ b/source/blender/src/header_node.c @@ -804,8 +804,12 @@ void node_buttons(ScrArea *sa) if(snode->from) { /* can't use unlink etc here, code requires buttons context */ - xco= std_libbuttons(block, xco, 0, 0, NULL, B_TEXBROWSE, ID_TE, 1, snode->id, snode->from, &(snode->menunr), - 0, 0, 0, B_AUTOTEXNAME, B_KEEPDATA); + if(snode->texfrom == SNODE_TEX_WORLD) + xco= std_libbuttons(block, xco, 0, 0, NULL, B_WTEXBROWSE, ID_TE, 1, snode->id, snode->from, &(snode->menunr), + 0, 0, 0, B_AUTOTEXNAME, B_KEEPDATA); + else + xco= std_libbuttons(block, xco, 0, 0, NULL, B_TEXBROWSE, ID_TE, 1, snode->id, snode->from, &(snode->menunr), + 0, 0, 0, B_AUTOTEXNAME, B_KEEPDATA); if(snode->id) { Tex *tx= (Tex *)snode->id; diff --git a/source/blender/src/headerbuttons.c b/source/blender/src/headerbuttons.c index 17d16924ae6..27d30816c09 100644 --- a/source/blender/src/headerbuttons.c +++ b/source/blender/src/headerbuttons.c @@ -1226,8 +1226,20 @@ void do_global_buttons(unsigned short event) break; case B_WTEXBROWSE: + { + short *menunr = 0; + + /* this is called now from Node editor too, buttons might not exist */ + if(curarea->spacetype==SPACE_NODE) { + SpaceNode *snode = curarea->spacedata.first; + menunr = &snode->menunr; + } + else if(G.buts) { + menunr = &G.buts->texnr; + } + else return; - if(G.buts->texnr== -2) { + if(*menunr== -2) { id= NULL; wrld= G.scene->world; if(wrld) { @@ -1235,12 +1247,12 @@ void do_global_buttons(unsigned short event) if(mtex) id= (ID *)mtex->tex; } - activate_databrowse((ID *)id, ID_TE, 0, B_WTEXBROWSE, &G.buts->texnr, do_global_buttons); + activate_databrowse((ID *)id, ID_TE, 0, B_WTEXBROWSE, menunr, do_global_buttons); return; } - if(G.buts->texnr < 0) break; + if(*menunr < 0) break; - if(G.buts->pin) { + if(G.buts && G.buts->pin) { } else { @@ -1279,10 +1291,12 @@ void do_global_buttons(unsigned short event) allqueue(REDRAWBUTSSHADING, 0); allqueue(REDRAWIPO, 0); allqueue(REDRAWOOPS, 0); + allqueue(REDRAWNODE, 0); BIF_preview_changed(ID_WO); } } break; + } case B_LAMPBROWSE: /* no lock */ if(ob==0) return;