summaryrefslogtreecommitdiff
path: root/indra/newview/llviewermenufile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llviewermenufile.cpp')
-rw-r--r--indra/newview/llviewermenufile.cpp33
1 files changed, 25 insertions, 8 deletions
diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp
index e4525609c2..8160a3a139 100644
--- a/indra/newview/llviewermenufile.cpp
+++ b/indra/newview/llviewermenufile.cpp
@@ -135,18 +135,35 @@ void LLFilePickerThread::getFile()
//virtual
void LLFilePickerThread::run()
{
- LLFilePicker picker;
#if LL_WINDOWS
- if (picker.getOpenFile(mFilter, false))
+ bool blocking = false;
+#else
+ bool blocking = true; // modal
+#endif
+
+ LLFilePicker picker;
+
+ if (mIsSaveDialog)
{
- mFile = picker.getFirstFile();
+ if (picker.getSaveFile(mSaveFilter, mProposedName, blocking))
+ {
+ mResponses.push_back(picker.getFirstFile());
+ }
}
-#else
- if (picker.getOpenFile(mFilter, true))
+ else
{
- mFile = picker.getFirstFile();
+ bool result = mIsGetMultiple ? picker.getMultipleOpenFiles(mLoadFilter, blocking) : picker.getOpenFile(mLoadFilter, blocking);
+ if (result)
+ {
+ std::string filename = picker.getFirstFile(); // consider copying mFiles directly
+ do
+ {
+ mResponses.push_back(filename);
+ filename = picker.getNextFile();
+ }
+ while (mIsGetMultiple && !filename.empty());
+ }
}
-#endif
{
LLMutexLock lock(sMutex);
@@ -179,7 +196,7 @@ void LLFilePickerThread::clearDead()
while (!sDeadQ.empty())
{
LLFilePickerThread* thread = sDeadQ.front();
- thread->notify(thread->mFile);
+ thread->notify(thread->mResponses);
delete thread;
sDeadQ.pop();
}