summaryrefslogtreecommitdiff
path: root/indra/newview/lldirpicker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/lldirpicker.cpp')
-rw-r--r--indra/newview/lldirpicker.cpp54
1 files changed, 36 insertions, 18 deletions
diff --git a/indra/newview/lldirpicker.cpp b/indra/newview/lldirpicker.cpp
index 1423ca1b9b..defbbdec25 100644
--- a/indra/newview/lldirpicker.cpp
+++ b/indra/newview/lldirpicker.cpp
@@ -37,10 +37,15 @@
#include "llviewercontrol.h"
#include "llwin32headerslean.h"
-#if LL_LINUX || LL_DARWIN
+#if LL_LINUX || LL_DARWIN || __FreeBSD__
# include "llfilepicker.h"
#endif
+#ifdef LL_FLTK
+ #include "FL/Fl.H"
+ #include "FL/Fl_Native_File_Chooser.H"
+#endif
+
#if LL_WINDOWS
#include <shlobj.h>
#endif
@@ -208,26 +213,34 @@ std::string LLDirPicker::getDirName()
return mFilePicker->getFirstFile();
}
-#elif LL_LINUX
+#elif LL_LINUX || __FreeBSD__
LLDirPicker::LLDirPicker() :
mFileName(NULL),
mLocked(false)
{
+#ifndef LL_FLTK
mFilePicker = new LLFilePicker();
+#endif
reset();
}
LLDirPicker::~LLDirPicker()
{
+#ifndef LL_FLTK
delete mFilePicker;
+#endif
}
void LLDirPicker::reset()
{
+#ifndef LL_FLTK
if (mFilePicker)
mFilePicker->reset();
+#else
+ mDir = "";
+#endif
}
bool LLDirPicker::getDir(std::string* filename, bool blocking)
@@ -240,33 +253,38 @@ bool LLDirPicker::getDir(std::string* filename, bool blocking)
return false;
}
-#if !LL_MESA_HEADLESS
-
- if (mFilePicker)
+#ifdef LL_FLTK
+ gViewerWindow->getWindow()->beforeDialog();
+ Fl_Native_File_Chooser flDlg;
+ flDlg.title(LLTrans::getString("choose_the_directory").c_str());
+ flDlg.type(Fl_Native_File_Chooser::BROWSE_DIRECTORY );
+ int res = flDlg.show();
+ gViewerWindow->getWindow()->afterDialog();
+ if( res == 0 )
{
- GtkWindow* picker = mFilePicker->buildFilePicker(false, true,
- "dirpicker");
-
- if (picker)
- {
- gtk_window_set_title(GTK_WINDOW(picker), LLTrans::getString("choose_the_directory").c_str());
- gtk_widget_show_all(GTK_WIDGET(picker));
- gtk_main();
- return (!mFilePicker->getFirstFile().empty());
- }
+ char const *pDir = flDlg.filename(0);
+ if( pDir )
+ mDir = pDir;
}
-#endif // !LL_MESA_HEADLESS
-
- return false;
+ else if( res == -1 )
+ {
+ LL_WARNS() << "FLTK failed: " << flDlg.errmsg() << LL_ENDL;
+ }
+ return !mDir.empty();
+#endif
}
std::string LLDirPicker::getDirName()
{
+#ifndef LL_FLTK
if (mFilePicker)
{
return mFilePicker->getFirstFile();
}
return "";
+#else
+ return mDir;
+#endif
}
#else // not implemented