Fix cancelling "Save" while "Keep open after save" is unchecked.

This causes a failure to save local file, or when clicking
Cancel in the file chooser, to keep the image and keep the
snapshot floater open so a retry to save the image can be
attempted.
This commit is contained in:
Aleric Inglewood
2012-11-26 20:41:10 +01:00
parent 7faa19b297
commit d7069a2a66
3 changed files with 85 additions and 7 deletions

View File

@@ -167,6 +167,9 @@ public:
LLFloaterPostcard* savePostcard();
void saveTexture();
void saveLocal();
void saveLocalDone(bool success);
void close(LLFloaterSnapshot* view);
void doCloseAfterSave();
BOOL setThumbnailImageSize() ;
void generateThumbnailImage(BOOL force_update = FALSE) ;
@@ -222,6 +225,10 @@ private:
BOOL mSnapshotActive;
LLViewerWindow::ESnapshotType mSnapshotBufferType;
bool mCallbackHappened;
bool mSaveLocalSuccessful;
LLFloaterSnapshot* mCloseCalled;
public:
static std::set<LLSnapshotLivePreview*> sList;
BOOL mKeepAspectRatio ;
@@ -1116,13 +1123,61 @@ void LLSnapshotLivePreview::saveTexture()
void LLSnapshotLivePreview::saveLocal()
{
gViewerWindow->saveImageNumbered(mFormattedImage);
mCallbackHappened = false;
mSaveLocalSuccessful = false;
mCloseCalled = NULL;
gViewerWindow->saveImageNumbered(mFormattedImage); // This calls saveLocalDone() immediately, or later.
}
// Relinquish image memory. Save button will be disabled as a side-effect.
mFormattedImage = NULL;
mFormattedDataSize = 0;
updateSnapshot(FALSE, FALSE);
addUsedBy(SNAPSHOT_LOCAL);
void LLSnapshotLivePreview::close(LLFloaterSnapshot* view)
{
if (getSnapshotType() != LLSnapshotLivePreview::SNAPSHOT_LOCAL)
{
view->close();
}
else
{
mCloseCalled = view;
if (mCallbackHappened)
{
doCloseAfterSave();
}
else
{
view->setEnabled(FALSE);
}
}
}
void LLSnapshotLivePreview::saveLocalDone(bool success)
{
mCallbackHappened = true;
mSaveLocalSuccessful = success;
if (success)
{
// Disable Save button.
addUsedBy(LLSnapshotLivePreview::SNAPSHOT_LOCAL);
}
if (mCloseCalled)
{
doCloseAfterSave();
}
}
void LLSnapshotLivePreview::doCloseAfterSave()
{
if (mSaveLocalSuccessful)
{
// Relinquish image memory.
mFormattedImage = NULL;
mFormattedDataSize = 0;
updateSnapshot(FALSE, FALSE);
mCloseCalled->close();
}
else
{
mCloseCalled->setEnabled(TRUE);
}
}
///----------------------------------------------------------------------------
@@ -1600,6 +1655,17 @@ void LLFloaterSnapshot::Impl::onCommitSave(LLUICtrl* ctrl, void* data)
onClickKeep(data);
}
// Called from LLViewerWindow::saveImageNumbered, LLViewerWindow::saveImageNumbered_continued1 and LLViewerWindow::saveImageNumbered_continued2.
//static
void LLFloaterSnapshot::saveLocalDone(bool success)
{
LLSnapshotLivePreview* previewp = LLFloaterSnapshot::Impl::getPreviewView(sInstance);
if (previewp)
{
previewp->saveLocalDone(success);
}
}
// static
void LLFloaterSnapshot::Impl::onClickKeep(void* data)
{
@@ -1635,7 +1701,7 @@ void LLFloaterSnapshot::Impl::onClickKeep(void* data)
if (gSavedSettings.getBOOL("CloseSnapshotOnKeep"))
{
view->close();
previewp->close(view);
}
else
{

View File

@@ -67,6 +67,8 @@ public:
static S32 getUIWinHeightShort() {return sUIWinHeightShort ;}
static S32 getUIWinWidth() {return sUIWinWidth ;}
static void saveLocalDone(bool success);
private:
class Impl;
Impl& impl;

View File

@@ -3990,6 +3990,7 @@ void LLViewerWindow::saveImageNumbered(LLPointer<LLImageFormatted> image)
{
if (!image)
{
LLFloaterSnapshot::saveLocalDone(false);
return;
}
@@ -4038,6 +4039,10 @@ void LLViewerWindow::saveImageNumbered_continued1(LLPointer<LLImageFormatted> im
saveImageNumbered_continued2(image, extension);
}
else
{
LLFloaterSnapshot::saveLocalDone(false);
}
}
void LLViewerWindow::saveImageNumbered_continued2(LLPointer<LLImageFormatted> image, std::string const& extension)
@@ -4064,6 +4069,11 @@ void LLViewerWindow::saveImageNumbered_continued2(LLPointer<LLImageFormatted> im
if (image->save(filepath))
{
playSnapshotAnimAndSound();
LLFloaterSnapshot::saveLocalDone(true);
}
else
{
LLFloaterSnapshot::saveLocalDone(false);
}
}