From d75e1472c43357114b677ff66c1faffea0b73d27 Mon Sep 17 00:00:00 2001 From: "Nyx (Neal Orman)" Date: Wed, 9 Dec 2009 11:16:25 -0500 Subject: EXT-2819 crash in color picker in appearance editor Made progress by writing code to match the style we use for the texture picker. It now should not make a difference if you destroy the color picker floater or the color swatch control first - either direction it should do sufficient cleanup and protection. However, still getting this crash. Will investigate further later. Code reviewed by Seraph --HG-- branch : avatar-pipeline --- indra/newview/llcolorswatch.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'indra/newview/llcolorswatch.cpp') diff --git a/indra/newview/llcolorswatch.cpp b/indra/newview/llcolorswatch.cpp index 442e9ab27b..b2399d238b 100644 --- a/indra/newview/llcolorswatch.cpp +++ b/indra/newview/llcolorswatch.cpp @@ -306,6 +306,18 @@ void LLColorSwatchCtrl::onColorChanged ( void* data, EColorPickOp pick_op ) } } +void LLColorSwatchCtrl::onFloaterClose() +{ + LLFloaterColorPicker* pickerp = (LLFloaterColorPicker*)mPickerHandle.get(); + + if (pickerp) + { + pickerp->setSwatch(NULL); + } + + mPickerHandle.markDead(); +} + void LLColorSwatchCtrl::setValid(BOOL valid ) { mValid = valid; @@ -323,7 +335,7 @@ void LLColorSwatchCtrl::showPicker(BOOL take_focus) if (!pickerp) { pickerp = new LLFloaterColorPicker(this, mCanApplyImmediately); - gFloaterView->getParentFloater(this)->addDependentFloater(pickerp); + //gFloaterView->getParentFloater(this)->addDependentFloater(pickerp); mPickerHandle = pickerp->getHandle(); } -- cgit v1.2.3 From 5a02b66cd293ca9deb0144c3ac106dd9e5dc0836 Mon Sep 17 00:00:00 2001 From: Loren Shih Date: Thu, 10 Dec 2009 11:01:18 -0500 Subject: EXT-2819 : Crash in appearance color picker Enforcing out-of-order destruction in llfloatercustomize to avoid this crash. --- indra/newview/llcolorswatch.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'indra/newview/llcolorswatch.cpp') diff --git a/indra/newview/llcolorswatch.cpp b/indra/newview/llcolorswatch.cpp index b2399d238b..dc6847f236 100644 --- a/indra/newview/llcolorswatch.cpp +++ b/indra/newview/llcolorswatch.cpp @@ -306,13 +306,16 @@ void LLColorSwatchCtrl::onColorChanged ( void* data, EColorPickOp pick_op ) } } -void LLColorSwatchCtrl::onFloaterClose() +// This is called when the main floatercustomize panel is closed. +// Since this class has pointers up to its parents, we need to cleanup +// this class first in order to avoid a crash. +void LLColorSwatchCtrl::onParentFloaterClosed() { LLFloaterColorPicker* pickerp = (LLFloaterColorPicker*)mPickerHandle.get(); - if (pickerp) { pickerp->setSwatch(NULL); + pickerp->closeFloater(); } mPickerHandle.markDead(); -- cgit v1.2.3