summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorNyx (Neal Orman) <nyx@lindenlab.com>2009-12-09 11:16:25 -0500
committerNyx (Neal Orman) <nyx@lindenlab.com>2009-12-09 11:16:25 -0500
commitd75e1472c43357114b677ff66c1faffea0b73d27 (patch)
tree2788f9ca17846dd7c319988ccb6d3e6e9541f73c /indra/newview
parent37848d29d9030e00086c3a499d28237cdf943e1b (diff)
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
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llcolorswatch.cpp14
-rw-r--r--indra/newview/llcolorswatch.h1
-rw-r--r--indra/newview/llfloatercolorpicker.cpp10
-rw-r--r--indra/newview/llfloatercolorpicker.h2
4 files changed, 26 insertions, 1 deletions
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();
}
diff --git a/indra/newview/llcolorswatch.h b/indra/newview/llcolorswatch.h
index e3e267f831..2f6aec85e8 100644
--- a/indra/newview/llcolorswatch.h
+++ b/indra/newview/llcolorswatch.h
@@ -105,6 +105,7 @@ public:
/*virtual*/ void setEnabled( BOOL enabled );
static void onColorChanged ( void* data, EColorPickOp pick_op = COLOR_CHANGE );
+ void onFloaterClose();
protected:
BOOL mValid;
diff --git a/indra/newview/llfloatercolorpicker.cpp b/indra/newview/llfloatercolorpicker.cpp
index 73b79d8e13..56b56dc3d2 100644
--- a/indra/newview/llfloatercolorpicker.cpp
+++ b/indra/newview/llfloatercolorpicker.cpp
@@ -241,6 +241,16 @@ BOOL LLFloaterColorPicker::postBuild()
return TRUE;
}
+/*virtual*/
+void LLFloaterColorPicker::onClose(bool app_settings)
+{
+ if (mSwatch)
+ {
+ mSwatch->onFloaterClose();
+ }
+ stopUsingPipette();
+}
+
//////////////////////////////////////////////////////////////////////////////
//
void LLFloaterColorPicker::initUI ( F32 rValIn, F32 gValIn, F32 bValIn )
diff --git a/indra/newview/llfloatercolorpicker.h b/indra/newview/llfloatercolorpicker.h
index a16cde7f10..b381740acd 100644
--- a/indra/newview/llfloatercolorpicker.h
+++ b/indra/newview/llfloatercolorpicker.h
@@ -56,6 +56,7 @@ class LLFloaterColorPicker
// overrides
virtual BOOL postBuild ();
+ virtual void onClose(bool app_settings);
virtual void draw ();
virtual BOOL handleMouseDown ( S32 x, S32 y, MASK mask );
virtual BOOL handleMouseUp ( S32 x, S32 y, MASK mask );
@@ -69,6 +70,7 @@ class LLFloaterColorPicker
void destroyUI ();
void cancelSelection ();
LLColorSwatchCtrl* getSwatch () { return mSwatch; };
+ void setSwatch( LLColorSwatchCtrl* swatch) { mSwatch = swatch; }
// mutator / accessor for original RGB value
void setOrigRgb ( F32 origRIn, F32 origGIn, F32 origBIn );