diff options
70 files changed, 794 insertions, 471 deletions
diff --git a/doc/contributions.txt b/doc/contributions.txt index 1f7ab9e056..72e79f3bf1 100644 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -20,7 +20,7 @@ Jacek Antonelli - VWR-165, VWR-188 Joghert LeSabre - VWR-64 Kage Pixel - VWR-11 Kunnis Basiat - VWR-82 -Nicholaz Beresford - VWR-793, VWR-794, VWR-802, VWR-803, VWR-804, VWR-805, VWR-808, VWR-809, VWR-810, VWR-823, VWR-870 +Nicholaz Beresford - VWR-793, VWR-794, VWR-802, VWR-803, VWR-804, VWR-805, VWR-808, VWR-809, VWR-810, VWR-823, VWR-869, VWR-870, VWR-871, VWR-908, VWR-966 Paul Churchill - VWR-20 Paula Innis - VWR-30 Peekay Semyorka - VWR-7, VWR-19, VWR-49 diff --git a/indra/llaudio/llaudiodecodemgr.cpp b/indra/llaudio/llaudiodecodemgr.cpp index 348175675e..1b4c952e8e 100644 --- a/indra/llaudio/llaudiodecodemgr.cpp +++ b/indra/llaudio/llaudiodecodemgr.cpp @@ -53,7 +53,6 @@ public: }; LLVorbisDecodeState(const LLUUID &uuid, const LLString &out_filename); - virtual ~LLVorbisDecodeState(); BOOL initDecode(); BOOL decodeSection(); // Return TRUE if done. @@ -65,7 +64,10 @@ public: BOOL isValid() const { return mValid; } BOOL isDone() const { return mDone; } const LLUUID &getUUID() const { return mUUID; } + protected: + virtual ~LLVorbisDecodeState(); + BOOL mValid; BOOL mDone; LLAtomicS32 mBytesRead; diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp index 5964993928..4f8dc51458 100644 --- a/indra/llcommon/llerror.cpp +++ b/indra/llcommon/llerror.cpp @@ -20,6 +20,7 @@ extern apr_thread_mutex_t *gLogMutexp; #include "lllivefile.h" #include "llsd.h" #include "llsdserialize.h" +#include "llstl.h" #include <algorithm> #include <cctype> @@ -390,6 +391,12 @@ namespace LLError shouldLogCallCounter(0) { } + ~Settings() + { + for_each(recorders.begin(), recorders.end(), + DeletePointer()); + } + static Settings*& getPtr(); }; diff --git a/indra/llcommon/llevent.h b/indra/llcommon/llevent.h index a3f6b0e942..6a71a9cbad 100644 --- a/indra/llcommon/llevent.h +++ b/indra/llcommon/llevent.h @@ -68,12 +68,12 @@ public: class LLSimpleListener : public LLEventListener { public: - virtual ~LLSimpleListener(); void clearDispatchers(); virtual bool handleAttach(LLEventDispatcher *dispatcher); virtual bool handleDetach(LLEventDispatcher *dispatcher); protected: + ~LLSimpleListener(); std::vector<LLEventDispatcher *> mDispatchers; }; diff --git a/indra/llcommon/llthread.h b/indra/llcommon/llthread.h index ce5daa938c..659f73bee7 100644 --- a/indra/llcommon/llthread.h +++ b/indra/llcommon/llthread.h @@ -219,8 +219,9 @@ private: // Pure virtual class class LLResponder : public LLThreadSafeRefCount { -public: +protected: virtual ~LLResponder(); +public: virtual void completed(bool success) = 0; }; diff --git a/indra/llimage/llimageworker.cpp b/indra/llimage/llimageworker.cpp index 297482a222..1e625fbe28 100644 --- a/indra/llimage/llimageworker.cpp +++ b/indra/llimage/llimageworker.cpp @@ -30,7 +30,9 @@ void LLImageWorker::cleanupClass() //---------------------------------------------------------------------------- -LLImageWorker::LLImageWorker(LLImageFormatted* image, U32 priority, S32 discard, LLResponder* responder) +LLImageWorker::LLImageWorker(LLImageFormatted* image, U32 priority, + S32 discard, + LLPointer<LLResponder> responder) : LLWorkerClass(sWorkerThread, "Image"), mFormattedImage(image), mDecodedType(-1), diff --git a/indra/llimage/llimageworker.h b/indra/llimage/llimageworker.h index 6e9ecacc89..763936d772 100644 --- a/indra/llimage/llimageworker.h +++ b/indra/llimage/llimageworker.h @@ -21,7 +21,8 @@ public: // LLWorkerThread public: - LLImageWorker(LLImageFormatted* image, U32 priority, S32 discard, LLResponder* responder = NULL); + LLImageWorker(LLImageFormatted* image, U32 priority, S32 discard, + LLPointer<LLResponder> responder); ~LLImageWorker(); // called from WORKER THREAD, returns TRUE if done diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h index f7ad363206..97f9576767 100644 --- a/indra/llmath/lloctree.h +++ b/indra/llmath/lloctree.h @@ -37,7 +37,6 @@ public: typedef LLTreeListener<T> BaseType; typedef LLOctreeNode<T> oct_node; - virtual ~LLOctreeListener() { }; virtual void handleChildAddition(const oct_node* parent, oct_node* child) = 0; virtual void handleChildRemoval(const oct_node* parent, const oct_node* child) = 0; }; diff --git a/indra/llmath/lltreenode.h b/indra/llmath/lltreenode.h index cdc52cf90a..67c6cb631a 100644 --- a/indra/llmath/lltreenode.h +++ b/indra/llmath/lltreenode.h @@ -37,7 +37,6 @@ template <class T> class LLTreeListener: public LLRefCount { public: - virtual ~LLTreeListener() { }; virtual void handleInsertion(const LLTreeNode<T>* node, T* data) = 0; virtual void handleRemoval(const LLTreeNode<T>* node, T* data) = 0; virtual void handleDestruction(const LLTreeNode<T>* node) = 0; diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index 3ce3058887..23c29ae310 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -615,12 +615,14 @@ protected: class LLProfile { public: - LLProfile(const LLProfileParams ¶ms) : mParams(params) + LLProfile(const LLProfileParams ¶ms) + : mParams(params), + mOpen(FALSE), + mConcave(FALSE), + mDirty(TRUE), + mTotalOut(0), + mTotal(2) { - mTotal = 2; - mTotalOut = 0; - mDirty = TRUE; - mConcave = FALSE; } ~LLProfile(); @@ -690,11 +692,13 @@ public: }; public: - LLPath(const LLPathParams ¶ms) : mParams(params) + LLPath(const LLPathParams ¶ms) + : mParams(params), + mOpen(FALSE), + mTotal(0), + mDirty(TRUE), + mStep(1) { - mOpen = FALSE; - mDirty = TRUE; - mStep = 1; } virtual ~LLPath(); diff --git a/indra/llmessage/llhttpnode.h b/indra/llmessage/llhttpnode.h index 1e799c18b9..971926b579 100644 --- a/indra/llmessage/llhttpnode.h +++ b/indra/llmessage/llhttpnode.h @@ -68,9 +68,10 @@ public: class Response : public LLRefCount { - public: + protected: virtual ~Response(); + public: virtual void result(const LLSD&) = 0; virtual void status(S32 code, const std::string& message) = 0; @@ -205,7 +206,6 @@ class LLSimpleResponse : public LLHTTPNode::Response { public: static LLPointer<LLSimpleResponse> create(); - ~LLSimpleResponse(); void result(const LLSD& result); void status(S32 code, const std::string& message); @@ -215,6 +215,9 @@ public: S32 mCode; std::string mMessage; +protected: + ~LLSimpleResponse(); + private: LLSimpleResponse() {;} // Must be accessed through LLPointer. }; diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp index 316764474b..37feffd4b0 100644 --- a/indra/llui/llpanel.cpp +++ b/indra/llui/llpanel.cpp @@ -569,7 +569,7 @@ LLView* LLPanel::fromXML(LLXMLNodePtr node, LLView* parentp, LLUICtrlFactory *fa return panelp; } -void LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory) +BOOL LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory) { LLString name("panel"); node->getAttributeString("name", name); @@ -585,12 +585,23 @@ void LLPanel::initPanelXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *f LLString xml_filename; node->getAttributeString("filename", xml_filename); + + BOOL didPost; + if (!xml_filename.empty()) { - factory->buildPanel(this, xml_filename, NULL); + didPost = factory->buildPanel(this, xml_filename, NULL); + } else { + didPost = FALSE; } - postBuild(); + if (!didPost) + { + postBuild(); + didPost = TRUE; + } + + return didPost; } void LLPanel::setPanelParameters(LLXMLNodePtr node, LLView* parentp) diff --git a/indra/llui/llpanel.h b/indra/llui/llpanel.h index fdf4a117d4..f06797a7f8 100644 --- a/indra/llui/llpanel.h +++ b/indra/llui/llpanel.h @@ -115,7 +115,7 @@ public: virtual LLXMLNodePtr getXML(bool save_children = true) const; static LLView* fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); - void initPanelXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); + BOOL initPanelXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *factory); void setPanelParameters(LLXMLNodePtr node, LLView *parentp); // ** Wrappers for setting child properties by name ** -TomY diff --git a/indra/llui/lluictrlfactory.cpp b/indra/llui/lluictrlfactory.cpp index 6410208189..1d149b63e2 100644 --- a/indra/llui/lluictrlfactory.cpp +++ b/indra/llui/lluictrlfactory.cpp @@ -350,21 +350,22 @@ S32 LLUICtrlFactory::saveToXML(LLView* viewp, const LLString& filename) //----------------------------------------------------------------------------- // buildPanel() //----------------------------------------------------------------------------- -void LLUICtrlFactory::buildPanel(LLPanel* panelp, const LLString &filename, +BOOL LLUICtrlFactory::buildPanel(LLPanel* panelp, const LLString &filename, const LLCallbackMap::map_t* factory_map) { + BOOL didPost = FALSE; LLXMLNodePtr root; if (!LLUICtrlFactory::getLayeredXMLNode(filename, root)) { - return; + return didPost; } // root must be called panel if( !root->hasName("panel" ) ) { llwarns << "Root node should be named panel in : " << filename << llendl; - return; + return didPost; } if (factory_map) @@ -372,7 +373,7 @@ void LLUICtrlFactory::buildPanel(LLPanel* panelp, const LLString &filename, mFactoryStack.push_front(factory_map); } - panelp->initPanelXML(root, NULL, this); + didPost = panelp->initPanelXML(root, NULL, this); if (LLUI::sShowXUINames) { @@ -386,6 +387,8 @@ void LLUICtrlFactory::buildPanel(LLPanel* panelp, const LLString &filename, { mFactoryStack.pop_front(); } + + return didPost; } //----------------------------------------------------------------------------- diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h index cb6864bafd..c7280aa4a2 100644 --- a/indra/llui/lluictrlfactory.h +++ b/indra/llui/lluictrlfactory.h @@ -60,8 +60,8 @@ public: void buildFloater(LLFloater* floaterp, const LLString &filename, const LLCallbackMap::map_t* factory_map = NULL, BOOL open = TRUE); - void buildPanel(LLPanel* panelp, const LLString &filename, - const LLCallbackMap::map_t* factory_map = NULL); + BOOL buildPanel(LLPanel* panelp, const LLString &filename, + const LLCallbackMap::map_t* factory_map = NULL); LLMenuGL *buildMenu(const LLString &filename, LLView* parentp); diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index 05c2247a35..1fab00b524 100644 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -174,7 +174,6 @@ LLView::~LLView() for (itor = mDispatchList.begin(); itor != mDispatchList.end(); ++itor) { (*itor).second->clearDispatchers(); - delete (*itor).second; } std::for_each(mFloaterControls.begin(), mFloaterControls.end(), @@ -350,22 +349,25 @@ void LLView::addChildAtEnd(LLView* child, S32 tab_group) } // remove the specified child from the view, and set it's parent to NULL. -void LLView::removeChild( LLView* child ) +void LLView::removeChild(LLView* child, BOOL deleteIt) { if (child->mParentView == this) { mChildList.remove( child ); child->mParentView = NULL; + if (child->isCtrl()) + { + removeCtrl((LLUICtrl*)child); + } + if (deleteIt) + { + delete child; + } } else { llerrs << "LLView::removeChild called with non-child" << llendl; } - - if (child->isCtrl()) - { - removeCtrl((LLUICtrl*)child); - } } void LLView::addCtrlAtEnd(LLUICtrl* ctrl, S32 tab_group) @@ -2490,7 +2492,6 @@ void LLView::deregisterEventListener(LLString name) dispatch_list_t::iterator itor = mDispatchList.find(name); if (itor != mDispatchList.end()) { - delete itor->second; mDispatchList.erase(itor); } } diff --git a/indra/llui/llview.h b/indra/llui/llview.h index 504558a132..f9875e8cca 100644 --- a/indra/llui/llview.h +++ b/indra/llui/llview.h @@ -221,7 +221,7 @@ public: void addChild(LLView* view, S32 tab_group = 0); void addChildAtEnd(LLView* view, S32 tab_group = 0); // remove the specified child from the view, and set it's parent to NULL. - void removeChild( LLView* view ); + void removeChild(LLView* view, BOOL deleteIt = FALSE); virtual void addCtrl( LLUICtrl* ctrl, S32 tab_group); virtual void addCtrlAtEnd( LLUICtrl* ctrl, S32 tab_group); @@ -464,7 +464,7 @@ protected: LLView* childrenHandleRightMouseDown(S32 x, S32 y, MASK mask); LLView* childrenHandleRightMouseUp(S32 x, S32 y, MASK mask); - typedef std::map<LLString, LLSimpleListener*> dispatch_list_t; + typedef std::map<LLString, LLPointer<LLSimpleListener> > dispatch_list_t; dispatch_list_t mDispatchList; protected: diff --git a/indra/llvfs/lllfsthread.h b/indra/llvfs/lllfsthread.h index 74fd0ffd4d..a9ef1fec49 100644 --- a/indra/llvfs/lllfsthread.h +++ b/indra/llvfs/lllfsthread.h @@ -38,8 +38,9 @@ public: class Responder : public LLThreadSafeRefCount { + protected: + ~Responder(); public: - virtual ~Responder(); virtual void completed(S32 bytes) = 0; }; diff --git a/indra/llxml/llxmlnode.h b/indra/llxml/llxmlnode.h index ae16a9d800..e95904dad8 100644 --- a/indra/llxml/llxmlnode.h +++ b/indra/llxml/llxmlnode.h @@ -74,7 +74,7 @@ public: }; protected: - virtual ~LLXMLNode(); + ~LLXMLNode(); public: LLXMLNode(); diff --git a/indra/lscript/lscript_compile/indra.l b/indra/lscript/lscript_compile/indra.l index 08c2683665..37435c2e97 100644 --- a/indra/lscript/lscript_compile/indra.l +++ b/indra/lscript/lscript_compile/indra.l @@ -758,15 +758,8 @@ void comment() { char c; -#if LL_DARWIN while ((c = yyinput()) != '\n' && c != 0 && c != EOF) ; -#else - while ((c = yyinput()) != '\n' && c != 0) - ; -#endif - - } void count() diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi index 8ab7c4fdae..1b5226c210 100644 --- a/indra/newview/installers/windows/installer_template.nsi +++ b/indra/newview/installers/windows/installer_template.nsi @@ -1,63 +1,70 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; @file viewer_manifest.py
-;;; @author James Cook, Don Kjer
-;;; @brief NSIS script for creating a Windows installer.
-;;; This file has variables expanded by viewer_manifest.py
-;;; to produce the complete nsi script file.
-;;; For info, see http://www.nullsoft.com/free/nsis/
-;;; NSIS 2.02 or higher required
-;;;
-;;; Copyright (c) 2006-$CurrentYear$, Linden Research, Inc.
-;;; $License$
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Compiler flags
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; secondlife setup.nsi
+;; Copyright 2004-2007, Linden Research, Inc.
+;; For info, see http://www.nullsoft.com/free/nsis/
+;;
+;; NSIS 2.22 or higher required
+;; Author: James Cook, Don Kjer, Callum Prentice
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Detect NSIS compiler version
!define "NSIS${NSIS_VERSION}"
!ifdef "NSISv2.02" | "NSISv2.03" | "NSISv2.04" | "NSISv2.05" | "NSISv2.06"
- ;;; before 2.07 defaulted lzma to solid (whole file)
+ ;; before 2.07 defaulted lzma to solid (whole file)
SetCompressor lzma
!else
- ;;; after 2.07 required /solid for whole file compression
+ ;; after 2.07 required /solid for whole file compression
SetCompressor /solid lzma
!endif
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Compiler flags
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SetOverwrite on ; overwrite files
SetCompress auto ; compress iff saves space
-SetDatablockOptimize off ; only saves us 0.1%, not worth it
-XPStyle on ; add an XP manifest to the installer
+SetDatablockOptimize off ; only saves us 0.1%, not worth it
+XPStyle on ; add an XP manifest to the installer
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Project flags
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
%%VERSION%%
-;;; Tweak for different servers/builds (this placeholder is replaced by viewer_manifest.py)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; - language files - one for each language (or flavor thereof)
+;; (these files are in the same place as the nsi template but the python script generates a new nsi file in the
+;; application directory so we have to add a path to these include files)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+#!include "installers\windows\lang_de.nsi"
+!include "installers\windows\lang_en-us.nsi"
+#!include "installers\windows\lang_ja.nsi"
+!include "installers\windows\lang_ko.nsi"
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Tweak for different servers/builds (this placeholder is replaced by viewer_manifest.py)
%%GRID_VARS%%
Name ${INSTNAME}
-SubCaption 0 " Setup" ; override "license agreement" text
+SubCaption 0 $(LicenseSubTitleSetup) ; override "license agreement" text
-BrandingText " " ; bottom of window text
-Icon res\install_icon.ico ; our custom icon
+BrandingText " " ; bottom of window text
+Icon res\install_icon.ico ; our custom icon
UninstallIcon res\uninstall_icon.ico ; our custom icon
-WindowIcon on ; show our icon in left corner
-BGGradient off ; no big background window
-CRCCheck on ; make sure CRC is OK
+WindowIcon on ; show our icon in left corner
+BGGradient off ; no big background window
+CRCCheck on ; make sure CRC is OK
InstProgressFlags smooth colored ; new colored smooth look
-ShowInstDetails nevershow ; no details, no "show" button
-SetOverwrite on ; stomp files by default
-AutoCloseWindow true ; after all files install, close window
+ShowInstDetails nevershow ; no details, no "show" button
+SetOverwrite on ; stomp files by default
+AutoCloseWindow true ; after all files install, close window
!ifdef UPDATE
-LicenseText "This package will update Second Life to version ${VERSION_LONG}." "Next >"
+LicenseText $(LicenseDescUpdate) $(LicenseDescNext)
!else
-LicenseText "This package will install Second Life on your computer." "Next >"
+LicenseText $(LicenseDescSetup) $(LicenseDescNext)
!endif
LicenseData "releasenotes.txt"
@@ -65,30 +72,30 @@ LicenseData "releasenotes.txt" InstallDir "$PROGRAMFILES\${INSTNAME}"
InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" ""
!ifdef UPDATE
-DirText "Installation Directory" "Select the Second Life directory to update:"
+DirText $(DirectoryChooseTitle) $(DirectoryChooseUpdate)
!else
-DirText "Installation Directory" "Select the directory to install Second Life in:"
+DirText $(DirectoryChooseTitle) $(DirectoryChooseSetup)
!endif
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Variables
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Var INSTPROG
Var INSTEXE
Var INSTFLAGS
+Var LANGFLAGS
Var INSTSHORTCUT
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Sections
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Section "" ; (default section)
SetShellVarContext all ; install for all users (if you change this, change it in the uninstall as well)
-
; Start with some default values.
StrCpy $INSTFLAGS "${INSTFLAGS}"
+StrCpy $INSTFLAGS "$INSTFLAGS $LANGFLAGS"
StrCpy $INSTPROG "${INSTNAME}"
StrCpy $INSTEXE "${INSTEXE}"
StrCpy $INSTSHORTCUT "${SHORTCUT}"
@@ -103,21 +110,22 @@ Call CheckIfAlreadyCurrent ; Make sure that we haven't already installed this v Call CloseSecondLife ; Make sure we're not running
Call RemoveNSIS ; Check for old NSIS install to remove
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Don't remove cache files during a regular install, removing the inventory cache on upgrades results in lots of damage to the servers.
;Call RemoveCacheFiles ; Installing over removes potentially corrupted
; VFS and cache files.
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Files
-;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; This placeholder is replaced by the complete list of all the files in the installer, by viewer_manifest.py
%%INSTALL_FILES%%
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; If this is a silent update, we don't need to re-create these shortcuts or registry entries.
IfSilent POST_INSTALL
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Shortcuts in start menu
CreateDirectory "$SMPROGRAMS\$INSTSHORTCUT"
SetOutPath "$INSTDIR"
@@ -146,6 +154,7 @@ CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\SL Scripting Language Help.lnk" \ CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\Uninstall $INSTSHORTCUT.lnk" \
'"$INSTDIR\uninst.exe"' '/P="$INSTPROG"'
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Other shortcuts
SetOutPath "$INSTDIR"
CreateShortCut "$DESKTOP\$INSTSHORTCUT.lnk" "$INSTDIR\$INSTEXE" "$INSTFLAGS"
@@ -164,6 +173,7 @@ CreateShortCut "$INSTDIR\$INSTSHORTCUT Museum Spanish.lnk" "$INSTDIR\$INSTEXE" " !endif
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Write registry
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "" "$INSTDIR"
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version" "${VERSION_LONG}"
@@ -173,6 +183,7 @@ WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Exe" WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "DisplayName" "$INSTPROG (remove only)"
WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "UninstallString" '"$INSTDIR\uninst.exe" /P="$INSTPROG"'
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Write URL registry info
WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "(default)" "URL:Second Life"
WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "URL Protocol" ""
@@ -192,10 +203,10 @@ WriteUninstaller "$INSTDIR\uninst.exe" ; end of default section
SectionEnd
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; PostInstallExe
; This just runs any post installation scripts.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function PostInstallExe
push $0
ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "PostInstallExe"
@@ -204,11 +215,10 @@ push $0 pop $0
FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; CheckStartupParameters
; Sets INSTFLAGS, INSTPROG, and INSTEXE.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function CheckStartupParams
push $0
push $R0
@@ -237,7 +247,7 @@ push $R0 Goto FINISHED
ABORT:
- MessageBox MB_OK "Could not find the program '$INSTPROG'. Silent update failed."
+ MessageBox MB_OK $(CheckStartupParamsMB)
Quit
FINISHED:
@@ -246,6 +256,9 @@ pop $R0 pop $0
FunctionEnd
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function un.CheckStartupParams
push $0
push $R0
@@ -274,7 +287,7 @@ push $R0 Goto FINISHED
ABORT:
- MessageBox MB_OK "Could not find the program '$INSTPROG'. Silent update failed."
+ MessageBox MB_OK $(CheckStartupParamsMB)
Quit
FINISHED:
@@ -283,26 +296,26 @@ pop $R0 pop $0
FunctionEnd
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; After install completes, offer readme file
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function .onInstSuccess
MessageBox MB_YESNO \
- "Start Second Life now?" /SD IDYES IDNO NoReadme
+ $(InstSuccesssQuestion) /SD IDYES IDNO NoReadme
; Assumes SetOutPath $INSTDIR
Exec '"$INSTDIR\$INSTEXE" $INSTFLAGS'
NoReadme:
FunctionEnd
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Remove old NSIS version. Modifies no variables.
; Does NOT delete the LindenWorld directory, or any
; user files in that directory.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function RemoveNSIS
Push $0
; Grab the installation directory of the old version
- DetailPrint "Checking for old version..."
+ DetailPrint $(RemoveOldNSISVersion)
ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" ""
; If key doesn't exist, skip uninstall
@@ -323,9 +336,9 @@ Function RemoveNSIS Pop $0
FunctionEnd
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Make sure we're not on Windows 98 / ME
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function CheckWindowsVersion
DetailPrint "Checking Windows version..."
Call GetWindowsVersion
@@ -339,46 +352,49 @@ Function CheckWindowsVersion StrCmp $R0 "NT" win_ver_bad
Return
win_ver_bad:
- MessageBox MB_YESNO 'Second Life only supports Windows XP, Windows 2000, and Mac OS X.$\n$\nAttempting to install on Windows $R0 can result in crashes and data loss.$\n$\nInstall anyway?' IDNO win_ver_abort
+ MessageBox MB_YESNO $(CheckWindowsVersionMB) IDNO win_ver_abort
Return
win_ver_abort:
Quit
FunctionEnd
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Make sure the user can install/uninstall
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function CheckIfAdministrator
- DetailPrint "Checking for permission to install..."
+ DetailPrint $(CheckAdministratorInstDP)
UserInfo::GetAccountType
Pop $R0
StrCmp $R0 "Admin" is_admin
- MessageBox MB_OK 'You appear to be using a "limited" account.$\nYou must be an "administrator" to install Second Life.'
+ MessageBox MB_OK $(CheckAdministratorInstMB)
Quit
is_admin:
Return
FunctionEnd
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function un.CheckIfAdministrator
- DetailPrint "Checking for permission to uninstall..."
+ DetailPrint $(CheckAdministratorUnInstDP)
UserInfo::GetAccountType
Pop $R0
StrCmp $R0 "Admin" is_admin
- MessageBox MB_OK 'You appear to be using a "limited" account.$\nYou must be an "administrator" to uninstall Second Life.'
+ MessageBox MB_OK $(CheckAdministratorUnInstMB)
Quit
is_admin:
Return
FunctionEnd
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Checks to see if the current version has already been installed (according to the registry).
; If it has, allow user to bail out of install process.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function CheckIfAlreadyCurrent
Push $0
ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version"
StrCmp $0 ${VERSION_LONG} 0 DONE
- MessageBox MB_OKCANCEL "It appears that Second Life ${VERSION_LONG} is already installed.$\n$\nWould you like to install it again?" /SD IDOK IDOK DONE
+ MessageBox MB_OKCANCEL $(CheckIfCurrentMB) /SD IDOK IDOK DONE
Quit
DONE:
@@ -386,22 +402,21 @@ Function CheckIfAlreadyCurrent Return
FunctionEnd
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Close the program, if running. Modifies no variables.
; Allows user to bail out of install process.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function CloseSecondLife
Push $0
FindWindow $0 "Second Life" ""
IntCmp $0 0 DONE
- MessageBox MB_OKCANCEL "Second Life can't be installed while it is already running.$\n$\nFinish what you're doing then select OK to close Second Life and continue.$\nSelect CANCEL to cancel installation." IDOK CLOSE IDCANCEL CANCEL_INSTALL
+ MessageBox MB_OKCANCEL $(CloseSecondLifeInstMB) IDOK CLOSE IDCANCEL CANCEL_INSTALL
CANCEL_INSTALL:
Quit
CLOSE:
- DetailPrint "Waiting for Second Life to shut down..."
+ DetailPrint $(CloseSecondLifeInstDP)
SendMessage $0 16 0 0
LOOP:
@@ -416,59 +431,59 @@ Function CloseSecondLife FunctionEnd
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Delete files in Documents and Settings\<user>\SecondLife\cache
; Delete files in Documents and Settings\All Users\SecondLife\cache
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Function RemoveCacheFiles
-
-; Delete files in Documents and Settings\<user>\SecondLife
-Push $0
-Push $1
-Push $2
- DetailPrint "Deleting cache files in Documents and Settings folder"
-
- StrCpy $0 0 ; Index number used to iterate via EnumRegKey
-
- LOOP:
- EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
- StrCmp $1 "" DONE ; no more users
-
- ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath"
- StrCmp $2 "" CONTINUE 0 ; "ProfileImagePath" value is missing
-
- ; Required since ProfileImagePath is of type REG_EXPAND_SZ
- ExpandEnvStrings $2 $2
-
- ; When explicitly uninstalling, everything goes away
- RMDir /r "$2\Application Data\SecondLife\cache"
-
- CONTINUE:
- IntOp $0 $0 + 1
- Goto LOOP
- DONE:
-Pop $2
-Pop $1
-Pop $0
-
-; Delete files in Documents and Settings\All Users\SecondLife
-Push $0
- ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
- StrCmp $0 "" +2
- RMDir /r "$0\SecondLife\cache"
-Pop $0
-
-; Delete filse in C:\Windows\Application Data\SecondLife
-; If the user is running on a pre-NT system, Application Data lives here instead of
-; in Documents and Settings.
-RMDir /r "$WINDIR\Application Data\SecondLife\cache"
-
-FunctionEnd
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;Function RemoveCacheFiles
+;
+;; Delete files in Documents and Settings\<user>\SecondLife
+;Push $0
+;Push $1
+;Push $2
+; DetailPrint $(RemoveCacheFilesDP)
+;
+; StrCpy $0 0 ; Index number used to iterate via EnumRegKey
+;
+; LOOP:
+; EnumRegKey $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" $0
+; StrCmp $1 "" DONE ; no more users
+;
+; ReadRegStr $2 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\$1" "ProfileImagePath"
+; StrCmp $2 "" CONTINUE 0 ; "ProfileImagePath" value is missing
+;
+; ; Required since ProfileImagePath is of type REG_EXPAND_SZ
+; ExpandEnvStrings $2 $2
+;
+; ; When explicitly uninstalling, everything goes away
+; RMDir /r "$2\Application Data\SecondLife\cache"
+;
+; CONTINUE:
+; IntOp $0 $0 + 1
+; Goto LOOP
+; DONE:
+;Pop $2
+;Pop $1
+;Pop $0
+;
+;; Delete files in Documents and Settings\All Users\SecondLife
+;Push $0
+; ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" "Common AppData"
+; StrCmp $0 "" +2
+; RMDir /r "$0\SecondLife\cache"
+;Pop $0
+;
+;; Delete filse in C:\Windows\Application Data\SecondLife
+;; If the user is running on a pre-NT system, Application Data lives here instead of
+;; in Documents and Settings.
+;RMDir /r "$WINDIR\Application Data\SecondLife\cache"
+;
+;FunctionEnd
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Delete files in Documents and Settings\<user>\SecondLife
; Delete files in Documents and Settings\All Users\SecondLife
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function un.DocumentsAndSettingsFolder
; Delete files in Documents and Settings\<user>\SecondLife
@@ -522,21 +537,21 @@ RMDir /r "$WINDIR\Application Data\SecondLife" FunctionEnd
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Close the program, if running. Modifies no variables.
; Allows user to bail out of uninstall process.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function un.CloseSecondLife
Push $0
FindWindow $0 "Second Life" ""
IntCmp $0 0 DONE
- MessageBox MB_OKCANCEL "Second Life can't be uninstalled while it is already running.$\n$\nFinish what you're doing then select OK to close Second Life and continue.$\nSelect CANCEL to cancel installation." IDOK CLOSE IDCANCEL CANCEL_UNINSTALL
+ MessageBox MB_OKCANCEL $(CloseSecondLifeUnInstMB) IDOK CLOSE IDCANCEL CANCEL_UNINSTALL
CANCEL_UNINSTALL:
Quit
CLOSE:
- DetailPrint "Waiting for Second Life to shut down..."
+ DetailPrint $(CloseSecondLifeUnInstDP)
SendMessage $0 16 0 0
LOOP:
@@ -550,7 +565,7 @@ Function un.CloseSecondLife Return
FunctionEnd
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Delete the installed files
;;; This deletes the uninstall executable, but it works
;;; because it is copied to temp directory before running
@@ -558,7 +573,7 @@ FunctionEnd ;;; Note: You must list all files here, because we only
;;; want to delete our files, not things users left in the
;;; application directories.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function un.ProgramFiles
;; Remove mozilla file first so recursive directory deletion doesn't get hung up
@@ -597,26 +612,26 @@ RMDir "$INSTDIR" IfFileExists "$INSTDIR" FOLDERFOUND NOFOLDER
FOLDERFOUND:
- MessageBox MB_YESNO "There are still files in your SecondLife program directory.$\n$\nThese are possibly files you created or moved to:$\n$INSTDIR$\n$\nDo you want to remove them?" IDNO NOFOLDER
+ MessageBox MB_YESNO $(DeleteProgramFilesMB) IDNO NOFOLDER
RMDir /r "$INSTDIR"
NOFOLDER:
FunctionEnd
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Uninstall settings
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-UninstallText "This will uninstall Second Life ${VERSION_LONG} from your system."
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+UninstallText $(UninstallTextMsg)
ShowUninstDetails show
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Uninstall section
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Section Uninstall
; Start with some default values.
-StrCpy $INSTFLAGS "${INSTFLAGS}"
+StrCpy $INSTFLAGS ""
StrCpy $INSTPROG "${INSTNAME}"
StrCpy $INSTEXE "${INSTEXE}"
StrCpy $INSTSHORTCUT "${SHORTCUT}"
@@ -629,9 +644,10 @@ SetShellVarContext all ; Make sure we're not running
Call un.CloseSecondLife
-; Clean up registry keys
+; Clean up registry keys (these should all be !defines somewhere)
DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG"
DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG"
+DeleteRegKey HKEY_LOCAL_MACHINE "Software\Linden Research, Inc.\Installer Language"
; Clean up shortcuts
Delete "$SMPROGRAMS\$INSTSHORTCUT\*.*"
@@ -652,7 +668,7 @@ Call un.ProgramFiles SectionEnd ; end of uninstall section
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; (From the NSIS wiki, DK)
; GetParameterValue
;
@@ -667,7 +683,7 @@ SectionEnd ; end of uninstall section ; or:
; foo.exe /S "/L=1033" /D="C:\Program Files\Foo"
; gpv "/L=" "1033"
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
!macro GetParameterValue SWITCH DEFAULT
Push $0
@@ -770,7 +786,7 @@ Function un.GetProgramName !insertmacro GetParameterValue "/P=" "SecondLife"
FunctionEnd
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; (From the NSIS documentation, JC)
; GetWindowsVersion
;
@@ -787,8 +803,7 @@ FunctionEnd ; Call GetWindowsVersion
; Pop $R0
; ; at this point $R0 is "NT 4.0" or whatnot
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Function GetWindowsVersion
Push $R0
@@ -860,3 +875,61 @@ Function GetWindowsVersion Exch $R0
FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Note: to add new languages, add a language file include to the list
+;; at the top of this file, add an entry to the menu and then add an
+;; entry to the language ID selector below
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function .onInit
+
+ ; read the language from registry (ok if not there) and set langauge menu
+ ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage"
+ StrCpy $LANGUAGE $0
+
+ Push ""
+ Push ${LANG_ENGLISH}
+ Push English
+# Push ${LANG_GERMAN}
+# Push German
+# Push ${LANG_JAPANESE}
+# Push Japanese
+ Push ${LANG_KOREAN}
+ Push Korean
+ Push A ; A means auto count languages for the auto count to work the first empty push (Push "") must remain
+ LangDLL::LangDialog "Installer Language" "Please select the language of the installer"
+ Pop $LANGUAGE
+ StrCmp $LANGUAGE "cancel" 0 +2
+ Abort
+
+ ; save language in registry
+ WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage" $LANGUAGE
+
+ ; generate language ID that will be used as a command line arg
+ StrCmp $LANGUAGE "1042" 0 +3
+ StrCpy $LANGFLAGS " -set SystemLanguage ko"
+ Goto EndOfFunc
+# StrCmp $LANGUAGE "1041" 0 +3
+# StrCpy $LANGFLAGS " -set SystemLanguage ja"
+# Goto EndOfFunc
+# StrCmp $LANGUAGE "1031" 0 +3
+# StrCpy $LANGFLAGS " -set SystemLanguage de"
+# Goto EndOfFunc
+ StrCmp $LANGUAGE "1033" 0 +3
+ StrCpy $LANGFLAGS " -set SystemLanguage en-us"
+ Goto EndOfFunc
+
+ EndOfFunc:
+
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+Function un.onInit
+
+ ; read language from registry and set for ininstaller
+ ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage"
+ StrCpy $LANGUAGE $0
+
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; EOF ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
\ No newline at end of file diff --git a/indra/newview/linux_tools/wrapper.sh b/indra/newview/linux_tools/wrapper.sh index 5f128e8e41..048aaf6382 100755 --- a/indra/newview/linux_tools/wrapper.sh +++ b/indra/newview/linux_tools/wrapper.sh @@ -33,6 +33,13 @@ export LL_GL_BASICEXT=x ## LL_GL_BLACKLIST which solves your problems. #export LL_GL_BLACKLIST=abcdefghijklmno +## - For advanced debugging cases, you can run the viewer under the +## control of another program, such as strace, gdb, or valgrind. If +## you're building your own viewer, bear in mind that the executable +## in the bin directory will be stripped: you should replace it with +## an unstripped binary before you run. +#export LL_WRAPPER='valgrind --log-file=secondlife.vg --leak-check=full --suppressions=/usr/lib/valgrind/glibc-2.5.supp --suppressions=secondlife-i686.supp' + ## - Avoids an often-buggy X feature that doesn't really benefit us anyway. export SDL_VIDEO_X11_DGAMOUSE=0 @@ -41,7 +48,7 @@ export SDL_VIDEO_X11_DGAMOUSE=0 RUN_PATH=`dirname "$0" || echo .` cd "${RUN_PATH}" -LD_LIBRARY_PATH="`pwd`"/lib:"`pwd`"/app_settings/mozilla-runtime-linux-i686:"${LD_LIBRARY_PATH}" bin/do-not-directly-run-secondlife-bin `cat gridargs.dat` $@ | cat +LD_LIBRARY_PATH="`pwd`"/lib:"`pwd`"/app_settings/mozilla-runtime-linux-i686:"${LD_LIBRARY_PATH}" $LL_WRAPPER bin/do-not-directly-run-secondlife-bin `cat gridargs.dat` $@ | cat echo echo '*********************************************************' diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index 89d60709d5..4b6e8c6996 100644 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -831,12 +831,12 @@ private: class createStandardWearablesAllDoneCallback : public LLRefCount { - public: + protected: ~createStandardWearablesAllDoneCallback(); }; class sendAgentWearablesUpdateCallback : public LLRefCount { - public: + protected: ~sendAgentWearablesUpdateCallback(); }; @@ -866,7 +866,6 @@ private: S32 index, LLWearable* wearable, U32 todo = CALL_NONE); - ~addWearableToAgentInventoryCallback() {}; virtual void fire(const LLUUID& inv_item); private: diff --git a/indra/newview/lldrawable.h b/indra/newview/lldrawable.h index e95437f4ec..6192d405af 100644 --- a/indra/newview/lldrawable.h +++ b/indra/newview/lldrawable.h @@ -179,7 +179,7 @@ public: static void cleanupDeadDrawables(); protected: - virtual ~LLDrawable() { destroy(); } + ~LLDrawable() { destroy(); } void moveUpdatePipeline(BOOL moved); void updatePartition(); BOOL updateMoveDamped(); diff --git a/indra/newview/llfloatergesture.cpp b/indra/newview/llfloatergesture.cpp index 1296c96c5e..58253184f1 100644 --- a/indra/newview/llfloatergesture.cpp +++ b/indra/newview/llfloatergesture.cpp @@ -332,7 +332,6 @@ public: { mTitle = title; } - ~GestureShowCallback() {} void fire(const LLUUID &inv_item) { LLPreviewGesture::show(mTitle.c_str(), inv_item, LLUUID::null); diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 588fb1dac0..8a1a0dcaaa 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -296,6 +296,7 @@ BOOL LLFloaterPreference::postBuild() LLFloaterPreference::~LLFloaterPreference() { sInstance = NULL; + delete mPreferenceCore; } diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index 14a4d7dc00..f712067492 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -4262,7 +4262,8 @@ void LLFolderView::idle(void* user_data) { self->scrollToShowItem(self->mSelectedItems.back()); // continue scrolling until animated layout change is done - if (!self->needsArrange() || !self->isInVisibleChain()) + if (self->getCompletedFilterGeneration() >= self->mFilter.getMinRequiredGeneration() && + (!self->needsArrange() || !self->isInVisibleChain())) { self->mNeedsScroll = FALSE; } diff --git a/indra/newview/llhudeffecttrail.cpp b/indra/newview/llhudeffecttrail.cpp index 1ce443fd00..dc32010b07 100644 --- a/indra/newview/llhudeffecttrail.cpp +++ b/indra/newview/llhudeffecttrail.cpp @@ -168,7 +168,7 @@ void LLHUDEffectSpiral::triggerLocal() { if (show_beam) { - LLViewerPartSourceBeam *psb = new LLViewerPartSourceBeam; + LLPointer<LLViewerPartSourceBeam> psb = new LLViewerPartSourceBeam; psb->setColor(color); psb->setSourceObject(mSourceObject); psb->setTargetObject(mTargetObject); @@ -183,7 +183,7 @@ void LLHUDEffectSpiral::triggerLocal() { if (show_beam) { - LLViewerPartSourceBeam *psb = new LLViewerPartSourceBeam; + LLPointer<LLViewerPartSourceBeam> psb = new LLViewerPartSourceBeam; psb->setSourceObject(mSourceObject); psb->setTargetObject(NULL); psb->setColor(color); @@ -204,7 +204,7 @@ void LLHUDEffectSpiral::triggerLocal() { pos = gAgent.getPosAgentFromGlobal(mPositionGlobal); } - LLViewerPartSourceSpiral *pss = new LLViewerPartSourceSpiral(pos); + LLPointer<LLViewerPartSourceSpiral> pss = new LLViewerPartSourceSpiral(pos); if (!mSourceObject.isNull()) { pss->setSourceObject(mSourceObject); @@ -218,10 +218,10 @@ void LLHUDEffectSpiral::triggerLocal() } else { - LLViewerPartSource *ps = mPartSourcep; + LLPointer<LLViewerPartSource>& ps = mPartSourcep; if (mPartSourcep->getType() == LLViewerPartSource::LL_PART_SOURCE_BEAM) { - LLViewerPartSourceBeam *psb = (LLViewerPartSourceBeam *)ps; + LLViewerPartSourceBeam *psb = (LLViewerPartSourceBeam *)ps.get(); psb->setSourceObject(mSourceObject); psb->setTargetObject(mTargetObject); psb->setColor(color); @@ -232,7 +232,7 @@ void LLHUDEffectSpiral::triggerLocal() } else { - LLViewerPartSourceSpiral *pss = (LLViewerPartSourceSpiral *)ps; + LLViewerPartSourceSpiral *pss = (LLViewerPartSourceSpiral *)ps.get(); pss->setSourceObject(mSourceObject); } } diff --git a/indra/newview/llhudobject.h b/indra/newview/llhudobject.h index 1148dd6521..9bd14796d5 100644 --- a/indra/newview/llhudobject.h +++ b/indra/newview/llhudobject.h @@ -74,7 +74,7 @@ protected: static void sortObjects(); LLHUDObject(const U8 type); - virtual ~LLHUDObject(); + ~LLHUDObject(); virtual void render() = 0; virtual void renderForSelect() {}; diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index badab645b9..eb59a4355b 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -3455,10 +3455,13 @@ public: * Do nothing. We only care about the destructor */ } + +protected: ~LLWearInventoryCategoryCallback() { wear_inventory_category_on_avatar(gInventory.getCategory(mCatID), mAppend); } + private: LLUUID mCatID; bool mAppend; diff --git a/indra/newview/lloverlaybar.cpp b/indra/newview/lloverlaybar.cpp index 32ae42363b..27de489446 100644 --- a/indra/newview/lloverlaybar.cpp +++ b/indra/newview/lloverlaybar.cpp @@ -308,27 +308,6 @@ void LLOverlayBar::refresh() { mMusicRemote->setVisible(TRUE); mMusicRemote->setEnabled(TRUE); - - S32 musicPlaying = gAudiop->isInternetStreamPlaying(); - - if ( musicPlaying == 0 ) // stopped - { - mMusicRemote->setTransportState ( LLMediaRemoteCtrl::Stop, FALSE ); - } - else - if ( musicPlaying == 1 ) // playing - { - mMusicRemote->setTransportState ( LLMediaRemoteCtrl::Play, FALSE ); - if (gAudiop) - { - gAudiop->setInternetStreamGain ( gSavedSettings.getF32 ( "AudioLevelMusic" ) ); - } - } - else - if ( musicPlaying == 2 ) // paused - { - mMusicRemote->setTransportState ( LLMediaRemoteCtrl::Stop, FALSE ); - } } } diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp index 4962329619..23f7a4aba6 100644 --- a/indra/newview/llpanelgroup.cpp +++ b/indra/newview/llpanelgroup.cpp @@ -58,7 +58,7 @@ BOOL LLPanelGroupTab::postBuild() if (txt) { mHelpText = txt->getText(); - removeChild(txt); + removeChild(txt, TRUE); } return TRUE; } @@ -265,13 +265,13 @@ BOOL LLPanelGroup::postBuild() if (txt) { mDefaultNeedsApplyMesg = txt->getText(); - removeChild(txt); + removeChild(txt, TRUE); } txt = (LLTextBox*)getChildByName("want_apply_text"); if (txt) { mWantApplyMesg = txt->getText(); - removeChild(txt); + removeChild(txt, TRUE); } LLButton* button = (LLButton*) getChildByName("btn_ok"); diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp index 161b46a17c..9967a70111 100644 --- a/indra/newview/llpanelgroupgeneral.cpp +++ b/indra/newview/llpanelgroupgeneral.cpp @@ -115,7 +115,7 @@ BOOL LLPanelGroupGeneral::postBuild() if (founder) { mFounderName = new LLNameBox(founder->getName(),founder->getRect(),LLUUID::null,FALSE,founder->getFont(),founder->getMouseOpaque()); - removeChild(founder); + removeChild(founder, TRUE); addChild(mFounderName); } @@ -201,14 +201,14 @@ BOOL LLPanelGroupGeneral::postBuild() if (txt) { mIncompleteMemberDataStr = txt->getText(); - removeChild(txt); + removeChild(txt, TRUE); } txt = (LLTextBox*)getChildByName("confirm_group_create_str"); if (txt) { mConfirmGroupCreateStr = txt->getText(); - removeChild(txt); + removeChild(txt, TRUE); } // If the group_id is null, then we are creating a new group diff --git a/indra/newview/llpanelgrouplandmoney.cpp b/indra/newview/llpanelgrouplandmoney.cpp index b11b6bd253..09edc4c8af 100644 --- a/indra/newview/llpanelgrouplandmoney.cpp +++ b/indra/newview/llpanelgrouplandmoney.cpp @@ -549,14 +549,14 @@ BOOL LLPanelGroupLandMoney::postBuild() if ( no_permsp ) { mImplementationp->mCantViewParcelsText = no_permsp->getText(); - removeChild(no_permsp); + removeChild(no_permsp, TRUE); } no_permsp = (LLTextBox*) getChildByName("cant_view_group_accounting_text"); if ( no_permsp ) { mImplementationp->mCantViewAccountsText = no_permsp->getText(); - removeChild(no_permsp); + removeChild(no_permsp, TRUE); } diff --git a/indra/newview/llpanelgroupnotices.cpp b/indra/newview/llpanelgroupnotices.cpp index b0fc26f22a..09ce13b1d6 100644 --- a/indra/newview/llpanelgroupnotices.cpp +++ b/indra/newview/llpanelgroupnotices.cpp @@ -259,7 +259,7 @@ BOOL LLPanelGroupNotices::postBuild() if (txt) { mNoNoticesStr = txt->getText(); - removeChild(txt); + removeChild(txt, TRUE); } mPanelCreateNotice = (LLPanel*) getChildByName("panel_create_new_notice",recurse); @@ -274,7 +274,7 @@ BOOL LLPanelGroupNotices::postBuild() target->setToolTip(dtv->getToolTip()); mPanelCreateNotice->addChild(target); - mPanelCreateNotice->removeChild(dtv); + mPanelCreateNotice->removeChild(dtv, TRUE); arrangeNoticeView(VIEW_PAST_NOTICE); diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp index 30a86a40b2..faa278b667 100644 --- a/indra/newview/llpanelgrouproles.cpp +++ b/indra/newview/llpanelgrouproles.cpp @@ -152,13 +152,13 @@ BOOL LLPanelGroupRoles::postBuild() if (txt) { mDefaultNeedsApplyMesg = txt->getText(); - removeChild(txt); + removeChild(txt, TRUE); } txt = (LLTextBox*)getChildByName("want_apply_text"); if (txt) { mWantApplyMesg = txt->getText(); - removeChild(txt); + removeChild(txt, TRUE); } return LLPanelGroupTab::postBuild(); @@ -521,21 +521,21 @@ BOOL LLPanelGroupSubTab::postBuild() if (icon && icon->getImage().notNull()) { mActionIcons["folder"] = icon->getImage(); - removeChild(icon); + removeChild(icon, TRUE); } icon = (LLIconCtrl*) getChildByName("power_all_have_icon",no_recurse); if (icon && icon->getImage().notNull()) { mActionIcons["full"] = icon->getImage(); - removeChild(icon); + removeChild(icon, TRUE); } icon = (LLIconCtrl*) getChildByName("power_partial_icon",no_recurse); if (icon && icon->getImage().notNull()) { mActionIcons["partial"] = icon->getImage(); - removeChild(icon); + removeChild(icon, TRUE); } return LLPanelGroupTab::postBuild(); @@ -1805,7 +1805,7 @@ BOOL LLPanelGroupRolesSubTab::postBuildSubTab(LLView* root) if (txt) { mRemoveEveryoneTxt = txt->getText(); - parent->removeChild(txt); + parent->removeChild(txt, TRUE); } mCreateRoleButton = diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp index dcfede70aa..ea18b2838f 100644 --- a/indra/newview/llpanelobject.cpp +++ b/indra/newview/llpanelobject.cpp @@ -1162,6 +1162,9 @@ void LLPanelObject::onCommitParametric( LLUICtrl* ctrl, void* userdata ) if (selected_type == MI_SCULPT) { self->mObject->setParameterEntryInUse(LLNetworkData::PARAMS_SCULPT, TRUE, TRUE); + LLSculptParams *sculpt_params = (LLSculptParams *)self->mObject->getParameterEntry(LLNetworkData::PARAMS_SCULPT); + if (sculpt_params) + volume_params.setSculptID(sculpt_params->getSculptTexture(), 0); } else { diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 98f842902d..6698ee7505 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -101,7 +101,7 @@ LLColor4 LLSelectMgr::sHighlightParentColor; LLColor4 LLSelectMgr::sHighlightChildColor; LLColor4 LLSelectMgr::sContextSilhouetteColor; -static LLObjectSelection* get_null_object_selection(); +static LLObjectSelection *get_null_object_selection(); template<> const LLHandle<LLObjectSelection>::NullFunc LLHandle<LLObjectSelection>::sNullFunc = get_null_object_selection; @@ -125,14 +125,26 @@ struct LLDeRezInfo // +static LLPointer<LLObjectSelection> sNullSelection; + // // Functions // -LLObjectSelection* get_null_object_selection() +void LLSelectMgr::cleanupGlobals() +{ + delete gSelectMgr; + gSelectMgr = NULL; + sNullSelection = NULL; +} + +LLObjectSelection *get_null_object_selection() { - static LLObjectSelection null_selection; - return &null_selection;; + if (sNullSelection.isNull()) + { + sNullSelection = new LLObjectSelection; + } + return sNullSelection; } diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h index 0b4392f318..65f58da1cc 100644 --- a/indra/newview/llselectmgr.h +++ b/indra/newview/llselectmgr.h @@ -94,9 +94,12 @@ typedef enum e_selection_type class LLObjectSelection : public std::list<LLSelectNode*>, public LLRefCount { friend class LLSelectMgr; + +protected: + ~LLObjectSelection(); + public: LLObjectSelection(); - virtual ~LLObjectSelection(); void updateEffects(); @@ -195,6 +198,8 @@ public: LLSelectMgr(); ~LLSelectMgr(); + static void cleanupGlobals(); + // LLEditMenuHandler interface virtual BOOL canUndo(); virtual void undo(); diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 315a8e2828..43417d0006 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -1697,7 +1697,7 @@ void LLSpatialPartition::processImagery(LLCamera* camera) cube_map->initGL(); } - if (gPipeline.mCubeBuffer == NULL) + if (gPipeline.mCubeBuffer.isNull()) { gPipeline.mCubeBuffer = new LLCubeMap(); gPipeline.mCubeBuffer->initGL(); diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h index c65f4063bf..a2f24005df 100644 --- a/indra/newview/llspatialpartition.h +++ b/indra/newview/llspatialpartition.h @@ -146,7 +146,6 @@ public: } eSetStateMode; LLSpatialGroup(OctreeNode* node, LLSpatialPartition* part); - virtual ~LLSpatialGroup(); BOOL isDead() { return isState(DEAD); } BOOL isState(U32 state) const { return mState & state ? TRUE : FALSE; } @@ -190,6 +189,8 @@ public: virtual void handleChildRemoval(const OctreeNode* parent, const OctreeNode* child); protected: + virtual ~LLSpatialGroup(); + U32 mState; S32 mLODHash; static S32 sLODSeed; @@ -323,11 +324,13 @@ public: // class for creating bridges between spatial partitions class LLSpatialBridge : public LLDrawable, public LLSpatialPartition { +protected: + ~LLSpatialBridge(); + public: typedef std::vector<LLPointer<LLSpatialBridge> > bridge_vector_t; LLSpatialBridge(LLDrawable* root, U32 data_mask); - virtual ~LLSpatialBridge(); virtual BOOL isSpatialBridge() const { return TRUE; } diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 5e981b8922..f2d0d594f8 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -2787,25 +2787,26 @@ void update_app(BOOL mandatory, const std::string& auth_msg) LLStringBase<char>::format_map_t args; args["[MESSAGE]"] = msg; - BOOL *mandatoryp = new BOOL(mandatory); + // represent a bool as a null/non-null pointer + void *mandatoryp = mandatory ? &mandatory : NULL; #if LL_WINDOWS if (mandatory) { gViewerWindow->alertXml("DownloadWindowsMandatory", args, update_dialog_callback, - (void *)mandatoryp); + mandatoryp); } else { #if LL_RELEASE_FOR_DOWNLOAD gViewerWindow->alertXml("DownloadWindowsReleaseForDownload", args, update_dialog_callback, - (void *)mandatoryp); + mandatoryp); #else gViewerWindow->alertXml("DownloadWindows", args, update_dialog_callback, - (void *)mandatoryp); + mandatoryp); #endif } #else @@ -2813,18 +2814,18 @@ void update_app(BOOL mandatory, const std::string& auth_msg) { gViewerWindow->alertXml("DownloadMacMandatory", args, update_dialog_callback, - (void *)mandatoryp); + mandatoryp); } else { #if LL_RELEASE_FOR_DOWNLOAD gViewerWindow->alertXml("DownloadMacReleaseForDownload", args, update_dialog_callback, - (void *)mandatoryp); + mandatoryp); #else gViewerWindow->alertXml("DownloadMac", args, update_dialog_callback, - (void *)mandatoryp); + mandatoryp); #endif } #endif @@ -2835,7 +2836,7 @@ void update_app(BOOL mandatory, const std::string& auth_msg) void update_dialog_callback(S32 option, void *userdata) { std::string update_exe_path; - BOOL mandatory = *(BOOL *)userdata; + BOOL mandatory = userdata != NULL; #if !LL_RELEASE_FOR_DOWNLOAD if (option == 2) diff --git a/indra/newview/lltoolbrush.cpp b/indra/newview/lltoolbrush.cpp index e56635e181..69de1142a4 100644 --- a/indra/newview/lltoolbrush.cpp +++ b/indra/newview/lltoolbrush.cpp @@ -397,7 +397,7 @@ void LLToolBrushLand::handleSelect() // if (!mBrushSelected) { mLastShowParcelOwners = gSavedSettings.getBOOL("ShowParcelOwners"); - gSavedSettings.setBOOL("ShowParcelOwners", TRUE); + gSavedSettings.setBOOL("ShowParcelOwners", mLastShowParcelOwners); mBrushSelected = TRUE; } } @@ -410,6 +410,7 @@ void LLToolBrushLand::handleDeselect() gEditMenuHandler = NULL; } gFloaterTools->setStatusText(""); + mLastShowParcelOwners = gSavedSettings.getBOOL("ShowParcelOwners"); gSavedSettings.setBOOL("ShowParcelOwners", mLastShowParcelOwners); gParcelMgr->setSelectionVisible(TRUE); mBrushSelected = FALSE; diff --git a/indra/newview/lltoolselectland.cpp b/indra/newview/lltoolselectland.cpp index f64bf6bf2d..84834d5802 100644 --- a/indra/newview/lltoolselectland.cpp +++ b/indra/newview/lltoolselectland.cpp @@ -198,7 +198,7 @@ void LLToolSelectLand::handleSelect() { gFloaterTools->setStatusText("Click and drag to select land"); mLastShowParcelOwners = gSavedSettings.getBOOL("ShowParcelOwners"); - gSavedSettings.setBOOL("ShowParcelOwners", TRUE); + gSavedSettings.setBOOL("ShowParcelOwners", mLastShowParcelOwners); } @@ -206,6 +206,7 @@ void LLToolSelectLand::handleDeselect() { gFloaterTools->setStatusText(""); mSelection = NULL; + mLastShowParcelOwners = gSavedSettings.getBOOL("ShowParcelOwners"); //gParcelMgr->deselectLand(); gSavedSettings.setBOOL("ShowParcelOwners", mLastShowParcelOwners); } diff --git a/indra/newview/llviewerinventory.h b/indra/newview/llviewerinventory.h index 2668e1121c..84cdadaf9b 100644 --- a/indra/newview/llviewerinventory.h +++ b/indra/newview/llviewerinventory.h @@ -171,7 +171,6 @@ protected: class LLInventoryCallback : public LLRefCount { public: - virtual ~LLInventoryCallback() {} virtual void fire(const LLUUID& inv_item) = 0; }; @@ -186,8 +185,11 @@ class RezAttachmentCallback : public LLInventoryCallback { public: RezAttachmentCallback(LLViewerJointAttachment *attachmentp); - ~RezAttachmentCallback(); void fire(const LLUUID& inv_item); + +protected: + ~RezAttachmentCallback(); + private: LLViewerJointAttachment* mAttach; }; diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index c8b62146d6..898af8932f 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -1408,6 +1408,8 @@ void init_server_menu(LLMenuGL* menu) menu->createJumpKeys(); } +static std::vector<LLPointer<view_listener_t> > sMenus; + //----------------------------------------------------------------------------- // cleanup_menus() //----------------------------------------------------------------------------- @@ -1438,7 +1440,9 @@ void cleanup_menus() gPopupMenuView = NULL; delete gMenuHolder; - gMenuHolder = NULL; + gMenuHolder = NULL; + + sMenus.clear(); } //----------------------------------------------------------------------------- @@ -7529,199 +7533,205 @@ class LLToolsSelectTool : public view_listener_t } }; +static void addMenu(view_listener_t *menu, const char *name) +{ + sMenus.push_back(menu); + menu->registerListener(gMenuHolder, name); +} + void initialize_menus() { // File menu init_menu_file(); // Edit menu - (new LLEditUndo())->registerListener(gMenuHolder, "Edit.Undo"); - (new LLEditRedo())->registerListener(gMenuHolder, "Edit.Redo"); - (new LLEditCut())->registerListener(gMenuHolder, "Edit.Cut"); - (new LLEditCopy())->registerListener(gMenuHolder, "Edit.Copy"); - (new LLEditPaste())->registerListener(gMenuHolder, "Edit.Paste"); - (new LLEditDelete())->registerListener(gMenuHolder, "Edit.Delete"); - (new LLEditSearch())->registerListener(gMenuHolder, "Edit.Search"); - (new LLEditSelectAll())->registerListener(gMenuHolder, "Edit.SelectAll"); - (new LLEditDeselect())->registerListener(gMenuHolder, "Edit.Deselect"); - (new LLEditDuplicate())->registerListener(gMenuHolder, "Edit.Duplicate"); - (new LLEditTakeOff())->registerListener(gMenuHolder, "Edit.TakeOff"); - - (new LLEditEnableUndo())->registerListener(gMenuHolder, "Edit.EnableUndo"); - (new LLEditEnableRedo())->registerListener(gMenuHolder, "Edit.EnableRedo"); - (new LLEditEnableCut())->registerListener(gMenuHolder, "Edit.EnableCut"); - (new LLEditEnableCopy())->registerListener(gMenuHolder, "Edit.EnableCopy"); - (new LLEditEnablePaste())->registerListener(gMenuHolder, "Edit.EnablePaste"); - (new LLEditEnableDelete())->registerListener(gMenuHolder, "Edit.EnableDelete"); - (new LLEditEnableSelectAll())->registerListener(gMenuHolder, "Edit.EnableSelectAll"); - (new LLEditEnableDeselect())->registerListener(gMenuHolder, "Edit.EnableDeselect"); - (new LLEditEnableDuplicate())->registerListener(gMenuHolder, "Edit.EnableDuplicate"); - (new LLEditEnableTakeOff())->registerListener(gMenuHolder, "Edit.EnableTakeOff"); - (new LLEditEnableCustomizeAvatar())->registerListener(gMenuHolder, "Edit.EnableCustomizeAvatar"); + addMenu(new LLEditUndo(), "Edit.Undo"); + addMenu(new LLEditRedo(), "Edit.Redo"); + addMenu(new LLEditCut(), "Edit.Cut"); + addMenu(new LLEditCopy(), "Edit.Copy"); + addMenu(new LLEditPaste(), "Edit.Paste"); + addMenu(new LLEditDelete(), "Edit.Delete"); + addMenu(new LLEditSearch(), "Edit.Search"); + addMenu(new LLEditSelectAll(), "Edit.SelectAll"); + addMenu(new LLEditDeselect(), "Edit.Deselect"); + addMenu(new LLEditDuplicate(), "Edit.Duplicate"); + addMenu(new LLEditTakeOff(), "Edit.TakeOff"); + + addMenu(new LLEditEnableUndo(), "Edit.EnableUndo"); + addMenu(new LLEditEnableRedo(), "Edit.EnableRedo"); + addMenu(new LLEditEnableCut(), "Edit.EnableCut"); + addMenu(new LLEditEnableCopy(), "Edit.EnableCopy"); + addMenu(new LLEditEnablePaste(), "Edit.EnablePaste"); + addMenu(new LLEditEnableDelete(), "Edit.EnableDelete"); + addMenu(new LLEditEnableSelectAll(), "Edit.EnableSelectAll"); + addMenu(new LLEditEnableDeselect(), "Edit.EnableDeselect"); + addMenu(new LLEditEnableDuplicate(), "Edit.EnableDuplicate"); + addMenu(new LLEditEnableTakeOff(), "Edit.EnableTakeOff"); + addMenu(new LLEditEnableCustomizeAvatar(), "Edit.EnableCustomizeAvatar"); // View menu - (new LLViewMouselook())->registerListener(gMenuHolder, "View.Mouselook"); - (new LLViewBuildMode())->registerListener(gMenuHolder, "View.BuildMode"); - (new LLViewResetView())->registerListener(gMenuHolder, "View.ResetView"); - (new LLViewLookAtLastChatter())->registerListener(gMenuHolder, "View.LookAtLastChatter"); - (new LLViewShowHoverTips())->registerListener(gMenuHolder, "View.ShowHoverTips"); - (new LLViewHighlightTransparent())->registerListener(gMenuHolder, "View.HighlightTransparent"); - (new LLViewToggleBeacon())->registerListener(gMenuHolder, "View.ToggleBeacon"); - (new LLViewToggleRenderType())->registerListener(gMenuHolder, "View.ToggleRenderType"); - (new LLViewShowHUDAttachments())->registerListener(gMenuHolder, "View.ShowHUDAttachments"); - (new LLViewZoomOut())->registerListener(gMenuHolder, "View.ZoomOut"); - (new LLViewZoomIn())->registerListener(gMenuHolder, "View.ZoomIn"); - (new LLViewZoomDefault())->registerListener(gMenuHolder, "View.ZoomDefault"); - (new LLViewFullscreen())->registerListener(gMenuHolder, "View.Fullscreen"); - (new LLViewDefaultUISize())->registerListener(gMenuHolder, "View.DefaultUISize"); - - (new LLViewEnableMouselook())->registerListener(gMenuHolder, "View.EnableMouselook"); - (new LLViewEnableLastChatter())->registerListener(gMenuHolder, "View.EnableLastChatter"); - - (new LLViewCheckBuildMode())->registerListener(gMenuHolder, "View.CheckBuildMode"); - (new LLViewCheckShowHoverTips())->registerListener(gMenuHolder, "View.CheckShowHoverTips"); - (new LLViewCheckHighlightTransparent())->registerListener(gMenuHolder, "View.CheckHighlightTransparent"); - (new LLViewCheckBeaconEnabled())->registerListener(gMenuHolder, "View.CheckBeaconEnabled"); - (new LLViewCheckRenderType())->registerListener(gMenuHolder, "View.CheckRenderType"); - (new LLViewCheckHUDAttachments())->registerListener(gMenuHolder, "View.CheckHUDAttachments"); + addMenu(new LLViewMouselook(), "View.Mouselook"); + addMenu(new LLViewBuildMode(), "View.BuildMode"); + addMenu(new LLViewResetView(), "View.ResetView"); + addMenu(new LLViewLookAtLastChatter(), "View.LookAtLastChatter"); + addMenu(new LLViewShowHoverTips(), "View.ShowHoverTips"); + addMenu(new LLViewHighlightTransparent(), "View.HighlightTransparent"); + addMenu(new LLViewToggleBeacon(), "View.ToggleBeacon"); + addMenu(new LLViewToggleRenderType(), "View.ToggleRenderType"); + addMenu(new LLViewShowHUDAttachments(), "View.ShowHUDAttachments"); + addMenu(new LLViewZoomOut(), "View.ZoomOut"); + addMenu(new LLViewZoomIn(), "View.ZoomIn"); + addMenu(new LLViewZoomDefault(), "View.ZoomDefault"); + addMenu(new LLViewFullscreen(), "View.Fullscreen"); + addMenu(new LLViewDefaultUISize(), "View.DefaultUISize"); + + addMenu(new LLViewEnableMouselook(), "View.EnableMouselook"); + addMenu(new LLViewEnableLastChatter(), "View.EnableLastChatter"); + + addMenu(new LLViewCheckBuildMode(), "View.CheckBuildMode"); + addMenu(new LLViewCheckShowHoverTips(), "View.CheckShowHoverTips"); + addMenu(new LLViewCheckHighlightTransparent(), "View.CheckHighlightTransparent"); + addMenu(new LLViewCheckBeaconEnabled(), "View.CheckBeaconEnabled"); + addMenu(new LLViewCheckRenderType(), "View.CheckRenderType"); + addMenu(new LLViewCheckHUDAttachments(), "View.CheckHUDAttachments"); // World menu - (new LLWorldChat())->registerListener(gMenuHolder, "World.Chat"); - (new LLWorldStartGesture())->registerListener(gMenuHolder, "World.StartGesture"); - (new LLWorldAlwaysRun())->registerListener(gMenuHolder, "World.AlwaysRun"); - (new LLWorldFly())->registerListener(gMenuHolder, "World.Fly"); - (new LLWorldCreateLandmark())->registerListener(gMenuHolder, "World.CreateLandmark"); - (new LLWorldSetHomeLocation())->registerListener(gMenuHolder, "World.SetHomeLocation"); - (new LLWorldTeleportHome())->registerListener(gMenuHolder, "World.TeleportHome"); - (new LLWorldSetAway())->registerListener(gMenuHolder, "World.SetAway"); - (new LLWorldSetBusy())->registerListener(gMenuHolder, "World.SetBusy"); + addMenu(new LLWorldChat(), "World.Chat"); + addMenu(new LLWorldStartGesture(), "World.StartGesture"); + addMenu(new LLWorldAlwaysRun(), "World.AlwaysRun"); + addMenu(new LLWorldFly(), "World.Fly"); + addMenu(new LLWorldCreateLandmark(), "World.CreateLandmark"); + addMenu(new LLWorldSetHomeLocation(), "World.SetHomeLocation"); + addMenu(new LLWorldTeleportHome(), "World.TeleportHome"); + addMenu(new LLWorldSetAway(), "World.SetAway"); + addMenu(new LLWorldSetBusy(), "World.SetBusy"); - (new LLWorldEnableCreateLandmark())->registerListener(gMenuHolder, "World.EnableCreateLandmark"); - (new LLWorldEnableSetHomeLocation())->registerListener(gMenuHolder, "World.EnableSetHomeLocation"); - (new LLWorldEnableTeleportHome())->registerListener(gMenuHolder, "World.EnableTeleportHome"); - (new LLWorldEnableBuyLand())->registerListener(gMenuHolder, "World.EnableBuyLand"); + addMenu(new LLWorldEnableCreateLandmark(), "World.EnableCreateLandmark"); + addMenu(new LLWorldEnableSetHomeLocation(), "World.EnableSetHomeLocation"); + addMenu(new LLWorldEnableTeleportHome(), "World.EnableTeleportHome"); + addMenu(new LLWorldEnableBuyLand(), "World.EnableBuyLand"); - (new LLWorldCheckAlwaysRun())->registerListener(gMenuHolder, "World.CheckAlwaysRun"); + addMenu(new LLWorldCheckAlwaysRun(), "World.CheckAlwaysRun"); - (new LLWorldForceSun())->registerListener(gMenuHolder, "World.ForceSun"); + addMenu(new LLWorldForceSun(), "World.ForceSun"); // Tools menu - (new LLToolsSelectTool())->registerListener(gMenuHolder, "Tools.SelectTool"); - (new LLToolsSelectOnlyMyObjects())->registerListener(gMenuHolder, "Tools.SelectOnlyMyObjects"); - (new LLToolsSelectOnlyMovableObjects())->registerListener(gMenuHolder, "Tools.SelectOnlyMovableObjects"); - (new LLToolsSelectBySurrounding())->registerListener(gMenuHolder, "Tools.SelectBySurrounding"); - (new LLToolsShowHiddenSelection())->registerListener(gMenuHolder, "Tools.ShowHiddenSelection"); - (new LLToolsShowSelectionLightRadius())->registerListener(gMenuHolder, "Tools.ShowSelectionLightRadius"); - (new LLToolsSnapObjectXY())->registerListener(gMenuHolder, "Tools.SnapObjectXY"); - (new LLToolsUseSelectionForGrid())->registerListener(gMenuHolder, "Tools.UseSelectionForGrid"); - (new LLToolsLink())->registerListener(gMenuHolder, "Tools.Link"); - (new LLToolsUnlink())->registerListener(gMenuHolder, "Tools.Unlink"); - (new LLToolsStopAllAnimations())->registerListener(gMenuHolder, "Tools.StopAllAnimations"); - (new LLToolsLookAtSelection())->registerListener(gMenuHolder, "Tools.LookAtSelection"); - (new LLToolsBuyOrTake())->registerListener(gMenuHolder, "Tools.BuyOrTake"); - (new LLToolsTakeCopy())->registerListener(gMenuHolder, "Tools.TakeCopy"); - (new LLToolsSaveToInventory())->registerListener(gMenuHolder, "Tools.SaveToInventory"); - (new LLToolsSaveToObjectInventory())->registerListener(gMenuHolder, "Tools.SaveToObjectInventory"); - (new LLToolsSelectedScriptAction())->registerListener(gMenuHolder, "Tools.SelectedScriptAction"); - - (new LLToolsEnableToolNotPie())->registerListener(gMenuHolder, "Tools.EnableToolNotPie"); - (new LLToolsEnableLink())->registerListener(gMenuHolder, "Tools.EnableLink"); - (new LLToolsEnableUnlink())->registerListener(gMenuHolder, "Tools.EnableUnlink"); - (new LLToolsEnableBuyOrTake())->registerListener(gMenuHolder, "Tools.EnableBuyOrTake"); - (new LLToolsEnableTakeCopy())->registerListener(gMenuHolder, "Tools.EnableTakeCopy"); - (new LLToolsEnableSaveToInventory())->registerListener(gMenuHolder, "Tools.SaveToInventory"); - (new LLToolsEnableSaveToObjectInventory())->registerListener(gMenuHolder, "Tools.SaveToObjectInventory"); - - /*(new LLToolsVisibleBuyObject())->registerListener(gMenuHolder, "Tools.VisibleBuyObject"); - (new LLToolsVisibleTakeObject())->registerListener(gMenuHolder, "Tools.VisibleTakeObject");*/ + addMenu(new LLToolsSelectTool(), "Tools.SelectTool"); + addMenu(new LLToolsSelectOnlyMyObjects(), "Tools.SelectOnlyMyObjects"); + addMenu(new LLToolsSelectOnlyMovableObjects(), "Tools.SelectOnlyMovableObjects"); + addMenu(new LLToolsSelectBySurrounding(), "Tools.SelectBySurrounding"); + addMenu(new LLToolsShowHiddenSelection(), "Tools.ShowHiddenSelection"); + addMenu(new LLToolsShowSelectionLightRadius(), "Tools.ShowSelectionLightRadius"); + addMenu(new LLToolsSnapObjectXY(), "Tools.SnapObjectXY"); + addMenu(new LLToolsUseSelectionForGrid(), "Tools.UseSelectionForGrid"); + addMenu(new LLToolsLink(), "Tools.Link"); + addMenu(new LLToolsUnlink(), "Tools.Unlink"); + addMenu(new LLToolsStopAllAnimations(), "Tools.StopAllAnimations"); + addMenu(new LLToolsLookAtSelection(), "Tools.LookAtSelection"); + addMenu(new LLToolsBuyOrTake(), "Tools.BuyOrTake"); + addMenu(new LLToolsTakeCopy(), "Tools.TakeCopy"); + addMenu(new LLToolsSaveToInventory(), "Tools.SaveToInventory"); + addMenu(new LLToolsSaveToObjectInventory(), "Tools.SaveToObjectInventory"); + addMenu(new LLToolsSelectedScriptAction(), "Tools.SelectedScriptAction"); + + addMenu(new LLToolsEnableToolNotPie(), "Tools.EnableToolNotPie"); + addMenu(new LLToolsEnableLink(), "Tools.EnableLink"); + addMenu(new LLToolsEnableUnlink(), "Tools.EnableUnlink"); + addMenu(new LLToolsEnableBuyOrTake(), "Tools.EnableBuyOrTake"); + addMenu(new LLToolsEnableTakeCopy(), "Tools.EnableTakeCopy"); + addMenu(new LLToolsEnableSaveToInventory(), "Tools.SaveToInventory"); + addMenu(new LLToolsEnableSaveToObjectInventory(), "Tools.SaveToObjectInventory"); + + /*addMenu(new LLToolsVisibleBuyObject(), "Tools.VisibleBuyObject"); + addMenu(new LLToolsVisibleTakeObject(), "Tools.VisibleTakeObject");*/ // Help menu - (new LLHelpLiveHelp())->registerListener(gMenuHolder, "Help.LiveHelp"); - (new LLHelpMOTD())->registerListener(gMenuHolder, "Help.MOTD"); + addMenu(new LLHelpLiveHelp(), "Help.LiveHelp"); + addMenu(new LLHelpMOTD(), "Help.MOTD"); // Self pie menu - (new LLSelfStandUp())->registerListener(gMenuHolder, "Self.StandUp"); - (new LLSelfRemoveAllAttachments())->registerListener(gMenuHolder, "Self.RemoveAllAttachments"); + addMenu(new LLSelfStandUp(), "Self.StandUp"); + addMenu(new LLSelfRemoveAllAttachments(), "Self.RemoveAllAttachments"); - (new LLSelfEnableStandUp())->registerListener(gMenuHolder, "Self.EnableStandUp"); - (new LLSelfEnableRemoveAllAttachments())->registerListener(gMenuHolder, "Self.EnableRemoveAllAttachments"); + addMenu(new LLSelfEnableStandUp(), "Self.EnableStandUp"); + addMenu(new LLSelfEnableRemoveAllAttachments(), "Self.EnableRemoveAllAttachments"); // Avatar pie menu - (new LLObjectMute())->registerListener(gMenuHolder, "Avatar.Mute"); - (new LLAvatarAddFriend())->registerListener(gMenuHolder, "Avatar.AddFriend"); - (new LLAvatarFreeze())->registerListener(gMenuHolder, "Avatar.Freeze"); - (new LLAvatarDebug())->registerListener(gMenuHolder, "Avatar.Debug"); - (new LLAvatarVisibleDebug())->registerListener(gMenuHolder, "Avatar.VisibleDebug"); - (new LLAvatarEnableDebug())->registerListener(gMenuHolder, "Avatar.EnableDebug"); - (new LLAvatarGiveCard())->registerListener(gMenuHolder, "Avatar.GiveCard"); - (new LLAvatarEject())->registerListener(gMenuHolder, "Avatar.Eject"); - (new LLAvatarSendIM())->registerListener(gMenuHolder, "Avatar.SendIM"); + addMenu(new LLObjectMute(), "Avatar.Mute"); + addMenu(new LLAvatarAddFriend(), "Avatar.AddFriend"); + addMenu(new LLAvatarFreeze(), "Avatar.Freeze"); + addMenu(new LLAvatarDebug(), "Avatar.Debug"); + addMenu(new LLAvatarVisibleDebug(), "Avatar.VisibleDebug"); + addMenu(new LLAvatarEnableDebug(), "Avatar.EnableDebug"); + addMenu(new LLAvatarGiveCard(), "Avatar.GiveCard"); + addMenu(new LLAvatarEject(), "Avatar.Eject"); + addMenu(new LLAvatarSendIM(), "Avatar.SendIM"); - (new LLObjectEnableMute())->registerListener(gMenuHolder, "Avatar.EnableMute"); - (new LLAvatarEnableAddFriend())->registerListener(gMenuHolder, "Avatar.EnableAddFriend"); - (new LLAvatarEnableFreezeEject())->registerListener(gMenuHolder, "Avatar.EnableFreezeEject"); + addMenu(new LLObjectEnableMute(), "Avatar.EnableMute"); + addMenu(new LLAvatarEnableAddFriend(), "Avatar.EnableAddFriend"); + addMenu(new LLAvatarEnableFreezeEject(), "Avatar.EnableFreezeEject"); // Object pie menu - (new LLObjectOpen())->registerListener(gMenuHolder, "Object.Open"); - (new LLObjectBuild())->registerListener(gMenuHolder, "Object.Build"); - (new LLObjectTouch())->registerListener(gMenuHolder, "Object.Touch"); - (new LLObjectSitOrStand())->registerListener(gMenuHolder, "Object.SitOrStand"); - (new LLObjectDelete())->registerListener(gMenuHolder, "Object.Delete"); - (new LLObjectAttachToAvatar())->registerListener(gMenuHolder, "Object.AttachToAvatar"); - (new LLObjectReturn())->registerListener(gMenuHolder, "Object.Return"); - (new LLObjectReportAbuse())->registerListener(gMenuHolder, "Object.ReportAbuse"); - (new LLObjectMute())->registerListener(gMenuHolder, "Object.Mute"); - (new LLObjectBuy())->registerListener(gMenuHolder, "Object.Buy"); - (new LLObjectEdit())->registerListener(gMenuHolder, "Object.Edit"); - (new LLObjectInspect())->registerListener(gMenuHolder, "Object.Inspect"); - - (new LLObjectEnableOpen())->registerListener(gMenuHolder, "Object.EnableOpen"); - (new LLObjectEnableTouch())->registerListener(gMenuHolder, "Object.EnableTouch"); - (new LLObjectEnableSitOrStand())->registerListener(gMenuHolder, "Object.EnableSitOrStand"); - (new LLObjectEnableDelete())->registerListener(gMenuHolder, "Object.EnableDelete"); - (new LLObjectEnableWear())->registerListener(gMenuHolder, "Object.EnableWear"); - (new LLObjectEnableReturn())->registerListener(gMenuHolder, "Object.EnableReturn"); - (new LLObjectEnableReportAbuse())->registerListener(gMenuHolder, "Object.EnableReportAbuse"); - (new LLObjectEnableMute())->registerListener(gMenuHolder, "Object.EnableMute"); - (new LLObjectEnableBuy())->registerListener(gMenuHolder, "Object.EnableBuy"); - - /*(new LLObjectVisibleTouch())->registerListener(gMenuHolder, "Object.VisibleTouch"); - (new LLObjectVisibleCustomTouch())->registerListener(gMenuHolder, "Object.VisibleCustomTouch"); - (new LLObjectVisibleStandUp())->registerListener(gMenuHolder, "Object.VisibleStandUp"); - (new LLObjectVisibleSitHere())->registerListener(gMenuHolder, "Object.VisibleSitHere"); - (new LLObjectVisibleCustomSit())->registerListener(gMenuHolder, "Object.VisibleCustomSit");*/ + addMenu(new LLObjectOpen(), "Object.Open"); + addMenu(new LLObjectBuild(), "Object.Build"); + addMenu(new LLObjectTouch(), "Object.Touch"); + addMenu(new LLObjectSitOrStand(), "Object.SitOrStand"); + addMenu(new LLObjectDelete(), "Object.Delete"); + addMenu(new LLObjectAttachToAvatar(), "Object.AttachToAvatar"); + addMenu(new LLObjectReturn(), "Object.Return"); + addMenu(new LLObjectReportAbuse(), "Object.ReportAbuse"); + addMenu(new LLObjectMute(), "Object.Mute"); + addMenu(new LLObjectBuy(), "Object.Buy"); + addMenu(new LLObjectEdit(), "Object.Edit"); + addMenu(new LLObjectInspect(), "Object.Inspect"); + + addMenu(new LLObjectEnableOpen(), "Object.EnableOpen"); + addMenu(new LLObjectEnableTouch(), "Object.EnableTouch"); + addMenu(new LLObjectEnableSitOrStand(), "Object.EnableSitOrStand"); + addMenu(new LLObjectEnableDelete(), "Object.EnableDelete"); + addMenu(new LLObjectEnableWear(), "Object.EnableWear"); + addMenu(new LLObjectEnableReturn(), "Object.EnableReturn"); + addMenu(new LLObjectEnableReportAbuse(), "Object.EnableReportAbuse"); + addMenu(new LLObjectEnableMute(), "Object.EnableMute"); + addMenu(new LLObjectEnableBuy(), "Object.EnableBuy"); + + /*addMenu(new LLObjectVisibleTouch(), "Object.VisibleTouch"); + addMenu(new LLObjectVisibleCustomTouch(), "Object.VisibleCustomTouch"); + addMenu(new LLObjectVisibleStandUp(), "Object.VisibleStandUp"); + addMenu(new LLObjectVisibleSitHere(), "Object.VisibleSitHere"); + addMenu(new LLObjectVisibleCustomSit(), "Object.VisibleCustomSit");*/ // Attachment pie menu - (new LLAttachmentDrop())->registerListener(gMenuHolder, "Attachment.Drop"); - (new LLAttachmentDetach())->registerListener(gMenuHolder, "Attachment.Detach"); + addMenu(new LLAttachmentDrop(), "Attachment.Drop"); + addMenu(new LLAttachmentDetach(), "Attachment.Detach"); - (new LLAttachmentEnableDrop())->registerListener(gMenuHolder, "Attachment.EnableDrop"); - (new LLAttachmentEnableDetach())->registerListener(gMenuHolder, "Attachment.EnableDetach"); + addMenu(new LLAttachmentEnableDrop(), "Attachment.EnableDrop"); + addMenu(new LLAttachmentEnableDetach(), "Attachment.EnableDetach"); // Land pie menu - (new LLLandBuild())->registerListener(gMenuHolder, "Land.Build"); - (new LLLandSit())->registerListener(gMenuHolder, "Land.Sit"); - (new LLLandBuyPass())->registerListener(gMenuHolder, "Land.BuyPass"); - (new LLLandEdit())->registerListener(gMenuHolder, "Land.Edit"); + addMenu(new LLLandBuild(), "Land.Build"); + addMenu(new LLLandSit(), "Land.Sit"); + addMenu(new LLLandBuyPass(), "Land.BuyPass"); + addMenu(new LLLandEdit(), "Land.Edit"); - (new LLLandEnableBuyPass())->registerListener(gMenuHolder, "Land.EnableBuyPass"); + addMenu(new LLLandEnableBuyPass(), "Land.EnableBuyPass"); // Generic actions - (new LLShowFloater())->registerListener(gMenuHolder, "ShowFloater"); - (new LLPromptShowURL())->registerListener(gMenuHolder, "PromptShowURL"); - (new LLPromptShowFile())->registerListener(gMenuHolder, "PromptShowFile"); - (new LLShowAgentProfile())->registerListener(gMenuHolder, "ShowAgentProfile"); - (new LLShowAgentGroups())->registerListener(gMenuHolder, "ShowAgentGroups"); - (new LLToggleControl())->registerListener(gMenuHolder, "ToggleControl"); - - (new LLGoToObject())->registerListener(gMenuHolder, "GoToObject"); - (new LLPayObject())->registerListener(gMenuHolder, "PayObject"); - - (new LLEnablePayObject())->registerListener(gMenuHolder, "EnablePayObject"); - (new LLEnableEdit())->registerListener(gMenuHolder, "EnableEdit"); - - (new LLFloaterVisible())->registerListener(gMenuHolder, "FloaterVisible"); - (new LLSomethingSelected())->registerListener(gMenuHolder, "SomethingSelected"); - (new LLSomethingSelectedNoHUD())->registerListener(gMenuHolder, "SomethingSelectedNoHUD"); - (new LLEditableSelected())->registerListener(gMenuHolder, "EditableSelected"); + addMenu(new LLShowFloater(), "ShowFloater"); + addMenu(new LLPromptShowURL(), "PromptShowURL"); + addMenu(new LLPromptShowFile(), "PromptShowFile"); + addMenu(new LLShowAgentProfile(), "ShowAgentProfile"); + addMenu(new LLShowAgentGroups(), "ShowAgentGroups"); + addMenu(new LLToggleControl(), "ToggleControl"); + + addMenu(new LLGoToObject(), "GoToObject"); + addMenu(new LLPayObject(), "PayObject"); + + addMenu(new LLEnablePayObject(), "EnablePayObject"); + addMenu(new LLEnableEdit(), "EnableEdit"); + + addMenu(new LLFloaterVisible(), "FloaterVisible"); + addMenu(new LLSomethingSelected(), "SomethingSelected"); + addMenu(new LLSomethingSelectedNoHUD(), "SomethingSelectedNoHUD"); + addMenu(new LLEditableSelected(), "EditableSelected"); } diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 18f5e54154..9bcf1ccaee 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -767,8 +767,8 @@ void open_offer(const std::vector<LLUUID>& items, const std::string& from_name) if (check_offer_throttle(from_name, false)) { // I'm not sure this is a good idea. JC - // bool show_keep_discard = item->getPermissions().getCreator() != gAgent.getID(); - bool show_keep_discard = true; + bool show_keep_discard = item->getPermissions().getCreator() != gAgent.getID(); + //bool show_keep_discard = true; switch(item->getType()) { case LLAssetType::AT_NOTECARD: @@ -2197,7 +2197,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data) if (chat.mSourceType == CHAT_SOURCE_OBJECT && chat.mChatType != CHAT_TYPE_DEBUG_MSG) { - LLViewerPartSourceChat *psc = new LLViewerPartSourceChat(chatter->getPositionAgent()); + LLPointer<LLViewerPartSourceChat> psc = new LLViewerPartSourceChat(chatter->getPositionAgent()); psc->setSourceObject(chatter); psc->setColor(color); //We set the particles to be owned by the object's owner, diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index e15f5da537..710ba186f9 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -4000,7 +4000,7 @@ void LLViewerObject::unpackParticleSource(const S32 block_num, const LLUUID& own } else { - LLViewerPartSourceScript *pss = LLViewerPartSourceScript::unpackPSS(this, NULL, block_num); + LLPointer<LLViewerPartSourceScript> pss = LLViewerPartSourceScript::unpackPSS(this, NULL, block_num); //If the owner is muted, don't create the system if(gMuteListp->isMuted(owner_id)) return; @@ -4049,7 +4049,7 @@ void LLViewerObject::unpackParticleSource(LLDataPacker &dp, const LLUUID& owner_ } else { - LLViewerPartSourceScript *pss = LLViewerPartSourceScript::unpackPSS(this, NULL, dp); + LLPointer<LLViewerPartSourceScript> pss = LLViewerPartSourceScript::unpackPSS(this, NULL, dp); //If the owner is muted, don't create the system if(gMuteListp->isMuted(owner_id)) return; // We need to be able to deal with a particle source that hasn't changed, but still got an update! diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index 3e885233fd..f6aaadd40b 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -96,7 +96,7 @@ public: class LLViewerObject : public LLPrimitive, public LLRefCount { protected: - virtual ~LLViewerObject(); // use unref() + ~LLViewerObject(); // use unref() // TomY: Provide for a list of extra parameter structures, mapped by structure name struct ExtraParameter diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index 5af3d532a6..556e0bc79b 100644 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -2557,8 +2557,21 @@ bool LLParcelSelection::hasOthersSelected() const return mSelectedOtherCount != 0; } +static LLPointer<LLParcelSelection> sNullSelection; + LLParcelSelection* get_null_parcel_selection() { - static LLParcelSelection null_selection; - return &null_selection; + if (sNullSelection.isNull()) + { + sNullSelection = new LLParcelSelection; + } + + return sNullSelection; +} + +void LLViewerParcelMgr::cleanupGlobals() +{ + delete gParcelMgr; + gParcelMgr = NULL; + sNullSelection = NULL; } diff --git a/indra/newview/llviewerparcelmgr.h b/indra/newview/llviewerparcelmgr.h index 879ce2dd8a..20c6b6895d 100644 --- a/indra/newview/llviewerparcelmgr.h +++ b/indra/newview/llviewerparcelmgr.h @@ -53,12 +53,13 @@ class LLParcelSelection : public LLRefCount { friend class LLViewerParcelMgr; +protected: + ~LLParcelSelection(); + public: LLParcelSelection(LLParcel* parcel); LLParcelSelection(); - ~LLParcelSelection(); - // this can return NULL at any time, as parcel selection // might have been invalidated. LLParcel* getParcel() { return mParcel; } @@ -99,6 +100,8 @@ public: LLViewerParcelMgr(); ~LLViewerParcelMgr(); + static void cleanupGlobals(); + BOOL selectionEmpty() const; F32 getSelectionWidth() const { return F32(mEastNorth.mdV[VX] - mWestSouth.mdV[VX]); } F32 getSelectionHeight() const { return F32(mEastNorth.mdV[VY] - mWestSouth.mdV[VY]); } diff --git a/indra/newview/llviewerpartsim.cpp b/indra/newview/llviewerpartsim.cpp index 6d4e8bfeff..9b7e44a523 100644 --- a/indra/newview/llviewerpartsim.cpp +++ b/indra/newview/llviewerpartsim.cpp @@ -83,7 +83,7 @@ LLViewerPart &LLViewerPart::operator=(const LLViewerPart &part) return *this; } -void LLViewerPart::init(LLViewerPartSource *sourcep, LLViewerImage *imagep, LLVPCallback cb) +void LLViewerPart::init(LLPointer<LLViewerPartSource> sourcep, LLViewerImage *imagep, LLVPCallback cb) { LLMemType mt(LLMemType::MTYPE_PARTICLES); mPartID = LLViewerPart::sNextPartID; @@ -653,7 +653,7 @@ void LLViewerPartSim::updateSimulation() } -void LLViewerPartSim::addPartSource(LLViewerPartSource *sourcep) +void LLViewerPartSim::addPartSource(LLPointer<LLViewerPartSource> sourcep) { LLMemType mt(LLMemType::MTYPE_PARTICLES); if (!sourcep) diff --git a/indra/newview/llviewerpartsim.h b/indra/newview/llviewerpartsim.h index b0b9500ac6..afde3049f7 100644 --- a/indra/newview/llviewerpartsim.h +++ b/indra/newview/llviewerpartsim.h @@ -33,12 +33,13 @@ typedef void (*LLVPCallback)(LLViewerPart &part, const F32 dt); class LLViewerPart : public LLPartData, public LLRefCount { +protected: + ~LLViewerPart(); public: LLViewerPart(); - ~LLViewerPart(); LLViewerPart &operator=(const LLViewerPart &part); - void init(LLViewerPartSource *sourcep, LLViewerImage *imagep, LLVPCallback cb); + void init(LLPointer<LLViewerPartSource> sourcep, LLViewerImage *imagep, LLVPCallback cb); U32 mPartID; // Particle ID used primarily for moving between groups @@ -113,7 +114,7 @@ public: void updateSimulation(); - void addPartSource(LLViewerPartSource *sourcep); + void addPartSource(LLPointer<LLViewerPartSource> sourcep); void cleanupRegion(LLViewerRegion *regionp); diff --git a/indra/newview/llviewerpartsource.cpp b/indra/newview/llviewerpartsource.cpp index 6a92ba5087..01c835dbf0 100644 --- a/indra/newview/llviewerpartsource.cpp +++ b/indra/newview/llviewerpartsource.cpp @@ -290,7 +290,7 @@ void LLViewerPartSourceScript::update(const F32 dt) } // static -LLViewerPartSourceScript *LLViewerPartSourceScript::unpackPSS(LLViewerObject *source_objp, LLViewerPartSourceScript *pssp, const S32 block_num) +LLPointer<LLViewerPartSourceScript> LLViewerPartSourceScript::unpackPSS(LLViewerObject *source_objp, LLPointer<LLViewerPartSourceScript> pssp, const S32 block_num) { LLMemType mt(LLMemType::MTYPE_PARTICLES); if (!pssp) @@ -299,10 +299,9 @@ LLViewerPartSourceScript *LLViewerPartSourceScript::unpackPSS(LLViewerObject *so { return NULL; } - LLViewerPartSourceScript *new_pssp = new LLViewerPartSourceScript(source_objp); + LLPointer<LLViewerPartSourceScript> new_pssp = new LLViewerPartSourceScript(source_objp); if (!new_pssp->mPartSysData.unpackBlock(block_num)) { - delete new_pssp; return NULL; } if (new_pssp->mPartSysData.mTargetUUID.notNull()) @@ -333,15 +332,14 @@ LLViewerPartSourceScript *LLViewerPartSourceScript::unpackPSS(LLViewerObject *so } -LLViewerPartSourceScript *LLViewerPartSourceScript::unpackPSS(LLViewerObject *source_objp, LLViewerPartSourceScript *pssp, LLDataPacker &dp) +LLPointer<LLViewerPartSourceScript> LLViewerPartSourceScript::unpackPSS(LLViewerObject *source_objp, LLPointer<LLViewerPartSourceScript> pssp, LLDataPacker &dp) { LLMemType mt(LLMemType::MTYPE_PARTICLES); if (!pssp) { - LLViewerPartSourceScript *new_pssp = new LLViewerPartSourceScript(source_objp); + LLPointer<LLViewerPartSourceScript> new_pssp = new LLViewerPartSourceScript(source_objp); if (!new_pssp->mPartSysData.unpack(dp)) { - delete new_pssp; return NULL; } if (new_pssp->mPartSysData.mTargetUUID.notNull()) @@ -402,8 +400,8 @@ void LLViewerPartSourceSpiral::updatePart(LLViewerPart &part, const F32 dt) F32 frac = part.mLastUpdateTime/part.mMaxAge; LLVector3 center_pos; - LLViewerPartSource *ps = (LLViewerPartSource*)part.mPartSourcep; - LLViewerPartSourceSpiral *pss = (LLViewerPartSourceSpiral *)ps; + LLPointer<LLViewerPartSource>& ps = part.mPartSourcep; + LLViewerPartSourceSpiral *pss = (LLViewerPartSourceSpiral *)ps.get(); if (!pss->mSourceObjectp.isNull() && !pss->mSourceObjectp->mDrawable.isNull()) { part.mPosAgent = pss->mSourceObjectp->getRenderPosition(); diff --git a/indra/newview/llviewerpartsource.h b/indra/newview/llviewerpartsource.h index 4bd577b7a5..30ea00809a 100644 --- a/indra/newview/llviewerpartsource.h +++ b/indra/newview/llviewerpartsource.h @@ -87,8 +87,8 @@ public: BOOL updateFromMesg(); // Returns a new particle source to attach to an object... - static LLViewerPartSourceScript *unpackPSS(LLViewerObject *source_objp, LLViewerPartSourceScript *pssp, const S32 block_num); - static LLViewerPartSourceScript *unpackPSS(LLViewerObject *source_objp, LLViewerPartSourceScript *pssp, LLDataPacker &dp); + static LLPointer<LLViewerPartSourceScript> unpackPSS(LLViewerObject *source_objp, LLPointer<LLViewerPartSourceScript> pssp, const S32 block_num); + static LLPointer<LLViewerPartSourceScript> unpackPSS(LLViewerObject *source_objp, LLPointer<LLViewerPartSourceScript> pssp, LLDataPacker &dp); LLViewerImage *getImage() const { return mImagep; } void setImage(LLViewerImage *imagep); @@ -137,7 +137,6 @@ class LLViewerPartSourceBeam : public LLViewerPartSource { public: LLViewerPartSourceBeam(); - ~LLViewerPartSourceBeam(); /*virtual*/ void setDead(); @@ -155,6 +154,7 @@ public: LLVector3d mLKGTargetPosGlobal; LLColor4 mColor; protected: + ~LLViewerPartSourceBeam(); }; diff --git a/indra/newview/llvoclouds.h b/indra/newview/llvoclouds.h index 180e4703b9..5f5301db20 100644 --- a/indra/newview/llvoclouds.h +++ b/indra/newview/llvoclouds.h @@ -23,7 +23,6 @@ class LLVOClouds : public LLAlphaObject { public: LLVOClouds(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp ); - virtual ~LLVOClouds(); // Initialize data that's only inited once per class. static void initClass(); @@ -53,6 +52,8 @@ public: void setCloudGroup(LLCloudGroup *cgp) { mCloudGroupp = cgp; } protected: + virtual ~LLVOClouds(); + LLCloudGroup *mCloudGroupp; }; diff --git a/indra/newview/llvograss.h b/indra/newview/llvograss.h index 38aef64cd8..b1839c0588 100644 --- a/indra/newview/llvograss.h +++ b/indra/newview/llvograss.h @@ -21,7 +21,6 @@ class LLVOGrass : public LLAlphaObject { public: LLVOGrass(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp); - virtual ~LLVOGrass(); // Initialize data that's only inited once per class. static void initClass(); @@ -84,6 +83,9 @@ public: F32 mBladeWindAngle; F32 mBWAOverlap; +protected: + ~LLVOGrass(); + private: void updateSpecies(); F32 mLastHeight; // For cheap update hack diff --git a/indra/newview/llvoground.h b/indra/newview/llvoground.h index 587b0064de..9bf5be7057 100644 --- a/indra/newview/llvoground.h +++ b/indra/newview/llvoground.h @@ -18,9 +18,10 @@ class LLVOGround : public LLStaticViewerObject { protected: + ~LLVOGround(); + public: LLVOGround(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp); - virtual ~LLVOGround(); /*virtual*/ BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time); diff --git a/indra/newview/llvopartgroup.h b/indra/newview/llvopartgroup.h index 4082700971..df1631cbc7 100644 --- a/indra/newview/llvopartgroup.h +++ b/indra/newview/llvopartgroup.h @@ -30,8 +30,6 @@ public: LLVOPartGroup(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp); - ~LLVOPartGroup(); - /*virtual*/ BOOL isActive() const; // Whether this object needs to do an idleUpdate. BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time); BOOL isParticle(); @@ -58,6 +56,8 @@ public: LLViewerPartGroup* getViewerPartGroup() { return mViewerPartGroupp; } protected: + ~LLVOPartGroup(); + LLViewerPartGroup *mViewerPartGroupp; LLVector3 mExtents[2]; LLColor4 mDebugColor; diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp index 9da6027ab5..aa4c6f0086 100644 --- a/indra/newview/llvosky.cpp +++ b/indra/newview/llvosky.cpp @@ -518,8 +518,6 @@ LLVOSky::LLVOSky(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp) mSun.setIntensity(SUN_INTENSITY); mMoon.setIntensity(0.1f * SUN_INTENSITY); - mCubeMap = NULL; - mSunTexturep = gImageList.getImage(gSunTextureID, TRUE, TRUE); mSunTexturep->setClamp(TRUE, TRUE); mMoonTexturep = gImageList.getImage(gMoonTextureID, TRUE, TRUE); @@ -534,7 +532,6 @@ LLVOSky::~LLVOSky() // Don't delete images - it'll get deleted by gImageList on shutdown // This needs to be done for each texture - delete mCubeMap; mCubeMap = NULL; } @@ -576,7 +573,7 @@ void LLVOSky::initCubeMap() { images.push_back(mSkyTex[side].getImageRaw()); } - if (mCubeMap != NULL) + if (mCubeMap) { mCubeMap->init(images); } diff --git a/indra/newview/llvosky.h b/indra/newview/llvosky.h index 5697e721ff..836cd7add7 100644 --- a/indra/newview/llvosky.h +++ b/indra/newview/llvosky.h @@ -504,7 +504,6 @@ public: }; LLVOSky(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp); - virtual ~LLVOSky(); // Initialize/delete data that's only inited once per class. static void initClass(); @@ -667,6 +666,8 @@ public: LLFace *mFace[FACE_COUNT]; protected: + ~LLVOSky(); + LLPointer<LLViewerImage> mSunTexturep; LLPointer<LLViewerImage> mMoonTexturep; LLPointer<LLViewerImage> mBloomTexturep; @@ -716,7 +717,7 @@ protected: LLColor3 mMoonDiffuse; LLColor4U mFadeColor; // Color to fade in from - LLCubeMap *mCubeMap; // Cube map for the environment + LLPointer<LLCubeMap> mCubeMap; // Cube map for the environment S32 mDrawRefl; LLFrameTimer mUpdateTimer; diff --git a/indra/newview/llvosurfacepatch.h b/indra/newview/llvosurfacepatch.h index fd2eff710b..af6653e556 100644 --- a/indra/newview/llvosurfacepatch.h +++ b/indra/newview/llvosurfacepatch.h @@ -30,7 +30,6 @@ public: eVertexDataMask; LLVOSurfacePatch(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp); - virtual ~LLVOSurfacePatch(); /*virtual*/ void markDead(); @@ -64,6 +63,8 @@ public: BOOL mDirtiedPatch; protected: + ~LLVOSurfacePatch(); + LLFacePool *mPool; LLFacePool *getPool(); S32 mBaseComp; diff --git a/indra/newview/llvotextbubble.h b/indra/newview/llvotextbubble.h index a348a53c7c..bba51babd3 100644 --- a/indra/newview/llvotextbubble.h +++ b/indra/newview/llvotextbubble.h @@ -16,7 +16,6 @@ class LLVOTextBubble : public LLAlphaObject { public: LLVOTextBubble(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp); - virtual ~LLVOTextBubble(); /*virtual*/ BOOL isActive() const; // Whether this object needs to do an idleUpdate. /*virtual*/ BOOL idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time); @@ -39,7 +38,9 @@ public: LLColor4 mColor; S32 mLOD; BOOL mVolumeChanged; + protected: + ~LLVOTextBubble(); BOOL setVolume(const LLVolumeParams &volume_params); LLFrameTimer mUpdateTimer; }; diff --git a/indra/newview/llvotree.h b/indra/newview/llvotree.h index 487dd706df..e10abbfb27 100644 --- a/indra/newview/llvotree.h +++ b/indra/newview/llvotree.h @@ -19,6 +19,9 @@ class LLDrawPool; class LLVOTree : public LLViewerObject { +protected: + ~LLVOTree(); + public: enum { @@ -29,7 +32,6 @@ public: eVertexDataMask; LLVOTree(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp); - virtual ~LLVOTree(); // Initialize data that's only inited once per class. static void initClass(); diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h index bde9058f4c..6ee6d255c4 100644 --- a/indra/newview/llvovolume.h +++ b/indra/newview/llvovolume.h @@ -49,6 +49,9 @@ public: // Class which embodies all Volume objects (with pcode LL_PCODE_VOLUME) class LLVOVolume : public LLViewerObject { +protected: + virtual ~LLVOVolume(); + public: static void initClass(); static void preUpdateGeom(); @@ -65,7 +68,6 @@ public: public: LLVOVolume(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp); - virtual ~LLVOVolume(); /*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline); diff --git a/indra/newview/llvowater.h b/indra/newview/llvowater.h index 74a5e81d8c..fd140fda56 100644 --- a/indra/newview/llvowater.h +++ b/indra/newview/llvowater.h @@ -36,7 +36,6 @@ public: eVertexDataMask; LLVOWater(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp); - virtual ~LLVOWater() {} /*virtual*/ void markDead(); diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index bb0efb48e1..c3841a4790 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -154,7 +154,6 @@ BOOL LLPipeline::sRenderGlow = FALSE; LLPipeline::LLPipeline() : mScreenTex(0), - mCubeBuffer(NULL), mGlowMap(0), mGlowBuffer(0), mVertexShadersEnabled(FALSE), @@ -352,7 +351,6 @@ void LLPipeline::releaseGLBuffers() if (mCubeBuffer) { - delete mCubeBuffer; mCubeBuffer = NULL; } diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index f20731c749..390e139503 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -343,7 +343,7 @@ public: GLuint mFramebuffer[2]; //dynamic cube map scratch space - LLCubeMap* mCubeBuffer; + LLPointer<LLCubeMap> mCubeBuffer; //frambuffer object for rendering dynamic cube maps GLuint mCubeFrameBuffer; diff --git a/indra/newview/secondlife-i686.supp b/indra/newview/secondlife-i686.supp new file mode 100644 index 0000000000..b1b30a441f --- /dev/null +++ b/indra/newview/secondlife-i686.supp @@ -0,0 +1,175 @@ +# @file secondlife-i686.supp +# @brief Valgrind suppressions for Linux i686 viewer. +# +# Copyright (c) 2000-$CurrentYear$, Linden Research, Inc. +# $License$ +# +# This is a Valgrind suppression file for use on the viewer. +# +# Hints for most successful use of valgrind: +# +# - If your distro comes with library packages that contain debug info +# (Fedora calls these debuginfo packages), install them. +# - Inside the SConstruct script, disable linking against tcmalloc. +# Valgrind and tcmalloc don't get along. +# - Delete the copy of libstdc++.so.6 that is bundled with the viewer +# (if you have one), so that the viewer will use the system's +# libstdc++. +# - After you build the viewer, replace the stripped +# do-not-directly-run-secondlife-bin binary with an unstripped copy. + +# Mozilla noise. + +{ + Cond:mozilla-runtime/*.so + Memcheck:Cond + obj:*/mozilla-runtime-*/*.so +} + +{ + Value4:mozilla-runtime/*.so + Memcheck:Value4 + obj:*/mozilla-runtime-*/*.so +} + +{ + Cond:mozilla-runtime/*/*.so + Memcheck:Cond + obj:*/mozilla-runtime-*/*/*.so +} + +{ + Value4:mozilla-runtime/*/*.so + Memcheck:Value4 + obj:*/mozilla-runtime-*/*/*.so +} + +{ + Cond:mozilla-runtime/libmozjs.so + Memcheck:Cond + obj:*/libmozjs.so +} + +{ + Cond:mozilla-runtime/libxul + Memcheck:Cond + obj:*/libxul.so +} + +{ + Value4:mozilla-runtime/libxul + Memcheck:Value4 + obj:*/libxul.so +} + +# libcurl badness. + +{ + Cond:libcurl/inflate/Curl_unencode_gzip_write + Memcheck:Cond + fun:inflate + fun:inflate_stream + fun:Curl_unencode_gzip_write +} +{ + Cond:libcurl/ares_mkquery/Curl_getaddrinfo + Memcheck:Cond + fun:ares_mkquery + fun:ares_query + fun:ares_search + fun:next_lookup + fun:Curl_getaddrinfo +} + +# libdl business. + +{ + Cond:libdl/_dl_relocate_object + Memcheck:Cond + fun:_dl_relocate_object +} + +# X11 fun. + +{ + Param:X11/_X11TransSocketWritev/writev/vector + Memcheck:Param + writev(vector[...]) + fun:writev + fun:_X11TransSocketWritev +} + +{ + Param:X11/_X11TransWrite/write/buf + Memcheck:Param + write(buf) + obj:/lib/libc-2.6.so + fun:_X11TransWrite +} + +# OpenSSL stuff. + +{ + Value4:libcrypto + Memcheck:Value4 + obj:*/libcrypto.so.0.9* +} + +{ + Cond:libcrypto + Memcheck:Cond + obj:*/libcrypto.so.0.9* +} + +{ + Value4:libssl + Memcheck:Value4 + obj:*/libssl.so.0.9* +} + +{ + Cond:libcrypto + Memcheck:Cond + obj:*/libssl.so.0.9* +} + +# NVIDIA driver brokenness. + +{ + Addr4:NVIDIA/libGL + Memcheck:Addr4 + obj:/usr/lib/libGL.so.1.0.* +} + +{ + Value4:NVIDIA/libGL + Memcheck:Value4 + obj:/usr/lib/libGL.so.1.0.* +} + +{ + Cond:NVIDIA/libGL + Memcheck:Cond + obj:/usr/lib/libGL.so.1.0.* +} + +{ + Value4:NVIDIA/libGLcore + Memcheck:Value4 + obj:/usr/lib/libGLcore.so.1.0.* +} + +{ + Cond:NVIDIA/libGLcore + Memcheck:Cond + obj:/usr/lib/libGLcore.so.1.0.* +} + +{ + Param:NVIDIA/ioctl + Memcheck:Param + ioctl(generic) + fun:ioctl + fun:_nv000130gl +} + diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index c03ec75081..c714ad627d 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -391,6 +391,7 @@ class Linux_i686Manifest(LinuxManifest): self.end_prefix("res-sdl") self.path("featuretable_linux.txt") + self.path("secondlife-i686.supp") self.path("app_settings/mozilla-runtime-linux-i686") |