diff options
| -rw-r--r-- | indra/llcommon/llstring.cpp | 9 | ||||
| -rw-r--r-- | indra/llui/llbutton.cpp | 7 | ||||
| -rw-r--r-- | indra/llui/llbutton.h | 1 | ||||
| -rw-r--r-- | indra/llui/llspinctrl.cpp | 5 | ||||
| -rw-r--r-- | indra/llui/llspinctrl.h | 1 | ||||
| -rw-r--r-- | indra/llwindow/llwindowmacosx-objc.mm | 5 | ||||
| -rw-r--r-- | indra/media_plugins/webkit/CMakeLists.txt | 10 | ||||
| -rw-r--r-- | indra/media_plugins/webkit/linux_volume_catcher.cpp | 5 | ||||
| -rw-r--r-- | indra/media_plugins/webkit/media_plugin_webkit.cpp | 24 | ||||
| -rw-r--r-- | indra/newview/Info-SecondLife.plist | 48 | ||||
| -rw-r--r-- | indra/newview/llagentwearablesfetch.cpp | 28 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_scrolling_param.xml | 4 | 
12 files changed, 107 insertions, 40 deletions
diff --git a/indra/llcommon/llstring.cpp b/indra/llcommon/llstring.cpp index f14d947734..1561bda201 100644 --- a/indra/llcommon/llstring.cpp +++ b/indra/llcommon/llstring.cpp @@ -994,7 +994,14 @@ void LLStringUtil::formatNumber(std::string& numStr, std::string decimals)  	convertToS32 (decimals, intDecimals);  	if (!sLocale.empty())  	{ -		strStream.imbue (std::locale(sLocale.c_str())); +		// std::locale() throws if the locale is unknown! (EXT-7926) +		try +		{ +			strStream.imbue(std::locale(sLocale.c_str())); +		} catch (const std::exception &) +		{ +			LL_WARNS_ONCE("Locale") << "Cannot set locale to " << sLocale << LL_ENDL; +		}  	}  	if (!intDecimals) diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp index 34f3049f2e..39e46a7ccb 100644 --- a/indra/llui/llbutton.cpp +++ b/indra/llui/llbutton.cpp @@ -1162,3 +1162,10 @@ void LLButton::resetMouseDownTimer()  	mMouseDownTimer.stop();  	mMouseDownTimer.reset();  } + + +BOOL LLButton::handleDoubleClick(S32 x, S32 y, MASK mask) +{ +	// just treat a double click as a second click +	return handleMouseDown(x, y, mask); +} diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h index 9bd566d3c9..d7ab030a47 100644 --- a/indra/llui/llbutton.h +++ b/indra/llui/llbutton.h @@ -152,6 +152,7 @@ public:  	virtual BOOL	handleHover(S32 x, S32 y, MASK mask);  	virtual BOOL	handleRightMouseDown(S32 x, S32 y, MASK mask);  	virtual BOOL	handleRightMouseUp(S32 x, S32 y, MASK mask);	 +	virtual BOOL	handleDoubleClick(S32 x, S32 y, MASK mask);  	virtual void	draw();  	/*virtual*/ BOOL postBuild(); diff --git a/indra/llui/llspinctrl.cpp b/indra/llui/llspinctrl.cpp index c0d02fa8e9..ac0c9c3e45 100644 --- a/indra/llui/llspinctrl.cpp +++ b/indra/llui/llspinctrl.cpp @@ -466,8 +466,3 @@ BOOL LLSpinCtrl::handleKeyHere(KEY key, MASK mask)  	return FALSE;  } -BOOL LLSpinCtrl::handleDoubleClick(S32 x, S32 y, MASK mask) -{ -	// just treat a double click as a second click -	return handleMouseDown(x, y, mask); -} diff --git a/indra/llui/llspinctrl.h b/indra/llui/llspinctrl.h index 06201255d2..00d6f86f83 100644 --- a/indra/llui/llspinctrl.h +++ b/indra/llui/llspinctrl.h @@ -94,7 +94,6 @@ public:  	virtual BOOL	handleScrollWheel(S32 x,S32 y,S32 clicks);  	virtual BOOL	handleKeyHere(KEY key, MASK mask); -	virtual BOOL	handleDoubleClick(S32 x, S32 y, MASK mask);  	void			onEditorCommit(const LLSD& data);  	static void		onEditorGainFocus(LLFocusableElement* caller, void *userdata); diff --git a/indra/llwindow/llwindowmacosx-objc.mm b/indra/llwindow/llwindowmacosx-objc.mm index 59b25e1726..3a822a93a6 100644 --- a/indra/llwindow/llwindowmacosx-objc.mm +++ b/indra/llwindow/llwindowmacosx-objc.mm @@ -49,6 +49,11 @@ void setupCocoa()  	{  		NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; +		// The following prevents the Cocoa command line parser from trying to open 'unknown' arguements as documents. +		// ie. running './secondlife -set Language fr' would cause a pop-up saying can't open document 'fr'  +		// when init'ing the Cocoa App window.		 +		[[NSUserDefaults standardUserDefaults] setObject:@"NO" forKey:@"NSTreatUnknownArgumentsAsOpen"]; +		  		// This is a bit of voodoo taken from the Apple sample code "CarbonCocoa_PictureCursor":  		//   http://developer.apple.com/samplecode/CarbonCocoa_PictureCursor/index.html diff --git a/indra/media_plugins/webkit/CMakeLists.txt b/indra/media_plugins/webkit/CMakeLists.txt index 1a559ed39c..d576638dd7 100644 --- a/indra/media_plugins/webkit/CMakeLists.txt +++ b/indra/media_plugins/webkit/CMakeLists.txt @@ -50,8 +50,10 @@ set(media_plugin_webkit_LINK_LIBRARIES  )  # Select which VolumeCatcher implementation to use -if (LINUX AND PULSEAUDIO) -  list(APPEND media_plugin_webkit_SOURCE_FILES linux_volume_catcher.cpp) +if (LINUX) +  if (PULSEAUDIO) +    list(APPEND media_plugin_webkit_SOURCE_FILES linux_volume_catcher.cpp) +  endif (PULSEAUDIO)    list(APPEND media_plugin_webkit_LINK_LIBRARIES         ${UI_LIBRARIES}     # for glib/GTK         ) @@ -65,10 +67,10 @@ elseif (DARWIN)         )  elseif (WINDOWS)    list(APPEND media_plugin_webkit_SOURCE_FILES windows_volume_catcher.cpp) -else (LINUX AND PULSEAUDIO) +else (LINUX)    # All other platforms use the dummy volume catcher for now.    list(APPEND media_plugin_webkit_SOURCE_FILES dummy_volume_catcher.cpp) -endif (LINUX AND PULSEAUDIO) +endif (LINUX)  set_source_files_properties(${media_plugin_webkit_HEADER_FILES}                              PROPERTIES HEADER_FILE_ONLY TRUE) diff --git a/indra/media_plugins/webkit/linux_volume_catcher.cpp b/indra/media_plugins/webkit/linux_volume_catcher.cpp index 2e7fda865e..5eaef0e1c3 100644 --- a/indra/media_plugins/webkit/linux_volume_catcher.cpp +++ b/indra/media_plugins/webkit/linux_volume_catcher.cpp @@ -47,6 +47,7 @@  extern "C" {  #include <glib.h> +#include <glib-object.h>  #include <pulse/introspect.h>  #include <pulse/context.h> @@ -220,6 +221,10 @@ void VolumeCatcherImpl::init()  	mGotSyms = loadsyms("libpulse-mainloop-glib.so.0");  	if (!mGotSyms) return; +	// better make double-sure glib itself is initialized properly. +	if (!g_thread_supported ()) g_thread_init (NULL); +	g_type_init(); +  	mMainloop = llpa_glib_mainloop_new(g_main_context_default());  	if (mMainloop)  	{ diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp index 6990354486..3b00edec4e 100644 --- a/indra/media_plugins/webkit/media_plugin_webkit.cpp +++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp @@ -46,6 +46,10 @@  // set to 1 if you're using the version of llqtwebkit that's QPixmap-ified  #if LL_LINUX  # define LL_QTWEBKIT_USES_PIXMAPS 0 +extern "C" { +# include <glib.h> +# include <glib-object.h> +}  #else  # define LL_QTWEBKIT_USES_PIXMAPS 0  #endif // LL_LINUX @@ -60,7 +64,7 @@  #endif  #if LL_WINDOWS -	// *NOTE:Mani - This captures the module handle fo rthe dll. This is used below +	// *NOTE:Mani - This captures the module handle for the dll. This is used below  	// to get the path to this dll for webkit initialization.  	// I don't know how/if this can be done with apr...  	namespace {	HMODULE gModuleHandle;}; @@ -129,6 +133,16 @@ private:  	//  	void update(int milliseconds)  	{ +#if LL_QTLINUX_DOESNT_HAVE_GLIB +		// pump glib generously, as Linux browser plugins are on the +		// glib main loop, even if the browser itself isn't - ugh +		// This is NOT NEEDED if Qt itself was built with glib +		// mainloop integration. +		GMainContext *mainc = g_main_context_default(); +		while(g_main_context_iteration(mainc, FALSE)); +#endif // LL_QTLINUX_DOESNT_HAVE_GLIB + +		// pump qt  		LLQtWebKit::getInstance()->pump( milliseconds );  		mVolumeCatcher.pump(); @@ -200,6 +214,14 @@ private:  		}  		std::string application_dir = std::string( cwd ); +#if LL_LINUX +		// take care to initialize glib properly, because some +		// versions of Qt don't, and we indirectly need it for (some +		// versions of) Flash to not crash the browser. +		if (!g_thread_supported ()) g_thread_init (NULL); +		g_type_init(); +#endif +  #if LL_DARWIN  		// When running under the Xcode debugger, there's a setting called "Break on Debugger()/DebugStr()" which defaults to being turned on.  		// This causes the environment variable USERBREAK to be set to 1, which causes these legacy calls to break into the debugger. diff --git a/indra/newview/Info-SecondLife.plist b/indra/newview/Info-SecondLife.plist index 97e24a0bd5..9bc95f9b95 100644 --- a/indra/newview/Info-SecondLife.plist +++ b/indra/newview/Info-SecondLife.plist @@ -1,5 +1,5 @@  <?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  <plist version="1.0">  <dict>  	<key>CFBundleDevelopmentRegion</key> @@ -18,33 +18,33 @@  	<string>APPL</string>  	<key>CFBundleSignature</key>  	<string>????</string> -        <key>CFBundleDocumentTypes</key> -        <array> -                <dict> -                        <key>CFBundleTypeExtensions</key> -                        <array> -                                <string>slurl</string> -                        </array> -                        <key>CFBundleTypeIconFile</key> -                        <string>seconlife</string> -                        <key>CFBundleTypeMIMETypes</key> -                        <array> -                                <string>application/x-grid-location-info</string> -                        </array> -                        <key>CFBundleTypeName</key> -                        <string>Secondlife SLURL</string> +	<key>CFBundleDocumentTypes</key> +	<array> +		<dict> +			<key>CFBundleTypeExtensions</key> +			<array> +				<string>slurl</string> +			</array> +			<key>CFBundleTypeIconFile</key> +			<string>seconlife</string> +			<key>CFBundleTypeMIMETypes</key> +			<array> +				<string>application/x-grid-location-info</string> +			</array> +			<key>CFBundleTypeName</key> +			<string>Secondlife SLURL</string>  			<key>CFBundleTypeOSTypes</key>  			<array> -			  <string>SLRL</string> +				<string>SLRL</string>  			</array> -                        <key>CFBundleTypeRole</key> -                        <string>Viewer</string> -                        <key>LSTypeIsPackage</key> +			<key>CFBundleTypeRole</key> +			<string>Viewer</string> +			<key>LSTypeIsPackage</key>  			<true/> -                        <key>NSDocumentClass</key> -                        <string>SecondLifeSLURL</string> -                </dict> -        </array> +			<key>NSDocumentClass</key> +			<string>SecondLifeSLURL</string> +		</dict> +	</array>  	<key>CFBundleURLTypes</key>  	<array>  		<dict> diff --git a/indra/newview/llagentwearablesfetch.cpp b/indra/newview/llagentwearablesfetch.cpp index 931aba1d41..0a2f0e9399 100644 --- a/indra/newview/llagentwearablesfetch.cpp +++ b/indra/newview/llagentwearablesfetch.cpp @@ -48,6 +48,12 @@ public:  	virtual ~LLOrderMyOutfitsOnDestroy()  	{ +		if (LLApp::isExiting()) +		{ +			llwarns << "called during shutdown, skipping" << llendl; +			return; +		} +		  		const LLUUID& my_outfits_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS);  		if (my_outfits_id.isNull()) return; @@ -241,6 +247,8 @@ LLLibraryOutfitsFetch::LLLibraryOutfitsFetch(const LLUUID& my_outfits_id) :  	mCurrFetchStep(LOFS_FOLDER),   	mOutfitsPopulated(false)   { +	llinfos << "created" << llendl; +  	mMyOutfitsID = LLUUID::null;  	mClothingID = LLUUID::null;  	mLibraryClothingID = LLUUID::null; @@ -250,10 +258,13 @@ LLLibraryOutfitsFetch::LLLibraryOutfitsFetch(const LLUUID& my_outfits_id) :  LLLibraryOutfitsFetch::~LLLibraryOutfitsFetch()  { +	llinfos << "destroyed" << llendl;  }  void LLLibraryOutfitsFetch::done()  { +	llinfos << "start" << llendl; +  	// Delay this until idle() routine, since it's a heavy operation and  	// we also can't have it run within notifyObservers.  	doOnIdleOneTime(boost::bind(&LLLibraryOutfitsFetch::doneIdle,this)); @@ -262,6 +273,8 @@ void LLLibraryOutfitsFetch::done()  void LLLibraryOutfitsFetch::doneIdle()  { +	llinfos << "start" << llendl; +  	gInventory.addObserver(this); // Add this back in since it was taken out during ::done()  	switch (mCurrFetchStep) @@ -302,6 +315,8 @@ void LLLibraryOutfitsFetch::doneIdle()  void LLLibraryOutfitsFetch::folderDone()  { +	llinfos << "start" << llendl; +  	LLInventoryModel::cat_array_t cat_array;  	LLInventoryModel::item_array_t wearable_array;  	gInventory.collectDescendents(mMyOutfitsID, cat_array, wearable_array,  @@ -309,8 +324,7 @@ void LLLibraryOutfitsFetch::folderDone()  	// Early out if we already have items in My Outfits  	// except the case when My Outfits contains just initial outfit -	if (cat_array.count() > 1 || -		cat_array.count() == 1 && cat_array[0]->getUUID() != LLAppearanceMgr::getInstance()->getBaseOutfitUUID()) +	if (cat_array.count() > 1)  	{  		mOutfitsPopulated = true;  		return; @@ -348,6 +362,8 @@ void LLLibraryOutfitsFetch::folderDone()  void LLLibraryOutfitsFetch::outfitsDone()  { +	llinfos << "start" << llendl; +  	LLInventoryModel::cat_array_t cat_array;  	LLInventoryModel::item_array_t wearable_array;  	uuid_vec_t folders; @@ -425,6 +441,8 @@ private:  // Copy the clothing folders from the library into the imported clothing folder  void LLLibraryOutfitsFetch::libraryDone()  { +	llinfos << "start" << llendl; +  	if (mImportedClothingID != LLUUID::null)  	{  		// Skip straight to fetching the contents of the imported folder @@ -480,6 +498,8 @@ void LLLibraryOutfitsFetch::libraryDone()  void LLLibraryOutfitsFetch::importedFolderFetch()  { +	llinfos << "start" << llendl; +  	// Fetch the contents of the Imported Clothing Folder  	uuid_vec_t folders;  	folders.push_back(mImportedClothingID); @@ -495,6 +515,8 @@ void LLLibraryOutfitsFetch::importedFolderFetch()  void LLLibraryOutfitsFetch::importedFolderDone()  { +	llinfos << "start" << llendl; +  	LLInventoryModel::cat_array_t cat_array;  	LLInventoryModel::item_array_t wearable_array;  	uuid_vec_t folders; @@ -525,6 +547,8 @@ void LLLibraryOutfitsFetch::importedFolderDone()  void LLLibraryOutfitsFetch::contentsDone()  {		 +	llinfos << "start" << llendl; +  	LLInventoryModel::cat_array_t cat_array;  	LLInventoryModel::item_array_t wearable_array; diff --git a/indra/newview/skins/default/xui/en/panel_scrolling_param.xml b/indra/newview/skins/default/xui/en/panel_scrolling_param.xml index 78d64620a5..a8cd380f20 100644 --- a/indra/newview/skins/default/xui/en/panel_scrolling_param.xml +++ b/indra/newview/skins/default/xui/en/panel_scrolling_param.xml @@ -12,7 +12,7 @@       layout="topleft"       left="12"       name="min param text" -     text_color="EmphasisColor" +     text_color="White"       font_shadow="hard"       top="120"       width="120" /> @@ -22,7 +22,7 @@       layout="topleft"       left="155"       name="max param text" -     text_color="EmphasisColor"  +     text_color="White"        font_shadow="hard"       top_delta="0"       width="120" />  | 
