diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/cmake/LLWindow.cmake | 2 | ||||
| -rw-r--r-- | indra/cmake/OPENAL.cmake | 1 | ||||
| -rw-r--r-- | indra/linux_crash_logger/llcrashloggerlinux.cpp | 58 | ||||
| -rw-r--r-- | indra/llwindow/llwindowsdl.h | 5 | ||||
| -rw-r--r-- | indra/newview/llappviewer.cpp | 24 | ||||
| -rw-r--r-- | indra/newview/lldirpicker.cpp | 43 | ||||
| -rw-r--r-- | indra/newview/llfilepicker.cpp | 711 | ||||
| -rw-r--r-- | indra/newview/llfilepicker.h | 51 | 
8 files changed, 267 insertions, 628 deletions
| diff --git a/indra/cmake/LLWindow.cmake b/indra/cmake/LLWindow.cmake index 6c7b70461f..23f4115aeb 100644 --- a/indra/cmake/LLWindow.cmake +++ b/indra/cmake/LLWindow.cmake @@ -16,5 +16,5 @@ if (LINUX)    #target_link_libraries( ll::SDL INTERFACE SDL2::SDL2 SDL2::SDL2main X11)    use_prebuilt_binary(SDL2) -  target_link_libraries( ll::SDL INTERFACE SDL2 sndio X11) +  target_link_libraries( ll::SDL INTERFACE SDL2 X11)  endif (LINUX) diff --git a/indra/cmake/OPENAL.cmake b/indra/cmake/OPENAL.cmake index 0b6a7c2853..6a28846029 100644 --- a/indra/cmake/OPENAL.cmake +++ b/indra/cmake/OPENAL.cmake @@ -31,6 +31,7 @@ if (USE_OPENAL)      target_link_libraries( ll::openal INTERFACE              openal              alut +            sndio              )    else()      message(FATAL_ERROR "OpenAL is not available for this platform") diff --git a/indra/linux_crash_logger/llcrashloggerlinux.cpp b/indra/linux_crash_logger/llcrashloggerlinux.cpp index 4092d43fc5..22182d32a4 100644 --- a/indra/linux_crash_logger/llcrashloggerlinux.cpp +++ b/indra/linux_crash_logger/llcrashloggerlinux.cpp @@ -1,25 +1,25 @@ -/**  +/**   * @file llcrashloggerlinux.cpp   * @brief Linux crash logger implementation   *   * $LicenseInfo:firstyear=2003&license=viewerlgpl$   * Second Life Viewer Source Code   * Copyright (C) 2010, Linden Research, Inc. - *  + *   * This library is free software; you can redistribute it and/or   * modify it under the terms of the GNU Lesser General Public   * License as published by the Free Software Foundation;   * version 2.1 of the License only. - *  + *   * This library is distributed in the hope that it will be useful,   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   * Lesser General Public License for more details. - *  + *   * You should have received a copy of the GNU Lesser General Public   * License along with this library; if not, write to the Free Software   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  + *   * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA   * $/LicenseInfo$   */ @@ -38,9 +38,6 @@  #include "lldir.h"  #include "llsdserialize.h" -#if LL_GTK -# include "gtk/gtk.h" -#endif // LL_GTK  #define MAX_LOADSTRING 100 @@ -54,52 +51,9 @@ static const char dialog_text[] =  static const char dialog_title[] =  "Second Life Crash Logger"; -#if LL_GTK -static void response_callback (GtkDialog *dialog, -			       gint       arg1, -			       gpointer   user_data) -{ -	gint *response = (gint*)user_data; -	*response = arg1; -	gtk_widget_destroy(GTK_WIDGET(dialog)); -	gtk_main_quit(); -} -#endif // LL_GTK -  static BOOL do_ask_dialog(void)  { -#if LL_GTK -	gtk_disable_setlocale(); -	if (!gtk_init_check(NULL, NULL)) { -		LL_INFOS() << "Could not initialize GTK for 'ask to send crash report' dialog; not sending report." << LL_ENDL; -		return FALSE; -	} -	 -	GtkWidget *win = NULL; -	GtkDialogFlags flags = GTK_DIALOG_MODAL; -	GtkMessageType messagetype = GTK_MESSAGE_QUESTION; -	GtkButtonsType buttons = GTK_BUTTONS_YES_NO; -	gint response = GTK_RESPONSE_NONE; - -	win = gtk_message_dialog_new(NULL, -				     flags, messagetype, buttons, -				     "%s", dialog_text); -	gtk_window_set_type_hint(GTK_WINDOW(win), -				 GDK_WINDOW_TYPE_HINT_DIALOG); -	gtk_window_set_title(GTK_WINDOW(win), dialog_title); -	g_signal_connect (win, -			  "response",  -			  G_CALLBACK (response_callback), -			  &response); -	gtk_widget_show_all (win); -	gtk_main(); - -	return (GTK_RESPONSE_OK == response || -		GTK_RESPONSE_YES == response || -		GTK_RESPONSE_APPLY == response); -#else -	return FALSE; -#endif // LL_GTK +	// Ask to send crash report. Yes/No dialog.  }  LLCrashLoggerLinux::LLCrashLoggerLinux(void) diff --git a/indra/llwindow/llwindowsdl.h b/indra/llwindow/llwindowsdl.h index 74b9ff026c..e922ce592c 100644 --- a/indra/llwindow/llwindowsdl.h +++ b/indra/llwindow/llwindowsdl.h @@ -191,11 +191,6 @@ public:      void (*Unlock_Display)(void); -#if LL_GTK -    // Lazily initialize and check the runtime GTK version for goodness. -    static bool ll_try_gtk_init(void); -#endif // LL_GTK -  #if LL_X11      static Window get_SDL_XWindowID(void); diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index eb1110a457..21eb41e2b7 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -108,7 +108,7 @@  #include "llscenemonitor.h"  #include "llavatarrenderinfoaccountant.h"  #include "lllocalbitmaps.h" -#include "llperfstats.h"  +#include "llperfstats.h"  #include "llgltfmateriallist.h"  // Linden library includes @@ -264,10 +264,6 @@ using namespace LL;  // define a self-registering event API object  #include "llappviewerlistener.h" -#if LL_LINUX && LL_GTK -#include "glib.h" -#endif // (LL_LINUX) && LL_GTK -  #if LL_MSVC  // disable boost::lexical_cast warning  #pragma warning (disable:4702) @@ -564,7 +560,7 @@ static void settings_to_globals()  	gDebugWindowProc = gSavedSettings.getBOOL("DebugWindowProc");  	gShowObjectUpdates = gSavedSettings.getBOOL("ShowObjectUpdates");      LLWorldMapView::setScaleSetting(gSavedSettings.getF32("MapScale")); -	 +  #if LL_DARWIN      LLWindowMacOSX::sUseMultGL = gSavedSettings.getBOOL("RenderAppleUseMultGL");  	gHiDPISupport = gSavedSettings.getBOOL("RenderHiDPI"); @@ -1344,7 +1340,7 @@ bool LLAppViewer::frame()  		}  	}  	else -	{  +	{  		try  		{  			ret = doFrame(); @@ -1755,7 +1751,7 @@ bool LLAppViewer::cleanup()  	LLViewerCamera::deleteSingleton();  	LL_INFOS() << "Viewer disconnected" << LL_ENDL; -	 +  	if (gKeyboard)  	{  		gKeyboard->resetKeys(); @@ -2214,7 +2210,7 @@ bool LLAppViewer::initThreads()      }      // The only configurable thread count right now is ImageDecode -    // The viewer typically starts around 8 threads not including image decode,  +    // The viewer typically starts around 8 threads not including image decode,      // so try to leave at least one core free      S32 image_decode_count = llclamp(cores - 9, 1, 8);      threadCounts["ImageDecode"] = image_decode_count; @@ -2290,7 +2286,7 @@ void LLAppViewer::initLoggingAndGetLastDuration()      if (mSecondInstance)      {          LLFile::mkdir(gDirUtilp->getDumpLogsDirPath()); -  +          LLUUID uid;          uid.generate();          LLError::logToFile(gDirUtilp->getDumpLogsDirPath(uid.asString() + ".log")); @@ -4211,8 +4207,8 @@ bool LLAppViewer::initCache()      const F64 disk_cache_percent = gSavedSettings.getF32("DiskCachePercentOfTotal");      const F64 texture_cache_percent = 100.0 - disk_cache_percent; -    // note that the maximum size of this cache is defined as a percentage of the  -    // total cache size - the 'CacheSize' pref - for all caches.  +    // note that the maximum size of this cache is defined as a percentage of the +    // total cache size - the 'CacheSize' pref - for all caches.      const uintmax_t disk_cache_size = uintmax_t(cache_total_size * disk_cache_percent / 100);  	const bool enable_cache_debug_info = gSavedSettings.getBOOL("EnableDiskCacheDebugInfo"); @@ -4226,7 +4222,7 @@ bool LLAppViewer::initCache()  			gSavedSettings.setS32("LocalCacheVersion", LLAppViewer::getTextureCacheVersion());              //texture cache version was bumped up in Simple Cache Viewer, and at this point old vfs files are not needed -            remove_vfs_files = true;    +            remove_vfs_files = true;  		}  	} @@ -4283,7 +4279,7 @@ bool LLAppViewer::initCache()          {              LLDiskCache::getInstance()->removeOldVFSFiles();          } -         +          if (mPurgeCache)  		{  		LLSplashScreen::update(LLTrans::getString("StartupClearingCache")); diff --git a/indra/newview/lldirpicker.cpp b/indra/newview/lldirpicker.cpp index e541d2ab00..d1c251bfc1 100644 --- a/indra/newview/lldirpicker.cpp +++ b/indra/newview/lldirpicker.cpp @@ -1,25 +1,25 @@ -/**  +/**   * @file lldirpicker.cpp   * @brief OS-specific file picker   *   * $LicenseInfo:firstyear=2001&license=viewerlgpl$   * Second Life Viewer Source Code   * Copyright (C) 2010, Linden Research, Inc. - *  + *   * This library is free software; you can redistribute it and/or   * modify it under the terms of the GNU Lesser General Public   * License as published by the Free Software Foundation;   * version 2.1 of the License only. - *  + *   * This library is distributed in the hope that it will be useful,   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   * Lesser General Public License for more details. - *  + *   * You should have received a copy of the GNU Lesser General Public   * License along with this library; if not, write to the Free Software   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  + *   * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA   * $/LicenseInfo$   */ @@ -59,7 +59,7 @@ LLDirPicker LLDirPicker::sInstance;  // Implementation  // -// utility function to check if access to local file system via file browser  +// utility function to check if access to local file system via file browser  // is enabled and if not, tidy up and indicate we're not allowed to do this.  bool LLDirPicker::check_local_file_access_enabled()  { @@ -111,7 +111,7 @@ BOOL LLDirPicker::getDir(std::string* filename, bool blocking)  	BOOL success = FALSE; -	 +  	if (blocking)  	{  		// Modal, so pause agent @@ -182,7 +182,7 @@ void LLDirPicker::reset()  BOOL LLDirPicker::getDir(std::string* filename, bool blocking)  {      LLFilePicker::ELoadFilter filter=LLFilePicker::FFLOAD_DIRECTORY; -     +      return mFilePicker->getOpenFile(filter, true);  } @@ -231,26 +231,7 @@ BOOL LLDirPicker::getDir(std::string* filename, bool blocking)  		return FALSE;  	} -#ifndef LL_FLTK -#if !LL_MESA_HEADLESS - -	if (mFilePicker) -	{ -		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()); -		} -	} -#endif // !LL_MESA_HEADLESS - -	return FALSE; -#else +#ifdef LL_FLTK      gViewerWindow->getWindow()->beforeDialog();  	Fl_Native_File_Chooser flDlg;  	flDlg.title(LLTrans::getString("choose_the_directory").c_str()); @@ -286,7 +267,7 @@ std::string LLDirPicker::getDirName()  #else // not implemented -LLDirPicker::LLDirPicker()  +LLDirPicker::LLDirPicker()  {  	reset();  } @@ -325,7 +306,7 @@ void LLDirPickerThread::getFile()  #endif  } -//virtual  +//virtual  void LLDirPickerThread::run()  {  #if LL_WINDOWS @@ -339,7 +320,7 @@ void LLDirPickerThread::run()  	if (picker.getDir(&mProposedName, blocking))  	{  		mResponses.push_back(picker.getDirName()); -	}	 +	}  	{  		LLMutexLock lock(sMutex); diff --git a/indra/newview/llfilepicker.cpp b/indra/newview/llfilepicker.cpp index 7ca212e062..3704a5253c 100644 --- a/indra/newview/llfilepicker.cpp +++ b/indra/newview/llfilepicker.cpp @@ -1,25 +1,25 @@ -/**  +/**   * @file llfilepicker.cpp   * @brief OS-specific file picker   *   * $LicenseInfo:firstyear=2001&license=viewerlgpl$   * Second Life Viewer Source Code   * Copyright (C) 2010, Linden Research, Inc. - *  + *   * This library is free software; you can redistribute it and/or   * modify it under the terms of the GNU Lesser General Public   * License as published by the Free Software Foundation;   * version 2.1 of the License only. - *  + *   * This library is distributed in the hope that it will be useful,   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   * Lesser General Public License for more details. - *  + *   * You should have received a copy of the GNU Lesser General Public   * License along with this library; if not, write to the Free Software   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  + *   * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA   * $/LicenseInfo$   */ @@ -40,6 +40,11 @@  #include "llwindowsdl.h" // for some X/GTK utils to help with filepickers  #endif // LL_SDL +#ifdef LL_FLTK +  #include "FL/Fl.H" +  #include "FL/Fl_Native_File_Chooser.H" +#endif +  #if LL_LINUX  #include "llhttpconstants.h"    // file picker uses some of thes constants on Linux  #endif @@ -112,7 +117,7 @@ LLFilePicker::~LLFilePicker()  	// nothing  } -// utility function to check if access to local file system via file browser  +// utility function to check if access to local file system via file browser  // is enabled and if not, tidy up and indicate we're not allowed to do this.  bool LLFilePicker::check_local_file_access_enabled()  { @@ -267,7 +272,7 @@ BOOL LLFilePicker::getOpenFile(ELoadFilter filter, bool blocking)  	mOFN.nFilterIndex = 1;  	setupFilter(filter); -	 +  	if (blocking)  	{  		// Modal, so pause agent @@ -275,7 +280,7 @@ BOOL LLFilePicker::getOpenFile(ELoadFilter filter, bool blocking)  	}  	reset(); -	 +  	// NOTA BENE: hitting the file dialog triggers a window focus event, destroying the selection manager!!  	success = GetOpenFileName(&mOFN);  	if (success) @@ -290,7 +295,7 @@ BOOL LLFilePicker::getOpenFile(ELoadFilter filter, bool blocking)  		// Account for the fact that the app has been stalled.  		LLFrameTimer::updateFrameTime();  	} -	 +  	return success;  } @@ -476,7 +481,7 @@ BOOL LLFilePicker::getSaveFile(ESaveFilter filter, const std::string& filename,  			L"Targa Images (*.tga)\0*.tga\0" \  			L"\0";  		break; -		 +  	case FFSAVE_JPEG:  		if (filename.empty())  		{ @@ -569,7 +574,7 @@ BOOL LLFilePicker::getSaveFile(ESaveFilter filter, const std::string& filename,  		return FALSE;  	} -  +  	mOFN.nMaxFile = SINGLE_FILENAME_BUFFER_SIZE;  	mOFN.Flags = OFN_OVERWRITEPROMPT | OFN_NOCHANGEDIR | OFN_PATHMUSTEXIST; @@ -696,11 +701,11 @@ bool	LLFilePicker::doNavChooseDialog(ELoadFilter filter)  	{  		return false;  	} -     +  	gViewerWindow->getWindow()->beforeDialog(); -     +      std::unique_ptr<std::vector<std::string>> allowed_types = navOpenFilterProc(filter); -     +      std::unique_ptr<std::vector<std::string>> filev  = doLoadDialog(allowed_types.get(),                                                      mPickOptions); @@ -712,7 +717,7 @@ bool	LLFilePicker::doNavChooseDialog(ELoadFilter filter)          mFiles.insert(mFiles.end(), filev->begin(), filev->end());          return true;      } -	 +  	return false;  } @@ -725,14 +730,14 @@ bool    LLFilePicker::doNavChooseDialogModeless(ELoadFilter filter,      {          return false;      } -     +      std::unique_ptr<std::vector<std::string>> allowed_types=navOpenFilterProc(filter); -     +      doLoadDialogModeless(allowed_types.get(),                                                      mPickOptions,                                                      callback,                                                      userdata); -     +      return true;  } @@ -786,13 +791,13 @@ void set_nav_save_data(LLFilePicker::ESaveFilter filter, std::string &extension,              creator = "\?\?\?\?";              extension = "glb";              break; -             +          case LLFilePicker::FFSAVE_XML:              type = "\?\?\?\?";              creator = "\?\?\?\?";              extension = "xml";              break; -             +          case LLFilePicker::FFSAVE_RAW:              type = "\?\?\?\?";              creator = "\?\?\?\?"; @@ -804,13 +809,13 @@ void set_nav_save_data(LLFilePicker::ESaveFilter filter, std::string &extension,              creator = "prvw";              extension = "j2c";              break; -         +          case LLFilePicker::FFSAVE_SCRIPT:              type = "LSL ";              creator = "\?\?\?\?";              extension = "lsl";              break; -         +          case LLFilePicker::FFSAVE_ALL:          default:              type = "\?\?\?\?"; @@ -824,16 +829,16 @@ bool	LLFilePicker::doNavSaveDialog(ESaveFilter filter, const std::string& filena  {  	// Setup the type, creator, and extension      std::string		extension, type, creator; -     +      set_nav_save_data(filter, extension, type, creator); -	 +      std::string namestring = filename;      if (namestring.empty()) namestring="Untitled"; -     +  	gViewerWindow->getWindow()->beforeDialog();  	// Run the dialog -    std::unique_ptr<std::string> filev = doSaveDialog(&namestring,  +    std::unique_ptr<std::string> filev = doSaveDialog(&namestring,                   &type,                   &creator,                   &extension, @@ -846,7 +851,7 @@ bool	LLFilePicker::doNavSaveDialog(ESaveFilter filter, const std::string& filena          mFiles.push_back(*filev);  		return true;      } -	 +  	return false;  } @@ -857,9 +862,9 @@ bool    LLFilePicker::doNavSaveDialogModeless(ESaveFilter filter,  {      // Setup the type, creator, and extension      std::string        extension, type, creator; -     +      set_nav_save_data(filter, extension, type, creator); -     +      std::string namestring = filename;      if (namestring.empty()) namestring="Untitled"; @@ -888,11 +893,11 @@ BOOL LLFilePicker::getOpenFile(ELoadFilter filter, bool blocking)  	}  	reset(); -	 +      mPickOptions &= ~F_MULTIPLE;      mPickOptions |= F_FILE; -  -    if (filter == FFLOAD_DIRECTORY) //This should only be called from lldirpicker.  + +    if (filter == FFLOAD_DIRECTORY) //This should only be called from lldirpicker.      {          mPickOptions |= ( F_NAV_SUPPORT | F_DIRECTORY ); @@ -903,7 +908,7 @@ BOOL LLFilePicker::getOpenFile(ELoadFilter filter, bool blocking)  	{          mPickOptions |= F_NAV_SUPPORT;  	} -	 +  	if (blocking) // always true for linux/mac  	{  		// Modal, so pause agent @@ -912,7 +917,7 @@ BOOL LLFilePicker::getOpenFile(ELoadFilter filter, bool blocking)  	success = doNavChooseDialog(filter); -		 +  	if (success)  	{  		if (!getFileCount()) @@ -944,10 +949,10 @@ BOOL LLFilePicker::getOpenFileModeless(ELoadFilter filter,      }      reset(); -     +      mPickOptions &= ~F_MULTIPLE;      mPickOptions |= F_FILE; -  +      if (filter == FFLOAD_DIRECTORY) //This should only be called from lldirpicker.      { @@ -973,11 +978,11 @@ BOOL LLFilePicker::getMultipleOpenFiles(ELoadFilter filter, bool blocking)  	{  		return FALSE;  	} -     +      BOOL success = FALSE;  	reset(); -     +      mPickOptions |= F_FILE;      mPickOptions |= F_MULTIPLE; @@ -1023,7 +1028,7 @@ BOOL LLFilePicker::getMultipleOpenFilesModeless(ELoadFilter filter,      }      reset(); -     +      mPickOptions |= F_FILE;      mPickOptions |= F_MULTIPLE; @@ -1045,7 +1050,7 @@ BOOL LLFilePicker::getSaveFile(ESaveFilter filter, const std::string& filename,  	}  	reset(); -	 +      mPickOptions &= ~F_MULTIPLE;  	if (blocking) @@ -1079,7 +1084,7 @@ BOOL LLFilePicker::getSaveFileModeless(ESaveFilter filter,  {      if( mLocked )          return false; -     +      // if local file browsing is turned off, return without opening dialog      if ( check_local_file_access_enabled() == false )      { @@ -1087,7 +1092,7 @@ BOOL LLFilePicker::getSaveFileModeless(ESaveFilter filter,      }      reset(); -     +      mPickOptions &= ~F_MULTIPLE;      return doNavSaveDialogModeless(filter, filename, callback, userdata); @@ -1096,488 +1101,228 @@ BOOL LLFilePicker::getSaveFileModeless(ESaveFilter filter,  #elif LL_LINUX -# if LL_GTK - -// static -void LLFilePicker::add_to_selectedfiles(gpointer data, gpointer user_data) -{ -	// We need to run g_filename_to_utf8 in the user's locale -	std::string saved_locale(setlocale(LC_ALL, NULL)); -	setlocale(LC_ALL, ""); - -	LLFilePicker* picker = (LLFilePicker*) user_data; -	GError *error = NULL; -	gchar* filename_utf8 = g_filename_to_utf8((gchar*)data, -						  -1, NULL, NULL, &error); -	if (error) -	{ -		// *FIXME. -		// This condition should really be notified to the user, e.g. -		// through a message box.  Just logging it is inappropriate. -		 -		// g_filename_display_name is ideal, but >= glib 2.6, so: -		// a hand-rolled hacky makeASCII which disallows control chars -		std::string display_name; -		for (const gchar *str = (const gchar *)data; *str; str++) -		{ -			display_name += (char)((*str >= 0x20 && *str <= 0x7E) ? *str : '?'); -		} -		LL_WARNS() << "g_filename_to_utf8 failed on \"" << display_name << "\": " << error->message << LL_ENDL; -	} - -	if (filename_utf8) -	{ -		picker->mFiles.push_back(std::string(filename_utf8)); -		LL_DEBUGS() << "ADDED FILE " << filename_utf8 << LL_ENDL; -		g_free(filename_utf8); -	} +#if LL_FLTK -	setlocale(LC_ALL, saved_locale.c_str()); -} - -// static -void LLFilePicker::chooser_responder(GtkWidget *widget, gint response, gpointer user_data) -{ -	LLFilePicker* picker = (LLFilePicker*)user_data; - -	LL_DEBUGS() << "GTK DIALOG RESPONSE " << response << LL_ENDL; - -	if (response == GTK_RESPONSE_ACCEPT) -	{ -		GSList *file_list = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(widget)); -		g_slist_foreach(file_list, (GFunc)add_to_selectedfiles, user_data); -		g_slist_foreach(file_list, (GFunc)g_free, NULL); -		g_slist_free (file_list); -	} - -	// let's save the extension of the last added file(considering current filter) -	GtkFileFilter *gfilter = gtk_file_chooser_get_filter(GTK_FILE_CHOOSER(widget)); -	if(gfilter) -	{ -		std::string filter = gtk_file_filter_get_name(gfilter); - -		if(filter == LLTrans::getString("png_image_files")) -		{ -			picker->mCurrentExtension = ".png"; -		} -		else if(filter == LLTrans::getString("targa_image_files")) -		{ -			picker->mCurrentExtension = ".tga"; -		} -	} - -	// set the default path for this usage context. -	const char* cur_folder = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(widget)); -	if (cur_folder != NULL) -	{ -		picker->mContextToPathMap[picker->mCurContextName] = cur_folder; -	} - -	gtk_widget_destroy(widget); -	gtk_main_quit(); -} - - -GtkWindow* LLFilePicker::buildFilePicker(bool is_save, bool is_folder, std::string context) -{ -#ifndef LL_MESA_HEADLESS -	if (LLWindowSDL::ll_try_gtk_init()) -	{ -		GtkWidget *win = NULL; -		GtkFileChooserAction pickertype = -			is_save? -			(is_folder? -			 GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER : -			 GTK_FILE_CHOOSER_ACTION_SAVE) : -			(is_folder? -			 GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER : -			 GTK_FILE_CHOOSER_ACTION_OPEN); - -		win = gtk_file_chooser_dialog_new(NULL, NULL, -						  pickertype, -						  GTK_STOCK_CANCEL, -						   GTK_RESPONSE_CANCEL, -						  is_folder ? -						  GTK_STOCK_APPLY : -						  (is_save ?  -						   GTK_STOCK_SAVE : -						   GTK_STOCK_OPEN), -						   GTK_RESPONSE_ACCEPT, -						  (gchar *)NULL); -		mCurContextName = context; - -		// get the default path for this usage context if it's been -		// seen before. -		std::map<std::string,std::string>::iterator -			this_path = mContextToPathMap.find(context); -		if (this_path != mContextToPathMap.end()) -		{ -			gtk_file_chooser_set_current_folder -				(GTK_FILE_CHOOSER(win), -				 this_path->second.c_str()); -		} - -#  if LL_X11 -		// Make GTK tell the window manager to associate this -		// dialog with our non-GTK raw X11 window, which should try -		// to keep it on top etc. -		Window XWindowID = LLWindowSDL::get_SDL_XWindowID(); -		if (None != XWindowID) -		{ -			gtk_widget_realize(GTK_WIDGET(win)); // so we can get its gdkwin -			GdkWindow *gdkwin = gdk_window_foreign_new(XWindowID); -			gdk_window_set_transient_for(GTK_WIDGET(win)->window, -						     gdkwin); -		} -		else -		{ -			LL_WARNS() << "Hmm, couldn't get xwid to use for transient." << LL_ENDL; -		} -#  endif //LL_X11 - -		g_signal_connect (GTK_FILE_CHOOSER(win), -				  "response", -				  G_CALLBACK(LLFilePicker::chooser_responder), -				  this); - -		gtk_window_set_modal(GTK_WINDOW(win), TRUE); - -		/* GTK 2.6: if (is_folder) -			gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER(win), -			TRUE); */ - -		return GTK_WINDOW(win); -	} -	else -	{ -		return NULL; -	} -#else -	return NULL; -#endif //LL_MESA_HEADLESS -} - -static void add_common_filters_to_gtkchooser(GtkFileFilter *gfilter, -					     GtkWindow *picker, -					     std::string filtername) -{	 -	gtk_file_filter_set_name(gfilter, filtername.c_str()); -	gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(picker), -				    gfilter); -	GtkFileFilter *allfilter = gtk_file_filter_new(); -	gtk_file_filter_add_pattern(allfilter, "*"); -	gtk_file_filter_set_name(allfilter, LLTrans::getString("all_files").c_str()); -	gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(picker), allfilter); -	gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(picker), gfilter); -} - -static std::string add_simple_pattern_filter_to_gtkchooser(GtkWindow *picker, -							   std::string pattern, -							   std::string filtername) -{ -	GtkFileFilter *gfilter = gtk_file_filter_new(); -	gtk_file_filter_add_pattern(gfilter, pattern.c_str()); -	add_common_filters_to_gtkchooser(gfilter, picker, filtername); -	return filtername; -} - -static std::string add_simple_mime_filter_to_gtkchooser(GtkWindow *picker, -							std::string mime, -							std::string filtername) +BOOL LLFilePicker::getSaveFileModeless(ESaveFilter filter, +                                       const std::string& filename, +                                       void (*callback)(bool, std::string&, void*), +                                       void *userdata)  { -	GtkFileFilter *gfilter = gtk_file_filter_new(); -	gtk_file_filter_add_mime_type(gfilter, mime.c_str()); -	add_common_filters_to_gtkchooser(gfilter, picker, filtername); -	return filtername; +    LL_ERRS() << "NOT IMPLEMENTED" << LL_ENDL; +    return FALSE;  } -static std::string add_wav_filter_to_gtkchooser(GtkWindow *picker) +BOOL LLFilePicker::getOpenFileModeless(ELoadFilter filter, +                                       void (*callback)(bool, std::vector<std::string> &, void*), +                                       void *userdata)  { -	return add_simple_mime_filter_to_gtkchooser(picker,  "audio/x-wav", -						    LLTrans::getString("sound_files") + " (*.wav)"); +    LL_ERRS() << "NOT IMPLEMENTED" << LL_ENDL; +    return FALSE;  } -static std::string add_anim_filter_to_gtkchooser(GtkWindow *picker) +BOOL LLFilePicker::getMultipleOpenFilesModeless(ELoadFilter filter, +                                                void (*callback)(bool, std::vector<std::string> &, void*), +                                                void *userdata )  { -	GtkFileFilter *gfilter = gtk_file_filter_new(); -	gtk_file_filter_add_pattern(gfilter, "*.bvh"); -	gtk_file_filter_add_pattern(gfilter, "*.anim"); -	std::string filtername = LLTrans::getString("animation_files") + " (*.bvh; *.anim)"; -	add_common_filters_to_gtkchooser(gfilter, picker, filtername); -	return filtername; +    LL_ERRS() << "NOT IMPLEMENTED" << LL_ENDL; +    return FALSE;  } -static std::string add_xml_filter_to_gtkchooser(GtkWindow *picker) -{ -	return add_simple_pattern_filter_to_gtkchooser(picker,  "*.xml", -												   LLTrans::getString("xml_files") + " (*.xml)"); -} -static std::string add_collada_filter_to_gtkchooser(GtkWindow *picker) -{ -	return add_simple_pattern_filter_to_gtkchooser(picker,  "*.dae", -						       LLTrans::getString("scene_files") + " (*.dae)"); -} -static std::string add_imageload_filter_to_gtkchooser(GtkWindow *picker) -{ -	GtkFileFilter *gfilter = gtk_file_filter_new(); -	gtk_file_filter_add_pattern(gfilter, "*.tga"); -	gtk_file_filter_add_mime_type(gfilter, HTTP_CONTENT_IMAGE_JPEG.c_str()); -	gtk_file_filter_add_mime_type(gfilter, HTTP_CONTENT_IMAGE_PNG.c_str()); -	gtk_file_filter_add_mime_type(gfilter, HTTP_CONTENT_IMAGE_BMP.c_str()); -	std::string filtername = LLTrans::getString("image_files") + " (*.tga; *.bmp; *.jpg; *.png)"; -	add_common_filters_to_gtkchooser(gfilter, picker, filtername); -	return filtername; -} -  -static std::string add_script_filter_to_gtkchooser(GtkWindow *picker) +BOOL LLFilePicker::getSaveFile( ESaveFilter filter, const std::string& filename, bool blocking )  { -	return add_simple_mime_filter_to_gtkchooser(picker,  HTTP_CONTENT_TEXT_PLAIN, -							LLTrans::getString("script_files") + " (*.lsl)"); +	return openFileDialog( filter, blocking, eSaveFile );  } -static std::string add_dictionary_filter_to_gtkchooser(GtkWindow *picker) +BOOL LLFilePicker::getOpenFile( ELoadFilter filter, bool blocking )  { -	return add_simple_mime_filter_to_gtkchooser(picker, HTTP_CONTENT_TEXT_PLAIN, -							LLTrans::getString("dictionary_files") + " (*.dic; *.xcu)"); +	return openFileDialog( filter, blocking, eOpenFile );  } -static std::string add_save_texture_filter_to_gtkchooser(GtkWindow *picker) +BOOL LLFilePicker::getMultipleOpenFiles( ELoadFilter filter, bool blocking)  { -	GtkFileFilter *gfilter_tga = gtk_file_filter_new(); -	GtkFileFilter *gfilter_png = gtk_file_filter_new(); - -	gtk_file_filter_add_pattern(gfilter_tga, "*.tga"); -	gtk_file_filter_add_mime_type(gfilter_png, "image/png"); -	std::string caption = LLTrans::getString("save_texture_image_files") + " (*.tga; *.png)"; -	gtk_file_filter_set_name(gfilter_tga, LLTrans::getString("targa_image_files").c_str()); -	gtk_file_filter_set_name(gfilter_png, LLTrans::getString("png_image_files").c_str()); - -	gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(picker), -					gfilter_png); -	gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(picker), -					gfilter_tga); -	return caption; +	return openFileDialog( filter, blocking, eOpenMultiple );  } -BOOL LLFilePicker::getSaveFile( ESaveFilter filter, const std::string& filename, bool blocking ) +bool LLFilePicker::openFileDialog( int32_t filter, bool blocking, EType aType )  { -	BOOL rtn = FALSE; - -	// if local file browsing is turned off, return without opening dialog  	if ( check_local_file_access_enabled() == false ) -	{ -		return FALSE; -	} - +		return false;  	gViewerWindow->getWindow()->beforeDialog(); -  	reset(); -	 -	GtkWindow* picker = buildFilePicker(true, false, "savefile"); - -	if (picker) +	Fl_Native_File_Chooser::Type flType = Fl_Native_File_Chooser::BROWSE_FILE; +	if( aType == eOpenMultiple ) +		flType = Fl_Native_File_Chooser::BROWSE_MULTI_FILE; +	else if( aType == eSaveFile ) +		flType = Fl_Native_File_Chooser::BROWSE_SAVE_FILE; +	Fl_Native_File_Chooser flDlg; +	std::string file_dialog_title; +	std::string file_dialog_filter; +	if (aType == EType::eSaveFile)  	{ -		std::string suggest_name = "untitled"; -		std::string suggest_ext = ""; -		std::string caption = LLTrans::getString("save_file_verb") + " "; -		switch (filter) +		std::string file_type("all_files"); +		switch ((ESaveFilter) filter)  		{ -		case FFSAVE_WAV: -			caption += add_wav_filter_to_gtkchooser(picker); -			suggest_ext = ".wav"; -			break; -		case FFSAVE_TGA: -			caption += add_simple_pattern_filter_to_gtkchooser -				(picker, "*.tga", LLTrans::getString("targa_image_files") + " (*.tga)"); -			suggest_ext = ".tga"; -			break; -		case FFSAVE_BMP: -			caption += add_simple_mime_filter_to_gtkchooser -				(picker, HTTP_CONTENT_IMAGE_BMP, LLTrans::getString("bitmap_image_files") + " (*.bmp)"); -			suggest_ext = ".bmp"; -			break; -		case FFSAVE_PNG: -			caption += add_simple_mime_filter_to_gtkchooser -				(picker, "image/png", LLTrans::getString("png_image_files") + " (*.png)"); -			suggest_ext = ".png"; -			break; -		case FFSAVE_TGAPNG: -			caption += add_save_texture_filter_to_gtkchooser(picker); -			suggest_ext = ".png"; -			break; -		case FFSAVE_AVI: -			caption += add_simple_mime_filter_to_gtkchooser -				(picker, "video/x-msvideo", -				 LLTrans::getString("avi_movie_file") + " (*.avi)"); -			suggest_ext = ".avi"; -			break; -		case FFSAVE_ANIM: -			caption += add_simple_pattern_filter_to_gtkchooser -				(picker, "*.xaf", LLTrans::getString("xaf_animation_file") + " (*.xaf)"); -			suggest_ext = ".xaf"; -			break; -		case FFSAVE_XML: -			caption += add_simple_pattern_filter_to_gtkchooser -				(picker, "*.xml", LLTrans::getString("xml_file") + " (*.xml)"); -			suggest_ext = ".xml"; -			break; -		case FFSAVE_RAW: -			caption += add_simple_pattern_filter_to_gtkchooser -				(picker, "*.raw", LLTrans::getString("raw_file") + " (*.raw)"); -			suggest_ext = ".raw"; -			break; -		case FFSAVE_J2C: -			// *TODO: Should this be 'image/j2c' ? -			caption += add_simple_mime_filter_to_gtkchooser -				(picker, "images/jp2", -				 LLTrans::getString("compressed_image_files") + " (*.j2c)"); -			suggest_ext = ".j2c"; -			break; -		case FFSAVE_SCRIPT: -			caption += add_script_filter_to_gtkchooser(picker); -			suggest_ext = ".lsl"; -			break; -		default:; -			break; +			case FFSAVE_ALL: +				break; +			case FFSAVE_TGA: +				file_type = "targa_image_files"; +				file_dialog_filter = "*.tga"; +				break; +			case FFSAVE_BMP: +				file_type = "bitmap_image_files"; +				file_dialog_filter = "*.bmp"; +				break; +			case FFSAVE_AVI: +				file_type = "avi_movie_file"; +				file_dialog_filter = "*.avi"; +				break; +			case FFSAVE_ANIM: +				file_type = "xaf_animation_file"; +				file_dialog_filter = "*.xaf"; +				break; +			case FFSAVE_XML: +				file_type = "xml_file"; +				file_dialog_filter = "*.xml"; +				break; +			case FFSAVE_COLLADA: +				file_type = "collada_files"; +				file_dialog_filter = "*.dae"; +				break; +			case FFSAVE_RAW: +				file_type = "raw_file"; +				file_dialog_filter = "*.raw"; +				break; +			case FFSAVE_J2C: +				file_type = "compressed_image_files"; +				file_dialog_filter = "*.j2c"; +				break; +			case FFSAVE_PNG: +				file_type = "png_image_files"; +				file_dialog_filter = "*.png"; +				break; +			case FFSAVE_JPEG: +				file_type = "jpeg_image_files"; +				file_dialog_filter = "*.{jpg,jpeg}"; +				break; +			case FFSAVE_SCRIPT: +				file_type = "script_files"; +				file_dialog_filter = "*.lsl"; +				break; +			case FFSAVE_TGAPNG: +				file_type = "save_texture_image_files"; +				file_dialog_filter = "*.{tga,png}"; +				break; +			case FFSAVE_WAV: +				file_type = "sound_files"; +				file_dialog_filter = "*.wav"; +				break; +			case FFSAVE_GLTF: +				file_type = "gltf_asset_file"; +				file_dialog_filter = "*.{gltf,glb}"; +				break;  		} -		 -		gtk_window_set_title(GTK_WINDOW(picker), caption.c_str()); - -		if (filename.empty()) +		file_dialog_title = LLTrans::getString("save_file_verb") + " " + LLTrans::getString(file_type); +		file_dialog_filter = LLTrans::getString(file_type) + " \t" + file_dialog_filter; +	} +	else +	{ +		std::string file_type("all_files"); +		switch ((ELoadFilter) filter)  		{ -			suggest_name += suggest_ext; +			case FFLOAD_ALL: +				break; +			case FFLOAD_WAV: +				file_type = "sound_files"; +				file_dialog_filter = "*.wav"; +				break; +			case FFLOAD_IMAGE: +				file_type = "image_files"; +				file_dialog_filter = "*.{tga,bmp,jpg,jpeg,png}"; +				break; +			case FFLOAD_ANIM: +				file_type = "animation_files"; +				file_dialog_filter = "*.{bvh,anim}"; +				break; +			case FFLOAD_XML: +				file_type = "xml_file"; +				file_dialog_filter = "*.xml"; +				break; +			case FFLOAD_SLOBJECT: +				file_type = "xml_file"; +				file_dialog_filter = "*.slobject"; +				break; +			case FFLOAD_RAW: +				file_type = "raw_file"; +				file_dialog_filter = "*.raw"; +				break; +			case FFLOAD_MODEL: +			case FFLOAD_COLLADA: +				file_type = "collada_files"; +				file_dialog_filter = "*.dae"; +				break; +			case FFLOAD_SCRIPT: +				file_type = "script_files"; +				file_dialog_filter = "*.lsl"; +				break; +			case FFLOAD_DICTIONARY: +				file_type = "dictionary_files"; +				file_dialog_filter = "*.{dic,xcu}"; +				break; +			case FFLOAD_DIRECTORY: +				file_type = "choose_the_directory"; +				break; +			case FFLOAD_EXE: +				file_type = "executable_files"; +				break; +			case FFLOAD_GLTF: +			case FFLOAD_MATERIAL: +				file_type = "gltf_asset_file"; +				file_dialog_filter = "*.{gltg,glb}"; +				break; +			case FFLOAD_MATERIAL_TEXTURE: +				file_dialog_filter = "*.{gltf,glb,tga,bmp,jpg,jpeg,png}"; +				file_type = "image_files"; -			gtk_file_chooser_set_current_name -				(GTK_FILE_CHOOSER(picker), -				 suggest_name.c_str());  		} -		else +		if (aType == EType::eOpenMultiple)  		{ -			gtk_file_chooser_set_current_name -				(GTK_FILE_CHOOSER(picker), filename.c_str()); +			file_dialog_title = LLTrans::getString("load_files");  		} - -		gtk_widget_show_all(GTK_WIDGET(picker)); - -		gtk_main(); - -		rtn = (getFileCount() == 1); - -		if(rtn && filter == FFSAVE_TGAPNG) +		else  		{ -			std::string selected_file = mFiles.back(); -			mFiles.pop_back(); -			mFiles.push_back(selected_file + mCurrentExtension); +			file_dialog_title = LLTrans::getString("load_file_verb") + " " + LLTrans::getString(file_type); +			file_dialog_filter = LLTrans::getString(file_type) + " \t" + file_dialog_filter;  		}  	} - -	gViewerWindow->getWindow()->afterDialog(); - -	return rtn; -} - -BOOL LLFilePicker::getOpenFile( ELoadFilter filter, bool blocking ) -{ -	BOOL rtn = FALSE; - -	// if local file browsing is turned off, return without opening dialog -	if ( check_local_file_access_enabled() == false ) +	flDlg.title(file_dialog_title.c_str()); +	flDlg.type(flType); +	if (!file_dialog_filter.empty())  	{ -		return FALSE; +		flDlg.filter(file_dialog_filter.c_str());  	} - -	gViewerWindow->getWindow()->beforeDialog(); - -	reset(); -	 -	GtkWindow* picker = buildFilePicker(false, false, "openfile"); - -	if (picker) +	int res = flDlg.show(); +	gViewerWindow->getWindow()->afterDialog(); +	if( res == 0 )  	{ -		std::string caption = LLTrans::getString("load_file_verb") + " "; -		std::string filtername = ""; -		switch (filter) +		int32_t count = flDlg.count(); +		if( count < 0 ) +			count = 0; +		for( int32_t i = 0; i < count; ++i )  		{ -		case FFLOAD_WAV: -			filtername = add_wav_filter_to_gtkchooser(picker); -			break; -		case FFLOAD_ANIM: -			filtername = add_anim_filter_to_gtkchooser(picker); -			break; -		case FFLOAD_XML: -			filtername = add_xml_filter_to_gtkchooser(picker); -			break; -        case FFLOAD_GLTF: -            filtername = dead_code_should_blow_up_here(picker); -            break; -        case FFLOAD_COLLADA: -            filtername = add_collada_filter_to_gtkchooser(picker); -            break; -        case FFLOAD_IMAGE: -			filtername = add_imageload_filter_to_gtkchooser(picker); -			break; -		case FFLOAD_SCRIPT: -			filtername = add_script_filter_to_gtkchooser(picker); -			break; -		case FFLOAD_DICTIONARY: -			filtername = add_dictionary_filter_to_gtkchooser(picker); -			break; -		default:; -			break; +			char const *pFile = flDlg.filename(i); +			if( pFile && strlen(pFile) > 0 ) +				mFiles.push_back( pFile  );  		} - -		caption += filtername; -		 -		gtk_window_set_title(GTK_WINDOW(picker), caption.c_str()); - -		gtk_widget_show_all(GTK_WIDGET(picker)); -		gtk_main(); - -		rtn = (getFileCount() == 1);  	} - -	gViewerWindow->getWindow()->afterDialog(); - -	return rtn; -} - -BOOL LLFilePicker::getMultipleOpenFiles( ELoadFilter filter, bool blocking) -{ -	BOOL rtn = FALSE; - -	// if local file browsing is turned off, return without opening dialog -	if ( check_local_file_access_enabled() == false ) -	{ -		return FALSE; -	} - -	gViewerWindow->getWindow()->beforeDialog(); - -	reset(); -	 -	GtkWindow* picker = buildFilePicker(false, false, "openfile"); - -	if (picker) +	else if( res == -1 )  	{ -		gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER(picker), -						      TRUE); - -		gtk_window_set_title(GTK_WINDOW(picker), LLTrans::getString("load_files").c_str()); - -		gtk_widget_show_all(GTK_WIDGET(picker)); -		gtk_main(); -		rtn = !mFiles.empty(); +		LL_WARNS() << "FLTK failed: " <<  flDlg.errmsg() << LL_ENDL;  	} - -	gViewerWindow->getWindow()->afterDialog(); - -	return rtn; +	return mFiles.empty()?FALSE:TRUE;  } - -# else // LL_GTK - +#else  // Hacky stubs designed to facilitate fake getSaveFile and getOpenFile with  // static results, when we don't have a real filepicker. @@ -1591,7 +1336,7 @@ BOOL LLFilePicker::getSaveFile( ESaveFilter filter, const std::string& filename,  	}  	reset(); -	 +  	LL_INFOS() << "getSaveFile suggested filename is [" << filename  		<< "]" << LL_ENDL;  	if (!filename.empty()) @@ -1621,7 +1366,7 @@ BOOL LLFilePicker::getOpenFile( ELoadFilter filter, bool blocking )  	}  	reset(); -	 +  	// HACK: Static filenames for 'open' until we implement filepicker  	std::string filename = gDirUtilp->getLindenUserDir() + gDirUtilp->getDirDelimiter() + "upload";  	switch (filter) @@ -1665,13 +1410,13 @@ BOOL LLFilePicker::getMultipleOpenFilesModeless(ELoadFilter filter,      return FALSE;  } -#endif // LL_GTK +#endif // LL_FLTK  #else // not implemented  BOOL LLFilePicker::getSaveFile( ESaveFilter filter, const std::string& filename )  { -	reset();	 +	reset();  	return FALSE;  } diff --git a/indra/newview/llfilepicker.h b/indra/newview/llfilepicker.h index 5686627776..5ac473755e 100644 --- a/indra/newview/llfilepicker.h +++ b/indra/newview/llfilepicker.h @@ -1,25 +1,25 @@ -/**  +/**   * @file llfilepicker.h   * @brief OS-specific file picker   *   * $LicenseInfo:firstyear=2001&license=viewerlgpl$   * Second Life Viewer Source Code   * Copyright (C) 2010, Linden Research, Inc. - *  + *   * This library is free software; you can redistribute it and/or   * modify it under the terms of the GNU Lesser General Public   * License as published by the Free Software Foundation;   * version 2.1 of the License only. - *  + *   * This library is distributed in the hope that it will be useful,   * but WITHOUT ANY WARRANTY; without even the implied warranty of   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   * Lesser General Public License for more details. - *  + *   * You should have received a copy of the GNU Lesser General Public   * License along with this library; if not, write to the Free Software   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  + *   * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA   * $/LicenseInfo$   */ @@ -33,12 +33,6 @@  #ifndef LL_LLFILEPICKER_H  #define LL_LLFILEPICKER_H -#if LL_FLTK -  #if LL_GTK -    #undef LL_GTK -  #endif -#endif -  #include "stdtypes.h"  #if LL_DARWIN @@ -60,20 +54,8 @@  #include <commdlg.h>  #endif -extern "C" { -// mostly for Linux, possible on others -#if LL_GTK -# include "gtk/gtk.h" -#error "Direct use of GTK is deprecated" -#endif // LL_GTK -} -  class LLFilePicker  { -#ifdef LL_GTK -	friend class LLDirPicker; -	friend void chooser_responder(GtkWidget *, gint, gpointer); -#endif // LL_GTK  public:  	// calling this before main() is undefined  	static LLFilePicker& instance( void ) { return sInstance; } @@ -150,7 +132,7 @@ public:  	S32 getFileCount() const { return (S32)mFiles.size(); }  	// see lldir.h : getBaseFileName and getDirName to extract base or directory names -	 +  	// clear any lists of buffers or whatever, and make sure the file  	// picker isn't locked.  	void reset(); @@ -163,10 +145,10 @@ private:  		FILENAME_BUFFER_SIZE = 65000  	}; -	// utility function to check if access to local file system via file browser  +	// utility function to check if access to local file system via file browser  	// is enabled and if not, tidy up and indicate we're not allowed to do this.  	bool check_local_file_access_enabled(); -	 +  #if LL_WINDOWS  	OPENFILENAMEW mOFN;				// for open and save dialogs  	WCHAR mFilesW[FILENAME_BUFFER_SIZE]; @@ -177,7 +159,7 @@ private:  #if LL_DARWIN      S32 mPickOptions;  	std::vector<std::string> mFileVector; -	 +  	bool doNavChooseDialog(ELoadFilter filter);  	bool doNavChooseDialogModeless(ELoadFilter filter,                                     void (*callback)(bool, std::vector<std::string>&, void*), @@ -190,15 +172,6 @@ private:                                   void *userdata);  #endif -#if LL_GTK -	static void add_to_selectedfiles(gpointer data, gpointer user_data); -	static void chooser_responder(GtkWidget *widget, gint response, gpointer user_data); -	// we remember the last path that was accessed for a particular usage -	std::map <std::string, std::string> mContextToPathMap; -	std::string mCurContextName; -	// we also remember the extension of the last added file. -	std::string mCurrentExtension; -#endif  #if LL_FLTK      enum EType      { @@ -212,12 +185,6 @@ private:  	bool mLocked;  	static LLFilePicker sInstance; -	 -protected: -#if LL_GTK -        GtkWindow* buildFilePicker(bool is_save, bool is_folder, -				   std::string context = "generic"); -#endif  public:  	// don't call these directly please. | 
