From f496c2b164a100836d74909c3e27adcdf98018f0 Mon Sep 17 00:00:00 2001 From: Kent Quirk Date: Tue, 1 Dec 2009 20:59:08 -0500 Subject: DEV-43622 : API change (no functionality change) to fix a design error in LLSD I made it about a year and a half ago; Zero found it while reading code. I had added a return value to LLSD::insert(), but a) did it wrong, and b) broke the STL-like semantics of insert(). So I've put insert() back to returning void and created LLSD::with(), which does what my earlier insert() did. The compiler then caught all the cases where insert()'s return value were being used, and I changed those to use with() instead. --- indra/newview/llstartup.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'indra/newview/llstartup.cpp') diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index db8bda008e..50c20bc98f 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -482,7 +482,7 @@ bool idle_startup() { std::string diagnostic = "Could not start address resolution system"; LL_WARNS("AppInit") << diagnostic << LL_ENDL; - LLAppViewer::instance()->earlyExit("LoginFailedNoNetwork", LLSD().insert("DIAGNOSTIC", diagnostic)); + LLAppViewer::instance()->earlyExit("LoginFailedNoNetwork", LLSD().with("DIAGNOSTIC", diagnostic)); } // @@ -553,7 +553,7 @@ bool idle_startup() { std::string diagnostic = llformat(" Error: %d", gMessageSystem->getErrorCode()); LL_WARNS("AppInit") << diagnostic << LL_ENDL; - LLAppViewer::instance()->earlyExit("LoginFailedNoNetwork", LLSD().insert("DIAGNOSTIC", diagnostic)); + LLAppViewer::instance()->earlyExit("LoginFailedNoNetwork", LLSD().with("DIAGNOSTIC", diagnostic)); } #if LL_WINDOWS @@ -576,7 +576,7 @@ bool idle_startup() } else { - LLAppViewer::instance()->earlyExit("MessageTemplateNotFound", LLSD().insert("PATH", message_template_path)); + LLAppViewer::instance()->earlyExit("MessageTemplateNotFound", LLSD().with("PATH", message_template_path)); } if(gMessageSystem && gMessageSystem->isOK()) -- cgit v1.3 From 9d8b189886ae14800d58f9729d8c8ea9b338ed52 Mon Sep 17 00:00:00 2001 From: Dmitry Zaporozhan Date: Wed, 2 Dec 2009 14:18:40 +0200 Subject: Implemented normal sub-task EXT-2975 - Make the IM multifloater optional. --HG-- branch : product-engine --- indra/newview/app_settings/settings.xml | 11 ++ indra/newview/llimfloater.cpp | 160 ++++++++++++--------- indra/newview/llimfloater.h | 13 +- indra/newview/llstartup.cpp | 3 + .../default/xui/en/panel_preferences_chat.xml | 33 +++++ 5 files changed, 149 insertions(+), 71 deletions(-) (limited to 'indra/newview/llstartup.cpp') diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index b0f782622c..76def8120f 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -1385,6 +1385,17 @@ Value 1 + ChatWindow + + Comment + Show chat in multiple windows(by default) or in one multi-tabbed window(requires restart) + Persist + 1 + Type + S32 + Value + 0 + CheesyBeacon Comment diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index 5e9ffdf410..3315d5b18d 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -44,6 +44,7 @@ #include "llchiclet.h" #include "llfloaterchat.h" #include "llfloaterreg.h" +#include "llimfloatercontainer.h" // to replace separate IM Floaters with multifloater container #include "lllineeditor.h" #include "lllogchat.h" #include "llpanelimcontrolpanel.h" @@ -55,10 +56,6 @@ #include "lltransientfloatermgr.h" #include "llinventorymodel.h" -#ifdef USE_IM_CONTAINER - #include "llimfloatercontainer.h" // to replace separate IM Floaters with multifloater container -#endif - LLIMFloater::LLIMFloater(const LLUUID& session_id) @@ -263,11 +260,14 @@ BOOL LLIMFloater::postBuild() //*TODO if session is not initialized yet, add some sort of a warning message like "starting session...blablabla" //see LLFloaterIMPanel for how it is done (IB) -#ifdef USE_IM_CONTAINER - return LLFloater::postBuild(); -#else - return LLDockableFloater::postBuild(); -#endif + if(isChatMultiTab()) + { + return LLFloater::postBuild(); + } + else + { + return LLDockableFloater::postBuild(); + } } // virtual @@ -328,59 +328,72 @@ void LLIMFloater::onSlide() //static LLIMFloater* LLIMFloater::show(const LLUUID& session_id) { -#ifdef USE_IM_CONTAINER - LLIMFloater* target_floater = findInstance(session_id); - bool not_existed = NULL == target_floater; + bool not_existed = true; -#else - //hide all - LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("impanel"); - for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); - iter != inst_list.end(); ++iter) + if(isChatMultiTab()) { - LLIMFloater* floater = dynamic_cast(*iter); - if (floater && floater->isDocked()) + LLIMFloater* target_floater = findInstance(session_id); + not_existed = NULL == target_floater; + } + else + { + //hide all + LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("impanel"); + for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin(); + iter != inst_list.end(); ++iter) { - floater->setVisible(false); + LLIMFloater* floater = dynamic_cast(*iter); + if (floater && floater->isDocked()) + { + floater->setVisible(false); + } } } -#endif LLIMFloater* floater = LLFloaterReg::showTypedInstance("impanel", session_id); floater->updateMessages(); floater->mInputEditor->setFocus(TRUE); -#ifdef USE_IM_CONTAINER - // do not add existed floaters to avoid adding torn off instances - if (not_existed) + if(isChatMultiTab()) { - // LLTabContainer::eInsertionPoint i_pt = user_initiated ? LLTabContainer::RIGHT_OF_CURRENT : LLTabContainer::END; - // TODO: mantipov: use LLTabContainer::RIGHT_OF_CURRENT if it exists - LLTabContainer::eInsertionPoint i_pt = LLTabContainer::END; + // do not add existed floaters to avoid adding torn off instances + if (not_existed) + { + // LLTabContainer::eInsertionPoint i_pt = user_initiated ? LLTabContainer::RIGHT_OF_CURRENT : LLTabContainer::END; + // TODO: mantipov: use LLTabContainer::RIGHT_OF_CURRENT if it exists + LLTabContainer::eInsertionPoint i_pt = LLTabContainer::END; - LLIMFloaterContainer* floater_container = LLFloaterReg::showTypedInstance("im_container"); - floater_container->addFloater(floater, TRUE, i_pt); + LLIMFloaterContainer* floater_container = LLFloaterReg::showTypedInstance("im_container"); + floater_container->addFloater(floater, TRUE, i_pt); + } } -#else - if (floater->getDockControl() == NULL) + else { - LLChiclet* chiclet = - LLBottomTray::getInstance()->getChicletPanel()->findChiclet( - session_id); - if (chiclet == NULL) - { - llerror("Dock chiclet for LLIMFloater doesn't exists", 0); - } - else + // Docking may move chat window, hide it before moving, or user will see how window "jumps" + floater->setVisible(false); + + if (floater->getDockControl() == NULL) { - LLBottomTray::getInstance()->getChicletPanel()->scrollToChiclet(chiclet); + LLChiclet* chiclet = + LLBottomTray::getInstance()->getChicletPanel()->findChiclet( + session_id); + if (chiclet == NULL) + { + llerror("Dock chiclet for LLIMFloater doesn't exists", 0); + } + else + { + LLBottomTray::getInstance()->getChicletPanel()->scrollToChiclet(chiclet); + } + + floater->setDockControl(new LLDockControl(chiclet, floater, floater->getDockTongue(), + LLDockControl::TOP, boost::bind(&LLIMFloater::getAllowedRect, floater, _1))); } - floater->setDockControl(new LLDockControl(chiclet, floater, floater->getDockTongue(), - LLDockControl::TOP, boost::bind(&LLIMFloater::getAllowedRect, floater, _1))); + // window is positioned, now we can show it. + floater->setVisible(true); } -#endif return floater; } @@ -397,9 +410,10 @@ void LLIMFloater::setDocked(bool docked, bool pop_on_undock) (LLNotificationsUI::LLChannelManager::getInstance()-> findChannelByID(LLUUID(gSavedSettings.getString("NotificationChannelUUID")))); -#ifndef USE_IM_CONTAINER - LLTransientDockableFloater::setDocked(docked, pop_on_undock); -#endif + if(!isChatMultiTab()) + { + LLTransientDockableFloater::setDocked(docked, pop_on_undock); + } // update notification channel state if(channel) @@ -425,28 +439,27 @@ void LLIMFloater::setVisible(BOOL visible) //static bool LLIMFloater::toggle(const LLUUID& session_id) { -#ifndef USE_IM_CONTAINER - LLIMFloater* floater = LLFloaterReg::findTypedInstance("impanel", session_id); - if (floater && floater->getVisible() && floater->isDocked()) + if(!isChatMultiTab()) { - // clicking on chiclet to close floater just hides it to maintain existing - // scroll/text entry state - floater->setVisible(false); - return false; - } - else if(floater && !floater->isDocked()) - { - floater->setVisible(TRUE); - floater->setFocus(TRUE); - return true; - } - else -#endif - { - // ensure the list of messages is updated when floater is made visible - show(session_id); - return true; + LLIMFloater* floater = LLFloaterReg::findTypedInstance("impanel", session_id); + if (floater && floater->getVisible() && floater->isDocked()) + { + // clicking on chiclet to close floater just hides it to maintain existing + // scroll/text entry state + floater->setVisible(false); + return false; + } + else if(floater && !floater->isDocked()) + { + floater->setVisible(TRUE); + floater->setFocus(TRUE); + return true; + } } + + // ensure the list of messages is updated when floater is made visible + show(session_id); + return true; } //static @@ -892,3 +905,18 @@ void LLIMFloater::removeTypingIndicator(const LLIMInfo* im_info) } } +// static +bool LLIMFloater::isChatMultiTab() +{ + // Restart is required in order to change chat window type. + static bool is_single_window = gSavedSettings.getS32("ChatWindow") == 1; + return is_single_window; +} + +// static +void LLIMFloater::initIMFloater() +{ + // This is called on viewer start up + // init chat window type before user changed it in preferences + isChatMultiTab(); +} diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h index 9e1330ff49..2c762c4d9a 100644 --- a/indra/newview/llimfloater.h +++ b/indra/newview/llimfloater.h @@ -33,11 +33,6 @@ #ifndef LL_IMFLOATER_H #define LL_IMFLOATER_H -// This variable is used to show floaters related to chiclets in a Multi Floater Container -// So, this functionality does not require to have IM Floaters as Dockable & Transient -// See EXT-2640. -#define USE_IM_CONTAINER - #include "lltransientdockablefloater.h" #include "lllogchat.h" #include "lltooldraganddrop.h" @@ -105,6 +100,14 @@ public: void *cargo_data, EAcceptance *accept, std::string& tooltip_msg); + /** + * Returns true if chat is displayed in multi tabbed floater + * false if chat is displayed in multiple windows + */ + static bool isChatMultiTab(); + + static void initIMFloater(); + private: // process focus events to set a currently active session /* virtual */ void onFocusLost(); diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index db8bda008e..7f68c2e8f4 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -59,6 +59,7 @@ #include "llfloaterreg.h" #include "llfocusmgr.h" #include "llhttpsender.h" +#include "llimfloater.h" #include "lllocationhistory.h" #include "llimageworker.h" #include "llloginflags.h" @@ -2085,6 +2086,8 @@ bool idle_startup() LLAgentPicksInfo::getInstance()->requestNumberOfPicks(); + LLIMFloater::initIMFloater(); + return TRUE; } diff --git a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml index fac0d5c60f..3aa5d3fae4 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml @@ -318,4 +318,37 @@ name="plain_text_chat_history" top_pad="5" width="400" /> + + Show IMs in: + + + + + -- cgit v1.3 From 98111a40ec907f994841d2b934246d8096317f60 Mon Sep 17 00:00:00 2001 From: Lynx Linden Date: Tue, 8 Dec 2009 14:56:19 +0000 Subject: DEV-43439: Created new LLVersionInfo API. Renamed llviewerversion to llversioninfo, to avoid confusion with llversionviewer in llcommon (llversion is already used by llwindow). Created new LLVersionInfo class with the following methods: static S32 getMajor(); static S32 getMinor(); static S32 getPatch(); static S32 getBuild(); static const std::string &getVersion(); static const std::string &getShortVersion(); static const std::string &getChannel(); All viewer code has been updated to use this API. Viewer code no longer directly includes llversionviewer.h from llcommon. --- indra/newview/CMakeLists.txt | 4 +- indra/newview/llappviewer.cpp | 33 ++++---- indra/newview/llcurrencyuimanager.cpp | 18 ++--- indra/newview/llfloaterabout.cpp | 15 ++-- indra/newview/llfloaterreporter.cpp | 6 +- indra/newview/llpanellogin.cpp | 13 +-- indra/newview/llstartup.cpp | 8 +- indra/newview/llversioninfo.cpp | 109 ++++++++++++++++++++++++++ indra/newview/llversioninfo.h | 71 +++++++++++++++++ indra/newview/llviewercontrol.cpp | 1 - indra/newview/llviewerhelp.cpp | 1 - indra/newview/llviewerhelputil.cpp | 13 ++- indra/newview/llviewerhome.cpp | 4 +- indra/newview/llviewermedia.cpp | 4 +- indra/newview/llviewerprecompiledheaders.h | 1 - indra/newview/tests/llviewerhelputil_test.cpp | 8 +- 16 files changed, 244 insertions(+), 65 deletions(-) create mode 100644 indra/newview/llversioninfo.cpp create mode 100644 indra/newview/llversioninfo.h (limited to 'indra/newview/llstartup.cpp') diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 9f525d82b9..f41505a82d 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -448,6 +448,7 @@ set(viewer_SOURCE_FILES llurlsimstring.cpp llurlwhitelist.cpp llvectorperfoptions.cpp + llversioninfo.cpp llviewchildren.cpp llviewerassetstorage.cpp llviewerassettype.cpp @@ -497,7 +498,6 @@ set(viewer_SOURCE_FILES llviewertextureanim.cpp llviewertexturelist.cpp llviewerthrottle.cpp - llviewerversion.cpp llviewervisualparam.cpp llviewerwindow.cpp llviewerwindowlistener.cpp @@ -953,6 +953,7 @@ set(viewer_HEADER_FILES llurlsimstring.h llurlwhitelist.h llvectorperfoptions.h + llversioninfo.h llviewchildren.h llviewerassetstorage.h llviewerassettype.h @@ -999,7 +1000,6 @@ set(viewer_HEADER_FILES llviewertextureanim.h llviewertexturelist.h llviewerthrottle.h - llviewerversion.h llviewervisualparam.h llviewerwindow.h llviewerwindowlistener.h diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 6bbc1eaa6a..508badcc6f 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -35,8 +35,7 @@ #include "llappviewer.h" // Viewer includes -#include "llversionviewer.h" -#include "llviewerversion.h" +#include "llversioninfo.h" #include "llfeaturemanager.h" #include "lluictrlfactory.h" #include "lltexteditor.h" @@ -650,7 +649,7 @@ bool LLAppViewer::init() // Build a string representing the current version number. gCurrentVersion = llformat("%s %s", gSavedSettings.getString("VersionChannelName").c_str(), - llGetViewerVersion().c_str()); + LLVersionInfo::getVersion().c_str()); ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// @@ -1871,7 +1870,7 @@ bool LLAppViewer::initConfiguration() gSavedSettings.setString("ClientSettingsFile", gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, getSettingsFilename("Default", "Global"))); - gSavedSettings.setString("VersionChannelName", LL_CHANNEL); + gSavedSettings.setString("VersionChannelName", LLVersionInfo::getChannel()); #ifndef LL_RELEASE_FOR_DOWNLOAD // provide developer build only overrides for these control variables that are not @@ -2482,10 +2481,10 @@ void LLAppViewer::writeSystemInfo() gDebugInfo["SLLog"] = LLError::logFileName(); gDebugInfo["ClientInfo"]["Name"] = gSavedSettings.getString("VersionChannelName"); - gDebugInfo["ClientInfo"]["MajorVersion"] = LL_VERSION_MAJOR; - gDebugInfo["ClientInfo"]["MinorVersion"] = LL_VERSION_MINOR; - gDebugInfo["ClientInfo"]["PatchVersion"] = LL_VERSION_PATCH; - gDebugInfo["ClientInfo"]["BuildVersion"] = LL_VERSION_BUILD; + gDebugInfo["ClientInfo"]["MajorVersion"] = LLVersionInfo::getMajor(); + gDebugInfo["ClientInfo"]["MinorVersion"] = LLVersionInfo::getMinor(); + gDebugInfo["ClientInfo"]["PatchVersion"] = LLVersionInfo::getPatch(); + gDebugInfo["ClientInfo"]["BuildVersion"] = LLVersionInfo::getBuild(); gDebugInfo["CAFilename"] = gDirUtilp->getCAFile(); @@ -2519,7 +2518,7 @@ void LLAppViewer::writeSystemInfo() // Dump some debugging info LL_INFOS("SystemInfo") << LLTrans::getString("APP_NAME") - << " version " << llGetViewerShortVersion() << LL_ENDL; + << " version " << LLVersionInfo::getShortVersion() << LL_ENDL; // Dump the local time and time zone time_t now; @@ -2573,10 +2572,10 @@ void LLAppViewer::handleViewerCrash() //to check against no matter what gDebugInfo["ClientInfo"]["Name"] = gSavedSettings.getString("VersionChannelName"); - gDebugInfo["ClientInfo"]["MajorVersion"] = LL_VERSION_MAJOR; - gDebugInfo["ClientInfo"]["MinorVersion"] = LL_VERSION_MINOR; - gDebugInfo["ClientInfo"]["PatchVersion"] = LL_VERSION_PATCH; - gDebugInfo["ClientInfo"]["BuildVersion"] = LL_VERSION_BUILD; + gDebugInfo["ClientInfo"]["MajorVersion"] = LLVersionInfo::getMajor(); + gDebugInfo["ClientInfo"]["MinorVersion"] = LLVersionInfo::getMinor(); + gDebugInfo["ClientInfo"]["PatchVersion"] = LLVersionInfo::getPatch(); + gDebugInfo["ClientInfo"]["BuildVersion"] = LLVersionInfo::getBuild(); LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); if ( parcel && parcel->getMusicURL()[0]) @@ -4150,10 +4149,10 @@ void LLAppViewer::handleLoginComplete() // Store some data to DebugInfo in case of a freeze. gDebugInfo["ClientInfo"]["Name"] = gSavedSettings.getString("VersionChannelName"); - gDebugInfo["ClientInfo"]["MajorVersion"] = LL_VERSION_MAJOR; - gDebugInfo["ClientInfo"]["MinorVersion"] = LL_VERSION_MINOR; - gDebugInfo["ClientInfo"]["PatchVersion"] = LL_VERSION_PATCH; - gDebugInfo["ClientInfo"]["BuildVersion"] = LL_VERSION_BUILD; + gDebugInfo["ClientInfo"]["MajorVersion"] = LLVersionInfo::getMajor(); + gDebugInfo["ClientInfo"]["MinorVersion"] = LLVersionInfo::getMinor(); + gDebugInfo["ClientInfo"]["PatchVersion"] = LLVersionInfo::getPatch(); + gDebugInfo["ClientInfo"]["BuildVersion"] = LLVersionInfo::getBuild(); LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel(); if ( parcel && parcel->getMusicURL()[0]) diff --git a/indra/newview/llcurrencyuimanager.cpp b/indra/newview/llcurrencyuimanager.cpp index 544711a862..00c05445e1 100644 --- a/indra/newview/llcurrencyuimanager.cpp +++ b/indra/newview/llcurrencyuimanager.cpp @@ -36,7 +36,7 @@ #include "lltextbox.h" #include "lllineeditor.h" #include "llviewercontrol.h" -#include "llversionviewer.h" +#include "llversioninfo.h" #include "llcurrencyuimanager.h" @@ -170,10 +170,10 @@ void LLCurrencyUIManager::Impl::updateCurrencyInfo() gAgent.getSecureSessionID().asString()); keywordArgs.appendInt("currencyBuy", mUserCurrencyBuy); keywordArgs.appendString("viewerChannel", gSavedSettings.getString("VersionChannelName")); - keywordArgs.appendInt("viewerMajorVersion", LL_VERSION_MAJOR); - keywordArgs.appendInt("viewerMinorVersion", LL_VERSION_MINOR); - keywordArgs.appendInt("viewerPatchVersion", LL_VERSION_PATCH); - keywordArgs.appendInt("viewerBuildVersion", LL_VERSION_BUILD); + keywordArgs.appendInt("viewerMajorVersion", LLVersionInfo::getMajor()); + keywordArgs.appendInt("viewerMinorVersion", LLVersionInfo::getMinor()); + keywordArgs.appendInt("viewerPatchVersion", LLVersionInfo::getPatch()); + keywordArgs.appendInt("viewerBuildVersion", LLVersionInfo::getBuild()); LLXMLRPCValue params = LLXMLRPCValue::createArray(); params.append(keywordArgs); @@ -244,10 +244,10 @@ void LLCurrencyUIManager::Impl::startCurrencyBuy(const std::string& password) keywordArgs.appendString("password", password); } keywordArgs.appendString("viewerChannel", gSavedSettings.getString("VersionChannelName")); - keywordArgs.appendInt("viewerMajorVersion", LL_VERSION_MAJOR); - keywordArgs.appendInt("viewerMinorVersion", LL_VERSION_MINOR); - keywordArgs.appendInt("viewerPatchVersion", LL_VERSION_PATCH); - keywordArgs.appendInt("viewerBuildVersion", LL_VERSION_BUILD); + keywordArgs.appendInt("viewerMajorVersion", LLVersionInfo::getMajor()); + keywordArgs.appendInt("viewerMinorVersion", LLVersionInfo::getMinor()); + keywordArgs.appendInt("viewerPatchVersion", LLVersionInfo::getPatch()); + keywordArgs.appendInt("viewerBuildVersion", LLVersionInfo::getBuild()); LLXMLRPCValue params = LLXMLRPCValue::createArray(); params.append(keywordArgs); diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp index b2588cc01b..e80499688e 100644 --- a/indra/newview/llfloaterabout.cpp +++ b/indra/newview/llfloaterabout.cpp @@ -45,8 +45,7 @@ #include "llviewercontrol.h" #include "llviewerstats.h" #include "llviewerregion.h" -#include "llversionviewer.h" -#include "llviewerversion.h" +#include "llversioninfo.h" #include "llweb.h" // Linden library includes @@ -212,12 +211,12 @@ LLSD LLFloaterAbout::getInfo() // LLFloaterAbout. LLSD info; LLSD version; - version.append(LL_VERSION_MAJOR); - version.append(LL_VERSION_MINOR); - version.append(LL_VERSION_PATCH); - version.append(LL_VERSION_BUILD); + version.append(LLVersionInfo::getMajor()); + version.append(LLVersionInfo::getMinor()); + version.append(LLVersionInfo::getPatch()); + version.append(LLVersionInfo::getBuild()); info["VIEWER_VERSION"] = version; - info["VIEWER_VERSION_STR"] = llGetViewerVersion(); + info["VIEWER_VERSION_STR"] = LLVersionInfo::getVersion(); info["BUILD_DATE"] = __DATE__; info["BUILD_TIME"] = __TIME__; info["CHANNEL"] = gSavedSettings.getString("VersionChannelName"); @@ -285,7 +284,7 @@ static std::string get_viewer_release_notes_url() { LLSD query; query["channel"] = gSavedSettings.getString("VersionChannelName"); - query["version"] = llGetViewerVersion(); + query["version"] = LLVersionInfo::getVersion(); std::ostringstream url; url << LLTrans::getString("RELEASE_NOTES_BASE_URL") << LLURI::mapToQueryString(query); diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp index be821ad43b..408303a1e0 100644 --- a/indra/newview/llfloaterreporter.cpp +++ b/indra/newview/llfloaterreporter.cpp @@ -75,7 +75,7 @@ #include "llfloateravatarpicker.h" #include "lldir.h" #include "llselectmgr.h" -#include "llviewerversion.h" +#include "llversioninfo.h" #include "lluictrlfactory.h" #include "llviewernetwork.h" @@ -608,7 +608,7 @@ LLSD LLFloaterReporter::gatherReport() std::ostringstream details; - details << "V" << llGetViewerVersion() << std::endl << std::endl; // client version moved to body of email for abuse reports + details << "V" << LLVersionInfo::getVersion() << std::endl << std::endl; // client version moved to body of email for abuse reports std::string object_name = childGetText("object_name"); if (!object_name.empty() && !mOwnerName.empty()) @@ -626,7 +626,7 @@ LLSD LLFloaterReporter::gatherReport() std::string version_string; version_string = llformat( "%s %s %s %s %s", - llGetViewerShortVersion().c_str(), + LLVersionInfo::getShortVersion().c_str(), platform, gSysCPU.getFamily().c_str(), gGLManager.mGLRenderer.c_str(), diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index e73c65e252..a729b8c06f 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -39,7 +39,6 @@ #include "llfontgl.h" #include "llmd5.h" #include "llsecondlifeurls.h" -#include "llversionviewer.h" #include "v4color.h" #include "llbutton.h" @@ -57,7 +56,7 @@ #include "llui.h" #include "lluiconstants.h" #include "llurlsimstring.h" -#include "llviewerversion.h" +#include "llversioninfo.h" #include "llviewerhelp.h" #include "llviewertexturelist.h" #include "llviewermenu.h" // for handle_preferences() @@ -247,8 +246,9 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect, getChild("login_widgets")->setDefaultBtn("connect_btn"); std::string channel = gSavedSettings.getString("VersionChannelName"); - std::string version = llformat("%s (%s)", llGetViewerShortVersion().c_str(), - llGetViewerBuildVersion().c_str()); + std::string version = llformat("%s (%d)", + LLVersionInfo::getShortVersion().c_str(), + LLVersionInfo::getBuild()); LLTextBox* channel_text = getChild("channel_text"); channel_text->setTextArg("[CHANNEL]", channel); // though not displayed channel_text->setTextArg("[VERSION]", version); @@ -740,8 +740,9 @@ void LLPanelLogin::loadLoginPage() } // Channel and Version - std::string version = llformat("%s (%s)", llGetViewerShortVersion().c_str(), - llGetViewerBuildVersion().c_str()); + std::string version = llformat("%s (%d)", + LLVersionInfo::getShortVersion().c_str(), + LLVersionInfo::getBuild()); char* curl_channel = curl_escape(gSavedSettings.getString("VersionChannelName").c_str(), 0); char* curl_version = curl_escape(version.c_str(), 0); diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 58df2ffb19..be0c92a76d 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -77,7 +77,7 @@ #include "llsecondlifeurls.h" #include "llstring.h" #include "lluserrelations.h" -#include "llversionviewer.h" +#include "llversioninfo.h" #include "llviewercontrol.h" #include "llvfs.h" #include "llxorcipher.h" // saved password, MAC address @@ -542,9 +542,9 @@ bool idle_startup() if(!start_messaging_system( message_template_path, port, - LL_VERSION_MAJOR, - LL_VERSION_MINOR, - LL_VERSION_PATCH, + LLVersionInfo::getMajor(), + LLVersionInfo::getMinor(), + LLVersionInfo::getPatch(), FALSE, std::string(), responder, diff --git a/indra/newview/llversioninfo.cpp b/indra/newview/llversioninfo.cpp new file mode 100644 index 0000000000..148931d3ad --- /dev/null +++ b/indra/newview/llversioninfo.cpp @@ -0,0 +1,109 @@ +/** + * @file llversioninfo.cpp + * @brief Routines to access the viewer version and build information + * @author Martin Reddy + * + * $LicenseInfo:firstyear=2009&license=viewergpl$ + * + * Copyright (c) 2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" +#include "llversioninfo.h" + +#include "llversionviewer.h" + +// +// Set the version numbers in indra/llcommon/llversionviewer.h +// + +//static +S32 LLVersionInfo::getMajor() +{ + return LL_VERSION_MAJOR; +} + +//static +S32 LLVersionInfo::getMinor() +{ + return LL_VERSION_MINOR; +} + +//static +S32 LLVersionInfo::getPatch() +{ + return LL_VERSION_PATCH; +} + +//static +S32 LLVersionInfo::getBuild() +{ + return LL_VERSION_BUILD; +} + +//static +const std::string &LLVersionInfo::getVersion() +{ + static std::string version(""); + + if (version.empty()) + { + // cache the version string + std::ostringstream stream; + stream << LL_VERSION_MAJOR << "." + << LL_VERSION_MINOR << "." + << LL_VERSION_PATCH << "." + << LL_VERSION_BUILD; + version = stream.str(); + } + + return version; +} + +//static +const std::string &LLVersionInfo::getShortVersion() +{ + static std::string version(""); + + if (version.empty()) + { + // cache the version string + std::ostringstream stream; + stream << LL_VERSION_MAJOR << "." + << LL_VERSION_MINOR << "." + << LL_VERSION_PATCH; + version = stream.str(); + } + + return version; +} + +//static +const std::string &LLVersionInfo::getChannel() +{ + static std::string name(LL_CHANNEL); + return name; +} diff --git a/indra/newview/llversioninfo.h b/indra/newview/llversioninfo.h new file mode 100644 index 0000000000..b05109e478 --- /dev/null +++ b/indra/newview/llversioninfo.h @@ -0,0 +1,71 @@ +/** + * @file llversioninfo.h + * @brief Routines to access the viewer version and build information + * @author Martin Reddy + * + * $LicenseInfo:firstyear=2009&license=viewergpl$ + * + * Copyright (c) 2009, Linden Research, Inc. + * + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab. Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + * + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLVERSIONINFO_H +#define LL_LLVERSIONINFO_H + +#include + +/// +/// This API provides version information for the viewer. This +/// includes access to the major, minor, patch, and build integer +/// values, as well as human-readable string representations. All +/// viewer code that wants to query the current version should +/// use this API. +/// +class LLVersionInfo +{ +public: + /// return the major verion number as an integer + static S32 getMajor(); + + /// return the minor verion number as an integer + static S32 getMinor(); + + /// return the patch verion number as an integer + static S32 getPatch(); + + /// return the build number as an integer + static S32 getBuild(); + + /// return the full viewer version as a string like "2.0.0.200030" + static const std::string &getVersion(); + + /// return the viewer version as a string like "2.0.0" + static const std::string &getShortVersion(); + + /// return the channel name, e.g. "Second Life" + static const std::string &getChannel(); +}; + +#endif diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index 5e23a7e114..6339d23fa7 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -67,7 +67,6 @@ #include "lloverlaybar.h" #include "llkeyboard.h" #include "llerrorcontrol.h" -#include "llversionviewer.h" #include "llappviewer.h" #include "llvosurfacepatch.h" #include "llvowlsky.h" diff --git a/indra/newview/llviewerhelp.cpp b/indra/newview/llviewerhelp.cpp index 056260791c..297c0cc111 100644 --- a/indra/newview/llviewerhelp.cpp +++ b/indra/newview/llviewerhelp.cpp @@ -37,7 +37,6 @@ #include "llfloaterreg.h" #include "llfocusmgr.h" #include "llviewercontrol.h" -#include "llversionviewer.h" #include "llappviewer.h" #include "lllogininstance.h" diff --git a/indra/newview/llviewerhelputil.cpp b/indra/newview/llviewerhelputil.cpp index 0a03012af6..df08470518 100644 --- a/indra/newview/llviewerhelputil.cpp +++ b/indra/newview/llviewerhelputil.cpp @@ -38,8 +38,7 @@ #include "llstring.h" #include "llsys.h" #include "lluri.h" -#include "llversionviewer.h" -#include "llviewerversion.h" +#include "llversioninfo.h" ////////////////////////////////////////////// @@ -78,11 +77,11 @@ std::string LLViewerHelpUtil::buildHelpURL( const std::string &topic, substitution["CHANNEL"] = helpURLEncode(savedSettings.getString("VersionChannelName")); - substitution["VERSION"] = helpURLEncode(llGetViewerVersion()); - substitution["VERSION_MAJOR"] = buildHelpVersion(LL_VERSION_MAJOR); - substitution["VERSION_MINOR"] = buildHelpVersion(LL_VERSION_MINOR); - substitution["VERSION_PATCH"] = buildHelpVersion(LL_VERSION_PATCH); - substitution["VERSION_BUILD"] = buildHelpVersion(LL_VERSION_BUILD); + substitution["VERSION"] = helpURLEncode(LLVersionInfo::getVersion()); + substitution["VERSION_MAJOR"] = buildHelpVersion(LLVersionInfo::getMajor()); + substitution["VERSION_MINOR"] = buildHelpVersion(LLVersionInfo::getMinor()); + substitution["VERSION_PATCH"] = buildHelpVersion(LLVersionInfo::getPatch()); + substitution["VERSION_BUILD"] = buildHelpVersion(LLVersionInfo::getBuild()); substitution["OS"] = helpURLEncode(osinfo.getOSStringSimple()); diff --git a/indra/newview/llviewerhome.cpp b/indra/newview/llviewerhome.cpp index 4556c3c5b1..58630978c4 100644 --- a/indra/newview/llviewerhome.cpp +++ b/indra/newview/llviewerhome.cpp @@ -38,7 +38,7 @@ #include "llui.h" #include "lluri.h" #include "llsd.h" -#include "llviewerversion.h" +#include "llversioninfo.h" #include "llviewercontrol.h" #include "llviewernetwork.h" @@ -49,7 +49,7 @@ std::string LLViewerHome::getHomeURL() // this value from settings.xml and support various substitutions LLSD substitution; - substitution["VERSION"] = llGetViewerVersion(); + substitution["VERSION"] = LLVersionInfo::getVersion(); substitution["CHANNEL"] = LLURI::escape(gSavedSettings.getString("VersionChannelName")); substitution["LANGUAGE"] = LLUI::getLanguage(); substitution["AUTH_KEY"] = LLURI::escape(getAuthKey()); diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index a206768d33..952de00272 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -37,11 +37,11 @@ #include "llviewermediafocus.h" #include "llmimetypes.h" #include "llmediaentry.h" +#include "llversioninfo.h" #include "llviewercontrol.h" #include "llviewertexture.h" #include "llviewerparcelmedia.h" #include "llviewerparcelmgr.h" -#include "llviewerversion.h" #include "llviewertexturelist.h" #include "llvovolume.h" #include "llpluginclassmedia.h" @@ -446,7 +446,7 @@ std::string LLViewerMedia::getCurrentUserAgent() // http://www.mozilla.org/build/revised-user-agent-strings.html std::ostringstream codec; codec << "SecondLife/"; - codec << llGetViewerVersion(); + codec << LLVersionInfo::getVersion(); codec << " (" << channel << "; " << skin_name << " skin)"; llinfos << codec.str() << llendl; diff --git a/indra/newview/llviewerprecompiledheaders.h b/indra/newview/llviewerprecompiledheaders.h index 86f59b6e2f..6a0ad5757f 100644 --- a/indra/newview/llviewerprecompiledheaders.h +++ b/indra/newview/llviewerprecompiledheaders.h @@ -109,7 +109,6 @@ #include "llthread.h" #include "lltimer.h" #include "lluuidhashmap.h" -//#include "llversionviewer.h" //#include "processor.h" #include "stdenums.h" #include "stdtypes.h" diff --git a/indra/newview/tests/llviewerhelputil_test.cpp b/indra/newview/tests/llviewerhelputil_test.cpp index 90e3e7a7e0..68743357a6 100644 --- a/indra/newview/tests/llviewerhelputil_test.cpp +++ b/indra/newview/tests/llviewerhelputil_test.cpp @@ -36,7 +36,7 @@ #include "../test/lltut.h" #include "../llviewerhelputil.h" -#include "../llviewerversion.h" +#include "../llversioninfo.h" #include "llcontrol.h" #include "llsys.h" @@ -76,7 +76,11 @@ std::string LLControlGroup::getString(const std::string& name) return test_stringvec[name]; } -const std::string &llGetViewerVersion() +S32 LLVersionInfo::getMajor() { return 2; } +S32 LLVersionInfo::getMinor() { return 0; } +S32 LLVersionInfo::getPatch() { return 0; } +S32 LLVersionInfo::getBuild() { return 200099; } +const std::string &LLVersionInfo::getVersion() { static std::string version = "2.0.0.200099"; return version; -- cgit v1.3 From adc975ff91ab89ebb3f0035110964e9aaea308b4 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Wed, 9 Dec 2009 10:20:08 -0500 Subject: Reduce likelihood of indefinite wait in viewer integration tests. Introduce LLStartupListener to allow viewerclient-based test script to query startup state. This handles the scenario in which, by the time the test script manages to connect, the viewer already IS in STATE_STARTED. Fix ViewerSession to invoke that query before waiting for STATE_STARTED. Make that wait time out eventually to deal with "System currently logging you off, please wait 5 minutes." Timeout raises new ViewerWontLogin exception. Fix testlangs to catch ViewerWontLogin and retry a limited number of times. --- indra/newview/CMakeLists.txt | 2 ++ indra/newview/llstartup.cpp | 13 ++++++++++--- indra/newview/llstartup.h | 8 ++++++++ indra/newview/llstartuplistener.cpp | 34 ++++++++++++++++++++++++++++++++++ indra/newview/llstartuplistener.h | 30 ++++++++++++++++++++++++++++++ 5 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 indra/newview/llstartuplistener.cpp create mode 100644 indra/newview/llstartuplistener.h (limited to 'indra/newview/llstartup.cpp') diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 76b967eb82..f5abd3baab 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -389,6 +389,7 @@ set(viewer_SOURCE_FILES llsplitbutton.cpp llsprite.cpp llstartup.cpp + llstartuplistener.cpp llstatusbar.cpp llstylemap.cpp llsurface.cpp @@ -891,6 +892,7 @@ set(viewer_HEADER_FILES llsplitbutton.h llsprite.h llstartup.h + llstartuplistener.h llstatusbar.h llstylemap.h llsurface.h diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 58df2ffb19..12ae12d4ae 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -193,6 +193,7 @@ #include "lllogin.h" #include "llevents.h" +#include "llstartuplistener.h" #if LL_WINDOWS #include "llwindebug.h" @@ -241,7 +242,8 @@ static std::string gFirstSimSeedCap; static LLVector3 gAgentStartLookAt(1.0f, 0.f, 0.f); static std::string gAgentStartLocation = "safe"; -static LLEventStream sStartupStateWatcher("StartupState"); +boost::scoped_ptr LLStartUp::sStateWatcher(new LLEventStream("StartupState")); +boost::scoped_ptr LLStartUp::sListener(new LLStartupListener()); // // local function declaration @@ -2725,10 +2727,15 @@ void LLStartUp::setStartupState( EStartupState state ) getStartupStateString() << " to " << startupStateToString(state) << LL_ENDL; gStartupState = state; + postStartupState(); +} + +void LLStartUp::postStartupState() +{ LLSD stateInfo; stateInfo["str"] = getStartupStateString(); - stateInfo["enum"] = state; - sStartupStateWatcher.post(stateInfo); + stateInfo["enum"] = gStartupState; + sStateWatcher->post(stateInfo); } diff --git a/indra/newview/llstartup.h b/indra/newview/llstartup.h index 7f869d014f..ab11b42e74 100644 --- a/indra/newview/llstartup.h +++ b/indra/newview/llstartup.h @@ -33,7 +33,11 @@ #ifndef LL_LLSTARTUP_H #define LL_LLSTARTUP_H +#include + class LLViewerTexture ; +class LLEventPump; +class LLStartupListener; // functions bool idle_startup(); @@ -113,9 +117,13 @@ public: // *HACK: On startup, if we were passed a secondlife://app/do/foo // command URL, store it for later processing. + static void postStartupState(); + private: static std::string startupStateToString(EStartupState state); static EStartupState gStartupState; // Do not set directly, use LLStartup::setStartupState + static boost::scoped_ptr sStateWatcher; + static boost::scoped_ptr sListener; }; diff --git a/indra/newview/llstartuplistener.cpp b/indra/newview/llstartuplistener.cpp new file mode 100644 index 0000000000..5a76a297c7 --- /dev/null +++ b/indra/newview/llstartuplistener.cpp @@ -0,0 +1,34 @@ +/** + * @file llstartuplistener.cpp + * @author Nat Goodspeed + * @date 2009-12-08 + * @brief Implementation for llstartuplistener. + * + * $LicenseInfo:firstyear=2009&license=viewergpl$ + * Copyright (c) 2009, Linden Research, Inc. + * $/LicenseInfo$ + */ + +// Precompiled header +#include "llviewerprecompiledheaders.h" +// associated header +#include "llstartuplistener.h" +// STL headers +// std headers +// external library headers +// other Linden headers +#include "llstartup.h" + + +LLStartupListener::LLStartupListener(/* LLStartUp* instance */): + LLEventAPI("LLStartUp", "Access e.g. LLStartup::postStartupState()") /* , + mStartup(instance) */ +{ + add("postStartupState", "Refresh \"StartupState\" listeners with current startup state", + &LLStartupListener::postStartupState); +} + +void LLStartupListener::postStartupState(const LLSD&) const +{ + LLStartUp::postStartupState(); +} diff --git a/indra/newview/llstartuplistener.h b/indra/newview/llstartuplistener.h new file mode 100644 index 0000000000..a2a4d3a08e --- /dev/null +++ b/indra/newview/llstartuplistener.h @@ -0,0 +1,30 @@ +/** + * @file llstartuplistener.h + * @author Nat Goodspeed + * @date 2009-12-07 + * @brief Event API to provide access to LLStartUp + * + * $LicenseInfo:firstyear=2009&license=viewergpl$ + * Copyright (c) 2009, Linden Research, Inc. + * $/LicenseInfo$ + */ + +#if ! defined(LL_LLSTARTUPLISTENER_H) +#define LL_LLSTARTUPLISTENER_H + +#include "lleventapi.h" +class LLStartUp; +class LLSD; + +class LLStartupListener: public LLEventAPI +{ +public: + LLStartupListener(/* LLStartUp* instance */); // all static members! + +private: + void postStartupState(const LLSD&) const; + + //LLStartup* mStartup; +}; + +#endif /* ! defined(LL_LLSTARTUPLISTENER_H) */ -- cgit v1.3