From 409a401ebb59fcf28ba25aaeab44ca8d00960c84 Mon Sep 17 00:00:00 2001 From: Kadah_Coba Date: Mon, 5 Dec 2011 14:56:33 -0800 Subject: VWR-17587: Added "Fly/Land on holding up/down" option under Move preferences --- indra/newview/skins/default/xui/en/panel_preferences_move.xml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/indra/newview/skins/default/xui/en/panel_preferences_move.xml b/indra/newview/skins/default/xui/en/panel_preferences_move.xml index d9067b41c7..198fcf9355 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_move.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_move.xml @@ -129,6 +129,16 @@ name="tap_tap_hold_to_run" width="237" top_pad="0"/> + Date: Mon, 4 Jun 2012 11:23:38 -0400 Subject: STORM-1838 Add "Request Teleport" option to the menu when right-clicking on avatars in the Nearby list --- doc/contributions.txt | 1 + indra/llmessage/message_prehash.cpp | 1 + indra/llmessage/message_prehash.h | 1 + indra/newview/llavataractions.cpp | 13 ++++++ indra/newview/llavataractions.h | 5 +++ indra/newview/llpanelpeoplemenus.cpp | 1 + indra/newview/llviewermessage.cpp | 48 ++++++++++++++++++++++ .../skins/default/xui/en/menu_people_nearby.xml | 7 ++++ .../newview/skins/default/xui/en/notifications.xml | 23 +++++++++++ 9 files changed, 100 insertions(+) diff --git a/doc/contributions.txt b/doc/contributions.txt index 04edfb4bea..cc5fb53b57 100644 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -629,6 +629,7 @@ Jonathan Yap STORM-1809 STORM-1793 STORM-1810 + STORM-1838 Kadah Coba STORM-1060 Jondan Lundquist diff --git a/indra/llmessage/message_prehash.cpp b/indra/llmessage/message_prehash.cpp index e71fb96540..64fb6a78a2 100644 --- a/indra/llmessage/message_prehash.cpp +++ b/indra/llmessage/message_prehash.cpp @@ -1379,3 +1379,4 @@ char const* const _PREHASH_ProductSKU = LLMessageStringTable::getInstance()->get char const* const _PREHASH_SeeAVs = LLMessageStringTable::getInstance()->getString("SeeAVs"); char const* const _PREHASH_AnyAVSounds = LLMessageStringTable::getInstance()->getString("AnyAVSounds"); char const* const _PREHASH_GroupAVSounds = LLMessageStringTable::getInstance()->getString("GroupAVSounds"); +char const* const _PREHASH_RequestTeleport = LLMessageStringTable::getInstance()->getString("RequestTeleport"); diff --git a/indra/llmessage/message_prehash.h b/indra/llmessage/message_prehash.h index dd2c2dbd64..4da1fa7a95 100644 --- a/indra/llmessage/message_prehash.h +++ b/indra/llmessage/message_prehash.h @@ -1379,4 +1379,5 @@ extern char const* const _PREHASH_ProductSKU; extern char const* const _PREHASH_SeeAVs; extern char const* const _PREHASH_AnyAVSounds; extern char const* const _PREHASH_GroupAVSounds; +extern char const* const _PREHASH_RequestTeleport; #endif diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index f618af9536..8df30da68a 100755 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -71,6 +71,7 @@ #include "llcallingcard.h" #include "llslurl.h" // IDEVO #include "llsidepanelinventory.h" +#include "llavatarname.h" // static void LLAvatarActions::requestFriendshipDialog(const LLUUID& id, const std::string& name) @@ -395,6 +396,18 @@ void LLAvatarActions::pay(const LLUUID& id) } } +// static +void LLAvatarActions::requestTeleport(const LLUUID& id) +{ + LLMessageSystem* msg = gMessageSystem; + + msg->newMessageFast(_PREHASH_RequestTeleport); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, id); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + gAgent.sendReliableMessage(); +} + // static void LLAvatarActions::kick(const LLUUID& id) { diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h index 748b7cb3d1..1eee9ea81f 100644 --- a/indra/newview/llavataractions.h +++ b/indra/newview/llavataractions.h @@ -108,6 +108,11 @@ public: */ static void pay(const LLUUID& id); + /** + * Request teleport from other avatar + */ + static void requestTeleport(const LLUUID& id); + /** * Share items with the avatar. */ diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp index f12c4de2f7..c703ae8768 100644 --- a/indra/newview/llpanelpeoplemenus.cpp +++ b/indra/newview/llpanelpeoplemenus.cpp @@ -67,6 +67,7 @@ LLContextMenu* NearbyMenu::createMenu() registrar.add("Avatar.Share", boost::bind(&LLAvatarActions::share, id)); registrar.add("Avatar.Pay", boost::bind(&LLAvatarActions::pay, id)); registrar.add("Avatar.BlockUnblock", boost::bind(&LLAvatarActions::toggleBlock, id)); + registrar.add("Avatar.RequestTeleport", boost::bind(&LLAvatarActions::requestTeleport, id)); enable_registrar.add("Avatar.EnableItem", boost::bind(&NearbyMenu::enableContextMenuItem, this, _2)); enable_registrar.add("Avatar.CheckItem", boost::bind(&NearbyMenu::checkContextMenuItem, this, _2)); diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 854e2bea52..f4f7148340 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -1992,6 +1992,54 @@ bool lure_callback(const LLSD& notification, const LLSD& response) } static LLNotificationFunctorRegistration lure_callback_reg("TeleportOffered", lure_callback); +bool teleport_requested_callback(const LLSD& notification, const LLSD& response) +{ + LLUUID from_id = notification["payload"]["from_id"].asUUID(); + std::string from_name; + gCacheName->getFullName(from_id, from_name); + + if(from_id.isNull() || (LLMuteList::getInstance()->isMuted(from_id) && !LLMuteList::getInstance()->isLinden(from_name))) + { + return false; + } + + S32 option = 0; + if (response.isInteger()) + { + option = response.asInteger(); + } + else + { + option = LLNotificationsUtil::getSelectedOption(notification, response); + } + + switch(option) + { + // Yes + case 0: + { + LLAvatarActions::offerTeleport(from_id); + } + break; + + // No + case 1: + default: + break; + + // Block + case 2: + { + LLMute mute(from_id, from_name, LLMute::AGENT); + LLPanelBlockedList::showPanelAndSelect(mute.mID); + } + break; + } + return false; +} + +static LLNotificationFunctorRegistration teleport_requested_callback_reg("TeleportRequested", teleport_requested_callback); + bool goto_url_callback(const LLSD& notification, const LLSD& response) { std::string url = notification["payload"]["url"].asString(); diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby.xml b/indra/newview/skins/default/xui/en/menu_people_nearby.xml index d2e35e4cc0..cff383cab1 100644 --- a/indra/newview/skins/default/xui/en/menu_people_nearby.xml +++ b/indra/newview/skins/default/xui/en/menu_people_nearby.xml @@ -70,6 +70,13 @@ + + + + +[NAME] is requesting to be teleported your to your location. + +Will you permit this? + confirm +
+
+ + Date: Tue, 12 Mar 2013 00:56:51 +0100 Subject: ACME-99 FIX Populate the FB tab friends list with FB data --- indra/newview/llpanelpeople.cpp | 93 +++++++++++++++++++++- indra/newview/llpanelpeople.h | 5 ++ .../newview/skins/default/xui/en/panel_people.xml | 19 ++--- 3 files changed, 104 insertions(+), 13 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 85f54b06eb..491b8dd7c5 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -64,9 +64,11 @@ #include "llvoiceclient.h" #include "llworld.h" #include "llspeakers.h" +#include "llfloaterwebcontent.h" #define FRIEND_LIST_UPDATE_TIMEOUT 0.5 #define NEARBY_LIST_UPDATE_INTERVAL 1 +#define FBCTEST_LIST_UPDATE_INTERVAL 0.25 static const std::string NEARBY_TAB_NAME = "nearby_panel"; static const std::string FRIENDS_TAB_NAME = "friends_panel"; @@ -489,6 +491,45 @@ public: } }; +/** + * Periodically updates the FBC test list after a login is initiated. + * + * The period is defined by FBCTEST_LIST_UPDATE_INTERVAL constant. + */ +class LLFbcTestListUpdater : public LLAvatarListUpdater +{ + LOG_CLASS(LLFbcTestListUpdater); + +public: + LLFbcTestListUpdater(callback_t cb) + : LLAvatarListUpdater(cb, FBCTEST_LIST_UPDATE_INTERVAL) + { + setActive(false); + } + + /*virtual*/ void setActive(bool val) + { + if (val) + { + // update immediately and start regular updates + update(); + mEventTimer.start(); + } + else + { + // stop regular updates + mEventTimer.stop(); + } + } + + /*virtual*/ BOOL tick() + { + update(); + return FALSE; + } +private: +}; + //============================================================================= LLPanelPeople::LLPanelPeople() @@ -502,6 +543,7 @@ LLPanelPeople::LLPanelPeople() mNearbyList(NULL), mRecentList(NULL), mGroupList(NULL), + mFbcTestText(NULL), mNearbyGearButton(NULL), mFriendsGearButton(NULL), mGroupsGearButton(NULL), @@ -511,6 +553,7 @@ LLPanelPeople::LLPanelPeople() mFriendListUpdater = new LLFriendListUpdater(boost::bind(&LLPanelPeople::updateFriendList, this)); mNearbyListUpdater = new LLNearbyListUpdater(boost::bind(&LLPanelPeople::updateNearbyList, this)); mRecentListUpdater = new LLRecentListUpdater(boost::bind(&LLPanelPeople::updateRecentList, this)); + mFbcTestListUpdater = new LLFbcTestListUpdater(boost::bind(&LLPanelPeople::updateFbcTestList, this)); mButtonsUpdater = new LLButtonsUpdater(boost::bind(&LLPanelPeople::updateButtons, this)); mCommitCallbackRegistrar.add("People.addFriend", boost::bind(&LLPanelPeople::onAddFriendButtonClicked, this)); mCommitCallbackRegistrar.add("People.loginFBC", boost::bind(&LLPanelPeople::onLoginFbcButtonClicked, this)); @@ -522,6 +565,7 @@ LLPanelPeople::~LLPanelPeople() delete mNearbyListUpdater; delete mFriendListUpdater; delete mRecentListUpdater; + delete mFbcTestListUpdater; if(LLVoiceClient::instanceExists()) { @@ -533,7 +577,7 @@ LLPanelPeople::~LLPanelPeople() if (mNearbyViewSortMenuHandle.get()) mNearbyViewSortMenuHandle.get()->die(); if (mGroupsViewSortMenuHandle.get()) mGroupsViewSortMenuHandle.get()->die(); if (mRecentViewSortMenuHandle.get()) mRecentViewSortMenuHandle.get()->die(); - + if (mFbcTestBrowserHandle.get()) mFbcTestBrowserHandle.get()->die(); } void LLPanelPeople::onFriendsAccordionExpandedCollapsed(LLUICtrl* ctrl, const LLSD& param, LLAvatarList* avatar_list) @@ -598,6 +642,8 @@ BOOL LLPanelPeople::postBuild() mRecentList->setContextMenu(&LLPanelPeopleMenus::gNearbyMenu); mAllFriendList->setContextMenu(&LLPanelPeopleMenus::gNearbyMenu); mOnlineFriendList->setContextMenu(&LLPanelPeopleMenus::gNearbyMenu); + + mFbcTestText = getChild(FBCTEST_TAB_NAME)->getChild("fbctest_label"); setSortOrder(mRecentList, (ESortOrder)gSavedSettings.getU32("RecentPeopleSortOrder"), false); setSortOrder(mAllFriendList, (ESortOrder)gSavedSettings.getU32("FriendsSortOrder"), false); @@ -823,6 +869,40 @@ void LLPanelPeople::updateRecentList() mRecentList->setDirty(); } +void LLPanelPeople::updateFbcTestList() +{ + if (!mFbcTestText) + return; + + if (mFbcTestBrowserHandle.get()) + { + // get the browser data (from the title bar, of course!) + std::string title = mFbcTestBrowserHandle.get()->getTitle(); + + // if the data is ready (if it says the magic word) + if (title.length() > 8 && title.substr(0, 8) == "FBCTEST ") + { + // get the list of friends' names from the title bar + std::vector names = LLStringUtil::getTokens(title.substr(8), ","); + + // display the names in the list + std::string label; + for (std::vector::const_iterator i = names.begin() + 1; i != names.end(); ++i) + { + label += *i; + label += "\n"; + } + mFbcTestText->setText(label); + + // close the browser window + mFbcTestBrowserHandle.get()->die(); + + // stop updating + mFbcTestListUpdater->setActive(false); + } + } +} + void LLPanelPeople::buttonSetVisible(std::string btn_name, BOOL visible) { // To make sure we're referencing the right widget (a child of the button bar). @@ -1564,7 +1644,16 @@ bool LLPanelPeople::isAccordionCollapsedByUser(const std::string& name) void LLPanelPeople::onLoginFbcButtonClicked() { - LLWeb::loadURLInternal("https://cryptic-ridge-1632.herokuapp.com/"); + LLFloaterWebContent::Params p; + p.url("https://cryptic-ridge-1632.herokuapp.com/"); + LLFloater* browser = LLFloaterReg::showInstance("web_content", p); + + if (browser) + { + // start checking the browser to see if the data is available yet + mFbcTestBrowserHandle = browser->getHandle(); + mFbcTestListUpdater->setActive(true); + } } // EOF diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index 4df5df2574..010fb5ca77 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -73,6 +73,7 @@ private: void updateFriendList(); void updateNearbyList(); void updateRecentList(); + void updateFbcTestList(); bool isItemsFreeOfFriends(const uuid_vec_t& uuids); @@ -145,16 +146,20 @@ private: LLAvatarList* mRecentList; LLGroupList* mGroupList; LLNetMap* mMiniMap; + + LLTextBox* mFbcTestText; LLHandle mGroupPlusMenuHandle; LLHandle mNearbyViewSortMenuHandle; LLHandle mFriendsViewSortMenuHandle; LLHandle mGroupsViewSortMenuHandle; LLHandle mRecentViewSortMenuHandle; + LLHandle mFbcTestBrowserHandle; Updater* mFriendListUpdater; Updater* mNearbyListUpdater; Updater* mRecentListUpdater; + Updater* mFbcTestListUpdater; Updater* mButtonsUpdater; LLMenuButton* mNearbyGearButton; diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index 781a1d773f..cbb6aff4ea 100644 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -585,17 +585,14 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M name="fbctest_panel" top="0" width="313"> - + Date: Wed, 13 Mar 2013 17:35:37 -0700 Subject: Now using the FBC Test panel you can select the '+' button to view FBC app settings, send a FBC app invite or send a facebook message. --- indra/newview/llpanelpeople.cpp | 37 +++++++++++++++++++++++++++++++++++++ indra/newview/llpanelpeople.h | 4 ++++ 2 files changed, 41 insertions(+) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 491b8dd7c5..dfc48145dc 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -557,6 +557,8 @@ LLPanelPeople::LLPanelPeople() mButtonsUpdater = new LLButtonsUpdater(boost::bind(&LLPanelPeople::updateButtons, this)); mCommitCallbackRegistrar.add("People.addFriend", boost::bind(&LLPanelPeople::onAddFriendButtonClicked, this)); mCommitCallbackRegistrar.add("People.loginFBC", boost::bind(&LLPanelPeople::onLoginFbcButtonClicked, this)); + mCommitCallbackRegistrar.add("People.requestFBC", boost::bind(&LLPanelPeople::onFacebookAppRequestClicked, this)); + mCommitCallbackRegistrar.add("People.sendFBC", boost::bind(&LLPanelPeople::onFacebookAppSendClicked, this)); } LLPanelPeople::~LLPanelPeople() @@ -717,6 +719,7 @@ BOOL LLPanelPeople::postBuild() mFriendsGearButton = getChild("friends_viewsort_btn"); mGroupsGearButton = getChild("groups_viewsort_btn"); mRecentGearButton = getChild("recent_viewsort_btn"); + mFBCGearButton = getChild("fbc_options_btn"); LLMenuGL* plus_menu = LLUICtrlFactory::getInstance()->createFromFile("menu_group_plus.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); mGroupPlusMenuHandle = plus_menu->getHandle(); @@ -749,6 +752,13 @@ BOOL LLPanelPeople::postBuild() mRecentGearButton->setMenu(recent_view_sort); } + LLToggleableMenu* fbc_menu = LLUICtrlFactory::getInstance()->createFromFile("menu_gear_fbc.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); + if(fbc_menu) + { + mFBCMenuHandle = fbc_menu->getHandle(); + mFBCGearButton->setMenu(fbc_menu); + } + LLVoiceClient::getInstance()->addObserver(this); // call this method in case some list is empty and buttons can be in inconsistent state @@ -1656,4 +1666,31 @@ void LLPanelPeople::onLoginFbcButtonClicked() } } +void LLPanelPeople::onFacebookAppRequestClicked() +{ + LLFloaterWebContent::Params p; + p.url("http://www.facebook.com/dialog/apprequests?app_id=565771023434202&message=Test&redirect_uri=https://cryptic-ridge-1632.herokuapp.com/"); + LLFloater* browser = LLFloaterReg::showInstance("web_content", p); + + if (browser) + { + // start checking the browser to see if the data is available yet + mFbcTestBrowserHandle = browser->getHandle(); + mFbcTestListUpdater->setActive(true); + } +} + +void LLPanelPeople::onFacebookAppSendClicked() +{ + LLFloaterWebContent::Params p; + p.url("https://www.facebook.com/dialog/send?app_id=565771023434202&name=Test&link=http://www.cnet.com&redirect_uri=https://cryptic-ridge-1632.herokuapp.com/"); + LLFloater* browser = LLFloaterReg::showInstance("web_content", p); + + if (browser) + { + // start checking the browser to see if the data is available yet + mFbcTestBrowserHandle = browser->getHandle(); + mFbcTestListUpdater->setActive(true); + } +} // EOF diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index 010fb5ca77..feb32d1f69 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -115,6 +115,8 @@ private: void onRecentViewSortMenuItemClicked(const LLSD& userdata); void onLoginFbcButtonClicked(); + void onFacebookAppRequestClicked(); + void onFacebookAppSendClicked(); //returns false only if group is "none" bool isRealGroup(); @@ -154,6 +156,7 @@ private: LLHandle mFriendsViewSortMenuHandle; LLHandle mGroupsViewSortMenuHandle; LLHandle mRecentViewSortMenuHandle; + LLHandle mFBCMenuHandle; LLHandle mFbcTestBrowserHandle; Updater* mFriendListUpdater; @@ -166,6 +169,7 @@ private: LLMenuButton* mFriendsGearButton; LLMenuButton* mGroupsGearButton; LLMenuButton* mRecentGearButton; + LLMenuButton* mFBCGearButton; std::string mFilterSubString; std::string mFilterSubStringOrig; -- cgit v1.2.3 From aec007f8bd21d2133130fc6157202101c2424a6c Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Thu, 14 Mar 2013 11:09:39 -0700 Subject: forgot to add new .xml file for the gear menu in the FBC Test panel. Also cleaned up the code I added. --- indra/newview/llpanelpeople.cpp | 29 ++++++++------------- indra/newview/llpanelpeople.h | 2 ++ .../newview/skins/default/xui/en/menu_gear_fbc.xml | 30 ++++++++++++++++++++++ 3 files changed, 42 insertions(+), 19 deletions(-) create mode 100644 indra/newview/skins/default/xui/en/menu_gear_fbc.xml diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index dfc48145dc..ab82273ccd 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1652,10 +1652,8 @@ bool LLPanelPeople::isAccordionCollapsedByUser(const std::string& name) return isAccordionCollapsedByUser(getChild(name)); } -void LLPanelPeople::onLoginFbcButtonClicked() +void LLPanelPeople::openFacebookWeb(LLFloaterWebContent::Params& p) { - LLFloaterWebContent::Params p; - p.url("https://cryptic-ridge-1632.herokuapp.com/"); LLFloater* browser = LLFloaterReg::showInstance("web_content", p); if (browser) @@ -1666,31 +1664,24 @@ void LLPanelPeople::onLoginFbcButtonClicked() } } +void LLPanelPeople::onLoginFbcButtonClicked() +{ + LLFloaterWebContent::Params p; + p.url("https://cryptic-ridge-1632.herokuapp.com/"); + openFacebookWeb(p); +} + void LLPanelPeople::onFacebookAppRequestClicked() { LLFloaterWebContent::Params p; p.url("http://www.facebook.com/dialog/apprequests?app_id=565771023434202&message=Test&redirect_uri=https://cryptic-ridge-1632.herokuapp.com/"); - LLFloater* browser = LLFloaterReg::showInstance("web_content", p); - - if (browser) - { - // start checking the browser to see if the data is available yet - mFbcTestBrowserHandle = browser->getHandle(); - mFbcTestListUpdater->setActive(true); - } + openFacebookWeb(p); } void LLPanelPeople::onFacebookAppSendClicked() { LLFloaterWebContent::Params p; p.url("https://www.facebook.com/dialog/send?app_id=565771023434202&name=Test&link=http://www.cnet.com&redirect_uri=https://cryptic-ridge-1632.herokuapp.com/"); - LLFloater* browser = LLFloaterReg::showInstance("web_content", p); - - if (browser) - { - // start checking the browser to see if the data is available yet - mFbcTestBrowserHandle = browser->getHandle(); - mFbcTestListUpdater->setActive(true); - } + openFacebookWeb(p); } // EOF diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index feb32d1f69..39cdbc9bd7 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -30,6 +30,7 @@ #include #include "llcallingcard.h" // for avatar tracker +#include "llfloaterwebcontent.h" #include "llvoiceclient.h" class LLAvatarList; @@ -117,6 +118,7 @@ private: void onLoginFbcButtonClicked(); void onFacebookAppRequestClicked(); void onFacebookAppSendClicked(); + void openFacebookWeb(LLFloaterWebContent::Params& p); //returns false only if group is "none" bool isRealGroup(); diff --git a/indra/newview/skins/default/xui/en/menu_gear_fbc.xml b/indra/newview/skins/default/xui/en/menu_gear_fbc.xml new file mode 100644 index 0000000000..b05ba46107 --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_gear_fbc.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + \ No newline at end of file -- cgit v1.2.3 From ecbcef1224899d7f61860289fc079aae284a3360 Mon Sep 17 00:00:00 2001 From: Cho Date: Fri, 29 Mar 2013 01:42:50 +0100 Subject: changed url to pdp15.lindenlab.com --- indra/newview/llpanelpeople.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index ab82273ccd..10a783053b 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1667,21 +1667,21 @@ void LLPanelPeople::openFacebookWeb(LLFloaterWebContent::Params& p) void LLPanelPeople::onLoginFbcButtonClicked() { LLFloaterWebContent::Params p; - p.url("https://cryptic-ridge-1632.herokuapp.com/"); + p.url("https://www.facebook.com/dialog/oauth?client_id=565771023434202&redirect_uri=https://pdp15.lindenlab.com/authenticate/" + gAgentID.asString()); openFacebookWeb(p); } void LLPanelPeople::onFacebookAppRequestClicked() { LLFloaterWebContent::Params p; - p.url("http://www.facebook.com/dialog/apprequests?app_id=565771023434202&message=Test&redirect_uri=https://cryptic-ridge-1632.herokuapp.com/"); + p.url("http://www.facebook.com/dialog/apprequests?app_id=565771023434202&message=Test&redirect_uri=https://pdp15.lindenlab.com/"); openFacebookWeb(p); } void LLPanelPeople::onFacebookAppSendClicked() { LLFloaterWebContent::Params p; - p.url("https://www.facebook.com/dialog/send?app_id=565771023434202&name=Test&link=http://www.cnet.com&redirect_uri=https://cryptic-ridge-1632.herokuapp.com/"); + p.url("https://www.facebook.com/dialog/send?app_id=565771023434202&name=Test&link=http://www.cnet.com&redirect_uri=https://pdp15.lindenlab.com/"); openFacebookWeb(p); } // EOF -- cgit v1.2.3 From 67726254a7d638a61025cbff53d88378f9b0ef04 Mon Sep 17 00:00:00 2001 From: Cho Date: Fri, 29 Mar 2013 21:40:23 +0100 Subject: added response to successful FBC authentication --- indra/newview/llpanelpeople.cpp | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 10a783053b..8f138a821a 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -78,6 +78,8 @@ static const std::string FBCTEST_TAB_NAME = "fbctest_panel"; static const std::string COLLAPSED_BY_USER = "collapsed_by_user"; +static const std::string FBC_SERVICES_URL = "https://pdp15.lindenlab.com"; + /** Comparator for comparing avatar items by last interaction date */ class LLAvatarItemRecentComparator : public LLAvatarItemComparator { @@ -890,19 +892,18 @@ void LLPanelPeople::updateFbcTestList() std::string title = mFbcTestBrowserHandle.get()->getTitle(); // if the data is ready (if it says the magic word) - if (title.length() > 8 && title.substr(0, 8) == "FBCTEST ") + if (title.length() >= 2 && title[0] == ':') { - // get the list of friends' names from the title bar - std::vector names = LLStringUtil::getTokens(title.substr(8), ","); - - // display the names in the list - std::string label; - for (std::vector::const_iterator i = names.begin() + 1; i != names.end(); ++i) + // success! :) + if (title[1] == ')') + { + mFbcTestText->setText(std::string("okay, now we can get the list of friends!")); + } + // failure :( + else if (title[1] == '(') { - label += *i; - label += "\n"; + mFbcTestText->setText(std::string("hmm, the authentication failed somehow")); } - mFbcTestText->setText(label); // close the browser window mFbcTestBrowserHandle.get()->die(); @@ -1667,21 +1668,21 @@ void LLPanelPeople::openFacebookWeb(LLFloaterWebContent::Params& p) void LLPanelPeople::onLoginFbcButtonClicked() { LLFloaterWebContent::Params p; - p.url("https://www.facebook.com/dialog/oauth?client_id=565771023434202&redirect_uri=https://pdp15.lindenlab.com/authenticate/" + gAgentID.asString()); + p.url("https://www.facebook.com/dialog/oauth?client_id=565771023434202&redirect_uri=" + FBC_SERVICES_URL + "/authenticate/" + gAgentID.asString()); openFacebookWeb(p); } void LLPanelPeople::onFacebookAppRequestClicked() { LLFloaterWebContent::Params p; - p.url("http://www.facebook.com/dialog/apprequests?app_id=565771023434202&message=Test&redirect_uri=https://pdp15.lindenlab.com/"); + p.url("http://www.facebook.com/dialog/apprequests?app_id=565771023434202&message=Test&redirect_uri=" + FBC_SERVICES_URL); openFacebookWeb(p); } void LLPanelPeople::onFacebookAppSendClicked() { LLFloaterWebContent::Params p; - p.url("https://www.facebook.com/dialog/send?app_id=565771023434202&name=Test&link=http://www.cnet.com&redirect_uri=https://pdp15.lindenlab.com/"); + p.url("https://www.facebook.com/dialog/send?app_id=565771023434202&name=Test&link=http://www.cnet.com&redirect_uri=" + FBC_SERVICES_URL); openFacebookWeb(p); } // EOF -- cgit v1.2.3 From 11aed44bab1da46e0fadb458464e3cfd7ea2be43 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Fri, 29 Mar 2013 15:28:41 -0700 Subject: Using curl to access pdp with the has-acces-token API and then upon receipt will open the webview when no token exists for the user. --- indra/newview/llpanelpeople.cpp | 42 ++++++++++++++++++++++++++++++++++++++--- indra/newview/llpanelpeople.h | 2 +- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 10a783053b..e229fd3cf3 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1664,11 +1664,47 @@ void LLPanelPeople::openFacebookWeb(LLFloaterWebContent::Params& p) } } +class LLFacebookLogin : public LLHTTPClient::Responder +{ +public: + + LLPanelPeople * mPanelPeople; + + LLFacebookLogin(LLPanelPeople * panel_people) : mPanelPeople(panel_people) {} + + /*virtual*/ void completed(U32 status, const std::string& reason, const LLSD& content) + { + // in case of invalid characters, the avatar picker returns a 400 + // just set it to process so it displays 'not found' + if (isGoodStatus(status) || status == 400) + { + llinfos << content << llendl; + + bool has_token = content["has_access_token"].asBoolean(); + + //use the token to pull down graph data + if(has_token) + { + + } + //request user to login + else + { + LLFloaterWebContent::Params p; + p.url("https://www.facebook.com/dialog/oauth?client_id=565771023434202&redirect_uri=https://pdp15.lindenlab.com/authenticate/" + gAgentID.asString()); + mPanelPeople->openFacebookWeb(p); + } + } + else + { + llinfos << "failed to get response. reason: " << reason << " status: " << status << llendl; + } + } +}; + void LLPanelPeople::onLoginFbcButtonClicked() { - LLFloaterWebContent::Params p; - p.url("https://www.facebook.com/dialog/oauth?client_id=565771023434202&redirect_uri=https://pdp15.lindenlab.com/authenticate/" + gAgentID.asString()); - openFacebookWeb(p); + LLHTTPClient::get("https://pdp15.lindenlab.com/has-access-token/" + gAgentID.asString(), new LLFacebookLogin(this)); } void LLPanelPeople::onFacebookAppRequestClicked() diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index 39cdbc9bd7..dadd273603 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -55,6 +55,7 @@ public: // Implements LLVoiceClientStatusObserver::onChange() to enable call buttons // when voice is available /*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal); + void openFacebookWeb(LLFloaterWebContent::Params& p); // internals class Updater; @@ -118,7 +119,6 @@ private: void onLoginFbcButtonClicked(); void onFacebookAppRequestClicked(); void onFacebookAppSendClicked(); - void openFacebookWeb(LLFloaterWebContent::Params& p); //returns false only if group is "none" bool isRealGroup(); -- cgit v1.2.3 From 4fe3e00aad663d1afd35007b4e8093ae4e58e92e Mon Sep 17 00:00:00 2001 From: Cho Date: Tue, 2 Apr 2013 02:10:04 +0100 Subject: added request to /get-friends/ after FB login --- indra/newview/llpanelpeople.cpp | 67 +++++++++++++++++++++++++++++++++++------ indra/newview/llpanelpeople.h | 3 ++ 2 files changed, 61 insertions(+), 9 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 01d68cb9a0..87bede76bc 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -896,8 +896,11 @@ void LLPanelPeople::updateFbcTestList() { // success! :) if (title[1] == ')') - { + { mFbcTestText->setText(std::string("okay, now we can get the list of friends!")); + + // get the friends + getFacebookFriends(); } // failure :( else if (title[1] == '(') @@ -1665,13 +1668,28 @@ void LLPanelPeople::openFacebookWeb(LLFloaterWebContent::Params& p) } } -class LLFacebookLogin : public LLHTTPClient::Responder +void LLPanelPeople::showFacebookFriends(const LLSD& friends) +{ + std::string text = "Facebook Friends"; + for (LLSD::array_const_iterator i = friends.beginArray(); i != friends.endArray(); ++i) + { + std::string name = (*i)["name"].asString(); + std::string id = (*i)["id"].asString(); + + text += "\n" + name + " (" + id + ")"; + } + + // display the facebook friend data on the test text box + mFbcTestText->setText(text); +} + +class FacebookLoginResponder : public LLHTTPClient::Responder { public: LLPanelPeople * mPanelPeople; - LLFacebookLogin(LLPanelPeople * panel_people) : mPanelPeople(panel_people) {} + FacebookLoginResponder(LLPanelPeople * panel_people) : mPanelPeople(panel_people) {} /*virtual*/ void completed(U32 status, const std::string& reason, const LLSD& content) { @@ -1686,15 +1704,41 @@ public: //use the token to pull down graph data if(has_token) { - + mPanelPeople->getFacebookFriends(); } //request user to login else { - LLFloaterWebContent::Params p; - p.url("https://www.facebook.com/dialog/oauth?client_id=565771023434202&redirect_uri=" + FBC_SERVICES_URL + "/authenticate/" + gAgentID.asString()); + LLFloaterWebContent::Params p; + p.url("https://www.facebook.com/dialog/oauth?client_id=565771023434202&redirect_uri=" + FBC_SERVICES_URL + "/authenticate/" + gAgentID.asString()); mPanelPeople->openFacebookWeb(p); -} + } + } + else + { + llinfos << "failed to get response. reason: " << reason << " status: " << status << llendl; + } + } +}; + +class FacebookFriendsResponder : public LLHTTPClient::Responder +{ +public: + + LLPanelPeople * mPanelPeople; + + FacebookFriendsResponder(LLPanelPeople * panel_people) : mPanelPeople(panel_people) {} + + /*virtual*/ void completed(U32 status, const std::string& reason, const LLSD& content) + { + // in case of invalid characters, the avatar picker returns a 400 + // just set it to process so it displays 'not found' + if (isGoodStatus(status) || status == 400) + { + llinfos << content << llendl; + + // display the friend data + mPanelPeople->showFacebookFriends(content["friends"]); } else { @@ -1703,9 +1747,14 @@ public: } }; +void LLPanelPeople::getFacebookFriends() +{ + LLHTTPClient::get(FBC_SERVICES_URL + "/get-friends/" + gAgentID.asString(), new FacebookFriendsResponder(this)); +} + void LLPanelPeople::onLoginFbcButtonClicked() { - LLHTTPClient::get("https://pdp15.lindenlab.com/has-access-token/" + gAgentID.asString(), new LLFacebookLogin(this)); + LLHTTPClient::get(FBC_SERVICES_URL + "/has-access-token/" + gAgentID.asString(), new FacebookLoginResponder(this)); } void LLPanelPeople::onFacebookAppRequestClicked() @@ -1718,7 +1767,7 @@ void LLPanelPeople::onFacebookAppRequestClicked() void LLPanelPeople::onFacebookAppSendClicked() { LLFloaterWebContent::Params p; - p.url("https://www.facebook.com/dialog/send?app_id=565771023434202&name=Test&link=http://www.cnet.com&redirect_uri=" + FBC_SERVICES_URL); + p.url("https://www.facebook.com/dialog/send?app_id=565771023434202&name=Join Second Life!&link=https://join.secondlife.com&redirect_uri=" + FBC_SERVICES_URL); openFacebookWeb(p); } // EOF diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index dadd273603..86bcac3ede 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -55,7 +55,10 @@ public: // Implements LLVoiceClientStatusObserver::onChange() to enable call buttons // when voice is available /*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal); + void openFacebookWeb(LLFloaterWebContent::Params& p); + void showFacebookFriends(const LLSD& friends); + void getFacebookFriends(); // internals class Updater; -- cgit v1.2.3 From 0a4ab0c64790b82edba369891a1983cd4b7f84f2 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Mon, 1 Apr 2013 23:08:16 -0700 Subject: Some not so clean code to use to show facebook friends using the existing avatar list. --- indra/newview/llavatarlist.cpp | 36 +++++++++++++++++++++ indra/newview/llavatarlist.h | 27 +++++++++++++--- indra/newview/llpanelpeople.cpp | 37 ++++------------------ indra/newview/llpanelpeople.h | 2 ++ .../newview/skins/default/xui/en/panel_people.xml | 36 +++++++++++++++++---- 5 files changed, 96 insertions(+), 42 deletions(-) diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp index 771419f60a..37de2d5793 100644 --- a/indra/newview/llavatarlist.cpp +++ b/indra/newview/llavatarlist.cpp @@ -624,3 +624,39 @@ void LLAvalineListItem::setName(const std::string& name) LLAvatarListItem::setAvatarToolTip(formatted_phone); } } + +/************************************************************************/ +/* class LLAvatarListSocial */ +/************************************************************************/ + +static LLDefaultChildRegistry::Register s("avatar_list_social"); + +LLAvatarListSocial::LLAvatarListSocial(const Params& p) : LLAvatarList(p) +{ + +} + +void LLAvatarListSocial::addSocialItem(const LLUUID& id, const std::string& name, BOOL is_online, EAddPosition pos) +{ + LLAvatarListItem* item = new LLAvatarListItem(); + // This sets the name as a side effect + item->setAvatarId(id, mSessionID, mIgnoreOnlineStatus, false); + item->setAvatarName(name); + item->setOnline(mIgnoreOnlineStatus ? true : is_online); + item->showLastInteractionTime(mShowLastInteractionTime); + + item->setAvatarIconVisible(mShowIcons); + item->setShowInfoBtn(mShowInfoBtn); + item->setShowProfileBtn(mShowProfileBtn); + item->showSpeakingIndicator(mShowSpeakingIndicator); + item->setShowPermissions(mShowPermissions); + + item->setDoubleClickCallback(boost::bind(&LLAvatarListSocial::onItemDoubleClicked, this, _1, _2, _3, _4)); + + addItem(item, id, pos); +} + +void LLAvatarListSocial::refresh() +{ + +} diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h index 4814a88a79..cbe5956493 100644 --- a/indra/newview/llavatarlist.h +++ b/indra/newview/llavatarlist.h @@ -97,10 +97,12 @@ public: void addAvalineItem(const LLUUID& item_id, const LLUUID& session_id, const std::string& item_name); void handleDisplayNamesOptionChanged(); -protected: - void refresh(); + - void addNewItem(const LLUUID& id, const std::string& name, BOOL is_online, EAddPosition pos = ADD_BOTTOM); +protected: + virtual void refresh(); + virtual void addNewItem(const LLUUID& id, const std::string& name, BOOL is_online, EAddPosition pos = ADD_BOTTOM); + void computeDifference( const uuid_vec_t& vnew, uuid_vec_t& vadded, @@ -110,8 +112,6 @@ protected: void onItemDoubleClicked(LLUICtrl* ctrl, S32 x, S32 y, MASK mask); void updateAvatarNames(); -private: - bool isAvalineItemSelected(); bool mIgnoreOnlineStatus; @@ -205,4 +205,21 @@ private: bool mIsHideNumber; }; +class LLAvatarListSocial : public LLAvatarList +{ + public: + struct Params : public LLInitParam::Block + { + + }; + + LLAvatarListSocial(const Params&); + + void addSocialItem(const LLUUID& id, const std::string& name, BOOL is_online, EAddPosition pos = ADD_BOTTOM); + + protected: + /*virtual*/ void refresh(); +}; + + #endif // LL_LLAVATARLIST_H diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 01d68cb9a0..7a3e6abb7f 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -647,7 +647,9 @@ BOOL LLPanelPeople::postBuild() mAllFriendList->setContextMenu(&LLPanelPeopleMenus::gNearbyMenu); mOnlineFriendList->setContextMenu(&LLPanelPeopleMenus::gNearbyMenu); - mFbcTestText = getChild(FBCTEST_TAB_NAME)->getChild("fbctest_label"); + LLPanel * social_tab = getChild(FBCTEST_TAB_NAME); + social_tab->setVisibleCallback(boost::bind(&Updater::setActive, mFbcTestListUpdater, _2)); + mFacebookFriends = social_tab->getChild("facebook_friends"); setSortOrder(mRecentList, (ESortOrder)gSavedSettings.getU32("RecentPeopleSortOrder"), false); setSortOrder(mAllFriendList, (ESortOrder)gSavedSettings.getU32("FriendsSortOrder"), false); @@ -883,35 +885,10 @@ void LLPanelPeople::updateRecentList() void LLPanelPeople::updateFbcTestList() { - if (!mFbcTestText) - return; - - if (mFbcTestBrowserHandle.get()) - { - // get the browser data (from the title bar, of course!) - std::string title = mFbcTestBrowserHandle.get()->getTitle(); - - // if the data is ready (if it says the magic word) - if (title.length() >= 2 && title[0] == ':') - { - // success! :) - if (title[1] == ')') - { - mFbcTestText->setText(std::string("okay, now we can get the list of friends!")); - } - // failure :( - else if (title[1] == '(') - { - mFbcTestText->setText(std::string("hmm, the authentication failed somehow")); - } - - // close the browser window - mFbcTestBrowserHandle.get()->die(); - - // stop updating - mFbcTestListUpdater->setActive(false); - } - } + mFacebookFriends->addSocialItem(LLUUID(), "TEST", false); + + // stop updating + mFbcTestListUpdater->setActive(false); } void LLPanelPeople::buttonSetVisible(std::string btn_name, BOOL visible) diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index dadd273603..a00b5be516 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -34,6 +34,7 @@ #include "llvoiceclient.h" class LLAvatarList; +class LLAvatarListSocial; class LLAvatarName; class LLFilterEditor; class LLGroupList; @@ -149,6 +150,7 @@ private: LLAvatarList* mNearbyList; LLAvatarList* mRecentList; LLGroupList* mGroupList; + LLAvatarListSocial* mFacebookFriends; LLNetMap* mMiniMap; LLTextBox* mFbcTestText; diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index cbb6aff4ea..f3334fd767 100644 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -585,14 +585,36 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M name="fbctest_panel" top="0" width="313"> - + + height="172" + min_height="150" + name="tab_facebook" + title="Facebook Friends"> + + + Date: Mon, 1 Apr 2013 23:48:51 -0700 Subject: removing the facebook test label which appends friends names. Now using the avatar list widgit. --- indra/newview/llpanelpeople.cpp | 15 +++------------ indra/newview/llpanelpeople.h | 2 -- 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 05dcdd97fa..c7e10d67db 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -545,7 +545,6 @@ LLPanelPeople::LLPanelPeople() mNearbyList(NULL), mRecentList(NULL), mGroupList(NULL), - mFbcTestText(NULL), mNearbyGearButton(NULL), mFriendsGearButton(NULL), mGroupsGearButton(NULL), @@ -648,7 +647,6 @@ BOOL LLPanelPeople::postBuild() mOnlineFriendList->setContextMenu(&LLPanelPeopleMenus::gNearbyMenu); LLPanel * social_tab = getChild(FBCTEST_TAB_NAME); - social_tab->setVisibleCallback(boost::bind(&Updater::setActive, mFbcTestListUpdater, _2)); mFacebookFriends = social_tab->getChild("facebook_friends"); setSortOrder(mRecentList, (ESortOrder)gSavedSettings.getU32("RecentPeopleSortOrder"), false); @@ -885,9 +883,6 @@ void LLPanelPeople::updateRecentList() void LLPanelPeople::updateFbcTestList() { - if (!mFbcTestText) - return; - if (mFbcTestBrowserHandle.get()) { // get the browser data (from the title bar, of course!) @@ -899,15 +894,13 @@ void LLPanelPeople::updateFbcTestList() // success! :) if (title[1] == ')') { - mFbcTestText->setText(std::string("okay, now we can get the list of friends!")); - // get the friends getFacebookFriends(); } // failure :( else if (title[1] == '(') { - mFbcTestText->setText(std::string("hmm, the authentication failed somehow")); + llinfos << "authentication failed" << llendl; } // close the browser window @@ -1678,11 +1671,9 @@ void LLPanelPeople::showFacebookFriends(const LLSD& friends) std::string name = (*i)["name"].asString(); std::string id = (*i)["id"].asString(); - text += "\n" + name + " (" + id + ")"; + text = name + " (" + id + ")"; + mFacebookFriends->addSocialItem(LLUUID(NULL), text, false); } - - // display the facebook friend data on the test text box - mFbcTestText->setText(text); } class FacebookLoginResponder : public LLHTTPClient::Responder diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index dab5d74f77..45ed7e1039 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -155,8 +155,6 @@ private: LLGroupList* mGroupList; LLAvatarListSocial* mFacebookFriends; LLNetMap* mMiniMap; - - LLTextBox* mFbcTestText; LLHandle mGroupPlusMenuHandle; LLHandle mNearbyViewSortMenuHandle; -- cgit v1.2.3 From 37b57559538aede47d46274208a6974d93caad1c Mon Sep 17 00:00:00 2001 From: Cho Date: Tue, 2 Apr 2013 21:07:46 +0100 Subject: updated to work with new /get-friends/ response format --- indra/newview/llavatarlist.cpp | 10 ++++++---- indra/newview/llpanelpeople.cpp | 34 +++++++++++++++++++++------------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp index 37de2d5793..a407515621 100644 --- a/indra/newview/llavatarlist.cpp +++ b/indra/newview/llavatarlist.cpp @@ -626,7 +626,7 @@ void LLAvalineListItem::setName(const std::string& name) } /************************************************************************/ -/* class LLAvatarListSocial */ +/* class LLAvatarListSocial */ /************************************************************************/ static LLDefaultChildRegistry::Register s("avatar_list_social"); @@ -638,10 +638,12 @@ LLAvatarListSocial::LLAvatarListSocial(const Params& p) : LLAvatarList(p) void LLAvatarListSocial::addSocialItem(const LLUUID& id, const std::string& name, BOOL is_online, EAddPosition pos) { + LLAvatarName avatar_name; + bool has_avatar_name = id.notNull() && LLAvatarNameCache::get(id, &avatar_name); + LLAvatarListItem* item = new LLAvatarListItem(); - // This sets the name as a side effect - item->setAvatarId(id, mSessionID, mIgnoreOnlineStatus, false); - item->setAvatarName(name); + item->setAvatarId(id, mSessionID, mIgnoreOnlineStatus, false); // this sets the name as a side effect + item->setAvatarName(has_avatar_name ? avatar_name.mDisplayName : name); item->setOnline(mIgnoreOnlineStatus ? true : is_online); item->showLastInteractionTime(mShowLastInteractionTime); diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index c7e10d67db..183714b436 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1665,14 +1665,16 @@ void LLPanelPeople::openFacebookWeb(LLFloaterWebContent::Params& p) void LLPanelPeople::showFacebookFriends(const LLSD& friends) { - std::string text = "Facebook Friends"; + mFacebookFriends->clear(); + for (LLSD::array_const_iterator i = friends.beginArray(); i != friends.endArray(); ++i) { - std::string name = (*i)["name"].asString(); - std::string id = (*i)["id"].asString(); + const LLSD& fb_friend = *i; - text = name + " (" + id + ")"; - mFacebookFriends->addSocialItem(LLUUID(NULL), text, false); + std::string name = fb_friend["name"].asString(); + LLUUID agent_id = fb_friend.has("agent_id") ? fb_friend["agent_id"].asUUID() : LLUUID(NULL); + + mFacebookFriends->addSocialItem(agent_id, name, false); } } @@ -1692,20 +1694,19 @@ public: { llinfos << content << llendl; + // use the token to pull down graph data bool has_token = content["has_access_token"].asBoolean(); - - //use the token to pull down graph data - if(has_token) + if (has_token) { mPanelPeople->getFacebookFriends(); } - //request user to login + // request user to login else { - LLFloaterWebContent::Params p; - p.url("https://www.facebook.com/dialog/oauth?client_id=565771023434202&redirect_uri=" + FBC_SERVICES_URL + "/authenticate/" + gAgentID.asString()); + LLFloaterWebContent::Params p; + p.url("https://www.facebook.com/dialog/oauth?client_id=565771023434202&redirect_uri=" + FBC_SERVICES_URL + "/authenticate/" + gAgentID.asString()); mPanelPeople->openFacebookWeb(p); -} + } } else { @@ -1731,7 +1732,14 @@ public: llinfos << content << llendl; // display the friend data - mPanelPeople->showFacebookFriends(content["friends"]); + if (content.has("friends")) + { + mPanelPeople->showFacebookFriends(content["friends"]); + } + else if (content.has("error")) + { + llinfos << "failed to get facebook friends. reason: " << content["error"] << llendl; + } } else { -- cgit v1.2.3 From 0c55af934d19145993c6ec0756397fa75f9a9842 Mon Sep 17 00:00:00 2001 From: Cho Date: Tue, 2 Apr 2013 21:46:00 +0100 Subject: added display of FB name to SL user in FBCTEST list --- indra/newview/llavatarlist.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp index a407515621..fb6d042807 100644 --- a/indra/newview/llavatarlist.cpp +++ b/indra/newview/llavatarlist.cpp @@ -643,7 +643,7 @@ void LLAvatarListSocial::addSocialItem(const LLUUID& id, const std::string& name LLAvatarListItem* item = new LLAvatarListItem(); item->setAvatarId(id, mSessionID, mIgnoreOnlineStatus, false); // this sets the name as a side effect - item->setAvatarName(has_avatar_name ? avatar_name.mDisplayName : name); + item->setAvatarName(has_avatar_name ? avatar_name.mDisplayName + " (" + name + ")" : name); item->setOnline(mIgnoreOnlineStatus ? true : is_online); item->showLastInteractionTime(mShowLastInteractionTime); -- cgit v1.2.3 From caad92499e2a2f8419e4c217c74f54cf4f2be54c Mon Sep 17 00:00:00 2001 From: Cho Date: Wed, 3 Apr 2013 01:10:19 +0100 Subject: updated to account for new routes in FBC Services --- indra/newview/llpanelpeople.cpp | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 183714b436..d2e764df13 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1678,33 +1678,31 @@ void LLPanelPeople::showFacebookFriends(const LLSD& friends) } } -class FacebookLoginResponder : public LLHTTPClient::Responder +class FacebookConnectedResponder : public LLHTTPClient::Responder { public: LLPanelPeople * mPanelPeople; + bool mShowLoginIfNotConnected; - FacebookLoginResponder(LLPanelPeople * panel_people) : mPanelPeople(panel_people) {} + FacebookConnectedResponder(LLPanelPeople * panel_people, bool show_login_if_not_connected) : mPanelPeople(panel_people), mShowLoginIfNotConnected(show_login_if_not_connected) {} /*virtual*/ void completed(U32 status, const std::string& reason, const LLSD& content) { - // in case of invalid characters, the avatar picker returns a 400 - // just set it to process so it displays 'not found' - if (isGoodStatus(status) || status == 400) + if (isGoodStatus(status)) { llinfos << content << llendl; - // use the token to pull down graph data - bool has_token = content["has_access_token"].asBoolean(); - if (has_token) + // pull down graph data if already contected + if (content["connected"]) { mPanelPeople->getFacebookFriends(); } - // request user to login - else + // show the facebook login page + else if (mShowLoginIfNotConnected) { LLFloaterWebContent::Params p; - p.url("https://www.facebook.com/dialog/oauth?client_id=565771023434202&redirect_uri=" + FBC_SERVICES_URL + "/authenticate/" + gAgentID.asString()); + p.url("https://www.facebook.com/dialog/oauth?client_id=565771023434202&redirect_uri=" + FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc/connect"); mPanelPeople->openFacebookWeb(p); } } @@ -1725,9 +1723,7 @@ public: /*virtual*/ void completed(U32 status, const std::string& reason, const LLSD& content) { - // in case of invalid characters, the avatar picker returns a 400 - // just set it to process so it displays 'not found' - if (isGoodStatus(status) || status == 400) + if (isGoodStatus(status)) { llinfos << content << llendl; @@ -1738,7 +1734,7 @@ public: } else if (content.has("error")) { - llinfos << "failed to get facebook friends. reason: " << content["error"] << llendl; + llinfos << "failed to get facebook friends. reason: " << content["error"]["message"] << llendl; } } else @@ -1750,25 +1746,25 @@ public: void LLPanelPeople::getFacebookFriends() { - LLHTTPClient::get(FBC_SERVICES_URL + "/get-friends/" + gAgentID.asString(), new FacebookFriendsResponder(this)); + LLHTTPClient::get(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc/friends", new FacebookFriendsResponder(this)); } void LLPanelPeople::onLoginFbcButtonClicked() { - LLHTTPClient::get(FBC_SERVICES_URL + "/has-access-token/" + gAgentID.asString(), new FacebookLoginResponder(this)); + LLHTTPClient::get(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc/connected", new FacebookConnectedResponder(this, true)); } void LLPanelPeople::onFacebookAppRequestClicked() { LLFloaterWebContent::Params p; - p.url("http://www.facebook.com/dialog/apprequests?app_id=565771023434202&message=Test&redirect_uri=" + FBC_SERVICES_URL); + p.url("http://www.facebook.com/dialog/apprequests?app_id=565771023434202&message=Test&redirect_uri=https://secondlife.com/"); openFacebookWeb(p); } void LLPanelPeople::onFacebookAppSendClicked() { LLFloaterWebContent::Params p; - p.url("https://www.facebook.com/dialog/send?app_id=565771023434202&name=Join Second Life!&link=https://join.secondlife.com&redirect_uri=" + FBC_SERVICES_URL); + p.url("https://www.facebook.com/dialog/send?app_id=565771023434202&name=Join Second Life!&link=https://join.secondlife.com&redirect_uri=https://secondlife.com/"); openFacebookWeb(p); } // EOF -- cgit v1.2.3 From 21e8d2ca30842422eb5eef469c9e1bb91c0c847b Mon Sep 17 00:00:00 2001 From: Cho Date: Wed, 3 Apr 2013 02:11:11 +0100 Subject: updated to use POST for connect and disconnect, instead of Webkit --- indra/newview/llpanelpeople.cpp | 132 ++++++++++++++++++++++++++++++++-------- indra/newview/llpanelpeople.h | 7 ++- 2 files changed, 112 insertions(+), 27 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index d2e764df13..ebf7002fc1 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -536,6 +536,7 @@ private: LLPanelPeople::LLPanelPeople() : LLPanel(), + mConnectedToFbc(false), mFilterSubString(LLStringUtil::null), mFilterSubStringOrig(LLStringUtil::null), mFilterEditor(NULL), @@ -885,23 +886,17 @@ void LLPanelPeople::updateFbcTestList() { if (mFbcTestBrowserHandle.get()) { - // get the browser data (from the title bar, of course!) - std::string title = mFbcTestBrowserHandle.get()->getTitle(); + // get the current browser url (from the title bar, of course!) + std::string url = mFbcTestBrowserHandle.get()->getTitle(); - // if the data is ready (if it says the magic word) - if (title.length() >= 2 && title[0] == ':') + // if the browser has redirected from facebook + if (url.substr(0, FBC_SERVICES_URL.length()) == FBC_SERVICES_URL) { - // success! :) - if (title[1] == ')') - { - // get the friends - getFacebookFriends(); - } - // failure :( - else if (title[1] == '(') - { - llinfos << "authentication failed" << llendl; - } + // get the auth code + std::string auth_code = url.substr(FBC_SERVICES_URL.length() + 6); + + // finish authenticating on the server + connectToFacebook(auth_code); // close the browser window mFbcTestBrowserHandle.get()->die(); @@ -1669,15 +1664,82 @@ void LLPanelPeople::showFacebookFriends(const LLSD& friends) for (LLSD::array_const_iterator i = friends.beginArray(); i != friends.endArray(); ++i) { - const LLSD& fb_friend = *i; - - std::string name = fb_friend["name"].asString(); - LLUUID agent_id = fb_friend.has("agent_id") ? fb_friend["agent_id"].asUUID() : LLUUID(NULL); + std::string name = (*i)["name"].asString(); + LLUUID agent_id = (*i).has("agent_id") ? (*i)["agent_id"].asUUID() : LLUUID(NULL); mFacebookFriends->addSocialItem(agent_id, name, false); } } +void LLPanelPeople::hideFacebookFriends() +{ + mFacebookFriends->clear(); +} + +class FacebookConnectResponder : public LLHTTPClient::Responder +{ +public: + + LLPanelPeople * mPanelPeople; + + FacebookConnectResponder(LLPanelPeople * panel_people) : mPanelPeople(panel_people) {} + + /*virtual*/ void completed(U32 status, const std::string& reason, const LLSD& content) + { + if (isGoodStatus(status)) + { + llinfos << content << llendl; + + // grab some graph data now that we are connected + if (content["success"]) + { + mPanelPeople->mConnectedToFbc = true; + mPanelPeople->loadFacebookFriends(); + } + else if (content.has("error")) + { + llinfos << "failed to connect. reason: " << content["error"]["message"] << llendl; + } + } + else + { + llinfos << "failed to get response. reason: " << reason << " status: " << status << llendl; + } + } +}; + +class FacebookDisconnectResponder : public LLHTTPClient::Responder +{ +public: + + LLPanelPeople * mPanelPeople; + + FacebookDisconnectResponder(LLPanelPeople * panel_people) : mPanelPeople(panel_people) {} + + /*virtual*/ void completed(U32 status, const std::string& reason, const LLSD& content) + { + if (isGoodStatus(status)) + { + llinfos << content << llendl; + + // hide all the facebook stuff + if (content["success"]) + { + mPanelPeople->mConnectedToFbc = false; + mPanelPeople->hideFacebookFriends(); + } + else if (content.has("error")) + { + llinfos << "failed to disconnect. reason: " << content["error"]["message"] << llendl; + } + } + else + { + llinfos << "failed to get response. reason: " << reason << " status: " << status << llendl; + } + } +}; + class FacebookConnectedResponder : public LLHTTPClient::Responder { public: @@ -1693,16 +1755,17 @@ public: { llinfos << content << llendl; - // pull down graph data if already contected + // grab some graph data if already connected if (content["connected"]) { - mPanelPeople->getFacebookFriends(); + mPanelPeople->mConnectedToFbc = true; + mPanelPeople->loadFacebookFriends(); } - // show the facebook login page + // show the facebook login page if not connected yet else if (mShowLoginIfNotConnected) { LLFloaterWebContent::Params p; - p.url("https://www.facebook.com/dialog/oauth?client_id=565771023434202&redirect_uri=" + FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc/connect"); + p.url("https://www.facebook.com/dialog/oauth?client_id=565771023434202&redirect_uri=" + FBC_SERVICES_URL); mPanelPeople->openFacebookWeb(p); } } @@ -1727,7 +1790,7 @@ public: { llinfos << content << llendl; - // display the friend data + // display the list of friends if (content.has("friends")) { mPanelPeople->showFacebookFriends(content["friends"]); @@ -1744,14 +1807,31 @@ public: } }; -void LLPanelPeople::getFacebookFriends() +void LLPanelPeople::loadFacebookFriends() { LLHTTPClient::get(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc/friends", new FacebookFriendsResponder(this)); } +void LLPanelPeople::connectToFacebook(const std::string& auth_code) +{ + LLHTTPClient::post(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc/connect/" + auth_code, LLSD(), new FacebookConnectResponder(this)); +} + +void LLPanelPeople::disconnectFromFacebook() +{ + LLHTTPClient::post(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc/disconnect", LLSD(), new FacebookDisconnectResponder(this)); +} + void LLPanelPeople::onLoginFbcButtonClicked() { - LLHTTPClient::get(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc/connected", new FacebookConnectedResponder(this, true)); + if (mConnectedToFbc) + { + disconnectFromFacebook(); + } + else + { + LLHTTPClient::get(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc/connected", new FacebookConnectedResponder(this, true)); + } } void LLPanelPeople::onFacebookAppRequestClicked() diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index 45ed7e1039..914899ca6d 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -59,7 +59,12 @@ public: void openFacebookWeb(LLFloaterWebContent::Params& p); void showFacebookFriends(const LLSD& friends); - void getFacebookFriends(); + void hideFacebookFriends(); + void loadFacebookFriends(); + void connectToFacebook(const std::string& auth_code); + void disconnectFromFacebook(); + + bool mConnectedToFbc; // internals class Updater; -- cgit v1.2.3 From 207db356c21246ca9eb1b255b71623b0a5a4d470 Mon Sep 17 00:00:00 2001 From: Cho Date: Wed, 3 Apr 2013 03:06:24 +0100 Subject: got it working --- indra/newview/llpanelpeople.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index ebf7002fc1..4b4dd27bf2 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -893,7 +893,10 @@ void LLPanelPeople::updateFbcTestList() if (url.substr(0, FBC_SERVICES_URL.length()) == FBC_SERVICES_URL) { // get the auth code - std::string auth_code = url.substr(FBC_SERVICES_URL.length() + 6); + std::string auth_code = url.substr(FBC_SERVICES_URL.length() + 7); + auth_code = auth_code.substr(0, auth_code.length() - 4); + + llinfos << "extracted code " << auth_code << " from url " << url << llendl; // finish authenticating on the server connectToFacebook(auth_code); @@ -1765,7 +1768,7 @@ public: else if (mShowLoginIfNotConnected) { LLFloaterWebContent::Params p; - p.url("https://www.facebook.com/dialog/oauth?client_id=565771023434202&redirect_uri=" + FBC_SERVICES_URL); + p.url("https://www.facebook.com/dialog/oauth?client_id=565771023434202&redirect_uri=" + FBC_SERVICES_URL + "/"); mPanelPeople->openFacebookWeb(p); } } @@ -1814,6 +1817,7 @@ void LLPanelPeople::loadFacebookFriends() void LLPanelPeople::connectToFacebook(const std::string& auth_code) { + llinfos << "attempting to connect to facebook with code " << auth_code << llendl; LLHTTPClient::post(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc/connect/" + auth_code, LLSD(), new FacebookConnectResponder(this)); } @@ -1837,14 +1841,14 @@ void LLPanelPeople::onLoginFbcButtonClicked() void LLPanelPeople::onFacebookAppRequestClicked() { LLFloaterWebContent::Params p; - p.url("http://www.facebook.com/dialog/apprequests?app_id=565771023434202&message=Test&redirect_uri=https://secondlife.com/"); + p.url("http://www.facebook.com/dialog/apprequests?app_id=565771023434202&message=Test&redirect_uri=" + FBC_SERVICES_URL); openFacebookWeb(p); } void LLPanelPeople::onFacebookAppSendClicked() { LLFloaterWebContent::Params p; - p.url("https://www.facebook.com/dialog/send?app_id=565771023434202&name=Join Second Life!&link=https://join.secondlife.com&redirect_uri=https://secondlife.com/"); + p.url("https://www.facebook.com/dialog/send?app_id=565771023434202&name=Join Second Life!&link=https://join.secondlife.com&redirect_uri=" + FBC_SERVICES_URL); openFacebookWeb(p); } // EOF -- cgit v1.2.3 From ae4dcb2d1cade521f4cb116e3b7aa79475c38cc6 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Tue, 2 Apr 2013 19:34:44 -0700 Subject: created LLSocialList and LLSocialListItem and linked them up to the facebook tab. --- indra/newview/CMakeLists.txt | 2 + indra/newview/llpanelpeople.cpp | 5 +- indra/newview/llpanelpeople.h | 3 +- indra/newview/llsociallist.cpp | 130 +++++++++++++++++++++ indra/newview/llsociallist.h | 98 ++++++++++++++++ .../newview/skins/default/xui/en/panel_people.xml | 2 +- 6 files changed, 236 insertions(+), 4 deletions(-) create mode 100644 indra/newview/llsociallist.cpp create mode 100644 indra/newview/llsociallist.h diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index dff2c04fbc..b303ff3d18 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -483,6 +483,7 @@ set(viewer_SOURCE_FILES llsidetraypanelcontainer.cpp llsky.cpp llslurl.cpp + llsociallist.cpp llspatialpartition.cpp llspeakers.cpp llspeakingindicatormanager.cpp @@ -1050,6 +1051,7 @@ set(viewer_HEADER_FILES llsidetraypanelcontainer.h llsky.h llslurl.h + llsociallist.h llspatialpartition.h llspeakers.h llspeakingindicatormanager.h diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 4b4dd27bf2..cbc5eba65f 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -63,6 +63,7 @@ #include "llviewermenu.h" // for gMenuHolder #include "llvoiceclient.h" #include "llworld.h" +#include "llsociallist.h" #include "llspeakers.h" #include "llfloaterwebcontent.h" @@ -648,7 +649,7 @@ BOOL LLPanelPeople::postBuild() mOnlineFriendList->setContextMenu(&LLPanelPeopleMenus::gNearbyMenu); LLPanel * social_tab = getChild(FBCTEST_TAB_NAME); - mFacebookFriends = social_tab->getChild("facebook_friends"); + mFacebookFriends = social_tab->getChild("facebook_friends"); setSortOrder(mRecentList, (ESortOrder)gSavedSettings.getU32("RecentPeopleSortOrder"), false); setSortOrder(mAllFriendList, (ESortOrder)gSavedSettings.getU32("FriendsSortOrder"), false); @@ -1670,7 +1671,7 @@ void LLPanelPeople::showFacebookFriends(const LLSD& friends) std::string name = (*i)["name"].asString(); LLUUID agent_id = (*i).has("agent_id") ? (*i)["agent_id"].asUUID() : LLUUID(NULL); - mFacebookFriends->addSocialItem(agent_id, name, false); + mFacebookFriends->addNewItem(agent_id, name, false); } } diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index 914899ca6d..d61eb80f57 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -38,6 +38,7 @@ class LLAvatarListSocial; class LLAvatarName; class LLFilterEditor; class LLGroupList; +class LLSocialList; class LLMenuButton; class LLTabContainer; @@ -158,7 +159,7 @@ private: LLAvatarList* mNearbyList; LLAvatarList* mRecentList; LLGroupList* mGroupList; - LLAvatarListSocial* mFacebookFriends; + LLSocialList* mFacebookFriends; LLNetMap* mMiniMap; LLHandle mGroupPlusMenuHandle; diff --git a/indra/newview/llsociallist.cpp b/indra/newview/llsociallist.cpp new file mode 100644 index 0000000000..3d1d256149 --- /dev/null +++ b/indra/newview/llsociallist.cpp @@ -0,0 +1,130 @@ +sDestroyImmediate +/** +* @file llsociallist.cpp +* @brief Implementation of llsociallist +* @author Gilbert@lindenlab.com +* +* $LicenseInfo:firstyear=2013&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2013, Linden Research, Inc. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; +* version 2.1 of the License only. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +* +* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA +* $/LicenseInfo$ +*/ + + +#include "llviewerprecompiledheaders.h" + +#include "llsociallist.h" + +#include "llavatariconctrl.h" +#include "lloutputmonitorctrl.h" +#include "lltextutil.h" + +static LLDefaultChildRegistry::Register r("social_list"); + +LLSocialList::LLSocialList(const Params&p) : LLFlatListViewEx(p) +{ + +} + +LLSocialList::~LLSocialList() +{ + +} + +void LLSocialList::draw() +{ + LLFlatListView::draw(); +} + +void LLSocialList::refresh() +{ + +} + +void LLSocialList::addNewItem(const LLUUID& id, const std::string& name, BOOL is_online, EAddPosition pos) +{ + LLSocialListItem * item = new LLSocialListItem(); + item->setName(name, mNameFilter); + addItem(item, id, pos); +} + +LLSocialListItem::LLSocialListItem() +{ + buildFromFile("panel_avatar_list_item.xml"); +} + +LLSocialListItem::~LLSocialListItem() +{ + +} + +BOOL LLSocialListItem::postBuild() +{ + mIcon = getChild("avatar_icon"); + mLabelTextBox = getChild("avatar_name"); + + mLastInteractionTime = getChild("last_interaction"); + mIconPermissionOnline = getChild("permission_online_icon"); + mIconPermissionMap = getChild("permission_map_icon"); + mIconPermissionEditMine = getChild("permission_edit_mine_icon"); + mIconPermissionEditTheirs = getChild("permission_edit_theirs_icon"); + mSpeakingIndicator = getChild("speaking_indicator"); + mInfoBtn = getChild("info_btn"); + mProfileBtn = getChild("profile_btn"); + + mLastInteractionTime->setVisible(false); + mIconPermissionOnline->setVisible(false); + mIconPermissionMap->setVisible(false); + mIconPermissionEditMine->setVisible(false); + mIconPermissionEditTheirs->setVisible(false); + mSpeakingIndicator->setVisible(false); + mInfoBtn->setVisible(false); + mProfileBtn->setVisible(false); + + return TRUE; +} + +void LLSocialListItem::setName(const std::string& name, const std::string& highlight) +{ + mLabel = name; + LLTextUtil::textboxSetHighlightedVal(mLabelTextBox, mLabelTextBoxStyle, name, highlight); +} + +void LLSocialListItem::setValue(const LLSD& value) +{ + getChildView("selected_icon")->setVisible( value["selected"]); +} + +void LLSocialListItem::onMouseEnter(S32 x, S32 y, MASK mask) +{ + getChildView("hovered_icon")->setVisible( true); + mInfoBtn->setVisible(true); + mProfileBtn->setVisible(true); + + LLPanel::onMouseEnter(x, y, mask); +} + +void LLSocialListItem::onMouseLeave(S32 x, S32 y, MASK mask) +{ + getChildView("hovered_icon")->setVisible( false); + mInfoBtn->setVisible(false); + mProfileBtn->setVisible(false); + + LLPanel::onMouseLeave(x, y, mask); +} diff --git a/indra/newview/llsociallist.h b/indra/newview/llsociallist.h new file mode 100644 index 0000000000..884d6ebd7e --- /dev/null +++ b/indra/newview/llsociallist.h @@ -0,0 +1,98 @@ +/** +* @file llsociallist.h +* @brief Header file for llsociallist +* @author Gilbert@lindenlab.com +* +* $LicenseInfo:firstyear=2013&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2013, Linden Research, Inc. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; +* version 2.1 of the License only. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +* +* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA +* $/LicenseInfo$ +*/ +#ifndef LL_LLSOCIALLIST_H +#define LL_LLSOCIALLIST_H + +#include "llflatlistview.h" +#include "llstyle.h" + + +/** + * Generic list of avatars. + * + * Updates itself when it's dirty, using optional name filter. + * To initiate update, modify the UUID list and call setDirty(). + * + * @see getIDs() + * @see setDirty() + * @see setNameFilter() + */ + +class LLAvatarIconCtrl; +class LLIconCtrl; +class LLOutputMonitorCtrl; + +class LLSocialList : public LLFlatListViewEx +{ +public: + + struct Params : public LLInitParam::Block + { + }; + + LLSocialList(const Params&p); + virtual ~LLSocialList(); + + virtual void draw(); + void refresh(); + void addNewItem(const LLUUID& id, const std::string& name, BOOL is_online, EAddPosition pos = ADD_BOTTOM); + + + + std::string mNameFilter; +}; + +class LLSocialListItem : public LLPanel +{ + public: + LLSocialListItem(); + ~LLSocialListItem(); + + BOOL postBuild(); + void setName(const std::string& name, const std::string& highlight = LLStringUtil::null); + void setValue(const LLSD& value); + void onMouseEnter(S32 x, S32 y, MASK mask); + void onMouseLeave(S32 x, S32 y, MASK mask); + + LLTextBox * mLabelTextBox; + std::string mLabel; + LLStyle::Params mLabelTextBoxStyle; + + + LLAvatarIconCtrl * mIcon; + LLTextBox * mLastInteractionTime; + LLIconCtrl * mIconPermissionOnline; + LLIconCtrl * mIconPermissionMap; + LLIconCtrl * mIconPermissionEditMine; + LLIconCtrl * mIconPermissionEditTheirs; + LLOutputMonitorCtrl * mSpeakingIndicator; + LLButton * mInfoBtn; + LLButton * mProfileBtn; +}; + + +#endif // LL_LLSOCIALLIST_H diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index f3334fd767..81946ff7f9 100644 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -602,7 +602,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M min_height="150" name="tab_facebook" title="Facebook Friends"> - Date: Wed, 3 Apr 2013 03:55:53 +0100 Subject: got connectToFacebook working with code and redirect_uri passed as LLSD body in POST request --- indra/newview/llpanelpeople.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index cbc5eba65f..f55459afec 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -80,6 +80,7 @@ static const std::string FBCTEST_TAB_NAME = "fbctest_panel"; static const std::string COLLAPSED_BY_USER = "collapsed_by_user"; static const std::string FBC_SERVICES_URL = "https://pdp15.lindenlab.com"; +static const std::string FBC_SERVICES_REDIRECT_URI = "https://pdp15.lindenlab.com/"; /** Comparator for comparing avatar items by last interaction date */ class LLAvatarItemRecentComparator : public LLAvatarItemComparator @@ -1769,7 +1770,7 @@ public: else if (mShowLoginIfNotConnected) { LLFloaterWebContent::Params p; - p.url("https://www.facebook.com/dialog/oauth?client_id=565771023434202&redirect_uri=" + FBC_SERVICES_URL + "/"); + p.url("https://www.facebook.com/dialog/oauth?client_id=565771023434202&redirect_uri=" + FBC_SERVICES_REDIRECT_URI); mPanelPeople->openFacebookWeb(p); } } @@ -1818,8 +1819,10 @@ void LLPanelPeople::loadFacebookFriends() void LLPanelPeople::connectToFacebook(const std::string& auth_code) { - llinfos << "attempting to connect to facebook with code " << auth_code << llendl; - LLHTTPClient::post(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc/connect/" + auth_code, LLSD(), new FacebookConnectResponder(this)); + LLSD body; + body["code"] = auth_code; + body["redirect_uri"] = FBC_SERVICES_REDIRECT_URI; + LLHTTPClient::post(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc/connect", body, new FacebookConnectResponder(this)); } void LLPanelPeople::disconnectFromFacebook() -- cgit v1.2.3 From 859f7b5484df50bb45e10c8d73517205328b6b9c Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Tue, 2 Apr 2013 20:10:44 -0700 Subject: adding support for showing avatar icon and avatar name + facebook name into LLSocialListItem. Also the info button and profile button should now work --- indra/newview/llsociallist.cpp | 27 ++++++++++++++++++++++++++- indra/newview/llsociallist.h | 4 ++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/indra/newview/llsociallist.cpp b/indra/newview/llsociallist.cpp index 3d1d256149..2402a7c4b8 100644 --- a/indra/newview/llsociallist.cpp +++ b/indra/newview/llsociallist.cpp @@ -31,7 +31,10 @@ sDestroyImmediate #include "llsociallist.h" +#include "llavataractions.h" +#include "llfloaterreg.h" #include "llavatariconctrl.h" +#include "llavatarnamecache.h" #include "lloutputmonitorctrl.h" #include "lltextutil.h" @@ -60,7 +63,16 @@ void LLSocialList::refresh() void LLSocialList::addNewItem(const LLUUID& id, const std::string& name, BOOL is_online, EAddPosition pos) { LLSocialListItem * item = new LLSocialListItem(); - item->setName(name, mNameFilter); + LLAvatarName avatar_name; + bool has_avatar_name = id.notNull() && LLAvatarNameCache::get(id, &avatar_name); + + item->mAvatarId = id; + if(id.notNull()) + { + item->mIcon->setValue(id); + } + + item->setName(has_avatar_name ? avatar_name.mDisplayName + " (" + name + ")" : name, mNameFilter); addItem(item, id, pos); } @@ -97,6 +109,9 @@ BOOL LLSocialListItem::postBuild() mInfoBtn->setVisible(false); mProfileBtn->setVisible(false); + mInfoBtn->setClickedCallback(boost::bind(&LLSocialListItem::onInfoBtnClick, this)); + mProfileBtn->setClickedCallback(boost::bind(&LLSocialListItem::onProfileBtnClick, this)); + return TRUE; } @@ -128,3 +143,13 @@ void LLSocialListItem::onMouseLeave(S32 x, S32 y, MASK mask) LLPanel::onMouseLeave(x, y, mask); } + +void LLSocialListItem::onInfoBtnClick() +{ + LLFloaterReg::showInstance("inspect_avatar", LLSD().with("avatar_id", mAvatarId)); +} + +void LLSocialListItem::onProfileBtnClick() +{ + LLAvatarActions::showProfile(mAvatarId); +} diff --git a/indra/newview/llsociallist.h b/indra/newview/llsociallist.h index 884d6ebd7e..bc667fc400 100644 --- a/indra/newview/llsociallist.h +++ b/indra/newview/llsociallist.h @@ -77,6 +77,10 @@ class LLSocialListItem : public LLPanel void setValue(const LLSD& value); void onMouseEnter(S32 x, S32 y, MASK mask); void onMouseLeave(S32 x, S32 y, MASK mask); + void onInfoBtnClick(); + void onProfileBtnClick(); + + LLUUID mAvatarId; LLTextBox * mLabelTextBox; std::string mLabel; -- cgit v1.2.3 From 436bccf58be3e5f3dd5f990304b9aa0f8c9c66f4 Mon Sep 17 00:00:00 2001 From: Cho Date: Wed, 3 Apr 2013 04:11:43 +0100 Subject: made auth code extraction more robust --- indra/newview/llpanelpeople.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index f55459afec..8fc1d378db 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -892,12 +892,24 @@ void LLPanelPeople::updateFbcTestList() std::string url = mFbcTestBrowserHandle.get()->getTitle(); // if the browser has redirected from facebook - if (url.substr(0, FBC_SERVICES_URL.length()) == FBC_SERVICES_URL) + if (url.find(FBC_SERVICES_REDIRECT_URI) == 0) { - // get the auth code - std::string auth_code = url.substr(FBC_SERVICES_URL.length() + 7); - auth_code = auth_code.substr(0, auth_code.length() - 4); - + // find the auth code in the url + std::string begin_string = "code="; + std::string end_string = "#"; + size_t begin_index = begin_string.length() + url.find(begin_string, FBC_SERVICES_REDIRECT_URI.length()); + size_t end_index = url.find(end_string, begin_index); + + // extract the auth code from the url + std::string auth_code; + if (end_index != std::string::npos) + { + auth_code = url.substr(begin_index, end_index - begin_index); + } + else + { + auth_code = url.substr(begin_index); + } llinfos << "extracted code " << auth_code << " from url " << url << llendl; // finish authenticating on the server -- cgit v1.2.3 From 06d06454b25fd6b97d81076ce93b573fc53c36f9 Mon Sep 17 00:00:00 2001 From: Cho Date: Wed, 3 Apr 2013 04:40:11 +0100 Subject: made Facebook Friends list auto-populate --- indra/newview/llpanelpeople.cpp | 23 ++++++++++++++++++++++- indra/newview/llpanelpeople.h | 2 ++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 8fc1d378db..6a83e84da1 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -539,6 +539,7 @@ private: LLPanelPeople::LLPanelPeople() : LLPanel(), mConnectedToFbc(false), + mTryToConnectToFbc(true), mFilterSubString(LLStringUtil::null), mFilterSubStringOrig(LLStringUtil::null), mFilterEditor(NULL), @@ -633,7 +634,7 @@ BOOL LLPanelPeople::postBuild() mMiniMap = (LLNetMap*)getChildView("Net Map",true); mMiniMap->setToolTipMsg(gSavedSettings.getBOOL("DoubleClickTeleport") ? getString("AltMiniMapToolTipMsg") : getString("MiniMapToolTipMsg")); - + mRecentList = getChild(RECENT_TAB_NAME)->getChild("avatar_list"); mRecentList->setNoItemsCommentText(getString("no_recent_people")); mRecentList->setNoItemsMsg(getString("no_recent_people")); @@ -651,6 +652,7 @@ BOOL LLPanelPeople::postBuild() LLPanel * social_tab = getChild(FBCTEST_TAB_NAME); mFacebookFriends = social_tab->getChild("facebook_friends"); + social_tab->setVisibleCallback(boost::bind(&Updater::setActive, mFbcTestListUpdater, _2)); setSortOrder(mRecentList, (ESortOrder)gSavedSettings.getU32("RecentPeopleSortOrder"), false); setSortOrder(mAllFriendList, (ESortOrder)gSavedSettings.getU32("FriendsSortOrder"), false); @@ -922,6 +924,17 @@ void LLPanelPeople::updateFbcTestList() mFbcTestListUpdater->setActive(false); } } + else if (mTryToConnectToFbc) + { + // try to reconnect to facebook! + tryToReconnectToFacebook(); + + // don't try again + mTryToConnectToFbc = false; + + // stop updating + mFbcTestListUpdater->setActive(false); + } } void LLPanelPeople::buttonSetVisible(std::string btn_name, BOOL visible) @@ -1829,6 +1842,14 @@ void LLPanelPeople::loadFacebookFriends() LLHTTPClient::get(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc/friends", new FacebookFriendsResponder(this)); } +void LLPanelPeople::tryToReconnectToFacebook() +{ + if (!mConnectedToFbc) + { + LLHTTPClient::get(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc/connected", new FacebookConnectedResponder(this, false)); + } +} + void LLPanelPeople::connectToFacebook(const std::string& auth_code) { LLSD body; diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index d61eb80f57..2ac83c3677 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -62,10 +62,12 @@ public: void showFacebookFriends(const LLSD& friends); void hideFacebookFriends(); void loadFacebookFriends(); + void tryToReconnectToFacebook(); void connectToFacebook(const std::string& auth_code); void disconnectFromFacebook(); bool mConnectedToFbc; + bool mTryToConnectToFbc; // internals class Updater; -- cgit v1.2.3 From a8e89fbb46730ca51241f4f0b51d06210e2cf347 Mon Sep 17 00:00:00 2001 From: Cho Date: Wed, 3 Apr 2013 23:55:25 +0100 Subject: changed FBC Services redirect_uri for testing --- indra/newview/llpanelpeople.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 6a83e84da1..93e8411eb7 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -80,7 +80,7 @@ static const std::string FBCTEST_TAB_NAME = "fbctest_panel"; static const std::string COLLAPSED_BY_USER = "collapsed_by_user"; static const std::string FBC_SERVICES_URL = "https://pdp15.lindenlab.com"; -static const std::string FBC_SERVICES_REDIRECT_URI = "https://pdp15.lindenlab.com/"; +static const std::string FBC_SERVICES_REDIRECT_URI = "http://axcho.com/secondlife/"; /** Comparator for comparing avatar items by last interaction date */ class LLAvatarItemRecentComparator : public LLAvatarItemComparator -- cgit v1.2.3 From 819bbce34a2f265287df1e4e9adde90b5a70c8b6 Mon Sep 17 00:00:00 2001 From: Cho Date: Thu, 4 Apr 2013 00:04:52 +0100 Subject: made FB+SL friends show up as (setAvatarId(id, mSessionID, mIgnoreOnlineStatus, false); // this sets the name as a side effect - item->setAvatarName(has_avatar_name ? avatar_name.mDisplayName + " (" + name + ")" : name); + item->setAvatarName(has_avatar_name ? name + " (" + avatar_name.mDisplayName + ")" : name); item->setOnline(mIgnoreOnlineStatus ? true : is_online); item->showLastInteractionTime(mShowLastInteractionTime); diff --git a/indra/newview/llsociallist.cpp b/indra/newview/llsociallist.cpp index 2402a7c4b8..6cf0851fd7 100644 --- a/indra/newview/llsociallist.cpp +++ b/indra/newview/llsociallist.cpp @@ -72,7 +72,7 @@ void LLSocialList::addNewItem(const LLUUID& id, const std::string& name, BOOL is item->mIcon->setValue(id); } - item->setName(has_avatar_name ? avatar_name.mDisplayName + " (" + name + ")" : name, mNameFilter); + item->setName(has_avatar_name ? name + " (" + avatar_name.mDisplayName + ")" : name, mNameFilter); addItem(item, id, pos); } -- cgit v1.2.3 From 10dba6b20148868ab630e53ac9aec67d2ed01cc1 Mon Sep 17 00:00:00 2001 From: Cho Date: Fri, 5 Apr 2013 03:15:35 +0100 Subject: changed routes according to Kelly's and Enkidu's advice --- indra/newview/llpanelpeople.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 2ca22a1382..4bcd146ad2 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1741,7 +1741,7 @@ void LLPanelPeople::tryToReconnectToFacebook() { if (!mConnectedToFbc) { - LLHTTPClient::get(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc/connected", new FacebookConnectedResponder(this, false)); + LLHTTPClient::get(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc", new FacebookConnectedResponder(this, false)); } } @@ -1750,12 +1750,12 @@ void LLPanelPeople::connectToFacebook(const std::string& auth_code) LLSD body; body["code"] = auth_code; body["redirect_uri"] = FBC_SERVICES_REDIRECT_URI; - LLHTTPClient::post(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc/connect", body, new FacebookConnectResponder(this)); + LLHTTPClient::put(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc", body, new FacebookConnectResponder(this)); } void LLPanelPeople::disconnectFromFacebook() { - LLHTTPClient::post(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc/disconnect", LLSD(), new FacebookDisconnectResponder(this)); + LLHTTPClient::del(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc", new FacebookDisconnectResponder(this)); } void LLPanelPeople::onLoginFbcButtonClicked() @@ -1766,7 +1766,7 @@ void LLPanelPeople::onLoginFbcButtonClicked() } else { - LLHTTPClient::get(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc/connected", new FacebookConnectedResponder(this, true)); + LLHTTPClient::get(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc", new FacebookConnectedResponder(this, true)); } } -- cgit v1.2.3 From 2465634bf77b7c471106855c347b611bcd8ef2ab Mon Sep 17 00:00:00 2001 From: Cho Date: Fri, 5 Apr 2013 21:27:20 +0100 Subject: changed connect to use POST --- indra/newview/llpanelpeople.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 4bcd146ad2..29a92525de 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1750,7 +1750,7 @@ void LLPanelPeople::connectToFacebook(const std::string& auth_code) LLSD body; body["code"] = auth_code; body["redirect_uri"] = FBC_SERVICES_REDIRECT_URI; - LLHTTPClient::put(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc", body, new FacebookConnectResponder(this)); + LLHTTPClient::post(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc", body, new FacebookConnectResponder(this)); } void LLPanelPeople::disconnectFromFacebook() -- cgit v1.2.3 From c8883f6a5245056c4f26f2ce4f874549e62b2b29 Mon Sep 17 00:00:00 2001 From: Cho Date: Tue, 9 Apr 2013 01:15:00 +0100 Subject: updated to use new API routes --- indra/newview/llpanelpeople.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 29a92525de..052637742b 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -888,6 +888,9 @@ void LLPanelPeople::updateFbcTestList() // close the browser window mFbcTestBrowserHandle.get()->die(); + + // get rid of the handle + mFbcTestBrowserHandle = LLHandle(); // stop updating mFbcTestListUpdater->setActive(false); @@ -1716,7 +1719,7 @@ public: llinfos << content << llendl; // display the list of friends - if (content.has("friends")) + if (content.has("friends") && !content.has("error")) { mPanelPeople->showFacebookFriends(content["friends"]); } @@ -1748,14 +1751,17 @@ void LLPanelPeople::tryToReconnectToFacebook() void LLPanelPeople::connectToFacebook(const std::string& auth_code) { LLSD body; + body["agent_id"] = gAgentID.asString(); body["code"] = auth_code; body["redirect_uri"] = FBC_SERVICES_REDIRECT_URI; - LLHTTPClient::post(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc", body, new FacebookConnectResponder(this)); + LLHTTPClient::post(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc/connect", body, new FacebookConnectResponder(this)); } void LLPanelPeople::disconnectFromFacebook() { - LLHTTPClient::del(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc", new FacebookDisconnectResponder(this)); + LLSD body; + body["agent_id"] = gAgentID.asString(); + LLHTTPClient::post(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc/disconnect", body, new FacebookDisconnectResponder(this)); } void LLPanelPeople::onLoginFbcButtonClicked() -- cgit v1.2.3 From 2b8632a81b40ef92a9b3872ad0909575a3bd938a Mon Sep 17 00:00:00 2001 From: Cho Date: Tue, 9 Apr 2013 02:01:56 +0100 Subject: changed redirect_uri to pdp15.lindenlab.com/redirect --- indra/newview/llpanelpeople.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 052637742b..a425919390 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -80,7 +80,7 @@ static const std::string FBCTEST_TAB_NAME = "fbctest_panel"; static const std::string COLLAPSED_BY_USER = "collapsed_by_user"; static const std::string FBC_SERVICES_URL = "https://pdp15.lindenlab.com"; -static const std::string FBC_SERVICES_REDIRECT_URI = "http://axcho.com/secondlife/"; +static const std::string FBC_SERVICES_REDIRECT_URI = "https://pdp15.lindenlab.com/redirect"; /** Comparator for comparing avatar items by last interaction date */ class LLAvatarItemRecentComparator : public LLAvatarItemComparator -- cgit v1.2.3 From 479c5f4b4aad98dbb654cb03c343b2dce6222922 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Tue, 9 Apr 2013 13:24:51 -0700 Subject: adding in logging of building a list of 300 users inside LLAvatarList and LLFolderView to determine drawbacks/benefits and timing. --- indra/newview/llfloaterimcontainer.cpp | 7 +++++-- indra/newview/llpanelpeople.cpp | 17 +++++++++++++++++ indra/newview/llpanelpeople.h | 1 + indra/newview/llparticipantlist.cpp | 14 ++++++++++++++ indra/newview/llparticipantlist.h | 1 + indra/newview/skins/default/xui/en/menu_gear_fbc.xml | 9 ++++++++- 6 files changed, 46 insertions(+), 3 deletions(-) diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp index 7e281bd99b..af8c7e9dc4 100644 --- a/indra/newview/llfloaterimcontainer.cpp +++ b/indra/newview/llfloaterimcontainer.cpp @@ -342,8 +342,11 @@ void LLFloaterIMContainer::onStubCollapseButtonClicked() void LLFloaterIMContainer::onSpeakButtonClicked() { - LLAgent::toggleMicrophone("speak"); - updateSpeakBtnState(); + //LLAgent::toggleMicrophone("speak"); + //updateSpeakBtnState(); + + LLParticipantList* session_model = dynamic_cast(mConversationsItems[LLUUID(NULL)]); + session_model->addTestAvatarAgents(); } void LLFloaterIMContainer::onExpandCollapseButtonClicked() { diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index a425919390..493395fdd1 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -49,6 +49,7 @@ #include "llavatarlist.h" #include "llavatarlistitem.h" #include "llcallingcard.h" // for LLAvatarTracker +#include "llerror.h" #include "llfloateravatarpicker.h" //#include "llfloaterminiinspector.h" #include "llfriendcard.h" @@ -557,6 +558,7 @@ LLPanelPeople::LLPanelPeople() mCommitCallbackRegistrar.add("People.loginFBC", boost::bind(&LLPanelPeople::onLoginFbcButtonClicked, this)); mCommitCallbackRegistrar.add("People.requestFBC", boost::bind(&LLPanelPeople::onFacebookAppRequestClicked, this)); mCommitCallbackRegistrar.add("People.sendFBC", boost::bind(&LLPanelPeople::onFacebookAppSendClicked, this)); + mCommitCallbackRegistrar.add("People.testaddFBC", boost::bind(&LLPanelPeople::onFacebookTestAddClicked, this)); mCommitCallbackRegistrar.add("People.AddFriend", boost::bind(&LLPanelPeople::onAddFriendButtonClicked, this)); @@ -1789,4 +1791,19 @@ void LLPanelPeople::onFacebookAppSendClicked() p.url("https://www.facebook.com/dialog/send?app_id=565771023434202&name=Join Second Life!&link=https://join.secondlife.com&redirect_uri=" + FBC_SERVICES_URL); openFacebookWeb(p); } + +void LLPanelPeople::onFacebookTestAddClicked() +{ + mFacebookFriends->clear(); + + LL_INFOS("LLPanelPeople") << "start adding 300 users" << LL_ENDL; + + for(int i = 0; i < 300; ++i) + { + mFacebookFriends->addNewItem(LLUUID(), "Test", false); + } + + LL_INFOS("LLPanelPeople") << "finished adding 300 users" << LL_ENDL; +} + // EOF diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index ffb3f74192..76207108cd 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -124,6 +124,7 @@ private: void onLoginFbcButtonClicked(); void onFacebookAppRequestClicked(); void onFacebookAppSendClicked(); + void onFacebookTestAddClicked(); bool onFriendsViewSortMenuItemCheck(const LLSD& userdata); bool onRecentViewSortMenuItemCheck(const LLSD& userdata); diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp index c53760bca1..e05b27e539 100644 --- a/indra/newview/llparticipantlist.cpp +++ b/indra/newview/llparticipantlist.cpp @@ -27,6 +27,7 @@ #include "llviewerprecompiledheaders.h" #include "llavatarnamecache.h" +#include "llerror.h" #include "llimview.h" #include "llfloaterimcontainer.h" #include "llparticipantlist.h" @@ -401,6 +402,19 @@ void LLParticipantList::addAvatarIDExceptAgent(const LLUUID& avatar_id) adjustParticipant(avatar_id); } + +void LLParticipantList::addTestAvatarAgents() +{ + LL_INFOS("LLParticipantList") << "start adding 300 users" << LL_ENDL; + + for(int i = 0; i < 300; ++i) + { + addAvatarIDExceptAgent(LLUUID().generateNewID()); + } + + LL_INFOS("LLParticipantList") << "finished adding 300 users" << LL_ENDL; +} + void LLParticipantList::adjustParticipant(const LLUUID& speaker_id) { LLPointer speakerp = mSpeakerMgr->findSpeaker(speaker_id); diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h index 3a3ae76604..936e289c08 100644 --- a/indra/newview/llparticipantlist.h +++ b/indra/newview/llparticipantlist.h @@ -50,6 +50,7 @@ public: * @param[in] avatar_id - Avatar UUID to be added into the list */ void addAvatarIDExceptAgent(const LLUUID& avatar_id); + void addTestAvatarAgents(); /** * Refreshes the participant list. diff --git a/indra/newview/skins/default/xui/en/menu_gear_fbc.xml b/indra/newview/skins/default/xui/en/menu_gear_fbc.xml index b05ba46107..4d8cbb432e 100644 --- a/indra/newview/skins/default/xui/en/menu_gear_fbc.xml +++ b/indra/newview/skins/default/xui/en/menu_gear_fbc.xml @@ -26,5 +26,12 @@ -
+ + + + \ No newline at end of file -- cgit v1.2.3 From 31eb1f6ebb27c016c66a50f3b32917ea7496fb2f Mon Sep 17 00:00:00 2001 From: Cho Date: Wed, 10 Apr 2013 00:46:15 +0100 Subject: updated routes URLs --- indra/newview/llpanelpeople.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index a425919390..cabc2cf4fe 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -79,8 +79,8 @@ static const std::string BLOCKED_TAB_NAME = "blocked_panel"; // blocked avatars static const std::string FBCTEST_TAB_NAME = "fbctest_panel"; static const std::string COLLAPSED_BY_USER = "collapsed_by_user"; -static const std::string FBC_SERVICES_URL = "https://pdp15.lindenlab.com"; -static const std::string FBC_SERVICES_REDIRECT_URI = "https://pdp15.lindenlab.com/redirect"; +static const std::string FBC_SERVICES_URL = "https://pdp15.lindenlab.com/fbc"; +static const std::string FBC_SERVICES_REDIRECT_URI = "https://pdp15.lindenlab.com/fbc/redirect"; /** Comparator for comparing avatar items by last interaction date */ class LLAvatarItemRecentComparator : public LLAvatarItemComparator @@ -1737,14 +1737,14 @@ public: void LLPanelPeople::loadFacebookFriends() { - LLHTTPClient::get(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc/friends", new FacebookFriendsResponder(this)); + LLHTTPClient::get(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/friends", new FacebookFriendsResponder(this)); } void LLPanelPeople::tryToReconnectToFacebook() { if (!mConnectedToFbc) { - LLHTTPClient::get(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc", new FacebookConnectedResponder(this, false)); + LLHTTPClient::get(FBC_SERVICES_URL + "/agent/" + gAgentID.asString(), new FacebookConnectedResponder(this, false)); } } @@ -1754,14 +1754,14 @@ void LLPanelPeople::connectToFacebook(const std::string& auth_code) body["agent_id"] = gAgentID.asString(); body["code"] = auth_code; body["redirect_uri"] = FBC_SERVICES_REDIRECT_URI; - LLHTTPClient::post(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc/connect", body, new FacebookConnectResponder(this)); + LLHTTPClient::post(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/connect", body, new FacebookConnectResponder(this)); } void LLPanelPeople::disconnectFromFacebook() { LLSD body; body["agent_id"] = gAgentID.asString(); - LLHTTPClient::post(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc/disconnect", body, new FacebookDisconnectResponder(this)); + LLHTTPClient::post(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/disconnect", body, new FacebookDisconnectResponder(this)); } void LLPanelPeople::onLoginFbcButtonClicked() @@ -1772,7 +1772,7 @@ void LLPanelPeople::onLoginFbcButtonClicked() } else { - LLHTTPClient::get(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/fbc", new FacebookConnectedResponder(this, true)); + LLHTTPClient::get(FBC_SERVICES_URL + "/agent/" + gAgentID.asString(), new FacebookConnectedResponder(this, true)); } } -- cgit v1.2.3 From 46c690bd50c588f126d8b5dba67a6802d255c2bd Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Thu, 11 Apr 2013 18:26:48 -0700 Subject: Adding in fast timer for testing creation of 300 avatar list items vs folderview items. --- indra/newview/llpanelpeople.cpp | 4 ++++ indra/newview/llparticipantlist.cpp | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 2e97e8bab9..b33574bcc3 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1792,8 +1792,12 @@ void LLPanelPeople::onFacebookAppSendClicked() openFacebookWeb(p); } +static LLFastTimer::DeclareTimer FTM_AVATAR_LIST_TEST("avatar list test"); + void LLPanelPeople::onFacebookTestAddClicked() { + LLFastTimer _(FTM_AVATAR_LIST_TEST); + mFacebookFriends->clear(); LL_INFOS("LLPanelPeople") << "start adding 300 users" << LL_ENDL; diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp index e05b27e539..b5c9f4a310 100644 --- a/indra/newview/llparticipantlist.cpp +++ b/indra/newview/llparticipantlist.cpp @@ -402,9 +402,13 @@ void LLParticipantList::addAvatarIDExceptAgent(const LLUUID& avatar_id) adjustParticipant(avatar_id); } +static LLFastTimer::DeclareTimer FTM_FOLDERVIEW_TEST("add test avatar agents"); + void LLParticipantList::addTestAvatarAgents() { + LLFastTimer _(FTM_FOLDERVIEW_TEST); + LL_INFOS("LLParticipantList") << "start adding 300 users" << LL_ENDL; for(int i = 0; i < 300; ++i) -- cgit v1.2.3 From 9a0cd53bdaf10652236f082a63fe43ec126a9251 Mon Sep 17 00:00:00 2001 From: Cho Date: Sat, 13 Apr 2013 02:10:13 +0100 Subject: switched to use FacebookConnect and FacebookRedirect capabilities --- indra/newview/llpanelpeople.cpp | 39 +++++++++++++++++++++++++++------------ indra/newview/llpanelpeople.h | 3 +++ indra/newview/llviewerregion.cpp | 2 ++ 3 files changed, 32 insertions(+), 12 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 2e97e8bab9..5a4eca87ff 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -81,7 +81,7 @@ static const std::string FBCTEST_TAB_NAME = "fbctest_panel"; static const std::string COLLAPSED_BY_USER = "collapsed_by_user"; static const std::string FBC_SERVICES_URL = "https://pdp15.lindenlab.com/fbc"; -static const std::string FBC_SERVICES_REDIRECT_URI = "https://pdp15.lindenlab.com/fbc/redirect"; +static const std::string FBC_SERVICES_REDIRECT_URI = "https://pdp15.lindenlab.com/redirect"; /** Comparator for comparing avatar items by last interaction date */ class LLAvatarItemRecentComparator : public LLAvatarItemComparator @@ -865,12 +865,12 @@ void LLPanelPeople::updateFbcTestList() std::string url = mFbcTestBrowserHandle.get()->getTitle(); // if the browser has redirected from facebook - if (url.find(FBC_SERVICES_REDIRECT_URI) == 0) + if (url.find(getFacebookRedirectURL()) == 0) { // find the auth code in the url std::string begin_string = "code="; std::string end_string = "#"; - size_t begin_index = begin_string.length() + url.find(begin_string, FBC_SERVICES_REDIRECT_URI.length()); + size_t begin_index = begin_string.length() + url.find(begin_string, getFacebookRedirectURL().length()); size_t end_index = url.find(end_string, begin_index); // extract the auth code from the url @@ -1695,7 +1695,7 @@ public: else if (mShowLoginIfNotConnected) { LLFloaterWebContent::Params p; - p.url("https://www.facebook.com/dialog/oauth?client_id=565771023434202&redirect_uri=" + FBC_SERVICES_REDIRECT_URI); + p.url("https://www.facebook.com/dialog/oauth?client_id=565771023434202&redirect_uri=" + mPanelPeople->getFacebookRedirectURL()); mPanelPeople->openFacebookWeb(p); } } @@ -1739,14 +1739,14 @@ public: void LLPanelPeople::loadFacebookFriends() { - LLHTTPClient::get(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/friends", new FacebookFriendsResponder(this)); + LLHTTPClient::get(getFacebookConnectURL("/friends"), new FacebookFriendsResponder(this)); } void LLPanelPeople::tryToReconnectToFacebook() { if (!mConnectedToFbc) { - LLHTTPClient::get(FBC_SERVICES_URL + "/agent/" + gAgentID.asString(), new FacebookConnectedResponder(this, false)); + LLHTTPClient::get(getFacebookConnectURL(), new FacebookConnectedResponder(this, false)); } } @@ -1755,17 +1755,32 @@ void LLPanelPeople::connectToFacebook(const std::string& auth_code) LLSD body; body["agent_id"] = gAgentID.asString(); body["code"] = auth_code; - body["redirect_uri"] = FBC_SERVICES_REDIRECT_URI; - LLHTTPClient::post(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/connect", body, new FacebookConnectResponder(this)); + body["redirect_uri"] = getFacebookRedirectURL(); + LLHTTPClient::post(getFacebookConnectURL("/connect"), body, new FacebookConnectResponder(this)); } void LLPanelPeople::disconnectFromFacebook() { LLSD body; body["agent_id"] = gAgentID.asString(); - LLHTTPClient::post(FBC_SERVICES_URL + "/agent/" + gAgentID.asString() + "/disconnect", body, new FacebookDisconnectResponder(this)); + LLHTTPClient::post(getFacebookConnectURL("/disconnect"), body, new FacebookDisconnectResponder(this)); } +std::string LLPanelPeople::getFacebookConnectURL(const std::string& route) +{ + static std::string sFacebookConnectUrl = gAgent.getRegion()->getCapability("FacebookConnect"); + std::string url = sFacebookConnectUrl + route; + llinfos << url << llendl; + return url; +} + +std::string LLPanelPeople::getFacebookRedirectURL() +{ + static std::string sFacebookRedirectUrl = gAgent.getRegion()->getCapability("FacebookRedirect"); + llinfos << sFacebookRedirectUrl << llendl; + return sFacebookRedirectUrl; +} + void LLPanelPeople::onLoginFbcButtonClicked() { if (mConnectedToFbc) @@ -1774,21 +1789,21 @@ void LLPanelPeople::onLoginFbcButtonClicked() } else { - LLHTTPClient::get(FBC_SERVICES_URL + "/agent/" + gAgentID.asString(), new FacebookConnectedResponder(this, true)); + LLHTTPClient::get(getFacebookConnectURL(), new FacebookConnectedResponder(this, true)); } } void LLPanelPeople::onFacebookAppRequestClicked() { LLFloaterWebContent::Params p; - p.url("http://www.facebook.com/dialog/apprequests?app_id=565771023434202&message=Test&redirect_uri=" + FBC_SERVICES_URL); + p.url("http://www.facebook.com/dialog/apprequests?app_id=565771023434202&message=Test&redirect_uri=" + getFacebookRedirectURL()); openFacebookWeb(p); } void LLPanelPeople::onFacebookAppSendClicked() { LLFloaterWebContent::Params p; - p.url("https://www.facebook.com/dialog/send?app_id=565771023434202&name=Join Second Life!&link=https://join.secondlife.com&redirect_uri=" + FBC_SERVICES_URL); + p.url("https://www.facebook.com/dialog/send?app_id=565771023434202&name=Join Second Life!&link=https://join.secondlife.com&redirect_uri=" + getFacebookRedirectURL()); openFacebookWeb(p); } diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index 76207108cd..e9581bb5f3 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -66,6 +66,9 @@ public: void connectToFacebook(const std::string& auth_code); void disconnectFromFacebook(); + std::string getFacebookConnectURL(const std::string& route = ""); + std::string getFacebookRedirectURL(); + bool mConnectedToFbc; bool mTryToConnectToFbc; diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index e4234a538d..5b3b11ae2d 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1522,6 +1522,8 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames) capabilityNames.append("EnvironmentSettings"); capabilityNames.append("EstateChangeInfo"); capabilityNames.append("EventQueueGet"); + capabilityNames.append("FacebookConnect"); + //capabilityNames.append("FacebookRedirect"); if (gSavedSettings.getBOOL("UseHTTPInventory")) { -- cgit v1.2.3 From 828334ac553182e6e9db6806c3a1b8203e64bc43 Mon Sep 17 00:00:00 2001 From: Cho Date: Wed, 17 Apr 2013 02:53:50 +0100 Subject: updated to use new API as suggested by Don Linden --- indra/newview/llpanelpeople.cpp | 68 +++++++++++++---------------------------- 1 file changed, 21 insertions(+), 47 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 519868612a..75c29558e5 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1592,10 +1592,10 @@ void LLPanelPeople::showFacebookFriends(const LLSD& friends) { mFacebookFriends->clear(); - for (LLSD::array_const_iterator i = friends.beginArray(); i != friends.endArray(); ++i) + for (LLSD::map_const_iterator i = friends.beginMap(); i != friends.endMap(); ++i) { - std::string name = (*i)["name"].asString(); - LLUUID agent_id = (*i).has("agent_id") ? (*i)["agent_id"].asUUID() : LLUUID(NULL); + std::string name = i->second["name"].asString(); + LLUUID agent_id = i->second.has("agent_id") ? i->second["agent_id"].asUUID() : LLUUID(NULL); mFacebookFriends->addNewItem(agent_id, name, false); } @@ -1621,15 +1621,8 @@ public: llinfos << content << llendl; // grab some graph data now that we are connected - if (content["success"]) - { - mPanelPeople->mConnectedToFbc = true; - mPanelPeople->loadFacebookFriends(); - } - else if (content.has("error")) - { - llinfos << "failed to connect. reason: " << content["error"]["message"] << llendl; - } + mPanelPeople->mConnectedToFbc = true; + mPanelPeople->loadFacebookFriends(); } else { @@ -1653,15 +1646,8 @@ public: llinfos << content << llendl; // hide all the facebook stuff - if (content["success"]) - { - mPanelPeople->mConnectedToFbc = false; - mPanelPeople->hideFacebookFriends(); - } - else if (content.has("error")) - { - llinfos << "failed to disconnect. reason: " << content["error"]["message"] << llendl; - } + mPanelPeople->mConnectedToFbc = false; + mPanelPeople->hideFacebookFriends(); } else { @@ -1686,23 +1672,21 @@ public: llinfos << content << llendl; // grab some graph data if already connected - if (content["connected"]) - { - mPanelPeople->mConnectedToFbc = true; - mPanelPeople->loadFacebookFriends(); - } + mPanelPeople->mConnectedToFbc = true; + mPanelPeople->loadFacebookFriends(); + } + else + { + llinfos << "failed to get response. reason: " << reason << " status: " << status << llendl; + // show the facebook login page if not connected yet - else if (mShowLoginIfNotConnected) + if (status == 404 && mShowLoginIfNotConnected) { LLFloaterWebContent::Params p; p.url("https://www.facebook.com/dialog/oauth?client_id=565771023434202&redirect_uri=" + mPanelPeople->getFacebookRedirectURL()); mPanelPeople->openFacebookWeb(p); } } - else - { - llinfos << "failed to get response. reason: " << reason << " status: " << status << llendl; - } } }; @@ -1721,14 +1705,7 @@ public: llinfos << content << llendl; // display the list of friends - if (content.has("friends") && !content.has("error")) - { - mPanelPeople->showFacebookFriends(content["friends"]); - } - else if (content.has("error")) - { - llinfos << "failed to get facebook friends. reason: " << content["error"]["message"] << llendl; - } + mPanelPeople->showFacebookFriends(content); } else { @@ -1739,31 +1716,28 @@ public: void LLPanelPeople::loadFacebookFriends() { - LLHTTPClient::get(getFacebookConnectURL("/friends"), new FacebookFriendsResponder(this)); + LLHTTPClient::get(getFacebookConnectURL("/friend"), new FacebookFriendsResponder(this)); } void LLPanelPeople::tryToReconnectToFacebook() { if (!mConnectedToFbc) { - LLHTTPClient::get(getFacebookConnectURL(), new FacebookConnectedResponder(this, false)); + LLHTTPClient::get(getFacebookConnectURL("/connection"), new FacebookConnectedResponder(this, false)); } } void LLPanelPeople::connectToFacebook(const std::string& auth_code) { LLSD body; - body["agent_id"] = gAgentID.asString(); body["code"] = auth_code; body["redirect_uri"] = getFacebookRedirectURL(); - LLHTTPClient::post(getFacebookConnectURL("/connect"), body, new FacebookConnectResponder(this)); + LLHTTPClient::put(getFacebookConnectURL("/connection"), body, new FacebookConnectResponder(this)); } void LLPanelPeople::disconnectFromFacebook() { - LLSD body; - body["agent_id"] = gAgentID.asString(); - LLHTTPClient::post(getFacebookConnectURL("/disconnect"), body, new FacebookDisconnectResponder(this)); + LLHTTPClient::del(getFacebookConnectURL("/connection"), new FacebookDisconnectResponder(this)); } std::string LLPanelPeople::getFacebookConnectURL(const std::string& route) @@ -1789,7 +1763,7 @@ void LLPanelPeople::onLoginFbcButtonClicked() } else { - LLHTTPClient::get(getFacebookConnectURL(), new FacebookConnectedResponder(this, true)); + LLHTTPClient::get(getFacebookConnectURL("/connection"), new FacebookConnectedResponder(this, true)); } } -- cgit v1.2.3 From 7f0798fd6dad069aca44b954aa0fb7e49d42198c Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Tue, 16 Apr 2013 19:34:40 -0700 Subject: adding a new tab in people panel that has a folder view --- indra/newview/llconversationmodel.cpp | 1 + indra/newview/llpanelpeople.cpp | 142 +++++++++++++++++++++ indra/newview/llpanelpeople.h | 18 ++- .../newview/skins/default/xui/en/panel_people.xml | 13 ++ 4 files changed, 173 insertions(+), 1 deletion(-) diff --git a/indra/newview/llconversationmodel.cpp b/indra/newview/llconversationmodel.cpp index c74ce24872..ed434d82d5 100644 --- a/indra/newview/llconversationmodel.cpp +++ b/indra/newview/llconversationmodel.cpp @@ -95,6 +95,7 @@ void LLConversationItem::postEvent(const std::string& event_type, LLConversation LLUUID participant_id = (participant ? participant->getUUID() : LLUUID()); LLSD event(LLSDMap("type", event_type)("session_uuid", session_id)("participant_uuid", participant_id)); LLEventPumps::instance().obtain("ConversationsEvents").post(event); + LLEventPumps::instance().obtain("ConversationsEventsTwo").post(event); } // Virtual action callbacks diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 519868612a..6864381404 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -28,6 +28,8 @@ // libs #include "llavatarname.h" +#include "llconversationview.h" +#include "llfloaterimcontainer.h" #include "llfloaterreg.h" #include "llfloatersidepanelcontainer.h" #include "llmenubutton.h" @@ -48,7 +50,9 @@ #include "llavataractions.h" #include "llavatarlist.h" #include "llavatarlistitem.h" +#include "llavatarnamecache.h" #include "llcallingcard.h" // for LLAvatarTracker +#include "llcallbacklist.h" #include "llerror.h" #include "llfloateravatarpicker.h" //#include "llfloaterminiinspector.h" @@ -58,6 +62,7 @@ #include "llinventoryobserver.h" #include "llnetmap.h" #include "llpanelpeoplemenus.h" +#include "llparticipantlist.h" #include "llsidetraypanelcontainer.h" #include "llrecentpeople.h" #include "llviewercontrol.h" // for gSavedSettings @@ -78,6 +83,7 @@ static const std::string GROUP_TAB_NAME = "groups_panel"; static const std::string RECENT_TAB_NAME = "recent_panel"; static const std::string BLOCKED_TAB_NAME = "blocked_panel"; // blocked avatars static const std::string FBCTEST_TAB_NAME = "fbctest_panel"; +static const std::string FBCTESTTWO_TAB_NAME = "fbctesttwo_panel"; static const std::string COLLAPSED_BY_USER = "collapsed_by_user"; static const std::string FBC_SERVICES_URL = "https://pdp15.lindenlab.com/fbc"; @@ -540,6 +546,8 @@ private: LLPanelPeople::LLPanelPeople() : LLPanel(), mConnectedToFbc(false), + mConversationsRoot(NULL), + mConversationsEventStream("ConversationsEventsTwo"), mTryToConnectToFbc(true), mTabContainer(NULL), mOnlineFriendList(NULL), @@ -595,6 +603,8 @@ LLPanelPeople::~LLPanelPeople() } if (mFbcTestBrowserHandle.get()) mFbcTestBrowserHandle.get()->die(); + + mConversationsEventStream.stopListening("ConversationsRefresh"); } void LLPanelPeople::onFriendsAccordionExpandedCollapsed(LLUICtrl* ctrl, const LLSD& param, LLAvatarList* avatar_list) @@ -678,6 +688,61 @@ BOOL LLPanelPeople::postBuild() mFacebookFriends = social_tab->getChild("facebook_friends"); social_tab->setVisibleCallback(boost::bind(&Updater::setActive, mFbcTestListUpdater, _2)); + //===Test START======================================================================== + + LLPanel * socialtwo_tab = getChild(FBCTESTTWO_TAB_NAME); + + //Create folder view + LLConversationItem* base_item = new LLConversationItem(mConversationViewModel); + + LLFolderView::Params folder_view_params(LLUICtrlFactory::getDefaultParams()); + folder_view_params.rect.left(0).right(0).top(0).bottom(0); + folder_view_params.parent_panel = friends_tab; + folder_view_params.listener = base_item; + folder_view_params.view_model = &mConversationViewModel; + folder_view_params.root = NULL; + folder_view_params.use_ellipses = false; + folder_view_params.options_menu = "menu_conversation.xml"; + folder_view_params.name = "fbcfolderview"; + mConversationsRoot = LLUICtrlFactory::create(folder_view_params); + mConversationsEventStream.listen("ConversationsRefresh", boost::bind(&LLPanelPeople::onConversationModelEvent, this, _1)); + + //Create scroller + LLRect scroller_view_rect = socialtwo_tab->getRect(); + //scroller_view_rect.translate(-scroller_view_rect.mLeft, -scroller_view_rect.mBottom); + LLScrollContainer::Params scroller_params(LLUICtrlFactory::getDefaultParams()); + scroller_params.rect(scroller_view_rect); + + LLScrollContainer* scroller = LLUICtrlFactory::create(scroller_params); + socialtwo_tab->addChildInBack(scroller); + scroller->addChild(mConversationsRoot); + scroller->setFollowsAll(); + mConversationsRoot->setScrollContainer(scroller); + mConversationsRoot->setFollowsAll(); + + //Create a session + //LLSpeakerMgr* speaker_manager = (LLSpeakerMgr*)LLLocalSpeakerMgr::getInstance(); + LLConversationItemSession* item = new LLConversationItemSession(LLUUID(NULL), mConversationViewModel); + item->renameItem("Facebook Friends"); + LLConversationViewSession::Params params; + + params.name = item->getDisplayName(); + params.root = mConversationsRoot; + params.listener = item; + params.tool_tip = params.name; + params.container = LLFloaterIMContainer::getInstance(); + LLConversationViewSession * widget = LLUICtrlFactory::create(params); + widget->addToFolder(mConversationsRoot); + + mConversationsItems[LLUUID(NULL)] = item; + mConversationsWidgits[LLUUID(NULL)] = widget; + + gIdleCallbacks.addFunction(idle, this); + + //===Test END======================================================================== + + + setSortOrder(mRecentList, (ESortOrder)gSavedSettings.getU32("RecentPeopleSortOrder"), false); setSortOrder(mAllFriendList, (ESortOrder)gSavedSettings.getU32("FriendsSortOrder"), false); setSortOrder(mNearbyList, (ESortOrder)gSavedSettings.getU32("NearbyPeopleSortOrder"), false); @@ -757,6 +822,12 @@ void LLPanelPeople::onChange(EStatusType status, const std::string &channelURI, updateButtons(); } +void LLPanelPeople::idle(void * user_data) +{ + LLPanelPeople * self = static_cast(user_data); + self->mConversationsRoot->update(); +} + void LLPanelPeople::updateFriendListHelpText() { // show special help text for just created account to help finding friends. EXT-4836 @@ -999,6 +1070,10 @@ LLUUID LLPanelPeople::getCurrentItemID() const if (cur_tab == FBCTEST_TAB_NAME) return LLUUID::null; + if (cur_tab == FBCTESTTWO_TAB_NAME) + return LLUUID::null; + + llassert(0 && "unknown tab selected"); return LLUUID::null; } @@ -1023,6 +1098,8 @@ void LLPanelPeople::getCurrentItemIDs(uuid_vec_t& selected_uuids) const selected_uuids.clear(); // FIXME? else if (cur_tab == FBCTEST_TAB_NAME) return; + else if (cur_tab == FBCTESTTWO_TAB_NAME) + return; else llassert(0 && "unknown tab selected"); @@ -1576,6 +1653,49 @@ bool LLPanelPeople::isAccordionCollapsedByUser(const std::string& name) return isAccordionCollapsedByUser(getChild(name)); } +bool LLPanelPeople::onConversationModelEvent(const LLSD& event) +{ + std::string type = event.get("type").asString(); + LLUUID session_id = event.get("session_uuid").asUUID(); + LLUUID participant_id = event.get("participant_uuid").asUUID(); + + if(type == "add_participant") + { + LLConversationItemSession * session_model = dynamic_cast(mConversationsItems[session_id]); + LLConversationViewSession * session_view = dynamic_cast(mConversationsWidgits[session_id]); + LLConversationItemParticipant * participant_model = session_model->findParticipant(participant_id); + + if(participant_model) + { + LLConversationViewParticipant * participant_view = createConversationViewParticipant(participant_model); + participant_view->addToFolder(session_view); + } + + + llinfos << "adding!!!!!!" << llendl; + } + + return false; +} + +LLConversationViewParticipant * LLPanelPeople::createConversationViewParticipant(LLConversationItem * item) +{ + LLConversationViewParticipant::Params params; + LLRect panel_rect = getChild(FBCTESTTWO_TAB_NAME)->getRect(); + + params.name = item->getDisplayName(); + params.root = mConversationsRoot; + params.listener = item; + + //24 is the the current hight of an item (itemHeight) loaded from conversation_view_participant.xml. + params.rect = LLRect (0, 24, panel_rect.getWidth(), 0); + params.tool_tip = params.name; + params.participant_id = item->getUUID(); + params.folder_indentation = 2; + + return LLUICtrlFactory::create(params); +} + void LLPanelPeople::openFacebookWeb(LLFloaterWebContent::Params& p) { LLFloater* browser = LLFloaterReg::showInstance("web_content", p); @@ -1601,6 +1721,28 @@ void LLPanelPeople::showFacebookFriends(const LLSD& friends) } } +void LLPanelPeople::addTestParticipant() +{ + for(int i = 0; i < 300; ++i) + { + LLConversationItemSession * session_model = dynamic_cast(mConversationsItems[LLUUID(NULL)]); + addParticipantToModel(session_model, LLUUID().generateNewID(), "Test"); + } + } + +void LLPanelPeople::addParticipantToModel(LLConversationItemSession * session_model, const LLUUID& agent_id, const std::string& name) +{ + LLConversationItemParticipant* participant = NULL; + + // Create a participant model + LLAvatarName avatar_name; + bool has_name = LLAvatarNameCache::get(agent_id, &avatar_name); + std::string avatar_name_string = has_name ? name + " (" + avatar_name.getDisplayName() + ")" : name; + + participant = new LLConversationItemParticipant(avatar_name_string , agent_id, mConversationViewModel); + session_model->addParticipant(participant); +} + void LLPanelPeople::hideFacebookFriends() { mFacebookFriends->clear(); diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index e9581bb5f3..b4582d9a3e 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -22,7 +22,7 @@ * * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ - */ + */ #ifndef LL_LLPANELPEOPLE_H #define LL_LLPANELPEOPLE_H @@ -30,6 +30,8 @@ #include #include "llcallingcard.h" // for avatar tracker +#include "llconversationmodel.h" +#include "llevents.h" #include "llfloaterwebcontent.h" #include "llvoiceclient.h" @@ -41,6 +43,7 @@ class LLGroupList; class LLSocialList; class LLMenuButton; class LLTabContainer; +class LLFolderView; class LLPanelPeople : public LLPanel @@ -58,8 +61,12 @@ public: // when voice is available /*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal); + static void idle(void * user_data); + void openFacebookWeb(LLFloaterWebContent::Params& p); void showFacebookFriends(const LLSD& friends); + void addTestParticipant(); + void addParticipantToModel(LLConversationItemSession * session_model, const LLUUID& agent_id, const std::string& name); void hideFacebookFriends(); void loadFacebookFriends(); void tryToReconnectToFacebook(); @@ -149,6 +156,9 @@ private: bool isAccordionCollapsedByUser(LLUICtrl* acc_tab); bool isAccordionCollapsedByUser(const std::string& name); + bool onConversationModelEvent(const LLSD& event); + LLConversationViewParticipant * createConversationViewParticipant(LLConversationItem * item); + LLTabContainer* mTabContainer; LLAvatarList* mOnlineFriendList; LLAvatarList* mAllFriendList; @@ -170,6 +180,12 @@ private: Updater* mButtonsUpdater; LLMenuButton* mFBCGearButton; LLHandle< LLFloater > mPicker; + + conversations_items_map mConversationsItems; + conversations_widgets_map mConversationsWidgits; + LLConversationViewModel mConversationViewModel; + LLFolderView* mConversationsRoot; + LLEventStream mConversationsEventStream; }; #endif //LL_LLPANELPEOPLE_H diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index 08c8aef1e9..c4db547a8e 100644 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -725,5 +725,18 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M /> + -- cgit v1.2.3 From 0eb2248f55c835e51705c4dc026e177f3930c5db Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Tue, 16 Apr 2013 22:36:32 -0700 Subject: made a separate button to add test users to the folder view list. Also when receiving facebook friends both the avatarlist and folderview will be populated. --- indra/newview/llpanelpeople.cpp | 13 +++++++++---- indra/newview/skins/default/xui/en/menu_gear_fbc.xml | 9 ++++++++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 94b60ca2d6..34d565bbaa 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -567,7 +567,7 @@ LLPanelPeople::LLPanelPeople() mCommitCallbackRegistrar.add("People.requestFBC", boost::bind(&LLPanelPeople::onFacebookAppRequestClicked, this)); mCommitCallbackRegistrar.add("People.sendFBC", boost::bind(&LLPanelPeople::onFacebookAppSendClicked, this)); mCommitCallbackRegistrar.add("People.testaddFBC", boost::bind(&LLPanelPeople::onFacebookTestAddClicked, this)); - + mCommitCallbackRegistrar.add("People.testaddFBCFolderView", boost::bind(&LLPanelPeople::addTestParticipant, this)); mCommitCallbackRegistrar.add("People.AddFriend", boost::bind(&LLPanelPeople::onAddFriendButtonClicked, this)); mCommitCallbackRegistrar.add("People.AddFriendWizard", boost::bind(&LLPanelPeople::onAddFriendWizButtonClicked, this)); @@ -1670,9 +1670,6 @@ bool LLPanelPeople::onConversationModelEvent(const LLSD& event) LLConversationViewParticipant * participant_view = createConversationViewParticipant(participant_model); participant_view->addToFolder(session_view); } - - - llinfos << "adding!!!!!!" << llendl; } return false; @@ -1717,7 +1714,15 @@ void LLPanelPeople::showFacebookFriends(const LLSD& friends) std::string name = i->second["name"].asString(); LLUUID agent_id = i->second.has("agent_id") ? i->second["agent_id"].asUUID() : LLUUID(NULL); + //add to avatar list mFacebookFriends->addNewItem(agent_id, name, false); + + //Add to folder view + LLConversationItemSession * session_model = dynamic_cast(mConversationsItems[LLUUID(NULL)]); + if(session_model) + { + addParticipantToModel(session_model, agent_id, name); + } } } diff --git a/indra/newview/skins/default/xui/en/menu_gear_fbc.xml b/indra/newview/skins/default/xui/en/menu_gear_fbc.xml index 4d8cbb432e..d73cee344b 100644 --- a/indra/newview/skins/default/xui/en/menu_gear_fbc.xml +++ b/indra/newview/skins/default/xui/en/menu_gear_fbc.xml @@ -28,10 +28,17 @@ parameter="http://www.facebook.com/settings?tab=applications" /> + + + \ No newline at end of file -- cgit v1.2.3 From a505c3734a4a3f644500558030b4496d3cb5a5b5 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Mon, 22 Apr 2013 18:08:36 -0700 Subject: ACME 162: Implemented a foundation model for the facebook connect folder view. --- indra/newview/CMakeLists.txt | 4 + indra/newview/llconversationmodel.cpp | 1 - indra/newview/llpanelpeople.cpp | 80 +++++------ indra/newview/llpanelpeople.h | 16 ++- indra/newview/llpersonfolderview.cpp | 126 ++++++++++++++++ indra/newview/llpersonfolderview.h | 93 ++++++++++++ indra/newview/llpersonmodelcommon.cpp | 158 +++++++++++++++++++++ indra/newview/llpersonmodelcommon.h | 132 +++++++++++++++++ .../default/xui/en/widgets/person_folder_view.xml | 13 ++ 9 files changed, 577 insertions(+), 46 deletions(-) create mode 100644 indra/newview/llpersonfolderview.cpp create mode 100644 indra/newview/llpersonfolderview.h create mode 100644 indra/newview/llpersonmodelcommon.cpp create mode 100644 indra/newview/llpersonmodelcommon.h create mode 100644 indra/newview/skins/default/xui/en/widgets/person_folder_view.xml diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 02ab1c9ff1..84e8811ce8 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -452,6 +452,8 @@ set(viewer_SOURCE_FILES llpathfindingobjectlist.cpp llpathfindingpathtool.cpp llpersistentnotificationstorage.cpp + llpersonmodelcommon.cpp + llpersonfolderview.cpp llphysicsmotion.cpp llphysicsshapebuilderutil.cpp llplacesinventorybridge.cpp @@ -1029,6 +1031,8 @@ set(viewer_HEADER_FILES llpathfindingobjectlist.h llpathfindingpathtool.h llpersistentnotificationstorage.h + llpersonmodelcommon.h + llpersonfolderview.h llphysicsmotion.h llphysicsshapebuilderutil.h llplacesinventorybridge.h diff --git a/indra/newview/llconversationmodel.cpp b/indra/newview/llconversationmodel.cpp index ed434d82d5..c74ce24872 100644 --- a/indra/newview/llconversationmodel.cpp +++ b/indra/newview/llconversationmodel.cpp @@ -95,7 +95,6 @@ void LLConversationItem::postEvent(const std::string& event_type, LLConversation LLUUID participant_id = (participant ? participant->getUUID() : LLUUID()); LLSD event(LLSDMap("type", event_type)("session_uuid", session_id)("participant_uuid", participant_id)); LLEventPumps::instance().obtain("ConversationsEvents").post(event); - LLEventPumps::instance().obtain("ConversationsEventsTwo").post(event); } // Virtual action callbacks diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 34d565bbaa..d2d1e602be 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -63,6 +63,8 @@ #include "llnetmap.h" #include "llpanelpeoplemenus.h" #include "llparticipantlist.h" +#include "llpersonmodelcommon.h" +#include "llpersonfolderview.h" #include "llsidetraypanelcontainer.h" #include "llrecentpeople.h" #include "llviewercontrol.h" // for gSavedSettings @@ -696,7 +698,6 @@ BOOL LLPanelPeople::postBuild() LLConversationItem* base_item = new LLConversationItem(mConversationViewModel); LLFolderView::Params folder_view_params(LLUICtrlFactory::getDefaultParams()); - folder_view_params.rect.left(0).right(0).top(0).bottom(0); folder_view_params.parent_panel = friends_tab; folder_view_params.listener = base_item; folder_view_params.view_model = &mConversationViewModel; @@ -709,7 +710,9 @@ BOOL LLPanelPeople::postBuild() //Create scroller LLRect scroller_view_rect = socialtwo_tab->getRect(); - //scroller_view_rect.translate(-scroller_view_rect.mLeft, -scroller_view_rect.mBottom); + scroller_view_rect.mTop -= 4; + scroller_view_rect.mRight -=6; + scroller_view_rect.mLeft += 2; LLScrollContainer::Params scroller_params(LLUICtrlFactory::getDefaultParams()); scroller_params.rect(scroller_view_rect); @@ -722,21 +725,18 @@ BOOL LLPanelPeople::postBuild() //Create a session //LLSpeakerMgr* speaker_manager = (LLSpeakerMgr*)LLLocalSpeakerMgr::getInstance(); - LLConversationItemSession* item = new LLConversationItemSession(LLUUID(NULL), mConversationViewModel); - item->renameItem("Facebook Friends"); - LLConversationViewSession::Params params; - + LLPersonFolderModel* item = new LLPersonFolderModel("Facebook Friends", mConversationViewModel); + LLPersonFolderView::Params params; params.name = item->getDisplayName(); params.root = mConversationsRoot; params.listener = item; params.tool_tip = params.name; - params.container = LLFloaterIMContainer::getInstance(); - LLConversationViewSession * widget = LLUICtrlFactory::create(params); + LLPersonFolderView * widget = LLUICtrlFactory::create(params); widget->addToFolder(mConversationsRoot); - mConversationsItems[LLUUID(NULL)] = item; - mConversationsWidgits[LLUUID(NULL)] = widget; - + mPersonFolderModelMap[item->getID()] = item; + mPersonFolderViewMap[item->getID()] = widget; + gIdleCallbacks.addFunction(idle, this); //===Test END======================================================================== @@ -1656,28 +1656,32 @@ bool LLPanelPeople::isAccordionCollapsedByUser(const std::string& name) bool LLPanelPeople::onConversationModelEvent(const LLSD& event) { std::string type = event.get("type").asString(); - LLUUID session_id = event.get("session_uuid").asUUID(); - LLUUID participant_id = event.get("participant_uuid").asUUID(); + LLUUID folder_id = event.get("folder_id").asUUID(); + LLUUID person_id = event.get("person_id").asUUID(); if(type == "add_participant") { - LLConversationItemSession * session_model = dynamic_cast(mConversationsItems[session_id]); - LLConversationViewSession * session_view = dynamic_cast(mConversationsWidgits[session_id]); - LLConversationItemParticipant * participant_model = session_model->findParticipant(participant_id); - - if(participant_model) + LLPersonFolderModel * person_folder_model = dynamic_cast(mPersonFolderModelMap[folder_id]); + LLPersonFolderView * person_folder_view = dynamic_cast(mPersonFolderViewMap[person_id]); + + if(person_folder_model) { - LLConversationViewParticipant * participant_view = createConversationViewParticipant(participant_model); - participant_view->addToFolder(session_view); + LLPersonModel * person_model = person_folder_model->findParticipant(person_id); + + if(person_model) + { + LLPersonView * participant_view = createConversationViewParticipant(person_model); + participant_view->addToFolder(person_folder_view); + } } } return false; } -LLConversationViewParticipant * LLPanelPeople::createConversationViewParticipant(LLConversationItem * item) +LLPersonView * LLPanelPeople::createConversationViewParticipant(LLPersonModel * item) { - LLConversationViewParticipant::Params params; + LLPersonView::Params params; LLRect panel_rect = getChild(FBCTESTTWO_TAB_NAME)->getRect(); params.name = item->getDisplayName(); @@ -1687,10 +1691,9 @@ LLConversationViewParticipant * LLPanelPeople::createConversationViewParticipant //24 is the the current hight of an item (itemHeight) loaded from conversation_view_participant.xml. params.rect = LLRect (0, 24, panel_rect.getWidth(), 0); params.tool_tip = params.name; - params.participant_id = item->getUUID(); params.folder_indentation = 2; - return LLUICtrlFactory::create(params); + return LLUICtrlFactory::create(params); } void LLPanelPeople::openFacebookWeb(LLFloaterWebContent::Params& p) @@ -1718,11 +1721,11 @@ void LLPanelPeople::showFacebookFriends(const LLSD& friends) mFacebookFriends->addNewItem(agent_id, name, false); //Add to folder view - LLConversationItemSession * session_model = dynamic_cast(mConversationsItems[LLUUID(NULL)]); - if(session_model) - { - addParticipantToModel(session_model, agent_id, name); - } + //LLConversationItemSession * session_model = dynamic_cast(mConversationsItems[LLUUID(NULL)]); + //if(session_model) + //{ + // addParticipantToModel(session_model, agent_id, name); + //} } } @@ -1730,22 +1733,17 @@ void LLPanelPeople::addTestParticipant() { for(int i = 0; i < 300; ++i) { - LLConversationItemSession * session_model = dynamic_cast(mConversationsItems[LLUUID(NULL)]); - addParticipantToModel(session_model, LLUUID().generateNewID(), "Test"); - } + LLPersonFolderModel * person_folder_model = dynamic_cast(mPersonFolderModelMap.begin()->second); + addParticipantToModel(person_folder_model, LLUUID().generateNewID(), "EastBayGuy"); } +} -void LLPanelPeople::addParticipantToModel(LLConversationItemSession * session_model, const LLUUID& agent_id, const std::string& name) +void LLPanelPeople::addParticipantToModel(LLPersonFolderModel * person_folder_model, const LLUUID& agent_id, const std::string& name) { - LLConversationItemParticipant* participant = NULL; - - // Create a participant model - LLAvatarName avatar_name; - bool has_name = LLAvatarNameCache::get(agent_id, &avatar_name); - std::string avatar_name_string = has_name ? name + " (" + avatar_name.getDisplayName() + ")" : name; + LLPersonModel* person_model = NULL; - participant = new LLConversationItemParticipant(avatar_name_string , agent_id, mConversationViewModel); - session_model->addParticipant(participant); + person_model = new LLPersonModel(name, mConversationViewModel); + person_folder_model->addParticipant(person_model); } void LLPanelPeople::hideFacebookFriends() diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index b4582d9a3e..935171df2b 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -45,6 +45,14 @@ class LLMenuButton; class LLTabContainer; class LLFolderView; +class LLPersonFolderModel; +class LLPersonFolderView; +class LLPersonView; +class LLPersonModel; + +typedef std::map person_folder_model_map; +typedef std::map person_folder_view_map; + class LLPanelPeople : public LLPanel , public LLVoiceClientStatusObserver @@ -66,7 +74,7 @@ public: void openFacebookWeb(LLFloaterWebContent::Params& p); void showFacebookFriends(const LLSD& friends); void addTestParticipant(); - void addParticipantToModel(LLConversationItemSession * session_model, const LLUUID& agent_id, const std::string& name); + void addParticipantToModel(LLPersonFolderModel * session_model, const LLUUID& agent_id, const std::string& name); void hideFacebookFriends(); void loadFacebookFriends(); void tryToReconnectToFacebook(); @@ -157,7 +165,7 @@ private: bool isAccordionCollapsedByUser(const std::string& name); bool onConversationModelEvent(const LLSD& event); - LLConversationViewParticipant * createConversationViewParticipant(LLConversationItem * item); + LLPersonView * createConversationViewParticipant(LLPersonModel * item); LLTabContainer* mTabContainer; LLAvatarList* mOnlineFriendList; @@ -181,8 +189,8 @@ private: LLMenuButton* mFBCGearButton; LLHandle< LLFloater > mPicker; - conversations_items_map mConversationsItems; - conversations_widgets_map mConversationsWidgits; + person_folder_model_map mPersonFolderModelMap; + person_folder_view_map mPersonFolderViewMap; LLConversationViewModel mConversationViewModel; LLFolderView* mConversationsRoot; LLEventStream mConversationsEventStream; diff --git a/indra/newview/llpersonfolderview.cpp b/indra/newview/llpersonfolderview.cpp new file mode 100644 index 0000000000..e1f1cbb1fa --- /dev/null +++ b/indra/newview/llpersonfolderview.cpp @@ -0,0 +1,126 @@ +/** +* @file llpersonfolderview.cpp +* @brief Implementation of llpersonfolderview +* @author Gilbert@lindenlab.com +* +* $LicenseInfo:firstyear=2013&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2013, Linden Research, Inc. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; +* version 2.1 of the License only. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +* +* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA +* $/LicenseInfo$ +*/ + +#include "llviewerprecompiledheaders.h" + +#include "llpersonfolderview.h" + +static LLDefaultChildRegistry::Register r_person_folder_view("person_folder_view"); + +const LLColor4U DEFAULT_WHITE(255, 255, 255); + +LLPersonFolderView::Params::Params() +{} + +LLPersonFolderView::LLPersonFolderView(const LLPersonFolderView::Params& p) : +LLFolderViewFolder(p) +{ + +} + +S32 LLPersonFolderView::getLabelXPos() +{ + return getIndentation() + mArrowSize + 15;//Should be a .xml variable but causes crash; +} + +LLPersonFolderView::~LLPersonFolderView() +{ + +} + +void LLPersonFolderView::draw() +{ + static LLUIColor sFgColor = LLUIColorTable::instance().getColor("MenuItemEnabledColor", DEFAULT_WHITE); + static const LLFolderViewItem::Params& default_params = LLUICtrlFactory::getDefaultParams(); + + static LLUIColor sHighlightBgColor = LLUIColorTable::instance().getColor("MenuItemHighlightBgColor", DEFAULT_WHITE); + static LLUIColor sFlashBgColor = LLUIColorTable::instance().getColor("MenuItemFlashBgColor", DEFAULT_WHITE); + static LLUIColor sFocusOutlineColor = LLUIColorTable::instance().getColor("MenuItemHighlightBgColor", DEFAULT_WHITE); + static LLUIColor sMouseOverColor = LLUIColorTable::instance().getColor("DkGray", DEFAULT_WHITE); + + const LLFontGL * font = LLFontGL::getFontSansSerif(); + F32 text_left = (F32)getLabelXPos(); + F32 y = (F32)getRect().getHeight() - font->getLineHeight() - (F32)mTextPad; + LLColor4 color = sFgColor; + F32 right_x = 0; + + drawHighlight(false, mIsSelected, sHighlightBgColor, sFlashBgColor, sFocusOutlineColor, sMouseOverColor); + + updateLabelRotation(); + drawOpenFolderArrow(default_params, sFgColor); + + drawLabel(font, text_left, y, color, right_x); + + LLView::draw(); +} + +// +// LLPersonFolderModel +// + + +LLPersonView::Params::Params() +{} + +LLPersonView::LLPersonView(const LLPersonView::Params& p) : +LLFolderViewItem(p) +{ + +} + +S32 LLPersonView::getLabelXPos() +{ + return getIndentation(); +} + +void LLPersonView::addToFolder(LLFolderViewFolder * person_folder_view) +{ + LLFolderViewItem::addToFolder(person_folder_view); + //Added item to folder, could change folder's mHasVisibleChildren flag so call arrange + person_folder_view->requestArrange(); +} + +LLPersonView::~LLPersonView() +{ + +} + +void LLPersonView::draw() +{ + static LLUIColor sFgColor = LLUIColorTable::instance().getColor("MenuItemEnabledColor", DEFAULT_WHITE); + static LLUIColor sHighlightFgColor = LLUIColorTable::instance().getColor("MenuItemHighlightFgColor", DEFAULT_WHITE); + + const LLFontGL * font = LLFontGL::getFontSansSerifSmall(); + F32 text_left = (F32)getLabelXPos(); + F32 y = (F32)getRect().getHeight() - font->getLineHeight() - (F32)mTextPad; + LLColor4 color = color = mIsSelected ? sHighlightFgColor : sFgColor; + F32 right_x = 0; + + drawLabel(font, text_left, y, color, right_x); + + LLView::draw(); +} diff --git a/indra/newview/llpersonfolderview.h b/indra/newview/llpersonfolderview.h new file mode 100644 index 0000000000..de032ac674 --- /dev/null +++ b/indra/newview/llpersonfolderview.h @@ -0,0 +1,93 @@ +/** +* @file llpersonfolderview.h +* @brief Header file for llpersonfolderview +* @author Gilbert@lindenlab.com +* +* $LicenseInfo:firstyear=2013&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2013, Linden Research, Inc. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; +* version 2.1 of the License only. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +* +* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA +* $/LicenseInfo$ +*/ +#ifndef LL_LLPERSONFOLDERVIEW_H +#define LL_LLPERSONFOLDERVIEW_H + +#include "llavatariconctrl.h" +#include "llfolderviewitem.h" + +class LLPersonFolderView : public LLFolderViewFolder +{ + +public: + + struct Params : public LLInitParam::Block + { + Params(); + }; + + LLPersonFolderView(const LLPersonFolderView::Params& p); + virtual ~LLPersonFolderView(); + + S32 getLabelXPos(); + + +protected: + void draw(); + +private: +}; + +class LLPersonView : public LLFolderViewItem +{ + +public: + + struct Params : public LLInitParam::Block + { + Params(); + }; + + LLPersonView(const LLPersonView::Params& p); + virtual ~LLPersonView(); + + S32 getLabelXPos(); + void addToFolder(LLFolderViewFolder * person_folder_view); + +protected: + void draw(); + +private: + + LLAvatarIconCtrl* mAvatarIcon; + LLButton * mInfoBtn; + + typedef enum e_avatar_item_child { + ALIC_SPEAKER_INDICATOR, + ALIC_INFO_BUTTON, + ALIC_COUNT, + } EAvatarListItemChildIndex; + + static bool sStaticInitialized; // this variable is introduced to improve code readability + static S32 sChildrenWidths[ALIC_COUNT]; + //static void initChildrenWidths(LLConversationViewParticipant* self); + //void updateChildren(); + //LLView* getItemChildView(EAvatarListItemChildIndex child_view_index); +}; + +#endif // LL_LLPERSONFOLDERVIEW_H + diff --git a/indra/newview/llpersonmodelcommon.cpp b/indra/newview/llpersonmodelcommon.cpp new file mode 100644 index 0000000000..62208b98c9 --- /dev/null +++ b/indra/newview/llpersonmodelcommon.cpp @@ -0,0 +1,158 @@ +/** +* @file llavatarfolder.cpp +* @brief Implementation of llavatarfolder +* @author Gilbert@lindenlab.com +* +* $LicenseInfo:firstyear=2013&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2013, Linden Research, Inc. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; +* version 2.1 of the License only. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +* +* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA +* $/LicenseInfo$ +*/ + +#include "llviewerprecompiledheaders.h" + +#include "llpersonmodelcommon.h" + +#include "llevents.h" +#include "llsdutil.h" + +// +// LLPersonModelCommon +// + +LLPersonModelCommon::LLPersonModelCommon(std::string display_name, LLFolderViewModelInterface& root_view_model) : +LLFolderViewModelItemCommon(root_view_model), + mName(display_name) +{ +} + +LLPersonModelCommon::LLPersonModelCommon(LLFolderViewModelInterface& root_view_model) : +LLFolderViewModelItemCommon(root_view_model), + mName(""), + mID(LLUUID().generateNewID()) +{ +} + +LLPersonModelCommon::~LLPersonModelCommon() +{ + +} + +void LLPersonModelCommon::postEvent(const std::string& event_type, LLPersonFolderModel* folder, LLPersonModel* person) +{ + LLUUID folder_id = folder->getID(); + LLUUID person_id = person->getID(); + LLSD event(LLSDMap("type", event_type)("folder_id", folder_id)("person_id", person_id)); + LLEventPumps::instance().obtain("ConversationsEventsTwo").post(event); +} + +// Virtual action callbacks +void LLPersonModelCommon::performAction(LLInventoryModel* model, std::string action) +{ +} + +void LLPersonModelCommon::openItem( void ) +{ +} + +void LLPersonModelCommon::closeItem( void ) +{ +} + +void LLPersonModelCommon::previewItem( void ) +{ +} + +void LLPersonModelCommon::showProperties(void) +{ +} + +// +// LLPersonFolderModel +// + +LLPersonFolderModel::LLPersonFolderModel(std::string display_name, LLFolderViewModelInterface& root_view_model) : +LLPersonModelCommon(display_name,root_view_model) +{ + +} + +LLPersonFolderModel::LLPersonFolderModel(LLFolderViewModelInterface& root_view_model) : +LLPersonModelCommon(root_view_model) +{ + +} + +void LLPersonFolderModel::addParticipant(LLPersonModel* participant) +{ + addChild(participant); + postEvent("add_participant", this, participant); +} + +void LLPersonFolderModel::removeParticipant(LLPersonModel* participant) +{ + removeChild(participant); + postEvent("remove_participant", this, participant); +} + +void LLPersonFolderModel::removeParticipant(const LLUUID& participant_id) +{ + LLPersonModel* participant = findParticipant(participant_id); + if (participant) + { + removeParticipant(participant); + } +} + +void LLPersonFolderModel::clearParticipants() +{ + clearChildren(); +} + +LLPersonModel* LLPersonFolderModel::findParticipant(const LLUUID& person_id) +{ + LLPersonModel * person_model = NULL; + child_list_t::iterator iter; + + for(iter = mChildren.begin(); iter != mChildren.end(); ++iter) + { + person_model = static_cast(*iter); + + if(person_model->getID() == person_id) + { + break; + } + } + + return iter == mChildren.end() ? NULL : person_model; +} + +// +// LLConversationItemParticipant +// + +LLPersonModel::LLPersonModel(std::string display_name, LLFolderViewModelInterface& root_view_model) : +LLPersonModelCommon(display_name,root_view_model) +{ +} + +LLPersonModel::LLPersonModel(LLFolderViewModelInterface& root_view_model) : +LLPersonModelCommon(root_view_model) +{ +} diff --git a/indra/newview/llpersonmodelcommon.h b/indra/newview/llpersonmodelcommon.h new file mode 100644 index 0000000000..76ea139479 --- /dev/null +++ b/indra/newview/llpersonmodelcommon.h @@ -0,0 +1,132 @@ +/** +* @file llavatarfolder.h +* @brief Header file for llavatarfolder +* @author Gilbert@lindenlab.com +* +* $LicenseInfo:firstyear=2013&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2013, Linden Research, Inc. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; +* version 2.1 of the License only. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +* +* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA +* $/LicenseInfo$ +*/ +#ifndef LL_LLPERSONMODELCOMMON_H +#define LL_LLPERSONMODELCOMMON_H + +#include "../llui/llfolderviewitem.h" +#include "../llui/llfolderviewmodel.h" + +class LLPersonFolderModel; +class LLPersonModel; + +// Conversation items: we hold a list of those and create an LLFolderViewItem widget for each +// that we tuck into the mConversationsListPanel. +class LLPersonModelCommon : public LLFolderViewModelItemCommon +{ +public: + + LLPersonModelCommon(std::string name, LLFolderViewModelInterface& root_view_model); + LLPersonModelCommon(LLFolderViewModelInterface& root_view_model); + virtual ~LLPersonModelCommon(); + + // Stub those things we won't really be using in this conversation context + virtual const std::string& getName() const { return mName; } + virtual const std::string& getDisplayName() const { return mName; } + virtual const std::string& getSearchableName() const { return mName; } + virtual LLPointer getIcon() const { return NULL; } + virtual LLPointer getOpenIcon() const { return getIcon(); } + virtual LLFontGL::StyleFlags getLabelStyle() const { return LLFontGL::NORMAL; } + virtual std::string getLabelSuffix() const { return LLStringUtil::null; } + virtual BOOL isItemRenameable() const { return TRUE; } + virtual BOOL renameItem(const std::string& new_name) { mName = new_name; return TRUE; } + virtual BOOL isItemMovable( void ) const { return FALSE; } + virtual BOOL isItemRemovable( void ) const { return FALSE; } + virtual BOOL isItemInTrash( void) const { return FALSE; } + virtual BOOL removeItem() { return FALSE; } + virtual void removeBatch(std::vector& batch) { } + virtual void move( LLFolderViewModelItem* parent_listener ) { } + virtual BOOL isItemCopyable() const { return FALSE; } + virtual BOOL copyToClipboard() const { return FALSE; } + virtual BOOL cutToClipboard() const { return FALSE; } + virtual BOOL isClipboardPasteable() const { return FALSE; } + virtual void pasteFromClipboard() { } + virtual void pasteLinkFromClipboard() { } + virtual void buildContextMenu(LLMenuGL& menu, U32 flags) { } + virtual BOOL isUpToDate() const { return TRUE; } + virtual bool hasChildren() const { return FALSE; } + + virtual bool potentiallyVisible() { return true; } + virtual bool filter( LLFolderViewFilter& filter) { return false; } + virtual bool descendantsPassedFilter(S32 filter_generation = -1) { return true; } + virtual void setPassedFilter(bool passed, S32 filter_generation, std::string::size_type string_offset = std::string::npos, std::string::size_type string_size = 0) { } + virtual bool passedFilter(S32 filter_generation = -1) { return true; } + + // The action callbacks + virtual void performAction(LLInventoryModel* model, std::string action); + virtual void openItem( void ); + virtual void closeItem( void ); + virtual void previewItem( void ); + virtual void selectItem(void) { } + virtual void showProperties(void); + + // This method will be called to determine if a drop can be + // performed, and will set drop to TRUE if a drop is + // requested. + // Returns TRUE if a drop is possible/happened, FALSE otherwise. + virtual BOOL dragOrDrop(MASK mask, BOOL drop, + EDragAndDropType cargo_type, + void* cargo_data, + std::string& tooltip_msg) { return FALSE; } + + const LLUUID& getID() {return mID;} + void postEvent(const std::string& event_type, LLPersonFolderModel* session, LLPersonModel* participant); + +protected: + + std::string mName; // Name of the session or the participant + LLUUID mID; +}; + +class LLPersonFolderModel : public LLPersonModelCommon +{ +public: + LLPersonFolderModel(std::string display_name, LLFolderViewModelInterface& root_view_model); + LLPersonFolderModel(LLFolderViewModelInterface& root_view_model); + + LLPointer getIcon() const { return NULL; } + void addParticipant(LLPersonModel* participant); + void removeParticipant(LLPersonModel* participant); + void removeParticipant(const LLUUID& participant_id); + void clearParticipants(); + LLPersonModel* findParticipant(const LLUUID& person_id); + +private: +}; + +class LLPersonModel : public LLPersonModelCommon +{ +public: + LLPersonModel(std::string display_name, LLFolderViewModelInterface& root_view_model); + LLPersonModel(LLFolderViewModelInterface& root_view_model); + +private: + +}; + + +#endif // LL_LLPERSONMODELCOMMON_H + diff --git a/indra/newview/skins/default/xui/en/widgets/person_folder_view.xml b/indra/newview/skins/default/xui/en/widgets/person_folder_view.xml new file mode 100644 index 0000000000..bf22230ff9 --- /dev/null +++ b/indra/newview/skins/default/xui/en/widgets/person_folder_view.xml @@ -0,0 +1,13 @@ + + -- cgit v1.2.3 From 74f0d33dc1f81fe3d372da4b11799067349b64e7 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Mon, 22 Apr 2013 18:52:03 -0700 Subject: ACME-252: Created a folder view for the facebook connect tab --- indra/newview/llpersonfolderview.cpp | 4 ++-- indra/newview/skins/default/xui/en/widgets/person_folder_view.xml | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/indra/newview/llpersonfolderview.cpp b/indra/newview/llpersonfolderview.cpp index e1f1cbb1fa..97b2ce092b 100644 --- a/indra/newview/llpersonfolderview.cpp +++ b/indra/newview/llpersonfolderview.cpp @@ -43,7 +43,7 @@ LLFolderViewFolder(p) } S32 LLPersonFolderView::getLabelXPos() -{ +{ return getIndentation() + mArrowSize + 15;//Should be a .xml variable but causes crash; } @@ -55,7 +55,7 @@ LLPersonFolderView::~LLPersonFolderView() void LLPersonFolderView::draw() { static LLUIColor sFgColor = LLUIColorTable::instance().getColor("MenuItemEnabledColor", DEFAULT_WHITE); - static const LLFolderViewItem::Params& default_params = LLUICtrlFactory::getDefaultParams(); + static const LLFolderViewItem::Params& default_params = LLUICtrlFactory::getDefaultParams(); static LLUIColor sHighlightBgColor = LLUIColorTable::instance().getColor("MenuItemHighlightBgColor", DEFAULT_WHITE); static LLUIColor sFlashBgColor = LLUIColorTable::instance().getColor("MenuItemFlashBgColor", DEFAULT_WHITE); diff --git a/indra/newview/skins/default/xui/en/widgets/person_folder_view.xml b/indra/newview/skins/default/xui/en/widgets/person_folder_view.xml index bf22230ff9..46857ac700 100644 --- a/indra/newview/skins/default/xui/en/widgets/person_folder_view.xml +++ b/indra/newview/skins/default/xui/en/widgets/person_folder_view.xml @@ -1,13 +1,13 @@ -- cgit v1.2.3 From f8ce67f0e0cd9afe8bd9542ea97d01769b690ffa Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Tue, 23 Apr 2013 12:23:09 -0700 Subject: ACME-251 Create AvatarFolderItemView: Changed classes name from LLPersonFolder* to LLPersonTab* --- indra/newview/CMakeLists.txt | 4 +- indra/newview/llpanelpeople.cpp | 16 +-- indra/newview/llpanelpeople.h | 10 +- indra/newview/llpersonfolderview.cpp | 126 --------------------- indra/newview/llpersonfolderview.h | 93 --------------- indra/newview/llpersonmodelcommon.cpp | 20 ++-- indra/newview/llpersonmodelcommon.h | 10 +- indra/newview/llpersontabview.cpp | 126 +++++++++++++++++++++ indra/newview/llpersontabview.h | 93 +++++++++++++++ .../default/xui/en/widgets/person_folder_view.xml | 13 --- .../default/xui/en/widgets/person_tab_view.xml | 13 +++ 11 files changed, 262 insertions(+), 262 deletions(-) delete mode 100644 indra/newview/llpersonfolderview.cpp delete mode 100644 indra/newview/llpersonfolderview.h create mode 100644 indra/newview/llpersontabview.cpp create mode 100644 indra/newview/llpersontabview.h delete mode 100644 indra/newview/skins/default/xui/en/widgets/person_folder_view.xml create mode 100644 indra/newview/skins/default/xui/en/widgets/person_tab_view.xml diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 84e8811ce8..145affeb60 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -453,7 +453,7 @@ set(viewer_SOURCE_FILES llpathfindingpathtool.cpp llpersistentnotificationstorage.cpp llpersonmodelcommon.cpp - llpersonfolderview.cpp + llpersontabview.cpp llphysicsmotion.cpp llphysicsshapebuilderutil.cpp llplacesinventorybridge.cpp @@ -1032,7 +1032,7 @@ set(viewer_HEADER_FILES llpathfindingpathtool.h llpersistentnotificationstorage.h llpersonmodelcommon.h - llpersonfolderview.h + llpersontabview.h llphysicsmotion.h llphysicsshapebuilderutil.h llplacesinventorybridge.h diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index d2d1e602be..3f4ff39644 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -64,7 +64,7 @@ #include "llpanelpeoplemenus.h" #include "llparticipantlist.h" #include "llpersonmodelcommon.h" -#include "llpersonfolderview.h" +#include "llpersontabview.h" #include "llsidetraypanelcontainer.h" #include "llrecentpeople.h" #include "llviewercontrol.h" // for gSavedSettings @@ -725,13 +725,13 @@ BOOL LLPanelPeople::postBuild() //Create a session //LLSpeakerMgr* speaker_manager = (LLSpeakerMgr*)LLLocalSpeakerMgr::getInstance(); - LLPersonFolderModel* item = new LLPersonFolderModel("Facebook Friends", mConversationViewModel); - LLPersonFolderView::Params params; + LLPersonTabModel* item = new LLPersonTabModel("Facebook Friends", mConversationViewModel); + LLPersonTabView::Params params; params.name = item->getDisplayName(); params.root = mConversationsRoot; params.listener = item; params.tool_tip = params.name; - LLPersonFolderView * widget = LLUICtrlFactory::create(params); + LLPersonTabView * widget = LLUICtrlFactory::create(params); widget->addToFolder(mConversationsRoot); mPersonFolderModelMap[item->getID()] = item; @@ -1661,8 +1661,8 @@ bool LLPanelPeople::onConversationModelEvent(const LLSD& event) if(type == "add_participant") { - LLPersonFolderModel * person_folder_model = dynamic_cast(mPersonFolderModelMap[folder_id]); - LLPersonFolderView * person_folder_view = dynamic_cast(mPersonFolderViewMap[person_id]); + LLPersonTabModel * person_folder_model = dynamic_cast(mPersonFolderModelMap[folder_id]); + LLPersonTabView * person_folder_view = dynamic_cast(mPersonFolderViewMap[person_id]); if(person_folder_model) { @@ -1733,12 +1733,12 @@ void LLPanelPeople::addTestParticipant() { for(int i = 0; i < 300; ++i) { - LLPersonFolderModel * person_folder_model = dynamic_cast(mPersonFolderModelMap.begin()->second); + LLPersonTabModel * person_folder_model = dynamic_cast(mPersonFolderModelMap.begin()->second); addParticipantToModel(person_folder_model, LLUUID().generateNewID(), "EastBayGuy"); } } -void LLPanelPeople::addParticipantToModel(LLPersonFolderModel * person_folder_model, const LLUUID& agent_id, const std::string& name) +void LLPanelPeople::addParticipantToModel(LLPersonTabModel * person_folder_model, const LLUUID& agent_id, const std::string& name) { LLPersonModel* person_model = NULL; diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index 935171df2b..d112ac2ec7 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -45,13 +45,13 @@ class LLMenuButton; class LLTabContainer; class LLFolderView; -class LLPersonFolderModel; -class LLPersonFolderView; +class LLPersonTabModel; +class LLPersonTabView; class LLPersonView; class LLPersonModel; -typedef std::map person_folder_model_map; -typedef std::map person_folder_view_map; +typedef std::map person_folder_model_map; +typedef std::map person_folder_view_map; class LLPanelPeople : public LLPanel @@ -74,7 +74,7 @@ public: void openFacebookWeb(LLFloaterWebContent::Params& p); void showFacebookFriends(const LLSD& friends); void addTestParticipant(); - void addParticipantToModel(LLPersonFolderModel * session_model, const LLUUID& agent_id, const std::string& name); + void addParticipantToModel(LLPersonTabModel * session_model, const LLUUID& agent_id, const std::string& name); void hideFacebookFriends(); void loadFacebookFriends(); void tryToReconnectToFacebook(); diff --git a/indra/newview/llpersonfolderview.cpp b/indra/newview/llpersonfolderview.cpp deleted file mode 100644 index 97b2ce092b..0000000000 --- a/indra/newview/llpersonfolderview.cpp +++ /dev/null @@ -1,126 +0,0 @@ -/** -* @file llpersonfolderview.cpp -* @brief Implementation of llpersonfolderview -* @author Gilbert@lindenlab.com -* -* $LicenseInfo:firstyear=2013&license=viewerlgpl$ -* Second Life Viewer Source Code -* Copyright (C) 2013, Linden Research, Inc. -* -* This library is free software; you can redistribute it and/or -* modify it under the terms of the GNU Lesser General Public -* License as published by the Free Software Foundation; -* version 2.1 of the License only. -* -* This library is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public -* License along with this library; if not, write to the Free Software -* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -* -* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA -* $/LicenseInfo$ -*/ - -#include "llviewerprecompiledheaders.h" - -#include "llpersonfolderview.h" - -static LLDefaultChildRegistry::Register r_person_folder_view("person_folder_view"); - -const LLColor4U DEFAULT_WHITE(255, 255, 255); - -LLPersonFolderView::Params::Params() -{} - -LLPersonFolderView::LLPersonFolderView(const LLPersonFolderView::Params& p) : -LLFolderViewFolder(p) -{ - -} - -S32 LLPersonFolderView::getLabelXPos() -{ - return getIndentation() + mArrowSize + 15;//Should be a .xml variable but causes crash; -} - -LLPersonFolderView::~LLPersonFolderView() -{ - -} - -void LLPersonFolderView::draw() -{ - static LLUIColor sFgColor = LLUIColorTable::instance().getColor("MenuItemEnabledColor", DEFAULT_WHITE); - static const LLFolderViewItem::Params& default_params = LLUICtrlFactory::getDefaultParams(); - - static LLUIColor sHighlightBgColor = LLUIColorTable::instance().getColor("MenuItemHighlightBgColor", DEFAULT_WHITE); - static LLUIColor sFlashBgColor = LLUIColorTable::instance().getColor("MenuItemFlashBgColor", DEFAULT_WHITE); - static LLUIColor sFocusOutlineColor = LLUIColorTable::instance().getColor("MenuItemHighlightBgColor", DEFAULT_WHITE); - static LLUIColor sMouseOverColor = LLUIColorTable::instance().getColor("DkGray", DEFAULT_WHITE); - - const LLFontGL * font = LLFontGL::getFontSansSerif(); - F32 text_left = (F32)getLabelXPos(); - F32 y = (F32)getRect().getHeight() - font->getLineHeight() - (F32)mTextPad; - LLColor4 color = sFgColor; - F32 right_x = 0; - - drawHighlight(false, mIsSelected, sHighlightBgColor, sFlashBgColor, sFocusOutlineColor, sMouseOverColor); - - updateLabelRotation(); - drawOpenFolderArrow(default_params, sFgColor); - - drawLabel(font, text_left, y, color, right_x); - - LLView::draw(); -} - -// -// LLPersonFolderModel -// - - -LLPersonView::Params::Params() -{} - -LLPersonView::LLPersonView(const LLPersonView::Params& p) : -LLFolderViewItem(p) -{ - -} - -S32 LLPersonView::getLabelXPos() -{ - return getIndentation(); -} - -void LLPersonView::addToFolder(LLFolderViewFolder * person_folder_view) -{ - LLFolderViewItem::addToFolder(person_folder_view); - //Added item to folder, could change folder's mHasVisibleChildren flag so call arrange - person_folder_view->requestArrange(); -} - -LLPersonView::~LLPersonView() -{ - -} - -void LLPersonView::draw() -{ - static LLUIColor sFgColor = LLUIColorTable::instance().getColor("MenuItemEnabledColor", DEFAULT_WHITE); - static LLUIColor sHighlightFgColor = LLUIColorTable::instance().getColor("MenuItemHighlightFgColor", DEFAULT_WHITE); - - const LLFontGL * font = LLFontGL::getFontSansSerifSmall(); - F32 text_left = (F32)getLabelXPos(); - F32 y = (F32)getRect().getHeight() - font->getLineHeight() - (F32)mTextPad; - LLColor4 color = color = mIsSelected ? sHighlightFgColor : sFgColor; - F32 right_x = 0; - - drawLabel(font, text_left, y, color, right_x); - - LLView::draw(); -} diff --git a/indra/newview/llpersonfolderview.h b/indra/newview/llpersonfolderview.h deleted file mode 100644 index de032ac674..0000000000 --- a/indra/newview/llpersonfolderview.h +++ /dev/null @@ -1,93 +0,0 @@ -/** -* @file llpersonfolderview.h -* @brief Header file for llpersonfolderview -* @author Gilbert@lindenlab.com -* -* $LicenseInfo:firstyear=2013&license=viewerlgpl$ -* Second Life Viewer Source Code -* Copyright (C) 2013, Linden Research, Inc. -* -* This library is free software; you can redistribute it and/or -* modify it under the terms of the GNU Lesser General Public -* License as published by the Free Software Foundation; -* version 2.1 of the License only. -* -* This library is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public -* License along with this library; if not, write to the Free Software -* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -* -* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA -* $/LicenseInfo$ -*/ -#ifndef LL_LLPERSONFOLDERVIEW_H -#define LL_LLPERSONFOLDERVIEW_H - -#include "llavatariconctrl.h" -#include "llfolderviewitem.h" - -class LLPersonFolderView : public LLFolderViewFolder -{ - -public: - - struct Params : public LLInitParam::Block - { - Params(); - }; - - LLPersonFolderView(const LLPersonFolderView::Params& p); - virtual ~LLPersonFolderView(); - - S32 getLabelXPos(); - - -protected: - void draw(); - -private: -}; - -class LLPersonView : public LLFolderViewItem -{ - -public: - - struct Params : public LLInitParam::Block - { - Params(); - }; - - LLPersonView(const LLPersonView::Params& p); - virtual ~LLPersonView(); - - S32 getLabelXPos(); - void addToFolder(LLFolderViewFolder * person_folder_view); - -protected: - void draw(); - -private: - - LLAvatarIconCtrl* mAvatarIcon; - LLButton * mInfoBtn; - - typedef enum e_avatar_item_child { - ALIC_SPEAKER_INDICATOR, - ALIC_INFO_BUTTON, - ALIC_COUNT, - } EAvatarListItemChildIndex; - - static bool sStaticInitialized; // this variable is introduced to improve code readability - static S32 sChildrenWidths[ALIC_COUNT]; - //static void initChildrenWidths(LLConversationViewParticipant* self); - //void updateChildren(); - //LLView* getItemChildView(EAvatarListItemChildIndex child_view_index); -}; - -#endif // LL_LLPERSONFOLDERVIEW_H - diff --git a/indra/newview/llpersonmodelcommon.cpp b/indra/newview/llpersonmodelcommon.cpp index 62208b98c9..764dd08115 100644 --- a/indra/newview/llpersonmodelcommon.cpp +++ b/indra/newview/llpersonmodelcommon.cpp @@ -54,7 +54,7 @@ LLPersonModelCommon::~LLPersonModelCommon() } -void LLPersonModelCommon::postEvent(const std::string& event_type, LLPersonFolderModel* folder, LLPersonModel* person) +void LLPersonModelCommon::postEvent(const std::string& event_type, LLPersonTabModel* folder, LLPersonModel* person) { LLUUID folder_id = folder->getID(); LLUUID person_id = person->getID(); @@ -84,34 +84,34 @@ void LLPersonModelCommon::showProperties(void) } // -// LLPersonFolderModel +// LLPersonTabModel // -LLPersonFolderModel::LLPersonFolderModel(std::string display_name, LLFolderViewModelInterface& root_view_model) : +LLPersonTabModel::LLPersonTabModel(std::string display_name, LLFolderViewModelInterface& root_view_model) : LLPersonModelCommon(display_name,root_view_model) { } -LLPersonFolderModel::LLPersonFolderModel(LLFolderViewModelInterface& root_view_model) : +LLPersonTabModel::LLPersonTabModel(LLFolderViewModelInterface& root_view_model) : LLPersonModelCommon(root_view_model) { } -void LLPersonFolderModel::addParticipant(LLPersonModel* participant) +void LLPersonTabModel::addParticipant(LLPersonModel* participant) { addChild(participant); postEvent("add_participant", this, participant); } -void LLPersonFolderModel::removeParticipant(LLPersonModel* participant) +void LLPersonTabModel::removeParticipant(LLPersonModel* participant) { removeChild(participant); postEvent("remove_participant", this, participant); } -void LLPersonFolderModel::removeParticipant(const LLUUID& participant_id) +void LLPersonTabModel::removeParticipant(const LLUUID& participant_id) { LLPersonModel* participant = findParticipant(participant_id); if (participant) @@ -120,12 +120,12 @@ void LLPersonFolderModel::removeParticipant(const LLUUID& participant_id) } } -void LLPersonFolderModel::clearParticipants() +void LLPersonTabModel::clearParticipants() { clearChildren(); } -LLPersonModel* LLPersonFolderModel::findParticipant(const LLUUID& person_id) +LLPersonModel* LLPersonTabModel::findParticipant(const LLUUID& person_id) { LLPersonModel * person_model = NULL; child_list_t::iterator iter; @@ -144,7 +144,7 @@ LLPersonModel* LLPersonFolderModel::findParticipant(const LLUUID& person_id) } // -// LLConversationItemParticipant +// LLPersonModel // LLPersonModel::LLPersonModel(std::string display_name, LLFolderViewModelInterface& root_view_model) : diff --git a/indra/newview/llpersonmodelcommon.h b/indra/newview/llpersonmodelcommon.h index 76ea139479..866d863581 100644 --- a/indra/newview/llpersonmodelcommon.h +++ b/indra/newview/llpersonmodelcommon.h @@ -30,7 +30,7 @@ #include "../llui/llfolderviewitem.h" #include "../llui/llfolderviewmodel.h" -class LLPersonFolderModel; +class LLPersonTabModel; class LLPersonModel; // Conversation items: we hold a list of those and create an LLFolderViewItem widget for each @@ -93,7 +93,7 @@ public: std::string& tooltip_msg) { return FALSE; } const LLUUID& getID() {return mID;} - void postEvent(const std::string& event_type, LLPersonFolderModel* session, LLPersonModel* participant); + void postEvent(const std::string& event_type, LLPersonTabModel* session, LLPersonModel* participant); protected: @@ -101,11 +101,11 @@ protected: LLUUID mID; }; -class LLPersonFolderModel : public LLPersonModelCommon +class LLPersonTabModel : public LLPersonModelCommon { public: - LLPersonFolderModel(std::string display_name, LLFolderViewModelInterface& root_view_model); - LLPersonFolderModel(LLFolderViewModelInterface& root_view_model); + LLPersonTabModel(std::string display_name, LLFolderViewModelInterface& root_view_model); + LLPersonTabModel(LLFolderViewModelInterface& root_view_model); LLPointer getIcon() const { return NULL; } void addParticipant(LLPersonModel* participant); diff --git a/indra/newview/llpersontabview.cpp b/indra/newview/llpersontabview.cpp new file mode 100644 index 0000000000..156ff591f9 --- /dev/null +++ b/indra/newview/llpersontabview.cpp @@ -0,0 +1,126 @@ +/** +* @file llpersontabview.cpp +* @brief Implementation of llpersontabview +* @author Gilbert@lindenlab.com +* +* $LicenseInfo:firstyear=2013&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2013, Linden Research, Inc. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; +* version 2.1 of the License only. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +* +* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA +* $/LicenseInfo$ +*/ + +#include "llviewerprecompiledheaders.h" + +#include "llpersontabview.h" + +static LLDefaultChildRegistry::Register r_person_folder_view("person_folder_view"); + +const LLColor4U DEFAULT_WHITE(255, 255, 255); + +LLPersonTabView::Params::Params() +{} + +LLPersonTabView::LLPersonTabView(const LLPersonTabView::Params& p) : +LLFolderViewFolder(p) +{ + +} + +S32 LLPersonTabView::getLabelXPos() +{ + return getIndentation() + mArrowSize + 15;//Should be a .xml variable but causes crash; +} + +LLPersonTabView::~LLPersonTabView() +{ + +} + +void LLPersonTabView::draw() +{ + static LLUIColor sFgColor = LLUIColorTable::instance().getColor("MenuItemEnabledColor", DEFAULT_WHITE); + static const LLFolderViewItem::Params& default_params = LLUICtrlFactory::getDefaultParams(); + + static LLUIColor sHighlightBgColor = LLUIColorTable::instance().getColor("MenuItemHighlightBgColor", DEFAULT_WHITE); + static LLUIColor sFlashBgColor = LLUIColorTable::instance().getColor("MenuItemFlashBgColor", DEFAULT_WHITE); + static LLUIColor sFocusOutlineColor = LLUIColorTable::instance().getColor("MenuItemHighlightBgColor", DEFAULT_WHITE); + static LLUIColor sMouseOverColor = LLUIColorTable::instance().getColor("DkGray", DEFAULT_WHITE); + + const LLFontGL * font = LLFontGL::getFontSansSerif(); + F32 text_left = (F32)getLabelXPos(); + F32 y = (F32)getRect().getHeight() - font->getLineHeight() - (F32)mTextPad; + LLColor4 color = sFgColor; + F32 right_x = 0; + + drawHighlight(false, mIsSelected, sHighlightBgColor, sFlashBgColor, sFocusOutlineColor, sMouseOverColor); + + updateLabelRotation(); + drawOpenFolderArrow(default_params, sFgColor); + + drawLabel(font, text_left, y, color, right_x); + + LLView::draw(); +} + +// +// LLPersonView +// + + +LLPersonView::Params::Params() +{} + +LLPersonView::LLPersonView(const LLPersonView::Params& p) : +LLFolderViewItem(p) +{ + +} + +S32 LLPersonView::getLabelXPos() +{ + return getIndentation(); +} + +void LLPersonView::addToFolder(LLFolderViewFolder * person_folder_view) +{ + LLFolderViewItem::addToFolder(person_folder_view); + //Added item to folder, could change folder's mHasVisibleChildren flag so call arrange + person_folder_view->requestArrange(); +} + +LLPersonView::~LLPersonView() +{ + +} + +void LLPersonView::draw() +{ + static LLUIColor sFgColor = LLUIColorTable::instance().getColor("MenuItemEnabledColor", DEFAULT_WHITE); + static LLUIColor sHighlightFgColor = LLUIColorTable::instance().getColor("MenuItemHighlightFgColor", DEFAULT_WHITE); + + const LLFontGL * font = LLFontGL::getFontSansSerifSmall(); + F32 text_left = (F32)getLabelXPos(); + F32 y = (F32)getRect().getHeight() - font->getLineHeight() - (F32)mTextPad; + LLColor4 color = color = mIsSelected ? sHighlightFgColor : sFgColor; + F32 right_x = 0; + + drawLabel(font, text_left, y, color, right_x); + + LLView::draw(); +} diff --git a/indra/newview/llpersontabview.h b/indra/newview/llpersontabview.h new file mode 100644 index 0000000000..9aabad26fc --- /dev/null +++ b/indra/newview/llpersontabview.h @@ -0,0 +1,93 @@ +/** +* @file llpersontabview.h +* @brief Header file for llpersontabview +* @author Gilbert@lindenlab.com +* +* $LicenseInfo:firstyear=2013&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2013, Linden Research, Inc. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; +* version 2.1 of the License only. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +* +* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA +* $/LicenseInfo$ +*/ +#ifndef LL_LLPERSONTABVIEW_H +#define LL_LLPERSONTABVIEW_H + +#include "llavatariconctrl.h" +#include "llfolderviewitem.h" + +class LLPersonTabView : public LLFolderViewFolder +{ + +public: + + struct Params : public LLInitParam::Block + { + Params(); + }; + + LLPersonTabView(const LLPersonTabView::Params& p); + virtual ~LLPersonTabView(); + + S32 getLabelXPos(); + + +protected: + void draw(); + +private: +}; + +class LLPersonView : public LLFolderViewItem +{ + +public: + + struct Params : public LLInitParam::Block + { + Params(); + }; + + LLPersonView(const LLPersonView::Params& p); + virtual ~LLPersonView(); + + S32 getLabelXPos(); + void addToFolder(LLFolderViewFolder * person_folder_view); + +protected: + void draw(); + +private: + + LLAvatarIconCtrl* mAvatarIcon; + LLButton * mInfoBtn; + + typedef enum e_avatar_item_child { + ALIC_SPEAKER_INDICATOR, + ALIC_INFO_BUTTON, + ALIC_COUNT, + } EAvatarListItemChildIndex; + + static bool sStaticInitialized; // this variable is introduced to improve code readability + static S32 sChildrenWidths[ALIC_COUNT]; + //static void initChildrenWidths(LLConversationViewParticipant* self); + //void updateChildren(); + //LLView* getItemChildView(EAvatarListItemChildIndex child_view_index); +}; + +#endif // LL_LLPERSONTABVIEW_H + diff --git a/indra/newview/skins/default/xui/en/widgets/person_folder_view.xml b/indra/newview/skins/default/xui/en/widgets/person_folder_view.xml deleted file mode 100644 index 46857ac700..0000000000 --- a/indra/newview/skins/default/xui/en/widgets/person_folder_view.xml +++ /dev/null @@ -1,13 +0,0 @@ - - diff --git a/indra/newview/skins/default/xui/en/widgets/person_tab_view.xml b/indra/newview/skins/default/xui/en/widgets/person_tab_view.xml new file mode 100644 index 0000000000..46857ac700 --- /dev/null +++ b/indra/newview/skins/default/xui/en/widgets/person_tab_view.xml @@ -0,0 +1,13 @@ + + -- cgit v1.2.3 From 2ca3612dae3258b489df8e47879f8339e24947ba Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Tue, 23 Apr 2013 14:02:36 -0700 Subject: ACME-251 Create AvatarFolderItemView: When making the folderview using LLPersonModelCommon instead of LLConverationItem. Also the .xml file file read in for LLPersonTabView was incorrect, now using person_tab_view.xml. And lastly made a new file called llpersonfolderview which which be the implementation of folderview. --- indra/newview/CMakeLists.txt | 2 ++ indra/newview/llpanelpeople.cpp | 2 +- indra/newview/llpersonfolderview.cpp | 32 +++++++++++++++++++++++++++++++ indra/newview/llpersonfolderview.h | 37 ++++++++++++++++++++++++++++++++++++ indra/newview/llpersontabview.cpp | 2 +- 5 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 indra/newview/llpersonfolderview.cpp create mode 100644 indra/newview/llpersonfolderview.h diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 145affeb60..52ce82560b 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -452,6 +452,7 @@ set(viewer_SOURCE_FILES llpathfindingobjectlist.cpp llpathfindingpathtool.cpp llpersistentnotificationstorage.cpp + llpersonfolderview.cpp llpersonmodelcommon.cpp llpersontabview.cpp llphysicsmotion.cpp @@ -1031,6 +1032,7 @@ set(viewer_HEADER_FILES llpathfindingobjectlist.h llpathfindingpathtool.h llpersistentnotificationstorage.h + llpersonfolderview.h llpersonmodelcommon.h llpersontabview.h llphysicsmotion.h diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 3f4ff39644..91f7c61088 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -695,7 +695,7 @@ BOOL LLPanelPeople::postBuild() LLPanel * socialtwo_tab = getChild(FBCTESTTWO_TAB_NAME); //Create folder view - LLConversationItem* base_item = new LLConversationItem(mConversationViewModel); + LLPersonModelCommon* base_item = new LLPersonModelCommon(mConversationViewModel); LLFolderView::Params folder_view_params(LLUICtrlFactory::getDefaultParams()); folder_view_params.parent_panel = friends_tab; diff --git a/indra/newview/llpersonfolderview.cpp b/indra/newview/llpersonfolderview.cpp new file mode 100644 index 0000000000..e04eda2658 --- /dev/null +++ b/indra/newview/llpersonfolderview.cpp @@ -0,0 +1,32 @@ +/** +* @file llpersonfolderview.cpp +* @brief Implementation of llpersonfolderview +* @author Gilbert@lindenlab.com +* +* $LicenseInfo:firstyear=2013&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2013, Linden Research, Inc. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; +* version 2.1 of the License only. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +* +* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA +* $/LicenseInfo$ +*/ + +#include "llviewerprecompiledheaders.h" + +#include "llpersonfolderview.h" + + diff --git a/indra/newview/llpersonfolderview.h b/indra/newview/llpersonfolderview.h new file mode 100644 index 0000000000..f96e45abc6 --- /dev/null +++ b/indra/newview/llpersonfolderview.h @@ -0,0 +1,37 @@ +/** +* @file llpersonfolderview.h +* @brief Header file for llpersonfolderview +* @author Gilbert@lindenlab.com +* +* $LicenseInfo:firstyear=2013&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2013, Linden Research, Inc. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; +* version 2.1 of the License only. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +* +* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA +* $/LicenseInfo$ +*/ +#ifndef LL_LLPERSONFOLDERVIEW_H +#define LL_LLPERSONFOLDERVIEW_H + +#include "llfolderview.h" + +#endif // LL_LLPERSONFOLDERVIEW_H + +class LLPersonFolderView : public LLFolderView +{ + +}; diff --git a/indra/newview/llpersontabview.cpp b/indra/newview/llpersontabview.cpp index 156ff591f9..72a95d3f4c 100644 --- a/indra/newview/llpersontabview.cpp +++ b/indra/newview/llpersontabview.cpp @@ -29,7 +29,7 @@ #include "llpersontabview.h" -static LLDefaultChildRegistry::Register r_person_folder_view("person_folder_view"); +static LLDefaultChildRegistry::Register r_person_tab_view("person_tab_view"); const LLColor4U DEFAULT_WHITE(255, 255, 255); -- cgit v1.2.3 From 1a5ef465ef4059e05a21aae0aa2c6de610f7485f Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Tue, 23 Apr 2013 17:14:13 -0700 Subject: ACME-251 Create AvatarFolderItemView: Now the facebook friends tab is using LLPersonFolderViewModel instead of mConversationViewModel --- indra/newview/llpanelpeople.cpp | 8 ++-- indra/newview/llpanelpeople.h | 4 +- indra/newview/llpersonfolderview.cpp | 32 ---------------- indra/newview/llpersonfolderview.h | 37 ------------------ indra/newview/llpersonmodelcommon.h | 73 ++++++++++++++++++++++++++++++++++++ 5 files changed, 79 insertions(+), 75 deletions(-) delete mode 100644 indra/newview/llpersonfolderview.cpp delete mode 100644 indra/newview/llpersonfolderview.h diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 91f7c61088..02a286b880 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -695,12 +695,12 @@ BOOL LLPanelPeople::postBuild() LLPanel * socialtwo_tab = getChild(FBCTESTTWO_TAB_NAME); //Create folder view - LLPersonModelCommon* base_item = new LLPersonModelCommon(mConversationViewModel); + LLPersonModelCommon* base_item = new LLPersonModelCommon(mPersonFolderViewModel); LLFolderView::Params folder_view_params(LLUICtrlFactory::getDefaultParams()); folder_view_params.parent_panel = friends_tab; folder_view_params.listener = base_item; - folder_view_params.view_model = &mConversationViewModel; + folder_view_params.view_model = &mPersonFolderViewModel; folder_view_params.root = NULL; folder_view_params.use_ellipses = false; folder_view_params.options_menu = "menu_conversation.xml"; @@ -725,7 +725,7 @@ BOOL LLPanelPeople::postBuild() //Create a session //LLSpeakerMgr* speaker_manager = (LLSpeakerMgr*)LLLocalSpeakerMgr::getInstance(); - LLPersonTabModel* item = new LLPersonTabModel("Facebook Friends", mConversationViewModel); + LLPersonTabModel* item = new LLPersonTabModel("Facebook Friends", mPersonFolderViewModel); LLPersonTabView::Params params; params.name = item->getDisplayName(); params.root = mConversationsRoot; @@ -1742,7 +1742,7 @@ void LLPanelPeople::addParticipantToModel(LLPersonTabModel * person_folder_model { LLPersonModel* person_model = NULL; - person_model = new LLPersonModel(name, mConversationViewModel); + person_model = new LLPersonModel(name, mPersonFolderViewModel); person_folder_model->addParticipant(person_model); } diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index d112ac2ec7..f1fa7ec981 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -30,7 +30,7 @@ #include #include "llcallingcard.h" // for avatar tracker -#include "llconversationmodel.h" +#include "llpersonmodelcommon.h" #include "llevents.h" #include "llfloaterwebcontent.h" #include "llvoiceclient.h" @@ -191,7 +191,7 @@ private: person_folder_model_map mPersonFolderModelMap; person_folder_view_map mPersonFolderViewMap; - LLConversationViewModel mConversationViewModel; + LLPersonFolderViewModel mPersonFolderViewModel; LLFolderView* mConversationsRoot; LLEventStream mConversationsEventStream; }; diff --git a/indra/newview/llpersonfolderview.cpp b/indra/newview/llpersonfolderview.cpp deleted file mode 100644 index e04eda2658..0000000000 --- a/indra/newview/llpersonfolderview.cpp +++ /dev/null @@ -1,32 +0,0 @@ -/** -* @file llpersonfolderview.cpp -* @brief Implementation of llpersonfolderview -* @author Gilbert@lindenlab.com -* -* $LicenseInfo:firstyear=2013&license=viewerlgpl$ -* Second Life Viewer Source Code -* Copyright (C) 2013, Linden Research, Inc. -* -* This library is free software; you can redistribute it and/or -* modify it under the terms of the GNU Lesser General Public -* License as published by the Free Software Foundation; -* version 2.1 of the License only. -* -* This library is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public -* License along with this library; if not, write to the Free Software -* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -* -* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA -* $/LicenseInfo$ -*/ - -#include "llviewerprecompiledheaders.h" - -#include "llpersonfolderview.h" - - diff --git a/indra/newview/llpersonfolderview.h b/indra/newview/llpersonfolderview.h deleted file mode 100644 index f96e45abc6..0000000000 --- a/indra/newview/llpersonfolderview.h +++ /dev/null @@ -1,37 +0,0 @@ -/** -* @file llpersonfolderview.h -* @brief Header file for llpersonfolderview -* @author Gilbert@lindenlab.com -* -* $LicenseInfo:firstyear=2013&license=viewerlgpl$ -* Second Life Viewer Source Code -* Copyright (C) 2013, Linden Research, Inc. -* -* This library is free software; you can redistribute it and/or -* modify it under the terms of the GNU Lesser General Public -* License as published by the Free Software Foundation; -* version 2.1 of the License only. -* -* This library is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public -* License along with this library; if not, write to the Free Software -* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -* -* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA -* $/LicenseInfo$ -*/ -#ifndef LL_LLPERSONFOLDERVIEW_H -#define LL_LLPERSONFOLDERVIEW_H - -#include "llfolderview.h" - -#endif // LL_LLPERSONFOLDERVIEW_H - -class LLPersonFolderView : public LLFolderView -{ - -}; diff --git a/indra/newview/llpersonmodelcommon.h b/indra/newview/llpersonmodelcommon.h index 866d863581..f3454df53f 100644 --- a/indra/newview/llpersonmodelcommon.h +++ b/indra/newview/llpersonmodelcommon.h @@ -127,6 +127,79 @@ private: }; +//Below code is just copied and adjusted from llconversationmodel.h, will need to investigate further + +class LLPersonViewFilter : public LLFolderViewFilter +{ +public: + + enum ESortOrderType + { + SO_NAME = 0, // Sort by name + SO_DATE = 0x1, // Sort by date (most recent) + SO_SESSION_TYPE = 0x2, // Sort by type (valid only for sessions) + SO_DISTANCE = 0x3, // Sort by distance (valid only for participants in nearby chat) + }; + // Default sort order is by type for sessions and by date for participants + static const U32 SO_DEFAULT = (SO_SESSION_TYPE << 16) | (SO_DATE); + + LLPersonViewFilter() { mEmpty = ""; } + ~LLPersonViewFilter() {} + + bool check(const LLFolderViewModelItem* item) { return true; } + bool checkFolder(const LLFolderViewModelItem* folder) const { return true; } + void setEmptyLookupMessage(const std::string& message) { } + std::string getEmptyLookupMessage() const { return mEmpty; } + bool showAllResults() const { return true; } + std::string::size_type getStringMatchOffset(LLFolderViewModelItem* item) const { return std::string::npos; } + std::string::size_type getFilterStringSize() const { return 0; } + + bool isActive() const { return false; } + bool isModified() const { return false; } + void clearModified() { } + const std::string& getName() const { return mEmpty; } + const std::string& getFilterText() { return mEmpty; } + void setModified(EFilterModified behavior = FILTER_RESTART) { } + + void setFilterCount(S32 count) { } + S32 getFilterCount() const { return 0; } + void decrementFilterCount() { } + + bool isDefault() const { return true; } + bool isNotDefault() const { return false; } + void markDefault() { } + void resetDefault() { } + + S32 getCurrentGeneration() const { return 0; } + S32 getFirstSuccessGeneration() const { return 0; } + S32 getFirstRequiredGeneration() const { return 0; } +private: + std::string mEmpty; +}; + +class LLPersonViewSort +{ +public: + LLPersonViewSort(U32 order = LLPersonViewFilter::SO_DEFAULT) : mSortOrder(order) { } + + bool operator()(const LLPersonModelCommon* const& a, const LLPersonModelCommon* const& b) const {return false;} + operator U32() const { return mSortOrder; } +private: + // Note: we're treating this value as a sort order bitmask as done in other places in the code (e.g. inventory) + U32 mSortOrder; +}; + + +class LLPersonFolderViewModel + : public LLFolderViewModel +{ +public: + typedef LLFolderViewModel base_t; + + void sort(LLFolderViewFolder* folder) { base_t::sort(folder);} + bool startDrag(std::vector& items) { return false; } // We do not allow drag of conversation items +}; + #endif // LL_LLPERSONMODELCOMMON_H -- cgit v1.2.3 From 6aa08021c75d2674002c766b3bc02ea8773ee35f Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Tue, 23 Apr 2013 17:15:22 -0700 Subject: Fix build failures on Mac : suppress cruft that tripped gcc --- indra/newview/llpersontabview.cpp | 2 +- indra/newview/llsociallist.cpp | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/indra/newview/llpersontabview.cpp b/indra/newview/llpersontabview.cpp index 72a95d3f4c..fff72c7758 100644 --- a/indra/newview/llpersontabview.cpp +++ b/indra/newview/llpersontabview.cpp @@ -117,7 +117,7 @@ void LLPersonView::draw() const LLFontGL * font = LLFontGL::getFontSansSerifSmall(); F32 text_left = (F32)getLabelXPos(); F32 y = (F32)getRect().getHeight() - font->getLineHeight() - (F32)mTextPad; - LLColor4 color = color = mIsSelected ? sHighlightFgColor : sFgColor; + LLColor4 color = mIsSelected ? sHighlightFgColor : sFgColor; F32 right_x = 0; drawLabel(font, text_left, y, color, right_x); diff --git a/indra/newview/llsociallist.cpp b/indra/newview/llsociallist.cpp index bcf6d5a63c..9f827cf04f 100644 --- a/indra/newview/llsociallist.cpp +++ b/indra/newview/llsociallist.cpp @@ -1,4 +1,3 @@ -sDestroyImmediate /** * @file llsociallist.cpp * @brief Implementation of llsociallist @@ -37,7 +36,7 @@ sDestroyImmediate #include "llavatarnamecache.h" #include "lloutputmonitorctrl.h" #include "lltextutil.h" - + static LLDefaultChildRegistry::Register r("social_list"); LLSocialList::LLSocialList(const Params&p) : LLFlatListViewEx(p) -- cgit v1.2.3 From b9d9a40273dc574c95b3a83587c526eb140c9922 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Tue, 23 Apr 2013 17:16:43 -0700 Subject: ACME-251 Create AvatarFolderItemView: forgot to remove deleted files from indra/newview/CMakeLists.txt. --- indra/newview/CMakeLists.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 52ce82560b..145affeb60 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -452,7 +452,6 @@ set(viewer_SOURCE_FILES llpathfindingobjectlist.cpp llpathfindingpathtool.cpp llpersistentnotificationstorage.cpp - llpersonfolderview.cpp llpersonmodelcommon.cpp llpersontabview.cpp llphysicsmotion.cpp @@ -1032,7 +1031,6 @@ set(viewer_HEADER_FILES llpathfindingobjectlist.h llpathfindingpathtool.h llpersistentnotificationstorage.h - llpersonfolderview.h llpersonmodelcommon.h llpersontabview.h llphysicsmotion.h -- cgit v1.2.3 From 955cc72f90413d5c28023d7d6a0a4ac58d04e74a Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Tue, 23 Apr 2013 18:38:54 -0700 Subject: ACME-251 Create AvatarFolderItemView: Re-adding llpersonfolderview.h/cpp and to use a class called LLPersonFolderView to manage the creation of subwidgits and selection of tabs. --- indra/newview/CMakeLists.txt | 2 + indra/newview/llpanelpeople.cpp | 58 +++--------------------- indra/newview/llpanelpeople.h | 19 +------- indra/newview/llpersonfolderview.cpp | 88 ++++++++++++++++++++++++++++++++++++ indra/newview/llpersonfolderview.h | 63 ++++++++++++++++++++++++++ 5 files changed, 161 insertions(+), 69 deletions(-) create mode 100644 indra/newview/llpersonfolderview.cpp create mode 100644 indra/newview/llpersonfolderview.h diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 145affeb60..52ce82560b 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -452,6 +452,7 @@ set(viewer_SOURCE_FILES llpathfindingobjectlist.cpp llpathfindingpathtool.cpp llpersistentnotificationstorage.cpp + llpersonfolderview.cpp llpersonmodelcommon.cpp llpersontabview.cpp llphysicsmotion.cpp @@ -1031,6 +1032,7 @@ set(viewer_HEADER_FILES llpathfindingobjectlist.h llpathfindingpathtool.h llpersistentnotificationstorage.h + llpersonfolderview.h llpersonmodelcommon.h llpersontabview.h llphysicsmotion.h diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 02a286b880..c4ce56cb4f 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -63,6 +63,7 @@ #include "llnetmap.h" #include "llpanelpeoplemenus.h" #include "llparticipantlist.h" +#include "llpersonfolderview.h" #include "llpersonmodelcommon.h" #include "llpersontabview.h" #include "llsidetraypanelcontainer.h" @@ -549,7 +550,6 @@ LLPanelPeople::LLPanelPeople() : LLPanel(), mConnectedToFbc(false), mConversationsRoot(NULL), - mConversationsEventStream("ConversationsEventsTwo"), mTryToConnectToFbc(true), mTabContainer(NULL), mOnlineFriendList(NULL), @@ -605,8 +605,6 @@ LLPanelPeople::~LLPanelPeople() } if (mFbcTestBrowserHandle.get()) mFbcTestBrowserHandle.get()->die(); - - mConversationsEventStream.stopListening("ConversationsRefresh"); } void LLPanelPeople::onFriendsAccordionExpandedCollapsed(LLUICtrl* ctrl, const LLSD& param, LLAvatarList* avatar_list) @@ -697,7 +695,7 @@ BOOL LLPanelPeople::postBuild() //Create folder view LLPersonModelCommon* base_item = new LLPersonModelCommon(mPersonFolderViewModel); - LLFolderView::Params folder_view_params(LLUICtrlFactory::getDefaultParams()); + LLPersonFolderView::Params folder_view_params(LLUICtrlFactory::getDefaultParams()); folder_view_params.parent_panel = friends_tab; folder_view_params.listener = base_item; folder_view_params.view_model = &mPersonFolderViewModel; @@ -705,8 +703,7 @@ BOOL LLPanelPeople::postBuild() folder_view_params.use_ellipses = false; folder_view_params.options_menu = "menu_conversation.xml"; folder_view_params.name = "fbcfolderview"; - mConversationsRoot = LLUICtrlFactory::create(folder_view_params); - mConversationsEventStream.listen("ConversationsRefresh", boost::bind(&LLPanelPeople::onConversationModelEvent, this, _1)); + mConversationsRoot = LLUICtrlFactory::create(folder_view_params); //Create scroller LLRect scroller_view_rect = socialtwo_tab->getRect(); @@ -734,8 +731,8 @@ BOOL LLPanelPeople::postBuild() LLPersonTabView * widget = LLUICtrlFactory::create(params); widget->addToFolder(mConversationsRoot); - mPersonFolderModelMap[item->getID()] = item; - mPersonFolderViewMap[item->getID()] = widget; + mConversationsRoot->mPersonFolderModelMap[item->getID()] = item; + mConversationsRoot->mPersonFolderViewMap[item->getID()] = widget; gIdleCallbacks.addFunction(idle, this); @@ -1653,49 +1650,6 @@ bool LLPanelPeople::isAccordionCollapsedByUser(const std::string& name) return isAccordionCollapsedByUser(getChild(name)); } -bool LLPanelPeople::onConversationModelEvent(const LLSD& event) -{ - std::string type = event.get("type").asString(); - LLUUID folder_id = event.get("folder_id").asUUID(); - LLUUID person_id = event.get("person_id").asUUID(); - - if(type == "add_participant") - { - LLPersonTabModel * person_folder_model = dynamic_cast(mPersonFolderModelMap[folder_id]); - LLPersonTabView * person_folder_view = dynamic_cast(mPersonFolderViewMap[person_id]); - - if(person_folder_model) - { - LLPersonModel * person_model = person_folder_model->findParticipant(person_id); - - if(person_model) - { - LLPersonView * participant_view = createConversationViewParticipant(person_model); - participant_view->addToFolder(person_folder_view); - } - } - } - - return false; -} - -LLPersonView * LLPanelPeople::createConversationViewParticipant(LLPersonModel * item) -{ - LLPersonView::Params params; - LLRect panel_rect = getChild(FBCTESTTWO_TAB_NAME)->getRect(); - - params.name = item->getDisplayName(); - params.root = mConversationsRoot; - params.listener = item; - - //24 is the the current hight of an item (itemHeight) loaded from conversation_view_participant.xml. - params.rect = LLRect (0, 24, panel_rect.getWidth(), 0); - params.tool_tip = params.name; - params.folder_indentation = 2; - - return LLUICtrlFactory::create(params); -} - void LLPanelPeople::openFacebookWeb(LLFloaterWebContent::Params& p) { LLFloater* browser = LLFloaterReg::showInstance("web_content", p); @@ -1733,7 +1687,7 @@ void LLPanelPeople::addTestParticipant() { for(int i = 0; i < 300; ++i) { - LLPersonTabModel * person_folder_model = dynamic_cast(mPersonFolderModelMap.begin()->second); + LLPersonTabModel * person_folder_model = dynamic_cast(mConversationsRoot->mPersonFolderModelMap.begin()->second); addParticipantToModel(person_folder_model, LLUUID().generateNewID(), "EastBayGuy"); } } diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index f1fa7ec981..a448b7935e 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -31,7 +31,6 @@ #include "llcallingcard.h" // for avatar tracker #include "llpersonmodelcommon.h" -#include "llevents.h" #include "llfloaterwebcontent.h" #include "llvoiceclient.h" @@ -40,18 +39,10 @@ class LLAvatarListSocial; class LLAvatarName; class LLFilterEditor; class LLGroupList; +class LLPersonFolderView; class LLSocialList; class LLMenuButton; class LLTabContainer; -class LLFolderView; - -class LLPersonTabModel; -class LLPersonTabView; -class LLPersonView; -class LLPersonModel; - -typedef std::map person_folder_model_map; -typedef std::map person_folder_view_map; class LLPanelPeople : public LLPanel @@ -164,9 +155,6 @@ private: bool isAccordionCollapsedByUser(LLUICtrl* acc_tab); bool isAccordionCollapsedByUser(const std::string& name); - bool onConversationModelEvent(const LLSD& event); - LLPersonView * createConversationViewParticipant(LLPersonModel * item); - LLTabContainer* mTabContainer; LLAvatarList* mOnlineFriendList; LLAvatarList* mAllFriendList; @@ -189,11 +177,8 @@ private: LLMenuButton* mFBCGearButton; LLHandle< LLFloater > mPicker; - person_folder_model_map mPersonFolderModelMap; - person_folder_view_map mPersonFolderViewMap; LLPersonFolderViewModel mPersonFolderViewModel; - LLFolderView* mConversationsRoot; - LLEventStream mConversationsEventStream; + LLPersonFolderView* mConversationsRoot; }; #endif //LL_LLPANELPEOPLE_H diff --git a/indra/newview/llpersonfolderview.cpp b/indra/newview/llpersonfolderview.cpp new file mode 100644 index 0000000000..d94c8cf32f --- /dev/null +++ b/indra/newview/llpersonfolderview.cpp @@ -0,0 +1,88 @@ +/** +* @file llpersonfolderview.cpp +* @brief Implementation of llpersonfolderview +* @author Gilbert@lindenlab.com +* +* $LicenseInfo:firstyear=2013&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2013, Linden Research, Inc. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; +* version 2.1 of the License only. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +* +* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA +* $/LicenseInfo$ +*/ + +#include "llviewerprecompiledheaders.h" + +#include "llpersonfolderview.h" + +#include "llpersontabview.h" +#include "llpersonmodelcommon.h" + + +LLPersonFolderView::LLPersonFolderView(const Params &p) : +LLFolderView(p), + mConversationsEventStream("ConversationsEventsTwo") +{ + mConversationsEventStream.listen("ConversationsRefresh", boost::bind(&LLPersonFolderView::onConversationModelEvent, this, _1)); +} + +LLPersonFolderView::~LLPersonFolderView() +{ + mConversationsEventStream.stopListening("ConversationsRefresh"); +} + +bool LLPersonFolderView::onConversationModelEvent(const LLSD &event) +{ + std::string type = event.get("type").asString(); + LLUUID folder_id = event.get("folder_id").asUUID(); + LLUUID person_id = event.get("person_id").asUUID(); + + if(type == "add_participant") + { + LLPersonTabModel * person_folder_model = dynamic_cast(mPersonFolderModelMap[folder_id]); + LLPersonTabView * person_folder_view = dynamic_cast(mPersonFolderViewMap[person_id]); + + if(person_folder_model) + { + LLPersonModel * person_model = person_folder_model->findParticipant(person_id); + + if(person_model) + { + LLPersonView * participant_view = createConversationViewParticipant(person_model); + participant_view->addToFolder(person_folder_view); + } + } + } + + return false; +} + +LLPersonView * LLPersonFolderView::createConversationViewParticipant(LLPersonModel * item) +{ + LLPersonView::Params params; + + params.name = item->getDisplayName(); + params.root = this; + params.listener = item; + + //24 should be loaded from .xml somehow + params.rect = LLRect (0, 24, getRect().getWidth(), 0); + params.tool_tip = params.name; + params.folder_indentation = 2; + + return LLUICtrlFactory::create(params); +} diff --git a/indra/newview/llpersonfolderview.h b/indra/newview/llpersonfolderview.h new file mode 100644 index 0000000000..60260dc5ea --- /dev/null +++ b/indra/newview/llpersonfolderview.h @@ -0,0 +1,63 @@ +/** +* @file llpersonfolderview.h +* @brief Header file for llpersonfolderview +* @author Gilbert@lindenlab.com +* +* $LicenseInfo:firstyear=2013&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) 2013, Linden Research, Inc. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; +* version 2.1 of the License only. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +* +* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA +* $/LicenseInfo$ +*/ +#ifndef LL_LLPERSONFOLDERVIEW_H +#define LL_LLPERSONFOLDERVIEW_H + +class LLPersonTabModel; +class LLPersonTabView; +class LLPersonView; +class LLPersonModel; + +typedef std::map person_folder_model_map; +typedef std::map person_folder_view_map; + +#include "llevents.h" +#include "llfolderview.h" + +class LLPersonFolderView : public LLFolderView +{ +public: + struct Params : public LLInitParam::Block + { + Params() + {} + }; + + LLPersonFolderView(const Params &p); + ~LLPersonFolderView(); + + bool onConversationModelEvent(const LLSD &event); + + LLPersonView * createConversationViewParticipant(LLPersonModel * item); + + person_folder_model_map mPersonFolderModelMap; + person_folder_view_map mPersonFolderViewMap; + LLEventStream mConversationsEventStream; +}; + +#endif // LL_LLPERSONFOLDERVIEW_H + -- cgit v1.2.3 From 4921c654939d118cb4f9847512d6e3008c67428f Mon Sep 17 00:00:00 2001 From: Cho Date: Thu, 25 Apr 2013 00:10:09 +0100 Subject: added SLApp for fbc --- indra/newview/llpanelpeople.cpp | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index c4ce56cb4f..04881a12f1 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -75,6 +75,8 @@ #include "llsociallist.h" #include "llspeakers.h" #include "llfloaterwebcontent.h" +#include "llurlaction.h" +#include "llcommandhandler.h" #define FRIEND_LIST_UPDATE_TIMEOUT 0.5 #define NEARBY_LIST_UPDATE_INTERVAL 1 @@ -92,6 +94,36 @@ static const std::string COLLAPSED_BY_USER = "collapsed_by_user"; static const std::string FBC_SERVICES_URL = "https://pdp15.lindenlab.com/fbc"; static const std::string FBC_SERVICES_REDIRECT_URI = "https://pdp15.lindenlab.com/redirect"; +class LLFacebookConnectHandler : public LLCommandHandler +{ +public: + LLFacebookConnectHandler() : LLCommandHandler("fbc", UNTRUSTED_THROTTLE), mPanelPeople(NULL) { } + + LLPanelPeople* mPanelPeople; + + bool handle(const LLSD& tokens, const LLSD& query_map, + LLMediaCtrl* web) + { + if (tokens.size() > 0) + { + if (tokens[0].asString() == "connect") + { + if (query_map.has("code")) + { + if (mPanelPeople) + { + mPanelPeople->connectToFacebook(query_map["code"]); + return true; + } + } + } + } + + return false; + } +}; +LLFacebookConnectHandler gFacebookConnectHandler; + /** Comparator for comparing avatar items by last interaction date */ class LLAvatarItemRecentComparator : public LLAvatarItemComparator { @@ -1652,6 +1684,9 @@ bool LLPanelPeople::isAccordionCollapsedByUser(const std::string& name) void LLPanelPeople::openFacebookWeb(LLFloaterWebContent::Params& p) { + gFacebookConnectHandler.mPanelPeople = this; + LLUrlAction::openURLExternal(p.url); + LLFloater* browser = LLFloaterReg::showInstance("web_content", p); if (browser) -- cgit v1.2.3 From 1787988c47921478598c5f47828f3dde8922ffa6 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Wed, 24 Apr 2013 17:41:49 -0700 Subject: ACME-251 Create AvatarFolderItemView: Adding in code to make the persontab's function more like accordiontabs --- indra/newview/llpanelpeople.cpp | 13 ++++++++++++- indra/newview/llpersonfolderview.cpp | 19 +++++++++++++++++++ indra/newview/llpersonfolderview.h | 3 ++- indra/newview/llpersontabview.cpp | 17 +++++++++++++++-- indra/newview/llpersontabview.h | 2 ++ 5 files changed, 50 insertions(+), 4 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 04881a12f1..16dc252946 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -753,7 +753,6 @@ BOOL LLPanelPeople::postBuild() mConversationsRoot->setFollowsAll(); //Create a session - //LLSpeakerMgr* speaker_manager = (LLSpeakerMgr*)LLLocalSpeakerMgr::getInstance(); LLPersonTabModel* item = new LLPersonTabModel("Facebook Friends", mPersonFolderViewModel); LLPersonTabView::Params params; params.name = item->getDisplayName(); @@ -763,6 +762,18 @@ BOOL LLPanelPeople::postBuild() LLPersonTabView * widget = LLUICtrlFactory::create(params); widget->addToFolder(mConversationsRoot); + mConversationsRoot->mPersonFolderModelMap[item->getID()] = item; + mConversationsRoot->mPersonFolderViewMap[item->getID()] = widget; + + //Create a session + item = new LLPersonTabModel("Facebook Friends Tab Two", mPersonFolderViewModel); + params.name = item->getDisplayName(); + params.root = mConversationsRoot; + params.listener = item; + params.tool_tip = params.name; + widget = LLUICtrlFactory::create(params); + widget->addToFolder(mConversationsRoot); + mConversationsRoot->mPersonFolderModelMap[item->getID()] = item; mConversationsRoot->mPersonFolderViewMap[item->getID()] = widget; diff --git a/indra/newview/llpersonfolderview.cpp b/indra/newview/llpersonfolderview.cpp index d94c8cf32f..dac3dd03c7 100644 --- a/indra/newview/llpersonfolderview.cpp +++ b/indra/newview/llpersonfolderview.cpp @@ -45,6 +45,25 @@ LLPersonFolderView::~LLPersonFolderView() mConversationsEventStream.stopListening("ConversationsRefresh"); } +BOOL LLPersonFolderView::handleMouseDown( S32 x, S32 y, MASK mask ) +{ + LLFolderViewItem * prior_item = getCurSelectedItem(); + LLFolderViewItem * current_item; + + bool selected_item = LLFolderView::handleMouseDown(x, y, mask); + + current_item = getCurSelectedItem(); + + LLPersonTabView * prior_folder = dynamic_cast(prior_item); + + if(prior_folder && current_item != prior_folder) + { + prior_folder->highlight = false; + } + + return selected_item; +} + bool LLPersonFolderView::onConversationModelEvent(const LLSD &event) { std::string type = event.get("type").asString(); diff --git a/indra/newview/llpersonfolderview.h b/indra/newview/llpersonfolderview.h index 60260dc5ea..74e9142a7c 100644 --- a/indra/newview/llpersonfolderview.h +++ b/indra/newview/llpersonfolderview.h @@ -51,9 +51,10 @@ public: ~LLPersonFolderView(); bool onConversationModelEvent(const LLSD &event); - LLPersonView * createConversationViewParticipant(LLPersonModel * item); + BOOL handleMouseDown( S32 x, S32 y, MASK mask ); + person_folder_model_map mPersonFolderModelMap; person_folder_view_map mPersonFolderViewMap; LLEventStream mConversationsEventStream; diff --git a/indra/newview/llpersontabview.cpp b/indra/newview/llpersontabview.cpp index fff72c7758..20db0572fc 100644 --- a/indra/newview/llpersontabview.cpp +++ b/indra/newview/llpersontabview.cpp @@ -37,7 +37,8 @@ LLPersonTabView::Params::Params() {} LLPersonTabView::LLPersonTabView(const LLPersonTabView::Params& p) : -LLFolderViewFolder(p) +LLFolderViewFolder(p), +highlight(false) { } @@ -52,6 +53,18 @@ LLPersonTabView::~LLPersonTabView() } +BOOL LLPersonTabView::handleMouseDown( S32 x, S32 y, MASK mask ) +{ + bool selected_item = LLFolderViewFolder::handleMouseDown(x, y, mask); + + if(selected_item) + { + highlight = true; + } + + return selected_item; +} + void LLPersonTabView::draw() { static LLUIColor sFgColor = LLUIColorTable::instance().getColor("MenuItemEnabledColor", DEFAULT_WHITE); @@ -68,7 +81,7 @@ void LLPersonTabView::draw() LLColor4 color = sFgColor; F32 right_x = 0; - drawHighlight(false, mIsSelected, sHighlightBgColor, sFlashBgColor, sFocusOutlineColor, sMouseOverColor); + drawHighlight(false, highlight, sHighlightBgColor, sFlashBgColor, sFocusOutlineColor, sMouseOverColor); updateLabelRotation(); drawOpenFolderArrow(default_params, sFgColor); diff --git a/indra/newview/llpersontabview.h b/indra/newview/llpersontabview.h index 9aabad26fc..df3f786c69 100644 --- a/indra/newview/llpersontabview.h +++ b/indra/newview/llpersontabview.h @@ -44,7 +44,9 @@ public: virtual ~LLPersonTabView(); S32 getLabelXPos(); + bool highlight; + BOOL handleMouseDown( S32 x, S32 y, MASK mask ); protected: void draw(); -- cgit v1.2.3 From 06e1b03362d021e5bdce25a20a78663fdaf7650f Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Thu, 25 Apr 2013 11:33:58 -0700 Subject: ACME-251: Create AvatarFolderItemView: Fixed a bug that was causing facebook friends to not be inserted into the proper friends tab. --- indra/newview/llpersonfolderview.cpp | 2 +- indra/newview/llpersonmodelcommon.cpp | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/indra/newview/llpersonfolderview.cpp b/indra/newview/llpersonfolderview.cpp index dac3dd03c7..97f5d5a03a 100644 --- a/indra/newview/llpersonfolderview.cpp +++ b/indra/newview/llpersonfolderview.cpp @@ -73,7 +73,7 @@ bool LLPersonFolderView::onConversationModelEvent(const LLSD &event) if(type == "add_participant") { LLPersonTabModel * person_folder_model = dynamic_cast(mPersonFolderModelMap[folder_id]); - LLPersonTabView * person_folder_view = dynamic_cast(mPersonFolderViewMap[person_id]); + LLPersonTabView * person_folder_view = dynamic_cast(mPersonFolderViewMap[folder_id]); if(person_folder_model) { diff --git a/indra/newview/llpersonmodelcommon.cpp b/indra/newview/llpersonmodelcommon.cpp index 764dd08115..bea7f3d45e 100644 --- a/indra/newview/llpersonmodelcommon.cpp +++ b/indra/newview/llpersonmodelcommon.cpp @@ -38,7 +38,8 @@ LLPersonModelCommon::LLPersonModelCommon(std::string display_name, LLFolderViewModelInterface& root_view_model) : LLFolderViewModelItemCommon(root_view_model), - mName(display_name) + mName(display_name), + mID(LLUUID().generateNewID()) { } -- cgit v1.2.3 From 4562efdc7418923caa88bcf0c68a177f772c044b Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Thu, 25 Apr 2013 16:29:02 -0700 Subject: ACME-251: This should be final commit for this task, now the peopletab looks like the accordion tab. --- indra/newview/llpersonfolderview.cpp | 25 ++++++---- indra/newview/llpersontabview.cpp | 58 ++++++++++++++++++++-- indra/newview/llpersontabview.h | 7 +++ .../default/xui/en/widgets/person_tab_view.xml | 4 +- 4 files changed, 77 insertions(+), 17 deletions(-) diff --git a/indra/newview/llpersonfolderview.cpp b/indra/newview/llpersonfolderview.cpp index 97f5d5a03a..8141eecc35 100644 --- a/indra/newview/llpersonfolderview.cpp +++ b/indra/newview/llpersonfolderview.cpp @@ -47,21 +47,24 @@ LLPersonFolderView::~LLPersonFolderView() BOOL LLPersonFolderView::handleMouseDown( S32 x, S32 y, MASK mask ) { - LLFolderViewItem * prior_item = getCurSelectedItem(); - LLFolderViewItem * current_item; + LLFolderViewItem * item = getCurSelectedItem(); - bool selected_item = LLFolderView::handleMouseDown(x, y, mask); - - current_item = getCurSelectedItem(); - - LLPersonTabView * prior_folder = dynamic_cast(prior_item); - - if(prior_folder && current_item != prior_folder) + //Will disable highlight on tab + if(item) { - prior_folder->highlight = false; + LLPersonTabView * person_tab= dynamic_cast(item); + if(person_tab) + { + person_tab->highlight = false; + } + else + { + person_tab = dynamic_cast(item->getParent()); + person_tab->highlight = false; + } } - return selected_item; + return LLFolderView::handleMouseDown(x, y, mask); } bool LLPersonFolderView::onConversationModelEvent(const LLSD &event) diff --git a/indra/newview/llpersontabview.cpp b/indra/newview/llpersontabview.cpp index 20db0572fc..3556878b91 100644 --- a/indra/newview/llpersontabview.cpp +++ b/indra/newview/llpersontabview.cpp @@ -38,9 +38,11 @@ LLPersonTabView::Params::Params() LLPersonTabView::LLPersonTabView(const LLPersonTabView::Params& p) : LLFolderViewFolder(p), -highlight(false) +highlight(false), +mImageHeader(LLUI::getUIImage("Accordion_Off")), +mImageHeaderOver(LLUI::getUIImage("Accordion_Over")), +mImageHeaderFocused(LLUI::getUIImage("Accordion_Selected")) { - } S32 LLPersonTabView::getLabelXPos() @@ -73,7 +75,7 @@ void LLPersonTabView::draw() static LLUIColor sHighlightBgColor = LLUIColorTable::instance().getColor("MenuItemHighlightBgColor", DEFAULT_WHITE); static LLUIColor sFlashBgColor = LLUIColorTable::instance().getColor("MenuItemFlashBgColor", DEFAULT_WHITE); static LLUIColor sFocusOutlineColor = LLUIColorTable::instance().getColor("MenuItemHighlightBgColor", DEFAULT_WHITE); - static LLUIColor sMouseOverColor = LLUIColorTable::instance().getColor("DkGray", DEFAULT_WHITE); + const LLFontGL * font = LLFontGL::getFontSansSerif(); F32 text_left = (F32)getLabelXPos(); @@ -81,8 +83,9 @@ void LLPersonTabView::draw() LLColor4 color = sFgColor; F32 right_x = 0; - drawHighlight(false, highlight, sHighlightBgColor, sFlashBgColor, sFocusOutlineColor, sMouseOverColor); + //drawHighlight(false, highlight, sHighlightBgColor, sFlashBgColor, sFocusOutlineColor, sMouseOverColor); + drawHighlight(); updateLabelRotation(); drawOpenFolderArrow(default_params, sFgColor); @@ -91,6 +94,53 @@ void LLPersonTabView::draw() LLView::draw(); } +void LLPersonTabView::drawHighlight() +{ + S32 width = getRect().getWidth(); + S32 height = mItemHeight; + S32 x = 1; + S32 y = getRect().getHeight() - mItemHeight; + + //const S32 FOCUS_LEFT = 1; + //const S32 focus_top = getRect().getHeight(); + //const S32 focus_bottom = getRect().getHeight() - mItemHeight; + //static LLUIColor bgColor = LLUIColorTable::instance().getColor("DkGray2", DEFAULT_WHITE); + //static LLUIColor sMouseOverColor = LLUIColorTable::instance().getColor("MenuItemHighlightBgColor", DEFAULT_WHITE); + + if(highlight) + { + //reference will remove + /*gl_rect_2d(FOCUS_LEFT, + focus_top, + getRect().getWidth() - 2, + focus_bottom, + sMouseOverColor, TRUE);*/ + mImageHeaderFocused->draw(x,y,width,height); + } + else + { + //reference will remove + /*gl_rect_2d(FOCUS_LEFT, + focus_top, + getRect().getWidth() - 2, + focus_bottom, + bgColor, TRUE);*/ + mImageHeader->draw(x,y,width,height); + } + + if(mIsMouseOverTitle) + { + //reference will remove + /*gl_rect_2d(FOCUS_LEFT, + focus_top, + getRect().getWidth() - 2, + focus_bottom, + sMouseOverColor, TRUE);*/ + mImageHeaderOver->draw(x,y,width,height); + } + +} + // // LLPersonView // diff --git a/indra/newview/llpersontabview.h b/indra/newview/llpersontabview.h index df3f786c69..35cb219ce2 100644 --- a/indra/newview/llpersontabview.h +++ b/indra/newview/llpersontabview.h @@ -50,8 +50,15 @@ public: protected: void draw(); + void drawHighlight(); private: + + // Background images + LLPointer mImageHeader; + LLPointer mImageHeaderOver; + LLPointer mImageHeaderFocused; + }; class LLPersonView : public LLFolderViewItem diff --git a/indra/newview/skins/default/xui/en/widgets/person_tab_view.xml b/indra/newview/skins/default/xui/en/widgets/person_tab_view.xml index 46857ac700..b36011763a 100644 --- a/indra/newview/skins/default/xui/en/widgets/person_tab_view.xml +++ b/indra/newview/skins/default/xui/en/widgets/person_tab_view.xml @@ -2,11 +2,11 @@ Date: Thu, 25 Apr 2013 17:38:54 -0700 Subject: ACME-252 Create AvatarFolderItemView: Now the sub items of the persontab are drawn with different highlights depending on if they are selected or moused over. --- indra/newview/llpersontabview.cpp | 63 +++++++++++----------- indra/newview/llpersontabview.h | 4 ++ .../default/xui/en/widgets/person_tab_view.xml | 2 +- .../skins/default/xui/en/widgets/person_view.xml | 13 +++++ 4 files changed, 49 insertions(+), 33 deletions(-) create mode 100644 indra/newview/skins/default/xui/en/widgets/person_view.xml diff --git a/indra/newview/llpersontabview.cpp b/indra/newview/llpersontabview.cpp index 3556878b91..dc55f627d6 100644 --- a/indra/newview/llpersontabview.cpp +++ b/indra/newview/llpersontabview.cpp @@ -72,19 +72,12 @@ void LLPersonTabView::draw() static LLUIColor sFgColor = LLUIColorTable::instance().getColor("MenuItemEnabledColor", DEFAULT_WHITE); static const LLFolderViewItem::Params& default_params = LLUICtrlFactory::getDefaultParams(); - static LLUIColor sHighlightBgColor = LLUIColorTable::instance().getColor("MenuItemHighlightBgColor", DEFAULT_WHITE); - static LLUIColor sFlashBgColor = LLUIColorTable::instance().getColor("MenuItemFlashBgColor", DEFAULT_WHITE); - static LLUIColor sFocusOutlineColor = LLUIColorTable::instance().getColor("MenuItemHighlightBgColor", DEFAULT_WHITE); - - const LLFontGL * font = LLFontGL::getFontSansSerif(); F32 text_left = (F32)getLabelXPos(); F32 y = (F32)getRect().getHeight() - font->getLineHeight() - (F32)mTextPad; LLColor4 color = sFgColor; F32 right_x = 0; - //drawHighlight(false, highlight, sHighlightBgColor, sFlashBgColor, sFocusOutlineColor, sMouseOverColor); - drawHighlight(); updateLabelRotation(); drawOpenFolderArrow(default_params, sFgColor); @@ -101,41 +94,17 @@ void LLPersonTabView::drawHighlight() S32 x = 1; S32 y = getRect().getHeight() - mItemHeight; - //const S32 FOCUS_LEFT = 1; - //const S32 focus_top = getRect().getHeight(); - //const S32 focus_bottom = getRect().getHeight() - mItemHeight; - //static LLUIColor bgColor = LLUIColorTable::instance().getColor("DkGray2", DEFAULT_WHITE); - //static LLUIColor sMouseOverColor = LLUIColorTable::instance().getColor("MenuItemHighlightBgColor", DEFAULT_WHITE); - if(highlight) { - //reference will remove - /*gl_rect_2d(FOCUS_LEFT, - focus_top, - getRect().getWidth() - 2, - focus_bottom, - sMouseOverColor, TRUE);*/ mImageHeaderFocused->draw(x,y,width,height); } else { - //reference will remove - /*gl_rect_2d(FOCUS_LEFT, - focus_top, - getRect().getWidth() - 2, - focus_bottom, - bgColor, TRUE);*/ mImageHeader->draw(x,y,width,height); } if(mIsMouseOverTitle) { - //reference will remove - /*gl_rect_2d(FOCUS_LEFT, - focus_top, - getRect().getWidth() - 2, - focus_bottom, - sMouseOverColor, TRUE);*/ mImageHeaderOver->draw(x,y,width,height); } @@ -145,12 +114,15 @@ void LLPersonTabView::drawHighlight() // LLPersonView // +static LLDefaultChildRegistry::Register r_person_view("person_view"); LLPersonView::Params::Params() {} LLPersonView::LLPersonView(const LLPersonView::Params& p) : -LLFolderViewItem(p) +LLFolderViewItem(p), +mImageOver(LLUI::getUIImage("ListItem_Over")), +mImageSelected(LLUI::getUIImage("ListItem_Select")) { } @@ -183,7 +155,34 @@ void LLPersonView::draw() LLColor4 color = mIsSelected ? sHighlightFgColor : sFgColor; F32 right_x = 0; + drawHighlight(); drawLabel(font, text_left, y, color, right_x); LLView::draw(); } + +void LLPersonView::drawHighlight() +{ + static LLUIColor outline_color = LLUIColorTable::instance().getColor("Green_80", DEFAULT_WHITE); + + S32 width = getRect().getWidth(); + S32 height = mItemHeight; + S32 x = 1; + S32 y = 0; + + if(mIsSelected) + { + mImageSelected->draw(x, y, width, height); + //Need to find a better color that matches the outline in avatarlistitem + gl_rect_2d(x, + height, + width, + y, + outline_color, FALSE); + } + + if(mIsMouseOverTitle) + { + mImageOver->draw(x, y, width, height); + } +} diff --git a/indra/newview/llpersontabview.h b/indra/newview/llpersontabview.h index 35cb219ce2..b246be288a 100644 --- a/indra/newview/llpersontabview.h +++ b/indra/newview/llpersontabview.h @@ -79,9 +79,13 @@ public: protected: void draw(); + void drawHighlight(); private: + LLPointer mImageOver; + LLPointer mImageSelected; + LLAvatarIconCtrl* mAvatarIcon; LLButton * mInfoBtn; diff --git a/indra/newview/skins/default/xui/en/widgets/person_tab_view.xml b/indra/newview/skins/default/xui/en/widgets/person_tab_view.xml index b36011763a..d46938d3b7 100644 --- a/indra/newview/skins/default/xui/en/widgets/person_tab_view.xml +++ b/indra/newview/skins/default/xui/en/widgets/person_tab_view.xml @@ -6,7 +6,7 @@ item_top_pad="3" mouse_opaque="true" follows="left|top|right" - text_pad="5" + text_pad="6" text_pad_left="4" text_pad_right="4" arrow_size="10" diff --git a/indra/newview/skins/default/xui/en/widgets/person_view.xml b/indra/newview/skins/default/xui/en/widgets/person_view.xml new file mode 100644 index 0000000000..d46938d3b7 --- /dev/null +++ b/indra/newview/skins/default/xui/en/widgets/person_view.xml @@ -0,0 +1,13 @@ + + -- cgit v1.2.3 From 228a312cf68088a8388a9318d1c8d23aaa52eaab Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Fri, 26 Apr 2013 09:49:48 -0700 Subject: ACME-252 Create AvatarFolderItemView: Corrected person_tab_view.xml and person_view.xml to have the proper parent tag. It was conversation_view_session for both which was wrong. Also updated the selected color for the personview. --- indra/newview/llpersontabview.cpp | 2 +- indra/newview/skins/default/xui/en/widgets/person_tab_view.xml | 2 +- indra/newview/skins/default/xui/en/widgets/person_view.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/newview/llpersontabview.cpp b/indra/newview/llpersontabview.cpp index dc55f627d6..3093ff9015 100644 --- a/indra/newview/llpersontabview.cpp +++ b/indra/newview/llpersontabview.cpp @@ -163,7 +163,7 @@ void LLPersonView::draw() void LLPersonView::drawHighlight() { - static LLUIColor outline_color = LLUIColorTable::instance().getColor("Green_80", DEFAULT_WHITE); + static LLUIColor outline_color = LLUIColorTable::instance().getColor("EmphasisColor", DEFAULT_WHITE); S32 width = getRect().getWidth(); S32 height = mItemHeight; diff --git a/indra/newview/skins/default/xui/en/widgets/person_tab_view.xml b/indra/newview/skins/default/xui/en/widgets/person_tab_view.xml index d46938d3b7..af5aec2c34 100644 --- a/indra/newview/skins/default/xui/en/widgets/person_tab_view.xml +++ b/indra/newview/skins/default/xui/en/widgets/person_tab_view.xml @@ -1,5 +1,5 @@ - - Date: Fri, 26 Apr 2013 10:10:31 -0700 Subject: ACME-252 Create AvatarFolderItemView: Now when connecting to facebook using the + button the fctest two tab is populated. --- indra/newview/llpanelpeople.cpp | 40 ++++++++++++++++++++-------------------- indra/newview/llpanelpeople.h | 2 +- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 16dc252946..ab8d090cb6 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -581,7 +581,7 @@ private: LLPanelPeople::LLPanelPeople() : LLPanel(), mConnectedToFbc(false), - mConversationsRoot(NULL), + mPersonFolderView(NULL), mTryToConnectToFbc(true), mTabContainer(NULL), mOnlineFriendList(NULL), @@ -735,7 +735,7 @@ BOOL LLPanelPeople::postBuild() folder_view_params.use_ellipses = false; folder_view_params.options_menu = "menu_conversation.xml"; folder_view_params.name = "fbcfolderview"; - mConversationsRoot = LLUICtrlFactory::create(folder_view_params); + mPersonFolderView = LLUICtrlFactory::create(folder_view_params); //Create scroller LLRect scroller_view_rect = socialtwo_tab->getRect(); @@ -747,35 +747,35 @@ BOOL LLPanelPeople::postBuild() LLScrollContainer* scroller = LLUICtrlFactory::create(scroller_params); socialtwo_tab->addChildInBack(scroller); - scroller->addChild(mConversationsRoot); + scroller->addChild(mPersonFolderView); scroller->setFollowsAll(); - mConversationsRoot->setScrollContainer(scroller); - mConversationsRoot->setFollowsAll(); + mPersonFolderView->setScrollContainer(scroller); + mPersonFolderView->setFollowsAll(); //Create a session LLPersonTabModel* item = new LLPersonTabModel("Facebook Friends", mPersonFolderViewModel); LLPersonTabView::Params params; params.name = item->getDisplayName(); - params.root = mConversationsRoot; + params.root = mPersonFolderView; params.listener = item; params.tool_tip = params.name; LLPersonTabView * widget = LLUICtrlFactory::create(params); - widget->addToFolder(mConversationsRoot); + widget->addToFolder(mPersonFolderView); - mConversationsRoot->mPersonFolderModelMap[item->getID()] = item; - mConversationsRoot->mPersonFolderViewMap[item->getID()] = widget; + mPersonFolderView->mPersonFolderModelMap[item->getID()] = item; + mPersonFolderView->mPersonFolderViewMap[item->getID()] = widget; //Create a session item = new LLPersonTabModel("Facebook Friends Tab Two", mPersonFolderViewModel); params.name = item->getDisplayName(); - params.root = mConversationsRoot; + params.root = mPersonFolderView; params.listener = item; params.tool_tip = params.name; widget = LLUICtrlFactory::create(params); - widget->addToFolder(mConversationsRoot); + widget->addToFolder(mPersonFolderView); - mConversationsRoot->mPersonFolderModelMap[item->getID()] = item; - mConversationsRoot->mPersonFolderViewMap[item->getID()] = widget; + mPersonFolderView->mPersonFolderModelMap[item->getID()] = item; + mPersonFolderView->mPersonFolderViewMap[item->getID()] = widget; gIdleCallbacks.addFunction(idle, this); @@ -865,7 +865,7 @@ void LLPanelPeople::onChange(EStatusType status, const std::string &channelURI, void LLPanelPeople::idle(void * user_data) { LLPanelPeople * self = static_cast(user_data); - self->mConversationsRoot->update(); + self->mPersonFolderView->update(); } void LLPanelPeople::updateFriendListHelpText() @@ -1721,11 +1721,11 @@ void LLPanelPeople::showFacebookFriends(const LLSD& friends) mFacebookFriends->addNewItem(agent_id, name, false); //Add to folder view - //LLConversationItemSession * session_model = dynamic_cast(mConversationsItems[LLUUID(NULL)]); - //if(session_model) - //{ - // addParticipantToModel(session_model, agent_id, name); - //} + LLPersonTabModel * session_model = dynamic_cast(mPersonFolderView->mPersonFolderModelMap.begin()->second); + if(session_model) + { + addParticipantToModel(session_model, agent_id, name); + } } } @@ -1733,7 +1733,7 @@ void LLPanelPeople::addTestParticipant() { for(int i = 0; i < 300; ++i) { - LLPersonTabModel * person_folder_model = dynamic_cast(mConversationsRoot->mPersonFolderModelMap.begin()->second); + LLPersonTabModel * person_folder_model = dynamic_cast(mPersonFolderView->mPersonFolderModelMap.begin()->second); addParticipantToModel(person_folder_model, LLUUID().generateNewID(), "EastBayGuy"); } } diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index a448b7935e..497871bedb 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -178,7 +178,7 @@ private: LLHandle< LLFloater > mPicker; LLPersonFolderViewModel mPersonFolderViewModel; - LLPersonFolderView* mConversationsRoot; + LLPersonFolderView* mPersonFolderView; }; #endif //LL_LLPANELPEOPLE_H -- cgit v1.2.3 From e1dbbd0213dd96e28aec2c5e6d9fd821ab144e48 Mon Sep 17 00:00:00 2001 From: Cho Date: Fri, 26 Apr 2013 21:26:38 +0100 Subject: removed internal browser hack for getting auth code in favor of SLApp-only approach --- indra/newview/llappviewer.cpp | 15 ++++----- indra/newview/llpanelpeople.cpp | 67 +++++------------------------------------ indra/newview/llpanelpeople.h | 2 +- 3 files changed, 16 insertions(+), 68 deletions(-) diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 53c694eaca..31f7f61396 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -2577,19 +2577,20 @@ bool LLAppViewer::initConfiguration() // What can happen is that someone can use IE (or potentially // other browsers) and do the rough equivalent of command // injection and steal passwords. Phoenix. SL-55321 + LLSLURL option_slurl; if(clp.hasOption("url")) { - LLStartUp::setStartSLURL(LLSLURL(clp.getOption("url")[0])); + option_slurl = LLSLURL(clp.getOption("url")[0]); + LLStartUp::setStartSLURL(option_slurl); if(LLStartUp::getStartSLURL().getType() == LLSLURL::LOCATION) { LLGridManager::getInstance()->setGridChoice(LLStartUp::getStartSLURL().getGrid()); - - } + } } else if(clp.hasOption("slurl")) { - LLSLURL start_slurl(clp.getOption("slurl")[0]); - LLStartUp::setStartSLURL(start_slurl); + option_slurl = LLSLURL(clp.getOption("slurl")[0]); + LLStartUp::setStartSLURL(option_slurl); } const LLControlVariable* skinfolder = gSavedSettings.getControl("SkinCurrent"); @@ -2686,10 +2687,10 @@ bool LLAppViewer::initConfiguration() // it relies on checking a marker file which will not work when running // out of different directories - if (LLStartUp::getStartSLURL().isValid() && + if (option_slurl.isValid() && (gSavedSettings.getBOOL("SLURLPassToOtherInstance"))) { - if (sendURLToOtherInstance(LLStartUp::getStartSLURL().getSLURLString())) + if (sendURLToOtherInstance(option_slurl.getSLURLString())) { // successfully handed off URL to existing instance, exit return false; diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index ab8d090cb6..86303cee70 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -113,6 +113,7 @@ public: if (mPanelPeople) { mPanelPeople->connectToFacebook(query_map["code"]); + mPanelPeople = NULL; return true; } } @@ -970,46 +971,7 @@ void LLPanelPeople::updateRecentList() void LLPanelPeople::updateFbcTestList() { - if (mFbcTestBrowserHandle.get()) - { - // get the current browser url (from the title bar, of course!) - std::string url = mFbcTestBrowserHandle.get()->getTitle(); - - // if the browser has redirected from facebook - if (url.find(getFacebookRedirectURL()) == 0) - { - // find the auth code in the url - std::string begin_string = "code="; - std::string end_string = "#"; - size_t begin_index = begin_string.length() + url.find(begin_string, getFacebookRedirectURL().length()); - size_t end_index = url.find(end_string, begin_index); - - // extract the auth code from the url - std::string auth_code; - if (end_index != std::string::npos) - { - auth_code = url.substr(begin_index, end_index - begin_index); - } - else - { - auth_code = url.substr(begin_index); - } - llinfos << "extracted code " << auth_code << " from url " << url << llendl; - - // finish authenticating on the server - connectToFacebook(auth_code); - - // close the browser window - mFbcTestBrowserHandle.get()->die(); - - // get rid of the handle - mFbcTestBrowserHandle = LLHandle(); - - // stop updating - mFbcTestListUpdater->setActive(false); - } - } - else if (mTryToConnectToFbc) + if (mTryToConnectToFbc) { // try to reconnect to facebook! tryToReconnectToFacebook(); @@ -1693,19 +1655,10 @@ bool LLPanelPeople::isAccordionCollapsedByUser(const std::string& name) return isAccordionCollapsedByUser(getChild(name)); } -void LLPanelPeople::openFacebookWeb(LLFloaterWebContent::Params& p) +void LLPanelPeople::openFacebookWeb(std::string url) { gFacebookConnectHandler.mPanelPeople = this; - LLUrlAction::openURLExternal(p.url); - - LLFloater* browser = LLFloaterReg::showInstance("web_content", p); - - if (browser) - { - // start checking the browser to see if the data is available yet - mFbcTestBrowserHandle = browser->getHandle(); - mFbcTestListUpdater->setActive(true); - } + LLUrlAction::openURLExternal(url); } void LLPanelPeople::showFacebookFriends(const LLSD& friends) @@ -1827,9 +1780,7 @@ public: // show the facebook login page if not connected yet if (status == 404 && mShowLoginIfNotConnected) { - LLFloaterWebContent::Params p; - p.url("https://www.facebook.com/dialog/oauth?client_id=565771023434202&redirect_uri=" + mPanelPeople->getFacebookRedirectURL()); - mPanelPeople->openFacebookWeb(p); + mPanelPeople->openFacebookWeb("https://www.facebook.com/dialog/oauth?client_id=565771023434202&redirect_uri=" + mPanelPeople->getFacebookRedirectURL()); } } } @@ -1914,16 +1865,12 @@ void LLPanelPeople::onLoginFbcButtonClicked() void LLPanelPeople::onFacebookAppRequestClicked() { - LLFloaterWebContent::Params p; - p.url("http://www.facebook.com/dialog/apprequests?app_id=565771023434202&message=Test&redirect_uri=" + getFacebookRedirectURL()); - openFacebookWeb(p); + openFacebookWeb("http://www.facebook.com/dialog/apprequests?app_id=565771023434202&message=Test&redirect_uri=" + getFacebookRedirectURL()); } void LLPanelPeople::onFacebookAppSendClicked() { - LLFloaterWebContent::Params p; - p.url("https://www.facebook.com/dialog/send?app_id=565771023434202&name=Join Second Life!&link=https://join.secondlife.com&redirect_uri=" + getFacebookRedirectURL()); - openFacebookWeb(p); + openFacebookWeb("https://www.facebook.com/dialog/send?app_id=565771023434202&name=Join Second Life!&link=https://join.secondlife.com&redirect_uri=" + getFacebookRedirectURL()); } static LLFastTimer::DeclareTimer FTM_AVATAR_LIST_TEST("avatar list test"); diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index 497871bedb..95105309d2 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -62,7 +62,7 @@ public: static void idle(void * user_data); - void openFacebookWeb(LLFloaterWebContent::Params& p); + void openFacebookWeb(std::string url); void showFacebookFriends(const LLSD& friends); void addTestParticipant(); void addParticipantToModel(LLPersonTabModel * session_model, const LLUUID& agent_id, const std::string& name); -- cgit v1.2.3 From f36171b8cae93bdaf6d3df2bf964313d1da087b6 Mon Sep 17 00:00:00 2001 From: Cho Date: Fri, 26 Apr 2013 23:35:28 +0100 Subject: made sendURLToOtherInstance() happen before viewer window actually appears, in the event of an external browser launching a SLApp --- indra/newview/llappviewer.cpp | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 31f7f61396..e97c264af3 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -2577,7 +2577,9 @@ bool LLAppViewer::initConfiguration() // What can happen is that someone can use IE (or potentially // other browsers) and do the rough equivalent of command // injection and steal passwords. Phoenix. SL-55321 + LLSLURL option_slurl; + if(clp.hasOption("url")) { option_slurl = LLSLURL(clp.getOption("url")[0]); @@ -2592,6 +2594,21 @@ bool LLAppViewer::initConfiguration() option_slurl = LLSLURL(clp.getOption("slurl")[0]); LLStartUp::setStartSLURL(option_slurl); } + + //RN: if we received a URL, hand it off to the existing instance. + // don't call anotherInstanceRunning() when doing URL handoff, as + // it relies on checking a marker file which will not work when running + // out of different directories + + if (option_slurl.isValid() && + (gSavedSettings.getBOOL("SLURLPassToOtherInstance"))) + { + if (sendURLToOtherInstance(option_slurl.getSLURLString())) + { + // successfully handed off URL to existing instance, exit + return false; + } + } const LLControlVariable* skinfolder = gSavedSettings.getControl("SkinCurrent"); if(skinfolder && LLStringUtil::null != skinfolder->getValue().asString()) @@ -2682,21 +2699,6 @@ bool LLAppViewer::initConfiguration() #endif LLStringUtil::truncate(gWindowTitle, 255); - //RN: if we received a URL, hand it off to the existing instance. - // don't call anotherInstanceRunning() when doing URL handoff, as - // it relies on checking a marker file which will not work when running - // out of different directories - - if (option_slurl.isValid() && - (gSavedSettings.getBOOL("SLURLPassToOtherInstance"))) - { - if (sendURLToOtherInstance(option_slurl.getSLURLString())) - { - // successfully handed off URL to existing instance, exit - return false; - } - } - if (!gSavedSettings.getBOOL("AllowMultipleViewers")) { // -- cgit v1.2.3 From 743720f41454af16193789859a5b2048bad30b7e Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Fri, 26 Apr 2013 18:50:45 -0700 Subject: ACME-272 : Add the top toolbar to the FBC panel 2 --- indra/newview/llpanelpeople.cpp | 8 +- .../newview/skins/default/xui/en/panel_people.xml | 92 +++++++++++++++++++++- 2 files changed, 96 insertions(+), 4 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 86303cee70..12d8f6b83a 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -672,6 +672,7 @@ BOOL LLPanelPeople::postBuild() getChild("friends_filter_input")->setCommitCallback(boost::bind(&LLPanelPeople::onFilterEdit, this, _2)); getChild("groups_filter_input")->setCommitCallback(boost::bind(&LLPanelPeople::onFilterEdit, this, _2)); getChild("recent_filter_input")->setCommitCallback(boost::bind(&LLPanelPeople::onFilterEdit, this, _2)); + getChild("fbc_filter_input")->setCommitCallback(boost::bind(&LLPanelPeople::onFilterEdit, this, _2)); mTabContainer = getChild("tabs"); mTabContainer->setCommitCallback(boost::bind(&LLPanelPeople::onTabSelected, this, _2)); @@ -729,7 +730,8 @@ BOOL LLPanelPeople::postBuild() LLPersonModelCommon* base_item = new LLPersonModelCommon(mPersonFolderViewModel); LLPersonFolderView::Params folder_view_params(LLUICtrlFactory::getDefaultParams()); - folder_view_params.parent_panel = friends_tab; + + folder_view_params.parent_panel = socialtwo_tab; folder_view_params.listener = base_item; folder_view_params.view_model = &mPersonFolderViewModel; folder_view_params.root = NULL; @@ -740,8 +742,8 @@ BOOL LLPanelPeople::postBuild() //Create scroller LLRect scroller_view_rect = socialtwo_tab->getRect(); - scroller_view_rect.mTop -= 4; - scroller_view_rect.mRight -=6; + scroller_view_rect.mTop -= 2+27; // 27 is the height of the top toolbar + scroller_view_rect.mRight -= 4; scroller_view_rect.mLeft += 2; LLScrollContainer::Params scroller_params(LLUICtrlFactory::getDefaultParams()); scroller_params.rect(scroller_view_rect); diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index c4db547a8e..9bab2ccb0b 100644 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -633,6 +633,9 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M top="0" right="-1" /> + + + + + + + top="0"> + + + + + + + + -- cgit v1.2.3 From 59880225108ef807ef58ed98357f0706c045ff61 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Mon, 29 Apr 2013 10:59:09 -0700 Subject: ACME-252 Create AvatarFolderItemView: Now the avatar icon will display but it is not yet functional --- indra/newview/llpanelpeople.cpp | 4 ++-- indra/newview/llpersontabview.cpp | 16 +++++++++++++--- indra/newview/llpersontabview.h | 2 ++ .../newview/skins/default/xui/en/widgets/person_view.xml | 14 +++++++++++++- 4 files changed, 30 insertions(+), 6 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 12d8f6b83a..ef45cc44f7 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -755,7 +755,7 @@ BOOL LLPanelPeople::postBuild() mPersonFolderView->setScrollContainer(scroller); mPersonFolderView->setFollowsAll(); - //Create a session + //Create a person tab LLPersonTabModel* item = new LLPersonTabModel("Facebook Friends", mPersonFolderViewModel); LLPersonTabView::Params params; params.name = item->getDisplayName(); @@ -768,7 +768,7 @@ BOOL LLPanelPeople::postBuild() mPersonFolderView->mPersonFolderModelMap[item->getID()] = item; mPersonFolderView->mPersonFolderViewMap[item->getID()] = widget; - //Create a session + //Create a person tab item = new LLPersonTabModel("Facebook Friends Tab Two", mPersonFolderViewModel); params.name = item->getDisplayName(); params.root = mPersonFolderView; diff --git a/indra/newview/llpersontabview.cpp b/indra/newview/llpersontabview.cpp index 3093ff9015..e0bda32308 100644 --- a/indra/newview/llpersontabview.cpp +++ b/indra/newview/llpersontabview.cpp @@ -116,20 +116,22 @@ void LLPersonTabView::drawHighlight() static LLDefaultChildRegistry::Register r_person_view("person_view"); -LLPersonView::Params::Params() +LLPersonView::Params::Params() : +avatar_icon("avatar_icon") {} LLPersonView::LLPersonView(const LLPersonView::Params& p) : LLFolderViewItem(p), mImageOver(LLUI::getUIImage("ListItem_Over")), -mImageSelected(LLUI::getUIImage("ListItem_Select")) +mImageSelected(LLUI::getUIImage("ListItem_Select")), +mAvatarIcon(NULL) { } S32 LLPersonView::getLabelXPos() { - return getIndentation(); + return getIndentation() + mAvatarIcon->getRect().getWidth() + mIconPad; } void LLPersonView::addToFolder(LLFolderViewFolder * person_folder_view) @@ -186,3 +188,11 @@ void LLPersonView::drawHighlight() mImageOver->draw(x, y, width, height); } } + +void LLPersonView::initFromParams(const LLPersonView::Params & params) +{ + LLAvatarIconCtrl::Params avatar_icon_params(params.avatar_icon()); + applyXUILayout(avatar_icon_params, this); + mAvatarIcon = LLUICtrlFactory::create(avatar_icon_params); + addChild(mAvatarIcon); +} diff --git a/indra/newview/llpersontabview.h b/indra/newview/llpersontabview.h index b246be288a..e1b34e1da4 100644 --- a/indra/newview/llpersontabview.h +++ b/indra/newview/llpersontabview.h @@ -69,6 +69,7 @@ public: struct Params : public LLInitParam::Block { Params(); + Optional avatar_icon; }; LLPersonView(const LLPersonView::Params& p); @@ -76,6 +77,7 @@ public: S32 getLabelXPos(); void addToFolder(LLFolderViewFolder * person_folder_view); + void initFromParams(const LLPersonView::Params & params); protected: void draw(); diff --git a/indra/newview/skins/default/xui/en/widgets/person_view.xml b/indra/newview/skins/default/xui/en/widgets/person_view.xml index 13aa26959f..84ad807b83 100644 --- a/indra/newview/skins/default/xui/en/widgets/person_view.xml +++ b/indra/newview/skins/default/xui/en/widgets/person_view.xml @@ -6,8 +6,20 @@ item_top_pad="3" mouse_opaque="true" follows="left|top|right" + icon_pad="4" + icon_width="20" text_pad="6" text_pad_left="4" text_pad_right="4" arrow_size="10" - max_folder_item_overlap="2"/> + max_folder_item_overlap="2"> + + + -- cgit v1.2.3 From 0ce0d897f4e8bed87299b88b3ac24812bfe6afbd Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Mon, 29 Apr 2013 17:01:47 -0700 Subject: ACME-252 Create AvatarFolderItemView: Now the personview contains all icons that the avatarlistitem view contains. --- indra/newview/llpersonfolderview.cpp | 1 - indra/newview/llpersontabview.cpp | 64 +++++++++++++++-- indra/newview/llpersontabview.h | 35 ++++++++-- .../skins/default/xui/en/widgets/person_view.xml | 81 ++++++++++++++++++++++ 4 files changed, 172 insertions(+), 9 deletions(-) diff --git a/indra/newview/llpersonfolderview.cpp b/indra/newview/llpersonfolderview.cpp index 8141eecc35..636d093e0e 100644 --- a/indra/newview/llpersonfolderview.cpp +++ b/indra/newview/llpersonfolderview.cpp @@ -104,7 +104,6 @@ LLPersonView * LLPersonFolderView::createConversationViewParticipant(LLPersonMod //24 should be loaded from .xml somehow params.rect = LLRect (0, 24, getRect().getWidth(), 0); params.tool_tip = params.name; - params.folder_indentation = 2; return LLUICtrlFactory::create(params); } diff --git a/indra/newview/llpersontabview.cpp b/indra/newview/llpersontabview.cpp index e0bda32308..eaa112e051 100644 --- a/indra/newview/llpersontabview.cpp +++ b/indra/newview/llpersontabview.cpp @@ -117,16 +117,32 @@ void LLPersonTabView::drawHighlight() static LLDefaultChildRegistry::Register r_person_view("person_view"); LLPersonView::Params::Params() : -avatar_icon("avatar_icon") +avatar_icon("avatar_icon"), +last_interaction_time_textbox("last_interaction_time_textbox"), +permission_edit_theirs_icon("permission_edit_theirs_icon"), +permission_edit_mine_icon("permission_edit_mine_icon"), +permission_map_icon("permission_map_icon"), +permission_online_icon("permission_online_icon"), +info_btn("info_btn"), +profile_btn("profile_btn"), +output_monitor("output_monitor") {} LLPersonView::LLPersonView(const LLPersonView::Params& p) : LLFolderViewItem(p), mImageOver(LLUI::getUIImage("ListItem_Over")), mImageSelected(LLUI::getUIImage("ListItem_Select")), -mAvatarIcon(NULL) +mAvatarIcon(NULL), +mLastInteractionTimeTextbox(NULL), +mPermissionEditTheirsIcon(NULL), +mPermissionEditMineIcon(NULL), +mPermissionMapIcon(NULL), +mPermissionOnlineIcon(NULL), +mInfoBtn(NULL), +mProfileBtn(NULL), +mOutputMonitorCtrl(NULL) { - + initChildrenWidths(this); } S32 LLPersonView::getLabelXPos() @@ -175,7 +191,7 @@ void LLPersonView::drawHighlight() if(mIsSelected) { mImageSelected->draw(x, y, width, height); - //Need to find a better color that matches the outline in avatarlistitem + //Draw outline gl_rect_2d(x, height, width, @@ -195,4 +211,44 @@ void LLPersonView::initFromParams(const LLPersonView::Params & params) applyXUILayout(avatar_icon_params, this); mAvatarIcon = LLUICtrlFactory::create(avatar_icon_params); addChild(mAvatarIcon); + + LLTextBox::Params last_interaction_time_textbox(params.last_interaction_time_textbox()); + applyXUILayout(last_interaction_time_textbox, this); + mLastInteractionTimeTextbox = LLUICtrlFactory::create(last_interaction_time_textbox); + addChild(mLastInteractionTimeTextbox); + + LLIconCtrl::Params permission_edit_theirs_icon(params.permission_edit_theirs_icon()); + applyXUILayout(permission_edit_theirs_icon, this); + mPermissionEditTheirsIcon = LLUICtrlFactory::create(permission_edit_theirs_icon); + addChild(mPermissionEditTheirsIcon); + + LLIconCtrl::Params permission_map_icon(params.permission_map_icon()); + applyXUILayout(permission_map_icon, this); + mPermissionMapIcon = LLUICtrlFactory::create(permission_map_icon); + addChild(mPermissionMapIcon); + + LLIconCtrl::Params permission_online_icon(params.permission_online_icon()); + applyXUILayout(permission_online_icon, this); + mPermissionOnlineIcon = LLUICtrlFactory::create(permission_online_icon); + addChild(mPermissionOnlineIcon); + + LLButton::Params info_btn(params.info_btn()); + applyXUILayout(info_btn, this); + mInfoBtn = LLUICtrlFactory::create(info_btn); + addChild(mInfoBtn); + + LLButton::Params profile_btn(params.profile_btn()); + applyXUILayout(profile_btn, this); + mProfileBtn = LLUICtrlFactory::create(profile_btn); + addChild(mProfileBtn); + + LLOutputMonitorCtrl::Params output_monitor(params.output_monitor()); + applyXUILayout(output_monitor, this); + mOutputMonitorCtrl = LLUICtrlFactory::create(output_monitor); + addChild(mOutputMonitorCtrl); +} + +void LLPersonView::initChildrenWidths(LLPersonView* self) +{ + } diff --git a/indra/newview/llpersontabview.h b/indra/newview/llpersontabview.h index e1b34e1da4..d8d1a65df6 100644 --- a/indra/newview/llpersontabview.h +++ b/indra/newview/llpersontabview.h @@ -28,7 +28,10 @@ #define LL_LLPERSONTABVIEW_H #include "llavatariconctrl.h" +#include "llbutton.h" #include "llfolderviewitem.h" +#include "lloutputmonitorctrl.h" +#include "lltextbox.h" class LLPersonTabView : public LLFolderViewFolder { @@ -70,6 +73,14 @@ public: { Params(); Optional avatar_icon; + Optional last_interaction_time_textbox; + Optional permission_edit_theirs_icon; + Optional permission_edit_mine_icon; + Optional permission_map_icon; + Optional permission_online_icon; + Optional info_btn; + Optional profile_btn; + Optional output_monitor; }; LLPersonView(const LLPersonView::Params& p); @@ -89,18 +100,34 @@ private: LLPointer mImageSelected; LLAvatarIconCtrl* mAvatarIcon; + LLTextBox * mLastInteractionTimeTextbox; + LLIconCtrl * mPermissionEditTheirsIcon; + LLIconCtrl * mPermissionEditMineIcon; + LLIconCtrl * mPermissionMapIcon; + LLIconCtrl * mPermissionOnlineIcon; LLButton * mInfoBtn; + LLButton * mProfileBtn; + LLOutputMonitorCtrl * mOutputMonitorCtrl; + + typedef enum e_avatar_item_child { ALIC_SPEAKER_INDICATOR, + ALIC_PROFILE_BUTTON, ALIC_INFO_BUTTON, + ALIC_PERMISSION_ONLINE, + ALIC_PERMISSION_MAP, + ALIC_PERMISSION_EDIT_MINE, + ALIC_PERMISSION_EDIT_THEIRS, + ALIC_INTERACTION_TIME, ALIC_COUNT, } EAvatarListItemChildIndex; - static bool sStaticInitialized; // this variable is introduced to improve code readability - static S32 sChildrenWidths[ALIC_COUNT]; - //static void initChildrenWidths(LLConversationViewParticipant* self); - //void updateChildren(); + static bool sStaticInitialized; + static S32 sMouseOverChildrenWidths[ALIC_COUNT]; + static S32 sMouseOverChildren[ALIC_COUNT]; + static void initChildrenWidths(LLPersonView* self); + void updateChildren(); //LLView* getItemChildView(EAvatarListItemChildIndex child_view_index); }; diff --git a/indra/newview/skins/default/xui/en/widgets/person_view.xml b/indra/newview/skins/default/xui/en/widgets/person_view.xml index 84ad807b83..d257a5114f 100644 --- a/indra/newview/skins/default/xui/en/widgets/person_view.xml +++ b/indra/newview/skins/default/xui/en/widgets/person_view.xml @@ -21,5 +21,86 @@ left="5" top="2" width="20" /> + + + + + + + + -- cgit v1.2.3 From 548b75f3fdec08227c5d41424e3af90fbe455208 Mon Sep 17 00:00:00 2001 From: Cho Date: Tue, 30 Apr 2013 01:40:46 +0100 Subject: updated to grab FB URLs from server --- indra/newview/llpanelpeople.cpp | 35 ++++++++++++++++++++--------------- indra/newview/llpanelpeople.h | 3 +-- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index ef45cc44f7..712a116873 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -91,9 +91,6 @@ static const std::string FBCTEST_TAB_NAME = "fbctest_panel"; static const std::string FBCTESTTWO_TAB_NAME = "fbctesttwo_panel"; static const std::string COLLAPSED_BY_USER = "collapsed_by_user"; -static const std::string FBC_SERVICES_URL = "https://pdp15.lindenlab.com/fbc"; -static const std::string FBC_SERVICES_REDIRECT_URI = "https://pdp15.lindenlab.com/redirect"; - class LLFacebookConnectHandler : public LLCommandHandler { public: @@ -1729,6 +1726,14 @@ public: llinfos << "failed to get response. reason: " << reason << " status: " << status << llendl; } } + + /*virtual*/ void completedHeader(U32 status, const std::string& reason, const LLSD& content) + { + if (status == 302) + { + mPanelPeople->openFacebookWeb(content["location"]); + } + } }; class FacebookDisconnectResponder : public LLHTTPClient::Responder @@ -1782,7 +1787,7 @@ public: // show the facebook login page if not connected yet if (status == 404 && mShowLoginIfNotConnected) { - mPanelPeople->openFacebookWeb("https://www.facebook.com/dialog/oauth?client_id=565771023434202&redirect_uri=" + mPanelPeople->getFacebookRedirectURL()); + mPanelPeople->connectToFacebook(); } } } @@ -1810,6 +1815,14 @@ public: llinfos << "failed to get response. reason: " << reason << " status: " << status << llendl; } } + + /*virtual*/ void completedHeader(U32 status, const std::string& reason, const LLSD& content) + { + if (status == 302) + { + mPanelPeople->openFacebookWeb(content["location"]); + } + } }; void LLPanelPeople::loadFacebookFriends() @@ -1828,8 +1841,9 @@ void LLPanelPeople::tryToReconnectToFacebook() void LLPanelPeople::connectToFacebook(const std::string& auth_code) { LLSD body; - body["code"] = auth_code; - body["redirect_uri"] = getFacebookRedirectURL(); + if (!auth_code.empty()) + body["code"] = auth_code; + LLHTTPClient::put(getFacebookConnectURL("/connection"), body, new FacebookConnectResponder(this)); } @@ -1846,13 +1860,6 @@ std::string LLPanelPeople::getFacebookConnectURL(const std::string& route) return url; } -std::string LLPanelPeople::getFacebookRedirectURL() -{ - static std::string sFacebookRedirectUrl = gAgent.getRegion()->getCapability("FacebookRedirect"); - llinfos << sFacebookRedirectUrl << llendl; - return sFacebookRedirectUrl; -} - void LLPanelPeople::onLoginFbcButtonClicked() { if (mConnectedToFbc) @@ -1867,12 +1874,10 @@ void LLPanelPeople::onLoginFbcButtonClicked() void LLPanelPeople::onFacebookAppRequestClicked() { - openFacebookWeb("http://www.facebook.com/dialog/apprequests?app_id=565771023434202&message=Test&redirect_uri=" + getFacebookRedirectURL()); } void LLPanelPeople::onFacebookAppSendClicked() { - openFacebookWeb("https://www.facebook.com/dialog/send?app_id=565771023434202&name=Join Second Life!&link=https://join.secondlife.com&redirect_uri=" + getFacebookRedirectURL()); } static LLFastTimer::DeclareTimer FTM_AVATAR_LIST_TEST("avatar list test"); diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index 95105309d2..943d84ac1d 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -69,11 +69,10 @@ public: void hideFacebookFriends(); void loadFacebookFriends(); void tryToReconnectToFacebook(); - void connectToFacebook(const std::string& auth_code); + void connectToFacebook(const std::string& auth_code = ""); void disconnectFromFacebook(); std::string getFacebookConnectURL(const std::string& route = ""); - std::string getFacebookRedirectURL(); bool mConnectedToFbc; bool mTryToConnectToFbc; -- cgit v1.2.3 From a3a0d665022e9b0a9ab99f41d4a989af3fafb122 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Mon, 29 Apr 2013 18:55:23 -0700 Subject: ACME-252 Create AvatarFolderItemView: Now mouse over of peopleview items show the info button and profile button. --- indra/newview/llpersontabview.cpp | 77 +++++++++++++++++++++- indra/newview/llpersontabview.h | 16 +++-- .../skins/default/xui/en/widgets/person_view.xml | 9 +++ 3 files changed, 95 insertions(+), 7 deletions(-) diff --git a/indra/newview/llpersontabview.cpp b/indra/newview/llpersontabview.cpp index eaa112e051..fa7bc09e10 100644 --- a/indra/newview/llpersontabview.cpp +++ b/indra/newview/llpersontabview.cpp @@ -142,7 +142,6 @@ mInfoBtn(NULL), mProfileBtn(NULL), mOutputMonitorCtrl(NULL) { - initChildrenWidths(this); } S32 LLPersonView::getLabelXPos() @@ -162,6 +161,29 @@ LLPersonView::~LLPersonView() } +BOOL LLPersonView::postBuild() +{ + initChildrenWidths(this); + updateChildren(); + return LLFolderViewItem::postBuild(); +} + +void LLPersonView::onMouseEnter(S32 x, S32 y, MASK mask) +{ + mInfoBtn->setVisible(TRUE); + mProfileBtn->setVisible(TRUE); + updateChildren(); + LLFolderViewItem::onMouseEnter(x, y, mask); +} + +void LLPersonView::onMouseLeave(S32 x, S32 y, MASK mask) +{ + mInfoBtn->setVisible(FALSE); + mProfileBtn->setVisible(FALSE); + updateChildren(); + LLFolderViewItem::onMouseLeave(x, y, mask); +} + void LLPersonView::draw() { static LLUIColor sFgColor = LLUIColorTable::instance().getColor("MenuItemEnabledColor", DEFAULT_WHITE); @@ -222,6 +244,11 @@ void LLPersonView::initFromParams(const LLPersonView::Params & params) mPermissionEditTheirsIcon = LLUICtrlFactory::create(permission_edit_theirs_icon); addChild(mPermissionEditTheirsIcon); + LLIconCtrl::Params permission_edit_mine_icon(params.permission_edit_mine_icon()); + applyXUILayout(permission_edit_mine_icon, this); + mPermissionEditMineIcon = LLUICtrlFactory::create(permission_edit_mine_icon); + addChild(mPermissionEditMineIcon); + LLIconCtrl::Params permission_map_icon(params.permission_map_icon()); applyXUILayout(permission_map_icon, this); mPermissionMapIcon = LLUICtrlFactory::create(permission_map_icon); @@ -250,5 +277,53 @@ void LLPersonView::initFromParams(const LLPersonView::Params & params) void LLPersonView::initChildrenWidths(LLPersonView* self) { + S32 output_monitor_width = self->getRect().getWidth() - self->mOutputMonitorCtrl->getRect().mLeft; + S32 profile_btn_width = self->mOutputMonitorCtrl->getRect().mLeft - self->mProfileBtn->getRect().mLeft; + S32 info_btn_width = self->mProfileBtn->getRect().mLeft - self->mInfoBtn->getRect().mLeft; + S32 permission_online_icon_width = self->mInfoBtn->getRect().mLeft - self->mPermissionOnlineIcon->getRect().mLeft; + S32 permissions_map_icon_width = self->mPermissionOnlineIcon->getRect().mLeft - self->mPermissionMapIcon->getRect().mLeft; + S32 permission_edit_mine_icon_width = self->mPermissionMapIcon->getRect().mLeft - self->mPermissionEditMineIcon->getRect().mLeft; + S32 permission_edit_theirs_icon_width = self->mPermissionEditMineIcon->getRect().mLeft - self->mPermissionEditTheirsIcon->getRect().mLeft; + S32 last_interaction_time_textbox_width = self->mPermissionEditTheirsIcon->getRect().mLeft - self->mLastInteractionTimeTextbox->getRect().mLeft; + + self->mChildAndWidthVec.push_back(std::pair(self->mOutputMonitorCtrl, output_monitor_width)); + self->mChildAndWidthVec.push_back(std::pair(self->mProfileBtn, profile_btn_width)); + self->mChildAndWidthVec.push_back(std::pair(self->mInfoBtn, info_btn_width)); + self->mChildAndWidthVec.push_back(std::pair(self->mPermissionOnlineIcon, permission_online_icon_width)); + self->mChildAndWidthVec.push_back(std::pair(self->mPermissionMapIcon, permissions_map_icon_width)); + self->mChildAndWidthVec.push_back(std::pair(self->mPermissionEditMineIcon, permission_edit_mine_icon_width)); + self->mChildAndWidthVec.push_back(std::pair(self->mPermissionEditTheirsIcon, permission_edit_theirs_icon_width)); + self->mChildAndWidthVec.push_back(std::pair(self->mLastInteractionTimeTextbox, last_interaction_time_textbox_width)); } + +void LLPersonView::updateChildren() +{ + mLabelPaddingRight = 0; + LLView * control; + S32 control_width; + LLRect control_rect; + + for(S32 i = 0; i < mChildAndWidthVec.size(); ++i) + { + control = mChildAndWidthVec[i].first; + + if(!control->getVisible()) + { + continue; + } + + control_width = mChildAndWidthVec[i].second; + mLabelPaddingRight += control_width; + + control_rect = control->getRect(); + control_rect.setLeftTopAndSize( + getLocalRect().getWidth() - mLabelPaddingRight, + control_rect.mTop, + control_rect.getWidth(), + control_rect.getHeight()); + + control->setShape(control_rect); + + } +} diff --git a/indra/newview/llpersontabview.h b/indra/newview/llpersontabview.h index d8d1a65df6..56d7f4eade 100644 --- a/indra/newview/llpersontabview.h +++ b/indra/newview/llpersontabview.h @@ -86,11 +86,15 @@ public: LLPersonView(const LLPersonView::Params& p); virtual ~LLPersonView(); - S32 getLabelXPos(); - void addToFolder(LLFolderViewFolder * person_folder_view); - void initFromParams(const LLPersonView::Params & params); + S32 getLabelXPos(); + void addToFolder(LLFolderViewFolder * person_folder_view); + void initFromParams(const LLPersonView::Params & params); + BOOL postBuild(); + void onMouseEnter(S32 x, S32 y, MASK mask); + void onMouseLeave(S32 x, S32 y, MASK mask); protected: + void draw(); void drawHighlight(); @@ -123,12 +127,12 @@ private: ALIC_COUNT, } EAvatarListItemChildIndex; + typedef std::vector> ChildAndWidthVec; + ChildAndWidthVec mChildAndWidthVec; + static bool sStaticInitialized; - static S32 sMouseOverChildrenWidths[ALIC_COUNT]; - static S32 sMouseOverChildren[ALIC_COUNT]; static void initChildrenWidths(LLPersonView* self); void updateChildren(); - //LLView* getItemChildView(EAvatarListItemChildIndex child_view_index); }; #endif // LL_LLPERSONTABVIEW_H diff --git a/indra/newview/skins/default/xui/en/widgets/person_view.xml b/indra/newview/skins/default/xui/en/widgets/person_view.xml index d257a5114f..d0d87c02c2 100644 --- a/indra/newview/skins/default/xui/en/widgets/person_view.xml +++ b/indra/newview/skins/default/xui/en/widgets/person_view.xml @@ -31,6 +31,7 @@ name="last_interaction_time_textbox" text_color="LtGray_50" value="0s" + visible="false" width="35" /> -- cgit v1.2.3 From 343ad70696349f4b30b7f2f9a6242cdd1035cd21 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Mon, 29 Apr 2013 18:57:26 -0700 Subject: ACME-275 : WIP : Starting to write the LLPersonViewerFilter code --- indra/newview/llpanelpeople.cpp | 24 ++++++++------ indra/newview/llpersonmodelcommon.cpp | 62 +++++++++++++++++++++++++++++++++++ indra/newview/llpersonmodelcommon.h | 26 +++++++++------ 3 files changed, 92 insertions(+), 20 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index ef45cc44f7..ce31c735e3 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1200,23 +1200,23 @@ void LLPanelPeople::onFilterEdit(const std::string& search_string) { // store accordion tabs opened/closed state before any manipulation with accordion tabs if (!saved_filter.empty()) - { - notifyChildren(LLSD().with("action","store_state")); - } + { + notifyChildren(LLSD().with("action","store_state")); + } mOnlineFriendList->setNameFilter(filter); mAllFriendList->setNameFilter(filter); - setAccordionCollapsedByUser("tab_online", false); - setAccordionCollapsedByUser("tab_all", false); - showFriendsAccordionsIfNeeded(); + setAccordionCollapsedByUser("tab_online", false); + setAccordionCollapsedByUser("tab_all", false); + showFriendsAccordionsIfNeeded(); // restore accordion tabs state _after_ all manipulations if(saved_filter.empty()) - { - notifyChildren(LLSD().with("action","restore_state")); - } -} + { + notifyChildren(LLSD().with("action","restore_state")); + } + } else if (cur_tab == GROUP_TAB_NAME) { mGroupList->setNameFilter(filter); @@ -1225,6 +1225,10 @@ void LLPanelPeople::onFilterEdit(const std::string& search_string) { mRecentList->setNameFilter(filter); } + else if (cur_tab == FBCTESTTWO_TAB_NAME) + { + mPersonFolderViewModel.getFilter().setFilterSubString(filter); + } } void LLPanelPeople::onTabSelected(const LLSD& param) diff --git a/indra/newview/llpersonmodelcommon.cpp b/indra/newview/llpersonmodelcommon.cpp index bea7f3d45e..4e54562f18 100644 --- a/indra/newview/llpersonmodelcommon.cpp +++ b/indra/newview/llpersonmodelcommon.cpp @@ -157,3 +157,65 @@ LLPersonModel::LLPersonModel(LLFolderViewModelInterface& root_view_model) : LLPersonModelCommon(root_view_model) { } + +// +// LLPersonViewFilter +// + +LLPersonViewFilter::LLPersonViewFilter() : + mEmpty(""), + mFilterSubString(""), + mFilterModified(FILTER_NONE) +{ +} + +void LLPersonViewFilter::setFilterSubString(const std::string& string) +{ + std::string filter_sub_string_new = string; + LLStringUtil::trimHead(filter_sub_string_new); + LLStringUtil::toUpper(filter_sub_string_new); + + if (mFilterSubString != filter_sub_string_new) + { + mFilterSubString = filter_sub_string_new; + } +} + +std::string::size_type LLPersonViewFilter::getFilterStringSize() const +{ + return mFilterSubString.size(); +} + +bool LLPersonViewFilter::check(const LLFolderViewModelItem* item) +{ + //const LLPersonModelCommon* person = dynamic_cast(item); + std::string::size_type string_offset = mFilterSubString.size() ? item->getSearchableName().find(mFilterSubString) : std::string::npos; + + return (mFilterSubString.size() == 0 || string_offset != std::string::npos); +} + +bool LLPersonViewFilter::showAllResults() const +{ + return mFilterSubString.size() > 0; +} + +std::string::size_type LLPersonViewFilter::getStringMatchOffset(LLFolderViewModelItem* item) const +{ + return mFilterSubString.size() ? item->getSearchableName().find(mFilterSubString) : std::string::npos; +} + +bool LLPersonViewFilter::isActive() const +{ + return mFilterSubString.size(); +} + +bool LLPersonViewFilter::isModified() const +{ + return isActive(); +} + +void LLPersonViewFilter::clearModified() +{ + mFilterModified = FILTER_NONE; + setFilterSubString(""); +} diff --git a/indra/newview/llpersonmodelcommon.h b/indra/newview/llpersonmodelcommon.h index f3454df53f..bdbee002e6 100644 --- a/indra/newview/llpersonmodelcommon.h +++ b/indra/newview/llpersonmodelcommon.h @@ -127,7 +127,7 @@ private: }; -//Below code is just copied and adjusted from llconversationmodel.h, will need to investigate further +// Filtering functional object class LLPersonViewFilter : public LLFolderViewFilter { @@ -143,20 +143,23 @@ public: // Default sort order is by type for sessions and by date for participants static const U32 SO_DEFAULT = (SO_SESSION_TYPE << 16) | (SO_DATE); - LLPersonViewFilter() { mEmpty = ""; } + LLPersonViewFilter(); ~LLPersonViewFilter() {} - bool check(const LLFolderViewModelItem* item) { return true; } + void setFilterSubString(const std::string& string); + std::string::size_type getFilterStringSize() const; + bool check(const LLFolderViewModelItem* item); + bool showAllResults() const; + std::string::size_type getStringMatchOffset(LLFolderViewModelItem* item) const; + bool isActive() const; + bool isModified() const; + void clearModified(); + bool checkFolder(const LLFolderViewModelItem* folder) const { return true; } + void setEmptyLookupMessage(const std::string& message) { } std::string getEmptyLookupMessage() const { return mEmpty; } - bool showAllResults() const { return true; } - std::string::size_type getStringMatchOffset(LLFolderViewModelItem* item) const { return std::string::npos; } - std::string::size_type getFilterStringSize() const { return 0; } - bool isActive() const { return false; } - bool isModified() const { return false; } - void clearModified() { } const std::string& getName() const { return mEmpty; } const std::string& getFilterText() { return mEmpty; } void setModified(EFilterModified behavior = FILTER_RESTART) { } @@ -173,8 +176,11 @@ public: S32 getCurrentGeneration() const { return 0; } S32 getFirstSuccessGeneration() const { return 0; } S32 getFirstRequiredGeneration() const { return 0; } + private: - std::string mEmpty; + std::string mEmpty; + std::string mFilterSubString; + EFilterModified mFilterModified; }; class LLPersonViewSort -- cgit v1.2.3 From 8189c27cfad6f498966dc99dd483df8466330ccd Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Tue, 30 Apr 2013 11:37:16 -0700 Subject: ACME-252 Create AvatarFolderItemView: Optimization. Now the widths for the personview are computed once and stored staticically since they don't change per control. --- indra/newview/llpersontabview.cpp | 48 ++++++++++++++++++++++++++++----------- indra/newview/llpersontabview.h | 14 ++++++++---- 2 files changed, 45 insertions(+), 17 deletions(-) diff --git a/indra/newview/llpersontabview.cpp b/indra/newview/llpersontabview.cpp index fa7bc09e10..2bc436226d 100644 --- a/indra/newview/llpersontabview.cpp +++ b/indra/newview/llpersontabview.cpp @@ -116,6 +116,9 @@ void LLPersonTabView::drawHighlight() static LLDefaultChildRegistry::Register r_person_view("person_view"); +bool LLPersonView::sChildrenWidthsInitialized = false; +ChildWidthVec LLPersonView::mChildWidthVec; + LLPersonView::Params::Params() : avatar_icon("avatar_icon"), last_interaction_time_textbox("last_interaction_time_textbox"), @@ -163,7 +166,13 @@ LLPersonView::~LLPersonView() BOOL LLPersonView::postBuild() { - initChildrenWidths(this); + if(!sChildrenWidthsInitialized) + { + initChildrenWidthVec(this); + sChildrenWidthsInitialized = true; + } + + initChildVec(); updateChildren(); return LLFolderViewItem::postBuild(); } @@ -275,7 +284,7 @@ void LLPersonView::initFromParams(const LLPersonView::Params & params) addChild(mOutputMonitorCtrl); } -void LLPersonView::initChildrenWidths(LLPersonView* self) +void LLPersonView::initChildrenWidthVec(LLPersonView* self) { S32 output_monitor_width = self->getRect().getWidth() - self->mOutputMonitorCtrl->getRect().mLeft; S32 profile_btn_width = self->mOutputMonitorCtrl->getRect().mLeft - self->mProfileBtn->getRect().mLeft; @@ -286,15 +295,26 @@ void LLPersonView::initChildrenWidths(LLPersonView* self) S32 permission_edit_theirs_icon_width = self->mPermissionEditMineIcon->getRect().mLeft - self->mPermissionEditTheirsIcon->getRect().mLeft; S32 last_interaction_time_textbox_width = self->mPermissionEditTheirsIcon->getRect().mLeft - self->mLastInteractionTimeTextbox->getRect().mLeft; - self->mChildAndWidthVec.push_back(std::pair(self->mOutputMonitorCtrl, output_monitor_width)); - self->mChildAndWidthVec.push_back(std::pair(self->mProfileBtn, profile_btn_width)); - self->mChildAndWidthVec.push_back(std::pair(self->mInfoBtn, info_btn_width)); - self->mChildAndWidthVec.push_back(std::pair(self->mPermissionOnlineIcon, permission_online_icon_width)); - self->mChildAndWidthVec.push_back(std::pair(self->mPermissionMapIcon, permissions_map_icon_width)); - self->mChildAndWidthVec.push_back(std::pair(self->mPermissionEditMineIcon, permission_edit_mine_icon_width)); - self->mChildAndWidthVec.push_back(std::pair(self->mPermissionEditTheirsIcon, permission_edit_theirs_icon_width)); - self->mChildAndWidthVec.push_back(std::pair(self->mLastInteractionTimeTextbox, last_interaction_time_textbox_width)); + self->mChildWidthVec.push_back(output_monitor_width); + self->mChildWidthVec.push_back(profile_btn_width); + self->mChildWidthVec.push_back(info_btn_width); + self->mChildWidthVec.push_back(permission_online_icon_width); + self->mChildWidthVec.push_back(permissions_map_icon_width); + self->mChildWidthVec.push_back(permission_edit_mine_icon_width); + self->mChildWidthVec.push_back(permission_edit_theirs_icon_width); + self->mChildWidthVec.push_back(last_interaction_time_textbox_width); +} +void LLPersonView::initChildVec() +{ + mChildVec.push_back(mOutputMonitorCtrl); + mChildVec.push_back(mProfileBtn); + mChildVec.push_back(mInfoBtn); + mChildVec.push_back(mPermissionOnlineIcon); + mChildVec.push_back(mPermissionMapIcon); + mChildVec.push_back(mPermissionEditMineIcon); + mChildVec.push_back(mPermissionEditTheirsIcon); + mChildVec.push_back(mLastInteractionTimeTextbox); } void LLPersonView::updateChildren() @@ -304,16 +324,18 @@ void LLPersonView::updateChildren() S32 control_width; LLRect control_rect; - for(S32 i = 0; i < mChildAndWidthVec.size(); ++i) + llassert(mChildWidthVec.size() == mChildVec.size()); + + for(S32 i = 0; i < mChildWidthVec.size(); ++i) { - control = mChildAndWidthVec[i].first; + control = mChildVec[i]; if(!control->getVisible()) { continue; } - control_width = mChildAndWidthVec[i].second; + control_width = mChildWidthVec[i]; mLabelPaddingRight += control_width; control_rect = control->getRect(); diff --git a/indra/newview/llpersontabview.h b/indra/newview/llpersontabview.h index 56d7f4eade..80020073d7 100644 --- a/indra/newview/llpersontabview.h +++ b/indra/newview/llpersontabview.h @@ -64,6 +64,9 @@ private: }; +typedef std::vector ChildWidthVec; +typedef std::vector ChildVec; + class LLPersonView : public LLFolderViewItem { @@ -127,11 +130,14 @@ private: ALIC_COUNT, } EAvatarListItemChildIndex; - typedef std::vector> ChildAndWidthVec; - ChildAndWidthVec mChildAndWidthVec; + //Widths of controls are same for every instance so can be static + static ChildWidthVec mChildWidthVec; + //Control pointers are different for each instance so non-static + ChildVec mChildVec; - static bool sStaticInitialized; - static void initChildrenWidths(LLPersonView* self); + static bool sChildrenWidthsInitialized; + static void initChildrenWidthVec(LLPersonView* self); + void initChildVec(); void updateChildren(); }; -- cgit v1.2.3 From 03239c14e82f4d400cefa8c4b418a6192cc08654 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Tue, 30 Apr 2013 14:03:04 -0700 Subject: ACME-252 Create AvatarFolderItemView: Now clicking the profile button and info button will show a facebook user's SL profile or info respectively. --- indra/newview/llpanelpeople.cpp | 2 +- indra/newview/llpersonmodelcommon.cpp | 13 ++++++++++--- indra/newview/llpersonmodelcommon.h | 6 ++++-- indra/newview/llpersontabview.cpp | 10 ++++++++++ 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 609284cdd5..4c044c2471 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1698,7 +1698,7 @@ void LLPanelPeople::addParticipantToModel(LLPersonTabModel * person_folder_model { LLPersonModel* person_model = NULL; - person_model = new LLPersonModel(name, mPersonFolderViewModel); + person_model = new LLPersonModel(agent_id, name, mPersonFolderViewModel); person_folder_model->addParticipant(person_model); } diff --git a/indra/newview/llpersonmodelcommon.cpp b/indra/newview/llpersonmodelcommon.cpp index 4e54562f18..91c3f6a92a 100644 --- a/indra/newview/llpersonmodelcommon.cpp +++ b/indra/newview/llpersonmodelcommon.cpp @@ -148,14 +148,21 @@ LLPersonModel* LLPersonTabModel::findParticipant(const LLUUID& person_id) // LLPersonModel // -LLPersonModel::LLPersonModel(std::string display_name, LLFolderViewModelInterface& root_view_model) : -LLPersonModelCommon(display_name,root_view_model) +LLPersonModel::LLPersonModel(const LLUUID& agent_id, const std::string display_name, LLFolderViewModelInterface& root_view_model) : +LLPersonModelCommon(display_name,root_view_model), +mAgentID(agent_id) { } LLPersonModel::LLPersonModel(LLFolderViewModelInterface& root_view_model) : -LLPersonModelCommon(root_view_model) +LLPersonModelCommon(root_view_model), +mAgentID(LLUUID(NULL)) +{ +} + +LLUUID LLPersonModel::getAgentID() { + return mAgentID; } // diff --git a/indra/newview/llpersonmodelcommon.h b/indra/newview/llpersonmodelcommon.h index bdbee002e6..4030cd11df 100644 --- a/indra/newview/llpersonmodelcommon.h +++ b/indra/newview/llpersonmodelcommon.h @@ -120,11 +120,13 @@ private: class LLPersonModel : public LLPersonModelCommon { public: - LLPersonModel(std::string display_name, LLFolderViewModelInterface& root_view_model); + LLPersonModel(const LLUUID& agent_id, const std::string display_name, LLFolderViewModelInterface& root_view_model); LLPersonModel(LLFolderViewModelInterface& root_view_model); -private: + LLUUID getAgentID(); +private: + LLUUID mAgentID; }; // Filtering functional object diff --git a/indra/newview/llpersontabview.cpp b/indra/newview/llpersontabview.cpp index 2bc436226d..a0d6b40d08 100644 --- a/indra/newview/llpersontabview.cpp +++ b/indra/newview/llpersontabview.cpp @@ -29,6 +29,10 @@ #include "llpersontabview.h" +#include "llavataractions.h" +#include "llfloaterreg.h" +#include "llpersonmodelcommon.h" + static LLDefaultChildRegistry::Register r_person_tab_view("person_tab_view"); const LLColor4U DEFAULT_WHITE(255, 255, 255); @@ -174,6 +178,12 @@ BOOL LLPersonView::postBuild() initChildVec(); updateChildren(); + + LLPersonModel * person_model = static_cast(getViewModelItem()); + + mInfoBtn->setClickedCallback(boost::bind(&LLFloaterReg::showInstance, "inspect_avatar", LLSD().with("avatar_id", person_model->getAgentID()), FALSE)); + mProfileBtn->setClickedCallback(boost::bind(&LLAvatarActions::showProfile, person_model->getAgentID())); + return LLFolderViewItem::postBuild(); } -- cgit v1.2.3 From f18c5ad3c6cb95ad329ad7147631edd6855f3ac5 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Tue, 30 Apr 2013 15:33:40 -0700 Subject: ACME-252 Create AvatarFolderItemView: Now the people view shows both the facebook name and the SL name (assuming this connection exists). --- indra/newview/llpanelpeople.cpp | 7 ++++++- indra/newview/llpersontabview.cpp | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 4c044c2471..a9a024c9ed 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1698,7 +1698,12 @@ void LLPanelPeople::addParticipantToModel(LLPersonTabModel * person_folder_model { LLPersonModel* person_model = NULL; - person_model = new LLPersonModel(agent_id, name, mPersonFolderViewModel); + LLAvatarName avatar_name; + bool avatar_name_exists = LLAvatarNameCache::get(agent_id, &avatar_name); + + std::string aggregated_name = avatar_name_exists ? name + " (" + avatar_name.getDisplayName() + ") " : name; + + person_model = new LLPersonModel(agent_id, aggregated_name, mPersonFolderViewModel); person_folder_model->addParticipant(person_model); } diff --git a/indra/newview/llpersontabview.cpp b/indra/newview/llpersontabview.cpp index a0d6b40d08..76f3151777 100644 --- a/indra/newview/llpersontabview.cpp +++ b/indra/newview/llpersontabview.cpp @@ -181,6 +181,7 @@ BOOL LLPersonView::postBuild() LLPersonModel * person_model = static_cast(getViewModelItem()); + mAvatarIcon->setValue(person_model->getAgentID()); mInfoBtn->setClickedCallback(boost::bind(&LLFloaterReg::showInstance, "inspect_avatar", LLSD().with("avatar_id", person_model->getAgentID()), FALSE)); mProfileBtn->setClickedCallback(boost::bind(&LLAvatarActions::showProfile, person_model->getAgentID())); -- cgit v1.2.3 From 9fdfc8dd5c52e515990f3ef4e552b9084fa66373 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Tue, 30 Apr 2013 16:01:31 -0700 Subject: ACME-252 Create AvatarFolderItemView: Slight xml change for person view to make the profile button display lower. --- indra/newview/skins/default/xui/en/widgets/person_view.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/indra/newview/skins/default/xui/en/widgets/person_view.xml b/indra/newview/skins/default/xui/en/widgets/person_view.xml index d0d87c02c2..4a39109f36 100644 --- a/indra/newview/skins/default/xui/en/widgets/person_view.xml +++ b/indra/newview/skins/default/xui/en/widgets/person_view.xml @@ -90,6 +90,7 @@ visible="false" width="16" /> Date: Tue, 30 Apr 2013 17:18:29 -0700 Subject: ACME-275 : WIP : Write all LLPersonViewerFilter methods and clean up interface --- indra/newview/llpersonmodelcommon.cpp | 32 ++++++++++++------ indra/newview/llpersonmodelcommon.h | 64 +++++++++++++++++++++++------------ 2 files changed, 64 insertions(+), 32 deletions(-) diff --git a/indra/newview/llpersonmodelcommon.cpp b/indra/newview/llpersonmodelcommon.cpp index 4e54562f18..32ceef096d 100644 --- a/indra/newview/llpersonmodelcommon.cpp +++ b/indra/newview/llpersonmodelcommon.cpp @@ -163,8 +163,9 @@ LLPersonModelCommon(root_view_model) // LLPersonViewFilter::LLPersonViewFilter() : - mEmpty(""), + mEmptyLookupMessage(""), mFilterSubString(""), + mName(""), mFilterModified(FILTER_NONE) { } @@ -177,31 +178,32 @@ void LLPersonViewFilter::setFilterSubString(const std::string& string) if (mFilterSubString != filter_sub_string_new) { + // *TODO : Add logic to support more and less restrictive filtering + mFilterModified = FILTER_RESTART; mFilterSubString = filter_sub_string_new; } } -std::string::size_type LLPersonViewFilter::getFilterStringSize() const +bool LLPersonViewFilter::showAllResults() const { - return mFilterSubString.size(); + return mFilterSubString.size() > 0; } bool LLPersonViewFilter::check(const LLFolderViewModelItem* item) { - //const LLPersonModelCommon* person = dynamic_cast(item); std::string::size_type string_offset = mFilterSubString.size() ? item->getSearchableName().find(mFilterSubString) : std::string::npos; return (mFilterSubString.size() == 0 || string_offset != std::string::npos); } -bool LLPersonViewFilter::showAllResults() const +std::string::size_type LLPersonViewFilter::getStringMatchOffset(LLFolderViewModelItem* item) const { - return mFilterSubString.size() > 0; + return mFilterSubString.size() ? item->getSearchableName().find(mFilterSubString) : std::string::npos; } -std::string::size_type LLPersonViewFilter::getStringMatchOffset(LLFolderViewModelItem* item) const +std::string::size_type LLPersonViewFilter::getFilterStringSize() const { - return mFilterSubString.size() ? item->getSearchableName().find(mFilterSubString) : std::string::npos; + return mFilterSubString.size(); } bool LLPersonViewFilter::isActive() const @@ -211,11 +213,21 @@ bool LLPersonViewFilter::isActive() const bool LLPersonViewFilter::isModified() const { - return isActive(); + return mFilterModified != FILTER_NONE; } void LLPersonViewFilter::clearModified() { mFilterModified = FILTER_NONE; - setFilterSubString(""); } + +void LLPersonViewFilter::setEmptyLookupMessage(const std::string& message) +{ + mEmptyLookupMessage = message; +} + +std::string LLPersonViewFilter::getEmptyLookupMessage() const +{ + return mEmptyLookupMessage; +} + diff --git a/indra/newview/llpersonmodelcommon.h b/indra/newview/llpersonmodelcommon.h index bdbee002e6..2ddec3d05e 100644 --- a/indra/newview/llpersonmodelcommon.h +++ b/indra/newview/llpersonmodelcommon.h @@ -136,49 +136,69 @@ public: enum ESortOrderType { SO_NAME = 0, // Sort by name - SO_DATE = 0x1, // Sort by date (most recent) - SO_SESSION_TYPE = 0x2, // Sort by type (valid only for sessions) - SO_DISTANCE = 0x3, // Sort by distance (valid only for participants in nearby chat) + SO_ONLINE_STATUS = 0x1 // Sort by online status (i.e. online or not) }; - // Default sort order is by type for sessions and by date for participants - static const U32 SO_DEFAULT = (SO_SESSION_TYPE << 16) | (SO_DATE); + // Default sort order is by name + static const U32 SO_DEFAULT = SO_NAME; LLPersonViewFilter(); ~LLPersonViewFilter() {} - void setFilterSubString(const std::string& string); - std::string::size_type getFilterStringSize() const; + // +-------------------------------------------------------------------+ + // + Execution And Results + // +-------------------------------------------------------------------+ bool check(const LLFolderViewModelItem* item); + bool checkFolder(const LLFolderViewModelItem* folder) const { return true; } + + void setEmptyLookupMessage(const std::string& message); + std::string getEmptyLookupMessage() const; + bool showAllResults() const; + std::string::size_type getStringMatchOffset(LLFolderViewModelItem* item) const; + std::string::size_type getFilterStringSize() const; + + // +-------------------------------------------------------------------+ + // + Status + // +-------------------------------------------------------------------+ bool isActive() const; bool isModified() const; void clearModified(); - - bool checkFolder(const LLFolderViewModelItem* folder) const { return true; } + const std::string& getName() const { return mName; } + const std::string& getFilterText() { return mName; } + void setModified(EFilterModified behavior = FILTER_RESTART) { mFilterModified = behavior; } - void setEmptyLookupMessage(const std::string& message) { } - std::string getEmptyLookupMessage() const { return mEmpty; } - - const std::string& getName() const { return mEmpty; } - const std::string& getFilterText() { return mEmpty; } - void setModified(EFilterModified behavior = FILTER_RESTART) { } - + // +-------------------------------------------------------------------+ + // + Count + // +-------------------------------------------------------------------+ + // Note : we currently filter the whole person list at once, no need to count then. void setFilterCount(S32 count) { } S32 getFilterCount() const { return 0; } void decrementFilterCount() { } - bool isDefault() const { return true; } - bool isNotDefault() const { return false; } + // +-------------------------------------------------------------------+ + // + Default + // +-------------------------------------------------------------------+ + // Note : we don't support runtime default setting for person filter + bool isDefault() const { return !isActive(); } + bool isNotDefault() const { return isActive(); } void markDefault() { } - void resetDefault() { } - + void resetDefault() { setModified(); } + + // +-------------------------------------------------------------------+ + // + Generation + // +-------------------------------------------------------------------+ + // Note : unclear if we have to take tab on generation at that point S32 getCurrentGeneration() const { return 0; } S32 getFirstSuccessGeneration() const { return 0; } S32 getFirstRequiredGeneration() const { return 0; } - + + // Non Virtual Methods (i.e. specific to this class) + void setFilterSubString(const std::string& string); + private: - std::string mEmpty; + std::string mName; + std::string mEmptyLookupMessage; std::string mFilterSubString; EFilterModified mFilterModified; }; -- cgit v1.2.3 From 4d72a6ea92d87822350be63e235b90daa4727d55 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Tue, 30 Apr 2013 18:17:20 -0700 Subject: ACME-252 Create AvatarFolderItemView: Fixed focusing issue when hovering over a people view and then selected an icon. Now when selecting the icon upon hover the corresponding people view will be selected as well. --- indra/newview/llpanelpeople.cpp | 2 +- indra/newview/llpersonfolderview.cpp | 7 ++++++- indra/newview/llpersontabview.cpp | 36 ++++++++++++++++++++++++++++++++++++ indra/newview/llpersontabview.h | 1 + 4 files changed, 44 insertions(+), 2 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index a9a024c9ed..77c3430c01 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1690,7 +1690,7 @@ void LLPanelPeople::addTestParticipant() for(int i = 0; i < 300; ++i) { LLPersonTabModel * person_folder_model = dynamic_cast(mPersonFolderView->mPersonFolderModelMap.begin()->second); - addParticipantToModel(person_folder_model, LLUUID().generateNewID(), "EastBayGuy"); + addParticipantToModel(person_folder_model, gAgent.getID(), "Test Name"); } } diff --git a/indra/newview/llpersonfolderview.cpp b/indra/newview/llpersonfolderview.cpp index 636d093e0e..ba1e9d20eb 100644 --- a/indra/newview/llpersonfolderview.cpp +++ b/indra/newview/llpersonfolderview.cpp @@ -64,7 +64,12 @@ BOOL LLPersonFolderView::handleMouseDown( S32 x, S32 y, MASK mask ) } } - return LLFolderView::handleMouseDown(x, y, mask); + mKeyboardSelection = FALSE; + mSearchString.clear(); + + LLEditMenuHandler::gEditMenuHandler = this; + + return LLView::handleMouseDown( x, y, mask ); } bool LLPersonFolderView::onConversationModelEvent(const LLSD &event) diff --git a/indra/newview/llpersontabview.cpp b/indra/newview/llpersontabview.cpp index 76f3151777..fdc024beb8 100644 --- a/indra/newview/llpersontabview.cpp +++ b/indra/newview/llpersontabview.cpp @@ -65,6 +65,7 @@ BOOL LLPersonTabView::handleMouseDown( S32 x, S32 y, MASK mask ) if(selected_item) { + gFocusMgr.setKeyboardFocus( this ); highlight = true; } @@ -204,6 +205,41 @@ void LLPersonView::onMouseLeave(S32 x, S32 y, MASK mask) LLFolderViewItem::onMouseLeave(x, y, mask); } +BOOL LLPersonView::handleMouseDown( S32 x, S32 y, MASK mask) +{ + if(!LLView::childrenHandleMouseDown(x, y, mask)) + { + gFocusMgr.setMouseCapture( this ); + } + + if (!mIsSelected) + { + if(mask & MASK_CONTROL) + { + getRoot()->changeSelection(this, !mIsSelected); + } + else if (mask & MASK_SHIFT) + { + getParentFolder()->extendSelectionTo(this); + } + else + { + getRoot()->setSelection(this, FALSE); + } + make_ui_sound("UISndClick"); + } + else + { + // If selected, we reserve the decision of deselecting/reselecting to the mouse up moment. + // This is necessary so we maintain selection consistent when starting a drag. + mSelectPending = TRUE; + } + + mDragStartX = x; + mDragStartY = y; + return TRUE; +} + void LLPersonView::draw() { static LLUIColor sFgColor = LLUIColorTable::instance().getColor("MenuItemEnabledColor", DEFAULT_WHITE); diff --git a/indra/newview/llpersontabview.h b/indra/newview/llpersontabview.h index 80020073d7..9cce615167 100644 --- a/indra/newview/llpersontabview.h +++ b/indra/newview/llpersontabview.h @@ -95,6 +95,7 @@ public: BOOL postBuild(); void onMouseEnter(S32 x, S32 y, MASK mask); void onMouseLeave(S32 x, S32 y, MASK mask); + BOOL handleMouseDown( S32 x, S32 y, MASK mask); protected: -- cgit v1.2.3 From 145bbacc6c167351357572a5d635f790e6715b86 Mon Sep 17 00:00:00 2001 From: Cho Date: Wed, 1 May 2013 20:43:49 +0100 Subject: made secondlife:///app/fbc/connect avoid 'the slurl you click on is not supported' messages --- indra/newview/llpanelpeople.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index a9a024c9ed..640c5e4e4e 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -111,12 +111,11 @@ public: { mPanelPeople->connectToFacebook(query_map["code"]); mPanelPeople = NULL; - return true; } } + return true; } } - return false; } }; -- cgit v1.2.3 From a73305c41d058fc755b824e5a9243afe43b424e1 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Thu, 2 May 2013 16:24:09 -0700 Subject: ACME-275 : WIP : Implemented filter(), still arrange() not done timely, tweaked test values to allow test of sort and filter --- indra/newview/llpanelpeople.cpp | 14 ++++++++- indra/newview/llpersonmodelcommon.cpp | 55 ++++++++++++++++++++++++++++++----- indra/newview/llpersonmodelcommon.h | 18 +++++++----- 3 files changed, 72 insertions(+), 15 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index a9a024c9ed..9daf441ab3 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1687,10 +1687,22 @@ void LLPanelPeople::showFacebookFriends(const LLSD& friends) void LLPanelPeople::addTestParticipant() { + std::string suffix("Aa"); + std::string prefix("EastBayGuy"); for(int i = 0; i < 300; ++i) { LLPersonTabModel * person_folder_model = dynamic_cast(mPersonFolderView->mPersonFolderModelMap.begin()->second); - addParticipantToModel(person_folder_model, LLUUID().generateNewID(), "EastBayGuy"); + std::string name = prefix + " " + suffix; + addParticipantToModel(person_folder_model, LLUUID().generateNewID(), name); + // Next suffix : Aa, Ab, Ac ... Az, Ba, Bb, Bc ... Bz, Ca, Cb ... + suffix[1]+=1; + if (suffix[1]=='{') + { + suffix[1]='a'; + suffix[0]+=1; + if (suffix[0]=='[') + suffix[0]='A'; + } } } diff --git a/indra/newview/llpersonmodelcommon.cpp b/indra/newview/llpersonmodelcommon.cpp index 3e9ca9c3b9..9660432b80 100644 --- a/indra/newview/llpersonmodelcommon.cpp +++ b/indra/newview/llpersonmodelcommon.cpp @@ -31,21 +31,23 @@ #include "llevents.h" #include "llsdutil.h" +#include "llstring.h" // // LLPersonModelCommon // LLPersonModelCommon::LLPersonModelCommon(std::string display_name, LLFolderViewModelInterface& root_view_model) : -LLFolderViewModelItemCommon(root_view_model), - mName(display_name), + LLFolderViewModelItemCommon(root_view_model), mID(LLUUID().generateNewID()) { + renameItem(display_name); } LLPersonModelCommon::LLPersonModelCommon(LLFolderViewModelInterface& root_view_model) : -LLFolderViewModelItemCommon(root_view_model), + LLFolderViewModelItemCommon(root_view_model), mName(""), + mSearchableName(""), mID(LLUUID().generateNewID()) { } @@ -55,6 +57,14 @@ LLPersonModelCommon::~LLPersonModelCommon() } +BOOL LLPersonModelCommon::renameItem(const std::string& new_name) +{ + mName = new_name; + mSearchableName = new_name; + LLStringUtil::toUpper(mSearchableName); + return TRUE; +} + void LLPersonModelCommon::postEvent(const std::string& event_type, LLPersonTabModel* folder, LLPersonModel* person) { LLUUID folder_id = folder->getID(); @@ -84,6 +94,39 @@ void LLPersonModelCommon::showProperties(void) { } +bool LLPersonModelCommon::filter( LLFolderViewFilter& filter) +{ + // See LLFolderViewModelItemInventory::filter() +/* + if (!filter.isModified()) + { + llinfos << "Merov : LLPersonModelCommon::filter, exit, no modif" << llendl; + return true; + } +*/ + if (!mChildren.empty()) + { + //llinfos << "Merov : LLPersonModelCommon::filter, filtering folder = " << getDisplayName() << llendl; + setPassedFilter(1, -1, filter.getStringMatchOffset(this), filter.getFilterStringSize()); + for (child_list_t::iterator iter = mChildren.begin(), end_iter = mChildren.end(); + iter != end_iter; + ++iter) + { + // LLFolderViewModelItem + LLPersonModelCommon* item = dynamic_cast(*iter); + item->filter(filter); + } + } + else + { + const bool passed_filter = filter.check(this); + setPassedFilter(passed_filter, -1, filter.getStringMatchOffset(this), filter.getFilterStringSize()); + } + + filter.clearModified(); + return true; +} + // // LLPersonTabModel // @@ -186,7 +229,7 @@ void LLPersonViewFilter::setFilterSubString(const std::string& string) if (mFilterSubString != filter_sub_string_new) { // *TODO : Add logic to support more and less restrictive filtering - mFilterModified = FILTER_RESTART; + setModified(FILTER_RESTART); mFilterSubString = filter_sub_string_new; } } @@ -198,9 +241,7 @@ bool LLPersonViewFilter::showAllResults() const bool LLPersonViewFilter::check(const LLFolderViewModelItem* item) { - std::string::size_type string_offset = mFilterSubString.size() ? item->getSearchableName().find(mFilterSubString) : std::string::npos; - - return (mFilterSubString.size() == 0 || string_offset != std::string::npos); + return (mFilterSubString.size() ? (item->getSearchableName().find(mFilterSubString) != std::string::npos) : true); } std::string::size_type LLPersonViewFilter::getStringMatchOffset(LLFolderViewModelItem* item) const diff --git a/indra/newview/llpersonmodelcommon.h b/indra/newview/llpersonmodelcommon.h index 9e13a7d7d9..1e9117c2df 100644 --- a/indra/newview/llpersonmodelcommon.h +++ b/indra/newview/llpersonmodelcommon.h @@ -46,13 +46,14 @@ public: // Stub those things we won't really be using in this conversation context virtual const std::string& getName() const { return mName; } virtual const std::string& getDisplayName() const { return mName; } - virtual const std::string& getSearchableName() const { return mName; } + virtual const std::string& getSearchableName() const { return mSearchableName; } + virtual LLPointer getIcon() const { return NULL; } virtual LLPointer getOpenIcon() const { return getIcon(); } virtual LLFontGL::StyleFlags getLabelStyle() const { return LLFontGL::NORMAL; } virtual std::string getLabelSuffix() const { return LLStringUtil::null; } virtual BOOL isItemRenameable() const { return TRUE; } - virtual BOOL renameItem(const std::string& new_name) { mName = new_name; return TRUE; } + virtual BOOL renameItem(const std::string& new_name); virtual BOOL isItemMovable( void ) const { return FALSE; } virtual BOOL isItemRemovable( void ) const { return FALSE; } virtual BOOL isItemInTrash( void) const { return FALSE; } @@ -70,10 +71,12 @@ public: virtual bool hasChildren() const { return FALSE; } virtual bool potentiallyVisible() { return true; } - virtual bool filter( LLFolderViewFilter& filter) { return false; } + + virtual bool filter( LLFolderViewFilter& filter); + virtual bool descendantsPassedFilter(S32 filter_generation = -1) { return true; } - virtual void setPassedFilter(bool passed, S32 filter_generation, std::string::size_type string_offset = std::string::npos, std::string::size_type string_size = 0) { } - virtual bool passedFilter(S32 filter_generation = -1) { return true; } +// virtual void setPassedFilter(bool passed, S32 filter_generation, std::string::size_type string_offset = std::string::npos, std::string::size_type string_size = 0) { } + virtual bool passedFilter(S32 filter_generation = -1) { return mPassedFilter; } // The action callbacks virtual void performAction(LLInventoryModel* model, std::string action); @@ -97,7 +100,8 @@ public: protected: - std::string mName; // Name of the session or the participant + std::string mName; // Name of the person + std::string mSearchableName; // Name used in string matching for this person LLUUID mID; }; @@ -175,7 +179,7 @@ public: // +-------------------------------------------------------------------+ // Note : we currently filter the whole person list at once, no need to count then. void setFilterCount(S32 count) { } - S32 getFilterCount() const { return 0; } + S32 getFilterCount() const { return 1; } void decrementFilterCount() { } // +-------------------------------------------------------------------+ -- cgit v1.2.3 From 933cff41a6b03f2b11403970866db9fbbcf7e85f Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Thu, 2 May 2013 16:41:16 -0700 Subject: ACME-307 Fix crash when clicking profile button: The crash was caused by existing code which was taking the last focused element and assuming it was a pointer to a LLUICtrl. Now assume the pointer is of type LLView since there is not need to have it as a LLUICtrl pointer. --- indra/llui/llfloater.cpp | 2 +- indra/llui/llfocusmgr.cpp | 4 ++-- indra/llui/llfocusmgr.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 09e27a264a..ef4b1450ca 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -1346,7 +1346,7 @@ void LLFloater::setFocus( BOOL b ) { return; } - LLUICtrl* last_focus = gFocusMgr.getLastFocusForGroup(this); + LLView* last_focus = gFocusMgr.getLastFocusForGroup(this); // a descendent already has focus BOOL child_had_focus = hasFocus(); diff --git a/indra/llui/llfocusmgr.cpp b/indra/llui/llfocusmgr.cpp index 724d190307..f03c8d444b 100644 --- a/indra/llui/llfocusmgr.cpp +++ b/indra/llui/llfocusmgr.cpp @@ -469,7 +469,7 @@ void LLFocusMgr::setAppHasFocus(BOOL focus) mAppHasFocus = focus; } -LLUICtrl* LLFocusMgr::getLastFocusForGroup(LLView* subtree_root) const +LLView* LLFocusMgr::getLastFocusForGroup(LLView* subtree_root) const { if (subtree_root) { @@ -477,7 +477,7 @@ LLUICtrl* LLFocusMgr::getLastFocusForGroup(LLView* subtree_root) const if (found_it != mImpl->mFocusHistory.end()) { // found last focus for this subtree - return static_cast(found_it->second.get()); + return found_it->second.get(); } } return NULL; diff --git a/indra/llui/llfocusmgr.h b/indra/llui/llfocusmgr.h index 25ae1d2579..1c7326260c 100644 --- a/indra/llui/llfocusmgr.h +++ b/indra/llui/llfocusmgr.h @@ -97,7 +97,7 @@ public: void triggerFocusFlash(); BOOL getAppHasFocus() const { return mAppHasFocus; } void setAppHasFocus(BOOL focus); - LLUICtrl* getLastFocusForGroup(LLView* subtree_root) const; + LLView* getLastFocusForGroup(LLView* subtree_root) const; void clearLastFocusForGroup(LLView* subtree_root); // If setKeyboardFocus(NULL) is called, and there is a non-NULL default -- cgit v1.2.3 From 6cce8629b962cd73515e2d0a85620b602e57a0fe Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Thu, 2 May 2013 18:47:56 -0700 Subject: CHUI-275 : WIP : Cleaned up comments --- indra/newview/llpersonmodelcommon.cpp | 9 +++++---- indra/newview/llpersonmodelcommon.h | 8 -------- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/indra/newview/llpersonmodelcommon.cpp b/indra/newview/llpersonmodelcommon.cpp index 9660432b80..6b4c71faa2 100644 --- a/indra/newview/llpersonmodelcommon.cpp +++ b/indra/newview/llpersonmodelcommon.cpp @@ -96,8 +96,8 @@ void LLPersonModelCommon::showProperties(void) bool LLPersonModelCommon::filter( LLFolderViewFilter& filter) { - // See LLFolderViewModelItemInventory::filter() /* + Hack: for the moment, we always apply the filter if we're called if (!filter.isModified()) { llinfos << "Merov : LLPersonModelCommon::filter, exit, no modif" << llendl; @@ -106,19 +106,20 @@ bool LLPersonModelCommon::filter( LLFolderViewFilter& filter) */ if (!mChildren.empty()) { - //llinfos << "Merov : LLPersonModelCommon::filter, filtering folder = " << getDisplayName() << llendl; - setPassedFilter(1, -1, filter.getStringMatchOffset(this), filter.getFilterStringSize()); + // If the current instance has children, it's a "person folder" and always passes filters (we do not filter out empty folders) + setPassedFilter(1, -1); + // Call filter recursively on all children for (child_list_t::iterator iter = mChildren.begin(), end_iter = mChildren.end(); iter != end_iter; ++iter) { - // LLFolderViewModelItem LLPersonModelCommon* item = dynamic_cast(*iter); item->filter(filter); } } else { + // If there's no children, the current instance is a person and we check and set the passed filter flag on it const bool passed_filter = filter.check(this); setPassedFilter(passed_filter, -1, filter.getStringMatchOffset(this), filter.getFilterStringSize()); } diff --git a/indra/newview/llpersonmodelcommon.h b/indra/newview/llpersonmodelcommon.h index ffd145b549..f44f619d18 100644 --- a/indra/newview/llpersonmodelcommon.h +++ b/indra/newview/llpersonmodelcommon.h @@ -174,14 +174,6 @@ public: const std::string& getFilterText() { return mName; } void setModified(EFilterModified behavior = FILTER_RESTART) { mFilterModified = behavior; } - // +-------------------------------------------------------------------+ - // + Count - // +-------------------------------------------------------------------+ - // Note : we currently filter the whole person list at once, no need to count then. - //void setFilterCount(S32 count) { } - //S32 getFilterCount() const { return 1; } - //void decrementFilterCount() { } - // +-------------------------------------------------------------------+ // + Time // +-------------------------------------------------------------------+ -- cgit v1.2.3 From 1b6d6b7e794ad4401faa91a79774922a5baec968 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Fri, 3 May 2013 11:57:59 -0700 Subject: ACME-323 Create a tab for 'Invite people you know to SL': FBC Test Two tabs are now named to match UX spec. Also created a function called createPersonTabs() which simplifies tab creation. The LLPersonFolderView is being turned into the tab manager. --- indra/newview/llpanelpeople.cpp | 25 ------------------------- indra/newview/llpersonfolderview.cpp | 24 ++++++++++++++++++++++++ indra/newview/llpersonfolderview.h | 4 ++++ 3 files changed, 28 insertions(+), 25 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 03135ce580..22b79a9380 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -750,31 +750,6 @@ BOOL LLPanelPeople::postBuild() scroller->setFollowsAll(); mPersonFolderView->setScrollContainer(scroller); mPersonFolderView->setFollowsAll(); - - //Create a person tab - LLPersonTabModel* item = new LLPersonTabModel("Facebook Friends", mPersonFolderViewModel); - LLPersonTabView::Params params; - params.name = item->getDisplayName(); - params.root = mPersonFolderView; - params.listener = item; - params.tool_tip = params.name; - LLPersonTabView * widget = LLUICtrlFactory::create(params); - widget->addToFolder(mPersonFolderView); - - mPersonFolderView->mPersonFolderModelMap[item->getID()] = item; - mPersonFolderView->mPersonFolderViewMap[item->getID()] = widget; - - //Create a person tab - item = new LLPersonTabModel("Facebook Friends Tab Two", mPersonFolderViewModel); - params.name = item->getDisplayName(); - params.root = mPersonFolderView; - params.listener = item; - params.tool_tip = params.name; - widget = LLUICtrlFactory::create(params); - widget->addToFolder(mPersonFolderView); - - mPersonFolderView->mPersonFolderModelMap[item->getID()] = item; - mPersonFolderView->mPersonFolderViewMap[item->getID()] = widget; gIdleCallbacks.addFunction(idle, this); diff --git a/indra/newview/llpersonfolderview.cpp b/indra/newview/llpersonfolderview.cpp index ba1e9d20eb..21578e986b 100644 --- a/indra/newview/llpersonfolderview.cpp +++ b/indra/newview/llpersonfolderview.cpp @@ -38,6 +38,8 @@ LLFolderView(p), mConversationsEventStream("ConversationsEventsTwo") { mConversationsEventStream.listen("ConversationsRefresh", boost::bind(&LLPersonFolderView::onConversationModelEvent, this, _1)); + + createPersonTabs(); } LLPersonFolderView::~LLPersonFolderView() @@ -45,6 +47,28 @@ LLPersonFolderView::~LLPersonFolderView() mConversationsEventStream.stopListening("ConversationsRefresh"); } +void LLPersonFolderView::createPersonTabs() +{ + createPersonTab("SL residents you may want to friend"); + createPersonTab("Invite people you know to SL"); +} + +void LLPersonFolderView::createPersonTab(const std::string& tab_name) +{ + //Create a person tab + LLPersonTabModel* item = new LLPersonTabModel(tab_name, *mViewModel); + LLPersonTabView::Params params; + params.name = item->getDisplayName(); + params.root = this; + params.listener = item; + params.tool_tip = params.name; + LLPersonTabView * widget = LLUICtrlFactory::create(params); + widget->addToFolder(this); + + mPersonFolderModelMap[item->getID()] = item; + mPersonFolderViewMap[item->getID()] = widget; +} + BOOL LLPersonFolderView::handleMouseDown( S32 x, S32 y, MASK mask ) { LLFolderViewItem * item = getCurSelectedItem(); diff --git a/indra/newview/llpersonfolderview.h b/indra/newview/llpersonfolderview.h index 74e9142a7c..1cf597b8c9 100644 --- a/indra/newview/llpersonfolderview.h +++ b/indra/newview/llpersonfolderview.h @@ -50,6 +50,10 @@ public: LLPersonFolderView(const Params &p); ~LLPersonFolderView(); + + void createPersonTabs(); + void createPersonTab(const std::string& tab_name); + bool onConversationModelEvent(const LLSD &event); LLPersonView * createConversationViewParticipant(LLPersonModel * item); -- cgit v1.2.3 From 0408a984d3efb55cdf88c314e333be3b29c291ea Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Fri, 3 May 2013 13:55:12 -0700 Subject: ACME-324 Populate list with FB only friends: When clicking the '+' button FB only friends will appear in the second tab titled 'Invite people you know to SL'. --- indra/newview/llpanelpeople.cpp | 38 ++++++++++++++++++++++++++++++++---- indra/newview/llpersonfolderview.cpp | 1 + indra/newview/llpersonfolderview.h | 1 + 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 22b79a9380..e1933c041c 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1641,17 +1641,29 @@ void LLPanelPeople::openFacebookWeb(std::string url) void LLPanelPeople::showFacebookFriends(const LLSD& friends) { mFacebookFriends->clear(); + S32 model_index; for (LLSD::map_const_iterator i = friends.beginMap(); i != friends.endMap(); ++i) { std::string name = i->second["name"].asString(); LLUUID agent_id = i->second.has("agent_id") ? i->second["agent_id"].asUUID() : LLUUID(NULL); + //FB+SL but not SL friend + if(agent_id.notNull()) + { + model_index = 0; + } + //FB only friend + else + { + model_index = 1; + } + //add to avatar list mFacebookFriends->addNewItem(agent_id, name, false); //Add to folder view - LLPersonTabModel * session_model = dynamic_cast(mPersonFolderView->mPersonFolderModelMap.begin()->second); + LLPersonTabModel * session_model = dynamic_cast(mPersonFolderView->mPersonFolderModelMap[mPersonFolderView->mPersonTabIDs[model_index]]); if(session_model) { addParticipantToModel(session_model, agent_id, name); @@ -1663,11 +1675,29 @@ void LLPanelPeople::addTestParticipant() { std::string suffix("Aa"); std::string prefix("Test Name"); + LLPersonTabModel * person_folder_model; + LLUUID agentID; + std::string name; + S32 model_index; + for(int i = 0; i < 300; ++i) { - LLPersonTabModel * person_folder_model = dynamic_cast(mPersonFolderView->mPersonFolderModelMap.begin()->second); - std::string name = prefix + " " + suffix; - addParticipantToModel(person_folder_model, gAgent.getID(), name); + //Adds FB+SL people that aren't yet SL friends + if(i < 10) + { + model_index = 0; + agentID = gAgent.getID(); + } + //Adds FB only friends + else + { + model_index = 1; + agentID = LLUUID(NULL); + } + + person_folder_model = dynamic_cast(mPersonFolderView->mPersonFolderModelMap[mPersonFolderView->mPersonTabIDs[model_index]]); + name = prefix + " " + suffix; + addParticipantToModel(person_folder_model, agentID, name); // Next suffix : Aa, Ab, Ac ... Az, Ba, Bb, Bc ... Bz, Ca, Cb ... suffix[1]+=1; if (suffix[1]=='{') diff --git a/indra/newview/llpersonfolderview.cpp b/indra/newview/llpersonfolderview.cpp index 21578e986b..8f468e6814 100644 --- a/indra/newview/llpersonfolderview.cpp +++ b/indra/newview/llpersonfolderview.cpp @@ -65,6 +65,7 @@ void LLPersonFolderView::createPersonTab(const std::string& tab_name) LLPersonTabView * widget = LLUICtrlFactory::create(params); widget->addToFolder(this); + mPersonTabIDs.push_back(item->getID()); mPersonFolderModelMap[item->getID()] = item; mPersonFolderViewMap[item->getID()] = widget; } diff --git a/indra/newview/llpersonfolderview.h b/indra/newview/llpersonfolderview.h index 1cf597b8c9..3f5f874e0f 100644 --- a/indra/newview/llpersonfolderview.h +++ b/indra/newview/llpersonfolderview.h @@ -61,6 +61,7 @@ public: person_folder_model_map mPersonFolderModelMap; person_folder_view_map mPersonFolderViewMap; + std::vector mPersonTabIDs; LLEventStream mConversationsEventStream; }; -- cgit v1.2.3 From cca67a38d89da30d2b36690d91eb00cac04384bd Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Fri, 3 May 2013 16:18:47 -0700 Subject: =?UTF-8?q?ACME-326=20Add=20=E2=80=98connect=20to=20facebook?= =?UTF-8?q?=E2=80=99=20on=20menu=20bar=20with=20functionality:=20Now=20the?= =?UTF-8?q?=20'SL=20residents=20you=20may=20want=20to=20friend'=20folder?= =?UTF-8?q?=20is=20populated=20only=20with=20FB+SL=20users=20who=20are=20n?= =?UTF-8?q?ot=20yet=20friends.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- indra/newview/llpanelpeople.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index e1933c041c..f9f4d6d1b6 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1642,14 +1642,18 @@ void LLPanelPeople::showFacebookFriends(const LLSD& friends) { mFacebookFriends->clear(); S32 model_index; + LLAvatarTracker& avatar_tracker = LLAvatarTracker::instance(); for (LLSD::map_const_iterator i = friends.beginMap(); i != friends.endMap(); ++i) { std::string name = i->second["name"].asString(); LLUUID agent_id = i->second.has("agent_id") ? i->second["agent_id"].asUUID() : LLUUID(NULL); + //add to avatar list + mFacebookFriends->addNewItem(agent_id, name, false); + //FB+SL but not SL friend - if(agent_id.notNull()) + if(agent_id.notNull() && !avatar_tracker.isBuddy(agent_id)) { model_index = 0; } @@ -1659,9 +1663,6 @@ void LLPanelPeople::showFacebookFriends(const LLSD& friends) model_index = 1; } - //add to avatar list - mFacebookFriends->addNewItem(agent_id, name, false); - //Add to folder view LLPersonTabModel * session_model = dynamic_cast(mPersonFolderView->mPersonFolderModelMap[mPersonFolderView->mPersonTabIDs[model_index]]); if(session_model) -- cgit v1.2.3 From ad12517329e73abf64ccc926aa49453cb4b73bfc Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Fri, 3 May 2013 17:03:37 -0700 Subject: ACME-275 : WIP : Filtering --- indra/llui/llfolderview.cpp | 5 +++++ indra/llui/llfolderviewitem.cpp | 16 +++++++++++++++- indra/newview/llpanelpeople.cpp | 1 + indra/newview/llpersonfolderview.cpp | 1 + 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp index cf449217f5..679a76e26f 100644 --- a/indra/llui/llfolderview.cpp +++ b/indra/llui/llfolderview.cpp @@ -1652,6 +1652,11 @@ void LLFolderView::update() } BOOL is_visible = isInVisibleChain(); + + if (getName() == "Persons") + { + llinfos << "Merov : update Persons, is_visible = " << is_visible << llendl; + } // Puts folders/items in proper positions // arrange() takes the model filter flag into account and call sort() if necessary (CHUI-849) diff --git a/indra/llui/llfolderviewitem.cpp b/indra/llui/llfolderviewitem.cpp index 6c147ccc12..88bc0ccfd4 100755 --- a/indra/llui/llfolderviewitem.cpp +++ b/indra/llui/llfolderviewitem.cpp @@ -953,6 +953,12 @@ static LLFastTimer::DeclareTimer FTM_ARRANGE("Arrange"); // * Makes sure that this view and its children are the right size S32 LLFolderViewFolder::arrange( S32* width, S32* height ) { + llinfos << "Merov : LLFolderViewFolder::arrange, folder = " << getName() << llendl; + if (getName() == "Facebook Friends Tab Two") + { + llinfos << "Merov : Arranging Facebook Friends Tab Two, needs arrange = " << needsArrange() << ", is open = " << isOpen() << llendl; + } + // Sort before laying out contents // Note that we sort from the root (CHUI-849) getRoot()->getFolderViewModel()->sort(this); @@ -1109,7 +1115,11 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height ) BOOL LLFolderViewFolder::needsArrange() { - return mLastArrangeGeneration < getRoot()->getArrangeGeneration(); + if (getName() != "") + { + llinfos << "Merov : needsArrange for " << getName() << ", last = " << mLastArrangeGeneration << ", current = " << getRoot()->getArrangeGeneration() << ", need = " << (mLastArrangeGeneration < getRoot()->getArrangeGeneration() ? "true" : "false") << llendl; + } + return mLastArrangeGeneration != getRoot()->getArrangeGeneration(); } // Passes selection information on to children and record selection @@ -1631,6 +1641,10 @@ void LLFolderViewFolder::requestArrange() void LLFolderViewFolder::toggleOpen() { + if (getName() == "Facebook Friends Tab Two") + { + llinfos << "Merov : toggleOpen, currently open is = " << isOpen() << llendl; + } setOpen(!isOpen()); } diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 03135ce580..66a183d5e5 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1224,6 +1224,7 @@ void LLPanelPeople::onFilterEdit(const std::string& search_string) else if (cur_tab == FBCTESTTWO_TAB_NAME) { mPersonFolderViewModel.getFilter().setFilterSubString(filter); + mPersonFolderView->requestArrange(); } } diff --git a/indra/newview/llpersonfolderview.cpp b/indra/newview/llpersonfolderview.cpp index ba1e9d20eb..8d2191aebb 100644 --- a/indra/newview/llpersonfolderview.cpp +++ b/indra/newview/llpersonfolderview.cpp @@ -37,6 +37,7 @@ LLPersonFolderView::LLPersonFolderView(const Params &p) : LLFolderView(p), mConversationsEventStream("ConversationsEventsTwo") { + rename("Persons"); // For tracking! mConversationsEventStream.listen("ConversationsRefresh", boost::bind(&LLPersonFolderView::onConversationModelEvent, this, _1)); } -- cgit v1.2.3 From e30c0925f517b18830b7a4d520246acd98981ab3 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Mon, 6 May 2013 11:31:22 -0700 Subject: ACME-326 Populate the list with FB users who use SL but are not yet SL friends: Code cleanup --- indra/newview/llpanelpeople.cpp | 12 +++---- indra/newview/llpersonfolderview.cpp | 68 +++++++++++++++++++++--------------- indra/newview/llpersonfolderview.h | 7 ++-- 3 files changed, 49 insertions(+), 38 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index f9f4d6d1b6..56523773b8 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1664,10 +1664,10 @@ void LLPanelPeople::showFacebookFriends(const LLSD& friends) } //Add to folder view - LLPersonTabModel * session_model = dynamic_cast(mPersonFolderView->mPersonFolderModelMap[mPersonFolderView->mPersonTabIDs[model_index]]); - if(session_model) + LLPersonTabModel * person_tab_model = dynamic_cast(mPersonFolderView->getPersonTabModelByIndex(model_index)); + if(person_tab_model) { - addParticipantToModel(session_model, agent_id, name); + addParticipantToModel(person_tab_model, agent_id, name); } } } @@ -1676,7 +1676,7 @@ void LLPanelPeople::addTestParticipant() { std::string suffix("Aa"); std::string prefix("Test Name"); - LLPersonTabModel * person_folder_model; + LLPersonTabModel * person_tab_model; LLUUID agentID; std::string name; S32 model_index; @@ -1696,9 +1696,9 @@ void LLPanelPeople::addTestParticipant() agentID = LLUUID(NULL); } - person_folder_model = dynamic_cast(mPersonFolderView->mPersonFolderModelMap[mPersonFolderView->mPersonTabIDs[model_index]]); + person_tab_model = dynamic_cast(mPersonFolderView->getPersonTabModelByIndex(model_index)); name = prefix + " " + suffix; - addParticipantToModel(person_folder_model, agentID, name); + addParticipantToModel(person_tab_model, agentID, name); // Next suffix : Aa, Ab, Ac ... Az, Ba, Bb, Bc ... Bz, Ca, Cb ... suffix[1]+=1; if (suffix[1]=='{') diff --git a/indra/newview/llpersonfolderview.cpp b/indra/newview/llpersonfolderview.cpp index 8f468e6814..191c7d5bcd 100644 --- a/indra/newview/llpersonfolderview.cpp +++ b/indra/newview/llpersonfolderview.cpp @@ -47,29 +47,6 @@ LLPersonFolderView::~LLPersonFolderView() mConversationsEventStream.stopListening("ConversationsRefresh"); } -void LLPersonFolderView::createPersonTabs() -{ - createPersonTab("SL residents you may want to friend"); - createPersonTab("Invite people you know to SL"); -} - -void LLPersonFolderView::createPersonTab(const std::string& tab_name) -{ - //Create a person tab - LLPersonTabModel* item = new LLPersonTabModel(tab_name, *mViewModel); - LLPersonTabView::Params params; - params.name = item->getDisplayName(); - params.root = this; - params.listener = item; - params.tool_tip = params.name; - LLPersonTabView * widget = LLUICtrlFactory::create(params); - widget->addToFolder(this); - - mPersonTabIDs.push_back(item->getID()); - mPersonFolderModelMap[item->getID()] = item; - mPersonFolderViewMap[item->getID()] = widget; -} - BOOL LLPersonFolderView::handleMouseDown( S32 x, S32 y, MASK mask ) { LLFolderViewItem * item = getCurSelectedItem(); @@ -97,6 +74,29 @@ BOOL LLPersonFolderView::handleMouseDown( S32 x, S32 y, MASK mask ) return LLView::handleMouseDown( x, y, mask ); } +void LLPersonFolderView::createPersonTabs() +{ + createPersonTab("SL residents you may want to friend"); + createPersonTab("Invite people you know to SL"); +} + +void LLPersonFolderView::createPersonTab(const std::string& tab_name) +{ + //Create a person tab + LLPersonTabModel* item = new LLPersonTabModel(tab_name, *mViewModel); + LLPersonTabView::Params params; + params.name = item->getDisplayName(); + params.root = this; + params.listener = item; + params.tool_tip = params.name; + LLPersonTabView * widget = LLUICtrlFactory::create(params); + widget->addToFolder(this); + + mIndexToFolderVec.push_back(item->getID()); + mPersonFolderModelMap[item->getID()] = item; + mPersonFolderViewMap[item->getID()] = widget; +} + bool LLPersonFolderView::onConversationModelEvent(const LLSD &event) { std::string type = event.get("type").asString(); @@ -105,17 +105,17 @@ bool LLPersonFolderView::onConversationModelEvent(const LLSD &event) if(type == "add_participant") { - LLPersonTabModel * person_folder_model = dynamic_cast(mPersonFolderModelMap[folder_id]); - LLPersonTabView * person_folder_view = dynamic_cast(mPersonFolderViewMap[folder_id]); + LLPersonTabModel * person_tab_model = dynamic_cast(mPersonFolderModelMap[folder_id]); + LLPersonTabView * person_tab_view = dynamic_cast(mPersonFolderViewMap[folder_id]); - if(person_folder_model) + if(person_tab_model) { - LLPersonModel * person_model = person_folder_model->findParticipant(person_id); + LLPersonModel * person_model = person_tab_model->findParticipant(person_id); if(person_model) { - LLPersonView * participant_view = createConversationViewParticipant(person_model); - participant_view->addToFolder(person_folder_view); + LLPersonView * person_view = createConversationViewParticipant(person_model); + person_view->addToFolder(person_tab_view); } } } @@ -137,3 +137,13 @@ LLPersonView * LLPersonFolderView::createConversationViewParticipant(LLPersonMod return LLUICtrlFactory::create(params); } + +LLPersonTabModel * LLPersonFolderView::getPersonTabModelByIndex(const S32 index) +{ + return mPersonFolderModelMap[mIndexToFolderVec[index]]; +} + +LLPersonTabView * LLPersonFolderView::getPersonTabViewByIndex(const S32 index) +{ + return mPersonFolderViewMap[mIndexToFolderVec[index]]; +} diff --git a/indra/newview/llpersonfolderview.h b/indra/newview/llpersonfolderview.h index 3f5f874e0f..3a15f59164 100644 --- a/indra/newview/llpersonfolderview.h +++ b/indra/newview/llpersonfolderview.h @@ -50,18 +50,19 @@ public: LLPersonFolderView(const Params &p); ~LLPersonFolderView(); + BOOL handleMouseDown( S32 x, S32 y, MASK mask ); void createPersonTabs(); void createPersonTab(const std::string& tab_name); - bool onConversationModelEvent(const LLSD &event); LLPersonView * createConversationViewParticipant(LLPersonModel * item); - BOOL handleMouseDown( S32 x, S32 y, MASK mask ); + LLPersonTabModel * getPersonTabModelByIndex(const S32 index); + LLPersonTabView * getPersonTabViewByIndex(const S32 index); person_folder_model_map mPersonFolderModelMap; person_folder_view_map mPersonFolderViewMap; - std::vector mPersonTabIDs; + std::vector mIndexToFolderVec; LLEventStream mConversationsEventStream; }; -- cgit v1.2.3 From f6ad5819c15b1acca1a8b6498bc56adf1c0c3ac9 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Mon, 6 May 2013 11:46:16 -0700 Subject: ACME-326 Populate the list with FB users who use SL but are not yet SL friends: Code cleanup --- indra/newview/llpanelpeople.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 56523773b8..b9afe10d84 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1663,7 +1663,7 @@ void LLPanelPeople::showFacebookFriends(const LLSD& friends) model_index = 1; } - //Add to folder view + //Add to person tab model LLPersonTabModel * person_tab_model = dynamic_cast(mPersonFolderView->getPersonTabModelByIndex(model_index)); if(person_tab_model) { -- cgit v1.2.3 From c451672ee7e3bc8229a3e5cba544c93495147024 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Mon, 6 May 2013 14:22:46 -0700 Subject: ACME-338 Hide info button for FB only friends: Upon hover of FB only friends the info button and profile button are hidden. --- indra/newview/llpanelpeople.cpp | 16 ++++++++-------- indra/newview/llpersonfolderview.cpp | 19 +++++++++---------- indra/newview/llpersonfolderview.h | 16 ++++++++-------- indra/newview/llpersonmodelcommon.cpp | 5 +++-- indra/newview/llpersonmodelcommon.h | 10 +++++++++- indra/newview/llpersontabview.cpp | 20 +++++++++++++++----- indra/newview/llpersontabview.h | 8 +++++--- 7 files changed, 57 insertions(+), 37 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index b9afe10d84..f7492a51e1 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1641,7 +1641,7 @@ void LLPanelPeople::openFacebookWeb(std::string url) void LLPanelPeople::showFacebookFriends(const LLSD& friends) { mFacebookFriends->clear(); - S32 model_index; + LLPersonTabModel::tab_type tab_type; LLAvatarTracker& avatar_tracker = LLAvatarTracker::instance(); for (LLSD::map_const_iterator i = friends.beginMap(); i != friends.endMap(); ++i) @@ -1655,16 +1655,16 @@ void LLPanelPeople::showFacebookFriends(const LLSD& friends) //FB+SL but not SL friend if(agent_id.notNull() && !avatar_tracker.isBuddy(agent_id)) { - model_index = 0; + tab_type = LLPersonTabModel::FB_SL_NON_SL_FRIEND; } //FB only friend else { - model_index = 1; + tab_type = LLPersonTabModel::FB_ONLY_FRIEND; } //Add to person tab model - LLPersonTabModel * person_tab_model = dynamic_cast(mPersonFolderView->getPersonTabModelByIndex(model_index)); + LLPersonTabModel * person_tab_model = dynamic_cast(mPersonFolderView->getPersonTabModelByIndex(tab_type)); if(person_tab_model) { addParticipantToModel(person_tab_model, agent_id, name); @@ -1679,24 +1679,24 @@ void LLPanelPeople::addTestParticipant() LLPersonTabModel * person_tab_model; LLUUID agentID; std::string name; - S32 model_index; + LLPersonTabModel::tab_type tab_type; for(int i = 0; i < 300; ++i) { //Adds FB+SL people that aren't yet SL friends if(i < 10) { - model_index = 0; + tab_type = LLPersonTabModel::FB_SL_NON_SL_FRIEND; agentID = gAgent.getID(); } //Adds FB only friends else { - model_index = 1; + tab_type = LLPersonTabModel::FB_ONLY_FRIEND; agentID = LLUUID(NULL); } - person_tab_model = dynamic_cast(mPersonFolderView->getPersonTabModelByIndex(model_index)); + person_tab_model = dynamic_cast(mPersonFolderView->getPersonTabModelByIndex(tab_type)); name = prefix + " " + suffix; addParticipantToModel(person_tab_model, agentID, name); // Next suffix : Aa, Ab, Ac ... Az, Ba, Bb, Bc ... Bz, Ca, Cb ... diff --git a/indra/newview/llpersonfolderview.cpp b/indra/newview/llpersonfolderview.cpp index 191c7d5bcd..c22e4f3e58 100644 --- a/indra/newview/llpersonfolderview.cpp +++ b/indra/newview/llpersonfolderview.cpp @@ -30,7 +30,6 @@ #include "llpersonfolderview.h" #include "llpersontabview.h" -#include "llpersonmodelcommon.h" LLPersonFolderView::LLPersonFolderView(const Params &p) : @@ -76,14 +75,14 @@ BOOL LLPersonFolderView::handleMouseDown( S32 x, S32 y, MASK mask ) void LLPersonFolderView::createPersonTabs() { - createPersonTab("SL residents you may want to friend"); - createPersonTab("Invite people you know to SL"); + createPersonTab(LLPersonTabModel::FB_SL_NON_SL_FRIEND, "SL residents you may want to friend"); + createPersonTab(LLPersonTabModel::FB_ONLY_FRIEND, "Invite people you know to SL"); } -void LLPersonFolderView::createPersonTab(const std::string& tab_name) +void LLPersonFolderView::createPersonTab(LLPersonTabModel::tab_type tab_type, const std::string& tab_name) { //Create a person tab - LLPersonTabModel* item = new LLPersonTabModel(tab_name, *mViewModel); + LLPersonTabModel* item = new LLPersonTabModel(tab_type, tab_name, *mViewModel); LLPersonTabView::Params params; params.name = item->getDisplayName(); params.root = this; @@ -92,7 +91,7 @@ void LLPersonFolderView::createPersonTab(const std::string& tab_name) LLPersonTabView * widget = LLUICtrlFactory::create(params); widget->addToFolder(this); - mIndexToFolderVec.push_back(item->getID()); + mIndexToFolderMap[tab_type] = item->getID(); mPersonFolderModelMap[item->getID()] = item; mPersonFolderViewMap[item->getID()] = widget; } @@ -138,12 +137,12 @@ LLPersonView * LLPersonFolderView::createConversationViewParticipant(LLPersonMod return LLUICtrlFactory::create(params); } -LLPersonTabModel * LLPersonFolderView::getPersonTabModelByIndex(const S32 index) +LLPersonTabModel * LLPersonFolderView::getPersonTabModelByIndex(LLPersonTabModel::tab_type tab_type) { - return mPersonFolderModelMap[mIndexToFolderVec[index]]; + return mPersonFolderModelMap[mIndexToFolderMap[tab_type]]; } -LLPersonTabView * LLPersonFolderView::getPersonTabViewByIndex(const S32 index) +LLPersonTabView * LLPersonFolderView::getPersonTabViewByIndex(LLPersonTabModel::tab_type tab_type) { - return mPersonFolderViewMap[mIndexToFolderVec[index]]; + return mPersonFolderViewMap[mIndexToFolderMap[tab_type]]; } diff --git a/indra/newview/llpersonfolderview.h b/indra/newview/llpersonfolderview.h index 3a15f59164..85dec6515d 100644 --- a/indra/newview/llpersonfolderview.h +++ b/indra/newview/llpersonfolderview.h @@ -27,7 +27,10 @@ #ifndef LL_LLPERSONFOLDERVIEW_H #define LL_LLPERSONFOLDERVIEW_H -class LLPersonTabModel; +#include "llevents.h" +#include "llfolderview.h" +#include "llpersonmodelcommon.h" + class LLPersonTabView; class LLPersonView; class LLPersonModel; @@ -35,9 +38,6 @@ class LLPersonModel; typedef std::map person_folder_model_map; typedef std::map person_folder_view_map; -#include "llevents.h" -#include "llfolderview.h" - class LLPersonFolderView : public LLFolderView { public: @@ -53,16 +53,16 @@ public: BOOL handleMouseDown( S32 x, S32 y, MASK mask ); void createPersonTabs(); - void createPersonTab(const std::string& tab_name); + void createPersonTab(LLPersonTabModel::tab_type tab_type, const std::string& tab_name); bool onConversationModelEvent(const LLSD &event); LLPersonView * createConversationViewParticipant(LLPersonModel * item); - LLPersonTabModel * getPersonTabModelByIndex(const S32 index); - LLPersonTabView * getPersonTabViewByIndex(const S32 index); + LLPersonTabModel * getPersonTabModelByIndex(LLPersonTabModel::tab_type tab_type); + LLPersonTabView * getPersonTabViewByIndex(LLPersonTabModel::tab_type tab_type); person_folder_model_map mPersonFolderModelMap; person_folder_view_map mPersonFolderViewMap; - std::vector mIndexToFolderVec; + std::map mIndexToFolderMap; LLEventStream mConversationsEventStream; }; diff --git a/indra/newview/llpersonmodelcommon.cpp b/indra/newview/llpersonmodelcommon.cpp index 6b4c71faa2..70a24ac77a 100644 --- a/indra/newview/llpersonmodelcommon.cpp +++ b/indra/newview/llpersonmodelcommon.cpp @@ -132,8 +132,9 @@ bool LLPersonModelCommon::filter( LLFolderViewFilter& filter) // LLPersonTabModel // -LLPersonTabModel::LLPersonTabModel(std::string display_name, LLFolderViewModelInterface& root_view_model) : -LLPersonModelCommon(display_name,root_view_model) +LLPersonTabModel::LLPersonTabModel(tab_type tab_type, std::string display_name, LLFolderViewModelInterface& root_view_model) : +LLPersonModelCommon(display_name,root_view_model), +mTabType(tab_type) { } diff --git a/indra/newview/llpersonmodelcommon.h b/indra/newview/llpersonmodelcommon.h index f44f619d18..7be3387564 100644 --- a/indra/newview/llpersonmodelcommon.h +++ b/indra/newview/llpersonmodelcommon.h @@ -108,7 +108,13 @@ protected: class LLPersonTabModel : public LLPersonModelCommon { public: - LLPersonTabModel(std::string display_name, LLFolderViewModelInterface& root_view_model); + enum tab_type + { + FB_SL_NON_SL_FRIEND, + FB_ONLY_FRIEND, + }; + + LLPersonTabModel(tab_type tab_type, std::string display_name, LLFolderViewModelInterface& root_view_model); LLPersonTabModel(LLFolderViewModelInterface& root_view_model); LLPointer getIcon() const { return NULL; } @@ -118,6 +124,8 @@ public: void clearParticipants(); LLPersonModel* findParticipant(const LLUUID& person_id); + tab_type mTabType; + private: }; diff --git a/indra/newview/llpersontabview.cpp b/indra/newview/llpersontabview.cpp index fdc024beb8..0dfd53705b 100644 --- a/indra/newview/llpersontabview.cpp +++ b/indra/newview/llpersontabview.cpp @@ -160,8 +160,10 @@ S32 LLPersonView::getLabelXPos() void LLPersonView::addToFolder(LLFolderViewFolder * person_folder_view) { LLFolderViewItem::addToFolder(person_folder_view); - //Added item to folder, could change folder's mHasVisibleChildren flag so call arrange + //Added item to folder could change folder's mHasVisibleChildren flag so call arrange person_folder_view->requestArrange(); + + mPersonTabModel = static_cast(getParentFolder()->getViewModelItem()); } LLPersonView::~LLPersonView() @@ -191,16 +193,24 @@ BOOL LLPersonView::postBuild() void LLPersonView::onMouseEnter(S32 x, S32 y, MASK mask) { - mInfoBtn->setVisible(TRUE); - mProfileBtn->setVisible(TRUE); + if(mPersonTabModel->mTabType == LLPersonTabModel::FB_SL_NON_SL_FRIEND) + { + mInfoBtn->setVisible(TRUE); + mProfileBtn->setVisible(TRUE); + } + updateChildren(); LLFolderViewItem::onMouseEnter(x, y, mask); } void LLPersonView::onMouseLeave(S32 x, S32 y, MASK mask) { - mInfoBtn->setVisible(FALSE); - mProfileBtn->setVisible(FALSE); + if(mPersonTabModel->mTabType == LLPersonTabModel::FB_SL_NON_SL_FRIEND) + { + mInfoBtn->setVisible(FALSE); + mProfileBtn->setVisible(FALSE); + } + updateChildren(); LLFolderViewItem::onMouseLeave(x, y, mask); } diff --git a/indra/newview/llpersontabview.h b/indra/newview/llpersontabview.h index 9cce615167..9e5fdc3057 100644 --- a/indra/newview/llpersontabview.h +++ b/indra/newview/llpersontabview.h @@ -33,6 +33,8 @@ #include "lloutputmonitorctrl.h" #include "lltextbox.h" +class LLPersonTabModel; + class LLPersonTabView : public LLFolderViewFolder { @@ -104,9 +106,11 @@ protected: private: + //Short-cut to tab model + LLPersonTabModel * mPersonTabModel; + LLPointer mImageOver; LLPointer mImageSelected; - LLAvatarIconCtrl* mAvatarIcon; LLTextBox * mLastInteractionTimeTextbox; LLIconCtrl * mPermissionEditTheirsIcon; @@ -117,8 +121,6 @@ private: LLButton * mProfileBtn; LLOutputMonitorCtrl * mOutputMonitorCtrl; - - typedef enum e_avatar_item_child { ALIC_SPEAKER_INDICATOR, ALIC_PROFILE_BUTTON, -- cgit v1.2.3 From 04587bdb9d5e1653d5b19a6ca51e547180994958 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Mon, 6 May 2013 17:53:18 -0700 Subject: ACME-340 Get facebook icon from spec and add to viewer: Added a facebook icon and the icon appears only for the 'Invite people you know to SL' tab. --- indra/newview/llpersontabview.cpp | 33 +++++++++++++++++++-- indra/newview/llpersontabview.h | 2 ++ .../skins/default/textures/icons/Facebook.png | Bin 0 -> 365 bytes indra/newview/skins/default/textures/textures.xml | 2 ++ .../skins/default/xui/en/widgets/person_view.xml | 12 ++++++++ 5 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 indra/newview/skins/default/textures/icons/Facebook.png diff --git a/indra/newview/llpersontabview.cpp b/indra/newview/llpersontabview.cpp index 0dfd53705b..6aa51febcb 100644 --- a/indra/newview/llpersontabview.cpp +++ b/indra/newview/llpersontabview.cpp @@ -125,6 +125,7 @@ bool LLPersonView::sChildrenWidthsInitialized = false; ChildWidthVec LLPersonView::mChildWidthVec; LLPersonView::Params::Params() : +facebook_icon("facebook_icon"), avatar_icon("avatar_icon"), last_interaction_time_textbox("last_interaction_time_textbox"), permission_edit_theirs_icon("permission_edit_theirs_icon"), @@ -140,6 +141,7 @@ LLPersonView::LLPersonView(const LLPersonView::Params& p) : LLFolderViewItem(p), mImageOver(LLUI::getUIImage("ListItem_Over")), mImageSelected(LLUI::getUIImage("ListItem_Select")), +mFacebookIcon(NULL), mAvatarIcon(NULL), mLastInteractionTimeTextbox(NULL), mPermissionEditTheirsIcon(NULL), @@ -154,7 +156,19 @@ mOutputMonitorCtrl(NULL) S32 LLPersonView::getLabelXPos() { - return getIndentation() + mAvatarIcon->getRect().getWidth() + mIconPad; + S32 label_x_pos; + + if(mAvatarIcon->getVisible()) + { + label_x_pos = getIndentation() + mAvatarIcon->getRect().getWidth() + mIconPad; + } + else + { + label_x_pos = getIndentation() + mFacebookIcon->getRect().getWidth() + mIconPad; + } + + + return label_x_pos; } void LLPersonView::addToFolder(LLFolderViewFolder * person_folder_view) @@ -164,6 +178,16 @@ void LLPersonView::addToFolder(LLFolderViewFolder * person_folder_view) person_folder_view->requestArrange(); mPersonTabModel = static_cast(getParentFolder()->getViewModelItem()); + + if(mPersonTabModel->mTabType == LLPersonTabModel::FB_SL_NON_SL_FRIEND) + { + mAvatarIcon->setVisible(TRUE); + } + else if(mPersonTabModel->mTabType == LLPersonTabModel::FB_ONLY_FRIEND) + { + mFacebookIcon->setVisible(TRUE); + } + } LLPersonView::~LLPersonView() @@ -295,11 +319,16 @@ void LLPersonView::drawHighlight() void LLPersonView::initFromParams(const LLPersonView::Params & params) { + LLIconCtrl::Params facebook_icon_params(params.facebook_icon()); + applyXUILayout(facebook_icon_params, this); + mFacebookIcon = LLUICtrlFactory::create(facebook_icon_params); + addChild(mFacebookIcon); + LLAvatarIconCtrl::Params avatar_icon_params(params.avatar_icon()); applyXUILayout(avatar_icon_params, this); mAvatarIcon = LLUICtrlFactory::create(avatar_icon_params); addChild(mAvatarIcon); - + LLTextBox::Params last_interaction_time_textbox(params.last_interaction_time_textbox()); applyXUILayout(last_interaction_time_textbox, this); mLastInteractionTimeTextbox = LLUICtrlFactory::create(last_interaction_time_textbox); diff --git a/indra/newview/llpersontabview.h b/indra/newview/llpersontabview.h index 9e5fdc3057..9839a1eaaf 100644 --- a/indra/newview/llpersontabview.h +++ b/indra/newview/llpersontabview.h @@ -77,6 +77,7 @@ public: struct Params : public LLInitParam::Block { Params(); + Optional facebook_icon; Optional avatar_icon; Optional last_interaction_time_textbox; Optional permission_edit_theirs_icon; @@ -111,6 +112,7 @@ private: LLPointer mImageOver; LLPointer mImageSelected; + LLIconCtrl * mFacebookIcon; LLAvatarIconCtrl* mAvatarIcon; LLTextBox * mLastInteractionTimeTextbox; LLIconCtrl * mPermissionEditTheirsIcon; diff --git a/indra/newview/skins/default/textures/icons/Facebook.png b/indra/newview/skins/default/textures/icons/Facebook.png new file mode 100644 index 0000000000..8287d56f88 Binary files /dev/null and b/indra/newview/skins/default/textures/icons/Facebook.png differ diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 5b17ef94db..18146943a5 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -199,6 +199,8 @@ with the same filename but different name + + diff --git a/indra/newview/skins/default/xui/en/widgets/person_view.xml b/indra/newview/skins/default/xui/en/widgets/person_view.xml index 4a39109f36..006437401c 100644 --- a/indra/newview/skins/default/xui/en/widgets/person_view.xml +++ b/indra/newview/skins/default/xui/en/widgets/person_view.xml @@ -13,6 +13,17 @@ text_pad_right="4" arrow_size="10" max_folder_item_overlap="2"> + Date: Mon, 6 May 2013 18:19:08 -0700 Subject: ACME-341 Hide the avatar icon and use the FB icon instead: Adjusted positioning of facebook icon to better match spec. --- indra/newview/skins/default/xui/en/widgets/person_view.xml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/indra/newview/skins/default/xui/en/widgets/person_view.xml b/indra/newview/skins/default/xui/en/widgets/person_view.xml index 006437401c..46c1b7ff75 100644 --- a/indra/newview/skins/default/xui/en/widgets/person_view.xml +++ b/indra/newview/skins/default/xui/en/widgets/person_view.xml @@ -14,16 +14,15 @@ arrow_size="10" max_folder_item_overlap="2"> + width="14" /> Date: Mon, 6 May 2013 18:31:27 -0700 Subject: ACME-275 : Fixed! Filtering on FB list works (tested with simulated data only so far) --- indra/llui/llfolderview.cpp | 5 ----- indra/llui/llfolderviewitem.cpp | 16 +--------------- indra/newview/llpersonmodelcommon.cpp | 28 ++++++++++++++++++++++++---- indra/newview/llpersonmodelcommon.h | 14 ++++++++------ 4 files changed, 33 insertions(+), 30 deletions(-) diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp index 679a76e26f..9cf822892e 100644 --- a/indra/llui/llfolderview.cpp +++ b/indra/llui/llfolderview.cpp @@ -1653,11 +1653,6 @@ void LLFolderView::update() BOOL is_visible = isInVisibleChain(); - if (getName() == "Persons") - { - llinfos << "Merov : update Persons, is_visible = " << is_visible << llendl; - } - // Puts folders/items in proper positions // arrange() takes the model filter flag into account and call sort() if necessary (CHUI-849) // It also handles the open/close folder animation diff --git a/indra/llui/llfolderviewitem.cpp b/indra/llui/llfolderviewitem.cpp index 88bc0ccfd4..0c0c54c38c 100755 --- a/indra/llui/llfolderviewitem.cpp +++ b/indra/llui/llfolderviewitem.cpp @@ -953,12 +953,6 @@ static LLFastTimer::DeclareTimer FTM_ARRANGE("Arrange"); // * Makes sure that this view and its children are the right size S32 LLFolderViewFolder::arrange( S32* width, S32* height ) { - llinfos << "Merov : LLFolderViewFolder::arrange, folder = " << getName() << llendl; - if (getName() == "Facebook Friends Tab Two") - { - llinfos << "Merov : Arranging Facebook Friends Tab Two, needs arrange = " << needsArrange() << ", is open = " << isOpen() << llendl; - } - // Sort before laying out contents // Note that we sort from the root (CHUI-849) getRoot()->getFolderViewModel()->sort(this); @@ -1115,11 +1109,7 @@ S32 LLFolderViewFolder::arrange( S32* width, S32* height ) BOOL LLFolderViewFolder::needsArrange() { - if (getName() != "") - { - llinfos << "Merov : needsArrange for " << getName() << ", last = " << mLastArrangeGeneration << ", current = " << getRoot()->getArrangeGeneration() << ", need = " << (mLastArrangeGeneration < getRoot()->getArrangeGeneration() ? "true" : "false") << llendl; - } - return mLastArrangeGeneration != getRoot()->getArrangeGeneration(); + return mLastArrangeGeneration < getRoot()->getArrangeGeneration(); } // Passes selection information on to children and record selection @@ -1641,10 +1631,6 @@ void LLFolderViewFolder::requestArrange() void LLFolderViewFolder::toggleOpen() { - if (getName() == "Facebook Friends Tab Two") - { - llinfos << "Merov : toggleOpen, currently open is = " << isOpen() << llendl; - } setOpen(!isOpen()); } diff --git a/indra/newview/llpersonmodelcommon.cpp b/indra/newview/llpersonmodelcommon.cpp index 6b4c71faa2..9fefc17345 100644 --- a/indra/newview/llpersonmodelcommon.cpp +++ b/indra/newview/llpersonmodelcommon.cpp @@ -48,6 +48,7 @@ LLPersonModelCommon::LLPersonModelCommon(LLFolderViewModelInterface& root_view_m LLFolderViewModelItemCommon(root_view_model), mName(""), mSearchableName(""), + mPrevPassedAllFilters(false), mID(LLUUID().generateNewID()) { } @@ -103,11 +104,11 @@ bool LLPersonModelCommon::filter( LLFolderViewFilter& filter) llinfos << "Merov : LLPersonModelCommon::filter, exit, no modif" << llendl; return true; } -*/ + */ if (!mChildren.empty()) { // If the current instance has children, it's a "person folder" and always passes filters (we do not filter out empty folders) - setPassedFilter(1, -1); + setPassedFilter(1, filter.getCurrentGeneration()); // Call filter recursively on all children for (child_list_t::iterator iter = mChildren.begin(), end_iter = mChildren.end(); iter != end_iter; @@ -121,13 +122,31 @@ bool LLPersonModelCommon::filter( LLFolderViewFilter& filter) { // If there's no children, the current instance is a person and we check and set the passed filter flag on it const bool passed_filter = filter.check(this); - setPassedFilter(passed_filter, -1, filter.getStringMatchOffset(this), filter.getFilterStringSize()); + setPassedFilter(passed_filter, filter.getCurrentGeneration(), filter.getStringMatchOffset(this), filter.getFilterStringSize()); } filter.clearModified(); return true; } +void LLPersonModelCommon::setPassedFilter(bool passed, S32 filter_generation, std::string::size_type string_offset, std::string::size_type string_size) +{ + LLFolderViewModelItemCommon::setPassedFilter(passed, filter_generation, string_offset, string_size); + bool before = mPrevPassedAllFilters; + mPrevPassedAllFilters = passedFilter(filter_generation); + + if (before != mPrevPassedAllFilters) + { + // Need to rearrange the folder if the filtered state of the item changed + LLFolderViewFolder* parent_folder = mFolderViewItem->getParentFolder(); + if (parent_folder) + { + parent_folder->requestArrange(); + } + } +} + + // // LLPersonTabModel // @@ -217,7 +236,8 @@ LLPersonViewFilter::LLPersonViewFilter() : mEmptyLookupMessage(""), mFilterSubString(""), mName(""), - mFilterModified(FILTER_NONE) + mFilterModified(FILTER_NONE), + mCurrentGeneration(0) { } diff --git a/indra/newview/llpersonmodelcommon.h b/indra/newview/llpersonmodelcommon.h index f44f619d18..1b8197cf6a 100644 --- a/indra/newview/llpersonmodelcommon.h +++ b/indra/newview/llpersonmodelcommon.h @@ -75,7 +75,7 @@ public: virtual bool filter( LLFolderViewFilter& filter); virtual bool descendantsPassedFilter(S32 filter_generation = -1) { return true; } -// virtual void setPassedFilter(bool passed, S32 filter_generation, std::string::size_type string_offset = std::string::npos, std::string::size_type string_size = 0) { } + virtual void setPassedFilter(bool passed, S32 filter_generation, std::string::size_type string_offset = std::string::npos, std::string::size_type string_size = 0); virtual bool passedFilter(S32 filter_generation = -1) { return mPassedFilter; } // The action callbacks @@ -102,6 +102,7 @@ protected: std::string mName; // Name of the person std::string mSearchableName; // Name used in string matching for this person + bool mPrevPassedAllFilters; LLUUID mID; }; @@ -172,7 +173,7 @@ public: void clearModified(); const std::string& getName() const { return mName; } const std::string& getFilterText() { return mName; } - void setModified(EFilterModified behavior = FILTER_RESTART) { mFilterModified = behavior; } + void setModified(EFilterModified behavior = FILTER_RESTART) { mFilterModified = behavior; mCurrentGeneration++; } // +-------------------------------------------------------------------+ // + Time @@ -193,10 +194,10 @@ public: // +-------------------------------------------------------------------+ // + Generation // +-------------------------------------------------------------------+ - // Note : unclear if we have to take tab on generation at that point - S32 getCurrentGeneration() const { return 0; } - S32 getFirstSuccessGeneration() const { return 0; } - S32 getFirstRequiredGeneration() const { return 0; } + // Note : For the moment, we do not support restrictive filtering so all generation indexes are pointing to the current generation + S32 getCurrentGeneration() const { return mCurrentGeneration; } + S32 getFirstSuccessGeneration() const { return mCurrentGeneration; } + S32 getFirstRequiredGeneration() const { return mCurrentGeneration; } // Non Virtual Methods (i.e. specific to this class) void setFilterSubString(const std::string& string); @@ -206,6 +207,7 @@ private: std::string mEmptyLookupMessage; std::string mFilterSubString; EFilterModified mFilterModified; + S32 mCurrentGeneration; }; class LLPersonViewSort -- cgit v1.2.3 From 54de882b81083298009e3b4a3d74fa1c7255068d Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Tue, 7 May 2013 13:47:18 -0700 Subject: ACME-343 : Add Connect to Facebook menu item --- indra/newview/skins/default/xui/en/menu_viewer.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 39e777b246..9ce360415c 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -15,6 +15,13 @@ function="ShowAgentProfile" parameter="agent" /> + + + + -- cgit v1.2.3 From 3a351c4ee548e2bce8ad0d5935377a090591621f Mon Sep 17 00:00:00 2001 From: Don Kjer Date: Wed, 8 May 2013 05:51:28 +0000 Subject: Adding follow_redirects parameter to LLHTTPClient get/head variants. Not following redirects for facebook connect requests. --- indra/llmessage/llhttpclient.cpp | 35 +++++++++++++++++++------------- indra/llmessage/llhttpclient.h | 19 +++++++++++------ indra/llmessage/llurlrequest.cpp | 21 +++++++++++++------ indra/llmessage/llurlrequest.h | 9 ++++---- indra/newview/llpanelpeople.cpp | 15 +++++++++++--- indra/newview/tests/lltranslate_test.cpp | 4 ++-- 6 files changed, 68 insertions(+), 35 deletions(-) diff --git a/indra/llmessage/llhttpclient.cpp b/indra/llmessage/llhttpclient.cpp index 3561459bb4..2d16237161 100755 --- a/indra/llmessage/llhttpclient.cpp +++ b/indra/llmessage/llhttpclient.cpp @@ -217,7 +217,8 @@ static void request( Injector* body_injector, LLCurl::ResponderPtr responder, const F32 timeout = HTTP_REQUEST_EXPIRY_SECS, - const LLSD& headers = LLSD() + const LLSD& headers = LLSD(), + bool follow_redirects = true ) { if (!LLHTTPClient::hasPump()) @@ -231,7 +232,7 @@ static void request( } LLPumpIO::chain_t chain; - LLURLRequest* req = new LLURLRequest(method, url); + LLURLRequest* req = new LLURLRequest(method, url, follow_redirects); if(!req->isValid())//failed { if (responder) @@ -334,7 +335,8 @@ void LLHTTPClient::getByteRange( S32 bytes, ResponderPtr responder, const LLSD& hdrs, - const F32 timeout) + const F32 timeout, + bool follow_redirects /* = true */) { LLSD headers = hdrs; if(offset > 0 || bytes > 0) @@ -342,37 +344,42 @@ void LLHTTPClient::getByteRange( std::string range = llformat("bytes=%d-%d", offset, offset+bytes-1); headers["Range"] = range; } - request(url,LLURLRequest::HTTP_GET, NULL, responder, timeout, headers); + request(url,LLURLRequest::HTTP_GET, NULL, responder, timeout, headers, follow_redirects); } void LLHTTPClient::head( const std::string& url, ResponderPtr responder, const LLSD& headers, - const F32 timeout) + const F32 timeout, + bool follow_redirects /* = true */) { - request(url, LLURLRequest::HTTP_HEAD, NULL, responder, timeout, headers); + request(url, LLURLRequest::HTTP_HEAD, NULL, responder, timeout, headers, follow_redirects); } -void LLHTTPClient::get(const std::string& url, ResponderPtr responder, const LLSD& headers, const F32 timeout) +void LLHTTPClient::get(const std::string& url, ResponderPtr responder, const LLSD& headers, const F32 timeout, + bool follow_redirects /* = true */) { - request(url, LLURLRequest::HTTP_GET, NULL, responder, timeout, headers); + request(url, LLURLRequest::HTTP_GET, NULL, responder, timeout, headers, follow_redirects); } -void LLHTTPClient::getHeaderOnly(const std::string& url, ResponderPtr responder, const LLSD& headers, const F32 timeout) +void LLHTTPClient::getHeaderOnly(const std::string& url, ResponderPtr responder, const LLSD& headers, + const F32 timeout, bool follow_redirects /* = true */) { - request(url, LLURLRequest::HTTP_HEAD, NULL, responder, timeout, headers); + request(url, LLURLRequest::HTTP_HEAD, NULL, responder, timeout, headers, follow_redirects); } -void LLHTTPClient::getHeaderOnly(const std::string& url, ResponderPtr responder, const F32 timeout) +void LLHTTPClient::getHeaderOnly(const std::string& url, ResponderPtr responder, const F32 timeout, + bool follow_redirects /* = true */) { - getHeaderOnly(url, responder, LLSD(), timeout); + getHeaderOnly(url, responder, LLSD(), timeout, follow_redirects); } -void LLHTTPClient::get(const std::string& url, const LLSD& query, ResponderPtr responder, const LLSD& headers, const F32 timeout) +void LLHTTPClient::get(const std::string& url, const LLSD& query, ResponderPtr responder, const LLSD& headers, + const F32 timeout, bool follow_redirects /* = true */) { LLURI uri; uri = LLURI::buildHTTP(url, LLSD::emptyArray(), query); - get(uri.asString(), responder, headers, timeout); + get(uri.asString(), responder, headers, timeout, follow_redirects); } // A simple class for managing data returned from a curl http request. diff --git a/indra/llmessage/llhttpclient.h b/indra/llmessage/llhttpclient.h index a7236ba169..5de257a4f6 100644 --- a/indra/llmessage/llhttpclient.h +++ b/indra/llmessage/llhttpclient.h @@ -63,10 +63,15 @@ public: const std::string& url, ResponderPtr, const LLSD& headers = LLSD(), - const F32 timeout=HTTP_REQUEST_EXPIRY_SECS); - static void getByteRange(const std::string& url, S32 offset, S32 bytes, ResponderPtr, const LLSD& headers=LLSD(), const F32 timeout=HTTP_REQUEST_EXPIRY_SECS); - static void get(const std::string& url, ResponderPtr, const LLSD& headers = LLSD(), const F32 timeout=HTTP_REQUEST_EXPIRY_SECS); - static void get(const std::string& url, const LLSD& query, ResponderPtr, const LLSD& headers = LLSD(), const F32 timeout=HTTP_REQUEST_EXPIRY_SECS); + const F32 timeout=HTTP_REQUEST_EXPIRY_SECS, + bool follow_redirects = true); + static void getByteRange(const std::string& url, S32 offset, S32 bytes, ResponderPtr, + const LLSD& headers=LLSD(), const F32 timeout=HTTP_REQUEST_EXPIRY_SECS, + bool follow_redirects = true); + static void get(const std::string& url, ResponderPtr, const LLSD& headers = LLSD(), + const F32 timeout=HTTP_REQUEST_EXPIRY_SECS, bool follow_redirects = true); + static void get(const std::string& url, const LLSD& query, ResponderPtr, const LLSD& headers = LLSD(), + const F32 timeout=HTTP_REQUEST_EXPIRY_SECS, bool follow_redirects = true); static void put( const std::string& url, @@ -74,8 +79,10 @@ public: ResponderPtr, const LLSD& headers = LLSD(), const F32 timeout=HTTP_REQUEST_EXPIRY_SECS); - static void getHeaderOnly(const std::string& url, ResponderPtr, const F32 timeout=HTTP_REQUEST_EXPIRY_SECS); - static void getHeaderOnly(const std::string& url, ResponderPtr, const LLSD& headers, const F32 timeout=HTTP_REQUEST_EXPIRY_SECS); + static void getHeaderOnly(const std::string& url, ResponderPtr, const F32 timeout=HTTP_REQUEST_EXPIRY_SECS, + bool follow_redirects = true); + static void getHeaderOnly(const std::string& url, ResponderPtr, const LLSD& headers, + const F32 timeout=HTTP_REQUEST_EXPIRY_SECS, bool follow_redirects = true); static void post( const std::string& url, diff --git a/indra/llmessage/llurlrequest.cpp b/indra/llmessage/llurlrequest.cpp index 627d591839..49f8144ee7 100644 --- a/indra/llmessage/llurlrequest.cpp +++ b/indra/llmessage/llurlrequest.cpp @@ -150,16 +150,19 @@ std::string LLURLRequest::actionAsVerb(LLURLRequest::ERequestAction action) return VERBS[action]; } -LLURLRequest::LLURLRequest(LLURLRequest::ERequestAction action) : - mAction(action) +LLURLRequest::LLURLRequest(LLURLRequest::ERequestAction action, bool follow_redirects /* = true */) : + mAction(action), + mFollowRedirects(follow_redirects) { initialize(); } LLURLRequest::LLURLRequest( LLURLRequest::ERequestAction action, - const std::string& url) : - mAction(action) + const std::string& url, + bool follow_redirects /* = true */) : + mAction(action), + mFollowRedirects(follow_redirects) { initialize(); setURL(url); @@ -479,12 +482,18 @@ bool LLURLRequest::configure() case HTTP_HEAD: mDetail->mCurlRequest->setopt(CURLOPT_HEADER, 1); mDetail->mCurlRequest->setopt(CURLOPT_NOBODY, 1); - mDetail->mCurlRequest->setopt(CURLOPT_FOLLOWLOCATION, 1); + if (mFollowRedirects) + { + mDetail->mCurlRequest->setopt(CURLOPT_FOLLOWLOCATION, 1); + } rv = true; break; case HTTP_GET: mDetail->mCurlRequest->setopt(CURLOPT_HTTPGET, 1); - mDetail->mCurlRequest->setopt(CURLOPT_FOLLOWLOCATION, 1); + if (mFollowRedirects) + { + mDetail->mCurlRequest->setopt(CURLOPT_FOLLOWLOCATION, 1); + } // Set Accept-Encoding to allow response compression mDetail->mCurlRequest->setoptString(CURLOPT_ENCODING, ""); diff --git a/indra/llmessage/llurlrequest.h b/indra/llmessage/llurlrequest.h index 44d358d906..20d6e30d17 100644 --- a/indra/llmessage/llurlrequest.h +++ b/indra/llmessage/llurlrequest.h @@ -95,7 +95,7 @@ public: * * @param action One of the ERequestAction enumerations. */ - LLURLRequest(ERequestAction action); + LLURLRequest(ERequestAction action, bool follow_redirects = true); /** * @brief Constructor. @@ -103,7 +103,7 @@ public: * @param action One of the ERequestAction enumerations. * @param url The url of the request. It should already be encoded. */ - LLURLRequest(ERequestAction action, const std::string& url); + LLURLRequest(ERequestAction action, const std::string& url, bool follow_redirects = true); /** * @brief Destructor. @@ -219,10 +219,11 @@ protected: }; EState mState; ERequestAction mAction; + bool mFollowRedirects; LLURLRequestDetail* mDetail; LLIOPipe::ptr_t mCompletionCallback; - S32 mRequestTransferedBytes; - S32 mResponseTransferedBytes; + S32 mRequestTransferedBytes; + S32 mResponseTransferedBytes; static CURLcode _sslCtxCallback(CURL * curl, void *sslctx, void *param); diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index af9ecd743c..479e503ef0 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1854,14 +1854,20 @@ public: void LLPanelPeople::loadFacebookFriends() { - LLHTTPClient::get(getFacebookConnectURL("/friend"), new FacebookFriendsResponder(this)); + const bool follow_redirects=false; + const F32 timeout=HTTP_REQUEST_EXPIRY_SECS; + LLHTTPClient::get(getFacebookConnectURL("/friend"), new FacebookFriendsResponder(this), + LLSD(), timeout, follow_redirects); } void LLPanelPeople::tryToReconnectToFacebook() { if (!mConnectedToFbc) { - LLHTTPClient::get(getFacebookConnectURL("/connection"), new FacebookConnectedResponder(this, false)); + const bool follow_redirects=false; + const F32 timeout=HTTP_REQUEST_EXPIRY_SECS; + LLHTTPClient::get(getFacebookConnectURL("/connection"), new FacebookConnectedResponder(this, false), + LLSD(), timeout, follow_redirects); } } @@ -1895,7 +1901,10 @@ void LLPanelPeople::onLoginFbcButtonClicked() } else { - LLHTTPClient::get(getFacebookConnectURL("/connection"), new FacebookConnectedResponder(this, true)); + const bool follow_redirects=false; + const F32 timeout=HTTP_REQUEST_EXPIRY_SECS; + LLHTTPClient::get(getFacebookConnectURL("/connection"), new FacebookConnectedResponder(this, true), + LLSD(), timeout, follow_redirects); } } diff --git a/indra/newview/tests/lltranslate_test.cpp b/indra/newview/tests/lltranslate_test.cpp index fd9527d631..8ce56326d8 100644 --- a/indra/newview/tests/lltranslate_test.cpp +++ b/indra/newview/tests/lltranslate_test.cpp @@ -308,8 +308,8 @@ void LLCurl::Responder::errorWithContent(U32, std::string const&, LLSD const&) { void LLCurl::Responder::result(LLSD const&) {} LLCurl::Responder::~Responder() {} -void LLHTTPClient::get(const std::string&, const LLSD&, ResponderPtr, const LLSD&, const F32) {} -void LLHTTPClient::get(const std::string&, LLPointer, const LLSD&, const F32) {} +void LLHTTPClient::get(const std::string&, const LLSD&, ResponderPtr, const LLSD&, const F32, bool) {} +void LLHTTPClient::get(const std::string&, LLPointer, const LLSD&, const F32, bool) {} LLBufferStream::LLBufferStream(const LLChannelDescriptors& channels, LLBufferArray* buffer) : std::iostream(&mStreamBuf), mStreamBuf(channels, buffer) {} -- cgit v1.2.3 From 7d6e3945204c05efe85eadf8a6635d0ca30e9186 Mon Sep 17 00:00:00 2001 From: Cho Date: Wed, 8 May 2013 19:17:47 +0100 Subject: temporary hack for fb demo to use https://pdp15.lindenlab.com instead of going through cap server --- indra/newview/llpanelpeople.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 479e503ef0..9956888134 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1887,7 +1887,8 @@ void LLPanelPeople::disconnectFromFacebook() std::string LLPanelPeople::getFacebookConnectURL(const std::string& route) { - static std::string sFacebookConnectUrl = gAgent.getRegion()->getCapability("FacebookConnect"); + //static std::string sFacebookConnectUrl = gAgent.getRegion()->getCapability("FacebookConnect"); + static std::string sFacebookConnectUrl = "https://pdp15.lindenlab.com/fbc/agent/" + gAgentID.asString(); // TEMPORARY HACK FOR FB DEMO - Cho std::string url = sFacebookConnectUrl + route; llinfos << url << llendl; return url; -- cgit v1.2.3 From 2d65482d7152b613409a071e0a117d38f350932a Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Wed, 8 May 2013 15:26:45 -0700 Subject: ACME-342 Format the PersonView so that it shows the avatar icon, SL name, FB icon, and FB name: Adjusted personview/personmodel contain a suffix which is the FB username for SL+FB users --- indra/newview/llpanelpeople.cpp | 15 ++++++++++----- indra/newview/llpersonmodelcommon.cpp | 14 ++++++++++++-- indra/newview/llpersonmodelcommon.h | 6 ++++-- indra/newview/llpersontabview.cpp | 23 ++++++++++++++++++++++- indra/newview/llpersontabview.h | 1 + 5 files changed, 49 insertions(+), 10 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 9956888134..07a1c46256 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -732,6 +732,7 @@ BOOL LLPanelPeople::postBuild() folder_view_params.view_model = &mPersonFolderViewModel; folder_view_params.root = NULL; folder_view_params.use_ellipses = false; + folder_view_params.use_label_suffix = true; folder_view_params.options_menu = "menu_conversation.xml"; folder_view_params.name = "fbcfolderview"; mPersonFolderView = LLUICtrlFactory::create(folder_view_params); @@ -1676,7 +1677,7 @@ void LLPanelPeople::showFacebookFriends(const LLSD& friends) void LLPanelPeople::addTestParticipant() { std::string suffix("Aa"); - std::string prefix("Test Name"); + std::string prefix("Second Life User Name Goes Here"); LLPersonTabModel * person_tab_model; LLUUID agentID; std::string name; @@ -1717,11 +1718,15 @@ void LLPanelPeople::addParticipantToModel(LLPersonTabModel * person_folder_model LLPersonModel* person_model = NULL; LLAvatarName avatar_name; - bool avatar_name_exists = LLAvatarNameCache::get(agent_id, &avatar_name); - - std::string aggregated_name = avatar_name_exists ? name + " (" + avatar_name.getDisplayName() + ") " : name; + bool has_name = LLAvatarNameCache::get(agent_id, &avatar_name); + std::string avatar_name_string; + + if(has_name) + { + avatar_name_string = avatar_name.getDisplayName(); + } - person_model = new LLPersonModel(agent_id, aggregated_name, mPersonFolderViewModel); + person_model = new LLPersonModel(agent_id, name, avatar_name_string, mPersonFolderViewModel); person_folder_model->addParticipant(person_model); } diff --git a/indra/newview/llpersonmodelcommon.cpp b/indra/newview/llpersonmodelcommon.cpp index b3424cc451..e48eddf05a 100644 --- a/indra/newview/llpersonmodelcommon.cpp +++ b/indra/newview/llpersonmodelcommon.cpp @@ -39,14 +39,24 @@ LLPersonModelCommon::LLPersonModelCommon(std::string display_name, LLFolderViewModelInterface& root_view_model) : LLFolderViewModelItemCommon(root_view_model), + mLabelSuffix(""), mID(LLUUID().generateNewID()) { renameItem(display_name); } +LLPersonModelCommon::LLPersonModelCommon(std::string display_name, std::string suffix, LLFolderViewModelInterface& root_view_model) : +LLFolderViewModelItemCommon(root_view_model), + mID(LLUUID().generateNewID()) +{ + mLabelSuffix = suffix; + renameItem(display_name); +} + LLPersonModelCommon::LLPersonModelCommon(LLFolderViewModelInterface& root_view_model) : LLFolderViewModelItemCommon(root_view_model), mName(""), + mLabelSuffix(""), mSearchableName(""), mPrevPassedAllFilters(false), mID(LLUUID().generateNewID()) @@ -212,8 +222,8 @@ LLPersonModel* LLPersonTabModel::findParticipant(const LLUUID& person_id) // LLPersonModel // -LLPersonModel::LLPersonModel(const LLUUID& agent_id, const std::string display_name, LLFolderViewModelInterface& root_view_model) : -LLPersonModelCommon(display_name,root_view_model), +LLPersonModel::LLPersonModel(const LLUUID& agent_id, const std::string display_name, const std::string suffix, LLFolderViewModelInterface& root_view_model) : +LLPersonModelCommon(display_name, suffix, root_view_model), mAgentID(agent_id) { } diff --git a/indra/newview/llpersonmodelcommon.h b/indra/newview/llpersonmodelcommon.h index 5f3801874d..74598eaee0 100644 --- a/indra/newview/llpersonmodelcommon.h +++ b/indra/newview/llpersonmodelcommon.h @@ -40,6 +40,7 @@ class LLPersonModelCommon : public LLFolderViewModelItemCommon public: LLPersonModelCommon(std::string name, LLFolderViewModelInterface& root_view_model); + LLPersonModelCommon(std::string display_name, std::string suffix, LLFolderViewModelInterface& root_view_model); LLPersonModelCommon(LLFolderViewModelInterface& root_view_model); virtual ~LLPersonModelCommon(); @@ -51,7 +52,7 @@ public: virtual LLPointer getIcon() const { return NULL; } virtual LLPointer getOpenIcon() const { return getIcon(); } virtual LLFontGL::StyleFlags getLabelStyle() const { return LLFontGL::NORMAL; } - virtual std::string getLabelSuffix() const { return LLStringUtil::null; } + virtual std::string getLabelSuffix() const { return mLabelSuffix; } virtual BOOL isItemRenameable() const { return TRUE; } virtual BOOL renameItem(const std::string& new_name); virtual BOOL isItemMovable( void ) const { return FALSE; } @@ -101,6 +102,7 @@ public: protected: std::string mName; // Name of the person + std::string mLabelSuffix; std::string mSearchableName; // Name used in string matching for this person bool mPrevPassedAllFilters; LLUUID mID; @@ -133,7 +135,7 @@ private: class LLPersonModel : public LLPersonModelCommon { public: - LLPersonModel(const LLUUID& agent_id, const std::string display_name, LLFolderViewModelInterface& root_view_model); + LLPersonModel(const LLUUID& agent_id, const std::string display_name, const std::string suffix, LLFolderViewModelInterface& root_view_model); LLPersonModel(LLFolderViewModelInterface& root_view_model); LLUUID getAgentID(); diff --git a/indra/newview/llpersontabview.cpp b/indra/newview/llpersontabview.cpp index 6aa51febcb..16ebb6af90 100644 --- a/indra/newview/llpersontabview.cpp +++ b/indra/newview/llpersontabview.cpp @@ -182,6 +182,7 @@ void LLPersonView::addToFolder(LLFolderViewFolder * person_folder_view) if(mPersonTabModel->mTabType == LLPersonTabModel::FB_SL_NON_SL_FRIEND) { mAvatarIcon->setVisible(TRUE); + mFacebookIcon->setVisible(TRUE); } else if(mPersonTabModel->mTabType == LLPersonTabModel::FB_ONLY_FRIEND) { @@ -286,7 +287,20 @@ void LLPersonView::draw() F32 right_x = 0; drawHighlight(); - drawLabel(font, text_left, y, color, right_x); + drawLabel(mLabel, font, text_left, y, color, right_x); + + if(mLabelSuffix.length()) + { + LLRect mFacebookIconRect = mFacebookIcon->getRect(); + S32 new_left = right_x + 7; + mFacebookIconRect.set(new_left, + mFacebookIconRect.mTop, + new_left + mFacebookIconRect.getWidth(), + mFacebookIconRect.mBottom); + mFacebookIcon->setRect(mFacebookIconRect); + } + + drawLabel(mLabelSuffix, font, mFacebookIcon->getRect().mRight + 7, y, color, right_x); LLView::draw(); } @@ -317,6 +331,13 @@ void LLPersonView::drawHighlight() } } +void LLPersonView::drawLabel(const std::string text, const LLFontGL * font, const F32 x, const F32 y, const LLColor4& color, F32 &right_x) +{ + font->renderUTF8(text, 0, x, y, color, + LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, + S32_MAX, getRect().getWidth() - (S32) x - mLabelPaddingRight, &right_x, TRUE); +} + void LLPersonView::initFromParams(const LLPersonView::Params & params) { LLIconCtrl::Params facebook_icon_params(params.facebook_icon()); diff --git a/indra/newview/llpersontabview.h b/indra/newview/llpersontabview.h index 9839a1eaaf..6f244c2794 100644 --- a/indra/newview/llpersontabview.h +++ b/indra/newview/llpersontabview.h @@ -104,6 +104,7 @@ protected: void draw(); void drawHighlight(); + void drawLabel(const std::string text, const LLFontGL * font, const F32 x, const F32 y, const LLColor4& color, F32 &right_x); private: -- cgit v1.2.3 From 14be8efcc6a9797d2041e56addd0897f0b4234ea Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Wed, 8 May 2013 16:53:52 -0700 Subject: ACME-348 : WIP : LLFacebookConnect refactoring --- indra/newview/CMakeLists.txt | 2 + indra/newview/llfacebookconnect.cpp | 215 ++++++++++++++++++++++++++++++++++++ indra/newview/llfacebookconnect.h | 66 +++++++++++ indra/newview/llpanelpeople.cpp | 178 ----------------------------- indra/newview/llpanelpeople.h | 4 - 5 files changed, 283 insertions(+), 182 deletions(-) create mode 100644 indra/newview/llfacebookconnect.cpp create mode 100644 indra/newview/llfacebookconnect.h diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 6b7fa7d842..44b1604b15 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -185,6 +185,7 @@ set(viewer_SOURCE_FILES llexpandabletextbox.cpp llexternaleditor.cpp llface.cpp + llfacebookconnect.cpp llfasttimerview.cpp llfavoritesbar.cpp llfeaturemanager.cpp @@ -769,6 +770,7 @@ set(viewer_HEADER_FILES llexpandabletextbox.h llexternaleditor.h llface.h + llfacebookconnect.h llfasttimerview.h llfavoritesbar.h llfeaturemanager.h diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp new file mode 100644 index 0000000000..1962f6fd97 --- /dev/null +++ b/indra/newview/llfacebookconnect.cpp @@ -0,0 +1,215 @@ +/** + * @file llfacebookconnect.h + * @author Merov, Cho, Gil + * @brief Connection to Facebook Service + * + * $LicenseInfo:firstyear=2013&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2013, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llfacebookconnect.h" + +/////////////////////////////////////////////////////////////////////////////// +// +class LLFacebookConnectResponder : public LLHTTPClient::Responder +{ + LOG_CLASS(LLFacebookConnectResponder); +public: + + virtual void completed(U32 status, const std::string& reason, const LLSD& content) + { + if (isGoodStatus(status)) + { + LL_DEBUGS("FacebookConnect") << "Connect successful. content: " << content << LL_ENDL; + + // Grab some graph data now that we are connected + LLFacebookConnect::instance().setConnected(true); + LLFacebookConnect::instance().loadFacebookFriends(); + } + else + { + LL_WARNS("FacebookConnect") << "Failed to get a response. reason: " << reason << " status: " << status << LL_ENDL; + } + } +}; + +/////////////////////////////////////////////////////////////////////////////// +// +class LLFacebookDisconnectResponder : public LLHTTPClient::Responder +{ + LOG_CLASS(LLFacebookDisconnectResponder); +public: + + virtual void completed(U32 status, const std::string& reason, const LLSD& content) + { + if (isGoodStatus(status)) + { + LL_DEBUGS("FacebookConnect") << "Disconnect successful. content: " << content << LL_ENDL; + + // Hide all the facebook stuff + LLFacebookConnect::instance().setConnected(false); + LLFacebookConnect::instance().hideFacebookFriends(); + } + else + { + LL_WARNS("FacebookConnect") << "Failed to get a response. reason: " << reason << " status: " << status << LL_ENDL; + } + } +}; + +/////////////////////////////////////////////////////////////////////////////// +// +class LLFacebookConnectedResponder : public LLHTTPClient::Responder +{ + LOG_CLASS(LLFacebookDisconnectResponder); +public: + + LLFacebookConnectedResponder(bool show_login_if_not_connected) : mShowLoginIfNotConnected(show_login_if_not_connected) {} + + virtual void completed(U32 status, const std::string& reason, const LLSD& content) + { + if (isGoodStatus(status)) + { + LL_DEBUGS("FacebookConnect") << "Connect successful. content: " << content << LL_ENDL; + + // Grab some graph data if already connected + LLFacebookConnect::instance().setConnected(true); + LLFacebookConnect::instance().loadFacebookFriends(); + } + else + { + LL_WARNS("FacebookConnect") << "Failed to get a response. reason: " << reason << " status: " << status << LL_ENDL; + + // show the facebook login page if not connected yet + if ((status == 404) && mShowLoginIfNotConnected) + { + LLFacebookConnect::instance().connectToFacebook(); + } + } + } + +private: + bool mShowLoginIfNotConnected; +}; + +/////////////////////////////////////////////////////////////////////////////// +// +class LLFacebookFriendsResponder : public LLHTTPClient::Responder +{ + LOG_CLASS(LLFacebookFriendsResponder); +public: + + virtual void completed(U32 status, const std::string& reason, const LLSD& content) + { + if (isGoodStatus(status)) + { + LL_DEBUGS("FacebookConnect") << "Getting Facebook friends successful. content: " << content << LL_ENDL; + + // Display the list of friends + LLFacebookConnect::instance().showFacebookFriends(content); + } + else + { + LL_WARNS("FacebookConnect") << "Failed to get a response. reason: " << reason << " status: " << status << LL_ENDL; + } + } +}; + + +/////////////////////////////////////////////////////////////////////////////// +// +LLFacebookConnect::LLFacebookConnect() +: mConnectedToFbc(false) +{ +} + +void LLFacebookConnect::init() +{ +} + +void LLFacebookConnect::loadFacebookFriends() +{ + const bool follow_redirects=false; + const F32 timeout=HTTP_REQUEST_EXPIRY_SECS; + LLHTTPClient::get(getFacebookConnectURL("/friend"), new FacebookFriendsResponder(this), + LLSD(), timeout, follow_redirects); +} + +void LLFacebookConnect::hideFacebookFriends() +{ + // That needs to be done in llpanelpeople... + //mFacebookFriends->clear(); +} + +void LLFacebookConnect::connectToFacebook(const std::string& auth_code) +{ + LLSD body; + if (!auth_code.empty()) + body["code"] = auth_code; + + LLHTTPClient::put(getFacebookConnectURL("/connection"), body, new FacebookConnectResponder(this)); +} + +void LLFacebookConnect::showFacebookFriends(const LLSD& friends) +{ + /* All that needs to be rewritten to + mFacebookFriends->clear(); + LLPersonTabModel::tab_type tab_type; + LLAvatarTracker& avatar_tracker = LLAvatarTracker::instance(); + + for (LLSD::map_const_iterator i = friends.beginMap(); i != friends.endMap(); ++i) + { + std::string name = i->second["name"].asString(); + LLUUID agent_id = i->second.has("agent_id") ? i->second["agent_id"].asUUID() : LLUUID(NULL); + + //add to avatar list + mFacebookFriends->addNewItem(agent_id, name, false); + + //FB+SL but not SL friend + if(agent_id.notNull() && !avatar_tracker.isBuddy(agent_id)) + { + tab_type = LLPersonTabModel::FB_SL_NON_SL_FRIEND; + } + //FB only friend + else + { + tab_type = LLPersonTabModel::FB_ONLY_FRIEND; + } + + //Add to person tab model + LLPersonTabModel * person_tab_model = dynamic_cast(mPersonFolderView->getPersonTabModelByIndex(tab_type)); + if(person_tab_model) + { + addParticipantToModel(person_tab_model, agent_id, name); + } + } + */ +} + + + + + + + + diff --git a/indra/newview/llfacebookconnect.h b/indra/newview/llfacebookconnect.h new file mode 100644 index 0000000000..d60fdacd90 --- /dev/null +++ b/indra/newview/llfacebookconnect.h @@ -0,0 +1,66 @@ +/** + * @file llfacebookconnect.h + * @author Merov, Cho, Gil + * @brief Connection to Facebook Service + * + * $LicenseInfo:firstyear=2013&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2013, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLFACEBOOKCONNECT_H +#define LL_LLFACEBOOKCONNECT_H + +#include "llsingleton.h" + +/** + * @class LLFacebookConnect + * + * Manages authentication to, and interaction with, a web service allowing the + * the viewer to get Facebook OpenGraph data. + */ +class LLFacebookConnect : public LLSingleton +{ + LOG_CLASS(LLFacebookConnect); +public: + /* + * Performs initial setup, by requesting config data from the web service if + * it has not already been received. + */ + void init(); + + void loadFacebookFriends(); + void hideFacebookFriends(); + void connectToFacebook(const std::string& auth_code = ""); + void showFacebookFriends(const LLSD& friends); + + void setConnected(bool connected) { mConnectedToFbc = connected; } + +private: + + friend class LLSingleton; + + LLFacebookConnect(); + ~LLFacebookConnect() {}; + + bool mConnectedToFbc; +}; + +#endif // LL_LLFACEBOOKCONNECT_H diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 9956888134..ce3ae48aca 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1639,40 +1639,6 @@ void LLPanelPeople::openFacebookWeb(std::string url) LLUrlAction::openURLExternal(url); } -void LLPanelPeople::showFacebookFriends(const LLSD& friends) -{ - mFacebookFriends->clear(); - LLPersonTabModel::tab_type tab_type; - LLAvatarTracker& avatar_tracker = LLAvatarTracker::instance(); - - for (LLSD::map_const_iterator i = friends.beginMap(); i != friends.endMap(); ++i) - { - std::string name = i->second["name"].asString(); - LLUUID agent_id = i->second.has("agent_id") ? i->second["agent_id"].asUUID() : LLUUID(NULL); - - //add to avatar list - mFacebookFriends->addNewItem(agent_id, name, false); - - //FB+SL but not SL friend - if(agent_id.notNull() && !avatar_tracker.isBuddy(agent_id)) - { - tab_type = LLPersonTabModel::FB_SL_NON_SL_FRIEND; - } - //FB only friend - else - { - tab_type = LLPersonTabModel::FB_ONLY_FRIEND; - } - - //Add to person tab model - LLPersonTabModel * person_tab_model = dynamic_cast(mPersonFolderView->getPersonTabModelByIndex(tab_type)); - if(person_tab_model) - { - addParticipantToModel(person_tab_model, agent_id, name); - } - } -} - void LLPanelPeople::addTestParticipant() { std::string suffix("Aa"); @@ -1725,141 +1691,6 @@ void LLPanelPeople::addParticipantToModel(LLPersonTabModel * person_folder_model person_folder_model->addParticipant(person_model); } -void LLPanelPeople::hideFacebookFriends() -{ - mFacebookFriends->clear(); -} - -class FacebookConnectResponder : public LLHTTPClient::Responder -{ -public: - - LLPanelPeople * mPanelPeople; - - FacebookConnectResponder(LLPanelPeople * panel_people) : mPanelPeople(panel_people) {} - - /*virtual*/ void completed(U32 status, const std::string& reason, const LLSD& content) - { - if (isGoodStatus(status)) - { - llinfos << content << llendl; - - // grab some graph data now that we are connected - mPanelPeople->mConnectedToFbc = true; - mPanelPeople->loadFacebookFriends(); - } - else - { - llinfos << "failed to get response. reason: " << reason << " status: " << status << llendl; - } - } - - /*virtual*/ void completedHeader(U32 status, const std::string& reason, const LLSD& content) - { - if (status == 302) - { - mPanelPeople->openFacebookWeb(content["location"]); - } - } -}; - -class FacebookDisconnectResponder : public LLHTTPClient::Responder -{ -public: - - LLPanelPeople * mPanelPeople; - - FacebookDisconnectResponder(LLPanelPeople * panel_people) : mPanelPeople(panel_people) {} - - /*virtual*/ void completed(U32 status, const std::string& reason, const LLSD& content) - { - if (isGoodStatus(status)) - { - llinfos << content << llendl; - - // hide all the facebook stuff - mPanelPeople->mConnectedToFbc = false; - mPanelPeople->hideFacebookFriends(); - } - else - { - llinfos << "failed to get response. reason: " << reason << " status: " << status << llendl; - } - } -}; - -class FacebookConnectedResponder : public LLHTTPClient::Responder -{ -public: - - LLPanelPeople * mPanelPeople; - bool mShowLoginIfNotConnected; - - FacebookConnectedResponder(LLPanelPeople * panel_people, bool show_login_if_not_connected) : mPanelPeople(panel_people), mShowLoginIfNotConnected(show_login_if_not_connected) {} - - /*virtual*/ void completed(U32 status, const std::string& reason, const LLSD& content) - { - if (isGoodStatus(status)) - { - llinfos << content << llendl; - - // grab some graph data if already connected - mPanelPeople->mConnectedToFbc = true; - mPanelPeople->loadFacebookFriends(); - } - else - { - llinfos << "failed to get response. reason: " << reason << " status: " << status << llendl; - - // show the facebook login page if not connected yet - if (status == 404 && mShowLoginIfNotConnected) - { - mPanelPeople->connectToFacebook(); - } - } - } -}; - -class FacebookFriendsResponder : public LLHTTPClient::Responder -{ -public: - - LLPanelPeople * mPanelPeople; - - FacebookFriendsResponder(LLPanelPeople * panel_people) : mPanelPeople(panel_people) {} - - /*virtual*/ void completed(U32 status, const std::string& reason, const LLSD& content) - { - if (isGoodStatus(status)) - { - llinfos << content << llendl; - - // display the list of friends - mPanelPeople->showFacebookFriends(content); - } - else - { - llinfos << "failed to get response. reason: " << reason << " status: " << status << llendl; - } - } - - /*virtual*/ void completedHeader(U32 status, const std::string& reason, const LLSD& content) - { - if (status == 302) - { - mPanelPeople->openFacebookWeb(content["location"]); - } - } -}; - -void LLPanelPeople::loadFacebookFriends() -{ - const bool follow_redirects=false; - const F32 timeout=HTTP_REQUEST_EXPIRY_SECS; - LLHTTPClient::get(getFacebookConnectURL("/friend"), new FacebookFriendsResponder(this), - LLSD(), timeout, follow_redirects); -} - void LLPanelPeople::tryToReconnectToFacebook() { if (!mConnectedToFbc) @@ -1871,15 +1702,6 @@ void LLPanelPeople::tryToReconnectToFacebook() } } -void LLPanelPeople::connectToFacebook(const std::string& auth_code) -{ - LLSD body; - if (!auth_code.empty()) - body["code"] = auth_code; - - LLHTTPClient::put(getFacebookConnectURL("/connection"), body, new FacebookConnectResponder(this)); -} - void LLPanelPeople::disconnectFromFacebook() { LLHTTPClient::del(getFacebookConnectURL("/connection"), new FacebookDisconnectResponder(this)); diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index 943d84ac1d..fa354f7ecb 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -63,13 +63,9 @@ public: static void idle(void * user_data); void openFacebookWeb(std::string url); - void showFacebookFriends(const LLSD& friends); void addTestParticipant(); void addParticipantToModel(LLPersonTabModel * session_model, const LLUUID& agent_id, const std::string& name); - void hideFacebookFriends(); - void loadFacebookFriends(); void tryToReconnectToFacebook(); - void connectToFacebook(const std::string& auth_code = ""); void disconnectFromFacebook(); std::string getFacebookConnectURL(const std::string& route = ""); -- cgit v1.2.3 From 62eda57ea1f4d3e39aa34010f7709908f24fb6e2 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Thu, 9 May 2013 10:25:21 -0700 Subject: ACME-348 : WIP : LLFacebookConnect refactorin completed. Not functional yet though. --- indra/newview/llfacebookconnect.cpp | 92 +++++++++++++++++++++++++++++++++---- indra/newview/llfacebookconnect.h | 8 +++- indra/newview/llpanelpeople.cpp | 72 +++-------------------------- indra/newview/llpanelpeople.h | 9 +--- 4 files changed, 98 insertions(+), 83 deletions(-) diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp index 1962f6fd97..ec2085c2ac 100644 --- a/indra/newview/llfacebookconnect.cpp +++ b/indra/newview/llfacebookconnect.cpp @@ -29,6 +29,38 @@ #include "llfacebookconnect.h" +#include "llagent.h" +#include "llcallingcard.h" // for LLAvatarTracker +//#include "llcommandhandler.h" +#include "llhttpclient.h" + +/////////////////////////////////////////////////////////////////////////////// +// +/* +class LLFacebookConnectHandler : public LLCommandHandler +{ +public: + LLFacebookConnectHandler() : LLCommandHandler("fbc", UNTRUSTED_THROTTLE) { } + + bool handle(const LLSD& tokens, const LLSD& query_map, LLMediaCtrl* web) + { + if (tokens.size() > 0) + { + if (tokens[0].asString() == "connect") + { + if (query_map.has("code")) + { + LLFacebookConnect::instance().connectToFacebook(query_map["code"]); + } + return true; + } + } + return false; + } +}; +LLFacebookConnectHandler gFacebookConnectHandler; +*/ + /////////////////////////////////////////////////////////////////////////////// // class LLFacebookConnectResponder : public LLHTTPClient::Responder @@ -81,7 +113,7 @@ public: // class LLFacebookConnectedResponder : public LLHTTPClient::Responder { - LOG_CLASS(LLFacebookDisconnectResponder); + LOG_CLASS(LLFacebookConnectedResponder); public: LLFacebookConnectedResponder(bool show_login_if_not_connected) : mShowLoginIfNotConnected(show_login_if_not_connected) {} @@ -147,11 +179,20 @@ void LLFacebookConnect::init() { } +std::string LLFacebookConnect::getFacebookConnectURL(const std::string& route) +{ + //static std::string sFacebookConnectUrl = gAgent.getRegion()->getCapability("FacebookConnect"); + static std::string sFacebookConnectUrl = "https://pdp15.lindenlab.com/fbc/agent/" + gAgentID.asString(); // TEMPORARY HACK FOR FB DEMO - Cho + std::string url = sFacebookConnectUrl + route; + llinfos << url << llendl; + return url; +} + void LLFacebookConnect::loadFacebookFriends() { const bool follow_redirects=false; const F32 timeout=HTTP_REQUEST_EXPIRY_SECS; - LLHTTPClient::get(getFacebookConnectURL("/friend"), new FacebookFriendsResponder(this), + LLHTTPClient::get(getFacebookConnectURL("/friend"), new LLFacebookFriendsResponder(), LLSD(), timeout, follow_redirects); } @@ -167,15 +208,41 @@ void LLFacebookConnect::connectToFacebook(const std::string& auth_code) if (!auth_code.empty()) body["code"] = auth_code; - LLHTTPClient::put(getFacebookConnectURL("/connection"), body, new FacebookConnectResponder(this)); + LLHTTPClient::put(getFacebookConnectURL("/connection"), body, new LLFacebookConnectResponder()); +} + +void LLFacebookConnect::disconnectFromFacebook() +{ + LLHTTPClient::del(getFacebookConnectURL("/connection"), new LLFacebookDisconnectResponder()); +} + +void LLFacebookConnect::tryToReconnectToFacebook() +{ + if (!mConnectedToFbc) + { + const bool follow_redirects=false; + const F32 timeout=HTTP_REQUEST_EXPIRY_SECS; + LLHTTPClient::get(getFacebookConnectURL("/connection"), new LLFacebookConnectedResponder(false), + LLSD(), timeout, follow_redirects); + } +} + +void LLFacebookConnect::getConnectionToFacebook() +{ + const bool follow_redirects=false; + const F32 timeout=HTTP_REQUEST_EXPIRY_SECS; + LLHTTPClient::get(getFacebookConnectURL("/connection"), new LLFacebookConnectedResponder(true), + LLSD(), timeout, follow_redirects); } void LLFacebookConnect::showFacebookFriends(const LLSD& friends) { - /* All that needs to be rewritten to - mFacebookFriends->clear(); - LLPersonTabModel::tab_type tab_type; + /* All that needs to be rewritten a different way */ + // FOR TESTING ONLY!! Print out the data in the log + //mFacebookFriends->clear(); + //LLPersonTabModel::tab_type tab_type; LLAvatarTracker& avatar_tracker = LLAvatarTracker::instance(); + llinfos << "LLFacebookConnect::showFacebookFriends" << llendl; for (LLSD::map_const_iterator i = friends.beginMap(); i != friends.endMap(); ++i) { @@ -183,27 +250,32 @@ void LLFacebookConnect::showFacebookFriends(const LLSD& friends) LLUUID agent_id = i->second.has("agent_id") ? i->second["agent_id"].asUUID() : LLUUID(NULL); //add to avatar list - mFacebookFriends->addNewItem(agent_id, name, false); + //mFacebookFriends->addNewItem(agent_id, name, false); //FB+SL but not SL friend + bool is_SL_friend = false; if(agent_id.notNull() && !avatar_tracker.isBuddy(agent_id)) { - tab_type = LLPersonTabModel::FB_SL_NON_SL_FRIEND; + //tab_type = LLPersonTabModel::FB_SL_NON_SL_FRIEND; + is_SL_friend = false; } //FB only friend else { - tab_type = LLPersonTabModel::FB_ONLY_FRIEND; + //tab_type = LLPersonTabModel::FB_ONLY_FRIEND; + is_SL_friend = true; } + llinfos << "LLFacebookConnect : agent_id = " << agent_id << ", name = " << name << ", SL friend = " << is_SL_friend << llendl; //Add to person tab model + /* LLPersonTabModel * person_tab_model = dynamic_cast(mPersonFolderView->getPersonTabModelByIndex(tab_type)); if(person_tab_model) { addParticipantToModel(person_tab_model, agent_id, name); } + */ } - */ } diff --git a/indra/newview/llfacebookconnect.h b/indra/newview/llfacebookconnect.h index d60fdacd90..c42d8c8edc 100644 --- a/indra/newview/llfacebookconnect.h +++ b/indra/newview/llfacebookconnect.h @@ -49,9 +49,14 @@ public: void loadFacebookFriends(); void hideFacebookFriends(); void connectToFacebook(const std::string& auth_code = ""); + void disconnectFromFacebook(); + void tryToReconnectToFacebook(); + void getConnectionToFacebook(); + void showFacebookFriends(const LLSD& friends); void setConnected(bool connected) { mConnectedToFbc = connected; } + bool getConnected() { return mConnectedToFbc; } private: @@ -59,7 +64,8 @@ private: LLFacebookConnect(); ~LLFacebookConnect() {}; - + std::string getFacebookConnectURL(const std::string& route = ""); + bool mConnectedToFbc; }; diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index ce3ae48aca..02a254b76c 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -54,8 +54,8 @@ #include "llcallingcard.h" // for LLAvatarTracker #include "llcallbacklist.h" #include "llerror.h" +#include "llfacebookconnect.h" #include "llfloateravatarpicker.h" -//#include "llfloaterminiinspector.h" #include "llfriendcard.h" #include "llgroupactions.h" #include "llgrouplist.h" @@ -76,7 +76,6 @@ #include "llspeakers.h" #include "llfloaterwebcontent.h" #include "llurlaction.h" -#include "llcommandhandler.h" #define FRIEND_LIST_UPDATE_TIMEOUT 0.5 #define NEARBY_LIST_UPDATE_INTERVAL 1 @@ -91,35 +90,6 @@ static const std::string FBCTEST_TAB_NAME = "fbctest_panel"; static const std::string FBCTESTTWO_TAB_NAME = "fbctesttwo_panel"; static const std::string COLLAPSED_BY_USER = "collapsed_by_user"; -class LLFacebookConnectHandler : public LLCommandHandler -{ -public: - LLFacebookConnectHandler() : LLCommandHandler("fbc", UNTRUSTED_THROTTLE), mPanelPeople(NULL) { } - - LLPanelPeople* mPanelPeople; - - bool handle(const LLSD& tokens, const LLSD& query_map, - LLMediaCtrl* web) - { - if (tokens.size() > 0) - { - if (tokens[0].asString() == "connect") - { - if (query_map.has("code")) - { - if (mPanelPeople) - { - mPanelPeople->connectToFacebook(query_map["code"]); - mPanelPeople = NULL; - } - } - return true; - } - } - return false; - } -}; -LLFacebookConnectHandler gFacebookConnectHandler; /** Comparator for comparing avatar items by last interaction date */ class LLAvatarItemRecentComparator : public LLAvatarItemComparator @@ -577,7 +547,6 @@ private: LLPanelPeople::LLPanelPeople() : LLPanel(), - mConnectedToFbc(false), mPersonFolderView(NULL), mTryToConnectToFbc(true), mTabContainer(NULL), @@ -947,7 +916,7 @@ void LLPanelPeople::updateFbcTestList() if (mTryToConnectToFbc) { // try to reconnect to facebook! - tryToReconnectToFacebook(); + LLFacebookConnect::instance().tryToReconnectToFacebook(); // don't try again mTryToConnectToFbc = false; @@ -1633,11 +1602,12 @@ bool LLPanelPeople::isAccordionCollapsedByUser(const std::string& name) return isAccordionCollapsedByUser(getChild(name)); } +/* void LLPanelPeople::openFacebookWeb(std::string url) { - gFacebookConnectHandler.mPanelPeople = this; LLUrlAction::openURLExternal(url); } +*/ void LLPanelPeople::addTestParticipant() { @@ -1691,43 +1661,15 @@ void LLPanelPeople::addParticipantToModel(LLPersonTabModel * person_folder_model person_folder_model->addParticipant(person_model); } -void LLPanelPeople::tryToReconnectToFacebook() -{ - if (!mConnectedToFbc) - { - const bool follow_redirects=false; - const F32 timeout=HTTP_REQUEST_EXPIRY_SECS; - LLHTTPClient::get(getFacebookConnectURL("/connection"), new FacebookConnectedResponder(this, false), - LLSD(), timeout, follow_redirects); - } -} - -void LLPanelPeople::disconnectFromFacebook() -{ - LLHTTPClient::del(getFacebookConnectURL("/connection"), new FacebookDisconnectResponder(this)); -} - -std::string LLPanelPeople::getFacebookConnectURL(const std::string& route) -{ - //static std::string sFacebookConnectUrl = gAgent.getRegion()->getCapability("FacebookConnect"); - static std::string sFacebookConnectUrl = "https://pdp15.lindenlab.com/fbc/agent/" + gAgentID.asString(); // TEMPORARY HACK FOR FB DEMO - Cho - std::string url = sFacebookConnectUrl + route; - llinfos << url << llendl; - return url; -} - void LLPanelPeople::onLoginFbcButtonClicked() { - if (mConnectedToFbc) + if (LLFacebookConnect::instance().getConnected()) { - disconnectFromFacebook(); + LLFacebookConnect::instance().disconnectFromFacebook(); } else { - const bool follow_redirects=false; - const F32 timeout=HTTP_REQUEST_EXPIRY_SECS; - LLHTTPClient::get(getFacebookConnectURL("/connection"), new FacebookConnectedResponder(this, true), - LLSD(), timeout, follow_redirects); + LLFacebookConnect::instance().getConnectionToFacebook(); } } diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index fa354f7ecb..2f74064327 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -62,16 +62,11 @@ public: static void idle(void * user_data); - void openFacebookWeb(std::string url); +// void openFacebookWeb(std::string url); void addTestParticipant(); void addParticipantToModel(LLPersonTabModel * session_model, const LLUUID& agent_id, const std::string& name); - void tryToReconnectToFacebook(); - void disconnectFromFacebook(); - std::string getFacebookConnectURL(const std::string& route = ""); - - bool mConnectedToFbc; - bool mTryToConnectToFbc; + bool mTryToConnectToFbc; // internals class Updater; -- cgit v1.2.3 From 359c3d520eaf8de818081db32812387416add26a Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Thu, 9 May 2013 16:02:03 -0700 Subject: ACME-342 Format the PersonView so that it shows the avatar icon, SL name, FB icon, and FB name: Rendering now matches the UX spec. --- indra/llui/llfolderviewitem.cpp | 12 +++++++++++- indra/newview/llpanelpeople.cpp | 6 +++--- indra/newview/llpersontabview.cpp | 25 +++++++++++++------------ 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/indra/llui/llfolderviewitem.cpp b/indra/llui/llfolderviewitem.cpp index 0c0c54c38c..f061313645 100755 --- a/indra/llui/llfolderviewitem.cpp +++ b/indra/llui/llfolderviewitem.cpp @@ -307,7 +307,12 @@ std::set LLFolderViewItem::getSelectionList() const // addToFolder() returns TRUE if it succeeds. FALSE otherwise void LLFolderViewItem::addToFolder(LLFolderViewFolder* folder) { - folder->addItem(this); + folder->addItem(this); + + // Compute indentation since parent folder changed + mIndentation = (getParentFolder()) + ? getParentFolder()->getIndentation() + mLocalIndentation + : 0; } @@ -940,6 +945,11 @@ LLFolderViewFolder::~LLFolderViewFolder( void ) void LLFolderViewFolder::addToFolder(LLFolderViewFolder* folder) { folder->addFolder(this); + + // Compute indentation since parent folder changed + mIndentation = (getParentFolder()) + ? getParentFolder()->getIndentation() + mLocalIndentation + : 0; } static LLFastTimer::DeclareTimer FTM_ARRANGE("Arrange"); diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 07a1c46256..420225f260 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -731,7 +731,7 @@ BOOL LLPanelPeople::postBuild() folder_view_params.listener = base_item; folder_view_params.view_model = &mPersonFolderViewModel; folder_view_params.root = NULL; - folder_view_params.use_ellipses = false; + folder_view_params.use_ellipses = true; folder_view_params.use_label_suffix = true; folder_view_params.options_menu = "menu_conversation.xml"; folder_view_params.name = "fbcfolderview"; @@ -1677,7 +1677,7 @@ void LLPanelPeople::showFacebookFriends(const LLSD& friends) void LLPanelPeople::addTestParticipant() { std::string suffix("Aa"); - std::string prefix("Second Life User Name Goes Here"); + std::string prefix("Facebook User Name"); LLPersonTabModel * person_tab_model; LLUUID agentID; std::string name; @@ -1726,7 +1726,7 @@ void LLPanelPeople::addParticipantToModel(LLPersonTabModel * person_folder_model avatar_name_string = avatar_name.getDisplayName(); } - person_model = new LLPersonModel(agent_id, name, avatar_name_string, mPersonFolderViewModel); + person_model = new LLPersonModel(agent_id, avatar_name_string, name, mPersonFolderViewModel); person_folder_model->addParticipant(person_model); } diff --git a/indra/newview/llpersontabview.cpp b/indra/newview/llpersontabview.cpp index 16ebb6af90..d4c73cd53f 100644 --- a/indra/newview/llpersontabview.cpp +++ b/indra/newview/llpersontabview.cpp @@ -173,6 +173,8 @@ S32 LLPersonView::getLabelXPos() void LLPersonView::addToFolder(LLFolderViewFolder * person_folder_view) { + const LLFontGL * font = LLFontGL::getFontSansSerifSmall(); + LLFolderViewItem::addToFolder(person_folder_view); //Added item to folder could change folder's mHasVisibleChildren flag so call arrange person_folder_view->requestArrange(); @@ -183,6 +185,17 @@ void LLPersonView::addToFolder(LLFolderViewFolder * person_folder_view) { mAvatarIcon->setVisible(TRUE); mFacebookIcon->setVisible(TRUE); + + S32 label_width = font->getWidth(mLabel); + F32 text_left = (F32)getLabelXPos(); + + LLRect mFacebookIconRect = mFacebookIcon->getRect(); + S32 new_left = text_left + label_width + 7; + mFacebookIconRect.set(new_left, + mFacebookIconRect.mTop, + new_left + mFacebookIconRect.getWidth(), + mFacebookIconRect.mBottom); + mFacebookIcon->setRect(mFacebookIconRect); } else if(mPersonTabModel->mTabType == LLPersonTabModel::FB_ONLY_FRIEND) { @@ -288,18 +301,6 @@ void LLPersonView::draw() drawHighlight(); drawLabel(mLabel, font, text_left, y, color, right_x); - - if(mLabelSuffix.length()) - { - LLRect mFacebookIconRect = mFacebookIcon->getRect(); - S32 new_left = right_x + 7; - mFacebookIconRect.set(new_left, - mFacebookIconRect.mTop, - new_left + mFacebookIconRect.getWidth(), - mFacebookIconRect.mBottom); - mFacebookIcon->setRect(mFacebookIconRect); - } - drawLabel(mLabelSuffix, font, mFacebookIcon->getRect().mRight + 7, y, color, right_x); LLView::draw(); -- cgit v1.2.3 From fb27eae15502cbd2a13cde018ae67f961320d0ba Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Thu, 9 May 2013 17:36:04 -0700 Subject: ACME-342 Format the PersonView so that it shows the avatar icon, SL name, FB icon, and FB name: Found a couple bugs that were causing the positioning of text to be incorrect in the 'Peope you may want to friend' tab. --- indra/llui/llfolderview.cpp | 2 +- indra/newview/llpanelpeople.cpp | 4 ++-- indra/newview/llpersontabview.cpp | 10 ++++++++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp index 9cf822892e..20eade892d 100644 --- a/indra/llui/llfolderview.cpp +++ b/indra/llui/llfolderview.cpp @@ -185,7 +185,7 @@ LLFolderView::LLFolderView(const Params& p) mAutoOpenCandidate = NULL; mAutoOpenTimer.stop(); mKeyboardSelection = FALSE; - mIndentation = p.folder_indentation; + mIndentation = getParentFolder() ? getParentFolder()->getIndentation() + mLocalIndentation : 0; //clear label // go ahead and render root folder as usual diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 420225f260..2bdfdf6687 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1677,7 +1677,7 @@ void LLPanelPeople::showFacebookFriends(const LLSD& friends) void LLPanelPeople::addTestParticipant() { std::string suffix("Aa"); - std::string prefix("Facebook User Name"); + std::string prefix("FB Name"); LLPersonTabModel * person_tab_model; LLUUID agentID; std::string name; @@ -1718,7 +1718,7 @@ void LLPanelPeople::addParticipantToModel(LLPersonTabModel * person_folder_model LLPersonModel* person_model = NULL; LLAvatarName avatar_name; - bool has_name = LLAvatarNameCache::get(agent_id, &avatar_name); + bool has_name = agent_id.notNull() ? LLAvatarNameCache::get(agent_id, &avatar_name) : false; std::string avatar_name_string; if(has_name) diff --git a/indra/newview/llpersontabview.cpp b/indra/newview/llpersontabview.cpp index d4c73cd53f..34ffc6ffce 100644 --- a/indra/newview/llpersontabview.cpp +++ b/indra/newview/llpersontabview.cpp @@ -300,8 +300,14 @@ void LLPersonView::draw() F32 right_x = 0; drawHighlight(); - drawLabel(mLabel, font, text_left, y, color, right_x); - drawLabel(mLabelSuffix, font, mFacebookIcon->getRect().mRight + 7, y, color, right_x); + if(mLabel.length()) + { + drawLabel(mLabel, font, text_left, y, color, right_x); + } + if(mLabelSuffix.length()) + { + drawLabel(mLabelSuffix, font, mFacebookIcon->getRect().mRight + 7, y, color, right_x); + } LLView::draw(); } -- cgit v1.2.3 From f90d93f75da6481dc1b308dfb76dd767e7623ea5 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Fri, 10 May 2013 15:10:53 -0700 Subject: ACME-348 : WIP : Add some traces to work out the protocol (temporary) --- indra/newview/llfacebookconnect.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp index ec2085c2ac..e7f039aff1 100644 --- a/indra/newview/llfacebookconnect.cpp +++ b/indra/newview/llfacebookconnect.cpp @@ -173,6 +173,7 @@ public: LLFacebookConnect::LLFacebookConnect() : mConnectedToFbc(false) { + llinfos << "Merov : LLFacebookConnect::LLFacebookConnect" << llendl; } void LLFacebookConnect::init() @@ -181,6 +182,7 @@ void LLFacebookConnect::init() std::string LLFacebookConnect::getFacebookConnectURL(const std::string& route) { + llinfos << "Merov : LLFacebookConnect::getFacebookConnectURL. route = " << route << llendl; //static std::string sFacebookConnectUrl = gAgent.getRegion()->getCapability("FacebookConnect"); static std::string sFacebookConnectUrl = "https://pdp15.lindenlab.com/fbc/agent/" + gAgentID.asString(); // TEMPORARY HACK FOR FB DEMO - Cho std::string url = sFacebookConnectUrl + route; @@ -190,6 +192,7 @@ std::string LLFacebookConnect::getFacebookConnectURL(const std::string& route) void LLFacebookConnect::loadFacebookFriends() { + llinfos << "Merov : LLFacebookConnect::loadFacebookFriends" << llendl; const bool follow_redirects=false; const F32 timeout=HTTP_REQUEST_EXPIRY_SECS; LLHTTPClient::get(getFacebookConnectURL("/friend"), new LLFacebookFriendsResponder(), @@ -198,12 +201,14 @@ void LLFacebookConnect::loadFacebookFriends() void LLFacebookConnect::hideFacebookFriends() { + llinfos << "Merov : LLFacebookConnect::hideFacebookFriends" << llendl; // That needs to be done in llpanelpeople... //mFacebookFriends->clear(); } void LLFacebookConnect::connectToFacebook(const std::string& auth_code) { + llinfos << "Merov : LLFacebookConnect::connectToFacebook" << llendl; LLSD body; if (!auth_code.empty()) body["code"] = auth_code; @@ -213,11 +218,13 @@ void LLFacebookConnect::connectToFacebook(const std::string& auth_code) void LLFacebookConnect::disconnectFromFacebook() { + llinfos << "Merov : LLFacebookConnect::disconnectFromFacebook" << llendl; LLHTTPClient::del(getFacebookConnectURL("/connection"), new LLFacebookDisconnectResponder()); } void LLFacebookConnect::tryToReconnectToFacebook() { + llinfos << "Merov : LLFacebookConnect::tryToReconnectToFacebook" << llendl; if (!mConnectedToFbc) { const bool follow_redirects=false; @@ -229,6 +236,7 @@ void LLFacebookConnect::tryToReconnectToFacebook() void LLFacebookConnect::getConnectionToFacebook() { + llinfos << "Merov : LLFacebookConnect::getConnectionToFacebook" << llendl; const bool follow_redirects=false; const F32 timeout=HTTP_REQUEST_EXPIRY_SECS; LLHTTPClient::get(getFacebookConnectURL("/connection"), new LLFacebookConnectedResponder(true), @@ -242,7 +250,7 @@ void LLFacebookConnect::showFacebookFriends(const LLSD& friends) //mFacebookFriends->clear(); //LLPersonTabModel::tab_type tab_type; LLAvatarTracker& avatar_tracker = LLAvatarTracker::instance(); - llinfos << "LLFacebookConnect::showFacebookFriends" << llendl; + llinfos << "Merov : LLFacebookConnect::showFacebookFriends" << llendl; for (LLSD::map_const_iterator i = friends.beginMap(); i != friends.endMap(); ++i) { @@ -257,15 +265,15 @@ void LLFacebookConnect::showFacebookFriends(const LLSD& friends) if(agent_id.notNull() && !avatar_tracker.isBuddy(agent_id)) { //tab_type = LLPersonTabModel::FB_SL_NON_SL_FRIEND; - is_SL_friend = false; + is_SL_friend = true; } //FB only friend else { //tab_type = LLPersonTabModel::FB_ONLY_FRIEND; - is_SL_friend = true; + is_SL_friend = false; } - llinfos << "LLFacebookConnect : agent_id = " << agent_id << ", name = " << name << ", SL friend = " << is_SL_friend << llendl; + llinfos << "Merov : LLFacebookConnect : agent_id = " << agent_id << ", name = " << name << ", SL friend = " << is_SL_friend << llendl; //Add to person tab model /* -- cgit v1.2.3 From 7c4bfc8f55ebc581ddac0c2394b07b24d240d1a6 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Fri, 10 May 2013 18:25:45 -0700 Subject: ACME-348 : Completed : Facebook Connect refactored, LLPeoplePanel test list hooked correctly. --- indra/newview/llfacebookconnect.cpp | 100 ++++++++++-------------------------- indra/newview/llfacebookconnect.h | 19 ++++--- indra/newview/llpanelpeople.cpp | 54 ++++++++++++++++--- indra/newview/llpanelpeople.h | 5 +- 4 files changed, 88 insertions(+), 90 deletions(-) diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp index e7f039aff1..7f8e3afe89 100644 --- a/indra/newview/llfacebookconnect.cpp +++ b/indra/newview/llfacebookconnect.cpp @@ -98,9 +98,9 @@ public: { LL_DEBUGS("FacebookConnect") << "Disconnect successful. content: " << content << LL_ENDL; - // Hide all the facebook stuff + // Clear all facebook stuff LLFacebookConnect::instance().setConnected(false); - LLFacebookConnect::instance().hideFacebookFriends(); + LLFacebookConnect::instance().clearContent(); } else { @@ -156,9 +156,7 @@ public: if (isGoodStatus(status)) { LL_DEBUGS("FacebookConnect") << "Getting Facebook friends successful. content: " << content << LL_ENDL; - - // Display the list of friends - LLFacebookConnect::instance().showFacebookFriends(content); + LLFacebookConnect::instance().storeContent(content); } else { @@ -171,18 +169,14 @@ public: /////////////////////////////////////////////////////////////////////////////// // LLFacebookConnect::LLFacebookConnect() -: mConnectedToFbc(false) -{ - llinfos << "Merov : LLFacebookConnect::LLFacebookConnect" << llendl; -} - -void LLFacebookConnect::init() +: mConnectedToFbc(false), + mContent(), + mGeneration(0) { } std::string LLFacebookConnect::getFacebookConnectURL(const std::string& route) { - llinfos << "Merov : LLFacebookConnect::getFacebookConnectURL. route = " << route << llendl; //static std::string sFacebookConnectUrl = gAgent.getRegion()->getCapability("FacebookConnect"); static std::string sFacebookConnectUrl = "https://pdp15.lindenlab.com/fbc/agent/" + gAgentID.asString(); // TEMPORARY HACK FOR FB DEMO - Cho std::string url = sFacebookConnectUrl + route; @@ -190,25 +184,8 @@ std::string LLFacebookConnect::getFacebookConnectURL(const std::string& route) return url; } -void LLFacebookConnect::loadFacebookFriends() -{ - llinfos << "Merov : LLFacebookConnect::loadFacebookFriends" << llendl; - const bool follow_redirects=false; - const F32 timeout=HTTP_REQUEST_EXPIRY_SECS; - LLHTTPClient::get(getFacebookConnectURL("/friend"), new LLFacebookFriendsResponder(), - LLSD(), timeout, follow_redirects); -} - -void LLFacebookConnect::hideFacebookFriends() -{ - llinfos << "Merov : LLFacebookConnect::hideFacebookFriends" << llendl; - // That needs to be done in llpanelpeople... - //mFacebookFriends->clear(); -} - void LLFacebookConnect::connectToFacebook(const std::string& auth_code) { - llinfos << "Merov : LLFacebookConnect::connectToFacebook" << llendl; LLSD body; if (!auth_code.empty()) body["code"] = auth_code; @@ -218,13 +195,11 @@ void LLFacebookConnect::connectToFacebook(const std::string& auth_code) void LLFacebookConnect::disconnectFromFacebook() { - llinfos << "Merov : LLFacebookConnect::disconnectFromFacebook" << llendl; LLHTTPClient::del(getFacebookConnectURL("/connection"), new LLFacebookDisconnectResponder()); } void LLFacebookConnect::tryToReconnectToFacebook() { - llinfos << "Merov : LLFacebookConnect::tryToReconnectToFacebook" << llendl; if (!mConnectedToFbc) { const bool follow_redirects=false; @@ -236,54 +211,35 @@ void LLFacebookConnect::tryToReconnectToFacebook() void LLFacebookConnect::getConnectionToFacebook() { - llinfos << "Merov : LLFacebookConnect::getConnectionToFacebook" << llendl; const bool follow_redirects=false; const F32 timeout=HTTP_REQUEST_EXPIRY_SECS; LLHTTPClient::get(getFacebookConnectURL("/connection"), new LLFacebookConnectedResponder(true), LLSD(), timeout, follow_redirects); } -void LLFacebookConnect::showFacebookFriends(const LLSD& friends) +void LLFacebookConnect::loadFacebookFriends() { - /* All that needs to be rewritten a different way */ - // FOR TESTING ONLY!! Print out the data in the log - //mFacebookFriends->clear(); - //LLPersonTabModel::tab_type tab_type; - LLAvatarTracker& avatar_tracker = LLAvatarTracker::instance(); - llinfos << "Merov : LLFacebookConnect::showFacebookFriends" << llendl; - - for (LLSD::map_const_iterator i = friends.beginMap(); i != friends.endMap(); ++i) - { - std::string name = i->second["name"].asString(); - LLUUID agent_id = i->second.has("agent_id") ? i->second["agent_id"].asUUID() : LLUUID(NULL); - - //add to avatar list - //mFacebookFriends->addNewItem(agent_id, name, false); - - //FB+SL but not SL friend - bool is_SL_friend = false; - if(agent_id.notNull() && !avatar_tracker.isBuddy(agent_id)) - { - //tab_type = LLPersonTabModel::FB_SL_NON_SL_FRIEND; - is_SL_friend = true; - } - //FB only friend - else - { - //tab_type = LLPersonTabModel::FB_ONLY_FRIEND; - is_SL_friend = false; - } - llinfos << "Merov : LLFacebookConnect : agent_id = " << agent_id << ", name = " << name << ", SL friend = " << is_SL_friend << llendl; - - //Add to person tab model - /* - LLPersonTabModel * person_tab_model = dynamic_cast(mPersonFolderView->getPersonTabModelByIndex(tab_type)); - if(person_tab_model) - { - addParticipantToModel(person_tab_model, agent_id, name); - } - */ - } + const bool follow_redirects=false; + const F32 timeout=HTTP_REQUEST_EXPIRY_SECS; + LLHTTPClient::get(getFacebookConnectURL("/friend"), new LLFacebookFriendsResponder(), + LLSD(), timeout, follow_redirects); +} + +void LLFacebookConnect::storeContent(const LLSD& content) +{ + mGeneration++; + mContent = content; +} + +const LLSD& LLFacebookConnect::getContent() const +{ + return mContent; +} + +void LLFacebookConnect::clearContent() +{ + mGeneration++; + mContent = LLSD(); } diff --git a/indra/newview/llfacebookconnect.h b/indra/newview/llfacebookconnect.h index c42d8c8edc..691aaa9131 100644 --- a/indra/newview/llfacebookconnect.h +++ b/indra/newview/llfacebookconnect.h @@ -40,24 +40,21 @@ class LLFacebookConnect : public LLSingleton { LOG_CLASS(LLFacebookConnect); public: - /* - * Performs initial setup, by requesting config data from the web service if - * it has not already been received. - */ - void init(); - - void loadFacebookFriends(); - void hideFacebookFriends(); void connectToFacebook(const std::string& auth_code = ""); void disconnectFromFacebook(); void tryToReconnectToFacebook(); void getConnectionToFacebook(); - void showFacebookFriends(const LLSD& friends); + void loadFacebookFriends(); + + void clearContent(); + void storeContent(const LLSD& content); + const LLSD& getContent() const; void setConnected(bool connected) { mConnectedToFbc = connected; } bool getConnected() { return mConnectedToFbc; } - + S32 generation() { return mGeneration; } + private: friend class LLSingleton; @@ -67,6 +64,8 @@ private: std::string getFacebookConnectURL(const std::string& route = ""); bool mConnectedToFbc; + LLSD mContent; + S32 mGeneration; }; #endif // LL_LLFACEBOOKCONNECT_H diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 02a254b76c..8648a44c55 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -555,12 +555,13 @@ LLPanelPeople::LLPanelPeople() mNearbyList(NULL), mRecentList(NULL), mGroupList(NULL), - mMiniMap(NULL) + mMiniMap(NULL), + mFacebookListGeneration(0) { mFriendListUpdater = new LLFriendListUpdater(boost::bind(&LLPanelPeople::updateFriendList, this)); mNearbyListUpdater = new LLNearbyListUpdater(boost::bind(&LLPanelPeople::updateNearbyList, this)); mRecentListUpdater = new LLRecentListUpdater(boost::bind(&LLPanelPeople::updateRecentList, this)); - mFbcTestListUpdater = new LLFbcTestListUpdater(boost::bind(&LLPanelPeople::updateFbcTestList, this)); + mFacebookListUpdater = new LLFbcTestListUpdater(boost::bind(&LLPanelPeople::updateFacebookList, this)); mButtonsUpdater = new LLButtonsUpdater(boost::bind(&LLPanelPeople::updateButtons, this)); mCommitCallbackRegistrar.add("People.loginFBC", boost::bind(&LLPanelPeople::onLoginFbcButtonClicked, this)); @@ -595,7 +596,7 @@ LLPanelPeople::~LLPanelPeople() delete mNearbyListUpdater; delete mFriendListUpdater; delete mRecentListUpdater; - delete mFbcTestListUpdater; + delete mFacebookListUpdater; if(LLVoiceClient::instanceExists()) { @@ -683,13 +684,17 @@ BOOL LLPanelPeople::postBuild() mAllFriendList->setContextMenu(&LLPanelPeopleMenus::gPeopleContextMenu); mOnlineFriendList->setContextMenu(&LLPanelPeopleMenus::gPeopleContextMenu); + //===Temporary ======================================================================== + LLPanel * social_tab = getChild(FBCTEST_TAB_NAME); mFacebookFriends = social_tab->getChild("facebook_friends"); - social_tab->setVisibleCallback(boost::bind(&Updater::setActive, mFbcTestListUpdater, _2)); + // Note: we use the same updater for both test lists (brute force but OK since it's temporary) + social_tab->setVisibleCallback(boost::bind(&Updater::setActive, mFacebookListUpdater, _2)); //===Test START======================================================================== LLPanel * socialtwo_tab = getChild(FBCTESTTWO_TAB_NAME); + socialtwo_tab->setVisibleCallback(boost::bind(&Updater::setActive, mFacebookListUpdater, _2)); //Create folder view LLPersonModelCommon* base_item = new LLPersonModelCommon(mPersonFolderViewModel); @@ -911,7 +916,7 @@ void LLPanelPeople::updateRecentList() mRecentList->setDirty(); } -void LLPanelPeople::updateFbcTestList() +void LLPanelPeople::updateFacebookList() { if (mTryToConnectToFbc) { @@ -922,8 +927,45 @@ void LLPanelPeople::updateFbcTestList() mTryToConnectToFbc = false; // stop updating - mFbcTestListUpdater->setActive(false); + mFacebookListUpdater->setActive(false); } + + if (LLFacebookConnect::instance().generation() != mFacebookListGeneration) + { + mFacebookListGeneration = LLFacebookConnect::instance().generation(); + LLSD friends = LLFacebookConnect::instance().getContent(); + + mFacebookFriends->clear(); + LLPersonTabModel::tab_type tab_type; + LLAvatarTracker& avatar_tracker = LLAvatarTracker::instance(); + + for (LLSD::map_const_iterator i = friends.beginMap(); i != friends.endMap(); ++i) + { + std::string name = i->second["name"].asString(); + LLUUID agent_id = i->second.has("agent_id") ? i->second["agent_id"].asUUID() : LLUUID(NULL); + + //add to avatar list + mFacebookFriends->addNewItem(agent_id, name, false); + + //FB+SL but not SL friend + if (agent_id.notNull() && !avatar_tracker.isBuddy(agent_id)) + { + tab_type = LLPersonTabModel::FB_SL_NON_SL_FRIEND; + } + //FB only friend + else + { + tab_type = LLPersonTabModel::FB_ONLY_FRIEND; + } + + //Add to person tab model + LLPersonTabModel * person_tab_model = dynamic_cast(mPersonFolderView->getPersonTabModelByIndex(tab_type)); + if (person_tab_model) + { + addParticipantToModel(person_tab_model, agent_id, name); + } + } + } } void LLPanelPeople::updateButtons() diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index 2f74064327..6b5514deaf 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -88,7 +88,7 @@ private: void updateFriendList(); void updateNearbyList(); void updateRecentList(); - void updateFbcTestList(); + void updateFacebookList(); bool isItemsFreeOfFriends(const uuid_vec_t& uuids); @@ -152,6 +152,7 @@ private: LLAvatarList* mRecentList; LLGroupList* mGroupList; LLSocialList* mFacebookFriends; + S32 mFacebookListGeneration; LLNetMap* mMiniMap; std::vector mSavedOriginalFilters; @@ -162,7 +163,7 @@ private: Updater* mFriendListUpdater; Updater* mNearbyListUpdater; Updater* mRecentListUpdater; - Updater* mFbcTestListUpdater; + Updater* mFacebookListUpdater; Updater* mButtonsUpdater; LLMenuButton* mFBCGearButton; LLHandle< LLFloater > mPicker; -- cgit v1.2.3 From dbef09a2bb629cf6001a3963f6899bcac53b7774 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Mon, 13 May 2013 18:29:28 -0700 Subject: ACME-344 : Menu hooked up. Readded the missing completedHeader() methods in responder that I mistakenly took out during the refactor. --- indra/newview/llfacebookconnect.cpp | 28 +++++++++++++++++++--- indra/newview/llfacebookconnect.h | 1 + indra/newview/llpanelpeople.cpp | 8 ------- indra/newview/llpanelpeople.h | 1 - indra/newview/llviewermenu.cpp | 19 +++++++++++++++ indra/newview/llviewermenu.h | 4 ++++ indra/newview/skins/default/xui/en/menu_viewer.xml | 2 +- 7 files changed, 50 insertions(+), 13 deletions(-) diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp index 7f8e3afe89..39aa82dc7a 100644 --- a/indra/newview/llfacebookconnect.cpp +++ b/indra/newview/llfacebookconnect.cpp @@ -31,12 +31,13 @@ #include "llagent.h" #include "llcallingcard.h" // for LLAvatarTracker -//#include "llcommandhandler.h" +#include "llcommandhandler.h" #include "llhttpclient.h" +#include "llurlaction.h" /////////////////////////////////////////////////////////////////////////////// // -/* + class LLFacebookConnectHandler : public LLCommandHandler { public: @@ -59,7 +60,6 @@ public: } }; LLFacebookConnectHandler gFacebookConnectHandler; -*/ /////////////////////////////////////////////////////////////////////////////// // @@ -83,6 +83,15 @@ public: LL_WARNS("FacebookConnect") << "Failed to get a response. reason: " << reason << " status: " << status << LL_ENDL; } } + + void completedHeader(U32 status, const std::string& reason, const LLSD& content) + { + if (status == 302) + { + LLFacebookConnect::instance().openFacebookWeb(content["location"]); + } + } + }; /////////////////////////////////////////////////////////////////////////////// @@ -163,6 +172,14 @@ public: LL_WARNS("FacebookConnect") << "Failed to get a response. reason: " << reason << " status: " << status << LL_ENDL; } } + + void completedHeader(U32 status, const std::string& reason, const LLSD& content) + { + if (status == 302) + { + LLFacebookConnect::instance().openFacebookWeb(content["location"]); + } + } }; @@ -175,6 +192,11 @@ LLFacebookConnect::LLFacebookConnect() { } +void LLFacebookConnect::openFacebookWeb(std::string url) +{ + LLUrlAction::openURLExternal(url); +} + std::string LLFacebookConnect::getFacebookConnectURL(const std::string& route) { //static std::string sFacebookConnectUrl = gAgent.getRegion()->getCapability("FacebookConnect"); diff --git a/indra/newview/llfacebookconnect.h b/indra/newview/llfacebookconnect.h index 691aaa9131..8036c9ce3e 100644 --- a/indra/newview/llfacebookconnect.h +++ b/indra/newview/llfacebookconnect.h @@ -55,6 +55,7 @@ public: bool getConnected() { return mConnectedToFbc; } S32 generation() { return mGeneration; } + void openFacebookWeb(std::string url); private: friend class LLSingleton; diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 542597f98b..ba7015faf5 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -75,7 +75,6 @@ #include "llsociallist.h" #include "llspeakers.h" #include "llfloaterwebcontent.h" -#include "llurlaction.h" #define FRIEND_LIST_UPDATE_TIMEOUT 0.5 #define NEARBY_LIST_UPDATE_INTERVAL 1 @@ -1645,13 +1644,6 @@ bool LLPanelPeople::isAccordionCollapsedByUser(const std::string& name) return isAccordionCollapsedByUser(getChild(name)); } -/* -void LLPanelPeople::openFacebookWeb(std::string url) -{ - LLUrlAction::openURLExternal(url); -} -*/ - void LLPanelPeople::addTestParticipant() { std::string suffix("Aa"); diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index 6b5514deaf..be780bec5e 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -62,7 +62,6 @@ public: static void idle(void * user_data); -// void openFacebookWeb(std::string url); void addTestParticipant(); void addParticipantToModel(LLPersonTabModel * session_model, const LLUUID& agent_id, const std::string& name); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index beca08203f..bb9ad8c606 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -52,6 +52,7 @@ #include "lldaycyclemanager.h" #include "lldebugview.h" #include "llenvmanager.h" +#include "llfacebookconnect.h" #include "llfilepicker.h" #include "llfirstuse.h" #include "llfloaterbuy.h" @@ -5970,6 +5971,21 @@ void handle_report_abuse() LLFloaterReporter::showFromMenu(COMPLAINT_REPORT); } +void handle_facebook_connect() +{ + if (LLFacebookConnect::instance().getConnected()) + { + LLFacebookConnect::instance().disconnectFromFacebook(); + } + else + { + LLFacebookConnect::instance().getConnectionToFacebook(); + } +} + +//bool is_facebook_connected(); + + void handle_buy_currency() { LLBuyCurrencyHTML::openCurrencyFloater(); @@ -8719,4 +8735,7 @@ void initialize_menus() view_listener_t::addMenu(new LLEditableSelected(), "EditableSelected"); view_listener_t::addMenu(new LLEditableSelectedMono(), "EditableSelectedMono"); view_listener_t::addMenu(new LLToggleUIHints(), "ToggleUIHints"); + + // Facebook Connect + commit.add("Facebook.Connect", boost::bind(&handle_facebook_connect)); } diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h index 143420e227..b916d95b7a 100644 --- a/indra/newview/llviewermenu.h +++ b/indra/newview/llviewermenu.h @@ -135,6 +135,10 @@ bool enable_pay_object(); bool enable_buy_object(); bool handle_go_to(); +// Facebook Connect +void handle_facebook_connect(); +//bool is_facebook_connected(); + // Export to XML or Collada void handle_export_selected( void * ); diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 9ce360415c..b34816fb14 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -19,7 +19,7 @@ label="Connect to Facebook..." name="ConnectToFacebook"> + function="Facebook.Connect" /> Date: Tue, 14 May 2013 13:58:41 -0700 Subject: ACME-324 Populate list with FB only friends: Fixed a bug that was causing FB+SL friends to appear within the 'Invite people you know to Second Life' tab. --- indra/newview/llpanelpeople.cpp | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index ba7015faf5..0847878fb4 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -943,27 +943,31 @@ void LLPanelPeople::updateFacebookList() { std::string name = i->second["name"].asString(); LLUUID agent_id = i->second.has("agent_id") ? i->second["agent_id"].asUUID() : LLUUID(NULL); - + bool second_life_buddy = agent_id.notNull() ? avatar_tracker.isBuddy(agent_id) : false; + //add to avatar list mFacebookFriends->addNewItem(agent_id, name, false); - //FB+SL but not SL friend - if (agent_id.notNull() && !avatar_tracker.isBuddy(agent_id)) - { - tab_type = LLPersonTabModel::FB_SL_NON_SL_FRIEND; - } - //FB only friend - else - { - tab_type = LLPersonTabModel::FB_ONLY_FRIEND; - } - - //Add to person tab model - LLPersonTabModel * person_tab_model = dynamic_cast(mPersonFolderView->getPersonTabModelByIndex(tab_type)); - if (person_tab_model) - { - addParticipantToModel(person_tab_model, agent_id, name); - } + if(!second_life_buddy) + { + //FB+SL but not SL friend + if (agent_id.notNull()) + { + tab_type = LLPersonTabModel::FB_SL_NON_SL_FRIEND; + } + //FB only friend + else + { + tab_type = LLPersonTabModel::FB_ONLY_FRIEND; + } + + //Add to person tab model + LLPersonTabModel * person_tab_model = dynamic_cast(mPersonFolderView->getPersonTabModelByIndex(tab_type)); + if (person_tab_model) + { + addParticipantToModel(person_tab_model, agent_id, name); + } + } } } } -- cgit v1.2.3 From 7ba7f6d3c2db80e412e5658a5c6ce8755b75997b Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Fri, 17 May 2013 13:38:52 -0700 Subject: ACME-275 : Fixed! Use Name and Suffix for person name for filtering and search --- indra/newview/llpersonmodelcommon.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llpersonmodelcommon.cpp b/indra/newview/llpersonmodelcommon.cpp index e48eddf05a..73239dcb8d 100644 --- a/indra/newview/llpersonmodelcommon.cpp +++ b/indra/newview/llpersonmodelcommon.cpp @@ -71,7 +71,7 @@ LLPersonModelCommon::~LLPersonModelCommon() BOOL LLPersonModelCommon::renameItem(const std::string& new_name) { mName = new_name; - mSearchableName = new_name; + mSearchableName = new_name + " " + mLabelSuffix; LLStringUtil::toUpper(mSearchableName); return TRUE; } -- cgit v1.2.3 From 53ed2e4ac67088dce27f4c391d3e980e2d63154b Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Mon, 20 May 2013 19:32:55 -0700 Subject: ACME-381 : Implement experimental checkin feature (used to test publish_actions permissions workflow) --- indra/newview/llfacebookconnect.cpp | 43 ++++++++++++++++++++++ indra/newview/llfacebookconnect.h | 1 + indra/newview/llpanelpeople.cpp | 13 +++++++ indra/newview/llpanelpeople.h | 1 + .../newview/skins/default/xui/en/menu_gear_fbc.xml | 7 ++++ 5 files changed, 65 insertions(+) diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp index 39aa82dc7a..eb70cf4d10 100644 --- a/indra/newview/llfacebookconnect.cpp +++ b/indra/newview/llfacebookconnect.cpp @@ -94,6 +94,35 @@ public: }; +/////////////////////////////////////////////////////////////////////////////// +// +class LLFacebookPostResponder : public LLHTTPClient::Responder +{ + LOG_CLASS(LLFacebookPostResponder); +public: + + virtual void completed(U32 status, const std::string& reason, const LLSD& content) + { + if (isGoodStatus(status)) + { + LL_DEBUGS("FacebookConnect") << "Post successful. content: " << content << LL_ENDL; + } + else + { + LL_WARNS("FacebookConnect") << "Failed to get a post response. reason: " << reason << " status: " << status << LL_ENDL; + } + } + + void completedHeader(U32 status, const std::string& reason, const LLSD& content) + { + if (status == 302) + { + LLFacebookConnect::instance().openFacebookWeb(content["location"]); + } + } + +}; + /////////////////////////////////////////////////////////////////////////////// // class LLFacebookDisconnectResponder : public LLHTTPClient::Responder @@ -247,6 +276,20 @@ void LLFacebookConnect::loadFacebookFriends() LLSD(), timeout, follow_redirects); } +void LLFacebookConnect::postCheckinMessage(const std::string& message, const std::string& url) +{ + // Note: We need to improve the API support to provide all the relevant data if possible + // Full set described : http://facebook-python-library.docs-library.appspot.com/facebook-python/library-manual.html + LLSD body; + if (!message.empty()) + body["message"] = message; + if (!url.empty()) + body["link"] = url; + + // Note: we can use that route for different publish action. We should be able to use the same responder. + LLHTTPClient::post(getFacebookConnectURL("/share"), body, new LLFacebookPostResponder()); +} + void LLFacebookConnect::storeContent(const LLSD& content) { mGeneration++; diff --git a/indra/newview/llfacebookconnect.h b/indra/newview/llfacebookconnect.h index 8036c9ce3e..f151dd95c1 100644 --- a/indra/newview/llfacebookconnect.h +++ b/indra/newview/llfacebookconnect.h @@ -46,6 +46,7 @@ public: void getConnectionToFacebook(); void loadFacebookFriends(); + void postCheckinMessage(const std::string& message, const std::string& url); void clearContent(); void storeContent(const LLSD& content); diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 0847878fb4..e0b1c3abba 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -76,6 +76,9 @@ #include "llspeakers.h" #include "llfloaterwebcontent.h" +#include "llagentui.h" +#include "llslurl.h" + #define FRIEND_LIST_UPDATE_TIMEOUT 0.5 #define NEARBY_LIST_UPDATE_INTERVAL 1 #define FBCTEST_LIST_UPDATE_INTERVAL 0.25 @@ -568,6 +571,7 @@ LLPanelPeople::LLPanelPeople() mCommitCallbackRegistrar.add("People.sendFBC", boost::bind(&LLPanelPeople::onFacebookAppSendClicked, this)); mCommitCallbackRegistrar.add("People.testaddFBC", boost::bind(&LLPanelPeople::onFacebookTestAddClicked, this)); mCommitCallbackRegistrar.add("People.testaddFBCFolderView", boost::bind(&LLPanelPeople::addTestParticipant, this)); + mCommitCallbackRegistrar.add("People.testFBCCheckin", boost::bind(&LLPanelPeople::onFacebookCheckinClicked, this)); mCommitCallbackRegistrar.add("People.AddFriend", boost::bind(&LLPanelPeople::onAddFriendButtonClicked, this)); mCommitCallbackRegistrar.add("People.AddFriendWizard", boost::bind(&LLPanelPeople::onAddFriendWizButtonClicked, this)); @@ -1716,6 +1720,15 @@ void LLPanelPeople::onLoginFbcButtonClicked() } } +void LLPanelPeople::onFacebookCheckinClicked() +{ + // Get the local SLURL + LLSLURL slurl; + LLAgentUI::buildSLURL(slurl); + + LLFacebookConnect::instance().postCheckinMessage("Here I am in SL!", slurl.getSLURLString()); +} + void LLPanelPeople::onFacebookAppRequestClicked() { } diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index be780bec5e..f617517392 100644 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -123,6 +123,7 @@ private: void onFacebookAppRequestClicked(); void onFacebookAppSendClicked(); void onFacebookTestAddClicked(); + void onFacebookCheckinClicked(); bool onFriendsViewSortMenuItemCheck(const LLSD& userdata); bool onRecentViewSortMenuItemCheck(const LLSD& userdata); diff --git a/indra/newview/skins/default/xui/en/menu_gear_fbc.xml b/indra/newview/skins/default/xui/en/menu_gear_fbc.xml index d73cee344b..2c341b6ecc 100644 --- a/indra/newview/skins/default/xui/en/menu_gear_fbc.xml +++ b/indra/newview/skins/default/xui/en/menu_gear_fbc.xml @@ -41,4 +41,11 @@ + + + \ No newline at end of file -- cgit v1.2.3 From 4cf16ffdfbb166fbb3fcf1d7950ca1a240c94ca1 Mon Sep 17 00:00:00 2001 From: Cinders Date: Wed, 22 May 2013 21:43:32 -0600 Subject: STORM-1888: Hide Spellchecker Settings floater when Preferences floater is closed Bonus: Correct the immediately preceding auto replace comment --- doc/contributions.txt | 1 + indra/newview/llfloaterpreference.cpp | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/doc/contributions.txt b/doc/contributions.txt index 09c0d01b11..28de94f186 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -301,6 +301,7 @@ Ciaran Laval Cinder Roxley BUG-2326 STORM-1703 + STORM-1888 Clara Young Coaldust Numbers VWR-1095 diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index bbf88060c1..fde98aae9a 100755 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -617,9 +617,12 @@ void LLFloaterPreference::cancel() // hide translation settings floater LLFloaterReg::hideInstance("prefs_translation"); - // hide translation settings floater + // hide autoreplace settings floater LLFloaterReg::hideInstance("prefs_autoreplace"); + // hide spellchecker settings folder + LLFloaterReg::hideInstance("prefs_spellchecker"); + // cancel hardware menu LLFloaterHardwareSettings* hardware_settings = LLFloaterReg::getTypedInstance("prefs_hardware_settings"); if (hardware_settings) -- cgit v1.2.3 From ff291257886badc495d04d59f78cfc9858964702 Mon Sep 17 00:00:00 2001 From: Cho Date: Wed, 29 May 2013 01:31:48 +0100 Subject: updated postCheckinMessage to use new parameters and new route path --- indra/newview/llfacebookconnect.cpp | 20 +++++++++++++------- indra/newview/llfacebookconnect.h | 2 +- indra/newview/llpanelpeople.cpp | 2 +- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp index eb70cf4d10..86da748f0f 100644 --- a/indra/newview/llfacebookconnect.cpp +++ b/indra/newview/llfacebookconnect.cpp @@ -276,18 +276,24 @@ void LLFacebookConnect::loadFacebookFriends() LLSD(), timeout, follow_redirects); } -void LLFacebookConnect::postCheckinMessage(const std::string& message, const std::string& url) +void LLFacebookConnect::postCheckinMessage(const std::string& message, const std::string& link, const std::string& name, const std::string& caption, const std::string& description, const std::string& picture) { - // Note: We need to improve the API support to provide all the relevant data if possible - // Full set described : http://facebook-python-library.docs-library.appspot.com/facebook-python/library-manual.html - LLSD body; + LLSD body; if (!message.empty()) body["message"] = message; - if (!url.empty()) - body["link"] = url; + if (!link.empty()) + body["link"] = link; + if (!name.empty()) + body["name"] = name; + if (!caption.empty()) + body["caption"] = caption; + if (!description.empty()) + body["description"] = description; + if (!picture.empty()) + body["picture"] = picture; // Note: we can use that route for different publish action. We should be able to use the same responder. - LLHTTPClient::post(getFacebookConnectURL("/share"), body, new LLFacebookPostResponder()); + LLHTTPClient::post(getFacebookConnectURL("/share/wall"), body, new LLFacebookPostResponder()); } void LLFacebookConnect::storeContent(const LLSD& content) diff --git a/indra/newview/llfacebookconnect.h b/indra/newview/llfacebookconnect.h index f151dd95c1..8886630222 100644 --- a/indra/newview/llfacebookconnect.h +++ b/indra/newview/llfacebookconnect.h @@ -46,7 +46,7 @@ public: void getConnectionToFacebook(); void loadFacebookFriends(); - void postCheckinMessage(const std::string& message, const std::string& url); + void postCheckinMessage(const std::string& message, const std::string& link, const std::string& name, const std::string& caption, const std::string& description, const std::string& picture); void clearContent(); void storeContent(const LLSD& content); diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index e0b1c3abba..69b6bdf737 100755 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1726,7 +1726,7 @@ void LLPanelPeople::onFacebookCheckinClicked() LLSLURL slurl; LLAgentUI::buildSLURL(slurl); - LLFacebookConnect::instance().postCheckinMessage("Here I am in SL!", slurl.getSLURLString()); + LLFacebookConnect::instance().postCheckinMessage("Here I am in SL!", slurl.getSLURLString(), slurl.getRegion(), "", "", ""); } void LLPanelPeople::onFacebookAppRequestClicked() -- cgit v1.2.3 From e72a9ebf638db2197920115be57493a40d54d2b6 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Wed, 29 May 2013 17:04:42 -0700 Subject: ACME-433 Add a new tab to the bottom of the friends list --- indra/newview/skins/default/xui/en/panel_people.xml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index 9bab2ccb0b..bc6b82e328 100755 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -365,6 +365,23 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M top="0" width="307" /> + + + Date: Thu, 30 May 2013 17:03:54 -0700 Subject: ACME-434 When tab becomes visible, pull suggested friends data. --- indra/newview/llpanelpeople.cpp | 34 ++++++++++++++++++++++++++++++++++ indra/newview/llpanelpeople.h | 2 ++ 2 files changed, 36 insertions(+) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 69b6bdf737..785de6e9c9 100755 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -652,8 +652,11 @@ BOOL LLPanelPeople::postBuild() // updater is active only if panel is visible to user. friends_tab->setVisibleCallback(boost::bind(&Updater::setActive, mFriendListUpdater, _2)); friends_tab->setVisibleCallback(boost::bind(&LLPanelPeople::removePicker, this)); + friends_tab->setVisibleCallback(boost::bind(&Updater::setActive, mFacebookListUpdater, _2)); + mOnlineFriendList = friends_tab->getChild("avatars_online"); mAllFriendList = friends_tab->getChild("avatars_all"); + mSuggestedFriends = friends_tab->getChild("suggested_friends"); mOnlineFriendList->setNoItemsCommentText(getString("no_friends_online")); mOnlineFriendList->setShowIcons("FriendsListShowIcons"); mOnlineFriendList->showPermissions("FriendsListShowPermissions"); @@ -895,6 +898,35 @@ void LLPanelPeople::updateFriendList() //update trash and other buttons according to a selected item updateButtons(); showFriendsAccordionsIfNeeded(); + + updateSuggestedFriendList(); +} + +void LLPanelPeople::updateSuggestedFriendList() +{ + const LLAvatarTracker& av_tracker = LLAvatarTracker::instance(); + uuid_vec_t& suggested_friends = mSuggestedFriends->getIDs(); + suggested_friends.clear(); + + //Add suggested friends + LLSD friends = LLFacebookConnect::instance().getContent(); + for (LLSD::map_const_iterator i = friends.beginMap(); i != friends.endMap(); ++i) + { + std::string name = i->second["name"].asString(); + LLUUID agent_id = i->second.has("agent_id") ? i->second["agent_id"].asUUID() : LLUUID(NULL); + bool second_life_buddy = agent_id.notNull() ? av_tracker.isBuddy(agent_id) : false; + + if(!second_life_buddy) + { + //FB+SL but not SL friend + if (agent_id.notNull()) + { + suggested_friends.push_back(agent_id); + } + } + } + + mSuggestedFriends->setDirty(true, true); } void LLPanelPeople::updateNearbyList() @@ -973,6 +1005,8 @@ void LLPanelPeople::updateFacebookList() } } } + + updateSuggestedFriendList(); } } diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index f617517392..9cfa6b7cd2 100755 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -85,6 +85,7 @@ private: // methods indirectly called by the updaters void updateFriendListHelpText(); void updateFriendList(); + void updateSuggestedFriendList(); void updateNearbyList(); void updateRecentList(); void updateFacebookList(); @@ -148,6 +149,7 @@ private: LLTabContainer* mTabContainer; LLAvatarList* mOnlineFriendList; LLAvatarList* mAllFriendList; + LLAvatarList* mSuggestedFriends; LLAvatarList* mNearbyList; LLAvatarList* mRecentList; LLGroupList* mGroupList; -- cgit v1.2.3 From 7e2a20308ec3a1d3306a5260461b4c1b5a5314a5 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Fri, 31 May 2013 14:55:38 -0700 Subject: ACME-435 Only show the 'People you may want to friend' tab when it is populated. --- indra/newview/llpanelpeople.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 785de6e9c9..22fbbf0c0e 100755 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -830,7 +830,7 @@ void LLPanelPeople::updateFriendListHelpText() // Seems sometimes all_friends can be empty because of issue with Inventory loading (clear cache, slow connection...) // So, lets check all lists to avoid overlapping the text with online list. See EXT-6448. - bool any_friend_exists = mAllFriendList->filterHasMatches() || mOnlineFriendList->filterHasMatches(); + bool any_friend_exists = mAllFriendList->filterHasMatches() || mOnlineFriendList->filterHasMatches() || mSuggestedFriends->filterHasMatches(); no_friends_text->setVisible(!any_friend_exists); if (no_friends_text->getVisible()) { @@ -897,9 +897,8 @@ void LLPanelPeople::updateFriendList() mAllFriendList->setDirty(true, !mAllFriendList->filterHasMatches()); //update trash and other buttons according to a selected item updateButtons(); - showFriendsAccordionsIfNeeded(); - updateSuggestedFriendList(); + showFriendsAccordionsIfNeeded(); } void LLPanelPeople::updateSuggestedFriendList() @@ -926,7 +925,9 @@ void LLPanelPeople::updateSuggestedFriendList() } } - mSuggestedFriends->setDirty(true, true); + //Force a refresh when there aren't any filter matches (prevent displaying content that shouldn't display) + mSuggestedFriends->setDirty(true, !mSuggestedFriends->filterHasMatches()); + showFriendsAccordionsIfNeeded(); } void LLPanelPeople::updateNearbyList() @@ -1007,6 +1008,7 @@ void LLPanelPeople::updateFacebookList() } updateSuggestedFriendList(); + showFriendsAccordionsIfNeeded(); } } @@ -1230,9 +1232,11 @@ void LLPanelPeople::onFilterEdit(const std::string& search_string) mOnlineFriendList->setNameFilter(filter); mAllFriendList->setNameFilter(filter); + mSuggestedFriends->setNameFilter(filter); setAccordionCollapsedByUser("tab_online", false); setAccordionCollapsedByUser("tab_all", false); + setAccordionCollapsedByUser("tab_suggested_friends", false); showFriendsAccordionsIfNeeded(); // restore accordion tabs state _after_ all manipulations @@ -1623,6 +1627,7 @@ void LLPanelPeople::showFriendsAccordionsIfNeeded() // Expand and show accordions if needed, else - hide them showAccordion("tab_online", mOnlineFriendList->filterHasMatches()); showAccordion("tab_all", mAllFriendList->filterHasMatches()); + showAccordion("tab_suggested_friends", mSuggestedFriends->filterHasMatches()); // Rearrange accordions LLAccordionCtrl* accordion = getChild("friends_accordion"); -- cgit v1.2.3 From 9497a70eb2b3d47d1bfd83ff34bb60d8f490644d Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Fri, 31 May 2013 17:53:36 -0700 Subject: ACME-436 Update the list of Suggested Friends when new data arrives --- indra/newview/skins/default/xui/en/panel_people.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index bc6b82e328..c21d2abdd7 100755 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -371,6 +371,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M name="tab_suggested_friends" title="People you may want to friend"> Date: Sat, 1 Jun 2013 01:55:40 +0100 Subject: added LLFacebookConnect::sharePhoto() for ACME-467 --- indra/newview/llfacebookconnect.cpp | 11 ++++++++++- indra/newview/llfacebookconnect.h | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp index 86da748f0f..5013a5cb40 100644 --- a/indra/newview/llfacebookconnect.cpp +++ b/indra/newview/llfacebookconnect.cpp @@ -211,7 +211,6 @@ public: } }; - /////////////////////////////////////////////////////////////////////////////// // LLFacebookConnect::LLFacebookConnect() @@ -296,6 +295,16 @@ void LLFacebookConnect::postCheckinMessage(const std::string& message, const std LLHTTPClient::post(getFacebookConnectURL("/share/wall"), body, new LLFacebookPostResponder()); } +void LLFacebookConnect::sharePhoto(const std::string& image_url, const std::string& caption) +{ + LLSD body; + body["image"] = image_url; + body["caption"] = caption; + + // Note: we can use that route for different publish action. We should be able to use the same responder. + LLHTTPClient::post(getFacebookConnectURL("/share/photo"), body, new LLFacebookPostResponder()); +} + void LLFacebookConnect::storeContent(const LLSD& content) { mGeneration++; diff --git a/indra/newview/llfacebookconnect.h b/indra/newview/llfacebookconnect.h index 8886630222..faa60b0f34 100644 --- a/indra/newview/llfacebookconnect.h +++ b/indra/newview/llfacebookconnect.h @@ -47,6 +47,7 @@ public: void loadFacebookFriends(); void postCheckinMessage(const std::string& message, const std::string& link, const std::string& name, const std::string& caption, const std::string& description, const std::string& picture); + void sharePhoto(const std::string& image_url, const std::string& caption); void clearContent(); void storeContent(const LLSD& content); -- cgit v1.2.3 From 0c0f4edb0026b1695655512ebed3a5508919a9b7 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Fri, 31 May 2013 18:13:01 -0700 Subject: ACME-484 Add a right click menu to the 'Suggested Friends' tab --- indra/newview/llpanelpeople.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 22fbbf0c0e..2a14978a95 100755 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -689,6 +689,7 @@ BOOL LLPanelPeople::postBuild() mRecentList->setContextMenu(&LLPanelPeopleMenus::gPeopleContextMenu); mAllFriendList->setContextMenu(&LLPanelPeopleMenus::gPeopleContextMenu); mOnlineFriendList->setContextMenu(&LLPanelPeopleMenus::gPeopleContextMenu); + mSuggestedFriends->setContextMenu(&LLPanelPeopleMenus::gPeopleContextMenu); //===Temporary ======================================================================== -- cgit v1.2.3 From e17b9de293084da0de0ce12290c9ae1939184337 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Fri, 31 May 2013 19:07:09 -0700 Subject: ACME-453, ACME-455, ACME-456, ACME-465 : Duplicate and tweak the Snapshot Profile UI to create the Snapshot Facebook UI --- indra/newview/CMakeLists.txt | 1 + indra/newview/llpanelsnapshotfacebook.cpp | 101 +++++++++++ indra/newview/llpanelsnapshotoptions.cpp | 7 + indra/newview/skins/default/textures/textures.xml | 1 + .../default/textures/toolbar_icons/facebook.png | Bin 0 -> 1180 bytes .../skins/default/xui/en/floater_snapshot.xml | 24 ++- .../default/xui/en/panel_snapshot_facebook.xml | 199 +++++++++++++++++++++ .../default/xui/en/panel_snapshot_options.xml | 23 ++- 8 files changed, 351 insertions(+), 5 deletions(-) create mode 100755 indra/newview/llpanelsnapshotfacebook.cpp create mode 100755 indra/newview/skins/default/textures/toolbar_icons/facebook.png create mode 100755 indra/newview/skins/default/xui/en/panel_snapshot_facebook.xml diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 477600ca01..f01c2f714d 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -434,6 +434,7 @@ set(viewer_SOURCE_FILES llpanelprimmediacontrols.cpp llpanelprofile.cpp llpanelsnapshot.cpp + llpanelsnapshotfacebook.cpp llpanelsnapshotinventory.cpp llpanelsnapshotlocal.cpp llpanelsnapshotoptions.cpp diff --git a/indra/newview/llpanelsnapshotfacebook.cpp b/indra/newview/llpanelsnapshotfacebook.cpp new file mode 100755 index 0000000000..50c5b62fe7 --- /dev/null +++ b/indra/newview/llpanelsnapshotfacebook.cpp @@ -0,0 +1,101 @@ +/** + * @file llpanelsnapshotfacebook.cpp + * @brief Posts a snapshot to the resident Facebook account. + * + * $LicenseInfo:firstyear=2013&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2013, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +// libs +#include "llcombobox.h" +#include "llfloaterreg.h" +#include "llpanel.h" +#include "llspinctrl.h" + +// newview +#include "llfloatersnapshot.h" +#include "llpanelsnapshot.h" +#include "llsidetraypanelcontainer.h" +#include "llwebprofile.h" + +/** + * Posts a snapshot to the resident Facebook account. + */ +class LLPanelSnapshotFacebook +: public LLPanelSnapshot +{ + LOG_CLASS(LLPanelSnapshotFacebook); + +public: + LLPanelSnapshotFacebook(); + + /*virtual*/ BOOL postBuild(); + /*virtual*/ void onOpen(const LLSD& key); + +private: + /*virtual*/ std::string getWidthSpinnerName() const { return "facebook_snapshot_width"; } + /*virtual*/ std::string getHeightSpinnerName() const { return "facebook_snapshot_height"; } + /*virtual*/ std::string getAspectRatioCBName() const { return "facebook_keep_aspect_check"; } + /*virtual*/ std::string getImageSizeComboName() const { return "facebook_size_combo"; } + /*virtual*/ std::string getImageSizePanelName() const { return "facebook_image_size_lp"; } + /*virtual*/ LLFloaterSnapshot::ESnapshotFormat getImageFormat() const { return LLFloaterSnapshot::SNAPSHOT_FORMAT_PNG; } + /*virtual*/ void updateControls(const LLSD& info); + + void onSend(); +}; + +static LLRegisterPanelClassWrapper panel_class("llpanelsnapshotfacebook"); + +LLPanelSnapshotFacebook::LLPanelSnapshotFacebook() +{ + mCommitCallbackRegistrar.add("PostToFacebook.Send", boost::bind(&LLPanelSnapshotFacebook::onSend, this)); + mCommitCallbackRegistrar.add("PostToFacebook.Cancel", boost::bind(&LLPanelSnapshotFacebook::cancel, this)); +} + +// virtual +BOOL LLPanelSnapshotFacebook::postBuild() +{ + return LLPanelSnapshot::postBuild(); +} + +// virtual +void LLPanelSnapshotFacebook::onOpen(const LLSD& key) +{ + LLPanelSnapshot::onOpen(key); +} + +// virtual +void LLPanelSnapshotFacebook::updateControls(const LLSD& info) +{ + const bool have_snapshot = info.has("have-snapshot") ? info["have-snapshot"].asBoolean() : true; + getChild("post_btn")->setEnabled(have_snapshot); +} + +void LLPanelSnapshotFacebook::onSend() +{ + std::string caption = getChild("caption")->getValue().asString(); + bool add_location = getChild("add_location_cb")->getValue().asBoolean(); + + LLWebProfile::uploadImage(LLFloaterSnapshot::getImageData(), caption, add_location); + LLFloaterSnapshot::postSave(); +} diff --git a/indra/newview/llpanelsnapshotoptions.cpp b/indra/newview/llpanelsnapshotoptions.cpp index 554fabe5b3..14953f3cf9 100755 --- a/indra/newview/llpanelsnapshotoptions.cpp +++ b/indra/newview/llpanelsnapshotoptions.cpp @@ -51,6 +51,7 @@ private: void updateUploadCost(); void openPanel(const std::string& panel_name); void onSaveToProfile(); + void onSaveToFacebook(); void onSaveToEmail(); void onSaveToInventory(); void onSaveToComputer(); @@ -60,6 +61,7 @@ static LLRegisterPanelClassWrapper panel_class("llpanels LLPanelSnapshotOptions::LLPanelSnapshotOptions() { + mCommitCallbackRegistrar.add("Snapshot.SaveToFacebook", boost::bind(&LLPanelSnapshotOptions::onSaveToFacebook, this)); mCommitCallbackRegistrar.add("Snapshot.SaveToProfile", boost::bind(&LLPanelSnapshotOptions::onSaveToProfile, this)); mCommitCallbackRegistrar.add("Snapshot.SaveToEmail", boost::bind(&LLPanelSnapshotOptions::onSaveToEmail, this)); mCommitCallbackRegistrar.add("Snapshot.SaveToInventory", boost::bind(&LLPanelSnapshotOptions::onSaveToInventory, this)); @@ -99,6 +101,11 @@ void LLPanelSnapshotOptions::openPanel(const std::string& panel_name) LLFloaterSnapshot::postPanelSwitch(); } +void LLPanelSnapshotOptions::onSaveToFacebook() +{ + openPanel("panel_snapshot_facebook"); +} + void LLPanelSnapshotOptions::onSaveToProfile() { openPanel("panel_snapshot_profile"); diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 18146943a5..a0b46bab0b 100755 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -567,6 +567,7 @@ with the same filename but different name + diff --git a/indra/newview/skins/default/textures/toolbar_icons/facebook.png b/indra/newview/skins/default/textures/toolbar_icons/facebook.png new file mode 100755 index 0000000000..32fe2bf8ac Binary files /dev/null and b/indra/newview/skins/default/textures/toolbar_icons/facebook.png differ diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml index 49d64767cc..e8e7fb77c1 100755 --- a/indra/newview/skins/default/xui/en/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml @@ -21,7 +21,11 @@ Sending Email + name="facebook_progress_str"> + Posting to Facebook + + Posting + name="facebook_succeeded_str"> + Image uploaded + + Image uploaded + name="facebook_failed_str"> + Failed to upload image to your Facebook timeline. + + Failed to upload image to your Profile Feed. + + + + + Post to my Facebook timeline + + + + + + + + + + + + + + + + + + Caption: + + + + + + + + + diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_options.xml b/indra/newview/skins/default/xui/en/panel_snapshot_options.xml index d2f29ade44..8cf5bfb426 100755 --- a/indra/newview/skins/default/xui/en/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/en/panel_snapshot_options.xml @@ -5,6 +5,25 @@ layout="topleft" name="panel_snapshot_options" width="490"> + -- cgit v1.2.3 From 6bf2dad1cc8df2769a0833786bc16eea96649d6d Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Tue, 4 Jun 2013 14:05:13 -0700 Subject: ACME-484: Right-click menu only has 'Add Friend' and 'View Profile' options. Also multi-select is disabled. --- indra/newview/llpanelpeople.cpp | 2 +- indra/newview/llpanelpeoplemenus.cpp | 33 ++++++++++++++++++++++ indra/newview/llpanelpeoplemenus.h | 13 +++++++++ .../newview/skins/default/xui/en/panel_people.xml | 1 - 4 files changed, 47 insertions(+), 2 deletions(-) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 2a14978a95..5bc645bcfd 100755 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -689,7 +689,7 @@ BOOL LLPanelPeople::postBuild() mRecentList->setContextMenu(&LLPanelPeopleMenus::gPeopleContextMenu); mAllFriendList->setContextMenu(&LLPanelPeopleMenus::gPeopleContextMenu); mOnlineFriendList->setContextMenu(&LLPanelPeopleMenus::gPeopleContextMenu); - mSuggestedFriends->setContextMenu(&LLPanelPeopleMenus::gPeopleContextMenu); + mSuggestedFriends->setContextMenu(&LLPanelPeopleMenus::gSuggestedFriendsContextMenu); //===Temporary ======================================================================== diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp index 49f7361c4a..313056f06a 100755 --- a/indra/newview/llpanelpeoplemenus.cpp +++ b/indra/newview/llpanelpeoplemenus.cpp @@ -47,6 +47,7 @@ namespace LLPanelPeopleMenus PeopleContextMenu gPeopleContextMenu; NearbyPeopleContextMenu gNearbyPeopleContextMenu; +SuggestedFriendsContextMenu gSuggestedFriendsContextMenu; //== PeopleContextMenu =============================================================== @@ -301,4 +302,36 @@ void NearbyPeopleContextMenu::buildContextMenu(class LLMenuGL& menu, U32 flags) hide_context_entries(menu, items, disabled_items); } +//== SuggestedFriendsContextMenu =============================================================== + +LLContextMenu* SuggestedFriendsContextMenu::createMenu() +{ + // set up the callbacks for all of the avatar menu items + LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; + LLUICtrl::EnableCallbackRegistry::ScopedRegistrar enable_registrar; + LLContextMenu* menu; + + // Set up for one person selected menu + const LLUUID& id = mUUIDs.front(); + registrar.add("Avatar.Profile", boost::bind(&LLAvatarActions::showProfile, id)); + registrar.add("Avatar.AddFriend", boost::bind(&LLAvatarActions::requestFriendshipDialog, id)); + + // create the context menu from the XUI + menu = createFromFile("menu_people_nearby.xml"); + buildContextMenu(*menu, 0x0); + + return menu; +} + +void SuggestedFriendsContextMenu::buildContextMenu(class LLMenuGL& menu, U32 flags) +{ + menuentry_vec_t items; + menuentry_vec_t disabled_items; + + items.push_back(std::string("view_profile")); + items.push_back(std::string("add_friend")); + + hide_context_entries(menu, items, disabled_items); +} + } // namespace LLPanelPeopleMenus diff --git a/indra/newview/llpanelpeoplemenus.h b/indra/newview/llpanelpeoplemenus.h index 0a1dcef303..5367eca0d3 100755 --- a/indra/newview/llpanelpeoplemenus.h +++ b/indra/newview/llpanelpeoplemenus.h @@ -58,8 +58,21 @@ protected: /*virtual*/ void buildContextMenu(class LLMenuGL& menu, U32 flags); }; +/** + * Menu used in the suggested friends list. + */ +class SuggestedFriendsContextMenu : public PeopleContextMenu +{ +public: + /*virtual*/ LLContextMenu * createMenu(); + +protected: + /*virtual*/ void buildContextMenu(class LLMenuGL& menu, U32 flags); +}; + extern PeopleContextMenu gPeopleContextMenu; extern NearbyPeopleContextMenu gNearbyPeopleContextMenu; +extern SuggestedFriendsContextMenu gSuggestedFriendsContextMenu; } // namespace LLPanelPeopleMenus diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index c21d2abdd7..451095c7d8 100755 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -377,7 +377,6 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M height="173" layout="topleft" left="0" - multi_select="true" name="suggested_friends" show_permissions_granted="true" top="0" -- cgit v1.2.3 From f3a72799b01ad2449ae24e86169b994c696c1b4a Mon Sep 17 00:00:00 2001 From: Cho Date: Wed, 5 Jun 2013 01:03:33 +0100 Subject: added call to sharePhoto() with placeholder image for ACME-467 --- indra/newview/llpanelsnapshotfacebook.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/indra/newview/llpanelsnapshotfacebook.cpp b/indra/newview/llpanelsnapshotfacebook.cpp index 50c5b62fe7..200c64f16b 100755 --- a/indra/newview/llpanelsnapshotfacebook.cpp +++ b/indra/newview/llpanelsnapshotfacebook.cpp @@ -38,6 +38,8 @@ #include "llsidetraypanelcontainer.h" #include "llwebprofile.h" +#include "llfacebookconnect.h" + /** * Posts a snapshot to the resident Facebook account. */ @@ -98,4 +100,7 @@ void LLPanelSnapshotFacebook::onSend() LLWebProfile::uploadImage(LLFloaterSnapshot::getImageData(), caption, add_location); LLFloaterSnapshot::postSave(); + + // test with a placeholder image, until we can figure out a way to grab the uploaded image url + LLFacebookConnect::instance().sharePhoto("http://fc02.deviantart.net/fs43/i/2009/125/a/9/Future_of_Frog_by_axcho.jpg", caption); } -- cgit v1.2.3 From abcb3e85628712da4d61fda6e68bb86a29e1f965 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Tue, 4 Jun 2013 18:39:41 -0700 Subject: ACME-471: Once connected to facebook, a user can use the 'Check in to Facebook' button under the 'Me' menu to make a check in post to Facebook --- indra/newview/llfacebookconnect.cpp | 18 +++++++++++++++++ indra/newview/llfacebookconnect.h | 1 + indra/newview/llviewermenu.cpp | 23 ++++++++++++++++++++++ indra/newview/llviewermenu.h | 4 +++- indra/newview/skins/default/xui/en/menu_viewer.xml | 6 ++++++ 5 files changed, 51 insertions(+), 1 deletion(-) diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp index 5013a5cb40..668ba04406 100644 --- a/indra/newview/llfacebookconnect.cpp +++ b/indra/newview/llfacebookconnect.cpp @@ -275,6 +275,24 @@ void LLFacebookConnect::loadFacebookFriends() LLSD(), timeout, follow_redirects); } +void LLFacebookConnect::postCheckin(const std::string& location, const std::string& name, const std::string& description, const std::string& image, const std::string& message) +{ + LLSD body; + if (!location.empty()) + body["location"] = location; + if (!name.empty()) + body["name"] = name; + if (!description.empty()) + body["description"] = description; + if (!image.empty()) + body["image"] = image; + if (!message.empty()) + body["message"] = message; + + // Note: we can use that route for different publish action. We should be able to use the same responder. + LLHTTPClient::post(getFacebookConnectURL("/share/checkin"), body, new LLFacebookPostResponder()); +} + void LLFacebookConnect::postCheckinMessage(const std::string& message, const std::string& link, const std::string& name, const std::string& caption, const std::string& description, const std::string& picture) { LLSD body; diff --git a/indra/newview/llfacebookconnect.h b/indra/newview/llfacebookconnect.h index faa60b0f34..2dba182267 100644 --- a/indra/newview/llfacebookconnect.h +++ b/indra/newview/llfacebookconnect.h @@ -46,6 +46,7 @@ public: void getConnectionToFacebook(); void loadFacebookFriends(); + void postCheckin(const std::string& location, const std::string& name, const std::string& description, const std::string& picture, const std::string& message); void postCheckinMessage(const std::string& message, const std::string& link, const std::string& name, const std::string& caption, const std::string& description, const std::string& picture); void sharePhoto(const std::string& image_url, const std::string& caption); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index bb9ad8c606..eb100a3f9b 100755 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -45,6 +45,7 @@ #include "llagent.h" #include "llagentaccess.h" #include "llagentcamera.h" +#include "llagentui.h" #include "llagentwearables.h" #include "llagentpilot.h" #include "llcompilequeue.h" @@ -5983,6 +5984,26 @@ void handle_facebook_connect() } } +void handle_facebook_checkin() +{ + + // Get the location SLURL + LLSLURL slurl; + LLAgentUI::buildSLURL(slurl); + std::string slurl_string = slurl.getSLURLString(); + + //Get the location name + LLViewerParcelMgr * parcel = LLViewerParcelMgr::getInstance(); + std::string parcel_string = parcel->getAgentParcelName(); + + //Get the location description + LLVector3 agent_pos = gAgent.getPositionAgent(); + std::string description; + LLAgentUI::buildLocationString(description, LLAgentUI::LOCATION_FORMAT_FULL, agent_pos); + + LLFacebookConnect::instance().postCheckin(slurl_string, parcel_string, description, "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDL4jdC_vCh0ow-QCXZjN-WNojEXWiz0APEa6Qhpl8cxawjkoC7w", ""); +} + //bool is_facebook_connected(); @@ -8738,4 +8759,6 @@ void initialize_menus() // Facebook Connect commit.add("Facebook.Connect", boost::bind(&handle_facebook_connect)); + // Facebook Checkin + commit.add("Facebook.Checkin", boost::bind(&handle_facebook_checkin)); } diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h index b916d95b7a..9c3f13f843 100755 --- a/indra/newview/llviewermenu.h +++ b/indra/newview/llviewermenu.h @@ -137,7 +137,9 @@ bool handle_go_to(); // Facebook Connect void handle_facebook_connect(); -//bool is_facebook_connected(); + +//Facebook Checkin +void handle_facebook_checkin(); // Export to XML or Collada void handle_export_selected( void * ); diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index b34816fb14..5061842c7f 100755 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -21,6 +21,12 @@ + + + Date: Wed, 5 Jun 2013 00:32:15 -0700 Subject: ACME-471: In last commit was not using the correct name and location. Now using the proper name and location. --- indra/newview/llviewermenu.cpp | 38 +++++++++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index eb100a3f9b..bd5a37876f 100755 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -5992,16 +5992,40 @@ void handle_facebook_checkin() LLAgentUI::buildSLURL(slurl); std::string slurl_string = slurl.getSLURLString(); - //Get the location name + std::string region_name = gAgent.getRegion()->getName(); + + //Get the parcel name LLViewerParcelMgr * parcel = LLViewerParcelMgr::getInstance(); - std::string parcel_string = parcel->getAgentParcelName(); + std::string parcel_title = parcel->getAgentParcelName(); + + //Create the location + LLVector3 agent_pos_region = gAgent.getPositionAgent(); + S32 pos_x = S32(agent_pos_region.mV[VX]); + S32 pos_y = S32(agent_pos_region.mV[VY]); + S32 pos_z = S32(agent_pos_region.mV[VZ]); + + // Round the numbers based on the velocity + F32 velocity_mag_sq = gAgent.getVelocity().magVecSquared(); + + const F32 FLY_CUTOFF = 6.f; // meters/sec + const F32 FLY_CUTOFF_SQ = FLY_CUTOFF * FLY_CUTOFF; + const F32 WALK_CUTOFF = 1.5f; // meters/sec + const F32 WALK_CUTOFF_SQ = WALK_CUTOFF * WALK_CUTOFF; + + if (velocity_mag_sq > FLY_CUTOFF_SQ) + { + pos_x -= pos_x % 4; + pos_y -= pos_y % 4; + } + else if (velocity_mag_sq > WALK_CUTOFF_SQ) + { + pos_x -= pos_x % 2; + pos_y -= pos_y % 2; + } - //Get the location description - LLVector3 agent_pos = gAgent.getPositionAgent(); - std::string description; - LLAgentUI::buildLocationString(description, LLAgentUI::LOCATION_FORMAT_FULL, agent_pos); + std::string description = llformat("%s (%d, %d, %d)", parcel_title.c_str(), pos_x, pos_y, pos_z); - LLFacebookConnect::instance().postCheckin(slurl_string, parcel_string, description, "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDL4jdC_vCh0ow-QCXZjN-WNojEXWiz0APEa6Qhpl8cxawjkoC7w", ""); + LLFacebookConnect::instance().postCheckin(slurl_string, region_name, description, "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDL4jdC_vCh0ow-QCXZjN-WNojEXWiz0APEa6Qhpl8cxawjkoC7w", ""); } //bool is_facebook_connected(); -- cgit v1.2.3 From ec52db8d0c4099dd5e3b476f7b44a4ebda7cb676 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Wed, 5 Jun 2013 17:32:10 -0400 Subject: STORM-1838 Slowly reappling changes to work with CHUI --- indra/newview/llavataractions.cpp | 1 + indra/newview/llconversationloglist.cpp | 1 + indra/newview/llconversationmodel.cpp | 1 + indra/newview/llfloaterimcontainer.cpp | 4 ++++ indra/newview/llpanelpeoplemenus.cpp | 13 ++++++++++++- indra/newview/llpanelpeoplemenus.h | 1 + indra/newview/skins/default/xui/en/menu_conversation.xml | 9 +++++++++ indra/newview/skins/default/xui/en/menu_people_nearby.xml | 9 +++++++++ 8 files changed, 38 insertions(+), 1 deletion(-) diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index 45992b8c83..285e70c8ea 100755 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -443,6 +443,7 @@ void LLAvatarActions::teleport_request_callback(const LLSD& notification, const // static void LLAvatarActions::teleportRequest(const LLUUID& id) { +llwarns << "DBG " << llendl; std::string name; gCacheName->getFullName(id, name); gCacheName->cleanFullName(name); diff --git a/indra/newview/llconversationloglist.cpp b/indra/newview/llconversationloglist.cpp index 5ab108b39f..cf9c9b3415 100644 --- a/indra/newview/llconversationloglist.cpp +++ b/indra/newview/llconversationloglist.cpp @@ -311,6 +311,7 @@ void LLConversationLogList::onCustomAction(const LLSD& userdata) } else if ("offer_teleport" == command_name) { +llwarns << "DBG " << llendl; LLAvatarActions::offerTeleport(selected_conversation_participant_id); } else if("add_friend" == command_name) diff --git a/indra/newview/llconversationmodel.cpp b/indra/newview/llconversationmodel.cpp index c74ce24872..b0aaa21ec9 100644 --- a/indra/newview/llconversationmodel.cpp +++ b/indra/newview/llconversationmodel.cpp @@ -132,6 +132,7 @@ void LLConversationItem::buildParticipantMenuOptions(menuentry_vec_t& items, U32 items.push_back(std::string("view_profile")); items.push_back(std::string("im")); items.push_back(std::string("offer_teleport")); + items.push_back(std::string("request_teleport")); items.push_back(std::string("voice_call")); items.push_back(std::string("chat_history")); items.push_back(std::string("separator_chat_history")); diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp index 5e0cd8ef78..65155041f0 100644 --- a/indra/newview/llfloaterimcontainer.cpp +++ b/indra/newview/llfloaterimcontainer.cpp @@ -1007,6 +1007,10 @@ void LLFloaterIMContainer::doToParticipants(const std::string& command, uuid_vec { LLAvatarActions::offerTeleport(selectedIDS); } + else if ("request_teleport" == command) + { + LLAvatarActions::teleportRequest(selectedIDS.front()); + } else if ("voice_call" == command) { LLAvatarActions::startCall(userID); diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp index a68772a35d..ddc92f439b 100644 --- a/indra/newview/llpanelpeoplemenus.cpp +++ b/indra/newview/llpanelpeoplemenus.cpp @@ -74,7 +74,7 @@ LLContextMenu* PeopleContextMenu::createMenu() registrar.add("Avatar.Pay", boost::bind(&LLAvatarActions::pay, id)); registrar.add("Avatar.BlockUnblock", boost::bind(&LLAvatarActions::toggleBlock, id)); registrar.add("Avatar.InviteToGroup", boost::bind(&LLAvatarActions::inviteToGroup, id)); - registrar.add("Avatar.TeleportRequest", boost::bind(&LLAvatarActions::teleportRequest, id)); + registrar.add("Avatar.TeleportRequest", boost::bind(&PeopleContextMenu::requestTeleport, this)); registrar.add("Avatar.Calllog", boost::bind(&LLAvatarActions::viewChatHistory, id)); enable_registrar.add("Avatar.EnableItem", boost::bind(&PeopleContextMenu::enableContextMenuItem, this, _2)); @@ -126,6 +126,7 @@ void PeopleContextMenu::buildContextMenu(class LLMenuGL& menu, U32 flags) items.push_back(std::string("view_profile")); items.push_back(std::string("im")); items.push_back(std::string("offer_teleport")); + items.push_back(std::string("request_teleport")); items.push_back(std::string("voice_call")); items.push_back(std::string("chat_history")); items.push_back(std::string("separator_chat_history")); @@ -256,10 +257,19 @@ bool PeopleContextMenu::checkContextMenuItem(const LLSD& userdata) return false; } +void PeopleContextMenu::requestTeleport() +{ + // boost::bind cannot recognize overloaded method LLAvatarActions::teleportRequest(), + // so we have to use a wrapper. +llwarns << "DBG " << llendl; + LLAvatarActions::teleportRequest(mUUIDs.front()); +} + void PeopleContextMenu::offerTeleport() { // boost::bind cannot recognize overloaded method LLAvatarActions::offerTeleport(), // so we have to use a wrapper. +llwarns << "DBG " << llendl; LLAvatarActions::offerTeleport(mUUIDs); } @@ -285,6 +295,7 @@ void NearbyPeopleContextMenu::buildContextMenu(class LLMenuGL& menu, U32 flags) items.push_back(std::string("view_profile")); items.push_back(std::string("im")); items.push_back(std::string("offer_teleport")); + items.push_back(std::string("request_teleport")); items.push_back(std::string("voice_call")); items.push_back(std::string("chat_history")); items.push_back(std::string("separator_chat_history")); diff --git a/indra/newview/llpanelpeoplemenus.h b/indra/newview/llpanelpeoplemenus.h index 0a1dcef303..abf5fa05e4 100644 --- a/indra/newview/llpanelpeoplemenus.h +++ b/indra/newview/llpanelpeoplemenus.h @@ -47,6 +47,7 @@ private: bool enableContextMenuItem(const LLSD& userdata); bool checkContextMenuItem(const LLSD& userdata); void offerTeleport(); + void requestTeleport(); }; /** diff --git a/indra/newview/skins/default/xui/en/menu_conversation.xml b/indra/newview/skins/default/xui/en/menu_conversation.xml index 5a13ef0a59..c2c15023c5 100644 --- a/indra/newview/skins/default/xui/en/menu_conversation.xml +++ b/indra/newview/skins/default/xui/en/menu_conversation.xml @@ -46,6 +46,15 @@ + + + + + + + + + + Date: Wed, 5 Jun 2013 14:45:11 -0700 Subject: ACME-471: Code cleanup, instead of duplicating code from LLAgentUI::buildLocationString, now calling LLAgentUI::buildLocationString with a flag to perform a similar operation. --- indra/newview/llagentui.cpp | 10 ++++++++++ indra/newview/llagentui.h | 1 + indra/newview/llviewermenu.cpp | 33 ++------------------------------- 3 files changed, 13 insertions(+), 31 deletions(-) diff --git a/indra/newview/llagentui.cpp b/indra/newview/llagentui.cpp index b9ec304b7e..125f911e0d 100755 --- a/indra/newview/llagentui.cpp +++ b/indra/newview/llagentui.cpp @@ -130,6 +130,11 @@ BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const sim_access_string.empty() ? "" : " - ", sim_access_string.c_str()); break; + case LOCATION_FORMAT_NORMAL_COORDS: + buffer = llformat("%s (%d, %d, %d)", + region_name.c_str(), + pos_x, pos_y, pos_z); + break; } } else @@ -164,6 +169,11 @@ BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const sim_access_string.empty() ? "" : " - ", sim_access_string.c_str()); break; + case LOCATION_FORMAT_NORMAL_COORDS: + buffer = llformat("%s (%d, %d, %d)", + parcel_name.c_str(), + pos_x, pos_y, pos_z); + break; } } str = buffer; diff --git a/indra/newview/llagentui.h b/indra/newview/llagentui.h index dda5dc1fd1..bb48dad14c 100755 --- a/indra/newview/llagentui.h +++ b/indra/newview/llagentui.h @@ -35,6 +35,7 @@ public: enum ELocationFormat { LOCATION_FORMAT_NORMAL, // Parcel + LOCATION_FORMAT_NORMAL_COORDS, // Parcel (x, y, z) LOCATION_FORMAT_LANDMARK, // Parcel, Region LOCATION_FORMAT_NO_MATURITY, // Parcel, Region (x, y, z) LOCATION_FORMAT_NO_COORDS, // Parcel, Region - Maturity diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index bd5a37876f..471db8d8fc 100755 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -5993,37 +5993,8 @@ void handle_facebook_checkin() std::string slurl_string = slurl.getSLURLString(); std::string region_name = gAgent.getRegion()->getName(); - - //Get the parcel name - LLViewerParcelMgr * parcel = LLViewerParcelMgr::getInstance(); - std::string parcel_title = parcel->getAgentParcelName(); - - //Create the location - LLVector3 agent_pos_region = gAgent.getPositionAgent(); - S32 pos_x = S32(agent_pos_region.mV[VX]); - S32 pos_y = S32(agent_pos_region.mV[VY]); - S32 pos_z = S32(agent_pos_region.mV[VZ]); - - // Round the numbers based on the velocity - F32 velocity_mag_sq = gAgent.getVelocity().magVecSquared(); - - const F32 FLY_CUTOFF = 6.f; // meters/sec - const F32 FLY_CUTOFF_SQ = FLY_CUTOFF * FLY_CUTOFF; - const F32 WALK_CUTOFF = 1.5f; // meters/sec - const F32 WALK_CUTOFF_SQ = WALK_CUTOFF * WALK_CUTOFF; - - if (velocity_mag_sq > FLY_CUTOFF_SQ) - { - pos_x -= pos_x % 4; - pos_y -= pos_y % 4; - } - else if (velocity_mag_sq > WALK_CUTOFF_SQ) - { - pos_x -= pos_x % 2; - pos_y -= pos_y % 2; - } - - std::string description = llformat("%s (%d, %d, %d)", parcel_title.c_str(), pos_x, pos_y, pos_z); + std::string description; + LLAgentUI::buildLocationString(description, LLAgentUI::LOCATION_FORMAT_NORMAL_COORDS, gAgent.getPositionAgent()); LLFacebookConnect::instance().postCheckin(slurl_string, region_name, description, "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDL4jdC_vCh0ow-QCXZjN-WNojEXWiz0APEa6Qhpl8cxawjkoC7w", ""); } -- cgit v1.2.3 From 64f4246f17b8270870fae84eca26e18a567a2174 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Wed, 5 Jun 2013 14:54:10 -0700 Subject: ACME-471: Code cleanup, just moving some code. --- indra/newview/llagentui.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/indra/newview/llagentui.cpp b/indra/newview/llagentui.cpp index 125f911e0d..3410a37890 100755 --- a/indra/newview/llagentui.cpp +++ b/indra/newview/llagentui.cpp @@ -112,6 +112,11 @@ BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const case LOCATION_FORMAT_NORMAL: buffer = llformat("%s", region_name.c_str()); break; + case LOCATION_FORMAT_NORMAL_COORDS: + buffer = llformat("%s (%d, %d, %d)", + region_name.c_str(), + pos_x, pos_y, pos_z); + break; case LOCATION_FORMAT_NO_COORDS: buffer = llformat("%s%s%s", region_name.c_str(), @@ -130,11 +135,6 @@ BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const sim_access_string.empty() ? "" : " - ", sim_access_string.c_str()); break; - case LOCATION_FORMAT_NORMAL_COORDS: - buffer = llformat("%s (%d, %d, %d)", - region_name.c_str(), - pos_x, pos_y, pos_z); - break; } } else @@ -148,6 +148,11 @@ BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const case LOCATION_FORMAT_NORMAL: buffer = llformat("%s, %s", parcel_name.c_str(), region_name.c_str()); break; + case LOCATION_FORMAT_NORMAL_COORDS: + buffer = llformat("%s (%d, %d, %d)", + parcel_name.c_str(), + pos_x, pos_y, pos_z); + break; case LOCATION_FORMAT_NO_MATURITY: buffer = llformat("%s, %s (%d, %d, %d)", parcel_name.c_str(), @@ -169,11 +174,6 @@ BOOL LLAgentUI::buildLocationString(std::string& str, ELocationFormat fmt,const sim_access_string.empty() ? "" : " - ", sim_access_string.c_str()); break; - case LOCATION_FORMAT_NORMAL_COORDS: - buffer = llformat("%s (%d, %d, %d)", - parcel_name.c_str(), - pos_x, pos_y, pos_z); - break; } } str = buffer; -- cgit v1.2.3 From faf99f2e1c88f281836c555d9fa6886d45f13751 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Wed, 5 Jun 2013 15:43:31 -0700 Subject: ACME-485 : Temporary facebook.png icon for the snapshot panel --- .../skins/default/textures/toolbar_icons/facebook.png | Bin 1180 -> 2974 bytes 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 indra/newview/skins/default/textures/toolbar_icons/facebook.png diff --git a/indra/newview/skins/default/textures/toolbar_icons/facebook.png b/indra/newview/skins/default/textures/toolbar_icons/facebook.png old mode 100755 new mode 100644 index 32fe2bf8ac..b960b834dc Binary files a/indra/newview/skins/default/textures/toolbar_icons/facebook.png and b/indra/newview/skins/default/textures/toolbar_icons/facebook.png differ -- cgit v1.2.3 From 4d162e1ec2cd716f40666056bb9e2710958e3360 Mon Sep 17 00:00:00 2001 From: Cho Date: Wed, 5 Jun 2013 23:52:34 +0100 Subject: added callback to post photo with actual image url --- indra/newview/llpanelsnapshotfacebook.cpp | 13 +++++++-- indra/newview/llwebprofile.cpp | 48 ++++++++++++++++++++++++------- indra/newview/llwebprofile.h | 5 ++-- 3 files changed, 52 insertions(+), 14 deletions(-) diff --git a/indra/newview/llpanelsnapshotfacebook.cpp b/indra/newview/llpanelsnapshotfacebook.cpp index 200c64f16b..954941274a 100755 --- a/indra/newview/llpanelsnapshotfacebook.cpp +++ b/indra/newview/llpanelsnapshotfacebook.cpp @@ -64,6 +64,7 @@ private: /*virtual*/ void updateControls(const LLSD& info); void onSend(); + void onImageUploaded(const std::string& image_url, const std::string& caption); }; static LLRegisterPanelClassWrapper panel_class("llpanelsnapshotfacebook"); @@ -98,9 +99,17 @@ void LLPanelSnapshotFacebook::onSend() std::string caption = getChild("caption")->getValue().asString(); bool add_location = getChild("add_location_cb")->getValue().asBoolean(); - LLWebProfile::uploadImage(LLFloaterSnapshot::getImageData(), caption, add_location); + LLWebProfile::uploadImage(LLFloaterSnapshot::getImageData(), caption, add_location, boost::bind(&LLPanelSnapshotFacebook::onImageUploaded, this, _1, _2)); LLFloaterSnapshot::postSave(); // test with a placeholder image, until we can figure out a way to grab the uploaded image url - LLFacebookConnect::instance().sharePhoto("http://fc02.deviantart.net/fs43/i/2009/125/a/9/Future_of_Frog_by_axcho.jpg", caption); + //LLFacebookConnect::instance().sharePhoto("http://fc02.deviantart.net/fs43/i/2009/125/a/9/Future_of_Frog_by_axcho.jpg", caption); +} + +void LLPanelSnapshotFacebook::onImageUploaded(const std::string& image_url, const std::string& caption) +{ + if (!image_url.empty()) + { + LLFacebookConnect::instance().sharePhoto(image_url, caption); + } } diff --git a/indra/newview/llwebprofile.cpp b/indra/newview/llwebprofile.cpp index 641f338f2c..4bc4724753 100755 --- a/indra/newview/llwebprofile.cpp +++ b/indra/newview/llwebprofile.cpp @@ -62,8 +62,8 @@ class LLWebProfileResponders::ConfigResponder : public LLHTTPClient::Responder LOG_CLASS(LLWebProfileResponders::ConfigResponder); public: - ConfigResponder(LLPointer imagep) - : mImagep(imagep) + ConfigResponder(LLPointer imagep, const std::string& caption, LLWebProfile::image_url_callback_t cb) + : mImagep(imagep), mImageCaption(caption), mImageCallback(cb) { } @@ -113,11 +113,13 @@ public: // Do the actual image upload using the configuration. LL_DEBUGS("Snapshots") << "Got upload config, POSTing image to " << upload_url << ", config=[" << config << "]" << llendl; - LLWebProfile::post(mImagep, config, upload_url); + LLWebProfile::post(mImagep, config, upload_url, mImageCaption, mImageCallback); } private: LLPointer mImagep; + std::string mImageCaption; + LLWebProfile::image_url_callback_t mImageCallback; }; /////////////////////////////////////////////////////////////////////////////// @@ -127,6 +129,22 @@ class LLWebProfileResponders::PostImageRedirectResponder : public LLHTTPClient:: LOG_CLASS(LLWebProfileResponders::PostImageRedirectResponder); public: + PostImageRedirectResponder(const std::string& caption, LLWebProfile::image_url_callback_t cb) + : mImageCaption(caption), mImageCallback(cb) + { + } + + /*virtual*/ void completedHeader(U32 status, const std::string& reason, const LLSD& content) + { + if (status == 200) + { + std::string image_url = content.get("Location"); + llinfos << "Image uploaded to " << image_url << llendl; + if (!mImageCallback.empty() && !image_url.empty()) + mImageCallback(image_url, mImageCaption); + } + } + /*virtual*/ void completedRaw( U32 status, const std::string& reason, @@ -148,9 +166,10 @@ public: LL_DEBUGS("Snapshots") << "Uploading image succeeded. Response: [" << body << "]" << llendl; LLWebProfile::reportImageUploadStatus(true); } - + private: - LLPointer mImagep; + std::string mImageCaption; + LLWebProfile::image_url_callback_t mImageCallback; }; @@ -161,6 +180,11 @@ class LLWebProfileResponders::PostImageResponder : public LLHTTPClient::Responde LOG_CLASS(LLWebProfileResponders::PostImageResponder); public: + PostImageResponder(const std::string& caption, LLWebProfile::image_url_callback_t cb) + : mImageCaption(caption), mImageCallback(cb) + { + } + /*virtual*/ void completedHeader(U32 status, const std::string& reason, const LLSD& content) { // Viewer seems to fail to follow a 303 redirect on POST request @@ -172,7 +196,7 @@ public: headers["Cookie"] = LLWebProfile::getAuthCookie(); const std::string& redir_url = content["location"]; LL_DEBUGS("Snapshots") << "Got redirection URL: " << redir_url << llendl; - LLHTTPClient::get(redir_url, new LLWebProfileResponders::PostImageRedirectResponder, headers); + LLHTTPClient::get(redir_url, new LLWebProfileResponders::PostImageRedirectResponder(mImageCaption, mImageCallback), headers); } else { @@ -188,6 +212,10 @@ public: const LLIOPipe::buffer_ptr_t& buffer) { } + +private: + std::string mImageCaption; + LLWebProfile::image_url_callback_t mImageCallback; }; /////////////////////////////////////////////////////////////////////////////// @@ -197,7 +225,7 @@ std::string LLWebProfile::sAuthCookie; LLWebProfile::status_callback_t LLWebProfile::mStatusCallback; // static -void LLWebProfile::uploadImage(LLPointer image, const std::string& caption, bool add_location) +void LLWebProfile::uploadImage(LLPointer image, const std::string& caption, bool add_location, LLWebProfile::image_url_callback_t cb) { // Get upload configuration data. std::string config_url(getProfileURL(LLStringUtil::null) + "snapshots/s3_upload_config"); @@ -207,7 +235,7 @@ void LLWebProfile::uploadImage(LLPointer image, const std::str LL_DEBUGS("Snapshots") << "Requesting " << config_url << llendl; LLSD headers = LLViewerMedia::getHeaders(); headers["Cookie"] = getAuthCookie(); - LLHTTPClient::get(config_url, new LLWebProfileResponders::ConfigResponder(image), headers); + LLHTTPClient::get(config_url, new LLWebProfileResponders::ConfigResponder(image, caption, cb), headers); } // static @@ -218,7 +246,7 @@ void LLWebProfile::setAuthCookie(const std::string& cookie) } // static -void LLWebProfile::post(LLPointer image, const LLSD& config, const std::string& url) +void LLWebProfile::post(LLPointer image, const LLSD& config, const std::string& url, const std::string& caption, LLWebProfile::image_url_callback_t cb) { if (dynamic_cast(image.get()) == 0) { @@ -284,7 +312,7 @@ void LLWebProfile::post(LLPointer image, const LLSD& config, c memcpy(data, body.str().data(), size); // Send request, successful upload will trigger posting metadata. - LLHTTPClient::postRaw(url, data, size, new LLWebProfileResponders::PostImageResponder(), headers); + LLHTTPClient::postRaw(url, data, size, new LLWebProfileResponders::PostImageResponder(caption, cb), headers); } // static diff --git a/indra/newview/llwebprofile.h b/indra/newview/llwebprofile.h index 10279bffac..c1c0c23540 100755 --- a/indra/newview/llwebprofile.h +++ b/indra/newview/llwebprofile.h @@ -48,8 +48,9 @@ class LLWebProfile public: typedef boost::function status_callback_t; + typedef boost::function image_url_callback_t; - static void uploadImage(LLPointer image, const std::string& caption, bool add_location); + static void uploadImage(LLPointer image, const std::string& caption, bool add_location, image_url_callback_t cb = image_url_callback_t()); static void setAuthCookie(const std::string& cookie); static void setImageUploadResultCallback(status_callback_t cb) { mStatusCallback = cb; } @@ -58,7 +59,7 @@ private: friend class LLWebProfileResponders::PostImageResponder; friend class LLWebProfileResponders::PostImageRedirectResponder; - static void post(LLPointer image, const LLSD& config, const std::string& url); + static void post(LLPointer image, const LLSD& config, const std::string& url, const std::string& caption, image_url_callback_t cb); static void reportImageUploadStatus(bool ok); static std::string getAuthCookie(); -- cgit v1.2.3 From 9232d919c8571743d9f5c899b80e2807f131f4d3 Mon Sep 17 00:00:00 2001 From: Cho Date: Thu, 6 Jun 2013 00:09:59 +0100 Subject: removed unnecessary passing of image caption --- indra/newview/llpanelsnapshotfacebook.cpp | 6 +++--- indra/newview/llwebprofile.cpp | 27 ++++++++++++--------------- indra/newview/llwebprofile.h | 4 ++-- 3 files changed, 17 insertions(+), 20 deletions(-) diff --git a/indra/newview/llpanelsnapshotfacebook.cpp b/indra/newview/llpanelsnapshotfacebook.cpp index 954941274a..9bea5aa796 100755 --- a/indra/newview/llpanelsnapshotfacebook.cpp +++ b/indra/newview/llpanelsnapshotfacebook.cpp @@ -64,7 +64,7 @@ private: /*virtual*/ void updateControls(const LLSD& info); void onSend(); - void onImageUploaded(const std::string& image_url, const std::string& caption); + void onImageUploaded(const std::string& caption, const std::string& image_url); }; static LLRegisterPanelClassWrapper panel_class("llpanelsnapshotfacebook"); @@ -99,14 +99,14 @@ void LLPanelSnapshotFacebook::onSend() std::string caption = getChild("caption")->getValue().asString(); bool add_location = getChild("add_location_cb")->getValue().asBoolean(); - LLWebProfile::uploadImage(LLFloaterSnapshot::getImageData(), caption, add_location, boost::bind(&LLPanelSnapshotFacebook::onImageUploaded, this, _1, _2)); + LLWebProfile::uploadImage(LLFloaterSnapshot::getImageData(), caption, add_location, boost::bind(&LLPanelSnapshotFacebook::onImageUploaded, this, caption, _1)); LLFloaterSnapshot::postSave(); // test with a placeholder image, until we can figure out a way to grab the uploaded image url //LLFacebookConnect::instance().sharePhoto("http://fc02.deviantart.net/fs43/i/2009/125/a/9/Future_of_Frog_by_axcho.jpg", caption); } -void LLPanelSnapshotFacebook::onImageUploaded(const std::string& image_url, const std::string& caption) +void LLPanelSnapshotFacebook::onImageUploaded(const std::string& caption, const std::string& image_url) { if (!image_url.empty()) { diff --git a/indra/newview/llwebprofile.cpp b/indra/newview/llwebprofile.cpp index 4bc4724753..6923724de2 100755 --- a/indra/newview/llwebprofile.cpp +++ b/indra/newview/llwebprofile.cpp @@ -62,8 +62,8 @@ class LLWebProfileResponders::ConfigResponder : public LLHTTPClient::Responder LOG_CLASS(LLWebProfileResponders::ConfigResponder); public: - ConfigResponder(LLPointer imagep, const std::string& caption, LLWebProfile::image_url_callback_t cb) - : mImagep(imagep), mImageCaption(caption), mImageCallback(cb) + ConfigResponder(LLPointer imagep, LLWebProfile::image_url_callback_t cb) + : mImagep(imagep), mImageCallback(cb) { } @@ -113,12 +113,11 @@ public: // Do the actual image upload using the configuration. LL_DEBUGS("Snapshots") << "Got upload config, POSTing image to " << upload_url << ", config=[" << config << "]" << llendl; - LLWebProfile::post(mImagep, config, upload_url, mImageCaption, mImageCallback); + LLWebProfile::post(mImagep, config, upload_url, mImageCallback); } private: LLPointer mImagep; - std::string mImageCaption; LLWebProfile::image_url_callback_t mImageCallback; }; @@ -129,8 +128,8 @@ class LLWebProfileResponders::PostImageRedirectResponder : public LLHTTPClient:: LOG_CLASS(LLWebProfileResponders::PostImageRedirectResponder); public: - PostImageRedirectResponder(const std::string& caption, LLWebProfile::image_url_callback_t cb) - : mImageCaption(caption), mImageCallback(cb) + PostImageRedirectResponder(LLWebProfile::image_url_callback_t cb) + : mImageCallback(cb) { } @@ -141,7 +140,7 @@ public: std::string image_url = content.get("Location"); llinfos << "Image uploaded to " << image_url << llendl; if (!mImageCallback.empty() && !image_url.empty()) - mImageCallback(image_url, mImageCaption); + mImageCallback(image_url); } } @@ -168,7 +167,6 @@ public: } private: - std::string mImageCaption; LLWebProfile::image_url_callback_t mImageCallback; }; @@ -180,8 +178,8 @@ class LLWebProfileResponders::PostImageResponder : public LLHTTPClient::Responde LOG_CLASS(LLWebProfileResponders::PostImageResponder); public: - PostImageResponder(const std::string& caption, LLWebProfile::image_url_callback_t cb) - : mImageCaption(caption), mImageCallback(cb) + PostImageResponder(LLWebProfile::image_url_callback_t cb) + : mImageCallback(cb) { } @@ -196,7 +194,7 @@ public: headers["Cookie"] = LLWebProfile::getAuthCookie(); const std::string& redir_url = content["location"]; LL_DEBUGS("Snapshots") << "Got redirection URL: " << redir_url << llendl; - LLHTTPClient::get(redir_url, new LLWebProfileResponders::PostImageRedirectResponder(mImageCaption, mImageCallback), headers); + LLHTTPClient::get(redir_url, new LLWebProfileResponders::PostImageRedirectResponder(mImageCallback), headers); } else { @@ -214,7 +212,6 @@ public: } private: - std::string mImageCaption; LLWebProfile::image_url_callback_t mImageCallback; }; @@ -235,7 +232,7 @@ void LLWebProfile::uploadImage(LLPointer image, const std::str LL_DEBUGS("Snapshots") << "Requesting " << config_url << llendl; LLSD headers = LLViewerMedia::getHeaders(); headers["Cookie"] = getAuthCookie(); - LLHTTPClient::get(config_url, new LLWebProfileResponders::ConfigResponder(image, caption, cb), headers); + LLHTTPClient::get(config_url, new LLWebProfileResponders::ConfigResponder(image, cb), headers); } // static @@ -246,7 +243,7 @@ void LLWebProfile::setAuthCookie(const std::string& cookie) } // static -void LLWebProfile::post(LLPointer image, const LLSD& config, const std::string& url, const std::string& caption, LLWebProfile::image_url_callback_t cb) +void LLWebProfile::post(LLPointer image, const LLSD& config, const std::string& url, LLWebProfile::image_url_callback_t cb) { if (dynamic_cast(image.get()) == 0) { @@ -312,7 +309,7 @@ void LLWebProfile::post(LLPointer image, const LLSD& config, c memcpy(data, body.str().data(), size); // Send request, successful upload will trigger posting metadata. - LLHTTPClient::postRaw(url, data, size, new LLWebProfileResponders::PostImageResponder(caption, cb), headers); + LLHTTPClient::postRaw(url, data, size, new LLWebProfileResponders::PostImageResponder(cb), headers); } // static diff --git a/indra/newview/llwebprofile.h b/indra/newview/llwebprofile.h index c1c0c23540..63dccf80af 100755 --- a/indra/newview/llwebprofile.h +++ b/indra/newview/llwebprofile.h @@ -48,7 +48,7 @@ class LLWebProfile public: typedef boost::function status_callback_t; - typedef boost::function image_url_callback_t; + typedef boost::function image_url_callback_t; static void uploadImage(LLPointer image, const std::string& caption, bool add_location, image_url_callback_t cb = image_url_callback_t()); static void setAuthCookie(const std::string& cookie); @@ -59,7 +59,7 @@ private: friend class LLWebProfileResponders::PostImageResponder; friend class LLWebProfileResponders::PostImageRedirectResponder; - static void post(LLPointer image, const LLSD& config, const std::string& url, const std::string& caption, image_url_callback_t cb); + static void post(LLPointer image, const LLSD& config, const std::string& url, image_url_callback_t cb); static void reportImageUploadStatus(bool ok); static std::string getAuthCookie(); -- cgit v1.2.3 From 58177c83b0a81aae363bccc0e5ac2312b083341d Mon Sep 17 00:00:00 2001 From: Cho Date: Thu, 6 Jun 2013 00:17:33 +0100 Subject: uncommented the placeholder image upload --- indra/newview/llpanelsnapshotfacebook.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llpanelsnapshotfacebook.cpp b/indra/newview/llpanelsnapshotfacebook.cpp index 9bea5aa796..56b1f921b9 100755 --- a/indra/newview/llpanelsnapshotfacebook.cpp +++ b/indra/newview/llpanelsnapshotfacebook.cpp @@ -103,7 +103,7 @@ void LLPanelSnapshotFacebook::onSend() LLFloaterSnapshot::postSave(); // test with a placeholder image, until we can figure out a way to grab the uploaded image url - //LLFacebookConnect::instance().sharePhoto("http://fc02.deviantart.net/fs43/i/2009/125/a/9/Future_of_Frog_by_axcho.jpg", caption); + LLFacebookConnect::instance().sharePhoto("http://fc02.deviantart.net/fs43/i/2009/125/a/9/Future_of_Frog_by_axcho.jpg", caption); } void LLPanelSnapshotFacebook::onImageUploaded(const std::string& caption, const std::string& image_url) -- cgit v1.2.3 From cf5cf32ebf3a8eccbaa9e8c092fd23b357a68727 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Wed, 5 Jun 2013 16:31:32 -0700 Subject: ACME-471: Now using the actual map top-down image for the checked in location. --- indra/newview/llviewermenu.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 471db8d8fc..e8c7e0cfdc 100755 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -5995,8 +5995,12 @@ void handle_facebook_checkin() std::string region_name = gAgent.getRegion()->getName(); std::string description; LLAgentUI::buildLocationString(description, LLAgentUI::LOCATION_FORMAT_NORMAL_COORDS, gAgent.getPositionAgent()); + LLVector3d center_agent = gAgent.getRegion()->getCenterGlobal(); + int x_pos = center_agent[0] / 256.0; + int y_pos = center_agent[1] / 256.0; + std::string locationMap = llformat("http://map.secondlife.com/map-1-%d-%d-objects.jpg", x_pos, y_pos); - LLFacebookConnect::instance().postCheckin(slurl_string, region_name, description, "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDL4jdC_vCh0ow-QCXZjN-WNojEXWiz0APEa6Qhpl8cxawjkoC7w", ""); + LLFacebookConnect::instance().postCheckin(slurl_string, region_name, description, locationMap, ""); } //bool is_facebook_connected(); -- cgit v1.2.3 From ba90e388855f99ec5b3f1991f2437f616a5d9e62 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Wed, 5 Jun 2013 19:40:33 -0700 Subject: ACME-464 : WIP : Make the menu Connect to FB only connect and be disabled if the user is already connected --- indra/newview/llpanelsnapshotfacebook.cpp | 3 ++- indra/newview/llviewermenu.cpp | 17 +++++++++-------- indra/newview/skins/default/xui/en/menu_viewer.xml | 2 ++ 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/indra/newview/llpanelsnapshotfacebook.cpp b/indra/newview/llpanelsnapshotfacebook.cpp index 200c64f16b..27abbfa456 100755 --- a/indra/newview/llpanelsnapshotfacebook.cpp +++ b/indra/newview/llpanelsnapshotfacebook.cpp @@ -90,7 +90,8 @@ void LLPanelSnapshotFacebook::onOpen(const LLSD& key) void LLPanelSnapshotFacebook::updateControls(const LLSD& info) { const bool have_snapshot = info.has("have-snapshot") ? info["have-snapshot"].asBoolean() : true; - getChild("post_btn")->setEnabled(have_snapshot); + const bool is_connected = LLFacebookConnect::instance().getConnected(); + getChild("post_btn")->setEnabled(have_snapshot && is_connected); } void LLPanelSnapshotFacebook::onSend() diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 471db8d8fc..bc2e13d77e 100755 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -5974,16 +5974,18 @@ void handle_report_abuse() void handle_facebook_connect() { - if (LLFacebookConnect::instance().getConnected()) - { - LLFacebookConnect::instance().disconnectFromFacebook(); - } - else + if (!LLFacebookConnect::instance().getConnected()) { LLFacebookConnect::instance().getConnectionToFacebook(); } } +bool enable_facebook_connect() +{ + // The menu item will be disabled if we are already connected + return !LLFacebookConnect::instance().getConnected(); +} + void handle_facebook_checkin() { @@ -5999,9 +6001,6 @@ void handle_facebook_checkin() LLFacebookConnect::instance().postCheckin(slurl_string, region_name, description, "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQDL4jdC_vCh0ow-QCXZjN-WNojEXWiz0APEa6Qhpl8cxawjkoC7w", ""); } -//bool is_facebook_connected(); - - void handle_buy_currency() { LLBuyCurrencyHTML::openCurrencyFloater(); @@ -8754,6 +8753,8 @@ void initialize_menus() // Facebook Connect commit.add("Facebook.Connect", boost::bind(&handle_facebook_connect)); + enable.add("Facebook.EnableConnect", boost::bind(&enable_facebook_connect)); + // Facebook Checkin commit.add("Facebook.Checkin", boost::bind(&handle_facebook_checkin)); } diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 5061842c7f..e67350722d 100755 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -20,6 +20,8 @@ name="ConnectToFacebook"> + Date: Thu, 6 Jun 2013 16:34:24 -0400 Subject: STORM-1838 Added teleport request to conversation log. Added xml to have message appear in IM window, if open. Code cleanup. --- indra/newview/llavataractions.cpp | 1 - indra/newview/llconversationloglist.cpp | 5 ++++- indra/newview/llpanelpeoplemenus.cpp | 2 -- indra/newview/skins/default/xui/en/menu_conversation.xml | 2 -- .../skins/default/xui/en/menu_conversation_log_gear.xml | 10 ++++++++++ indra/newview/skins/default/xui/en/notifications.xml | 1 + 6 files changed, 15 insertions(+), 6 deletions(-) diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index 285e70c8ea..45992b8c83 100755 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -443,7 +443,6 @@ void LLAvatarActions::teleport_request_callback(const LLSD& notification, const // static void LLAvatarActions::teleportRequest(const LLUUID& id) { -llwarns << "DBG " << llendl; std::string name; gCacheName->getFullName(id, name); gCacheName->cleanFullName(name); diff --git a/indra/newview/llconversationloglist.cpp b/indra/newview/llconversationloglist.cpp index cf9c9b3415..44212298cf 100644 --- a/indra/newview/llconversationloglist.cpp +++ b/indra/newview/llconversationloglist.cpp @@ -311,9 +311,12 @@ void LLConversationLogList::onCustomAction(const LLSD& userdata) } else if ("offer_teleport" == command_name) { -llwarns << "DBG " << llendl; LLAvatarActions::offerTeleport(selected_conversation_participant_id); } + else if ("request_teleport" == command_name) + { + LLAvatarActions::teleportRequest(selected_conversation_participant_id); + } else if("add_friend" == command_name) { if (!LLAvatarActions::isFriend(selected_conversation_participant_id)) diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp index ddc92f439b..0b2bf1d2c8 100644 --- a/indra/newview/llpanelpeoplemenus.cpp +++ b/indra/newview/llpanelpeoplemenus.cpp @@ -261,7 +261,6 @@ void PeopleContextMenu::requestTeleport() { // boost::bind cannot recognize overloaded method LLAvatarActions::teleportRequest(), // so we have to use a wrapper. -llwarns << "DBG " << llendl; LLAvatarActions::teleportRequest(mUUIDs.front()); } @@ -269,7 +268,6 @@ void PeopleContextMenu::offerTeleport() { // boost::bind cannot recognize overloaded method LLAvatarActions::offerTeleport(), // so we have to use a wrapper. -llwarns << "DBG " << llendl; LLAvatarActions::offerTeleport(mUUIDs); } diff --git a/indra/newview/skins/default/xui/en/menu_conversation.xml b/indra/newview/skins/default/xui/en/menu_conversation.xml index c2c15023c5..d8eb2f0ffd 100644 --- a/indra/newview/skins/default/xui/en/menu_conversation.xml +++ b/indra/newview/skins/default/xui/en/menu_conversation.xml @@ -46,7 +46,6 @@ - - + + + + [NAME_SLURL] is requesting to be teleported to your location. [MESSAGE] -- cgit v1.2.3 From d233d8836b610b5e5ca76a1e3bb4d63dc3592e66 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Thu, 6 Jun 2013 17:16:00 -0400 Subject: STORM-1838 Remove incorrect XML menu text --- indra/newview/skins/default/xui/en/menu_people_nearby.xml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby.xml b/indra/newview/skins/default/xui/en/menu_people_nearby.xml index 80e8e59076..f12226ebeb 100644 --- a/indra/newview/skins/default/xui/en/menu_people_nearby.xml +++ b/indra/newview/skins/default/xui/en/menu_people_nearby.xml @@ -143,15 +143,4 @@ function="Avatar.EnableItem" parameter="can_block" /> - - - - - -- cgit v1.2.3 From 4163603a1118a9c1e220e56f22e757d162932ebe Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Thu, 6 Jun 2013 15:06:52 -0700 Subject: ACME-464 : WIP : Post in the snapshot Panel correctly disabled / enabled according to FB connection status --- indra/newview/llpanelsnapshotfacebook.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/indra/newview/llpanelsnapshotfacebook.cpp b/indra/newview/llpanelsnapshotfacebook.cpp index b434741538..faeabf0a07 100755 --- a/indra/newview/llpanelsnapshotfacebook.cpp +++ b/indra/newview/llpanelsnapshotfacebook.cpp @@ -55,6 +55,7 @@ public: /*virtual*/ void onOpen(const LLSD& key); private: + /*virtual*/ void updateCustomResControls(); ///< Show/hide facebook custom controls /*virtual*/ std::string getWidthSpinnerName() const { return "facebook_snapshot_width"; } /*virtual*/ std::string getHeightSpinnerName() const { return "facebook_snapshot_height"; } /*virtual*/ std::string getAspectRatioCBName() const { return "facebook_keep_aspect_check"; } @@ -84,6 +85,7 @@ BOOL LLPanelSnapshotFacebook::postBuild() // virtual void LLPanelSnapshotFacebook::onOpen(const LLSD& key) { + updateControls(key); LLPanelSnapshot::onOpen(key); } @@ -95,6 +97,13 @@ void LLPanelSnapshotFacebook::updateControls(const LLSD& info) getChild("post_btn")->setEnabled(have_snapshot && is_connected); } +// virtual +void LLPanelSnapshotFacebook::updateCustomResControls() +{ + const bool is_connected = LLFacebookConnect::instance().getConnected(); + getChild("post_btn")->setEnabled(is_connected); +} + void LLPanelSnapshotFacebook::onSend() { std::string caption = getChild("caption")->getValue().asString(); -- cgit v1.2.3 From bee5369b2f2fc0208b1a0645c2702ed1cea43c55 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Thu, 6 Jun 2013 20:08:46 -0700 Subject: ACME-464 : Fixed : We connect to FB when bringing up the Upload to FB Snapshot panel --- indra/newview/llfloatersnapshot.cpp | 12 +++++++++++- indra/newview/llpanelsnapshotfacebook.cpp | 5 +++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp index d8d62e5bbb..8405d8aeec 100755 --- a/indra/newview/llfloatersnapshot.cpp +++ b/indra/newview/llfloatersnapshot.cpp @@ -37,6 +37,7 @@ #include "llcriticaldamp.h" #include "llfloaterperms.h" #include "llui.h" +#include "llfacebookconnect.h" #include "llfocusmgr.h" #include "llbutton.h" #include "llcombobox.h" @@ -2245,7 +2246,16 @@ void LLFloaterSnapshot::update() { changed |= LLSnapshotLivePreview::onIdle(*iter); } - if(changed) + + // We need to pool on facebook connection as it might change any time + static bool s_facebook_connected = false; + if (LLFacebookConnect::instance().getConnected() != s_facebook_connected) + { + s_facebook_connected = LLFacebookConnect::instance().getConnected(); + changed = true; + } + + if (changed) { lldebugs << "changed" << llendl; inst->impl.updateControls(inst); diff --git a/indra/newview/llpanelsnapshotfacebook.cpp b/indra/newview/llpanelsnapshotfacebook.cpp index faeabf0a07..7c8fc044c0 100755 --- a/indra/newview/llpanelsnapshotfacebook.cpp +++ b/indra/newview/llpanelsnapshotfacebook.cpp @@ -85,6 +85,10 @@ BOOL LLPanelSnapshotFacebook::postBuild() // virtual void LLPanelSnapshotFacebook::onOpen(const LLSD& key) { + if (!LLFacebookConnect::instance().getConnected()) + { + LLFacebookConnect::instance().getConnectionToFacebook(); + } updateControls(key); LLPanelSnapshot::onOpen(key); } @@ -100,6 +104,7 @@ void LLPanelSnapshotFacebook::updateControls(const LLSD& info) // virtual void LLPanelSnapshotFacebook::updateCustomResControls() { + LLPanelSnapshot::updateCustomResControls(); const bool is_connected = LLFacebookConnect::instance().getConnected(); getChild("post_btn")->setEnabled(is_connected); } -- cgit v1.2.3 From 5020579a07eca7a719f70b2ae7fde40a2522f124 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Fri, 7 Jun 2013 12:34:57 -0700 Subject: ACME-470: Adjusting 'Check in to Facebook' text to 'Check in to Facebook...' --- indra/newview/skins/default/xui/en/menu_viewer.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 5061842c7f..97cd01123f 100755 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -22,7 +22,7 @@ function="Facebook.Connect" /> -- cgit v1.2.3 From 54e879cc22ec342f57cec23d38ba269b83489111 Mon Sep 17 00:00:00 2001 From: Cho Date: Sat, 8 Jun 2013 00:48:46 +0100 Subject: added Facebook status update feature for ACME-502, ACME-503, and ACME-504 --- indra/newview/llfacebookconnect.cpp | 9 +++++++++ indra/newview/llfacebookconnect.h | 3 ++- indra/newview/llnotificationscripthandler.cpp | 3 +++ indra/newview/llviewermenu.cpp | 20 ++++++++++++++++++++ indra/newview/llviewermenu.h | 5 ++++- indra/newview/skins/default/xui/en/menu_viewer.xml | 8 +++++++- .../newview/skins/default/xui/en/notifications.xml | 21 +++++++++++++++++++++ 7 files changed, 66 insertions(+), 3 deletions(-) diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp index 668ba04406..79e8d98668 100644 --- a/indra/newview/llfacebookconnect.cpp +++ b/indra/newview/llfacebookconnect.cpp @@ -323,6 +323,15 @@ void LLFacebookConnect::sharePhoto(const std::string& image_url, const std::stri LLHTTPClient::post(getFacebookConnectURL("/share/photo"), body, new LLFacebookPostResponder()); } +void LLFacebookConnect::updateStatus(const std::string& message) +{ + LLSD body; + body["message"] = message; + + // Note: we can use that route for different publish action. We should be able to use the same responder. + LLHTTPClient::post(getFacebookConnectURL("/share/wall"), body, new LLFacebookPostResponder()); +} + void LLFacebookConnect::storeContent(const LLSD& content) { mGeneration++; diff --git a/indra/newview/llfacebookconnect.h b/indra/newview/llfacebookconnect.h index 2dba182267..58e2707ba3 100644 --- a/indra/newview/llfacebookconnect.h +++ b/indra/newview/llfacebookconnect.h @@ -49,6 +49,7 @@ public: void postCheckin(const std::string& location, const std::string& name, const std::string& description, const std::string& picture, const std::string& message); void postCheckinMessage(const std::string& message, const std::string& link, const std::string& name, const std::string& caption, const std::string& description, const std::string& picture); void sharePhoto(const std::string& image_url, const std::string& caption); + void updateStatus(const std::string& message); void clearContent(); void storeContent(const LLSD& content); @@ -69,7 +70,7 @@ private: bool mConnectedToFbc; LLSD mContent; - S32 mGeneration; + S32 mGeneration; }; #endif // LL_LLFACEBOOKCONNECT_H diff --git a/indra/newview/llnotificationscripthandler.cpp b/indra/newview/llnotificationscripthandler.cpp index 08c98e4f28..2854962922 100755 --- a/indra/newview/llnotificationscripthandler.cpp +++ b/indra/newview/llnotificationscripthandler.cpp @@ -35,6 +35,9 @@ #include "llnotificationmanager.h" #include "llnotifications.h" #include "llscriptfloater.h" +#include "llfacebookconnect.h" +#include "llavatarname.h" +#include "llavatarnamecache.h" using namespace LLNotificationsUI; diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 1bfa5ac2d1..67460c4bc6 100755 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -6005,6 +6005,23 @@ void handle_facebook_checkin() LLFacebookConnect::instance().postCheckin(slurl_string, region_name, description, locationMap, ""); } +bool handle_facebook_status_callback(const LLSD& notification, const LLSD& response) +{ + S32 option = LLNotificationsUtil::getSelectedOption(notification, response); + if (option == 0) + { + std::string message = response["message"].asString(); + if (!message.empty()) + LLFacebookConnect::instance().updateStatus(message); + } + return false; +} + +void handle_facebook_status() +{ + LLNotificationsUtil::add("FacebookUpdateStatus", LLSD(), LLSD(), boost::bind(&handle_facebook_status_callback, _1, _2)); +} + void handle_buy_currency() { LLBuyCurrencyHTML::openCurrencyFloater(); @@ -8761,4 +8778,7 @@ void initialize_menus() // Facebook Checkin commit.add("Facebook.Checkin", boost::bind(&handle_facebook_checkin)); + + // Facebook Status Update + commit.add("Facebook.UpdateStatus", boost::bind(&handle_facebook_status)); } diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h index 9c3f13f843..e71beef10d 100755 --- a/indra/newview/llviewermenu.h +++ b/indra/newview/llviewermenu.h @@ -138,9 +138,12 @@ bool handle_go_to(); // Facebook Connect void handle_facebook_connect(); -//Facebook Checkin +// Facebook Checkin void handle_facebook_checkin(); +// Facebook Status Update +void handle_facebook_status(); + // Export to XML or Collada void handle_export_selected( void * ); diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index e67350722d..2b2ac8c079 100755 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -28,7 +28,13 @@ name="CheckinToFacebook"> - + + + + + + What's on your mind? (asks Facebook) + confirm +
+ + +
+ + + + - - - + name="place_panel"/> + -- cgit v1.2.3 From 824a5c65f57ae0fa2cce99ade156341fcf8daf5a Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Thu, 20 Jun 2013 17:58:27 -0700 Subject: ACME-584: Adjusted name of a couple XUI elements. --- indra/newview/skins/default/xui/en/floater_social.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/indra/newview/skins/default/xui/en/floater_social.xml b/indra/newview/skins/default/xui/en/floater_social.xml index 2b382215d1..d446e0c0f6 100644 --- a/indra/newview/skins/default/xui/en/floater_social.xml +++ b/indra/newview/skins/default/xui/en/floater_social.xml @@ -47,7 +47,7 @@ name="stack1" top="8"> + label="button_container" + help_topic="button_container" + name="button_container"/> + + Date: Sat, 22 Jun 2013 01:32:15 +0100 Subject: tweaked numbers to look more like mockup for ACME-568 --- indra/newview/skins/default/xui/en/floater_social.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/indra/newview/skins/default/xui/en/floater_social.xml b/indra/newview/skins/default/xui/en/floater_social.xml index 378841b1a6..c49749840b 100644 --- a/indra/newview/skins/default/xui/en/floater_social.xml +++ b/indra/newview/skins/default/xui/en/floater_social.xml @@ -37,14 +37,14 @@ height="16" left="9" name="caption_label" - top_pad="12" + top_pad="18" type="string"> What's on your mind?
-- cgit v1.2.3 From 9debe1787f966efd6c25ffc43a3a77553aca107a Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Sat, 22 Jun 2013 11:49:36 -0700 Subject: ACME-497 : All xml work for the Checkin feature --- indra/newview/llfloatersocial.cpp | 5 + indra/newview/llfloatersocial.h | 1 + .../skins/default/xui/en/floater_social.xml | 112 ++++++++++++++++++++- 3 files changed, 115 insertions(+), 3 deletions(-) diff --git a/indra/newview/llfloatersocial.cpp b/indra/newview/llfloatersocial.cpp index fe9cfa592b..4a3efe4a2d 100644 --- a/indra/newview/llfloatersocial.cpp +++ b/indra/newview/llfloatersocial.cpp @@ -31,5 +31,10 @@ LLFloaterSocial::LLFloaterSocial(const LLSD& key) : LLFloater(key) { + mCommitCallbackRegistrar.add("SocialSharing.Cancel", boost::bind(&LLFloaterSocial::onCancel, this)); +} +void LLFloaterSocial::onCancel() +{ + closeFloater(); } diff --git a/indra/newview/llfloatersocial.h b/indra/newview/llfloatersocial.h index b120fe5804..f65c0dcf5d 100644 --- a/indra/newview/llfloatersocial.h +++ b/indra/newview/llfloatersocial.h @@ -34,6 +34,7 @@ class LLFloaterSocial : public LLFloater { public: LLFloaterSocial(const LLSD& key); + void onCancel(); }; #endif // LL_LLFLOATERSOCIAL_H diff --git a/indra/newview/skins/default/xui/en/floater_social.xml b/indra/newview/skins/default/xui/en/floater_social.xml index d446e0c0f6..2909da295d 100644 --- a/indra/newview/skins/default/xui/en/floater_social.xml +++ b/indra/newview/skins/default/xui/en/floater_social.xml @@ -283,18 +283,124 @@ top_delta="0" width="100"> + function="SocialSharing.Cancel" /> + name="place_panel"> + + + + Say something about where you are: + + + + + + + + + + + Include overhead view of location + + + + + + + + -- cgit v1.2.3 From 27bd181a6d07b191d674870039b2801713c554f1 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Sun, 23 Jun 2013 12:15:21 -0700 Subject: ACME-497 : Working implementation of Checkin though couple of bugs to fix and no visible map in the UI --- indra/newview/llfloatersocial.cpp | 65 +++++++++++++++++++++- indra/newview/llfloatersocial.h | 10 ++++ .../skins/default/xui/en/floater_social.xml | 5 +- 3 files changed, 77 insertions(+), 3 deletions(-) diff --git a/indra/newview/llfloatersocial.cpp b/indra/newview/llfloatersocial.cpp index f6fc55927e..cca966bb9a 100644 --- a/indra/newview/llfloatersocial.cpp +++ b/indra/newview/llfloatersocial.cpp @@ -29,11 +29,25 @@ #include "llfloatersocial.h" +#include "llagent.h" #include "llagentui.h" +#include "llfacebookconnect.h" #include "llfloaterreg.h" #include "llslurl.h" +#include "llviewerregion.h" +#include "llviewercontrol.h" -static LLRegisterPanelClassWrapper panel_class("llsocialphotopanel"); +static LLRegisterPanelClassWrapper t_panel_photo("llsocialphotopanel"); +static LLRegisterPanelClassWrapper t_panel_checkin("llsocialcheckinpanel"); + +std::string get_map_url() +{ + LLVector3d center_agent = gAgent.getRegion()->getCenterGlobal(); + int x_pos = center_agent[0] / 256.0; + int y_pos = center_agent[1] / 256.0; + std::string map_url = gSavedSettings.getString("CurrentMapServerURL") + llformat("map-1-%d-%d-objects.jpg", x_pos, y_pos); + return map_url; +} LLSocialPhotoPanel::LLSocialPhotoPanel() { @@ -60,6 +74,55 @@ void LLSocialPhotoPanel::onSend() } +LLSocialCheckinPanel::LLSocialCheckinPanel() : + mMapUrl("") +{ + mCommitCallbackRegistrar.add("SocialSharing.SendCheckin", boost::bind(&LLSocialCheckinPanel::onSend, this)); +} + +/*virtual*/ +void LLSocialCheckinPanel::setVisible(BOOL visible) +{ + if (visible) + { + mMapUrl = get_map_url(); + } + LLPanel::setVisible(visible); +} + +void LLSocialCheckinPanel::onSend() +{ + // Get the location SLURL + LLSLURL slurl; + LLAgentUI::buildSLURL(slurl); + std::string slurl_string = slurl.getSLURLString(); + + // Get the region name + std::string region_name = gAgent.getRegion()->getName(); + + // Get the region description + std::string description; + LLAgentUI::buildLocationString(description, LLAgentUI::LOCATION_FORMAT_NORMAL_COORDS, gAgent.getPositionAgent()); + + + // Optionally add the region map view + bool add_map_view = getChild("add_place_view_cb")->getValue().asBoolean(); + std::string map_url = (add_map_view ? mMapUrl : ""); + + // Get the caption + std::string caption = getChild("place_caption")->getValue().asString(); + + // Post all that to Facebook + LLFacebookConnect::instance().postCheckin(slurl_string, region_name, description, map_url, caption); + + // Close the floater once "Post" has been pushed + LLFloater* floater = getParentByType(); + if (floater) + { + floater->closeFloater(); + } +} + LLFloaterSocial::LLFloaterSocial(const LLSD& key) : LLFloater(key) { diff --git a/indra/newview/llfloatersocial.h b/indra/newview/llfloatersocial.h index a8c83fb364..aee7f2f060 100644 --- a/indra/newview/llfloatersocial.h +++ b/indra/newview/llfloatersocial.h @@ -36,6 +36,16 @@ class LLSocialPhotoPanel : public LLPanel void onSend(); }; +class LLSocialCheckinPanel : public LLPanel +{ +public: + LLSocialCheckinPanel(); + void onSend(); + /*virtual*/ void setVisible(BOOL visible); +private: + std::string mMapUrl; +}; + class LLFloaterSocial : public LLFloater { public: diff --git a/indra/newview/skins/default/xui/en/floater_social.xml b/indra/newview/skins/default/xui/en/floater_social.xml index d57bc157cd..f99044b233 100644 --- a/indra/newview/skins/default/xui/en/floater_social.xml +++ b/indra/newview/skins/default/xui/en/floater_social.xml @@ -71,7 +71,7 @@ top_delta="0" width="100"> + function="SocialSharing.Cancel" /> + function="SocialSharing.SendCheckin" /> - - - + + + -- cgit v1.2.3 From 68fa34965daa5bd65aea5cb1f4dc4554e7d9f70f Mon Sep 17 00:00:00 2001 From: Cho Date: Tue, 25 Jun 2013 00:26:10 +0100 Subject: made status update actually post to Facebook, for ACME-569 and ACME-573 --- indra/newview/llfloatersocial.cpp | 18 ++++++++++++++++++ indra/newview/llfloatersocial.h | 7 +++++++ indra/newview/skins/default/xui/en/floater_social.xml | 5 +++-- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/indra/newview/llfloatersocial.cpp b/indra/newview/llfloatersocial.cpp index 361d54f696..dd4f4f03d9 100644 --- a/indra/newview/llfloatersocial.cpp +++ b/indra/newview/llfloatersocial.cpp @@ -37,6 +37,7 @@ #include "llviewerregion.h" #include "llviewercontrol.h" +static LLRegisterPanelClassWrapper t_panel_status("llsocialstatuspanel"); static LLRegisterPanelClassWrapper t_panel_photo("llsocialphotopanel"); static LLRegisterPanelClassWrapper t_panel_checkin("llsocialcheckinpanel"); @@ -53,6 +54,23 @@ std::string get_map_url() return map_url; } +LLSocialStatusPanel::LLSocialStatusPanel() +{ + mCommitCallbackRegistrar.add("SocialSharing.SendStatus", boost::bind(&LLSocialStatusPanel::onSend, this)); +} + +void LLSocialStatusPanel::onSend() +{ + std::string message = getChild("message")->getValue().asString(); + LLFacebookConnect::instance().updateStatus(message); + + LLFloater* floater = getParentByType(); + if (floater) + { + floater->closeFloater(); + } +} + LLSocialPhotoPanel::LLSocialPhotoPanel() { mCommitCallbackRegistrar.add("PostToFacebook.Send", boost::bind(&LLSocialPhotoPanel::onSend, this)); diff --git a/indra/newview/llfloatersocial.h b/indra/newview/llfloatersocial.h index aee7f2f060..561aefa111 100644 --- a/indra/newview/llfloatersocial.h +++ b/indra/newview/llfloatersocial.h @@ -29,6 +29,13 @@ #include "llfloater.h" +class LLSocialStatusPanel : public LLPanel +{ +public: + LLSocialStatusPanel(); + void onSend(); +}; + class LLSocialPhotoPanel : public LLPanel { public: diff --git a/indra/newview/skins/default/xui/en/floater_social.xml b/indra/newview/skins/default/xui/en/floater_social.xml index fc26ba5842..15e105f67d 100644 --- a/indra/newview/skins/default/xui/en/floater_social.xml +++ b/indra/newview/skins/default/xui/en/floater_social.xml @@ -23,6 +23,7 @@ height="430" halign="center"> @@ -60,7 +61,7 @@ top_pad="18" width="100"> + function="SocialSharing.SendStatus" /> - - + help_topic="panel_social_status" + name="panel_social_status"/> - - - - - - - - - - - [SIZE] KB - - - - - Succeeded - - - - - Failed - - - - - Working - - - - - - + help_topic="panel_social_photo" + name="panel_social_photo"/> - - - - Say something about where you are: - - - - - - - - - - - Include overhead view of location - - - - - - - - + help_topic="panel_social_place" + name="panel_social_place"/> -- cgit v1.2.3 From fc05dc5114785368e37e325fdb429fed7cd3c363 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Thu, 27 Jun 2013 16:52:53 -0700 Subject: ACME-630 Adding missing files --- .../skins/default/xui/en/panel_social_photo.xml | 254 +++++++++++++++++++++ .../skins/default/xui/en/panel_social_place.xml | 108 +++++++++ .../skins/default/xui/en/panel_social_status.xml | 50 ++++ 3 files changed, 412 insertions(+) create mode 100644 indra/newview/skins/default/xui/en/panel_social_photo.xml create mode 100644 indra/newview/skins/default/xui/en/panel_social_place.xml create mode 100644 indra/newview/skins/default/xui/en/panel_social_status.xml diff --git a/indra/newview/skins/default/xui/en/panel_social_photo.xml b/indra/newview/skins/default/xui/en/panel_social_photo.xml new file mode 100644 index 0000000000..e6742b0ea7 --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_social_photo.xml @@ -0,0 +1,254 @@ + + + + + + + + + + + + [SIZE] KB + + + + + Succeeded + + + + + Failed + + + + + Working + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/panel_social_place.xml b/indra/newview/skins/default/xui/en/panel_social_place.xml new file mode 100644 index 0000000000..30b48d9bb1 --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_social_place.xml @@ -0,0 +1,108 @@ + + + + + Say something about where you are: + + + + + + + + + + + Include overhead view of location + + + + + + + + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/panel_social_status.xml b/indra/newview/skins/default/xui/en/panel_social_status.xml new file mode 100644 index 0000000000..ae199e7e38 --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_social_status.xml @@ -0,0 +1,50 @@ + + + What's on your mind? + + + + + + \ No newline at end of file -- cgit v1.2.3 From 0e50cbc2edacdecf32071c97c2ce5349db5ef5e9 Mon Sep 17 00:00:00 2001 From: Cho Date: Fri, 28 Jun 2013 01:21:14 +0100 Subject: made it optional to autoconnect in LLFacebookConnect::getConnectionToFacebook() for ACME-648 --- indra/newview/llfacebookconnect.cpp | 18 +++++++++++++----- indra/newview/llfacebookconnect.h | 2 +- indra/newview/llfloatersocial.cpp | 2 +- indra/newview/llpanelpeople.cpp | 2 +- indra/newview/llpanelsnapshotfacebook.cpp | 2 +- indra/newview/llviewermenu.cpp | 2 +- 6 files changed, 18 insertions(+), 10 deletions(-) diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp index cf0f554149..52268daa36 100644 --- a/indra/newview/llfacebookconnect.cpp +++ b/indra/newview/llfacebookconnect.cpp @@ -201,9 +201,9 @@ class LLFacebookConnectedResponder : public LLHTTPClient::Responder LOG_CLASS(LLFacebookConnectedResponder); public: - LLFacebookConnectedResponder() + LLFacebookConnectedResponder(bool auto_connect) : mAutoConnect(auto_connect) { - LLFacebookConnect::instance().setConnectionState(LLFacebookConnect::FB_CONNECTION_IN_PROGRESS); + LLFacebookConnect::instance().setConnectionState(LLFacebookConnect::FB_CONNECTION_IN_PROGRESS); } virtual void completed(U32 status, const std::string& reason, const LLSD& content) @@ -223,7 +223,14 @@ public: // show the facebook login page if not connected yet if (status == 404) { - LLFacebookConnect::instance().connectToFacebook(); + if (mAutoConnect) + { + LLFacebookConnect::instance().connectToFacebook(); + } + else + { + LLFacebookConnect::instance().setConnectionState(LLFacebookConnect::FB_NOT_CONNECTED); + } } else { @@ -234,6 +241,7 @@ public: } private: + bool mAutoConnect; }; /////////////////////////////////////////////////////////////////////////////// @@ -304,13 +312,13 @@ void LLFacebookConnect::disconnectFromFacebook() LLHTTPClient::del(getFacebookConnectURL("/connection"), new LLFacebookDisconnectResponder()); } -void LLFacebookConnect::getConnectionToFacebook() +void LLFacebookConnect::getConnectionToFacebook(bool auto_connect) { if ((mConnectionState == FB_NOT_CONNECTED) || (mConnectionState == FB_CONNECTION_FAILED)) { const bool follow_redirects=false; const F32 timeout=HTTP_REQUEST_EXPIRY_SECS; - LLHTTPClient::get(getFacebookConnectURL("/connection"), new LLFacebookConnectedResponder(), + LLHTTPClient::get(getFacebookConnectURL("/connection"), new LLFacebookConnectedResponder(auto_connect), LLSD(), timeout, follow_redirects); } } diff --git a/indra/newview/llfacebookconnect.h b/indra/newview/llfacebookconnect.h index a19b6fbb98..c54da8e3f3 100644 --- a/indra/newview/llfacebookconnect.h +++ b/indra/newview/llfacebookconnect.h @@ -54,7 +54,7 @@ public: void connectToFacebook(const std::string& auth_code = ""); // Initiate the complete FB connection. Please use getConnectionToFacebook() in normal use. void disconnectFromFacebook(); // Disconnect from the FBC service. - void getConnectionToFacebook(); // Check if an access token is available on the FBC service. If not, call connectToFacebook(). + void getConnectionToFacebook(bool auto_connect = false); // Check if an access token is available on the FBC service. If not, call connectToFacebook(). void loadFacebookFriends(); void postCheckin(const std::string& location, const std::string& name, const std::string& description, const std::string& picture, const std::string& message); diff --git a/indra/newview/llfloatersocial.cpp b/indra/newview/llfloatersocial.cpp index 8d026471dc..35761d5cc8 100644 --- a/indra/newview/llfloatersocial.cpp +++ b/indra/newview/llfloatersocial.cpp @@ -516,7 +516,7 @@ void LLFloaterSocial::onCancel() BOOL LLFloaterSocial::postBuild() { // Initiate a connection to Facebook (getConnectionToFacebook() handles the already connected state) - LLFacebookConnect::instance().getConnectionToFacebook(); + LLFacebookConnect::instance().getConnectionToFacebook(true); // Keep tab of the Photo Panel mSocialPhotoPanel = static_cast(getChild("panel_social_photo")); return LLFloater::postBuild(); diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index b6b72800f9..92391f0537 100755 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -1683,7 +1683,7 @@ void LLPanelPeople::onLoginFbcButtonClicked() } else { - LLFacebookConnect::instance().getConnectionToFacebook(); + LLFacebookConnect::instance().getConnectionToFacebook(true); } } diff --git a/indra/newview/llpanelsnapshotfacebook.cpp b/indra/newview/llpanelsnapshotfacebook.cpp index 0a76bc3b9d..94fbb986c0 100755 --- a/indra/newview/llpanelsnapshotfacebook.cpp +++ b/indra/newview/llpanelsnapshotfacebook.cpp @@ -89,7 +89,7 @@ void LLPanelSnapshotFacebook::onOpen(const LLSD& key) { if (!LLFacebookConnect::instance().isConnected()) { - LLFacebookConnect::instance().getConnectionToFacebook(); + LLFacebookConnect::instance().getConnectionToFacebook(true); } updateControls(key); LLPanelSnapshot::onOpen(key); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index df2da12045..47787e2687 100755 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -5957,7 +5957,7 @@ void handle_facebook_connect() { if (!LLFacebookConnect::instance().isConnected()) { - LLFacebookConnect::instance().getConnectionToFacebook(); + LLFacebookConnect::instance().getConnectionToFacebook(true); } } -- cgit v1.2.3 From 06f0e4161b3c735678f9ace02d659cc838afc1d8 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Thu, 27 Jun 2013 18:30:27 -0700 Subject: ACME-629 Clean up names of variables and functions used in the Facebook photo panel --- indra/newview/llfloatersocial.cpp | 385 +++++++++++++++++++------------------- indra/newview/llfloatersocial.h | 39 ++-- 2 files changed, 214 insertions(+), 210 deletions(-) diff --git a/indra/newview/llfloatersocial.cpp b/indra/newview/llfloatersocial.cpp index 35761d5cc8..dfc9024d54 100644 --- a/indra/newview/llfloatersocial.cpp +++ b/indra/newview/llfloatersocial.cpp @@ -64,6 +64,10 @@ std::string get_map_url() return map_url; } +/////////////////////////// +//LLSocialStatusPanel////// +/////////////////////////// + LLSocialStatusPanel::LLSocialStatusPanel() : mMessageTextEditor(NULL), mPostStatusButton(NULL) @@ -108,12 +112,21 @@ void LLSocialStatusPanel::onSend() } } +/////////////////////////// +//LLSocialPhotoPanel/////// +/////////////////////////// + LLSocialPhotoPanel::LLSocialPhotoPanel() : +mSnapshotPanel(NULL), +mResolutionComboBox(NULL), mRefreshBtn(NULL), mRefreshLabel(NULL), mSucceessLblPanel(NULL), mFailureLblPanel(NULL), -mThumbnailPlaceholder(NULL) +mThumbnailPlaceholder(NULL), +mCaptionTextBox(NULL), +mLocationCheckbox(NULL), +mPostButton(NULL) { mCommitCallbackRegistrar.add("PostToFacebook.Send", boost::bind(&LLSocialPhotoPanel::onSend, this)); } @@ -129,179 +142,21 @@ LLSocialPhotoPanel::~LLSocialPhotoPanel() BOOL LLSocialPhotoPanel::postBuild() { setVisibleCallback(boost::bind(&LLSocialPhotoPanel::onVisibilityChange, this, _2)); - - mPostButton = getChild("post_btn"); + + mSnapshotPanel = getChild("snapshot_panel"); mResolutionComboBox = getChild("resolution_combobox"); - mResolutionComboBox->setCommitCallback(boost::bind(&LLSocialPhotoPanel::onResolutionComboCommit, this)); + mResolutionComboBox->setCommitCallback(boost::bind(&LLSocialPhotoPanel::updateResolution, this, TRUE)); mRefreshBtn = getChild("new_snapshot_btn"); childSetAction("new_snapshot_btn", boost::bind(&LLSocialPhotoPanel::onClickNewSnapshot, this)); mRefreshLabel = getChild("refresh_lbl"); mSucceessLblPanel = getChild("succeeded_panel"); mFailureLblPanel = getChild("failed_panel"); mThumbnailPlaceholder = getChild("thumbnail_placeholder"); - - return LLPanel::postBuild(); -} - -void LLSocialPhotoPanel::onResolutionComboCommit() -{ - LLFloaterSocial* instance = LLFloaterReg::findTypedInstance("social"); - updateResolution(mResolutionComboBox, instance); -} - -void LLSocialPhotoPanel::onClickNewSnapshot() -{ - LLSnapshotLivePreview* previewp = static_cast(mPreviewHandle.get()); - //LLFloaterSnapshot *view = (LLFloaterSnapshot *)data; - if (previewp /*&& view*/) - { - //view->impl.setStatus(Impl::STATUS_READY); - lldebugs << "updating snapshot" << llendl; - previewp->updateSnapshot(TRUE); - } -} - -void LLSocialPhotoPanel::updateResolution(LLUICtrl* ctrl, void* data, BOOL do_update) -{ - LLComboBox* combobox = (LLComboBox*)ctrl; - LLFloaterSnapshot *view = (LLFloaterSnapshot *)data; - - if (!view || !combobox) - { - llassert(view && combobox); - return; - } - - std::string sdstring = combobox->getSelectedValue(); - LLSD sdres; - std::stringstream sstream(sdstring); - LLSDSerialize::fromNotation(sdres, sstream, sdstring.size()); - - S32 width = sdres[0]; - S32 height = sdres[1]; - - LLSnapshotLivePreview * previewp = static_cast(mPreviewHandle.get()); - if (previewp && combobox->getCurrentIndex() >= 0) - { - S32 original_width = 0 , original_height = 0 ; - previewp->getSize(original_width, original_height) ; - - if (width == 0 || height == 0) - { - // take resolution from current window size - lldebugs << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << llendl; - previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw()); - } - else - { - // use the resolution from the selected pre-canned drop-down choice - lldebugs << "Setting preview res selected from combo: " << width << "x" << height << llendl; - previewp->setSize(width, height); - } - - checkAspectRatio(width); - - previewp->getSize(width, height); - - if(original_width != width || original_height != height) - { - previewp->setSize(width, height); - - // hide old preview as the aspect ratio could be wrong - lldebugs << "updating thumbnail" << llendl; - - previewp->updateSnapshot(FALSE, TRUE); - if(do_update) - { - lldebugs << "Will update controls" << llendl; - updateControls(); - setNeedRefresh(true); - } - } - - } -} - -void LLSocialPhotoPanel::setNeedRefresh(bool need) -{ - mRefreshLabel->setVisible(need); - mNeedRefresh = need; -} - -void LLSocialPhotoPanel::checkAspectRatio(S32 index) -{ - LLSnapshotLivePreview *previewp = getPreviewView() ; - - BOOL keep_aspect = FALSE; - - if (0 == index) // current window size - { - keep_aspect = TRUE; - } - else // predefined resolution - { - keep_aspect = FALSE; - } - - if (previewp) - { - previewp->mKeepAspectRatio = keep_aspect; - } -} - -LLSnapshotLivePreview* LLSocialPhotoPanel::getPreviewView() -{ - LLSnapshotLivePreview* previewp = (LLSnapshotLivePreview*)mPreviewHandle.get(); - return previewp; -} - -void LLSocialPhotoPanel::updateControls() -{ - LLSnapshotLivePreview* previewp = getPreviewView(); - BOOL got_bytes = previewp && previewp->getDataSize() > 0; - BOOL got_snap = previewp && previewp->getSnapshotUpToDate(); - LLSnapshotLivePreview::ESnapshotType shot_type = previewp->getSnapshotType(); - - // *TODO: Separate maximum size for Web images from postcards - lldebugs << "Is snapshot up-to-date? " << got_snap << llendl; - - LLLocale locale(LLLocale::USER_LOCALE); - std::string bytes_string; - if (got_snap) - { - LLResMgr::getInstance()->getIntegerString(bytes_string, (previewp->getDataSize()) >> 10 ); - } - - //getChild("file_size_label")->setTextArg("[SIZE]", got_snap ? bytes_string : getString("unknown")); - getChild("file_size_label")->setTextArg("[SIZE]", got_snap ? bytes_string : "unknown"); - getChild("file_size_label")->setColor( - shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD - && got_bytes - && previewp->getDataSize() > MAX_POSTCARD_DATASIZE ? LLUIColor(LLColor4::red) : LLUIColorTable::instance().getColor( "LabelTextColor" )); - - LLComboBox* combo = getChild("resolution_combobox"); - LLFloaterSocial* instance = LLFloaterReg::findTypedInstance("social"); - updateResolution(combo, instance, FALSE); -} - -void LLSocialPhotoPanel::onVisibilityChange(const LLSD& new_visibility) -{ - bool visible = new_visibility.asBoolean(); - if (visible && !mPreviewHandle.get()) - { - LLRect full_screen_rect = getRootView()->getRect(); - LLSnapshotLivePreview::Params p; - p.rect(full_screen_rect); - LLSnapshotLivePreview* previewp = new LLSnapshotLivePreview(p); - mPreviewHandle = previewp->getHandle(); - - previewp->setSnapshotType(previewp->SNAPSHOT_WEB); - previewp->setSnapshotFormat(LLFloaterSnapshot::SNAPSHOT_FORMAT_JPEG); - //previewp->setSnapshotQuality(98); - previewp->setThumbnailPlaceholderRect(getThumbnailPlaceholderRect()); + mCaptionTextBox = getChild("caption"); + mLocationCheckbox = getChild("add_location_cb"); + mPostButton = getChild("post_btn"); - updateControls(); - } + return LLPanel::postBuild(); } void LLSocialPhotoPanel::draw() @@ -313,7 +168,7 @@ void LLSocialPhotoPanel::draw() if(previewp && previewp->getThumbnailImage()) { bool working = false; //impl.getStatus() == Impl::STATUS_WORKING; - const LLRect& thumbnail_rect = getThumbnailPlaceholderRect(); + const LLRect& thumbnail_rect = mThumbnailPlaceholder->getRect(); const S32 thumbnail_w = previewp->getThumbnailWidth(); const S32 thumbnail_h = previewp->getThumbnailHeight(); @@ -325,8 +180,7 @@ void LLSocialPhotoPanel::draw() S32 offset_x = thumbnail_rect.mLeft + local_offset_x; S32 offset_y = thumbnail_rect.mBottom + local_offset_y; - LLUICtrl * snapshot_panel = getChild("snapshot_panel"); - snapshot_panel->localPointToOtherView(offset_x, offset_y, &offset_x, &offset_y, gFloaterView->getParentFloater(this)); + mSnapshotPanel->localPointToOtherView(offset_x, offset_y, &offset_x, &offset_y, getParentByType()); gGL.matrixMode(LLRender::MM_MODELVIEW); // Apply floater transparency to the texture unless the floater is focused. @@ -373,20 +227,57 @@ void LLSocialPhotoPanel::draw() gGL.pushUIMatrix(); S32 x_pos; S32 y_pos; - snapshot_panel->localPointToOtherView(thumbnail_rect.mLeft, thumbnail_rect.mBottom, &x_pos, &y_pos, gFloaterView->getParentFloater(this)); - + mSnapshotPanel->localPointToOtherView(thumbnail_rect.mLeft, thumbnail_rect.mBottom, &x_pos, &y_pos, getParentByType()); + LLUI::translate((F32) x_pos, (F32) y_pos); mThumbnailPlaceholder->draw(); gGL.popUIMatrix(); } - mPostButton->setEnabled(LLFacebookConnect::instance().isConnected()); + mPostButton->setEnabled(LLFacebookConnect::instance().isConnected()); +} + +LLSnapshotLivePreview* LLSocialPhotoPanel::getPreviewView() +{ + LLSnapshotLivePreview* previewp = (LLSnapshotLivePreview*)mPreviewHandle.get(); + return previewp; +} + +void LLSocialPhotoPanel::onVisibilityChange(const LLSD& new_visibility) +{ + bool visible = new_visibility.asBoolean(); + if (visible && !mPreviewHandle.get()) + { + LLRect full_screen_rect = getRootView()->getRect(); + LLSnapshotLivePreview::Params p; + p.rect(full_screen_rect); + LLSnapshotLivePreview* previewp = new LLSnapshotLivePreview(p); + mPreviewHandle = previewp->getHandle(); + + previewp->setSnapshotType(previewp->SNAPSHOT_WEB); + previewp->setSnapshotFormat(LLFloaterSnapshot::SNAPSHOT_FORMAT_JPEG); + //previewp->setSnapshotQuality(98); + previewp->setThumbnailPlaceholderRect(mThumbnailPlaceholder->getRect()); + + updateControls(); + } +} + +void LLSocialPhotoPanel::onClickNewSnapshot() +{ + LLSnapshotLivePreview* previewp = getPreviewView(); + if (previewp) + { + //setStatus(Impl::STATUS_READY); + lldebugs << "updating snapshot" << llendl; + previewp->updateSnapshot(TRUE); + } } void LLSocialPhotoPanel::onSend() { - std::string caption = getChild("caption")->getValue().asString(); - bool add_location = getChild("add_location_cb")->getValue().asBoolean(); + std::string caption = mCaptionTextBox->getValue().asString(); + bool add_location = mLocationCheckbox->getValue().asBoolean(); if (add_location) { @@ -399,7 +290,6 @@ void LLSocialPhotoPanel::onSend() } LLSnapshotLivePreview* previewp = getPreviewView(); - LLFacebookConnect::instance().sharePhoto(previewp->getFormattedImage(), caption); updateControls(); @@ -411,6 +301,122 @@ void LLSocialPhotoPanel::onSend() } } +void LLSocialPhotoPanel::updateControls() +{ + LLSnapshotLivePreview* previewp = getPreviewView(); + BOOL got_bytes = previewp && previewp->getDataSize() > 0; + BOOL got_snap = previewp && previewp->getSnapshotUpToDate(); + LLSnapshotLivePreview::ESnapshotType shot_type = previewp->getSnapshotType(); + + // *TODO: Separate maximum size for Web images from postcards + lldebugs << "Is snapshot up-to-date? " << got_snap << llendl; + + LLLocale locale(LLLocale::USER_LOCALE); + std::string bytes_string; + if (got_snap) + { + LLResMgr::getInstance()->getIntegerString(bytes_string, (previewp->getDataSize()) >> 10 ); + } + + //getChild("file_size_label")->setTextArg("[SIZE]", got_snap ? bytes_string : getString("unknown")); <---uses localized string + getChild("file_size_label")->setTextArg("[SIZE]", got_snap ? bytes_string : "unknown"); + getChild("file_size_label")->setColor( + shot_type == LLSnapshotLivePreview::SNAPSHOT_POSTCARD + && got_bytes + && previewp->getDataSize() > MAX_POSTCARD_DATASIZE ? LLUIColor(LLColor4::red) : LLUIColorTable::instance().getColor( "LabelTextColor" )); + + updateResolution(FALSE); +} + +void LLSocialPhotoPanel::updateResolution(BOOL do_update) +{ + LLComboBox* combobox = static_cast(mResolutionComboBox); + + std::string sdstring = combobox->getSelectedValue(); + LLSD sdres; + std::stringstream sstream(sdstring); + LLSDSerialize::fromNotation(sdres, sstream, sdstring.size()); + + S32 width = sdres[0]; + S32 height = sdres[1]; + + LLSnapshotLivePreview * previewp = static_cast(mPreviewHandle.get()); + if (previewp && combobox->getCurrentIndex() >= 0) + { + S32 original_width = 0 , original_height = 0 ; + previewp->getSize(original_width, original_height) ; + + if (width == 0 || height == 0) + { + // take resolution from current window size + lldebugs << "Setting preview res from window: " << gViewerWindow->getWindowWidthRaw() << "x" << gViewerWindow->getWindowHeightRaw() << llendl; + previewp->setSize(gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw()); + } + else + { + // use the resolution from the selected pre-canned drop-down choice + lldebugs << "Setting preview res selected from combo: " << width << "x" << height << llendl; + previewp->setSize(width, height); + } + + checkAspectRatio(width); + + previewp->getSize(width, height); + + if(original_width != width || original_height != height) + { + previewp->setSize(width, height); + + // hide old preview as the aspect ratio could be wrong + lldebugs << "updating thumbnail" << llendl; + + previewp->updateSnapshot(FALSE, TRUE); + if(do_update) + { + lldebugs << "Will update controls" << llendl; + updateControls(); + setNeedRefresh(true); + } + } + + } +} + +void LLSocialPhotoPanel::checkAspectRatio(S32 index) +{ + LLSnapshotLivePreview *previewp = getPreviewView() ; + + BOOL keep_aspect = FALSE; + + if (0 == index) // current window size + { + keep_aspect = TRUE; + } + else // predefined resolution + { + keep_aspect = FALSE; + } + + if (previewp) + { + previewp->mKeepAspectRatio = keep_aspect; + } +} + +void LLSocialPhotoPanel::setNeedRefresh(bool need) +{ + mRefreshLabel->setVisible(need); + mNeedRefresh = need; +} + +LLUICtrl* LLSocialPhotoPanel::getRefreshBtn() +{ + return mRefreshBtn; +} + +//////////////////////// +//LLSocialCheckinPanel// +//////////////////////// LLSocialCheckinPanel::LLSocialCheckinPanel() : mMapUrl(""), @@ -501,6 +507,9 @@ void LLSocialCheckinPanel::onSend() } } +//////////////////////// +//LLFloaterSocial/////// +//////////////////////// LLFloaterSocial::LLFloaterSocial(const LLSD& key) : LLFloater(key), mSocialPhotoPanel(NULL) @@ -522,15 +531,9 @@ BOOL LLFloaterSocial::postBuild() return LLFloater::postBuild(); } -/*virtual*/ -void LLFloaterSocial::draw() -{ - LLFloater::draw(); -} - void LLFloaterSocial::onOpen(const LLSD& key) { - LLSnapshotLivePreview* preview = static_cast(mSocialPhotoPanel->mPreviewHandle.get()); + LLSnapshotLivePreview* preview = mSocialPhotoPanel->getPreviewView(); if(preview) { lldebugs << "opened, updating snapshot" << llendl; @@ -541,14 +544,13 @@ void LLFloaterSocial::onOpen(const LLSD& key) // static void LLFloaterSocial::preUpdate() { - // FIXME: duplicated code LLFloaterSocial* instance = LLFloaterReg::findTypedInstance("social"); if (instance) { - // Disable the send/post/save buttons until snapshot is ready. + //Will set file size text to 'unknown' instance->mSocialPhotoPanel->updateControls(); - // Force hiding the "Refresh to save" hint because we know we've just started refresh. + //Hides the refresh text instance->mSocialPhotoPanel->setNeedRefresh(false); } } @@ -556,21 +558,22 @@ void LLFloaterSocial::preUpdate() // static void LLFloaterSocial::postUpdate() { - // FIXME: duplicated code LLFloaterSocial* instance = LLFloaterReg::findTypedInstance("social"); if (instance) { - // Enable the send/post/save buttons. + //Will set the file size text instance->mSocialPhotoPanel->updateControls(); - // We've just done refresh. + //Hides the refresh text instance->mSocialPhotoPanel->setNeedRefresh(false); // The refresh button is initially hidden. We show it after the first update, - // i.e. when preview appears. - if (!instance->mSocialPhotoPanel->mRefreshBtn->getVisible()) + // i.e. after snapshot is taken + LLUICtrl * refresh_button = instance->mSocialPhotoPanel->getRefreshBtn(); + + if (!refresh_button->getVisible()) { - instance->mSocialPhotoPanel->mRefreshBtn->setVisible(true); + refresh_button->setVisible(true); } } diff --git a/indra/newview/llfloatersocial.h b/indra/newview/llfloatersocial.h index 6675a990f4..95ba688430 100644 --- a/indra/newview/llfloatersocial.h +++ b/indra/newview/llfloatersocial.h @@ -50,37 +50,40 @@ private: class LLSocialPhotoPanel : public LLPanel { - public: +public: LLSocialPhotoPanel(); ~LLSocialPhotoPanel(); BOOL postBuild(); void draw(); - void onSend(); - const LLRect& getThumbnailPlaceholderRect() { return mThumbnailPlaceholder->getRect(); } - void onResolutionComboCommit(); + LLSnapshotLivePreview* getPreviewView(); + void onVisibilityChange(const LLSD& new_visibility); void onClickNewSnapshot(); + void onSend(); - LLHandle mPreviewHandle; - - void updateResolution(LLUICtrl* ctrl, void* data, BOOL do_update = TRUE); - void setNeedRefresh(bool need); + void updateControls(); + void updateResolution(BOOL do_update); void checkAspectRatio(S32 index); - LLSnapshotLivePreview* getPreviewView(); + void setNeedRefresh(bool need); + LLUICtrl* getRefreshBtn(); - void updateControls(); - void onVisibilityChange(const LLSD& new_visibility); +private: + + LLHandle mPreviewHandle; + LLUICtrl * mSnapshotPanel; LLUICtrl * mResolutionComboBox; - LLUICtrl *mRefreshBtn, *mRefreshLabel; - LLUICtrl *mSucceessLblPanel, *mFailureLblPanel; - LLUICtrl* mThumbnailPlaceholder; + LLUICtrl * mRefreshBtn; + LLUICtrl * mRefreshLabel; + LLUICtrl * mSucceessLblPanel; + LLUICtrl * mFailureLblPanel; + LLUICtrl * mThumbnailPlaceholder; + LLUICtrl * mCaptionTextBox; + LLUICtrl * mLocationCheckbox; + LLUICtrl * mPostButton; bool mNeedRefresh; - -private: - LLUICtrl* mPostButton; }; class LLSocialCheckinPanel : public LLPanel @@ -108,8 +111,6 @@ public: BOOL postBuild(); void onCancel(); void onOpen(const LLSD& key); - /*virtual*/ void draw(); - static void preUpdate(); static void postUpdate(); -- cgit v1.2.3 From 7d17bbe132cf0f799b703bba978d48d44a1377c4 Mon Sep 17 00:00:00 2001 From: Cho Date: Fri, 28 Jun 2013 19:26:07 +0100 Subject: removed unused Me menu items for ACME-637 --- indra/newview/llfloatersocial.cpp | 2 +- indra/newview/llviewermenu.cpp | 60 ---------------------- indra/newview/llviewermenu.h | 9 ---- indra/newview/skins/default/xui/en/menu_viewer.xml | 20 -------- .../newview/skins/default/xui/en/notifications.xml | 21 -------- .../default/xui/en/panel_snapshot_facebook.xml | 4 +- 6 files changed, 3 insertions(+), 113 deletions(-) diff --git a/indra/newview/llfloatersocial.cpp b/indra/newview/llfloatersocial.cpp index dfc9024d54..d6c00b7c86 100644 --- a/indra/newview/llfloatersocial.cpp +++ b/indra/newview/llfloatersocial.cpp @@ -128,7 +128,7 @@ mCaptionTextBox(NULL), mLocationCheckbox(NULL), mPostButton(NULL) { - mCommitCallbackRegistrar.add("PostToFacebook.Send", boost::bind(&LLSocialPhotoPanel::onSend, this)); + mCommitCallbackRegistrar.add("SocialSharing.SendPhoto", boost::bind(&LLSocialPhotoPanel::onSend, this)); } LLSocialPhotoPanel::~LLSocialPhotoPanel() diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 47787e2687..137eeb6a99 100755 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -5953,56 +5953,6 @@ void handle_report_abuse() LLFloaterReporter::showFromMenu(COMPLAINT_REPORT); } -void handle_facebook_connect() -{ - if (!LLFacebookConnect::instance().isConnected()) - { - LLFacebookConnect::instance().getConnectionToFacebook(true); - } -} - -bool enable_facebook_connect() -{ - // The menu item will be disabled if we are already connected - return !LLFacebookConnect::instance().isConnected(); -} - -void handle_facebook_checkin() -{ - - // Get the location SLURL - LLSLURL slurl; - LLAgentUI::buildSLURL(slurl); - std::string slurl_string = slurl.getSLURLString(); - - std::string region_name = gAgent.getRegion()->getName(); - std::string description; - LLAgentUI::buildLocationString(description, LLAgentUI::LOCATION_FORMAT_NORMAL_COORDS, gAgent.getPositionAgent()); - LLVector3d center_agent = gAgent.getRegion()->getCenterGlobal(); - int x_pos = center_agent[0] / 256.0; - int y_pos = center_agent[1] / 256.0; - std::string locationMap = llformat("http://map.secondlife.com/map-1-%d-%d-objects.jpg", x_pos, y_pos); - - LLFacebookConnect::instance().postCheckin(slurl_string, region_name, description, locationMap, ""); -} - -bool handle_facebook_status_callback(const LLSD& notification, const LLSD& response) -{ - S32 option = LLNotificationsUtil::getSelectedOption(notification, response); - if (option == 0) - { - std::string message = response["message"].asString(); - if (!message.empty()) - LLFacebookConnect::instance().updateStatus(message); - } - return false; -} - -void handle_facebook_status() -{ - LLNotificationsUtil::add("FacebookUpdateStatus", LLSD(), LLSD(), boost::bind(&handle_facebook_status_callback, _1, _2)); -} - void handle_buy_currency() { LLBuyCurrencyHTML::openCurrencyFloater(); @@ -8801,14 +8751,4 @@ void initialize_menus() view_listener_t::addMenu(new LLEditableSelected(), "EditableSelected"); view_listener_t::addMenu(new LLEditableSelectedMono(), "EditableSelectedMono"); view_listener_t::addMenu(new LLToggleUIHints(), "ToggleUIHints"); - - // Facebook Connect - commit.add("Facebook.Connect", boost::bind(&handle_facebook_connect)); - enable.add("Facebook.EnableConnect", boost::bind(&enable_facebook_connect)); - - // Facebook Checkin - commit.add("Facebook.Checkin", boost::bind(&handle_facebook_checkin)); - - // Facebook Status Update - commit.add("Facebook.UpdateStatus", boost::bind(&handle_facebook_status)); } diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h index e71beef10d..143420e227 100755 --- a/indra/newview/llviewermenu.h +++ b/indra/newview/llviewermenu.h @@ -135,15 +135,6 @@ bool enable_pay_object(); bool enable_buy_object(); bool handle_go_to(); -// Facebook Connect -void handle_facebook_connect(); - -// Facebook Checkin -void handle_facebook_checkin(); - -// Facebook Status Update -void handle_facebook_status(); - // Export to XML or Collada void handle_export_selected( void * ); diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 733eb16c54..6da4b3d234 100755 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -15,26 +15,6 @@ function="ShowAgentProfile" parameter="agent" /> - - - - - - - - - - diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 5f4869e110..c8911e47e8 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -10135,25 +10135,4 @@ Cannot create large prims that intersect other players. Please re-try when othe yestext="OK"/> - - What's on your mind? (asks Facebook) - confirm -
- - -
-- cgit v1.2.3 From 89ae19e57edc9abfd300b17caf2719d7794dabf9 Mon Sep 17 00:00:00 2001 From: Cho Date: Fri, 28 Jun 2013 20:19:17 +0100 Subject: removed old error popups and added better logging for ACME-653 --- indra/newview/llfacebookconnect.cpp | 29 ++++++---------------- .../newview/skins/default/xui/en/notifications.xml | 11 -------- 2 files changed, 8 insertions(+), 32 deletions(-) diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp index 52268daa36..dc450aab7a 100644 --- a/indra/newview/llfacebookconnect.cpp +++ b/indra/newview/llfacebookconnect.cpp @@ -41,19 +41,12 @@ // Local functions -void prompt_user_for_error(U32 status, const std::string& reason, const std::string& code, const std::string& description) +void log_facebook_connect_error(const std::string& request, U32 status, const std::string& reason, const std::string& code, const std::string& description) { - // Note: 302 (redirect) is *not* an error that warrants prompting the user + // Note: 302 (redirect) is *not* an error that warrants logging if (status != 302) { - LLSD args(LLSD::emptyMap()); - std::stringstream msg; - msg << status; - args["STATUS"] = msg.str(); - args["REASON"] = reason; - args["CODE"] = code; - args["DESCRIPTION"] = description; - LLNotificationsUtil::add("FacebookCannotConnect", args); + LL_WARNS("FacebookConnect") << request << " request failed with a " << status << " " << reason << ". Reason: " << code << "(" << description << ")" << LL_ENDL; } } @@ -113,8 +106,7 @@ public: else { LLFacebookConnect::instance().setConnectionState(LLFacebookConnect::FB_CONNECTION_FAILED); - prompt_user_for_error(status, reason, content.get("error_code"), content.get("error_description")); - LL_WARNS("FacebookConnect") << "Failed to get a response. reason: " << reason << " status: " << status << LL_ENDL; + log_facebook_connect_error("Connect", status, reason, content.get("error_code"), content.get("error_description")); } } @@ -147,8 +139,7 @@ public: } else { - prompt_user_for_error(status, reason, content.get("error_code"), content.get("error_description")); - LL_WARNS("FacebookConnect") << "Failed to get a post response. reason: " << reason << " status: " << status << LL_ENDL; + log_facebook_connect_error("Share", status, reason, content.get("error_code"), content.get("error_description")); } if (mShareCallback) @@ -188,8 +179,7 @@ public: } else { - prompt_user_for_error(status, reason, content.get("error_code"), content.get("error_description")); - LL_WARNS("FacebookConnect") << "Failed to get a response. reason: " << reason << " status: " << status << LL_ENDL; + log_facebook_connect_error("Disconnect", status, reason, content.get("error_code"), content.get("error_description")); } } }; @@ -218,8 +208,6 @@ public: } else { - LL_WARNS("FacebookConnect") << "Failed to get a response. reason: " << reason << " status: " << status << LL_ENDL; - // show the facebook login page if not connected yet if (status == 404) { @@ -235,7 +223,7 @@ public: else { LLFacebookConnect::instance().setConnectionState(LLFacebookConnect::FB_CONNECTION_FAILED); - prompt_user_for_error(status, reason, content.get("error_code"), content.get("error_description")); + log_facebook_connect_error("Connected", status, reason, content.get("error_code"), content.get("error_description")); } } } @@ -261,8 +249,7 @@ public: } else { - prompt_user_for_error(status, reason, content.get("error_code"), content.get("error_description")); - LL_WARNS("FacebookConnect") << "Failed to get a response. reason: " << reason << " status: " << status << LL_ENDL; + log_facebook_connect_error("Friends", status, reason, content.get("error_code"), content.get("error_description")); } } diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index c8911e47e8..1f20d3ab58 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -5439,17 +5439,6 @@ This day cycle file references a missing sky file: [SKY]. Sorry, the settings couldn't be applied to the region. Leaving the region and then returning may help rectify the problem. The reason given was: [FAIL_REASON]
- -Connection to Facebook failed. Reason: [STATUS] [REASON] ([CODE] - [DESCRIPTION]) - - - Date: Fri, 28 Jun 2013 13:48:44 -0700 Subject: ACME-638: Removed LLSocialList class and FBC Test tab in the People panel. --- indra/newview/CMakeLists.txt | 2 - indra/newview/llpanelpeople.cpp | 32 ----- indra/newview/llpanelpeople.h | 2 - indra/newview/llsociallist.cpp | 154 --------------------- indra/newview/llsociallist.h | 102 -------------- .../newview/skins/default/xui/en/panel_people.xml | 95 ------------- 6 files changed, 387 deletions(-) delete mode 100644 indra/newview/llsociallist.cpp delete mode 100644 indra/newview/llsociallist.h diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index a5ad2e4d4e..f593375aed 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -513,7 +513,6 @@ set(viewer_SOURCE_FILES llsky.cpp llslurl.cpp llsnapshotlivepreview.cpp - llsociallist.cpp llspatialpartition.cpp llspeakers.cpp llspeakingindicatormanager.cpp @@ -1092,7 +1091,6 @@ set(viewer_HEADER_FILES llsky.h llslurl.h llsnapshotlivepreview.h - llsociallist.h llspatialpartition.h llspeakers.h llspeakingindicatormanager.h diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 92391f0537..d3493373f6 100755 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -72,7 +72,6 @@ #include "llviewermenu.h" // for gMenuHolder #include "llvoiceclient.h" #include "llworld.h" -#include "llsociallist.h" #include "llspeakers.h" #include "llfloaterwebcontent.h" @@ -87,7 +86,6 @@ static const std::string FRIENDS_TAB_NAME = "friends_panel"; static const std::string GROUP_TAB_NAME = "groups_panel"; static const std::string RECENT_TAB_NAME = "recent_panel"; static const std::string BLOCKED_TAB_NAME = "blocked_panel"; // blocked avatars -static const std::string FBCTEST_TAB_NAME = "fbctest_panel"; static const std::string FBCTESTTWO_TAB_NAME = "fbctesttwo_panel"; static const std::string COLLAPSED_BY_USER = "collapsed_by_user"; @@ -528,7 +526,6 @@ LLPanelPeople::LLPanelPeople() mCommitCallbackRegistrar.add("People.loginFBC", boost::bind(&LLPanelPeople::onLoginFbcButtonClicked, this)); mCommitCallbackRegistrar.add("People.requestFBC", boost::bind(&LLPanelPeople::onFacebookAppRequestClicked, this)); mCommitCallbackRegistrar.add("People.sendFBC", boost::bind(&LLPanelPeople::onFacebookAppSendClicked, this)); - mCommitCallbackRegistrar.add("People.testaddFBC", boost::bind(&LLPanelPeople::onFacebookTestAddClicked, this)); mCommitCallbackRegistrar.add("People.testaddFBCFolderView", boost::bind(&LLPanelPeople::addTestParticipant, this)); mCommitCallbackRegistrar.add("People.AddFriend", boost::bind(&LLPanelPeople::onAddFriendButtonClicked, this)); @@ -648,13 +645,6 @@ BOOL LLPanelPeople::postBuild() mOnlineFriendList->setContextMenu(&LLPanelPeopleMenus::gPeopleContextMenu); mSuggestedFriends->setContextMenu(&LLPanelPeopleMenus::gSuggestedFriendsContextMenu); - //===Temporary ======================================================================== - - LLPanel * social_tab = getChild(FBCTEST_TAB_NAME); - mFacebookFriends = social_tab->getChild("facebook_friends"); - // Note: we use the same updater for both test lists (brute force but OK since it's temporary) - social_tab->setVisibleCallback(boost::bind(&LLPanelPeople::updateFacebookList, this, _2)); - //===Test START======================================================================== LLPanel * socialtwo_tab = getChild(FBCTESTTWO_TAB_NAME); @@ -1025,8 +1015,6 @@ LLUUID LLPanelPeople::getCurrentItemID() const if (cur_tab == BLOCKED_TAB_NAME) return LLUUID::null; // FIXME? - if (cur_tab == FBCTEST_TAB_NAME) - return LLUUID::null; if (cur_tab == FBCTESTTWO_TAB_NAME) return LLUUID::null; @@ -1054,8 +1042,6 @@ void LLPanelPeople::getCurrentItemIDs(uuid_vec_t& selected_uuids) const mGroupList->getSelectedUUIDs(selected_uuids); else if (cur_tab == BLOCKED_TAB_NAME) selected_uuids.clear(); // FIXME? - else if (cur_tab == FBCTEST_TAB_NAME) - return; else if (cur_tab == FBCTESTTWO_TAB_NAME) return; else @@ -1695,22 +1681,4 @@ void LLPanelPeople::onFacebookAppSendClicked() { } -static LLFastTimer::DeclareTimer FTM_AVATAR_LIST_TEST("avatar list test"); - -void LLPanelPeople::onFacebookTestAddClicked() -{ - LLFastTimer _(FTM_AVATAR_LIST_TEST); - - mFacebookFriends->clear(); - - LL_INFOS("LLPanelPeople") << "start adding 300 users" << LL_ENDL; - - for(int i = 0; i < 300; ++i) - { - mFacebookFriends->addNewItem(LLUUID(), "Test", false); - } - - LL_INFOS("LLPanelPeople") << "finished adding 300 users" << LL_ENDL; -} - // EOF diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index 1cd2a05e91..cbfd74a2a0 100755 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -35,7 +35,6 @@ #include "llvoiceclient.h" class LLAvatarList; -class LLAvatarListSocial; class LLAvatarName; class LLFilterEditor; class LLGroupList; @@ -123,7 +122,6 @@ private: void onLoginFbcButtonClicked(); void onFacebookAppRequestClicked(); void onFacebookAppSendClicked(); - void onFacebookTestAddClicked(); bool onFriendsViewSortMenuItemCheck(const LLSD& userdata); bool onRecentViewSortMenuItemCheck(const LLSD& userdata); diff --git a/indra/newview/llsociallist.cpp b/indra/newview/llsociallist.cpp deleted file mode 100644 index 9f827cf04f..0000000000 --- a/indra/newview/llsociallist.cpp +++ /dev/null @@ -1,154 +0,0 @@ -/** -* @file llsociallist.cpp -* @brief Implementation of llsociallist -* @author Gilbert@lindenlab.com -* -* $LicenseInfo:firstyear=2013&license=viewerlgpl$ -* Second Life Viewer Source Code -* Copyright (C) 2013, Linden Research, Inc. -* -* This library is free software; you can redistribute it and/or -* modify it under the terms of the GNU Lesser General Public -* License as published by the Free Software Foundation; -* version 2.1 of the License only. -* -* This library is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public -* License along with this library; if not, write to the Free Software -* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -* -* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA -* $/LicenseInfo$ -*/ - - -#include "llviewerprecompiledheaders.h" - -#include "llsociallist.h" - -#include "llavataractions.h" -#include "llfloaterreg.h" -#include "llavatariconctrl.h" -#include "llavatarnamecache.h" -#include "lloutputmonitorctrl.h" -#include "lltextutil.h" - -static LLDefaultChildRegistry::Register r("social_list"); - -LLSocialList::LLSocialList(const Params&p) : LLFlatListViewEx(p) -{ - -} - -LLSocialList::~LLSocialList() -{ - -} - -void LLSocialList::draw() -{ - LLFlatListView::draw(); -} - -void LLSocialList::refresh() -{ - -} - -void LLSocialList::addNewItem(const LLUUID& id, const std::string& name, BOOL is_online, EAddPosition pos) -{ - LLSocialListItem * item = new LLSocialListItem(); - LLAvatarName avatar_name; - bool has_avatar_name = id.notNull() && LLAvatarNameCache::get(id, &avatar_name); - - item->mAvatarId = id; - if(id.notNull()) - { - item->mIcon->setValue(id); - } - - item->setName(has_avatar_name ? name + " (" + avatar_name.getDisplayName() + ")" : name, mNameFilter); - addItem(item, id, pos); -} - -LLSocialListItem::LLSocialListItem() -{ - buildFromFile("panel_avatar_list_item.xml"); -} - -LLSocialListItem::~LLSocialListItem() -{ - -} - -BOOL LLSocialListItem::postBuild() -{ - mIcon = getChild("avatar_icon"); - mLabelTextBox = getChild("avatar_name"); - - mLastInteractionTime = getChild("last_interaction"); - mIconPermissionOnline = getChild("permission_online_icon"); - mIconPermissionMap = getChild("permission_map_icon"); - mIconPermissionEditMine = getChild("permission_edit_mine_icon"); - mIconPermissionEditTheirs = getChild("permission_edit_theirs_icon"); - mSpeakingIndicator = getChild("speaking_indicator"); - mInfoBtn = getChild("info_btn"); - mProfileBtn = getChild("profile_btn"); - - mLastInteractionTime->setVisible(false); - mIconPermissionOnline->setVisible(false); - mIconPermissionMap->setVisible(false); - mIconPermissionEditMine->setVisible(false); - mIconPermissionEditTheirs->setVisible(false); - mSpeakingIndicator->setVisible(false); - mInfoBtn->setVisible(false); - mProfileBtn->setVisible(false); - - mInfoBtn->setClickedCallback(boost::bind(&LLSocialListItem::onInfoBtnClick, this)); - mProfileBtn->setClickedCallback(boost::bind(&LLSocialListItem::onProfileBtnClick, this)); - - return TRUE; -} - -void LLSocialListItem::setName(const std::string& name, const std::string& highlight) -{ - mLabel = name; - LLTextUtil::textboxSetHighlightedVal(mLabelTextBox, mLabelTextBoxStyle, name, highlight); -} - -void LLSocialListItem::setValue(const LLSD& value) -{ - getChildView("selected_icon")->setVisible( value["selected"]); -} - -void LLSocialListItem::onMouseEnter(S32 x, S32 y, MASK mask) -{ - getChildView("hovered_icon")->setVisible( true); - mInfoBtn->setVisible(true); - mProfileBtn->setVisible(true); - - LLPanel::onMouseEnter(x, y, mask); -} - -void LLSocialListItem::onMouseLeave(S32 x, S32 y, MASK mask) -{ - getChildView("hovered_icon")->setVisible( false); - mInfoBtn->setVisible(false); - mProfileBtn->setVisible(false); - - LLPanel::onMouseLeave(x, y, mask); -} - -void LLSocialListItem::onInfoBtnClick() -{ - LLFloaterReg::showInstance("inspect_avatar", LLSD().with("avatar_id", mAvatarId)); -} - -void LLSocialListItem::onProfileBtnClick() -{ - LLAvatarActions::showProfile(mAvatarId); -} diff --git a/indra/newview/llsociallist.h b/indra/newview/llsociallist.h deleted file mode 100644 index bc667fc400..0000000000 --- a/indra/newview/llsociallist.h +++ /dev/null @@ -1,102 +0,0 @@ -/** -* @file llsociallist.h -* @brief Header file for llsociallist -* @author Gilbert@lindenlab.com -* -* $LicenseInfo:firstyear=2013&license=viewerlgpl$ -* Second Life Viewer Source Code -* Copyright (C) 2013, Linden Research, Inc. -* -* This library is free software; you can redistribute it and/or -* modify it under the terms of the GNU Lesser General Public -* License as published by the Free Software Foundation; -* version 2.1 of the License only. -* -* This library is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public -* License along with this library; if not, write to the Free Software -* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -* -* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA -* $/LicenseInfo$ -*/ -#ifndef LL_LLSOCIALLIST_H -#define LL_LLSOCIALLIST_H - -#include "llflatlistview.h" -#include "llstyle.h" - - -/** - * Generic list of avatars. - * - * Updates itself when it's dirty, using optional name filter. - * To initiate update, modify the UUID list and call setDirty(). - * - * @see getIDs() - * @see setDirty() - * @see setNameFilter() - */ - -class LLAvatarIconCtrl; -class LLIconCtrl; -class LLOutputMonitorCtrl; - -class LLSocialList : public LLFlatListViewEx -{ -public: - - struct Params : public LLInitParam::Block - { - }; - - LLSocialList(const Params&p); - virtual ~LLSocialList(); - - virtual void draw(); - void refresh(); - void addNewItem(const LLUUID& id, const std::string& name, BOOL is_online, EAddPosition pos = ADD_BOTTOM); - - - - std::string mNameFilter; -}; - -class LLSocialListItem : public LLPanel -{ - public: - LLSocialListItem(); - ~LLSocialListItem(); - - BOOL postBuild(); - void setName(const std::string& name, const std::string& highlight = LLStringUtil::null); - void setValue(const LLSD& value); - void onMouseEnter(S32 x, S32 y, MASK mask); - void onMouseLeave(S32 x, S32 y, MASK mask); - void onInfoBtnClick(); - void onProfileBtnClick(); - - LLUUID mAvatarId; - - LLTextBox * mLabelTextBox; - std::string mLabel; - LLStyle::Params mLabelTextBoxStyle; - - - LLAvatarIconCtrl * mIcon; - LLTextBox * mLastInteractionTime; - LLIconCtrl * mIconPermissionOnline; - LLIconCtrl * mIconPermissionMap; - LLIconCtrl * mIconPermissionEditMine; - LLIconCtrl * mIconPermissionEditTheirs; - LLOutputMonitorCtrl * mSpeakingIndicator; - LLButton * mInfoBtn; - LLButton * mProfileBtn; -}; - - -#endif // LL_LLSOCIALLIST_H diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index 451095c7d8..76124148a0 100755 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -651,101 +651,6 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M right="-1" /> - - - - - - - - - - - - - - - Date: Fri, 28 Jun 2013 14:06:29 -0700 Subject: ACME-638: Removing non-used variable --- indra/newview/llpanelpeople.h | 1 - 1 file changed, 1 deletion(-) diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index cbfd74a2a0..55c2c3cdae 100755 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -150,7 +150,6 @@ private: LLAvatarList* mNearbyList; LLAvatarList* mRecentList; LLGroupList* mGroupList; - LLSocialList* mFacebookFriends; S32 mFacebookListGeneration; LLNetMap* mMiniMap; -- cgit v1.2.3 From db8422f7841ab875c9dc636e10ae5993216d4a5b Mon Sep 17 00:00:00 2001 From: Cho Date: Fri, 28 Jun 2013 22:31:18 +0100 Subject: made sure photo preview is only generated when photo tab is visible for ACME-649 --- indra/newview/llfloatersocial.cpp | 48 ++++++++++++++++++++------------------- indra/newview/llfloatersocial.h | 1 - 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/indra/newview/llfloatersocial.cpp b/indra/newview/llfloatersocial.cpp index d6c00b7c86..4660644969 100644 --- a/indra/newview/llfloatersocial.cpp +++ b/indra/newview/llfloatersocial.cpp @@ -246,20 +246,32 @@ LLSnapshotLivePreview* LLSocialPhotoPanel::getPreviewView() void LLSocialPhotoPanel::onVisibilityChange(const LLSD& new_visibility) { bool visible = new_visibility.asBoolean(); - if (visible && !mPreviewHandle.get()) + if (visible) { - LLRect full_screen_rect = getRootView()->getRect(); - LLSnapshotLivePreview::Params p; - p.rect(full_screen_rect); - LLSnapshotLivePreview* previewp = new LLSnapshotLivePreview(p); - mPreviewHandle = previewp->getHandle(); - - previewp->setSnapshotType(previewp->SNAPSHOT_WEB); - previewp->setSnapshotFormat(LLFloaterSnapshot::SNAPSHOT_FORMAT_JPEG); - //previewp->setSnapshotQuality(98); - previewp->setThumbnailPlaceholderRect(mThumbnailPlaceholder->getRect()); - - updateControls(); + if (mPreviewHandle.get()) + { + LLSnapshotLivePreview* preview = getPreviewView(); + if(preview) + { + lldebugs << "opened, updating snapshot" << llendl; + preview->updateSnapshot(TRUE); + } + } + else + { + LLRect full_screen_rect = getRootView()->getRect(); + LLSnapshotLivePreview::Params p; + p.rect(full_screen_rect); + LLSnapshotLivePreview* previewp = new LLSnapshotLivePreview(p); + mPreviewHandle = previewp->getHandle(); + + previewp->setSnapshotType(previewp->SNAPSHOT_WEB); + previewp->setSnapshotFormat(LLFloaterSnapshot::SNAPSHOT_FORMAT_JPEG); + //previewp->setSnapshotQuality(98); + previewp->setThumbnailPlaceholderRect(mThumbnailPlaceholder->getRect()); + + updateControls(); + } } } @@ -531,16 +543,6 @@ BOOL LLFloaterSocial::postBuild() return LLFloater::postBuild(); } -void LLFloaterSocial::onOpen(const LLSD& key) -{ - LLSnapshotLivePreview* preview = mSocialPhotoPanel->getPreviewView(); - if(preview) - { - lldebugs << "opened, updating snapshot" << llendl; - preview->updateSnapshot(TRUE); - } -} - // static void LLFloaterSocial::preUpdate() { diff --git a/indra/newview/llfloatersocial.h b/indra/newview/llfloatersocial.h index 95ba688430..89b9e2016a 100644 --- a/indra/newview/llfloatersocial.h +++ b/indra/newview/llfloatersocial.h @@ -110,7 +110,6 @@ public: LLFloaterSocial(const LLSD& key); BOOL postBuild(); void onCancel(); - void onOpen(const LLSD& key); static void preUpdate(); static void postUpdate(); -- cgit v1.2.3 From 1c7a7fe2d1c3f9399a6248551b7b2a8a7e68afdd Mon Sep 17 00:00:00 2001 From: Cho Date: Fri, 28 Jun 2013 23:08:03 +0100 Subject: removed FB photo sharing from snapshot floater for ACME-639 --- indra/newview/CMakeLists.txt | 1 - indra/newview/llpanelsnapshotfacebook.cpp | 139 -------------- indra/newview/llpanelsnapshotoptions.cpp | 7 - .../skins/default/xui/en/floater_snapshot.xml | 6 - .../default/xui/en/panel_snapshot_facebook.xml | 199 --------------------- .../default/xui/en/panel_snapshot_options.xml | 19 -- 6 files changed, 371 deletions(-) delete mode 100755 indra/newview/llpanelsnapshotfacebook.cpp delete mode 100755 indra/newview/skins/default/xui/en/panel_snapshot_facebook.xml diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index f593375aed..3d6d315454 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -438,7 +438,6 @@ set(viewer_SOURCE_FILES llpanelprimmediacontrols.cpp llpanelprofile.cpp llpanelsnapshot.cpp - llpanelsnapshotfacebook.cpp llpanelsnapshotinventory.cpp llpanelsnapshotlocal.cpp llpanelsnapshotoptions.cpp diff --git a/indra/newview/llpanelsnapshotfacebook.cpp b/indra/newview/llpanelsnapshotfacebook.cpp deleted file mode 100755 index 94fbb986c0..0000000000 --- a/indra/newview/llpanelsnapshotfacebook.cpp +++ /dev/null @@ -1,139 +0,0 @@ -/** - * @file llpanelsnapshotfacebook.cpp - * @brief Posts a snapshot to the resident Facebook account. - * - * $LicenseInfo:firstyear=2013&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2013, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA - * $/LicenseInfo$ - */ - -#include "llviewerprecompiledheaders.h" - -// libs -#include "llcombobox.h" -#include "llfloaterreg.h" -#include "llpanel.h" -#include "llspinctrl.h" - -// newview -#include "llfloatersnapshot.h" -#include "llpanelsnapshot.h" -#include "llsidetraypanelcontainer.h" -#include "llwebprofile.h" - -#include "llfacebookconnect.h" -#include "llslurl.h" -#include "llagentui.h" - -/** - * Posts a snapshot to the resident Facebook account. - */ -class LLPanelSnapshotFacebook -: public LLPanelSnapshot -{ - LOG_CLASS(LLPanelSnapshotFacebook); - -public: - LLPanelSnapshotFacebook(); - - /*virtual*/ BOOL postBuild(); - /*virtual*/ void onOpen(const LLSD& key); - -private: - /*virtual*/ void updateCustomResControls(); ///< Show/hide facebook custom controls - /*virtual*/ std::string getWidthSpinnerName() const { return "facebook_snapshot_width"; } - /*virtual*/ std::string getHeightSpinnerName() const { return "facebook_snapshot_height"; } - /*virtual*/ std::string getAspectRatioCBName() const { return "facebook_keep_aspect_check"; } - /*virtual*/ std::string getImageSizeComboName() const { return "facebook_size_combo"; } - /*virtual*/ std::string getImageSizePanelName() const { return "facebook_image_size_lp"; } - /*virtual*/ LLFloaterSnapshot::ESnapshotFormat getImageFormat() const { return LLFloaterSnapshot::SNAPSHOT_FORMAT_PNG; } - /*virtual*/ void updateControls(const LLSD& info); - - void onSend(); - void onImageUploaded(const std::string& caption, const std::string& image_url); -}; - -static LLRegisterPanelClassWrapper panel_class("llpanelsnapshotfacebook"); - -LLPanelSnapshotFacebook::LLPanelSnapshotFacebook() -{ - mCommitCallbackRegistrar.add("PostToFacebook.Send", boost::bind(&LLPanelSnapshotFacebook::onSend, this)); - mCommitCallbackRegistrar.add("PostToFacebook.Cancel", boost::bind(&LLPanelSnapshotFacebook::cancel, this)); -} - -// virtual -BOOL LLPanelSnapshotFacebook::postBuild() -{ - return LLPanelSnapshot::postBuild(); -} - -// virtual -void LLPanelSnapshotFacebook::onOpen(const LLSD& key) -{ - if (!LLFacebookConnect::instance().isConnected()) - { - LLFacebookConnect::instance().getConnectionToFacebook(true); - } - updateControls(key); - LLPanelSnapshot::onOpen(key); -} - -// virtual -void LLPanelSnapshotFacebook::updateControls(const LLSD& info) -{ - const bool have_snapshot = info.has("have-snapshot") ? info["have-snapshot"].asBoolean() : true; - const bool is_connected = LLFacebookConnect::instance().isConnected(); - getChild("post_btn")->setEnabled(have_snapshot && is_connected); -} - -// virtual -void LLPanelSnapshotFacebook::updateCustomResControls() -{ - LLPanelSnapshot::updateCustomResControls(); - const bool is_connected = LLFacebookConnect::instance().isConnected(); - getChild("post_btn")->setEnabled(is_connected); -} - -void LLPanelSnapshotFacebook::onSend() -{ - std::string caption = getChild("caption")->getValue().asString(); - bool add_location = getChild("add_location_cb")->getValue().asBoolean(); - - if (add_location) - { - LLSLURL slurl; - LLAgentUI::buildSLURL(slurl); - if (caption.empty()) - caption = slurl.getSLURLString(); - else - caption = caption + " " + slurl.getSLURLString(); - } - LLFacebookConnect::instance().sharePhoto(LLFloaterSnapshot::getImageData(), caption); - //LLWebProfile::uploadImage(LLFloaterSnapshot::getImageData(), caption, add_location, boost::bind(&LLPanelSnapshotFacebook::onImageUploaded, this, caption, _1)); - LLFloaterSnapshot::postSave(); -} - -void LLPanelSnapshotFacebook::onImageUploaded(const std::string& caption, const std::string& image_url) -{ - if (!image_url.empty()) - { - LLFacebookConnect::instance().sharePhoto(image_url, caption); - } -} diff --git a/indra/newview/llpanelsnapshotoptions.cpp b/indra/newview/llpanelsnapshotoptions.cpp index 14953f3cf9..554fabe5b3 100755 --- a/indra/newview/llpanelsnapshotoptions.cpp +++ b/indra/newview/llpanelsnapshotoptions.cpp @@ -51,7 +51,6 @@ private: void updateUploadCost(); void openPanel(const std::string& panel_name); void onSaveToProfile(); - void onSaveToFacebook(); void onSaveToEmail(); void onSaveToInventory(); void onSaveToComputer(); @@ -61,7 +60,6 @@ static LLRegisterPanelClassWrapper panel_class("llpanels LLPanelSnapshotOptions::LLPanelSnapshotOptions() { - mCommitCallbackRegistrar.add("Snapshot.SaveToFacebook", boost::bind(&LLPanelSnapshotOptions::onSaveToFacebook, this)); mCommitCallbackRegistrar.add("Snapshot.SaveToProfile", boost::bind(&LLPanelSnapshotOptions::onSaveToProfile, this)); mCommitCallbackRegistrar.add("Snapshot.SaveToEmail", boost::bind(&LLPanelSnapshotOptions::onSaveToEmail, this)); mCommitCallbackRegistrar.add("Snapshot.SaveToInventory", boost::bind(&LLPanelSnapshotOptions::onSaveToInventory, this)); @@ -101,11 +99,6 @@ void LLPanelSnapshotOptions::openPanel(const std::string& panel_name) LLFloaterSnapshot::postPanelSwitch(); } -void LLPanelSnapshotOptions::onSaveToFacebook() -{ - openPanel("panel_snapshot_facebook"); -} - void LLPanelSnapshotOptions::onSaveToProfile() { openPanel("panel_snapshot_profile"); diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml index e8e7fb77c1..853c209bca 100755 --- a/indra/newview/skins/default/xui/en/floater_snapshot.xml +++ b/indra/newview/skins/default/xui/en/floater_snapshot.xml @@ -268,12 +268,6 @@ left="0" name="panel_snapshot_options" top="0" /> - - - - - Post to my Facebook timeline - - - - - - - - - - - - - - - - - - Caption: - - - - - - - - - diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_options.xml b/indra/newview/skins/default/xui/en/panel_snapshot_options.xml index 8cf5bfb426..61c8c971c2 100755 --- a/indra/newview/skins/default/xui/en/panel_snapshot_options.xml +++ b/indra/newview/skins/default/xui/en/panel_snapshot_options.xml @@ -5,25 +5,6 @@ layout="topleft" name="panel_snapshot_options" width="490"> - - - - - - -- cgit v1.2.3 From 3325c8ecb3eec0a126ef4b7be338ed5a2f8a8ee8 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Fri, 28 Jun 2013 17:15:55 -0700 Subject: ACME-629: Posting a photo to facebook works again. The post button callback was not being called due to a name change. --- indra/newview/skins/default/xui/en/panel_social_photo.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/skins/default/xui/en/panel_social_photo.xml b/indra/newview/skins/default/xui/en/panel_social_photo.xml index e6742b0ea7..fc86349235 100644 --- a/indra/newview/skins/default/xui/en/panel_social_photo.xml +++ b/indra/newview/skins/default/xui/en/panel_social_photo.xml @@ -236,7 +236,7 @@ name="post_btn" width="100"> + function="SocialSharing.SendPhoto" /> - + + + \ No newline at end of file -- cgit v1.2.3 From 1dbabed6b5bac8a0fcc1d9a70522eb726e01bae7 Mon Sep 17 00:00:00 2001 From: Cho Date: Wed, 3 Jul 2013 23:42:02 +0100 Subject: made listeners more robust in llfloatersocial.cpp for ACME-665 --- indra/newview/llfloatersocial.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/indra/newview/llfloatersocial.cpp b/indra/newview/llfloatersocial.cpp index 57b6cccd32..67a9f0c742 100644 --- a/indra/newview/llfloatersocial.cpp +++ b/indra/newview/llfloatersocial.cpp @@ -103,6 +103,7 @@ void LLSocialStatusPanel::onSend() } else { + LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialStatusPanel"); // just in case it is already listening LLEventPumps::instance().obtain("FacebookConnectState").listen("LLSocialStatusPanel", boost::bind(&LLSocialStatusPanel::onFacebookConnectStateChange, this, _1)); LLFacebookConnect::instance().checkConnectionToFacebook(true); } @@ -310,6 +311,7 @@ void LLSocialPhotoPanel::onSend() } else { + LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialPhotoPanel"); // just in case it is already listening LLEventPumps::instance().obtain("FacebookConnectState").listen("LLSocialPhotoPanel", boost::bind(&LLSocialPhotoPanel::onFacebookConnectStateChange, this, _1)); LLFacebookConnect::instance().checkConnectionToFacebook(true); } @@ -535,6 +537,7 @@ void LLSocialCheckinPanel::onSend() } else { + LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialCheckinPanel"); // just in case it is already listening LLEventPumps::instance().obtain("FacebookConnectState").listen("LLSocialCheckinPanel", boost::bind(&LLSocialCheckinPanel::onFacebookConnectStateChange, this, _1)); LLFacebookConnect::instance().checkConnectionToFacebook(true); } -- cgit v1.2.3 From ad8aeecb8331ca68eef9a12536c80a4658885ccb Mon Sep 17 00:00:00 2001 From: Cho Date: Thu, 4 Jul 2013 01:29:54 +0100 Subject: Added auto-connect upon 404 from a POST in LLFacebookConnect, and added FB_POSTED state, for ACME-667 --- indra/newview/llfacebookconnect.cpp | 6 ++++- indra/newview/llfacebookconnect.h | 5 ++-- indra/newview/llfloatersocial.cpp | 51 ++++++++++++++++++++++++------------- 3 files changed, 41 insertions(+), 21 deletions(-) diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp index 30fb63084b..07204531de 100644 --- a/indra/newview/llfacebookconnect.cpp +++ b/indra/newview/llfacebookconnect.cpp @@ -145,7 +145,11 @@ public: toast_user_for_success(); LL_DEBUGS("FacebookConnect") << "Post successful. content: " << content << LL_ENDL; - LLFacebookConnect::instance().setConnectionState(LLFacebookConnect::FB_CONNECTED); + LLFacebookConnect::instance().setConnectionState(LLFacebookConnect::FB_POSTED); + } + else if (status == 404) + { + LLFacebookConnect::instance().connectToFacebook(); } else { diff --git a/indra/newview/llfacebookconnect.h b/indra/newview/llfacebookconnect.h index ddff87385e..b37c713ae5 100644 --- a/indra/newview/llfacebookconnect.h +++ b/indra/newview/llfacebookconnect.h @@ -50,7 +50,8 @@ public: FB_CONNECTED = 2, FB_CONNECTION_FAILED = 3, FB_POSTING = 4, - FB_POST_FAILED = 5 + FB_POSTED = 5, + FB_POST_FAILED = 6 }; typedef boost::function share_callback_t; @@ -76,7 +77,7 @@ public: const LLSD& getContent() const; void setConnectionState(EConnectionState connection_state); - bool isConnected() { return ((mConnectionState == FB_CONNECTED) || (mConnectionState == FB_POSTING)); } + bool isConnected() { return ((mConnectionState == FB_CONNECTED) || (mConnectionState == FB_POSTING) || (mConnectionState == FB_POSTED)); } EConnectionState getConnectionState() { return mConnectionState; } S32 generation() { return mGeneration; } diff --git a/indra/newview/llfloatersocial.cpp b/indra/newview/llfloatersocial.cpp index 67a9f0c742..eb3ceaf96e 100644 --- a/indra/newview/llfloatersocial.cpp +++ b/indra/newview/llfloatersocial.cpp @@ -96,6 +96,9 @@ void LLSocialStatusPanel::draw() void LLSocialStatusPanel::onSend() { + LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialStatusPanel"); // just in case it is already listening + LLEventPumps::instance().obtain("FacebookConnectState").listen("LLSocialStatusPanel", boost::bind(&LLSocialStatusPanel::onFacebookConnectStateChange, this, _1)); + // Connect to Facebook if necessary and then post if (LLFacebookConnect::instance().isConnected()) { @@ -103,19 +106,21 @@ void LLSocialStatusPanel::onSend() } else { - LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialStatusPanel"); // just in case it is already listening - LLEventPumps::instance().obtain("FacebookConnectState").listen("LLSocialStatusPanel", boost::bind(&LLSocialStatusPanel::onFacebookConnectStateChange, this, _1)); LLFacebookConnect::instance().checkConnectionToFacebook(true); } } bool LLSocialStatusPanel::onFacebookConnectStateChange(const LLSD& data) { - if (data.get("enum").asInteger() == LLFacebookConnect::FB_CONNECTED) + switch (data.get("enum").asInteger()) { - LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialStatusPanel"); - - sendStatus(); + case LLFacebookConnect::FB_CONNECTED: + sendStatus(); + break; + + case LLFacebookConnect::FB_POSTED: + LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialStatusPanel"); + break; } return false; @@ -304,6 +309,9 @@ void LLSocialPhotoPanel::onClickNewSnapshot() void LLSocialPhotoPanel::onSend() { + LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialPhotoPanel"); // just in case it is already listening + LLEventPumps::instance().obtain("FacebookConnectState").listen("LLSocialPhotoPanel", boost::bind(&LLSocialPhotoPanel::onFacebookConnectStateChange, this, _1)); + // Connect to Facebook if necessary and then post if (LLFacebookConnect::instance().isConnected()) { @@ -311,19 +319,21 @@ void LLSocialPhotoPanel::onSend() } else { - LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialPhotoPanel"); // just in case it is already listening - LLEventPumps::instance().obtain("FacebookConnectState").listen("LLSocialPhotoPanel", boost::bind(&LLSocialPhotoPanel::onFacebookConnectStateChange, this, _1)); LLFacebookConnect::instance().checkConnectionToFacebook(true); } } bool LLSocialPhotoPanel::onFacebookConnectStateChange(const LLSD& data) { - if (data.get("enum").asInteger() == LLFacebookConnect::FB_CONNECTED) + switch (data.get("enum").asInteger()) { - LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialPhotoPanel"); - - sendPhoto(); + case LLFacebookConnect::FB_CONNECTED: + sendPhoto(); + break; + + case LLFacebookConnect::FB_POSTED: + LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialPhotoPanel"); + break; } return false; @@ -530,6 +540,9 @@ void LLSocialCheckinPanel::draw() void LLSocialCheckinPanel::onSend() { + LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialCheckinPanel"); // just in case it is already listening + LLEventPumps::instance().obtain("FacebookConnectState").listen("LLSocialCheckinPanel", boost::bind(&LLSocialCheckinPanel::onFacebookConnectStateChange, this, _1)); + // Connect to Facebook if necessary and then post if (LLFacebookConnect::instance().isConnected()) { @@ -537,19 +550,21 @@ void LLSocialCheckinPanel::onSend() } else { - LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialCheckinPanel"); // just in case it is already listening - LLEventPumps::instance().obtain("FacebookConnectState").listen("LLSocialCheckinPanel", boost::bind(&LLSocialCheckinPanel::onFacebookConnectStateChange, this, _1)); LLFacebookConnect::instance().checkConnectionToFacebook(true); } } bool LLSocialCheckinPanel::onFacebookConnectStateChange(const LLSD& data) { - if (data.get("enum").asInteger() == LLFacebookConnect::FB_CONNECTED) + switch (data.get("enum").asInteger()) { - LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialCheckinPanel"); - - sendCheckin(); + case LLFacebookConnect::FB_CONNECTED: + sendCheckin(); + break; + + case LLFacebookConnect::FB_POSTED: + LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialCheckinPanel"); + break; } return false; -- cgit v1.2.3 From fd4262541946770515ce8a486dd3a69245365def Mon Sep 17 00:00:00 2001 From: Cho Date: Thu, 4 Jul 2013 02:01:51 +0100 Subject: Close floater and clear text upon FB_POSTED for ACME-668 --- indra/newview/llfloatersocial.cpp | 38 ++++++++++++++++++++++++++++++++++++++ indra/newview/llfloatersocial.h | 3 +++ 2 files changed, 41 insertions(+) diff --git a/indra/newview/llfloatersocial.cpp b/indra/newview/llfloatersocial.cpp index eb3ceaf96e..2ecadcfaf6 100644 --- a/indra/newview/llfloatersocial.cpp +++ b/indra/newview/llfloatersocial.cpp @@ -120,6 +120,7 @@ bool LLSocialStatusPanel::onFacebookConnectStateChange(const LLSD& data) case LLFacebookConnect::FB_POSTED: LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialStatusPanel"); + clearAndClose(); break; } @@ -135,6 +136,17 @@ void LLSocialStatusPanel::sendStatus() } } +void LLSocialStatusPanel::clearAndClose() +{ + mMessageTextEditor->setValue(""); + + LLFloater* floater = getParentByType(); + if (floater) + { + floater->closeFloater(); + } +} + /////////////////////////// //LLSocialPhotoPanel/////// /////////////////////////// @@ -333,6 +345,7 @@ bool LLSocialPhotoPanel::onFacebookConnectStateChange(const LLSD& data) case LLFacebookConnect::FB_POSTED: LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialPhotoPanel"); + clearAndClose(); break; } @@ -365,6 +378,17 @@ void LLSocialPhotoPanel::sendPhoto() updateControls(); } +void LLSocialPhotoPanel::clearAndClose() +{ + mCaptionTextBox->setValue(""); + + LLFloater* floater = getParentByType(); + if (floater) + { + floater->closeFloater(); + } +} + void LLSocialPhotoPanel::updateControls() { LLSnapshotLivePreview* previewp = getPreviewView(); @@ -564,6 +588,7 @@ bool LLSocialCheckinPanel::onFacebookConnectStateChange(const LLSD& data) case LLFacebookConnect::FB_POSTED: LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialCheckinPanel"); + clearAndClose(); break; } @@ -595,6 +620,17 @@ void LLSocialCheckinPanel::sendCheckin() LLFacebookConnect::instance().postCheckin(slurl_string, region_name, description, map_url, caption); } +void LLSocialCheckinPanel::clearAndClose() +{ + getChild("place_caption")->setValue(""); + + LLFloater* floater = getParentByType(); + if (floater) + { + floater->closeFloater(); + } +} + //////////////////////// //LLFloaterSocial/////// //////////////////////// @@ -680,6 +716,8 @@ void LLFloaterSocial::draw() mStatusLoadingIndicator->setVisible(true); break; case LLFacebookConnect::FB_CONNECTED: + break; + case LLFacebookConnect::FB_POSTED: break; case LLFacebookConnect::FB_CONNECTION_FAILED: case LLFacebookConnect::FB_POST_FAILED: diff --git a/indra/newview/llfloatersocial.h b/indra/newview/llfloatersocial.h index e37facbbce..5e1ee6be0e 100644 --- a/indra/newview/llfloatersocial.h +++ b/indra/newview/llfloatersocial.h @@ -45,6 +45,7 @@ public: bool onFacebookConnectStateChange(const LLSD& data); void sendStatus(); + void clearAndClose(); private: LLUICtrl* mMessageTextEditor; @@ -67,6 +68,7 @@ public: bool onFacebookConnectStateChange(const LLSD& data); void sendPhoto(); + void clearAndClose(); void updateControls(); void updateResolution(BOOL do_update); @@ -101,6 +103,7 @@ public: bool onFacebookConnectStateChange(const LLSD& data); void sendCheckin(); + void clearAndClose(); private: std::string mMapUrl; -- cgit v1.2.3 From 85824ebc0931d4ac89e375b35dbccd1295746e31 Mon Sep 17 00:00:00 2001 From: Cho Date: Thu, 4 Jul 2013 02:13:47 +0100 Subject: Removed share callbacks from LLFacebookConnect --- indra/newview/llfacebookconnect.cpp | 19 +++---------------- indra/newview/llfacebookconnect.h | 7 ------- 2 files changed, 3 insertions(+), 23 deletions(-) diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp index 07204531de..816947827c 100644 --- a/indra/newview/llfacebookconnect.cpp +++ b/indra/newview/llfacebookconnect.cpp @@ -133,11 +133,6 @@ public: LLFacebookConnect::instance().setConnectionState(LLFacebookConnect::FB_POSTING); } - LLFacebookShareResponder(LLFacebookConnect::share_callback_t cb) : mShareCallback(cb) - { - LLFacebookConnect::instance().setConnectionState(LLFacebookConnect::FB_POSTING); - } - virtual void completed(U32 status, const std::string& reason, const LLSD& content) { if (isGoodStatus(status)) @@ -156,11 +151,6 @@ public: LLFacebookConnect::instance().setConnectionState(LLFacebookConnect::FB_POST_FAILED); log_facebook_connect_error("Share", status, reason, content.get("error_code"), content.get("error_description")); } - - if (mShareCallback) - { - mShareCallback(isGoodStatus(status)); - } } void completedHeader(U32 status, const std::string& reason, const LLSD& content) @@ -170,9 +160,6 @@ public: LLFacebookConnect::instance().openFacebookWeb(content["location"]); } } - -private: - LLFacebookConnect::share_callback_t mShareCallback; }; /////////////////////////////////////////////////////////////////////////////// @@ -346,7 +333,7 @@ void LLFacebookConnect::postCheckin(const std::string& location, const std::stri body["message"] = message; // Note: we can use that route for different publish action. We should be able to use the same responder. - LLHTTPClient::post(getFacebookConnectURL("/share/checkin"), body, new LLFacebookShareResponder(mPostCheckinCallback)); + LLHTTPClient::post(getFacebookConnectURL("/share/checkin"), body, new LLFacebookShareResponder()); } void LLFacebookConnect::sharePhoto(const std::string& image_url, const std::string& caption) @@ -409,7 +396,7 @@ void LLFacebookConnect::sharePhoto(LLPointer image, const std: memcpy(data, body.str().data(), size); // Note: we can use that route for different publish action. We should be able to use the same responder. - LLHTTPClient::postRaw(getFacebookConnectURL("/share/photo"), data, size, new LLFacebookShareResponder(mSharePhotoCallback), headers); + LLHTTPClient::postRaw(getFacebookConnectURL("/share/photo"), data, size, new LLFacebookShareResponder(), headers); } void LLFacebookConnect::updateStatus(const std::string& message) @@ -418,7 +405,7 @@ void LLFacebookConnect::updateStatus(const std::string& message) body["message"] = message; // Note: we can use that route for different publish action. We should be able to use the same responder. - LLHTTPClient::post(getFacebookConnectURL("/share/wall"), body, new LLFacebookShareResponder(mUpdateStatusCallback)); + LLHTTPClient::post(getFacebookConnectURL("/share/wall"), body, new LLFacebookShareResponder()); } void LLFacebookConnect::storeContent(const LLSD& content) diff --git a/indra/newview/llfacebookconnect.h b/indra/newview/llfacebookconnect.h index b37c713ae5..a06e53b90e 100644 --- a/indra/newview/llfacebookconnect.h +++ b/indra/newview/llfacebookconnect.h @@ -54,7 +54,6 @@ public: FB_POST_FAILED = 6 }; - typedef boost::function share_callback_t; typedef boost::function content_updated_callback_t; void connectToFacebook(const std::string& auth_code = ""); // Initiate the complete FB connection. Please use checkConnectionToFacebook() in normal use. @@ -67,9 +66,6 @@ public: void sharePhoto(LLPointer image, const std::string& caption); void updateStatus(const std::string& message); - void setPostCheckinCallback(share_callback_t cb) { mPostCheckinCallback = cb; } - void setSharePhotoCallback(share_callback_t cb) { mSharePhotoCallback = cb; } - void setUpdateStatusCallback(share_callback_t cb) { mUpdateStatusCallback = cb; } void setContentUpdatedCallback(content_updated_callback_t cb) { mContentUpdatedCallback = cb;} void clearContent(); @@ -94,9 +90,6 @@ private: LLSD mContent; S32 mGeneration; - share_callback_t mPostCheckinCallback; - share_callback_t mSharePhotoCallback; - share_callback_t mUpdateStatusCallback; content_updated_callback_t mContentUpdatedCallback; static boost::scoped_ptr sStateWatcher; -- cgit v1.2.3 From f7a1f7b784fff0579e4d1fecd8265d0f960bd7f4 Mon Sep 17 00:00:00 2001 From: Cho Date: Thu, 4 Jul 2013 02:43:09 +0100 Subject: Replaced content change callback with an event in LLFacebookConnect for ACME-648 (more or less) --- indra/newview/llfacebookconnect.cpp | 15 ++------------- indra/newview/llfacebookconnect.h | 7 +------ indra/newview/llpanelpeople.cpp | 10 +++++++--- indra/newview/llpanelpeople.h | 2 +- 4 files changed, 11 insertions(+), 23 deletions(-) diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp index 816947827c..30ebedca25 100644 --- a/indra/newview/llfacebookconnect.cpp +++ b/indra/newview/llfacebookconnect.cpp @@ -41,6 +41,7 @@ #include "llevents.h" boost::scoped_ptr LLFacebookConnect::sStateWatcher(new LLEventStream("FacebookConnectState")); +boost::scoped_ptr LLFacebookConnect::sContentWatcher(new LLEventStream("FacebookConnectContent")); // Local functions void log_facebook_connect_error(const std::string& request, U32 status, const std::string& reason, const std::string& code, const std::string& description) @@ -413,10 +414,7 @@ void LLFacebookConnect::storeContent(const LLSD& content) mGeneration++; mContent = content; - if(mContentUpdatedCallback) - { - mContentUpdatedCallback(); - } + sContentWatcher->post(content); } const LLSD& LLFacebookConnect::getContent() const @@ -441,12 +439,3 @@ void LLFacebookConnect::setConnectionState(LLFacebookConnect::EConnectionState c mConnectionState = connection_state; } - - - - - - - - - diff --git a/indra/newview/llfacebookconnect.h b/indra/newview/llfacebookconnect.h index a06e53b90e..7b6eb3644f 100644 --- a/indra/newview/llfacebookconnect.h +++ b/indra/newview/llfacebookconnect.h @@ -54,8 +54,6 @@ public: FB_POST_FAILED = 6 }; - typedef boost::function content_updated_callback_t; - void connectToFacebook(const std::string& auth_code = ""); // Initiate the complete FB connection. Please use checkConnectionToFacebook() in normal use. void disconnectFromFacebook(); // Disconnect from the FBC service. void checkConnectionToFacebook(bool auto_connect = false); // Check if an access token is available on the FBC service. If not, call connectToFacebook(). @@ -66,8 +64,6 @@ public: void sharePhoto(LLPointer image, const std::string& caption); void updateStatus(const std::string& message); - void setContentUpdatedCallback(content_updated_callback_t cb) { mContentUpdatedCallback = cb;} - void clearContent(); void storeContent(const LLSD& content); const LLSD& getContent() const; @@ -90,9 +86,8 @@ private: LLSD mContent; S32 mGeneration; - content_updated_callback_t mContentUpdatedCallback; - static boost::scoped_ptr sStateWatcher; + static boost::scoped_ptr sContentWatcher; }; #endif // LL_LLFACEBOOKCONNECT_H diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 8c8cad0743..766335c982 100755 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -781,7 +781,7 @@ void LLPanelPeople::updateFriendList() showFriendsAccordionsIfNeeded(); } -void LLPanelPeople::updateSuggestedFriendList() +bool LLPanelPeople::updateSuggestedFriendList() { if (LLFacebookConnect::instance().generation() != mFacebookListGeneration) { @@ -814,6 +814,8 @@ void LLPanelPeople::updateSuggestedFriendList() mSuggestedFriends->setDirty(true, !mSuggestedFriends->filterHasMatches()); showFriendsAccordionsIfNeeded(); } + + return false; } void LLPanelPeople::updateNearbyList() @@ -855,7 +857,8 @@ void LLPanelPeople::updateFacebookList(bool visible) { if (visible) { - LLFacebookConnect::instance().setContentUpdatedCallback(boost::bind(&LLPanelPeople::updateSuggestedFriendList, this)); + LLEventPumps::instance().obtain("FacebookConnectContent").stopListening("LLPanelPeople"); // just in case it is already listening + LLEventPumps::instance().obtain("FacebookConnectContent").listen("LLPanelPeople", boost::bind(&LLPanelPeople::updateSuggestedFriendList, this)); if (mTryToConnectToFbc) { @@ -866,6 +869,7 @@ void LLPanelPeople::updateFacebookList(bool visible) } else { + LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLPanelPeople"); // just in case it is already listening LLEventPumps::instance().obtain("FacebookConnectState").listen("LLPanelPeople", boost::bind(&LLPanelPeople::onConnectedToFacebook, this, _1)); LLFacebookConnect::instance().checkConnectionToFacebook(); } @@ -878,7 +882,7 @@ void LLPanelPeople::updateFacebookList(bool visible) } else { - LLFacebookConnect::instance().setContentUpdatedCallback(NULL); + LLEventPumps::instance().obtain("FacebookConnectContent").stopListening("LLPanelPeople"); } } diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index c6ee7b8165..b746835dfb 100755 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -76,7 +76,7 @@ private: // methods indirectly called by the updaters void updateFriendListHelpText(); void updateFriendList(); - void updateSuggestedFriendList(); + bool updateSuggestedFriendList(); void updateNearbyList(); void updateRecentList(); void updateFacebookList(bool visible); -- cgit v1.2.3 From 6e8b353575f670e50267cb172860a3f8da1dbbd0 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Wed, 3 Jul 2013 19:29:42 -0700 Subject: ACME-626 : Simplify the preview drawing code and positioning --- indra/newview/llfloatersocial.cpp | 53 ++-------------------- .../skins/default/xui/en/floater_social.xml | 3 -- .../skins/default/xui/en/panel_social_photo.xml | 53 +++++++++------------- 3 files changed, 27 insertions(+), 82 deletions(-) diff --git a/indra/newview/llfloatersocial.cpp b/indra/newview/llfloatersocial.cpp index a0dbb7ea95..fce9d1b28f 100644 --- a/indra/newview/llfloatersocial.cpp +++ b/indra/newview/llfloatersocial.cpp @@ -178,76 +178,33 @@ void LLSocialPhotoPanel::draw() { LLSnapshotLivePreview * previewp = static_cast(mPreviewHandle.get()); - LLPanel::draw(); - - if(previewp && previewp->getThumbnailImage()) + if (previewp && previewp->getThumbnailImage()) { - bool working = false; //impl.getStatus() == Impl::STATUS_WORKING; const LLRect& thumbnail_rect = mThumbnailPlaceholder->getRect(); + const LLRect& snapshot_rect = mSnapshotPanel->getRect(); const S32 thumbnail_w = previewp->getThumbnailWidth(); const S32 thumbnail_h = previewp->getThumbnailHeight(); // calc preview offset within the preview rect const S32 local_offset_x = (thumbnail_rect.getWidth() - thumbnail_w) / 2 ; - const S32 local_offset_y = (thumbnail_rect.getHeight() - thumbnail_h) / 2 ; // preview y pos within the preview rect // calc preview offset within the floater rect S32 offset_x = thumbnail_rect.mLeft + local_offset_x; - S32 offset_y = thumbnail_rect.mBottom + local_offset_y; + S32 offset_y = thumbnail_rect.mBottom - (snapshot_rect.mTop - thumbnail_rect.mTop); mSnapshotPanel->localPointToOtherView(offset_x, offset_y, &offset_x, &offset_y, getParentByType()); gGL.matrixMode(LLRender::MM_MODELVIEW); // Apply floater transparency to the texture unless the floater is focused. F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency(); - LLColor4 color = working ? LLColor4::grey4 : LLColor4::white; + LLColor4 color = LLColor4::white; gl_draw_scaled_image(offset_x, offset_y, thumbnail_w, thumbnail_h, previewp->getThumbnailImage(), color % alpha); previewp->drawPreviewRect(offset_x, offset_y) ; - - // Draw some controls on top of the preview thumbnail. - static const S32 PADDING = 5; - static const S32 REFRESH_LBL_BG_HEIGHT = 32; - - // Reshape and position the posting result message panels at the top of the thumbnail. - // Do this regardless of current posting status (finished or not) to avoid flicker - // when the result message is displayed for the first time. - // if (impl.getStatus() == Impl::STATUS_FINISHED) - { - LLRect result_lbl_rect = mSucceessLblPanel->getRect(); - const S32 result_lbl_h = result_lbl_rect.getHeight(); - result_lbl_rect.setLeftTopAndSize(local_offset_x, local_offset_y + thumbnail_h, thumbnail_w - 1, result_lbl_h); - mSucceessLblPanel->reshape(result_lbl_rect.getWidth(), result_lbl_h); - mSucceessLblPanel->setRect(result_lbl_rect); - mFailureLblPanel->reshape(result_lbl_rect.getWidth(), result_lbl_h); - mFailureLblPanel->setRect(result_lbl_rect); - } - - // Position the refresh button in the bottom left corner of the thumbnail. - mRefreshBtn->setOrigin(local_offset_x + PADDING, local_offset_y + PADDING); - - if (mNeedRefresh) - { - // Place the refresh hint text to the right of the refresh button. - const LLRect& refresh_btn_rect = mRefreshBtn->getRect(); - mRefreshLabel->setOrigin(refresh_btn_rect.mLeft + refresh_btn_rect.getWidth() + PADDING, refresh_btn_rect.mBottom); - - // Draw the refresh hint background. - LLRect refresh_label_bg_rect(offset_x, offset_y + REFRESH_LBL_BG_HEIGHT, offset_x + thumbnail_w - 1, offset_y); - gl_rect_2d(refresh_label_bg_rect, LLColor4::white % 0.9f, TRUE); - } - - gGL.pushUIMatrix(); - S32 x_pos; - S32 y_pos; - mSnapshotPanel->localPointToOtherView(thumbnail_rect.mLeft, thumbnail_rect.mBottom, &x_pos, &y_pos, getParentByType()); - - LLUI::translate((F32) x_pos, (F32) y_pos); - mThumbnailPlaceholder->draw(); - gGL.popUIMatrix(); } + LLPanel::draw(); } LLSnapshotLivePreview* LLSocialPhotoPanel::getPreviewView() diff --git a/indra/newview/skins/default/xui/en/floater_social.xml b/indra/newview/skins/default/xui/en/floater_social.xml index 3ce6841a3a..40800c87e6 100644 --- a/indra/newview/skins/default/xui/en/floater_social.xml +++ b/indra/newview/skins/default/xui/en/floater_social.xml @@ -36,9 +36,6 @@ filename="panel_social_photo.xml" class="llsocialphotopanel" follows="all" - background_visible="true" - bg_alpha_color="DkGray" - bg_opaque_color="DkGray" label="PHOTO" help_topic="panel_social_photo" name="panel_social_photo"/> diff --git a/indra/newview/skins/default/xui/en/panel_social_photo.xml b/indra/newview/skins/default/xui/en/panel_social_photo.xml index c15b2f02d4..72e5286fe6 100644 --- a/indra/newview/skins/default/xui/en/panel_social_photo.xml +++ b/indra/newview/skins/default/xui/en/panel_social_photo.xml @@ -1,15 +1,15 @@ [SIZE] KB - + width="24" /> + visible="false"> Working + + Refreshing... + Comment (optional): @@ -114,9 +118,9 @@ initial_value="true" label="Include location in posting" name="add_location_cb" - left="6" + left="9" height="16" - top_pad="5"/> + top_pad="8"/> + height="181"> Say something about where you are: + height="186"> + + + height="367"> What's on your mind? Date: Mon, 15 Jul 2013 14:24:29 -0600 Subject: STORM-1951: Only toast when we should, honor show_toast notification param --- indra/newview/llnotificationscripthandler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llnotificationscripthandler.cpp b/indra/newview/llnotificationscripthandler.cpp index 08c98e4f28..56ed1044e9 100755 --- a/indra/newview/llnotificationscripthandler.cpp +++ b/indra/newview/llnotificationscripthandler.cpp @@ -87,7 +87,7 @@ bool LLScriptHandler::processNotification(const LLNotificationPtr& notification) { LLScriptFloaterManager::getInstance()->onAddNotification(notification->getID()); } - else + else if (notification->canShowToast()) { LLToastPanel* notify_box = LLToastPanel::buidPanelFromNotification(notification); -- cgit v1.2.3 From e12b6caaa0596eae2fad43636663dd4e14a1949c Mon Sep 17 00:00:00 2001 From: Cinders Date: Mon, 15 Jul 2013 14:24:59 -0600 Subject: Remove trivial duplicate ; at the end of a line --- indra/newview/llviewermessage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index ace16396db..a71ccce89b 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -6895,7 +6895,7 @@ bool handle_lure_callback(const LLSD& notification, const LLSD& response) std::string target_name; gCacheName->getFullName(target_id, target_name); // for im log filenames LLSD args; - args["TO_NAME"] = LLSLURL("agent", target_id, "displayname").getSLURLString();; + args["TO_NAME"] = LLSLURL("agent", target_id, "displayname").getSLURLString(); LLSD payload; -- cgit v1.2.3 From 61e5164a41faf5d56919377ea00a6166b772a5a1 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Mon, 15 Jul 2013 16:06:34 -0700 Subject: ACME-680 Create the Account tab --- indra/newview/skins/default/xui/en/floater_social.xml | 6 ++++++ indra/newview/skins/default/xui/en/panel_social_account.xml | 10 ++++++++++ 2 files changed, 16 insertions(+) create mode 100644 indra/newview/skins/default/xui/en/panel_social_account.xml diff --git a/indra/newview/skins/default/xui/en/floater_social.xml b/indra/newview/skins/default/xui/en/floater_social.xml index 65f738de1f..7f52a8c0da 100644 --- a/indra/newview/skins/default/xui/en/floater_social.xml +++ b/indra/newview/skins/default/xui/en/floater_social.xml @@ -57,6 +57,12 @@ label="PLACE" help_topic="panel_social_place" name="panel_social_place"/> + + + + + + \ No newline at end of file -- cgit v1.2.3 From 9988e4739f2af029732c66d0bc5f03e6f43c5685 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Mon, 15 Jul 2013 17:16:09 -0700 Subject: ACME-725 Add the connected text, 'Connect...' button, 'User another account...' button and 'Disconnect' button --- .../skins/default/xui/en/panel_social_account.xml | 61 +++++++++++++++++++++- 1 file changed, 59 insertions(+), 2 deletions(-) diff --git a/indra/newview/skins/default/xui/en/panel_social_account.xml b/indra/newview/skins/default/xui/en/panel_social_account.xml index d1f188fbc8..639e601f9d 100644 --- a/indra/newview/skins/default/xui/en/panel_social_account.xml +++ b/indra/newview/skins/default/xui/en/panel_social_account.xml @@ -4,7 +4,64 @@ layout="topleft" name="panel_social_account"> - + + You are connected to Facebook as: + + + [secondlife:/// Philippe Bossut] + + - \ No newline at end of file + + + + -- cgit v1.2.3 From 1bdf5ae8719e16e36a59b90db00b1fb349b5b279 Mon Sep 17 00:00:00 2001 From: "maxim@mnikolenko" Date: Tue, 16 Jul 2013 21:09:53 +0300 Subject: MAINT-2386 Update group information before sending invite --- indra/newview/llfloatergroupinvite.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/indra/newview/llfloatergroupinvite.cpp b/indra/newview/llfloatergroupinvite.cpp index 49da4e64b3..0c735dec1f 100755 --- a/indra/newview/llfloatergroupinvite.cpp +++ b/indra/newview/llfloatergroupinvite.cpp @@ -30,6 +30,7 @@ #include "llpanelgroupinvite.h" #include "lltrans.h" #include "lldraghandle.h" +#include "llgroupmgr.h" class LLFloaterGroupInvite::impl { @@ -123,6 +124,11 @@ void LLFloaterGroupInvite::showForGroup(const LLUUID& group_id, uuid_vec_t *agen LLFloaterGroupInvite *fgi = get_if_there(impl::sInstances, group_id, (LLFloaterGroupInvite*)NULL); + + // refresh group information + LLGroupMgr::getInstance()->clearGroupData(group_id); + + if (!fgi) { fgi = new LLFloaterGroupInvite(group_id); -- cgit v1.2.3 From fdea8c66de408a2054bbe86b1967cea11409c313 Mon Sep 17 00:00:00 2001 From: Cho Date: Tue, 16 Jul 2013 22:15:14 +0100 Subject: switched FB auth to in-viewer browser for ACME-733 --- indra/newview/llfacebookconnect.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp index 0d11658d07..cf77dd365b 100644 --- a/indra/newview/llfacebookconnect.cpp +++ b/indra/newview/llfacebookconnect.cpp @@ -40,6 +40,9 @@ #include "lltrans.h" #include "llevents.h" +#include "llfloaterwebcontent.h" +#include "llfloaterreg.h" + boost::scoped_ptr LLFacebookConnect::sStateWatcher(new LLEventStream("FacebookConnectState")); boost::scoped_ptr LLFacebookConnect::sContentWatcher(new LLEventStream("FacebookConnectContent")); @@ -274,7 +277,12 @@ LLFacebookConnect::LLFacebookConnect() void LLFacebookConnect::openFacebookWeb(std::string url) { - LLUrlAction::openURLExternal(url); + // Open the URL in an internal browser window without navigation UI + LLFloaterWebContent::Params p; + p.url(url).show_chrome(false); + LLFloaterReg::showInstance("web_content", p); + + //LLUrlAction::openURLExternal(url); } std::string LLFacebookConnect::getFacebookConnectURL(const std::string& route) -- cgit v1.2.3 From 3d6a98d845c871377a52fc924ce06329db34a776 Mon Sep 17 00:00:00 2001 From: Cho Date: Wed, 17 Jul 2013 02:59:40 +0100 Subject: created floater_fbc_web for ACME-734 and ACME-735 --- indra/newview/llfacebookconnect.cpp | 12 ++++++++++-- indra/newview/llviewerfloaterreg.cpp | 2 +- indra/newview/skins/default/xui/en/floater_fbc_web.xml | 9 +++++++++ 3 files changed, 20 insertions(+), 3 deletions(-) create mode 100644 indra/newview/skins/default/xui/en/floater_fbc_web.xml diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp index cf77dd365b..ac92fc6ed5 100644 --- a/indra/newview/llfacebookconnect.cpp +++ b/indra/newview/llfacebookconnect.cpp @@ -52,7 +52,7 @@ void log_facebook_connect_error(const std::string& request, U32 status, const st // Note: 302 (redirect) is *not* an error that warrants logging if (status != 302) { - LL_WARNS("FacebookConnect") << request << " request failed with a " << status << " " << reason << ". Reason: " << code << "(" << description << ")" << LL_ENDL; + LL_WARNS("FacebookConnect") << request << " request failed with a " << status << " " << reason << ". Reason: " << code << " (" << description << ")" << LL_ENDL; } } @@ -76,10 +76,18 @@ public: { if (tokens[0].asString() == "connect") { + // connect to facebook if (query_map.has("code")) { LLFacebookConnect::instance().connectToFacebook(query_map["code"], query_map.get("state")); } + + // this command probably came from the fbc_web browser, so close it + LLFloater* fbc_web = LLFloaterReg::getInstance("fbc_web"); + if (fbc_web) + { + fbc_web->closeFloater(); + } return true; } } @@ -280,7 +288,7 @@ void LLFacebookConnect::openFacebookWeb(std::string url) // Open the URL in an internal browser window without navigation UI LLFloaterWebContent::Params p; p.url(url).show_chrome(false); - LLFloaterReg::showInstance("web_content", p); + LLFloaterReg::showInstance("fbc_web", p); //LLUrlAction::openURLExternal(url); } diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 69bda2c11c..4ce049df03 100755 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -313,7 +313,7 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("my_profile", "floater_my_web_profile.xml", (LLFloaterBuildFunc)&LLFloaterWebProfile::create); LLFloaterReg::add("profile", "floater_web_profile.xml", (LLFloaterBuildFunc)&LLFloaterWebProfile::create); LLFloaterReg::add("how_to", "floater_how_to.xml", (LLFloaterBuildFunc)&LLFloaterWebContent::create); - + LLFloaterReg::add("fbc_web", "floater_fbc_web.xml", (LLFloaterBuildFunc)&LLFloaterWebContent::create); LLFloaterUIPreviewUtil::registerFloater(); LLFloaterReg::add("upload_anim_bvh", "floater_animation_bvh_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build, "upload"); diff --git a/indra/newview/skins/default/xui/en/floater_fbc_web.xml b/indra/newview/skins/default/xui/en/floater_fbc_web.xml new file mode 100644 index 0000000000..0d35e22a19 --- /dev/null +++ b/indra/newview/skins/default/xui/en/floater_fbc_web.xml @@ -0,0 +1,9 @@ + + -- cgit v1.2.3 From 095c53fa060b3d336b408e8b87f30518c8db36cd Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Wed, 17 Jul 2013 17:50:54 -0700 Subject: ACME-731 Create the llsocialaccountpanel class to handle input/feedback. --- indra/newview/llfloatersocial.cpp | 77 ++++++++++++++++++++++ indra/newview/llfloatersocial.h | 23 +++++++ .../skins/default/xui/en/floater_social.xml | 1 + .../skins/default/xui/en/panel_social_account.xml | 20 +++--- 4 files changed, 113 insertions(+), 8 deletions(-) diff --git a/indra/newview/llfloatersocial.cpp b/indra/newview/llfloatersocial.cpp index c8c203fc25..66624f6355 100644 --- a/indra/newview/llfloatersocial.cpp +++ b/indra/newview/llfloatersocial.cpp @@ -48,6 +48,7 @@ static LLRegisterPanelClassWrapper t_panel_status("llsocialstatuspanel"); static LLRegisterPanelClassWrapper t_panel_photo("llsocialphotopanel"); static LLRegisterPanelClassWrapper t_panel_checkin("llsocialcheckinpanel"); +static LLRegisterPanelClassWrapper t_panel_account("llsocialaccountpanel"); const S32 MAX_POSTCARD_DATASIZE = 1024 * 1024; // one megabyte const std::string DEFAULT_CHECKIN_ICON_URL = "http://logok.org/wp-content/uploads/2010/07/podcastlogo1.jpg"; @@ -609,6 +610,82 @@ void LLSocialCheckinPanel::clearAndClose() } } +/////////////////////////// +//LLSocialAccountPanel////// +/////////////////////////// + +LLSocialAccountPanel::LLSocialAccountPanel() : +mAccountCaptionLabel(NULL), +mAccountNameLabel(NULL), +mPanelButtons(NULL), +mConnectButton(NULL), +mUseAnotherAccountButton(NULL), +mDisconnectButton(NULL) +{ + mCommitCallbackRegistrar.add("SocialSharing.Connect", boost::bind(&LLSocialAccountPanel::onConnect, this)); + mCommitCallbackRegistrar.add("SocialSharing.UseAnotherAccount", boost::bind(&LLSocialAccountPanel::onUseAnotherAccount, this)); + mCommitCallbackRegistrar.add("SocialSharing.Disconnect", boost::bind(&LLSocialAccountPanel::onDisconnect, this)); +} + +BOOL LLSocialAccountPanel::postBuild() +{ + mAccountCaptionLabel = getChild("account_caption_label"); + mAccountNameLabel = getChild("account_name_label"); + mPanelButtons = getChild("panel_buttons"); + mConnectButton = getChild("connect_btn"); + mUseAnotherAccountButton = getChild("use_another_account_btn"); + mDisconnectButton = getChild("disconnect_btn"); + + hideConnectButton(); + + return LLPanel::postBuild(); +} + +void LLSocialAccountPanel::showConnectButton() +{ + if(!mConnectButton->getVisible()) + { + mConnectButton->setVisible(TRUE); + LLRect mLayoutStackRect = mPanelButtons->getRect(); + F32 deltaTopPadding = mConnectButton->getRect().mBottom - mUseAnotherAccountButton->getRect().mTop; + mLayoutStackRect.translate(0, -(mConnectButton->getRect().getHeight() + deltaTopPadding)); + mPanelButtons->setRect(mLayoutStackRect); + + mUseAnotherAccountButton->setVisible(FALSE); + mDisconnectButton->setVisible(FALSE); + } +} + +void LLSocialAccountPanel::hideConnectButton() +{ + if(mConnectButton->getVisible()) + { + mConnectButton->setVisible(FALSE); + LLRect mLayoutStackRect = mPanelButtons->getRect(); + F32 deltaTopPadding = mConnectButton->getRect().mBottom - mUseAnotherAccountButton->getRect().mTop; + mLayoutStackRect.translate(0, mConnectButton->getRect().getHeight() + deltaTopPadding); + mPanelButtons->setRect(mLayoutStackRect); + + mUseAnotherAccountButton->setVisible(TRUE); + mDisconnectButton->setVisible(TRUE); + } +} + +void LLSocialAccountPanel::onConnect() +{ + hideConnectButton(); +} + +void LLSocialAccountPanel::onUseAnotherAccount() +{ + +} + +void LLSocialAccountPanel::onDisconnect() +{ + showConnectButton(); +} + //////////////////////// //LLFloaterSocial/////// //////////////////////// diff --git a/indra/newview/llfloatersocial.h b/indra/newview/llfloatersocial.h index f1deeb423d..cdd8a71b79 100644 --- a/indra/newview/llfloatersocial.h +++ b/indra/newview/llfloatersocial.h @@ -115,6 +115,29 @@ private: bool mMapCheckBoxValue; }; +class LLSocialAccountPanel : public LLPanel +{ +public: + LLSocialAccountPanel(); + BOOL postBuild(); + +private: + void onConnect(); + void onUseAnotherAccount(); + void onDisconnect(); + + void showConnectButton(); + void hideConnectButton(); + + LLTextBox * mAccountCaptionLabel; + LLTextBox * mAccountNameLabel; + LLUICtrl * mPanelButtons; + LLUICtrl * mConnectButton; + LLUICtrl * mUseAnotherAccountButton; + LLUICtrl * mDisconnectButton; +}; + + class LLFloaterSocial : public LLFloater { public: diff --git a/indra/newview/skins/default/xui/en/floater_social.xml b/indra/newview/skins/default/xui/en/floater_social.xml index 7f52a8c0da..eb209eb314 100644 --- a/indra/newview/skins/default/xui/en/floater_social.xml +++ b/indra/newview/skins/default/xui/en/floater_social.xml @@ -59,6 +59,7 @@ name="panel_social_place"/> [secondlife:/// Philippe Bossut] + + + -- cgit v1.2.3 From b2e2282e988ab8c7d989d8554a41fda8b8c6e691 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Thu, 18 Jul 2013 16:13:14 -0700 Subject: ACME-727 Display 'Not connected to Facebook' when the user does not have a FB token --- indra/newview/llfloatersocial.cpp | 60 ++++++++++++++++++++-- indra/newview/llfloatersocial.h | 2 + .../skins/default/xui/en/panel_social_account.xml | 15 ++++-- 3 files changed, 70 insertions(+), 7 deletions(-) diff --git a/indra/newview/llfloatersocial.cpp b/indra/newview/llfloatersocial.cpp index 66624f6355..d64e4273f4 100644 --- a/indra/newview/llfloatersocial.cpp +++ b/indra/newview/llfloatersocial.cpp @@ -625,6 +625,8 @@ mDisconnectButton(NULL) mCommitCallbackRegistrar.add("SocialSharing.Connect", boost::bind(&LLSocialAccountPanel::onConnect, this)); mCommitCallbackRegistrar.add("SocialSharing.UseAnotherAccount", boost::bind(&LLSocialAccountPanel::onUseAnotherAccount, this)); mCommitCallbackRegistrar.add("SocialSharing.Disconnect", boost::bind(&LLSocialAccountPanel::onDisconnect, this)); + + setVisibleCallback(boost::bind(&LLSocialAccountPanel::onVisibilityChange, this, _2)); } BOOL LLSocialAccountPanel::postBuild() @@ -636,9 +638,61 @@ BOOL LLSocialAccountPanel::postBuild() mUseAnotherAccountButton = getChild("use_another_account_btn"); mDisconnectButton = getChild("disconnect_btn"); + return LLPanel::postBuild(); +} + +void LLSocialAccountPanel::onVisibilityChange(const LLSD& new_visibility) +{ + bool visible = new_visibility.asBoolean(); + + if(visible) + { + LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialAccountPanel"); + LLEventPumps::instance().obtain("FacebookConnectState").listen("LLSocialAccountPanel", boost::bind(&LLSocialAccountPanel::onFacebookConnectStateChange, this, _1)); + + if(LLFacebookConnect::instance().isConnected()) + { hideConnectButton(); + mAccountCaptionLabel->setText(getString("facebook_connected")); + mAccountNameLabel->setText(std::string("[secondlife:/// Philippe Bossut]")); - return LLPanel::postBuild(); + } + else + { + mAccountCaptionLabel->setText(getString("facebook_disconnected")); + mAccountNameLabel->setText(std::string("")); + LLFacebookConnect::instance().checkConnectionToFacebook(); + } + } + else + { + LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLSocialAccountPanel"); + } +} + +bool LLSocialAccountPanel::onFacebookConnectStateChange(const LLSD& data) +{ + + switch (data.get("enum").asInteger()) + { + case LLFacebookConnect::FB_CONNECTED: + case LLFacebookConnect::FB_POSTING: + case LLFacebookConnect::FB_POSTED: + case LLFacebookConnect::FB_POST_FAILED: + mAccountCaptionLabel->setText(getString("facebook_connected")); + mAccountNameLabel->setText(std::string("[secondlife:/// Philippe Bossut]")); + hideConnectButton(); + break; + case LLFacebookConnect::FB_NOT_CONNECTED: + case LLFacebookConnect::FB_CONNECTION_IN_PROGRESS: + case LLFacebookConnect::FB_CONNECTION_FAILED: + mAccountCaptionLabel->setText(getString("facebook_disconnected")); + mAccountNameLabel->setText(std::string("")); + showConnectButton(); + break; + } + + return false; } void LLSocialAccountPanel::showConnectButton() @@ -673,7 +727,7 @@ void LLSocialAccountPanel::hideConnectButton() void LLSocialAccountPanel::onConnect() { - hideConnectButton(); + LLFacebookConnect::instance().checkConnectionToFacebook(true); } void LLSocialAccountPanel::onUseAnotherAccount() @@ -683,7 +737,7 @@ void LLSocialAccountPanel::onUseAnotherAccount() void LLSocialAccountPanel::onDisconnect() { - showConnectButton(); + LLFacebookConnect::instance().disconnectFromFacebook(); } //////////////////////// diff --git a/indra/newview/llfloatersocial.h b/indra/newview/llfloatersocial.h index cdd8a71b79..48245e34ea 100644 --- a/indra/newview/llfloatersocial.h +++ b/indra/newview/llfloatersocial.h @@ -122,6 +122,8 @@ public: BOOL postBuild(); private: + void onVisibilityChange(const LLSD& new_visibility); + bool onFacebookConnectStateChange(const LLSD& data); void onConnect(); void onUseAnotherAccount(); void onDisconnect(); diff --git a/indra/newview/skins/default/xui/en/panel_social_account.xml b/indra/newview/skins/default/xui/en/panel_social_account.xml index 838a9ba064..470e0848d2 100644 --- a/indra/newview/skins/default/xui/en/panel_social_account.xml +++ b/indra/newview/skins/default/xui/en/panel_social_account.xml @@ -3,7 +3,12 @@ width="304" layout="topleft" name="panel_social_account"> - + + - You are connected to Facebook as: + Not connected to Facebook. + width="210" + visible="false"> @@ -64,7 +70,8 @@ height="23" label="Disconnect" name="disconnect_btn" - width="210"> + width="210" + visible="false"> -- cgit v1.2.3 From 03563fcaa17c0af776c49baaa59421921603cddd Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Thu, 18 Jul 2013 16:23:11 -0700 Subject: ACME-728: When the 'Disconnect' button is clicked the fbc-service disconnect route should be called --- indra/newview/llfloatersocial.cpp | 30 ++++++++++++++++++------------ indra/newview/llfloatersocial.h | 2 ++ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/indra/newview/llfloatersocial.cpp b/indra/newview/llfloatersocial.cpp index d64e4273f4..e61d86c474 100644 --- a/indra/newview/llfloatersocial.cpp +++ b/indra/newview/llfloatersocial.cpp @@ -652,15 +652,11 @@ void LLSocialAccountPanel::onVisibilityChange(const LLSD& new_visibility) if(LLFacebookConnect::instance().isConnected()) { - hideConnectButton(); - mAccountCaptionLabel->setText(getString("facebook_connected")); - mAccountNameLabel->setText(std::string("[secondlife:/// Philippe Bossut]")); - + showConnectedLayout(); } else { - mAccountCaptionLabel->setText(getString("facebook_disconnected")); - mAccountNameLabel->setText(std::string("")); + showDisconnectedLayout(); LLFacebookConnect::instance().checkConnectionToFacebook(); } } @@ -679,16 +675,12 @@ bool LLSocialAccountPanel::onFacebookConnectStateChange(const LLSD& data) case LLFacebookConnect::FB_POSTING: case LLFacebookConnect::FB_POSTED: case LLFacebookConnect::FB_POST_FAILED: - mAccountCaptionLabel->setText(getString("facebook_connected")); - mAccountNameLabel->setText(std::string("[secondlife:/// Philippe Bossut]")); - hideConnectButton(); + showConnectedLayout(); break; case LLFacebookConnect::FB_NOT_CONNECTED: case LLFacebookConnect::FB_CONNECTION_IN_PROGRESS: case LLFacebookConnect::FB_CONNECTION_FAILED: - mAccountCaptionLabel->setText(getString("facebook_disconnected")); - mAccountNameLabel->setText(std::string("")); - showConnectButton(); + showDisconnectedLayout(); break; } @@ -725,6 +717,20 @@ void LLSocialAccountPanel::hideConnectButton() } } +void LLSocialAccountPanel::showDisconnectedLayout() +{ + mAccountCaptionLabel->setText(getString("facebook_disconnected")); + mAccountNameLabel->setText(std::string("")); + showConnectButton(); +} + +void LLSocialAccountPanel::showConnectedLayout() +{ + mAccountCaptionLabel->setText(getString("facebook_connected")); + mAccountNameLabel->setText(std::string("[secondlife:/// Philippe Bossut]")); + hideConnectButton(); +} + void LLSocialAccountPanel::onConnect() { LLFacebookConnect::instance().checkConnectionToFacebook(true); diff --git a/indra/newview/llfloatersocial.h b/indra/newview/llfloatersocial.h index 48245e34ea..e49445a39f 100644 --- a/indra/newview/llfloatersocial.h +++ b/indra/newview/llfloatersocial.h @@ -130,6 +130,8 @@ private: void showConnectButton(); void hideConnectButton(); + void showDisconnectedLayout(); + void showConnectedLayout(); LLTextBox * mAccountCaptionLabel; LLTextBox * mAccountNameLabel; -- cgit v1.2.3 From 519cc4f93daed93f15bfa762ba09a9ba664dbdd6 Mon Sep 17 00:00:00 2001 From: simon Date: Thu, 18 Jul 2013 18:10:13 -0700 Subject: Slight adjustment to RegionRestartSeconds and RegionRestartMinutes messages to show region names. --- indra/newview/skins/default/xui/en/notifications.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index dc54e5e924..340d5f896a 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -6805,7 +6805,7 @@ This will add a bookmark in your inventory so you can quickly IM this Resident. priority="high" sound="UISndAlert" type="notify"> -This region will restart in [MINUTES] minutes. +The region "[NAME]" will restart in [MINUTES] minutes. If you stay in this region you will be logged out. @@ -6815,7 +6815,7 @@ If you stay in this region you will be logged out. priority="high" sound="UISndAlert" type="notify"> -This region will restart in [SECONDS] seconds. +The region "[NAME]" will restart in [SECONDS] seconds. If you stay in this region you will be logged out. -- cgit v1.2.3 From 16709a9bef3ebf24c60eac29f7c5cb743e855da1 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Thu, 18 Jul 2013 21:05:41 -0700 Subject: ACME-734 : WIP : Implemented changes for https URL in the address bar and added options to web floater to hide history and disable buttons --- indra/newview/llfacebookconnect.cpp | 6 ++- indra/newview/llfloaterwebcontent.cpp | 43 +++++++++++++++++----- indra/newview/llfloaterwebcontent.h | 5 +++ .../skins/default/xui/en/floater_web_content.xml | 20 +++++++++- 4 files changed, 61 insertions(+), 13 deletions(-) diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp index ac92fc6ed5..eb9b93161c 100644 --- a/indra/newview/llfacebookconnect.cpp +++ b/indra/newview/llfacebookconnect.cpp @@ -287,7 +287,11 @@ void LLFacebookConnect::openFacebookWeb(std::string url) { // Open the URL in an internal browser window without navigation UI LLFloaterWebContent::Params p; - p.url(url).show_chrome(false); + p.url(url).show_chrome(true); + p.url(url).allow_address_entry(false); + p.url(url).allow_back_forward_navigation(false); + p.url(url).save_url_history(false); + p.url(url).trusted_content(true); LLFloaterReg::showInstance("fbc_web", p); //LLUrlAction::openURLExternal(url); diff --git a/indra/newview/llfloaterwebcontent.cpp b/indra/newview/llfloaterwebcontent.cpp index 3fe2518de6..92dbbb402d 100755 --- a/indra/newview/llfloaterwebcontent.cpp +++ b/indra/newview/llfloaterwebcontent.cpp @@ -46,7 +46,9 @@ LLFloaterWebContent::_Params::_Params() id("id"), window_class("window_class", "web_content"), show_chrome("show_chrome", true), - allow_address_entry("allow_address_entry", true), + allow_address_entry("allow_address_entry", true), + allow_back_forward_navigation("allow_back_forward_navigation", true), + save_url_history("save_url_history", true), preferred_media_size("preferred_media_size"), trusted_content("trusted_content", false), show_page_title("show_page_title", true) @@ -58,6 +60,7 @@ LLFloaterWebContent::LLFloaterWebContent( const Params& params ) mWebBrowser(NULL), mAddressCombo(NULL), mSecureLockIcon(NULL), + mSecurePrefix(NULL), mStatusBarText(NULL), mStatusBarProgress(NULL), mBtnBack(NULL), @@ -65,7 +68,9 @@ LLFloaterWebContent::LLFloaterWebContent( const Params& params ) mBtnReload(NULL), mBtnStop(NULL), mUUID(params.id()), - mShowPageTitle(params.show_page_title) + mShowPageTitle(params.show_page_title), + mAllowNavigation(true), + mSaveURLHistory(true) { mCommitCallbackRegistrar.add( "WebContent.Back", boost::bind( &LLFloaterWebContent::onClickBack, this )); mCommitCallbackRegistrar.add( "WebContent.Forward", boost::bind( &LLFloaterWebContent::onClickForward, this )); @@ -97,7 +102,8 @@ BOOL LLFloaterWebContent::postBuild() // cache image for secure browsing mSecureLockIcon = getChild< LLIconCtrl >("media_secure_lock_flag"); - + mSecurePrefix = getChild< LLTextBox >( "secured_prefix" ); + // initialize the URL history using the system URL History manager initializeURLHistory(); @@ -243,6 +249,8 @@ void LLFloaterWebContent::open_media(const Params& p) getChild("status_bar")->setVisible(p.show_chrome); getChild("nav_controls")->setVisible(p.show_chrome); bool address_entry_enabled = p.allow_address_entry && !p.trusted_content; + mAllowNavigation = p.allow_back_forward_navigation; + mSaveURLHistory = p.save_url_history; getChildView("address")->setEnabled(address_entry_enabled); getChildView("popexternal")->setEnabled(address_entry_enabled); @@ -295,8 +303,8 @@ void LLFloaterWebContent::onClose(bool app_quitting) void LLFloaterWebContent::draw() { // this is asynchronous so we need to keep checking - mBtnBack->setEnabled( mWebBrowser->canNavigateBack() ); - mBtnForward->setEnabled( mWebBrowser->canNavigateForward() ); + mBtnBack->setEnabled( mWebBrowser->canNavigateBack() && mAllowNavigation); + mBtnForward->setEnabled( mWebBrowser->canNavigateForward() && mAllowNavigation); LLFloater::draw(); } @@ -344,16 +352,28 @@ void LLFloaterWebContent::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent mStatusBarText->setText( end_str ); // decide if secure browsing icon should be displayed - std::string prefix = std::string("https://"); + std::string prefix = std::string("https://"); std::string test_prefix = mCurrentURL.substr(0, prefix.length()); LLStringUtil::toLower(test_prefix); - if(test_prefix == prefix) + if (test_prefix == prefix) { mSecureLockIcon->setVisible(true); + mSecurePrefix->setVisible(true); + // Hack : we suppress the "https" prefix and move the text a bit + // to make space for the lock icon and the green "https" text. + // However, so not to confuse the list management, we're not adding + // that hacked url to the history. The full url is already in there. + std::string url = mCurrentURL; + url.replace(0,5,""); + url = " " + url; + mAddressCombo->remove( url ); + mAddressCombo->add( url ); + mAddressCombo->selectByValue( url ); } else { mSecureLockIcon->setVisible(false); + mSecurePrefix->setVisible(false); } } else if(event == MEDIA_EVENT_CLOSE_REQUEST) @@ -399,9 +419,12 @@ void LLFloaterWebContent::set_current_url(const std::string& url) { mCurrentURL = url; - // serialize url history into the system URL History manager - LLURLHistory::removeURL("browser", mCurrentURL); - LLURLHistory::addURL("browser", mCurrentURL); + LLURLHistory::removeURL("browser", mCurrentURL); + if (mSaveURLHistory) + { + // serialize url history into the system URL History manager + LLURLHistory::addURL("browser", mCurrentURL); + } mAddressCombo->remove( mCurrentURL ); mAddressCombo->add( mCurrentURL ); diff --git a/indra/newview/llfloaterwebcontent.h b/indra/newview/llfloaterwebcontent.h index cfc87e9015..b416328e93 100755 --- a/indra/newview/llfloaterwebcontent.h +++ b/indra/newview/llfloaterwebcontent.h @@ -54,6 +54,8 @@ public: id; Optional show_chrome, allow_address_entry, + allow_back_forward_navigation, + save_url_history, trusted_content, show_page_title; Optional preferred_media_size; @@ -97,6 +99,7 @@ protected: LLMediaCtrl* mWebBrowser; LLComboBox* mAddressCombo; LLIconCtrl* mSecureLockIcon; + LLTextBox* mSecurePrefix; LLTextBox* mStatusBarText; LLProgressBar* mStatusBarProgress; @@ -108,6 +111,8 @@ protected: std::string mCurrentURL; std::string mUUID; bool mShowPageTitle; + bool mAllowNavigation; + bool mSaveURLHistory; }; #endif // LL_LLFLOATERWEBCONTENT_H diff --git a/indra/newview/skins/default/xui/en/floater_web_content.xml b/indra/newview/skins/default/xui/en/floater_web_content.xml index cea10adca8..a1563dc9ae 100755 --- a/indra/newview/skins/default/xui/en/floater_web_content.xml +++ b/indra/newview/skins/default/xui/en/floater_web_content.xml @@ -125,14 +125,30 @@ + + https + - - + - + + + [https://support.secondlife.com/ Learn more.] + -- cgit v1.2.3 From 1abafdc8b5bf0197b2a3586737d461140e07e994 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Fri, 2 Aug 2013 14:42:03 -0700 Subject: Switching SLShareHost to pdp location --- indra/newview/app_settings/settings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 832610c72c..20919adc76 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -3465,7 +3465,7 @@ Type String Value - http://int.fbc.aditi.lindenlab.com + http://pdp15.lindenlab.com FastCacheFetchEnabled -- cgit v1.2.3 From 56b54aaf2954765f68c4fbe843495fdcdb918744 Mon Sep 17 00:00:00 2001 From: Cho Date: Sat, 3 Aug 2013 01:42:31 +0100 Subject: made checkin use a placeholder location URL when the given SLURL is not valid --- indra/newview/llfloatersocial.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/indra/newview/llfloatersocial.cpp b/indra/newview/llfloatersocial.cpp index 4cbc9c0218..eb9a7d2400 100644 --- a/indra/newview/llfloatersocial.cpp +++ b/indra/newview/llfloatersocial.cpp @@ -53,6 +53,7 @@ static LLRegisterPanelClassWrapper t_panel_checkin("llsoci static LLRegisterPanelClassWrapper t_panel_account("llsocialaccountpanel"); const S32 MAX_POSTCARD_DATASIZE = 1024 * 1024; // one megabyte +const std::string DEFAULT_CHECKIN_LOCATION_URL = "http://maps.secondlife.com/"; const std::string DEFAULT_CHECKIN_ICON_URL = "http://logok.org/wp-content/uploads/2010/07/podcastlogo1.jpg"; std::string get_map_url() @@ -582,6 +583,13 @@ void LLSocialCheckinPanel::sendCheckin() LLSLURL slurl; LLAgentUI::buildSLURL(slurl); std::string slurl_string = slurl.getSLURLString(); + + // Use a valid http:// URL if the scheme is secondlife:// + LLURI slurl_uri(slurl_string); + if (slurl_uri.scheme() == LLSLURL::SLURL_SECONDLIFE_SCHEME) + { + slurl_string = DEFAULT_CHECKIN_LOCATION_URL; + } // Get the region name std::string region_name = gAgent.getRegion()->getName(); -- cgit v1.2.3 From a4bad4ba21787c6895368f5eb5cda7c3881d57da Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Fri, 2 Aug 2013 18:58:37 -0700 Subject: ACME-744: Temporary solution. The internal browser was not setting keyboard focus properly...as to why an investigation is needed. For now explicly setting keyboard focus to the internal browser after it is displayed. --- indra/newview/llfacebookconnect.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp index e4ac2a4960..560208c31e 100644 --- a/indra/newview/llfacebookconnect.cpp +++ b/indra/newview/llfacebookconnect.cpp @@ -333,7 +333,9 @@ void LLFacebookConnect::openFacebookWeb(std::string url) p.url(url).allow_address_entry(false); p.url(url).allow_back_forward_navigation(false); p.url(url).trusted_content(true); - LLFloaterReg::showInstance("fbc_web", p); + LLFloater *floater = LLFloaterReg::showInstance("fbc_web", p); + //TODO Gil: Hack to give the focus to the web browser to show cursor, will fix + gFocusMgr.setKeyboardFocus( floater ); //LLUrlAction::openURLExternal(url); } -- cgit v1.2.3 From 35278461964653fc032995afdc366f096c937a14 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Fri, 2 Aug 2013 19:25:10 -0700 Subject: ACME-796 : Do not flip the fbc state to failure while connecting through web browser. Handle the dismiss case as best as possible. --- indra/newview/llfacebookconnect.cpp | 2 +- indra/newview/llfloatersocial.cpp | 6 +++++- indra/newview/llfloaterwebcontent.cpp | 11 +++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp index e4ac2a4960..98fd8b1d7b 100644 --- a/indra/newview/llfacebookconnect.cpp +++ b/indra/newview/llfacebookconnect.cpp @@ -122,7 +122,7 @@ public: // Grab some graph data now that we are connected LLFacebookConnect::instance().setConnectionState(LLFacebookConnect::FB_CONNECTED); } - else + else if (status != 302) { LLFacebookConnect::instance().setConnectionState(LLFacebookConnect::FB_CONNECTION_FAILED); log_facebook_connect_error("Connect", status, reason, content.get("error_code"), content.get("error_description")); diff --git a/indra/newview/llfloatersocial.cpp b/indra/newview/llfloatersocial.cpp index eb9a7d2400..59db93f4b2 100644 --- a/indra/newview/llfloatersocial.cpp +++ b/indra/newview/llfloatersocial.cpp @@ -684,8 +684,12 @@ void LLSocialAccountPanel::onVisibilityChange(const LLSD& new_visibility) else { showDisconnectedLayout(); - LLFacebookConnect::instance().checkConnectionToFacebook(); } + if ((LLFacebookConnect::instance().getConnectionState() == LLFacebookConnect::FB_NOT_CONNECTED) || + (LLFacebookConnect::instance().getConnectionState() == LLFacebookConnect::FB_CONNECTION_FAILED)) + { + LLFacebookConnect::instance().checkConnectionToFacebook(); + } } else { diff --git a/indra/newview/llfloaterwebcontent.cpp b/indra/newview/llfloaterwebcontent.cpp index e81055f7b1..9d703d2752 100755 --- a/indra/newview/llfloaterwebcontent.cpp +++ b/indra/newview/llfloaterwebcontent.cpp @@ -29,6 +29,7 @@ #include "llcombobox.h" #include "lliconctrl.h" #include "llfloaterreg.h" +#include "llfacebookconnect.h" #include "lllayoutstack.h" #include "llpluginclassmedia.h" #include "llprogressbar.h" @@ -293,6 +294,16 @@ void LLFloaterWebContent::onOpen(const LLSD& key) //virtual void LLFloaterWebContent::onClose(bool app_quitting) { + // If we close the web browsing window showing the facebook login, we need to signal to this object that the connection will not happen + LLFloater* fbc_web = LLFloaterReg::getInstance("fbc_web"); + if (fbc_web == this) + { + if (!LLFacebookConnect::instance().isConnected()) + { + LLFacebookConnect::instance().setConnectionState(LLFacebookConnect::FB_CONNECTION_FAILED); + } + } + LLViewerMedia::proxyWindowClosed(mUUID); destroy(); } -- cgit v1.2.3 From 106f161a6e33cef2ef1651dff829aca0193e04ee Mon Sep 17 00:00:00 2001 From: dmitry Date: Mon, 5 Aug 2013 15:09:01 +0300 Subject: MAINT-822 FIXED [PUBLIC]Inventory window should focus on search field --- indra/newview/llpanelmaininventory.cpp | 7 +++++++ indra/newview/llpanelmaininventory.h | 3 +++ indra/newview/llsidepanelinventory.cpp | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index d6535c88e9..c38a78365a 100755 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -540,6 +540,13 @@ void LLPanelMainInventory::changed(U32) updateItemcountText(); } +void LLPanelMainInventory::setFocusFilterEditor() +{ + if(mFilterEditor) + { + mFilterEditor->setFocus(true); + } +} // virtual void LLPanelMainInventory::draw() diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h index 899931aa89..4fd93b24a4 100755 --- a/indra/newview/llpanelmaininventory.h +++ b/indra/newview/llpanelmaininventory.h @@ -82,6 +82,9 @@ public: void setSelectCallback(const LLFolderView::signal_t::slot_type& cb); void onFilterEdit(const std::string& search_string ); + + void setFocusFilterEditor(); + protected: // // Misc functions diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index 8915bb2fef..cbf43dbb93 100755 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -397,7 +397,7 @@ void LLSidepanelInventory::onToggleInboxBtn() void LLSidepanelInventory::onOpen(const LLSD& key) { LLFirstUse::newInventory(false); - + mPanelMainInventory->setFocusFilterEditor(); #if AUTO_EXPAND_INBOX // Expand the inbox if we have fresh items LLPanelMarketplaceInbox * inbox = findChild(MARKETPLACE_INBOX_PANEL); -- cgit v1.2.3 From b75213b39ad7456d04d3e1644f2116853ead0da0 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Mon, 5 Aug 2013 11:19:54 -0400 Subject: open-185: remove duplicate gperftools entry in autobuild.xml --- autobuild.xml | 36 ------------------------------------ doc/contributions.txt | 1 + 2 files changed, 1 insertion(+), 36 deletions(-) diff --git a/autobuild.xml b/autobuild.xml index 628d3f6883..e13536c3b3 100755 --- a/autobuild.xml +++ b/autobuild.xml @@ -879,42 +879,6 @@ - gperftools - - license - bsd - license_file - LICENSES/gperftools.txt - name - gperftools - platforms - - linux - - archive - - hash - 8aedfdcf670348c18a9991ae1b384a61 - url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-perftools/rev/262672/arch/Linux/installer/gperftools-2.0-linux-20120727.tar.bz2 - - name - linux - - windows - - archive - - hash - f62841804acb91e1309603a84f3f0ce8 - url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-perftools/rev/262672/arch/CYGWIN/installer/gperftools-2.0-windows-20120727.tar.bz2 - - name - windows - - - gstreamer license diff --git a/doc/contributions.txt b/doc/contributions.txt index 72096a0ab7..18e8ba0189 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -300,6 +300,7 @@ Christopher Organiser Ciaran Laval Cinder Roxley BUG-2326 + OPEN-185 STORM-1703 STORM-1958 STORM-1951 -- cgit v1.2.3 From d9d1d2722737069618e15eac2f33ac4600c357ba Mon Sep 17 00:00:00 2001 From: Cho Date: Mon, 5 Aug 2013 19:04:08 +0100 Subject: changed wording of learn more link for ACME-797 --- indra/newview/skins/default/xui/en/panel_social_account.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/newview/skins/default/xui/en/panel_social_account.xml b/indra/newview/skins/default/xui/en/panel_social_account.xml index 957d117d9d..882e410bdb 100644 --- a/indra/newview/skins/default/xui/en/panel_social_account.xml +++ b/indra/newview/skins/default/xui/en/panel_social_account.xml @@ -65,11 +65,11 @@ length="1" follows="top|left" height="16" - left="3" + left="0" name="account_learn_more_label" - top_pad="5" + top_pad="20" type="string"> - [https://support.secondlife.com/ Learn more.] + [https://support.secondlife.com/ Learn about posting to Facebook] -- cgit v1.2.3 From e238ddf54bbf6b6adfc115e32bff03de75a8f4ac Mon Sep 17 00:00:00 2001 From: simon Date: Mon, 5 Aug 2013 14:53:07 -0700 Subject: MAINT-2966 : Add viewer alert info for "NoEnterRegionMaybeFull" --- indra/newview/skins/default/xui/en/notifications.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 99824862e2..d14aed273d 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -8707,11 +8707,11 @@ You are no longer allowed here and have [EJECT_TIME] seconds to leave. fail -You can't enter this region because -the server is full. +You can't enter region "[NAME]". +It may be full or restarting soon. Date: Tue, 6 Aug 2013 10:27:18 -0700 Subject: ACME-744: Adjusted comment to be more clear --- indra/newview/llfacebookconnect.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp index 645f62579d..ad776b2d1a 100644 --- a/indra/newview/llfacebookconnect.cpp +++ b/indra/newview/llfacebookconnect.cpp @@ -334,7 +334,10 @@ void LLFacebookConnect::openFacebookWeb(std::string url) p.url(url).allow_back_forward_navigation(false); p.url(url).trusted_content(true); LLFloater *floater = LLFloaterReg::showInstance("fbc_web", p); - //TODO Gil: Hack to give the focus to the web browser to show cursor, will fix + //the internal web browser has a bug that prevents it from gaining focus unless a mouse event occurs first (it seems). + //So when showing the internal web browser, set focus to it's containing floater "fbc_web". When a mouse event + //occurs on the "webbrowser" panel part of the floater, a mouse cursor will properly show and the "webbrowser" will gain focus. + //fbc_web floater contains the "webbrowser" panel. JIRA: ACME-744 gFocusMgr.setKeyboardFocus( floater ); //LLUrlAction::openURLExternal(url); -- cgit v1.2.3 From 3e08ccf6abb6f6ca7f1fa2fc6e80fd6589203f28 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Tue, 6 Aug 2013 17:12:32 -0700 Subject: ACME-801: Adding a suggested friend as a friend does not remove them from the suggested friend list --- indra/newview/llfacebookconnect.cpp | 5 +---- indra/newview/llfacebookconnect.h | 2 -- indra/newview/llpanelpeople.cpp | 42 ++++++++++++++++--------------------- indra/newview/llpanelpeople.h | 1 - 4 files changed, 19 insertions(+), 31 deletions(-) diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp index ad776b2d1a..bdc17773d7 100644 --- a/indra/newview/llfacebookconnect.cpp +++ b/indra/newview/llfacebookconnect.cpp @@ -320,8 +320,7 @@ LLFacebookConnect::LLFacebookConnect() : mConnectionState(FB_NOT_CONNECTED), mConnected(false), mInfo(), - mContent(), - mGeneration(0) + mContent() { } @@ -506,7 +505,6 @@ const LLSD& LLFacebookConnect::getInfo() const void LLFacebookConnect::storeContent(const LLSD& content) { - mGeneration++; mContent = content; sContentWatcher->post(content); @@ -519,7 +517,6 @@ const LLSD& LLFacebookConnect::getContent() const void LLFacebookConnect::clearContent() { - mGeneration++; mContent = LLSD(); } diff --git a/indra/newview/llfacebookconnect.h b/indra/newview/llfacebookconnect.h index b9afd181e9..0f005cbe24 100644 --- a/indra/newview/llfacebookconnect.h +++ b/indra/newview/llfacebookconnect.h @@ -78,7 +78,6 @@ public: bool isConnected() { return mConnected; } bool isTransactionOngoing() { return ((mConnectionState == FB_CONNECTION_IN_PROGRESS) || (mConnectionState == FB_POSTING) || (mConnectionState == FB_DISCONNECTING)); } EConnectionState getConnectionState() { return mConnectionState; } - S32 generation() { return mGeneration; } void openFacebookWeb(std::string url); @@ -93,7 +92,6 @@ private: BOOL mConnected; LLSD mInfo; LLSD mContent; - S32 mGeneration; static boost::scoped_ptr sStateWatcher; static boost::scoped_ptr sInfoWatcher; diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index f1ee76f733..1786f73a8b 100755 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -510,8 +510,7 @@ LLPanelPeople::LLPanelPeople() mNearbyList(NULL), mRecentList(NULL), mGroupList(NULL), - mMiniMap(NULL), - mFacebookListGeneration(0) + mMiniMap(NULL) { mFriendListUpdater = new LLFriendListUpdater(boost::bind(&LLPanelPeople::updateFriendList, this)); mNearbyListUpdater = new LLNearbyListUpdater(boost::bind(&LLPanelPeople::updateNearbyList, this)); @@ -783,36 +782,31 @@ void LLPanelPeople::updateFriendList() bool LLPanelPeople::updateSuggestedFriendList() { - if (LLFacebookConnect::instance().generation() != mFacebookListGeneration) - { - mFacebookListGeneration = LLFacebookConnect::instance().generation(); + const LLAvatarTracker& av_tracker = LLAvatarTracker::instance(); + uuid_vec_t& suggested_friends = mSuggestedFriends->getIDs(); + suggested_friends.clear(); - const LLAvatarTracker& av_tracker = LLAvatarTracker::instance(); - uuid_vec_t& suggested_friends = mSuggestedFriends->getIDs(); - suggested_friends.clear(); + //Add suggested friends + LLSD friends = LLFacebookConnect::instance().getContent(); + for (LLSD::array_const_iterator i = friends.beginArray(); i != friends.endArray(); ++i) + { + LLUUID agent_id = (*i).asUUID(); + bool second_life_buddy = agent_id.notNull() ? av_tracker.isBuddy(agent_id) : false; - //Add suggested friends - LLSD friends = LLFacebookConnect::instance().getContent(); - for (LLSD::array_const_iterator i = friends.beginArray(); i != friends.endArray(); ++i) + if(!second_life_buddy) { - LLUUID agent_id = (*i).asUUID(); - bool second_life_buddy = agent_id.notNull() ? av_tracker.isBuddy(agent_id) : false; - - if(!second_life_buddy) + //FB+SL but not SL friend + if (agent_id.notNull()) { - //FB+SL but not SL friend - if (agent_id.notNull()) - { - suggested_friends.push_back(agent_id); - } + suggested_friends.push_back(agent_id); } } - - //Force a refresh when there aren't any filter matches (prevent displaying content that shouldn't display) - mSuggestedFriends->setDirty(true, !mSuggestedFriends->filterHasMatches()); - showFriendsAccordionsIfNeeded(); } + //Force a refresh when there aren't any filter matches (prevent displaying content that shouldn't display) + mSuggestedFriends->setDirty(true, !mSuggestedFriends->filterHasMatches()); + showFriendsAccordionsIfNeeded(); + return false; } diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h index b746835dfb..c7141f36ee 100755 --- a/indra/newview/llpanelpeople.h +++ b/indra/newview/llpanelpeople.h @@ -140,7 +140,6 @@ private: LLAvatarList* mNearbyList; LLAvatarList* mRecentList; LLGroupList* mGroupList; - S32 mFacebookListGeneration; LLNetMap* mMiniMap; std::vector mSavedOriginalFilters; -- cgit v1.2.3 From 4ae06c7e3340e09ffe6b54dccd4faeb210330d7e Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Wed, 7 Aug 2013 18:03:16 -0400 Subject: add line number of recognizer to diff report --- scripts/gpu_table_tester | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/scripts/gpu_table_tester b/scripts/gpu_table_tester index 339823246c..76994da1aa 100755 --- a/scripts/gpu_table_tester +++ b/scripts/gpu_table_tester @@ -201,16 +201,16 @@ $_, $Supported{$RecognizedBy{$_}},$Class{$RecognizedBy{$_}},$StatsBased{$Recogni my $ReportLineTemplate = "A102xxxA12xxxA2xxxxA2xxxxA5A*"; # MUST match the format STDOUT above format DIFF_TOP = - ------------- OLD ------------- ----------- NEW --------------- -GPU String Supported? Class Stats OpenGL Supported? Class Stats OpenGL ------------------------------------------------------------------------------------------------------- ----------- ----- ----- ------ ----------- ----- ----- ------ + ------------- OLD ------------- ----------- NEW -------------------- +GPU String Supported? Class Stats OpenGL Supported? Class Stats OpenGL Line +------------------------------------------------------------------------------------------------------ ----------- ----- ----- ------ ----------- ----- ----- ------ ----- . my ( $oldSupported, $oldClass, $newSupported, $newClass ); format DIFF = -@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<... @<<<<<<<<<< @> @> @<<<< @<<<<<<<<<< @> @> @<<<< -$_, $oldSupported, $oldClass, $oldStatsBased, $oldExpectedOpenGL, $newSupported, $newClass, $newStatsBased, $newExpectedOpenGL +@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<... @<<<<<<<<<< @> @> @<<<< @<<<<<<<<<< @> @> @<<<< @>>>> +$_, $oldSupported, $oldClass, $oldStatsBased, $oldExpectedOpenGL, $newSupported, $newClass, $newStatsBased, $newExpectedOpenGL, $newRecognizedLine . if ( ! $Diff ) @@ -255,6 +255,7 @@ else $newClass = $Class{$RecognizedBy{$_}}; $newStatsBased = $StatsBased{$RecognizedBy{$_}}; $newExpectedOpenGL = $ExpectedOpenGL{$RecognizedBy{$_}}; + $newRecognizedLine = $RecognizerLine{$RecognizedBy{$_}}; if ( ! defined $OldSupported{$_} ) { -- cgit v1.2.3 From e51e79c4d4147f89304a03ef5ee9ec4dfe886d52 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Wed, 7 Aug 2013 18:04:03 -0400 Subject: truncate gpu id strings to 100 characters (avoids diff problems) --- scripts/gpu_table_tester | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/gpu_table_tester b/scripts/gpu_table_tester index 76994da1aa..6989e6f968 100755 --- a/scripts/gpu_table_tester +++ b/scripts/gpu_table_tester @@ -175,6 +175,7 @@ my %RecognizedBy; while (<>) { chomp; + $_ = substr($_,0,100); my $lcInput = lc $_; # the real gpu table parser lowercases the input string my $recognizer; $RecognizedBy{$_} = $NoMatch; -- cgit v1.2.3 From d27fc4ad338cb2839363ce2cca70359c82da5b98 Mon Sep 17 00:00:00 2001 From: simon Date: Wed, 7 Aug 2013 15:56:29 -0700 Subject: MAINT-2257 : Create ability to limit region/estate and parcel access by either Piof or Group membership (viewer changes). Using Mnikolenko's patch --- indra/llinventory/llparcel.cpp | 5 +++++ indra/newview/llfloaterland.cpp | 26 +++++++------------------- 2 files changed, 12 insertions(+), 19 deletions(-) diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp index 37c603348e..fdb056b4a1 100755 --- a/indra/llinventory/llparcel.cpp +++ b/indra/llinventory/llparcel.cpp @@ -521,6 +521,11 @@ S32 LLParcel::blockAccess(const LLUUID& agent_id, const LLUUID& group_id, return BA_ALLOWED; } + if(getParcelFlag(PF_DENY_ANONYMOUS) && is_agent_identified && is_agent_transacted) + { + return BA_ALLOWED; + } + return BA_NOT_IN_GROUP; } diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 6ef4d8717d..22f42875fb 100755 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -2377,7 +2377,7 @@ void LLPanelLandAccess::refresh() { BOOL use_access_list = parcel->getParcelFlag(PF_USE_ACCESS_LIST); BOOL use_group = parcel->getParcelFlag(PF_USE_ACCESS_GROUP); - BOOL public_access = !use_access_list && !use_group; + BOOL public_access = !use_access_list; getChild("public_access")->setValue(public_access ); getChild("GroupCheck")->setValue(use_group ); @@ -2582,7 +2582,6 @@ void LLPanelLandAccess::refresh_ui() { getChildView("Only Allow")->setToolTip(std::string()); } - getChildView("GroupCheck")->setEnabled(FALSE); getChildView("PassCheck")->setEnabled(FALSE); getChildView("pass_combo")->setEnabled(FALSE); getChildView("AccessList")->setEnabled(FALSE); @@ -2592,11 +2591,7 @@ void LLPanelLandAccess::refresh_ui() getChildView("limit_payment")->setEnabled(FALSE); getChildView("limit_age_verified")->setEnabled(FALSE); - std::string group_name; - if (gCacheName->getGroupName(parcel->getGroupID(), group_name)) - { - getChildView("GroupCheck")->setEnabled(can_manage_allowed); - } + BOOL group_access = getChild("GroupCheck")->getValue().asBoolean(); BOOL sell_passes = getChild("PassCheck")->getValue().asBoolean(); getChildView("PassCheck")->setEnabled(can_manage_allowed); @@ -2607,6 +2602,11 @@ void LLPanelLandAccess::refresh_ui() getChildView("HoursSpin")->setEnabled(can_manage_allowed); } } + std::string group_name; + if (gCacheName->getGroupName(parcel->getGroupID(), group_name)) + { + getChildView("GroupCheck")->setEnabled(can_manage_allowed); + } getChildView("AccessList")->setEnabled(can_manage_allowed); S32 allowed_list_count = parcel->mAccessList.size(); getChildView("add_allowed")->setEnabled(can_manage_allowed && allowed_list_count < PARCEL_MAX_ACCESS_LIST); @@ -2652,17 +2652,6 @@ void LLPanelLandAccess::onCommitPublicAccess(LLUICtrl *ctrl, void *userdata) { return; } - - // If we disabled public access, enable group access by default (if applicable) - BOOL public_access = self->getChild("public_access")->getValue().asBoolean(); - if (public_access == FALSE) - { - std::string group_name; - if (gCacheName->getGroupName(parcel->getGroupID(), group_name)) - { - self->getChild("GroupCheck")->setValue(public_access ? FALSE : TRUE); - } - } onCommitAny(ctrl, userdata); } @@ -2697,7 +2686,6 @@ void LLPanelLandAccess::onCommitAny(LLUICtrl *ctrl, void *userdata) if (public_access) { use_access_list = FALSE; - use_access_group = FALSE; limit_payment = self->getChild("limit_payment")->getValue().asBoolean(); limit_age_verified = self->getChild("limit_age_verified")->getValue().asBoolean(); } -- cgit v1.2.3 From 9167198312ac98f02640ecc3c445fa721413febd Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Wed, 7 Aug 2013 16:12:29 -0700 Subject: ACME-814 : Disable Post in Photo panel while the preview is processing --- indra/newview/llfloatersocial.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/indra/newview/llfloatersocial.cpp b/indra/newview/llfloatersocial.cpp index 59db93f4b2..937f76648d 100644 --- a/indra/newview/llfloatersocial.cpp +++ b/indra/newview/llfloatersocial.cpp @@ -205,8 +205,8 @@ void LLSocialPhotoPanel::draw() { LLSnapshotLivePreview * previewp = static_cast(mPreviewHandle.get()); + // Enable interaction only if no transaction with the service is on-going (prevent duplicated posts) bool no_ongoing_connection = !(LLFacebookConnect::instance().isTransactionOngoing()); - mPostButton->setEnabled(no_ongoing_connection); mCancelButton->setEnabled(no_ongoing_connection); mCaptionTextBox->setEnabled(no_ongoing_connection); mResolutionComboBox->setEnabled(no_ongoing_connection); @@ -247,6 +247,9 @@ void LLSocialPhotoPanel::draw() // Update the visibility of the working (computing preview) label mWorkingLabel->setVisible(!(previewp && previewp->getSnapshotUpToDate())); + // Enable Post if we have a preview to send and no on going connection being processed + mPostButton->setEnabled(no_ongoing_connection && (previewp && previewp->getSnapshotUpToDate())); + // Draw the rest of the panel on top of it LLPanel::draw(); } -- cgit v1.2.3 From 77baf98d12c75621f8b1d69824abf01b9aa260f7 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Wed, 7 Aug 2013 18:45:50 -0700 Subject: ACME-820 : Let checkin checkbox be available and swap tile map / default tile when toggling --- indra/newview/llfloatersocial.cpp | 11 +++++------ indra/newview/llfloatersocial.h | 2 +- .../default/textures/icons/map_placeholder.jpg | Bin 25641 -> 12931 bytes .../skins/default/xui/en/panel_social_place.xml | 13 ++++++++++++- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/indra/newview/llfloatersocial.cpp b/indra/newview/llfloatersocial.cpp index 937f76648d..66a586b16b 100644 --- a/indra/newview/llfloatersocial.cpp +++ b/indra/newview/llfloatersocial.cpp @@ -499,8 +499,8 @@ BOOL LLSocialCheckinPanel::postBuild() mMessageTextEditor = getChild("place_caption"); mMapLoadingIndicator = getChild("map_loading_indicator"); mMapPlaceholder = getChild("map_placeholder"); + mMapDefault = getChild("map_default"); mMapCheckBox = getChild("add_place_view_cb"); - mMapCheckBoxValue = mMapCheckBox->get(); return LLPanel::postBuild(); } @@ -511,6 +511,7 @@ void LLSocialCheckinPanel::draw() mPostButton->setEnabled(no_ongoing_connection); mCancelButton->setEnabled(no_ongoing_connection); mMessageTextEditor->setEnabled(no_ongoing_connection); + mMapCheckBox->setEnabled(no_ongoing_connection); std::string map_url = get_map_url(); // Did we change location? @@ -524,9 +525,6 @@ void LLSocialCheckinPanel::draw() // In the meantime, put the "loading" indicator on, hide the tile map and disable the checkbox mMapLoadingIndicator->setVisible(true); mMapPlaceholder->setVisible(false); - mMapCheckBoxValue = mMapCheckBox->get(); - mMapCheckBox->set(false); - mMapCheckBox->setEnabled(false); } // Are we done loading the map tile? if (mReloadingMapTexture && mMapTexture->isFullyLoaded()) @@ -540,9 +538,10 @@ void LLSocialCheckinPanel::draw() // Now hide the loading indicator, bring the tile in view and reenable the checkbox with its previous value mMapLoadingIndicator->setVisible(false); mMapPlaceholder->setVisible(true); - mMapCheckBox->setEnabled(no_ongoing_connection); - mMapCheckBox->set(mMapCheckBoxValue); } + // Show the default icon if that's the checkbox value (the real one...) + // This will hide/show the loading indicator and/or tile underneath + mMapDefault->setVisible(!(mMapCheckBox->get())); LLPanel::draw(); } diff --git a/indra/newview/llfloatersocial.h b/indra/newview/llfloatersocial.h index e7ad9ac12e..bbe07c9704 100644 --- a/indra/newview/llfloatersocial.h +++ b/indra/newview/llfloatersocial.h @@ -110,9 +110,9 @@ private: LLUICtrl* mMessageTextEditor; LLUICtrl* mMapLoadingIndicator; LLIconCtrl* mMapPlaceholder; + LLIconCtrl* mMapDefault; LLCheckBoxCtrl* mMapCheckBox; bool mReloadingMapTexture; - bool mMapCheckBoxValue; }; class LLSocialAccountPanel : public LLPanel diff --git a/indra/newview/skins/default/textures/icons/map_placeholder.jpg b/indra/newview/skins/default/textures/icons/map_placeholder.jpg index 0cb86c58d3..57204e2261 100644 Binary files a/indra/newview/skins/default/textures/icons/map_placeholder.jpg and b/indra/newview/skins/default/textures/icons/map_placeholder.jpg differ diff --git a/indra/newview/skins/default/xui/en/panel_social_place.xml b/indra/newview/skins/default/xui/en/panel_social_place.xml index b53a41487a..13e94f6998 100644 --- a/indra/newview/skins/default/xui/en/panel_social_place.xml +++ b/indra/newview/skins/default/xui/en/panel_social_place.xml @@ -71,9 +71,20 @@ visible="true" name="map_placeholder"> + + Date: Thu, 8 Aug 2013 05:24:26 +0300 Subject: MAINT-2847 (Updater notification - message shows as "[[RELEASE_NOTES_FULL_URL] information about this update]") --- indra/newview/skins/default/xui/en/notifications.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index d14aed273d..b0c4ea8407 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -3454,7 +3454,7 @@ or you can install it now. name="DownloadBackgroundTip" type="notify"> We have downloaded an update to your [APP_NAME] installation. -Version [VERSION] [[RELEASE_NOTES_FULL_URL] Information about this update] +Version [VERSION] [[INFO_URL] Information about this update] confirm -We have downloaded an update to your [APP_NAME] installation. -Version [VERSION] [[RELEASE_NOTES_FULL_URL] Information about this update] + We have downloaded an update to your [APP_NAME] installation. + Version [VERSION] [[INFO_URL] Information about this update] confirm Date: Thu, 8 Aug 2013 18:57:27 -0700 Subject: ACME-821 : Use 128x128 png for the default tile icon instead of 300x300 jpg --- .../skins/default/textures/icons/map_placeholder.jpg | Bin 12931 -> 0 bytes .../skins/default/textures/icons/map_placeholder.png | Bin 0 -> 7694 bytes indra/newview/skins/default/textures/textures.xml | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 indra/newview/skins/default/textures/icons/map_placeholder.jpg create mode 100644 indra/newview/skins/default/textures/icons/map_placeholder.png diff --git a/indra/newview/skins/default/textures/icons/map_placeholder.jpg b/indra/newview/skins/default/textures/icons/map_placeholder.jpg deleted file mode 100644 index 57204e2261..0000000000 Binary files a/indra/newview/skins/default/textures/icons/map_placeholder.jpg and /dev/null differ diff --git a/indra/newview/skins/default/textures/icons/map_placeholder.png b/indra/newview/skins/default/textures/icons/map_placeholder.png new file mode 100644 index 0000000000..31e457aa75 Binary files /dev/null and b/indra/newview/skins/default/textures/icons/map_placeholder.png differ diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 4100849f6f..94c187e21a 100755 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -326,7 +326,7 @@ with the same filename but different name - + -- cgit v1.2.3 From fff55ee5d057aeb50b0c7f096ede659ee71bb25e Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Fri, 9 Aug 2013 13:21:25 -0700 Subject: ACME-800: Posted to Facebook notifications persist in the open_notifications.xml file per user --- indra/newview/skins/default/xui/en/notifications.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index a3592bce4a..46ebdcff54 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -5995,7 +5995,6 @@ Please select at least one type of content to search (General, Moderate, or Adul [MESSAGE] -- cgit v1.2.3 From bc1606111478d53456601d8be239b0411f62ae37 Mon Sep 17 00:00:00 2001 From: Aura Linden Date: Fri, 9 Aug 2013 17:11:38 -0700 Subject: Removing rogue debug --- indra/newview/app_settings/settings.xml | 2 +- indra/newview/llvoicevivox.cpp | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 3964ea5fac..a4a79d4d97 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -13028,7 +13028,7 @@ Type String Value - -1 + 0 VivoxDebugSIPURIHostName diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index ff73aa5354..9497041482 100755 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -786,7 +786,6 @@ void LLVivoxVoiceClient::stateMachine() { loglevel = "0"; // turn logging off completely } - loglevel = "0"; // turn logging off completely params.args.add("-ll"); params.args.add(loglevel); params.cwd = gDirUtilp->getAppRODataDir(); -- cgit v1.2.3 From 481abb13812214d7d5f1124f8eb80f1cc1b08c19 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Fri, 9 Aug 2013 18:31:10 -0700 Subject: ACME 824: Suggested Friends do not repopulate if you disconnect and reconnect to Facebook API in same viewer session --- indra/newview/llfacebookconnect.cpp | 47 ++++++++++++++++++++++++++++--------- indra/newview/llfacebookconnect.h | 6 ++++- indra/newview/llpanelpeople.cpp | 34 +++++++++++++-------------- 3 files changed, 58 insertions(+), 29 deletions(-) diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp index bdc17773d7..5551acff0d 100644 --- a/indra/newview/llfacebookconnect.cpp +++ b/indra/newview/llfacebookconnect.cpp @@ -197,9 +197,11 @@ public: { LL_DEBUGS("FacebookConnect") << "Disconnect successful. content: " << content << LL_ENDL; - // Clear all facebook stuff - LLFacebookConnect::instance().setConnectionState(LLFacebookConnect::FB_NOT_CONNECTED); + // Clear data + LLFacebookConnect::instance().clearInfo(); LLFacebookConnect::instance().clearContent(); + //Notify state change + LLFacebookConnect::instance().setConnectionState(LLFacebookConnect::FB_NOT_CONNECTED); } else { @@ -320,7 +322,9 @@ LLFacebookConnect::LLFacebookConnect() : mConnectionState(FB_NOT_CONNECTED), mConnected(false), mInfo(), - mContent() + mContent(), + mRefreshInfo(false), + mRefreshContent(false) { } @@ -388,18 +392,24 @@ void LLFacebookConnect::checkConnectionToFacebook(bool auto_connect) void LLFacebookConnect::loadFacebookInfo() { - const bool follow_redirects = false; - const F32 timeout = HTTP_REQUEST_EXPIRY_SECS; - LLHTTPClient::get(getFacebookConnectURL("/info"), new LLFacebookInfoResponder(), - LLSD(), timeout, follow_redirects); + if(mRefreshInfo) + { + const bool follow_redirects = false; + const F32 timeout = HTTP_REQUEST_EXPIRY_SECS; + LLHTTPClient::get(getFacebookConnectURL("/info"), new LLFacebookInfoResponder(), + LLSD(), timeout, follow_redirects); + } } void LLFacebookConnect::loadFacebookFriends() { - const bool follow_redirects = false; - const F32 timeout = HTTP_REQUEST_EXPIRY_SECS; - LLHTTPClient::get(getFacebookConnectURL("/friends"), new LLFacebookFriendsResponder(), - LLSD(), timeout, follow_redirects); + if(mRefreshContent) + { + const bool follow_redirects = false; + const F32 timeout = HTTP_REQUEST_EXPIRY_SECS; + LLHTTPClient::get(getFacebookConnectURL("/friends"), new LLFacebookFriendsResponder(), + LLSD(), timeout, follow_redirects); + } } void LLFacebookConnect::postCheckin(const std::string& location, const std::string& name, const std::string& description, const std::string& image, const std::string& message) @@ -495,6 +505,8 @@ void LLFacebookConnect::updateStatus(const std::string& message) void LLFacebookConnect::storeInfo(const LLSD& info) { mInfo = info; + mRefreshInfo = false; + sInfoWatcher->post(info); } @@ -503,9 +515,15 @@ const LLSD& LLFacebookConnect::getInfo() const return mInfo; } +void LLFacebookConnect::clearInfo() +{ + mInfo = LLSD(); +} + void LLFacebookConnect::storeContent(const LLSD& content) { mContent = content; + mRefreshContent = false; sContentWatcher->post(content); } @@ -520,11 +538,18 @@ void LLFacebookConnect::clearContent() mContent = LLSD(); } +void LLFacebookConnect::setDataDirty() +{ + mRefreshInfo = true; + mRefreshContent = true; +} + void LLFacebookConnect::setConnectionState(LLFacebookConnect::EConnectionState connection_state) { if(connection_state == FB_CONNECTED) { setConnected(true); + setDataDirty(); } else if(connection_state == FB_NOT_CONNECTED) { diff --git a/indra/newview/llfacebookconnect.h b/indra/newview/llfacebookconnect.h index 0f005cbe24..77c26842de 100644 --- a/indra/newview/llfacebookconnect.h +++ b/indra/newview/llfacebookconnect.h @@ -69,9 +69,11 @@ public: void storeInfo(const LLSD& info); const LLSD& getInfo() const; - void clearContent(); + void clearInfo(); void storeContent(const LLSD& content); const LLSD& getContent() const; + void clearContent(); + void setDataDirty(); void setConnectionState(EConnectionState connection_state); void setConnected(bool connected); @@ -92,6 +94,8 @@ private: BOOL mConnected; LLSD mInfo; LLSD mContent; + bool mRefreshInfo; + bool mRefreshContent; static boost::scoped_ptr sStateWatcher; static boost::scoped_ptr sInfoWatcher; diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index 1786f73a8b..72953ec6d3 100755 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -835,12 +835,16 @@ void LLPanelPeople::updateRecentList() bool LLPanelPeople::onConnectedToFacebook(const LLSD& data) { - if (data.get("enum").asInteger() == LLFacebookConnect::FB_CONNECTED) - { - LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLPanelPeople"); + LLSD::Integer connection_state = data.get("enum").asInteger(); + if (connection_state == LLFacebookConnect::FB_CONNECTED) + { LLFacebookConnect::instance().loadFacebookFriends(); } + else if(connection_state == LLFacebookConnect::FB_NOT_CONNECTED) + { + updateSuggestedFriendList(); + }; return false; } @@ -852,21 +856,16 @@ void LLPanelPeople::updateFacebookList(bool visible) LLEventPumps::instance().obtain("FacebookConnectContent").stopListening("LLPanelPeople"); // just in case it is already listening LLEventPumps::instance().obtain("FacebookConnectContent").listen("LLPanelPeople", boost::bind(&LLPanelPeople::updateSuggestedFriendList, this)); - if (mTryToConnectToFbc) - { - // try to reconnect to facebook! - if (LLFacebookConnect::instance().isConnected()) - { - LLFacebookConnect::instance().loadFacebookFriends(); - } - else - { - LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLPanelPeople"); // just in case it is already listening - LLEventPumps::instance().obtain("FacebookConnectState").listen("LLPanelPeople", boost::bind(&LLPanelPeople::onConnectedToFacebook, this, _1)); - LLFacebookConnect::instance().checkConnectionToFacebook(); - } + LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLPanelPeople"); // just in case it is already listening + LLEventPumps::instance().obtain("FacebookConnectState").listen("LLPanelPeople", boost::bind(&LLPanelPeople::onConnectedToFacebook, this, _1)); - // don't try again + if (LLFacebookConnect::instance().isConnected()) + { + LLFacebookConnect::instance().loadFacebookFriends(); + } + else if(mTryToConnectToFbc) + { + LLFacebookConnect::instance().checkConnectionToFacebook(); mTryToConnectToFbc = false; } @@ -874,6 +873,7 @@ void LLPanelPeople::updateFacebookList(bool visible) } else { + LLEventPumps::instance().obtain("FacebookConnectState").stopListening("LLPanelPeople"); LLEventPumps::instance().obtain("FacebookConnectContent").stopListening("LLPanelPeople"); } } -- cgit v1.2.3 From 5eba8063a7dfdde77b4e3c8054c51ab91b96dd70 Mon Sep 17 00:00:00 2001 From: dmitrykproductengine Date: Mon, 12 Aug 2013 21:42:52 +0300 Subject: MAINT-2175 FIXED 'Pay Resident' floater is not opened after clicking on 'Pay' button in Object profile --- indra/newview/llsidepaneltaskinfo.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp index ad7c939728..9be6d0c5f1 100755 --- a/indra/newview/llsidepaneltaskinfo.cpp +++ b/indra/newview/llsidepaneltaskinfo.cpp @@ -1170,6 +1170,10 @@ void LLSidepanelTaskInfo::doClickAction(U8 click_action) // Warn, but do it anyway. LLNotificationsUtil::add("ClickActionNotPayable"); } + else + { + handle_give_money_dialog(); + } } LLSelectMgr::getInstance()->selectionSetClickAction(click_action); } -- cgit v1.2.3 From 457e06e9e764b27ce6f4f8bd97882a5b32f45dc7 Mon Sep 17 00:00:00 2001 From: maksymsproductengine Date: Mon, 12 Aug 2013 19:35:20 +0300 Subject: MAINT-2883 FIXED World Map - Land For Sale is missing L$ / sqm --- indra/newview/llworldmap.cpp | 7 +++++++ indra/newview/skins/default/xui/en/strings.xml | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/indra/newview/llworldmap.cpp b/indra/newview/llworldmap.cpp index 5fa380e0e3..fd9cdd95a3 100755 --- a/indra/newview/llworldmap.cpp +++ b/indra/newview/llworldmap.cpp @@ -518,10 +518,17 @@ bool LLWorldMap::insertItem(U32 x_world, U32 y_world, std::string& name, LLUUID& case MAP_ITEM_LAND_FOR_SALE: // land for sale case MAP_ITEM_LAND_FOR_SALE_ADULT: // adult land for sale { + F32 cost_per_sqm = 0.0f; + if ((F32)extra > 0) + { + cost_per_sqm = (F32)extra2 / (F32)extra; + } + static LLUIString tooltip_fmt = LLTrans::getString("worldmap_item_tooltip_format"); tooltip_fmt.setArg("[AREA]", llformat("%d", extra)); tooltip_fmt.setArg("[PRICE]", llformat("%d", extra2)); + tooltip_fmt.setArg("[PRICE_PER_SQM]", llformat("%.1f", cost_per_sqm)); new_item.setTooltip(tooltip_fmt.getString()); if (type == MAP_ITEM_LAND_FOR_SALE) diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index fb1846860c..d4a37a9813 100755 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -378,7 +378,7 @@ Please try logging in again in a minute. Loading... Offline - [AREA] m² L$[PRICE] + [AREA] m² L$[PRICE] (L$[PRICE_PER_SQM]/m²) None found. -- cgit v1.2.3 From 91c9cc4c33f68f4f39e23763317a76ccb573c38b Mon Sep 17 00:00:00 2001 From: dolphin Date: Mon, 12 Aug 2013 11:09:05 -0700 Subject: Save SL NVAPI profile only when changes have been made. --- indra/newview/llappviewerwin32.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp index 3cf3c739d9..80a80f4298 100755 --- a/indra/newview/llappviewerwin32.cpp +++ b/indra/newview/llappviewerwin32.cpp @@ -172,21 +172,20 @@ void ll_nvapi_init(NvDRSSessionHandle hSession) nvapi_error(status); return; } + + // (5) Now we apply (or save) our changes to the system + status = NvAPI_DRS_SaveSettings(hSession); + if (status != NVAPI_OK) + { + nvapi_error(status); + return; + } } else if (status != NVAPI_OK) { nvapi_error(status); return; } - - - - // (5) Now we apply (or save) our changes to the system - status = NvAPI_DRS_SaveSettings(hSession); - if (status != NVAPI_OK) - { - nvapi_error(status); - } } //#define DEBUGGING_SEH_FILTER 1 -- cgit v1.2.3 From d0e964289ec9888686619c4edd756edd622ca214 Mon Sep 17 00:00:00 2001 From: Cho Date: Tue, 13 Aug 2013 01:47:20 +0100 Subject: added read_from_master parameter for ACME-829 --- indra/newview/app_settings/settings.xml | 2 +- indra/newview/llfacebookconnect.cpp | 35 +++++++++++++++++++++------------ indra/newview/llfacebookconnect.h | 3 ++- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 20919adc76..bebd1fd9e8 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -3465,7 +3465,7 @@ Type String Value - http://pdp15.lindenlab.com + FastCacheFetchEnabled diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp index 5551acff0d..0a4fefbd24 100644 --- a/indra/newview/llfacebookconnect.cpp +++ b/indra/newview/llfacebookconnect.cpp @@ -119,7 +119,6 @@ public: { LL_DEBUGS("FacebookConnect") << "Connect successful. content: " << content << LL_ENDL; - // Grab some graph data now that we are connected LLFacebookConnect::instance().setConnectionState(LLFacebookConnect::FB_CONNECTED); } else if (status != 302) @@ -324,7 +323,8 @@ LLFacebookConnect::LLFacebookConnect() mInfo(), mContent(), mRefreshInfo(false), - mRefreshContent(false) + mRefreshContent(false), + mReadFromMaster(false) { } @@ -346,7 +346,7 @@ void LLFacebookConnect::openFacebookWeb(std::string url) //LLUrlAction::openURLExternal(url); } -std::string LLFacebookConnect::getFacebookConnectURL(const std::string& route) +std::string LLFacebookConnect::getFacebookConnectURL(const std::string& route, bool include_read_from_master) { static std::string sFacebookConnectUrl = gAgent.getRegion()->getCapability("FacebookConnect"); @@ -363,6 +363,10 @@ std::string LLFacebookConnect::getFacebookConnectURL(const std::string& route) //End removable part std::string url = sFacebookConnectUrl + route; + if (include_read_from_master && mReadFromMaster) + { + url += "?read_from_master=true"; + } return url; } @@ -384,10 +388,10 @@ void LLFacebookConnect::disconnectFromFacebook() void LLFacebookConnect::checkConnectionToFacebook(bool auto_connect) { - const bool follow_redirects = false; - const F32 timeout = HTTP_REQUEST_EXPIRY_SECS; - LLHTTPClient::get(getFacebookConnectURL("/connection"), new LLFacebookConnectedResponder(auto_connect), - LLSD(), timeout, follow_redirects); + const bool follow_redirects = false; + const F32 timeout = HTTP_REQUEST_EXPIRY_SECS; + LLHTTPClient::get(getFacebookConnectURL("/connection", true), new LLFacebookConnectedResponder(auto_connect), + LLSD(), timeout, follow_redirects); } void LLFacebookConnect::loadFacebookInfo() @@ -396,7 +400,7 @@ void LLFacebookConnect::loadFacebookInfo() { const bool follow_redirects = false; const F32 timeout = HTTP_REQUEST_EXPIRY_SECS; - LLHTTPClient::get(getFacebookConnectURL("/info"), new LLFacebookInfoResponder(), + LLHTTPClient::get(getFacebookConnectURL("/info", true), new LLFacebookInfoResponder(), LLSD(), timeout, follow_redirects); } } @@ -407,7 +411,7 @@ void LLFacebookConnect::loadFacebookFriends() { const bool follow_redirects = false; const F32 timeout = HTTP_REQUEST_EXPIRY_SECS; - LLHTTPClient::get(getFacebookConnectURL("/friends"), new LLFacebookFriendsResponder(), + LLHTTPClient::get(getFacebookConnectURL("/friends", true), new LLFacebookFriendsResponder(), LLSD(), timeout, follow_redirects); } } @@ -427,7 +431,7 @@ void LLFacebookConnect::postCheckin(const std::string& location, const std::stri body["message"] = message; // Note: we can use that route for different publish action. We should be able to use the same responder. - LLHTTPClient::post(getFacebookConnectURL("/share/checkin"), body, new LLFacebookShareResponder()); + LLHTTPClient::post(getFacebookConnectURL("/share/checkin", true), body, new LLFacebookShareResponder()); } void LLFacebookConnect::sharePhoto(const std::string& image_url, const std::string& caption) @@ -437,7 +441,7 @@ void LLFacebookConnect::sharePhoto(const std::string& image_url, const std::stri body["caption"] = caption; // Note: we can use that route for different publish action. We should be able to use the same responder. - LLHTTPClient::post(getFacebookConnectURL("/share/photo"), body, new LLFacebookShareResponder()); + LLHTTPClient::post(getFacebookConnectURL("/share/photo", true), body, new LLFacebookShareResponder()); } void LLFacebookConnect::sharePhoto(LLPointer image, const std::string& caption) @@ -490,7 +494,7 @@ void LLFacebookConnect::sharePhoto(LLPointer image, const std: memcpy(data, body.str().data(), size); // Note: we can use that route for different publish action. We should be able to use the same responder. - LLHTTPClient::postRaw(getFacebookConnectURL("/share/photo"), data, size, new LLFacebookShareResponder(), headers); + LLHTTPClient::postRaw(getFacebookConnectURL("/share/photo", true), data, size, new LLFacebookShareResponder(), headers); } void LLFacebookConnect::updateStatus(const std::string& message) @@ -499,7 +503,7 @@ void LLFacebookConnect::updateStatus(const std::string& message) body["message"] = message; // Note: we can use that route for different publish action. We should be able to use the same responder. - LLHTTPClient::post(getFacebookConnectURL("/share/wall"), body, new LLFacebookShareResponder()); + LLHTTPClient::post(getFacebookConnectURL("/share/wall", true), body, new LLFacebookShareResponder()); } void LLFacebookConnect::storeInfo(const LLSD& info) @@ -548,6 +552,7 @@ void LLFacebookConnect::setConnectionState(LLFacebookConnect::EConnectionState c { if(connection_state == FB_CONNECTED) { + mReadFromMaster = true; setConnected(true); setDataDirty(); } @@ -555,6 +560,10 @@ void LLFacebookConnect::setConnectionState(LLFacebookConnect::EConnectionState c { setConnected(false); } + else if(connection_state == FB_POSTED) + { + mReadFromMaster = false; + } if (mConnectionState != connection_state) { diff --git a/indra/newview/llfacebookconnect.h b/indra/newview/llfacebookconnect.h index 77c26842de..a77ac24167 100644 --- a/indra/newview/llfacebookconnect.h +++ b/indra/newview/llfacebookconnect.h @@ -88,7 +88,7 @@ private: LLFacebookConnect(); ~LLFacebookConnect() {}; - std::string getFacebookConnectURL(const std::string& route = ""); + std::string getFacebookConnectURL(const std::string& route = "", bool include_read_from_master = false); EConnectionState mConnectionState; BOOL mConnected; @@ -96,6 +96,7 @@ private: LLSD mContent; bool mRefreshInfo; bool mRefreshContent; + bool mReadFromMaster; static boost::scoped_ptr sStateWatcher; static boost::scoped_ptr sInfoWatcher; -- cgit v1.2.3 From abc2abf45dbe69daa0130ad823ca7184acc9d8df Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Mon, 12 Aug 2013 20:26:33 -0700 Subject: ACME-820 : Use the LL hosted default image for the default map tile in checkin --- indra/newview/llfloatersocial.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llfloatersocial.cpp b/indra/newview/llfloatersocial.cpp index 66a586b16b..4c17d9e40d 100644 --- a/indra/newview/llfloatersocial.cpp +++ b/indra/newview/llfloatersocial.cpp @@ -54,7 +54,7 @@ static LLRegisterPanelClassWrapper t_panel_account("llsoci const S32 MAX_POSTCARD_DATASIZE = 1024 * 1024; // one megabyte const std::string DEFAULT_CHECKIN_LOCATION_URL = "http://maps.secondlife.com/"; -const std::string DEFAULT_CHECKIN_ICON_URL = "http://logok.org/wp-content/uploads/2010/07/podcastlogo1.jpg"; +const std::string DEFAULT_CHECKIN_ICON_URL = "http://map.secondlife.com.s3.amazonaws.com/map_placeholder.png"; std::string get_map_url() { -- cgit v1.2.3 From 926d0ad81e85852872be63190e1553af084e4641 Mon Sep 17 00:00:00 2001 From: maksymsproductengine Date: Tue, 13 Aug 2013 19:22:35 +0300 Subject: MAINT-2861 FIXED llAdjustSoundVolume causes animated textures on same object to reset to first frame --- indra/newview/llvovolume.cpp | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index dd161f84c1..ed2b18b822 100755 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -334,15 +334,9 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys, if (!mTextureAnimp) { mTextureAnimp = new LLViewerTextureAnim(this); + mTexAnimMode = 0; } - else - { - if (!(mTextureAnimp->mMode & LLTextureAnim::SMOOTH)) - { - mTextureAnimp->reset(); - } - } - mTexAnimMode = 0; + mTextureAnimp->unpackTAMessage(mesgsys, block_num); } else -- cgit v1.2.3 From 2e5e03b73a5bc581097c9b5828537796568aa2e3 Mon Sep 17 00:00:00 2001 From: dmitrykproductengine Date: Wed, 25 Sep 2013 12:58:16 +0300 Subject: MAINT-3169 FIXED [Improvement] Prevent latest Voice service from connecting or error popup from occurring when Voice Chat setting is disabled in the viewer. --- indra/newview/llvoicevivox.cpp | 11 ++++++++--- indra/newview/llvoicevivox.h | 2 ++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index 9497041482..050d9dd785 100755 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -261,6 +261,7 @@ LLVivoxVoiceClient::LLVivoxVoiceClient() : mSessionTerminateRequested(false), mRelogRequested(false), mConnected(false), + mTerminateDaemon(false), mPump(NULL), mSpatialJoiningNum(0), @@ -695,7 +696,7 @@ void LLVivoxVoiceClient::stateMachine() setVoiceEnabled(false); } - if(mVoiceEnabled || !mIsInitialized) + if(mVoiceEnabled || (!mIsInitialized &&!mTerminateDaemon) ) { updatePosition(); } @@ -708,11 +709,12 @@ void LLVivoxVoiceClient::stateMachine() if((getState() != stateDisabled) && (getState() != stateDisableCleanup)) { // User turned off voice support. Send the cleanup messages, close the socket, and reset. - if(!mConnected) + if(!mConnected || mTerminateDaemon) { // if voice was turned off after the daemon was launched but before we could connect to it, we may need to issue a kill. LL_INFOS("Voice") << "Disabling voice before connection to daemon, terminating." << LL_ENDL; killGateway(); + mTerminateDaemon = false; } logout(); @@ -753,7 +755,7 @@ void LLVivoxVoiceClient::stateMachine() // Voice is locked out, we must not launch the vivox daemon. setState(stateJail); } - else if(!isGatewayRunning()) + else if(!isGatewayRunning() && gSavedSettings.getBOOL("EnableVoiceChat")) { if (true) // production build, not test { @@ -1136,6 +1138,7 @@ void LLVivoxVoiceClient::stateMachine() std::stringstream errs; errs << mVoiceAccountServerURI << "\n:UDP: 3478, 3479, 5060, 5062, 12000-17000"; args["HOSTID"] = errs.str(); + mTerminateDaemon = true; if (LLGridManager::getInstance()->isSystemGrid()) { LLNotificationsUtil::add("NoVoiceConnect", args); @@ -2618,6 +2621,7 @@ void LLVivoxVoiceClient::connectorCreateResponse(int statusCode, std::string &st std::stringstream errs; errs << mVoiceAccountServerURI << "\n:UDP: 3478, 3479, 5060, 5062, 12000-17000"; args["HOSTID"] = errs.str(); + mTerminateDaemon = true; if (LLGridManager::getInstance()->isSystemGrid()) { LLNotificationsUtil::add("NoVoiceConnect", args); @@ -2633,6 +2637,7 @@ void LLVivoxVoiceClient::connectorCreateResponse(int statusCode, std::string &st LL_INFOS("Voice") << "Connector.Create succeeded, Vivox SDK version is " << versionID << LL_ENDL; mVoiceVersion.serverVersion = versionID; mConnectorHandle = connectorHandle; + mTerminateDaemon = false; if(getState() == stateConnectorStarting) { setState(stateConnectorStarted); diff --git a/indra/newview/llvoicevivox.h b/indra/newview/llvoicevivox.h index e2d1585c15..c325d72ba6 100755 --- a/indra/newview/llvoicevivox.h +++ b/indra/newview/llvoicevivox.h @@ -659,6 +659,8 @@ private: LLSocket::ptr_t mSocket; bool mConnected; + // We should kill the voice daemon in case of connection alert + bool mTerminateDaemon; LLPumpIO *mPump; friend class LLVivoxProtocolParser; -- cgit v1.2.3 From 01a70022280c12173f12352b145670e06efb3d71 Mon Sep 17 00:00:00 2001 From: maksymsproductengine Date: Thu, 26 Sep 2013 00:34:00 +0300 Subject: MAINT-3163 FIXED Since CHUI, floaters can be moved totally underneath bottom toolbar buttons and "lost". --- indra/llui/llfloater.cpp | 31 ++++++++++++++- indra/llui/llfloater.h | 6 +++ indra/llui/lltoolbar.cpp | 26 ++++++++++--- indra/llui/lltoolbar.h | 39 +++++++++++++++++++ indra/newview/llfloatertoybox.cpp | 8 ++-- indra/newview/llimview.cpp | 4 +- indra/newview/llmoveview.cpp | 4 +- indra/newview/lltoolbarview.cpp | 82 +++++++++++++++++++++------------------ indra/newview/lltoolbarview.h | 21 ++-------- indra/newview/llviewerwindow.cpp | 8 ++++ 10 files changed, 158 insertions(+), 71 deletions(-) diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 6e6bcd6ab5..c1f8a077b5 100755 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -2742,8 +2742,6 @@ void LLFloaterView::refresh() } } -const S32 FLOATER_MIN_VISIBLE_PIXELS = 16; - void LLFloaterView::adjustToFitScreen(LLFloater* floater, BOOL allow_partial_outside, BOOL snap_in_toolbars/* = false*/) { if (floater->getParent() != this) @@ -2796,11 +2794,32 @@ void LLFloaterView::adjustToFitScreen(LLFloater* floater, BOOL allow_partial_out } } + const LLRect& left_toolbar_rect = mToolbarRects[LLToolBarEnums::TOOLBAR_LEFT]; + const LLRect& bottom_toolbar_rect = mToolbarRects[LLToolBarEnums::TOOLBAR_BOTTOM]; + const LLRect& right_toolbar_rect = mToolbarRects[LLToolBarEnums::TOOLBAR_RIGHT]; + const LLRect& floater_rect = floater->getRect(); + + S32 delta_left = left_toolbar_rect.notEmpty() ? left_toolbar_rect.mRight - floater_rect.mRight : 0; + S32 delta_bottom = bottom_toolbar_rect.notEmpty() ? bottom_toolbar_rect.mTop - floater_rect.mTop : 0; + S32 delta_right = right_toolbar_rect.notEmpty() ? right_toolbar_rect.mLeft - floater_rect.mLeft : 0; + // move window fully onscreen if (floater->translateIntoRect( snap_in_toolbars ? getSnapRect() : gFloaterView->getRect(), allow_partial_outside ? FLOATER_MIN_VISIBLE_PIXELS : S32_MAX )) { floater->clearSnapTarget(); } + else if (delta_left > 0 && floater_rect.mTop < left_toolbar_rect.mTop && floater_rect.mBottom > left_toolbar_rect.mBottom) + { + floater->translate(delta_left, 0); + } + else if (delta_bottom > 0 && floater_rect.mLeft > bottom_toolbar_rect.mLeft && floater_rect.mRight < bottom_toolbar_rect.mRight) + { + floater->translate(0, delta_bottom); + } + else if (delta_right < 0 && floater_rect.mTop < right_toolbar_rect.mTop && floater_rect.mBottom > right_toolbar_rect.mBottom) + { + floater->translate(delta_right, 0); + } } void LLFloaterView::draw() @@ -3000,6 +3019,14 @@ void LLFloaterView::popVisibleAll(const skip_list_t& skip_list) LLFloaterReg::blockShowFloaters(false); } +void LLFloaterView::setToolbarRect(LLToolBarEnums::EToolBarLocation tb, const LLRect& toolbar_rect) +{ + if (tb < LLToolBarEnums::TOOLBAR_COUNT) + { + mToolbarRects[tb] = toolbar_rect; + } +} + void LLFloater::setInstanceName(const std::string& name) { if (name != mInstanceName) diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index 75715ef296..ccaae1d02b 100755 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -32,6 +32,7 @@ #define LL_FLOATER_H #include "llpanel.h" +#include "lltoolbar.h" #include "lluuid.h" //#include "llnotificationsutil.h" #include @@ -514,6 +515,8 @@ private: // LLFloaterView // Parent of all floating panels +const S32 FLOATER_MIN_VISIBLE_PIXELS = 16; + class LLFloaterView : public LLUICtrl { public: @@ -572,10 +575,13 @@ public: void setFloaterSnapView(LLHandle snap_view) {mSnapView = snap_view; } LLFloater* getFrontmostClosableFloater(); + void setToolbarRect(LLToolBarEnums::EToolBarLocation tb, const LLRect& toolbar_rect); + private: void hiddenFloaterClosed(LLFloater* floater); LLRect mLastSnapRect; + LLRect mToolbarRects[LLToolBarEnums::TOOLBAR_COUNT]; LLHandle mSnapView; BOOL mFocusCycleMode; S32 mSnapOffsetBottom; diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp index 6bfe113933..e692d9847a 100755 --- a/indra/llui/lltoolbar.cpp +++ b/indra/llui/lltoolbar.cpp @@ -118,7 +118,8 @@ LLToolBar::LLToolBar(const LLToolBar::Params& p) mButtonLeaveSignal(NULL), mButtonRemoveSignal(NULL), mDragAndDropTarget(false), - mCaretIcon(NULL) + mCaretIcon(NULL), + mCenterPanel(NULL) { mButtonParams[LLToolBarEnums::BTNTYPE_ICONS_WITH_TEXT] = p.button_icon_and_text; mButtonParams[LLToolBarEnums::BTNTYPE_ICONS_ONLY] = p.button_icon; @@ -200,14 +201,15 @@ void LLToolBar::initFromParams(const LLToolBar::Params& p) center_panel_p.auto_resize = false; center_panel_p.user_resize = false; center_panel_p.mouse_opaque = false; - LLLayoutPanel* center_panel = LLUICtrlFactory::create(center_panel_p); - mCenteringStack->addChild(center_panel); + mCenterPanel = LLUICtrlFactory::create(center_panel_p); + mCenteringStack->addChild(mCenterPanel); LLPanel::Params button_panel_p(p.button_panel); - button_panel_p.rect = center_panel->getLocalRect(); - button_panel_p.follows.flags = FOLLOWS_BOTTOM|FOLLOWS_LEFT; + button_panel_p.rect = mCenterPanel->getLocalRect(); + button_panel_p.follows.flags = FOLLOWS_BOTTOM|FOLLOWS_LEFT; mButtonPanel = LLUICtrlFactory::create(button_panel_p); - center_panel->addChild(mButtonPanel); + mCenterPanel->setButtonPanel(mButtonPanel); + mCenterPanel->addChild(mButtonPanel); mCenteringStack->addChild(LLUICtrlFactory::create(border_panel_p)); @@ -1244,3 +1246,15 @@ const std::string LLToolBarButton::getToolTip() const return tooltip; } +void LLToolBar::LLCenterLayoutPanel::handleReshape(const LLRect& rect, bool by_user) +{ + LLLayoutPanel::handleReshape(rect, by_user); + + if (!mReshapeCallback.empty()) + { + LLRect r; + localRectToOtherView(mButtonPanel->getRect(), &r, gFloaterView); + r.stretch(FLOATER_MIN_VISIBLE_PIXELS); + mReshapeCallback(mLocationId, r); + } +} diff --git a/indra/llui/lltoolbar.h b/indra/llui/lltoolbar.h index 743951a41f..9e17eaed8b 100755 --- a/indra/llui/lltoolbar.h +++ b/indra/llui/lltoolbar.h @@ -125,6 +125,19 @@ namespace LLToolBarEnums SIDE_TOP, }; + enum EToolBarLocation + { + TOOLBAR_NONE = 0, + TOOLBAR_LEFT, + TOOLBAR_RIGHT, + TOOLBAR_BOTTOM, + + TOOLBAR_COUNT, + + TOOLBAR_FIRST = TOOLBAR_LEFT, + TOOLBAR_LAST = TOOLBAR_BOTTOM, + }; + LLLayoutStack::ELayoutOrientation getOrientation(SideType sideType); } @@ -150,6 +163,30 @@ class LLToolBar { friend class LLToolBarButton; public: + + class LLCenterLayoutPanel : public LLLayoutPanel + { + public: + typedef struct LLLayoutPanel::Params Params; + typedef boost::function reshape_callback_t; + + virtual ~LLCenterLayoutPanel() {} + /*virtual*/ void handleReshape(const LLRect& rect, bool by_user); + + void setLocationId(LLToolBarEnums::EToolBarLocation id) { mLocationId = id; } + void setReshapeCallback(reshape_callback_t cb) { mReshapeCallback = cb; } + void setButtonPanel(LLPanel * panel) { mButtonPanel = panel; } + + protected: + friend class LLUICtrlFactory; + LLCenterLayoutPanel(const Params& params) : LLLayoutPanel(params), mButtonPanel(NULL) {} + + private: + reshape_callback_t mReshapeCallback; + LLToolBarEnums::EToolBarLocation mLocationId; + LLPanel * mButtonPanel; + }; + struct Params : public LLInitParam::Block { Mandatory button_display_mode; @@ -198,6 +235,7 @@ public: void setHandleDragCallback(tool_handledrag_callback_t cb) { mHandleDragItemCallback = cb; } void setHandleDropCallback(tool_handledrop_callback_t cb) { mHandleDropCallback = cb; } bool isReadOnly() const { return mReadOnly; } + LLCenterLayoutPanel * getCenterLayoutPanel() const { return mCenterPanel; } LLToolBarButton* createButton(const LLCommandId& id); @@ -270,6 +308,7 @@ private: // related widgets LLLayoutStack* mCenteringStack; + LLCenterLayoutPanel* mCenterPanel; LLPanel* mButtonPanel; LLHandle mPopupMenuHandle; LLHandle mRemoveButtonHandle; diff --git a/indra/newview/llfloatertoybox.cpp b/indra/newview/llfloatertoybox.cpp index 324afe661f..a025a859e7 100755 --- a/indra/newview/llfloatertoybox.cpp +++ b/indra/newview/llfloatertoybox.cpp @@ -107,7 +107,7 @@ void LLFloaterToybox::draw() { const LLCommandId& id = *it; - const bool command_not_present = (gToolBarView->hasCommand(id) == LLToolBarView::TOOLBAR_NONE); + const bool command_not_present = (gToolBarView->hasCommand(id) == LLToolBarEnums::TOOLBAR_NONE); mToolBar->enableCommand(id, command_not_present); } @@ -175,9 +175,9 @@ void LLFloaterToybox::onToolBarButtonEnter(LLView* button) switch(command_loc) { - case LLToolBarView::TOOLBAR_BOTTOM: suffix = LLTrans::getString("Toolbar_Bottom_Tooltip"); break; - case LLToolBarView::TOOLBAR_LEFT: suffix = LLTrans::getString("Toolbar_Left_Tooltip"); break; - case LLToolBarView::TOOLBAR_RIGHT: suffix = LLTrans::getString("Toolbar_Right_Tooltip"); break; + case LLToolBarEnums::TOOLBAR_BOTTOM: suffix = LLTrans::getString("Toolbar_Bottom_Tooltip"); break; + case LLToolBarEnums::TOOLBAR_LEFT: suffix = LLTrans::getString("Toolbar_Left_Tooltip"); break; + case LLToolBarEnums::TOOLBAR_RIGHT: suffix = LLTrans::getString("Toolbar_Right_Tooltip"); break; default: break; diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 9ffbd1a675..70ffdc14ff 100755 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -1959,11 +1959,11 @@ LLDockControl::DocAt LLCallDialog::getDockControlPos(const std::string& toolbarB switch (toolbar_loc) { - case LLToolBarView::TOOLBAR_LEFT: + case LLToolBarEnums::TOOLBAR_LEFT: doc_at = LLDockControl::RIGHT; break; - case LLToolBarView::TOOLBAR_RIGHT: + case LLToolBarEnums::TOOLBAR_RIGHT: doc_at = LLDockControl::LEFT; break; } diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp index eb6591eb39..055ec241c5 100755 --- a/indra/newview/llmoveview.cpp +++ b/indra/newview/llmoveview.cpp @@ -698,14 +698,14 @@ void LLPanelStandStopFlying::updatePosition() S32 y_pos = 0; S32 bottom_tb_center = 0; - if (LLToolBar* toolbar_bottom = gToolBarView->getToolbar(LLToolBarView::TOOLBAR_BOTTOM)) + if (LLToolBar* toolbar_bottom = gToolBarView->getToolbar(LLToolBarEnums::TOOLBAR_BOTTOM)) { y_pos = toolbar_bottom->getRect().getHeight(); bottom_tb_center = toolbar_bottom->getRect().getCenterX(); } S32 left_tb_width = 0; - if (LLToolBar* toolbar_left = gToolBarView->getToolbar(LLToolBarView::TOOLBAR_LEFT)) + if (LLToolBar* toolbar_left = gToolBarView->getToolbar(LLToolBarEnums::TOOLBAR_LEFT)) { left_tb_width = toolbar_left->getRect().getWidth(); } diff --git a/indra/newview/lltoolbarview.cpp b/indra/newview/lltoolbarview.cpp index 78a555d67d..36d4654393 100755 --- a/indra/newview/lltoolbarview.cpp +++ b/indra/newview/lltoolbarview.cpp @@ -77,7 +77,7 @@ LLToolBarView::LLToolBarView(const LLToolBarView::Params& p) mToolbarsLoaded(false), mBottomToolbarPanel(NULL) { - for (S32 i = 0; i < TOOLBAR_COUNT; i++) + for (S32 i = 0; i < LLToolBarEnums::TOOLBAR_COUNT; i++) { mToolbars[i] = NULL; } @@ -96,12 +96,18 @@ LLToolBarView::~LLToolBarView() BOOL LLToolBarView::postBuild() { - mToolbars[TOOLBAR_LEFT] = getChild("toolbar_left"); - mToolbars[TOOLBAR_RIGHT] = getChild("toolbar_right"); - mToolbars[TOOLBAR_BOTTOM] = getChild("toolbar_bottom"); + mToolbars[LLToolBarEnums::TOOLBAR_LEFT] = getChild("toolbar_left"); + mToolbars[LLToolBarEnums::TOOLBAR_LEFT]->getCenterLayoutPanel()->setLocationId(LLToolBarEnums::TOOLBAR_LEFT); + + mToolbars[LLToolBarEnums::TOOLBAR_RIGHT] = getChild("toolbar_right"); + mToolbars[LLToolBarEnums::TOOLBAR_RIGHT]->getCenterLayoutPanel()->setLocationId(LLToolBarEnums::TOOLBAR_RIGHT); + + mToolbars[LLToolBarEnums::TOOLBAR_BOTTOM] = getChild("toolbar_bottom"); + mToolbars[LLToolBarEnums::TOOLBAR_BOTTOM]->getCenterLayoutPanel()->setLocationId(LLToolBarEnums::TOOLBAR_BOTTOM); + mBottomToolbarPanel = getChild("bottom_toolbar_panel"); - for (int i = TOOLBAR_FIRST; i <= TOOLBAR_LAST; i++) + for (int i = LLToolBarEnums::TOOLBAR_FIRST; i <= LLToolBarEnums::TOOLBAR_LAST; i++) { mToolbars[i]->setStartDragCallback(boost::bind(LLToolBarView::startDragTool,_1,_2,_3)); mToolbars[i]->setHandleDragCallback(boost::bind(LLToolBarView::handleDragTool,_1,_2,_3,_4)); @@ -115,9 +121,9 @@ BOOL LLToolBarView::postBuild() S32 LLToolBarView::hasCommand(const LLCommandId& commandId) const { - S32 command_location = TOOLBAR_NONE; + S32 command_location = LLToolBarEnums::TOOLBAR_NONE; - for (S32 loc = TOOLBAR_FIRST; loc <= TOOLBAR_LAST; loc++) + for (S32 loc = LLToolBarEnums::TOOLBAR_FIRST; loc <= LLToolBarEnums::TOOLBAR_LAST; loc++) { if (mToolbars[loc]->hasCommand(commandId)) { @@ -129,7 +135,7 @@ S32 LLToolBarView::hasCommand(const LLCommandId& commandId) const return command_location; } -S32 LLToolBarView::addCommand(const LLCommandId& commandId, EToolBarLocation toolbar, int rank) +S32 LLToolBarView::addCommand(const LLCommandId& commandId, LLToolBarEnums::EToolBarLocation toolbar, int rank) { int old_rank; removeCommand(commandId, old_rank); @@ -144,7 +150,7 @@ S32 LLToolBarView::removeCommand(const LLCommandId& commandId, int& rank) S32 command_location = hasCommand(commandId); rank = LLToolBar::RANK_NONE; - if (command_location != TOOLBAR_NONE) + if (command_location != LLToolBarEnums::TOOLBAR_NONE) { rank = mToolbars[command_location]->removeCommand(commandId); } @@ -156,7 +162,7 @@ S32 LLToolBarView::enableCommand(const LLCommandId& commandId, bool enabled) { S32 command_location = hasCommand(commandId); - if (command_location != TOOLBAR_NONE) + if (command_location != LLToolBarEnums::TOOLBAR_NONE) { mToolbars[command_location]->enableCommand(commandId, enabled); } @@ -168,7 +174,7 @@ S32 LLToolBarView::stopCommandInProgress(const LLCommandId& commandId) { S32 command_location = hasCommand(commandId); - if (command_location != TOOLBAR_NONE) + if (command_location != LLToolBarEnums::TOOLBAR_NONE) { mToolbars[command_location]->stopCommandInProgress(commandId); } @@ -180,7 +186,7 @@ S32 LLToolBarView::flashCommand(const LLCommandId& commandId, bool flash, bool f { S32 command_location = hasCommand(commandId); - if (command_location != TOOLBAR_NONE) + if (command_location != LLToolBarEnums::TOOLBAR_NONE) { mToolbars[command_location]->flashCommand(commandId, flash, force_flashing); } @@ -259,7 +265,7 @@ bool LLToolBarView::loadToolbars(bool force_default) } // Clear the toolbars now before adding the loaded commands and settings - for (S32 i = TOOLBAR_FIRST; i <= TOOLBAR_LAST; i++) + for (S32 i = LLToolBarEnums::TOOLBAR_FIRST; i <= LLToolBarEnums::TOOLBAR_LAST; i++) { if (mToolbars[i]) { @@ -268,46 +274,46 @@ bool LLToolBarView::loadToolbars(bool force_default) } // Add commands to each toolbar - if (toolbar_set.left_toolbar.isProvided() && mToolbars[TOOLBAR_LEFT]) + if (toolbar_set.left_toolbar.isProvided() && mToolbars[LLToolBarEnums::TOOLBAR_LEFT]) { if (toolbar_set.left_toolbar.button_display_mode.isProvided()) { LLToolBarEnums::ButtonType button_type = toolbar_set.left_toolbar.button_display_mode; - mToolbars[TOOLBAR_LEFT]->setButtonType(button_type); + mToolbars[LLToolBarEnums::TOOLBAR_LEFT]->setButtonType(button_type); } BOOST_FOREACH(const LLCommandId::Params& command_params, toolbar_set.left_toolbar.commands) { - if (addCommandInternal(LLCommandId(command_params), mToolbars[TOOLBAR_LEFT])) + if (addCommandInternal(LLCommandId(command_params), mToolbars[LLToolBarEnums::TOOLBAR_LEFT])) { llwarns << "Error adding command '" << command_params.name() << "' to left toolbar." << llendl; } } } - if (toolbar_set.right_toolbar.isProvided() && mToolbars[TOOLBAR_RIGHT]) + if (toolbar_set.right_toolbar.isProvided() && mToolbars[LLToolBarEnums::TOOLBAR_RIGHT]) { if (toolbar_set.right_toolbar.button_display_mode.isProvided()) { LLToolBarEnums::ButtonType button_type = toolbar_set.right_toolbar.button_display_mode; - mToolbars[TOOLBAR_RIGHT]->setButtonType(button_type); + mToolbars[LLToolBarEnums::TOOLBAR_RIGHT]->setButtonType(button_type); } BOOST_FOREACH(const LLCommandId::Params& command_params, toolbar_set.right_toolbar.commands) { - if (addCommandInternal(LLCommandId(command_params), mToolbars[TOOLBAR_RIGHT])) + if (addCommandInternal(LLCommandId(command_params), mToolbars[LLToolBarEnums::TOOLBAR_RIGHT])) { llwarns << "Error adding command '" << command_params.name() << "' to right toolbar." << llendl; } } } - if (toolbar_set.bottom_toolbar.isProvided() && mToolbars[TOOLBAR_BOTTOM]) + if (toolbar_set.bottom_toolbar.isProvided() && mToolbars[LLToolBarEnums::TOOLBAR_BOTTOM]) { if (toolbar_set.bottom_toolbar.button_display_mode.isProvided()) { LLToolBarEnums::ButtonType button_type = toolbar_set.bottom_toolbar.button_display_mode; - mToolbars[TOOLBAR_BOTTOM]->setButtonType(button_type); + mToolbars[LLToolBarEnums::TOOLBAR_BOTTOM]->setButtonType(button_type); } BOOST_FOREACH(const LLCommandId::Params& command_params, toolbar_set.bottom_toolbar.commands) { - if (addCommandInternal(LLCommandId(command_params), mToolbars[TOOLBAR_BOTTOM])) + if (addCommandInternal(LLCommandId(command_params), mToolbars[LLToolBarEnums::TOOLBAR_BOTTOM])) { llwarns << "Error adding command '" << command_params.name() << "' to bottom toolbar." << llendl; } @@ -319,7 +325,7 @@ bool LLToolBarView::loadToolbars(bool force_default) bool LLToolBarView::clearToolbars() { - for (S32 i = TOOLBAR_FIRST; i <= TOOLBAR_LAST; i++) + for (S32 i = LLToolBarEnums::TOOLBAR_FIRST; i <= LLToolBarEnums::TOOLBAR_LAST; i++) { if (mToolbars[i]) { @@ -371,20 +377,20 @@ void LLToolBarView::saveToolbars() const // Build the parameter tree from the toolbar data LLToolBarView::ToolbarSet toolbar_set; - if (mToolbars[TOOLBAR_LEFT]) + if (mToolbars[LLToolBarEnums::TOOLBAR_LEFT]) { - toolbar_set.left_toolbar.button_display_mode = mToolbars[TOOLBAR_LEFT]->getButtonType(); - addToToolset(mToolbars[TOOLBAR_LEFT]->getCommandsList(), toolbar_set.left_toolbar); + toolbar_set.left_toolbar.button_display_mode = mToolbars[LLToolBarEnums::TOOLBAR_LEFT]->getButtonType(); + addToToolset(mToolbars[LLToolBarEnums::TOOLBAR_LEFT]->getCommandsList(), toolbar_set.left_toolbar); } - if (mToolbars[TOOLBAR_RIGHT]) + if (mToolbars[LLToolBarEnums::TOOLBAR_RIGHT]) { - toolbar_set.right_toolbar.button_display_mode = mToolbars[TOOLBAR_RIGHT]->getButtonType(); - addToToolset(mToolbars[TOOLBAR_RIGHT]->getCommandsList(), toolbar_set.right_toolbar); + toolbar_set.right_toolbar.button_display_mode = mToolbars[LLToolBarEnums::TOOLBAR_RIGHT]->getButtonType(); + addToToolset(mToolbars[LLToolBarEnums::TOOLBAR_RIGHT]->getCommandsList(), toolbar_set.right_toolbar); } - if (mToolbars[TOOLBAR_BOTTOM]) + if (mToolbars[LLToolBarEnums::TOOLBAR_BOTTOM]) { - toolbar_set.bottom_toolbar.button_display_mode = mToolbars[TOOLBAR_BOTTOM]->getButtonType(); - addToToolset(mToolbars[TOOLBAR_BOTTOM]->getCommandsList(), toolbar_set.bottom_toolbar); + toolbar_set.bottom_toolbar.button_display_mode = mToolbars[LLToolBarEnums::TOOLBAR_BOTTOM]->getButtonType(); + addToToolset(mToolbars[LLToolBarEnums::TOOLBAR_BOTTOM]->getCommandsList(), toolbar_set.bottom_toolbar); } // Serialize the parameter tree @@ -511,9 +517,9 @@ void LLToolBarView::onToolBarButtonRemoved(LLView* button) void LLToolBarView::draw() { - LLRect toolbar_rects[TOOLBAR_COUNT]; + LLRect toolbar_rects[LLToolBarEnums::TOOLBAR_COUNT]; - for (S32 i = TOOLBAR_FIRST; i <= TOOLBAR_LAST; i++) + for (S32 i = LLToolBarEnums::TOOLBAR_FIRST; i <= LLToolBarEnums::TOOLBAR_LAST; i++) { if (mToolbars[i]) { @@ -532,7 +538,7 @@ void LLToolBarView::draw() } } - for (S32 i = TOOLBAR_FIRST; i <= TOOLBAR_LAST; i++) + for (S32 i = LLToolBarEnums::TOOLBAR_FIRST; i <= LLToolBarEnums::TOOLBAR_LAST; i++) { mToolbars[i]->getParent()->setVisible(mShowToolbars && (mToolbars[i]->hasButtons() @@ -544,7 +550,7 @@ void LLToolBarView::draw() { LLColor4 drop_color = LLUIColorTable::instance().getColor( "ToolbarDropZoneColor" ); - for (S32 i = TOOLBAR_FIRST; i <= TOOLBAR_LAST; i++) + for (S32 i = LLToolBarEnums::TOOLBAR_FIRST; i <= LLToolBarEnums::TOOLBAR_LAST; i++) { gl_rect_2d(toolbar_rects[i], drop_color, TRUE); } @@ -620,7 +626,7 @@ BOOL LLToolBarView::handleDropTool( void* cargo_data, S32 x, S32 y, LLToolBar* t S32 old_toolbar_loc = gToolBarView->hasCommand(command_id); LLToolBar* old_toolbar = NULL; - if (old_toolbar_loc != TOOLBAR_NONE) + if (old_toolbar_loc != LLToolBarEnums::TOOLBAR_NONE) { llassert(gToolBarView->mDragToolbarButton); old_toolbar = gToolBarView->mDragToolbarButton->getParentByType(); @@ -683,7 +689,7 @@ bool LLToolBarView::isModified() const { bool modified = false; - for (S32 i = TOOLBAR_FIRST; i <= TOOLBAR_LAST; i++) + for (S32 i = LLToolBarEnums::TOOLBAR_FIRST; i <= LLToolBarEnums::TOOLBAR_LAST; i++) { modified |= mToolbars[i]->isModified(); } diff --git a/indra/newview/lltoolbarview.h b/indra/newview/lltoolbarview.h index dcc3862074..a230c2fdee 100755 --- a/indra/newview/lltoolbarview.h +++ b/indra/newview/lltoolbarview.h @@ -40,19 +40,6 @@ class LLUICtrlFactory; class LLToolBarView : public LLUICtrl { public: - typedef enum - { - TOOLBAR_NONE = 0, - TOOLBAR_LEFT, - TOOLBAR_RIGHT, - TOOLBAR_BOTTOM, - - TOOLBAR_COUNT, - - TOOLBAR_FIRST = TOOLBAR_LEFT, - TOOLBAR_LAST = TOOLBAR_BOTTOM, - } EToolBarLocation; - // Xui structure of the toolbar panel struct Params : public LLInitParam::Block {}; @@ -84,9 +71,9 @@ public: virtual void draw(); // Toolbar view interface with the rest of the world - // Checks if the commandId is being used somewhere in one of the toolbars, returns EToolBarLocation + // Checks if the commandId is being used somewhere in one of the toolbars, returns LLToolBarEnums::EToolBarLocation S32 hasCommand(const LLCommandId& commandId) const; - S32 addCommand(const LLCommandId& commandId, EToolBarLocation toolbar, int rank = LLToolBar::RANK_NONE); + S32 addCommand(const LLCommandId& commandId, LLToolBarEnums::EToolBarLocation toolbar, int rank = LLToolBar::RANK_NONE); S32 removeCommand(const LLCommandId& commandId, int& rank); // Sets the rank the removed command was at, RANK_NONE if not found S32 enableCommand(const LLCommandId& commandId, bool enabled); S32 stopCommandInProgress(const LLCommandId& commandId); @@ -109,7 +96,7 @@ public: static void resetDragTool(LLToolBarButton* toolbarButton); LLInventoryObject* getDragItem(); LLView* getBottomToolbar() { return mBottomToolbarPanel; } - LLToolBar* getToolbar(EToolBarLocation toolbar) { return mToolbars[toolbar]; } + LLToolBar* getToolbar(LLToolBarEnums::EToolBarLocation toolbar) { return mToolbars[toolbar]; } bool isModified() const; protected: @@ -127,7 +114,7 @@ private: static void onToolBarButtonRemoved(LLView* button); // Pointers to the toolbars handled by the toolbar view - LLToolBar* mToolbars[TOOLBAR_COUNT]; + LLToolBar* mToolbars[LLToolBarEnums::TOOLBAR_COUNT]; bool mToolbarsLoaded; bool mDragStarted; diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index cb7536edce..ef5021816e 100755 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -1860,6 +1860,14 @@ void LLViewerWindow::initBase() // Constrain floaters to inside the menu and status bar regions. gFloaterView = main_view->getChild("Floater View"); + for (S32 i = 0; i < LLToolBarEnums::TOOLBAR_COUNT; ++i) + { + LLToolBar * toolbarp = gToolBarView->getToolbar((LLToolBarEnums::EToolBarLocation)i); + if (toolbarp) + { + toolbarp->getCenterLayoutPanel()->setReshapeCallback(boost::bind(&LLFloaterView::setToolbarRect, gFloaterView, _1, _2)); + } + } gFloaterView->setFloaterSnapView(main_view->getChild("floater_snap_region")->getHandle()); gSnapshotFloaterView = main_view->getChild("Snapshot Floater View"); -- cgit v1.2.3 From bc244a723d5821812a73a1278bc7bebbba2128ad Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Mon, 30 Sep 2013 14:46:05 +0300 Subject: MAINT-3150 FIXED Show folder links that were always hidden by inventory filter. --- indra/newview/llinventoryfilter.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp index 3c6974cf6d..15463e0d33 100755 --- a/indra/newview/llinventoryfilter.cpp +++ b/indra/newview/llinventoryfilter.cpp @@ -139,7 +139,14 @@ bool LLInventoryFilter::checkFolder(const LLUUID& folder_id) const { return passed_clipboard; } - + + // show folder links + LLViewerInventoryItem* item = gInventory.getItem(folder_id); + if (item && item->getActualType() == LLAssetType::AT_LINK_FOLDER) + { + return passed_clipboard; + } + if (mFilterOps.mFilterTypes & FILTERTYPE_CATEGORY) { // Can only filter categories for items in your inventory -- cgit v1.2.3 From 5713e41e5728d61a9f5e8bdace7124fb4701953a Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Tue, 1 Oct 2013 12:32:57 +0300 Subject: MAINT-3231 FIXED Don't show first run dialog. --- indra/newview/llstartup.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 67a76460a7..506eba0683 100755 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -786,6 +786,7 @@ bool idle_startup() display_startup(); LLPanelLogin::giveFocus(); + /* MAINT-3231 Don't show first run dialog if (gSavedSettings.getBOOL("FirstLoginThisInstall")) { LL_INFOS("AppInit") << "FirstLoginThisInstall, calling show_first_run_dialog()" << LL_ENDL; @@ -794,7 +795,7 @@ bool idle_startup() else { LL_DEBUGS("AppInit") << "FirstLoginThisInstall off" << LL_ENDL; - } + }*/ LLStartUp::setStartupState( STATE_LOGIN_WAIT ); // Wait for user input } -- cgit v1.2.3 From e71e30aea05048bb2e896a4e277cb76f3fcd5ca8 Mon Sep 17 00:00:00 2001 From: MaximB ProductEngine Date: Tue, 1 Oct 2013 11:06:44 +0300 Subject: MAINT-3174 (When resident is sharing some item with you, there is no context menu in IM conversation.) --- indra/newview/lltoastnotifypanel.cpp | 2 ++ indra/newview/llviewertexteditor.cpp | 5 +++++ indra/newview/llviewertexteditor.h | 2 ++ 3 files changed, 9 insertions(+) diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp index 3a41bf28b4..7d48634381 100755 --- a/indra/newview/lltoastnotifypanel.cpp +++ b/indra/newview/lltoastnotifypanel.cpp @@ -41,6 +41,7 @@ #include "llnotificationsutil.h" #include "llviewermessage.h" #include "llfloaterimsession.h" +#include "llavataractions.h" const S32 BOTTOM_PAD = VPAD * 3; const S32 IGNORE_BTN_TOP_DELTA = 3*VPAD;//additional ignore_btn padding @@ -313,6 +314,7 @@ void LLToastNotifyPanel::init( LLRect rect, bool show_images ) mTextBox->setVisible(TRUE); mTextBox->setPlainText(!show_images); mTextBox->setValue(mNotification->getMessage()); + mTextBox->setIsFriendCallback(LLAvatarActions::isFriend); // add buttons for a script notification if (mIsTip) diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp index 8036a4e258..e51f7b2c71 100755 --- a/indra/newview/llviewertexteditor.cpp +++ b/indra/newview/llviewertexteditor.cpp @@ -689,6 +689,11 @@ void LLViewerTextEditor::makePristine() LLTextEditor::makePristine(); } +void LLViewerTextEditor::handleVisibilityChange( BOOL new_visibility ) +{ + LLUICtrl::handleVisibilityChange(new_visibility); +} + BOOL LLViewerTextEditor::handleMouseDown(S32 x, S32 y, MASK mask) { BOOL handled = FALSE; diff --git a/indra/newview/llviewertexteditor.h b/indra/newview/llviewertexteditor.h index fb428d0dc1..33b78a5964 100755 --- a/indra/newview/llviewertexteditor.h +++ b/indra/newview/llviewertexteditor.h @@ -46,6 +46,8 @@ public: virtual ~LLViewerTextEditor(); virtual void makePristine(); + + /*virtual*/ void handleVisibilityChange( BOOL new_visibility ); // mousehandler overrides virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); -- cgit v1.2.3 From d71e3f950cf84f67360e1ac7552c01c18eeb6d09 Mon Sep 17 00:00:00 2001 From: simon_linden Date: Wed, 9 Oct 2013 11:45:20 -0700 Subject: MAINT-3285 : RenderDepthOfField debug setting needs description tweak --- indra/newview/app_settings/settings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 1c532e957e..13018b4f06 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -8696,7 +8696,7 @@ RenderDepthOfField Comment - Whether to use depth of field effect when lighting and shadows are enabled + Whether to use depth of field effect when Advanced Lighting Model is enabled Persist 1 Type -- cgit v1.2.3 From ea14f690e2d5b567ecfdf1094f69b78b522efd51 Mon Sep 17 00:00:00 2001 From: dmitry Date: Thu, 10 Oct 2013 12:00:10 +0300 Subject: MAINT-535 Wiki-style link markup hides potentially malicious secondlife: app URLs Partial fix: disabled URLs in the 'label' part of Wiki-style link --- indra/llui/llurlentry.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp index b1cc502c4b..840f67968d 100755 --- a/indra/llui/llurlentry.cpp +++ b/indra/llui/llurlentry.cpp @@ -1067,7 +1067,8 @@ LLUrlEntrySLLabel::LLUrlEntrySLLabel() std::string LLUrlEntrySLLabel::getLabel(const std::string &url, const LLUrlLabelCallback &cb) { - return getLabelFromWikiLink(url); + std::string label = getLabelFromWikiLink(url); + return (!LLUrlRegistry::instance().hasUrl(label)) ? label : getUrl(url); } std::string LLUrlEntrySLLabel::getUrl(const std::string &string) const -- cgit v1.2.3 From 954c8fb1e3c47b3ebf219f97129e5c6e9bf911b8 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Tue, 10 Sep 2013 15:33:26 -0500 Subject: MAINT-3131 Add a GPU memory bandwidth benchmark. --- .../shaders/class1/interface/benchmarkF.glsl | 39 ++++++ .../shaders/class1/interface/benchmarkV.glsl | 38 ++++++ indra/newview/llglsandbox.cpp | 133 ++++++++++++++++++++- indra/newview/llviewermenu.cpp | 12 ++ indra/newview/llviewershadermgr.cpp | 23 ++++ indra/newview/llviewershadermgr.h | 1 + indra/newview/skins/default/xui/en/menu_viewer.xml | 6 + 7 files changed, 251 insertions(+), 1 deletion(-) create mode 100644 indra/newview/app_settings/shaders/class1/interface/benchmarkF.glsl create mode 100644 indra/newview/app_settings/shaders/class1/interface/benchmarkV.glsl diff --git a/indra/newview/app_settings/shaders/class1/interface/benchmarkF.glsl b/indra/newview/app_settings/shaders/class1/interface/benchmarkF.glsl new file mode 100644 index 0000000000..1936e0dcaa --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/interface/benchmarkF.glsl @@ -0,0 +1,39 @@ +/** + * @file benchmarkF.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifdef DEFINE_GL_FRAGCOLOR +out vec4 frag_color; +#else +#define frag_color gl_FragColor +#endif + +uniform sampler2D diffuseMap; + +VARYING vec2 tc0; + +void main() +{ + frag_color = texture2D(diffuseMap, tc0); +} diff --git a/indra/newview/app_settings/shaders/class1/interface/benchmarkV.glsl b/indra/newview/app_settings/shaders/class1/interface/benchmarkV.glsl new file mode 100644 index 0000000000..7beb20ede4 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/interface/benchmarkV.glsl @@ -0,0 +1,38 @@ +/** + * @file benchmarkV.glsl + * + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +uniform mat4 modelview_projection_matrix; + +ATTRIBUTE vec3 position; + +VARYING vec2 tc0; + +void main() +{ + gl_Position = vec4(position, 1.0); + + tc0 = (position.xy*0.5+0.5); +} + diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp index 60fa53f491..83cabf7d55 100755 --- a/indra/newview/llglsandbox.cpp +++ b/indra/newview/llglsandbox.cpp @@ -62,6 +62,7 @@ #include "llresmgr.h" #include "pipeline.h" #include "llspatialpartition.h" +#include "llviewershadermgr.h" // Height of the yellow selection highlight posts for land const F32 PARCEL_POST_HEIGHT = 0.666f; @@ -767,7 +768,6 @@ void draw_line_cube(F32 width, const LLVector3& center) gGL.vertex3f(center.mV[VX] + width ,center.mV[VY] - width,center.mV[VZ] - width); } - void LLViewerObjectList::renderObjectBeacons() { if (mDebugBeacons.empty()) @@ -878,3 +878,134 @@ void LLViewerObjectList::renderObjectBeacons() } +void gpu_benchmark() +{ + if (!LLGLSLShader::sNoFixedFunction) + { //don't bother benchmarking the fixed function + return; + } + + //measure memory bandwidth by: + // - allocating a batch of textures and render targets + // - rendering those textures to those render targets + // - recording time taken + // - taking the median time for a given number of samples + + //resolution of textures/render targets + const U32 res = 1024; + + //number of textures + const U32 count = 32; + + //number of samples to take + const S32 samples = 64; + + LLGLSLShader::initProfile(); + + LLRenderTarget dest[count]; + U32 source[count]; + LLImageGL::generateTextures(LLTexUnit::TT_TEXTURE, GL_RGBA, count, source); + std::vector results; + + //build a random texture + U8 pixels[res*res*4]; + + for (U32 i = 0; i < res*res*4; ++i) + { + pixels[i] = (U8) ll_rand(255); + } + + + gGL.setColorMask(true, true); + LLGLDepthTest depth(GL_FALSE); + + for (U32 i = 0; i < count; ++i) + { //allocate render targets and textures + dest[i].allocate(res,res,GL_RGBA,false, false, LLTexUnit::TT_TEXTURE, true); + dest[i].bindTarget(); + dest[i].clear(); + dest[i].flush(); + + gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, source[i]); + LLImageGL::setManualImage(GL_TEXTURE_2D, 0, GL_RGBA, res,res,GL_RGBA, GL_UNSIGNED_BYTE, pixels); + } + + //make a dummy triangle to draw with + LLPointer buff = new LLVertexBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, GL_STATIC_DRAW_ARB); + buff->allocateBuffer(3, 0, true); + + LLStrider v; + LLStrider tc; + + buff->getVertexStrider(v); + + v[0].set(-1,1,0); + v[1].set(-1,-3,0); + v[2].set(3,1,0); + buff->flush(); + + gBenchmarkProgram.bind(); + buff->setBuffer(LLVertexBuffer::MAP_VERTEX); + + //wait for any previoius GL commands to finish + glFinish(); + + for (S32 c = -1; c < samples; ++c) + { + LLTimer timer; + timer.start(); + + for (U32 i = 0; i < count; ++i) + { + dest[i].bindTarget(); + gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, source[i]); + buff->drawArrays(LLRender::TRIANGLES, 0, 3); + dest[i].flush(); + } + + //wait for current batch of copies to finish + glFinish(); + + F32 time = timer.getElapsedTimeF32(); + + if (c >= 0) // <-- ignore the first sample as it tends to be artificially slow + { + //store result in gigabytes per second + F32 gb = (F32) ((F64) (res*res*8*count))/(1000000000); + + F32 gbps = gb/time; + + results.push_back(gbps); + } + } + + gBenchmarkProgram.unbind(); + + LLGLSLShader::finishProfile(); + + LLImageGL::deleteTextures(LLTexUnit::TT_TEXTURE, GL_RGBA, 0, count, source); + + + std::sort(results.begin(), results.end()); + + F32 gbps = results[results.size()/2]; + + llinfos << "Memory bandwidth is " << llformat("%.3f", gbps) << "GB/sec according to CPU timers" << llendl; + + F32 ms = gBenchmarkProgram.mTimeElapsed/1000000.f; + F32 seconds = ms/1000.f; + + F64 samples_drawn = res*res*count*samples; + F32 samples_sec = (samples_drawn/1000000000.0)/seconds; + gbps = samples_sec*8; + + if (gGLManager.mHasTimerQuery) + { + llinfos << "Memory bandwidth is " << llformat("%.3f", gbps) << "GB/sec according to ARB_timer_query" << llendl; + } + else + { + llinfos << "ARB_timer_query unavailable." << llendl; + } +} + diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index ac2940fcfc..3710522fdd 100755 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -7193,6 +7193,17 @@ class LLAdvancedClickRenderProfile: public view_listener_t } }; +void gpu_benchmark(); + +class LLAdvancedClickRenderBenchmark: public view_listener_t +{ + bool handleEvent(const LLSD& userdata) + { + gpu_benchmark(); + return true; + } +}; + void menu_toggle_attached_lights(void* user_data) { LLPipeline::sRenderAttachedLights = gSavedSettings.getBOOL("RenderAttachedLights"); @@ -8633,6 +8644,7 @@ void initialize_menus() view_listener_t::addMenu(new LLAdvancedCheckRenderShadowOption(), "Advanced.CheckRenderShadowOption"); view_listener_t::addMenu(new LLAdvancedClickRenderShadowOption(), "Advanced.ClickRenderShadowOption"); view_listener_t::addMenu(new LLAdvancedClickRenderProfile(), "Advanced.ClickRenderProfile"); + view_listener_t::addMenu(new LLAdvancedClickRenderBenchmark(), "Advanced.ClickRenderBenchmark"); #ifdef TOGGLE_HACKED_GODLIKE_VIEWER view_listener_t::addMenu(new LLAdvancedHandleToggleHackedGodmode(), "Advanced.HandleToggleHackedGodmode"); diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index 553f6a2d59..e88b22b461 100755 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -87,6 +87,8 @@ LLGLSLShader gClipProgram; LLGLSLShader gDownsampleDepthProgram; LLGLSLShader gDownsampleDepthRectProgram; LLGLSLShader gAlphaMaskProgram; +LLGLSLShader gBenchmarkProgram; + //object shaders LLGLSLShader gObjectSimpleProgram; @@ -681,6 +683,7 @@ void LLViewerShaderMgr::unloadShaders() gClipProgram.unload(); gDownsampleDepthProgram.unload(); gDownsampleDepthRectProgram.unload(); + gBenchmarkProgram.unload(); gAlphaMaskProgram.unload(); gUIProgram.unload(); gPathfindingProgram.unload(); @@ -3188,6 +3191,26 @@ BOOL LLViewerShaderMgr::loadShadersInterface() success = gDownsampleDepthProgram.createShader(NULL, NULL); } + if (success) + { + gBenchmarkProgram.mName = "Benchmark Shader"; + gBenchmarkProgram.mShaderFiles.clear(); + gBenchmarkProgram.mShaderFiles.push_back(make_pair("interface/benchmarkV.glsl", GL_VERTEX_SHADER_ARB)); + gBenchmarkProgram.mShaderFiles.push_back(make_pair("interface/benchmarkF.glsl", GL_FRAGMENT_SHADER_ARB)); + gBenchmarkProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE]; + success = gBenchmarkProgram.createShader(NULL, NULL); + } + + if (success) + { + gDownsampleDepthRectProgram.mName = "DownsampleDepthRect Shader"; + gDownsampleDepthRectProgram.mShaderFiles.clear(); + gDownsampleDepthRectProgram.mShaderFiles.push_back(make_pair("interface/downsampleDepthV.glsl", GL_VERTEX_SHADER_ARB)); + gDownsampleDepthRectProgram.mShaderFiles.push_back(make_pair("interface/downsampleDepthRectF.glsl", GL_FRAGMENT_SHADER_ARB)); + gDownsampleDepthRectProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE]; + success = gDownsampleDepthRectProgram.createShader(NULL, NULL); + } + if (success) { gDownsampleDepthRectProgram.mName = "DownsampleDepthRect Shader"; diff --git a/indra/newview/llviewershadermgr.h b/indra/newview/llviewershadermgr.h index 3d89f8d20a..53569ca7ab 100755 --- a/indra/newview/llviewershadermgr.h +++ b/indra/newview/llviewershadermgr.h @@ -183,6 +183,7 @@ extern LLGLSLShader gDebugProgram; extern LLGLSLShader gClipProgram; extern LLGLSLShader gDownsampleDepthProgram; extern LLGLSLShader gDownsampleDepthRectProgram; +extern LLGLSLShader gBenchmarkProgram; //output tex0[tc0] + tex1[tc1] extern LLGLSLShader gTwoTextureAddProgram; diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 95a7839337..8f9522c180 100755 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -2397,6 +2397,12 @@
+ + + Date: Tue, 8 Oct 2013 14:43:10 -0500 Subject: Fix for random bad colors in UI on Intel HD 4000 --- indra/llrender/llrender.cpp | 11 ++++++++++- .../app_settings/shaders/class1/interface/solidcolorF.glsl | 7 ++++--- .../app_settings/shaders/class1/interface/solidcolorV.glsl | 3 --- indra/newview/llselectmgr.cpp | 7 ++++--- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp index 0ac30b4d63..41301b6c85 100755 --- a/indra/llrender/llrender.cpp +++ b/indra/llrender/llrender.cpp @@ -2196,7 +2196,16 @@ void LLRender::texCoord2fv(const GLfloat* tc) void LLRender::color4ub(const GLubyte& r, const GLubyte& g, const GLubyte& b, const GLubyte& a) { - mColorsp[mCount] = LLColor4U(r,g,b,a); + if (LLGLSLShader::sNoFixedFunction && + (!LLGLSLShader::sCurBoundShaderPtr || + LLGLSLShader::sCurBoundShaderPtr->mAttributeMask & LLVertexBuffer::MAP_COLOR)) + { + mColorsp[mCount] = LLColor4U(r,g,b,a); + } + else + { //not using shaders or shader reads color from a uniform + diffuseColor4ub(r,g,b,a); + } } void LLRender::color4ubv(const GLubyte* c) { diff --git a/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl b/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl index 67dc500493..da02534dbb 100755 --- a/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl @@ -31,12 +31,13 @@ out vec4 frag_color; uniform sampler2D tex0; -VARYING vec4 vertex_color; +uniform vec4 color; + VARYING vec2 vary_texcoord0; void main() { - float alpha = texture2D(tex0, vary_texcoord0.xy).a * vertex_color.a; + float alpha = texture2D(tex0, vary_texcoord0.xy).a * color.a; - frag_color = vec4(vertex_color.rgb, alpha); + frag_color = vec4(color.rgb, alpha); } diff --git a/indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl b/indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl index c58f9dfdaf..f33115d78d 100755 --- a/indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl @@ -26,16 +26,13 @@ uniform mat4 modelview_projection_matrix; ATTRIBUTE vec3 position; -ATTRIBUTE vec4 diffuse_color; ATTRIBUTE vec2 texcoord0; -VARYING vec4 vertex_color; VARYING vec2 vary_texcoord0; void main() { gl_Position = modelview_projection_matrix * vec4(position.xyz, 1.0); - vertex_color = diffuse_color; vary_texcoord0 = texcoord0; } diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 7b397d46f3..c83b459279 100755 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -6187,8 +6187,8 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color) LLGLSLShader* shader = LLGLSLShader::sCurBoundShaderPtr; if (shader) - { //switch to "solid color" program for SH-2690 -- works around driver bug causing bad triangles when rendering silhouettes - gSolidColorProgram.bind(); + { //use UI program for selection highlights (texture color modulated by vertex color) + gUIProgram.bind(); } gGL.matrixMode(LLRender::MM_MODELVIEW); @@ -6243,10 +6243,11 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color) gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); gGL.begin(LLRender::LINES); { + gGL.color4f(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE], 0.4f); + for(S32 i = 0; i < mSilhouetteVertices.size(); i += 2) { u_coord += u_divisor * LLSelectMgr::sHighlightUScale; - gGL.color4f(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE], 0.4f); gGL.texCoord2f( u_coord, v_coord ); gGL.vertex3fv( mSilhouetteVertices[i].mV); u_coord += u_divisor * LLSelectMgr::sHighlightUScale; -- cgit v1.2.3 From b0a873570e2d8df1241f9b44759da7f803fe3baf Mon Sep 17 00:00:00 2001 From: MaximB ProductEngine Date: Fri, 11 Oct 2013 22:45:12 +0300 Subject: MAINT-3289 (User is not able to open mini inspector by one click on 'i' icon) --- indra/llui/lltexteditor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index 62140dd9d6..81d9fd1ec9 100755 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -1620,7 +1620,7 @@ BOOL LLTextEditor::handleControlKey(const KEY key, const MASK mask) } } - if (handled) + if (handled && !gFocusMgr.getMouseCapture()) { updatePrimary(); } -- cgit v1.2.3 From 9ccbf6bee8ec178087734bb25c220c0cfcbda052 Mon Sep 17 00:00:00 2001 From: simon_linden Date: Mon, 14 Oct 2013 14:58:27 -0700 Subject: MAINT-3308 : Crash in viewer with removeMissingBakedTextures() / updateMeshTextures() loop Reviewed by Kelly --- indra/newview/llvoavatar.cpp | 24 ++++++++++++++++-------- indra/newview/llvoavatarself.cpp | 8 ++++---- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index f5918a0a5f..f1578a4186 100755 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -6453,7 +6453,7 @@ void LLVOAvatar::updateMeshTextures() LLViewerTexLayerSet* layerset = getTexLayerSet(i); if (use_lkg_baked_layer[i] && !isUsingLocalAppearance() ) - { + { LLViewerFetchedTexture* baked_img = LLViewerTextureManager::getFetchedTexture(mBakedTextureDatas[i].mLastTextureID); mBakedTextureDatas[i].mIsUsed = TRUE; @@ -6462,12 +6462,12 @@ void LLVOAvatar::updateMeshTextures() avatar_joint_mesh_list_t::iterator iter = mBakedTextureDatas[i].mJointMeshes.begin(); avatar_joint_mesh_list_t::iterator end = mBakedTextureDatas[i].mJointMeshes.end(); for (; iter != end; ++iter) - { + { LLAvatarJointMesh* mesh = (*iter); if (mesh) - { + { mesh->setTexture( baked_img ); - } + } } } else if (!isUsingLocalAppearance() && is_layer_baked[i]) @@ -6511,7 +6511,7 @@ void LLVOAvatar::updateMeshTextures() if (mesh) { mesh->setLayerSet( layerset ); - } + } } } else @@ -6533,7 +6533,7 @@ void LLVOAvatar::updateMeshTextures() { LLAvatarJointMesh* mesh = (*iter); if (mesh) - { + { mesh->setColor( color ); mesh->setTexture( hair_img ); } @@ -6561,7 +6561,15 @@ void LLVOAvatar::updateMeshTextures() } } } - removeMissingBakedTextures(); + + // removeMissingBakedTextures() will call back into this rountine if something is removed, and can blow up the stack + static bool call_remove_missing = true; + if (call_remove_missing) + { + call_remove_missing = false; + removeMissingBakedTextures(); // May call back into this function if anything is removed + call_remove_missing = true; + } } // virtual @@ -7778,7 +7786,7 @@ void LLVOAvatar::setIsUsingServerBakes(BOOL newval) // virtual void LLVOAvatar::removeMissingBakedTextures() - { +{ } //virtual diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 9ce99444d9..4e93c93fd2 100755 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -847,7 +847,7 @@ void LLVOAvatarSelf::removeMissingBakedTextures() if (!tex || tex->isMissingAsset()) { LLViewerTexture *imagep = LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT_AVATAR); - if (imagep) + if (imagep && imagep != tex) { setTEImage(te, imagep); removed = TRUE; @@ -863,13 +863,13 @@ void LLVOAvatarSelf::removeMissingBakedTextures() layerset->setUpdatesEnabled(TRUE); invalidateComposite(layerset, FALSE); } - updateMeshTextures(); + updateMeshTextures(); // may call back into this function if (getRegion() && !getRegion()->getCentralBakeVersion()) { - requestLayerSetUploads(); + requestLayerSetUploads(); + } } } -} //virtual void LLVOAvatarSelf::updateRegion(LLViewerRegion *regionp) -- cgit v1.2.3 From 5d2d6ddd5e366a7f1ed1660aaede72d4a14dd0c9 Mon Sep 17 00:00:00 2001 From: simon_linden Date: Mon, 14 Oct 2013 15:24:03 -0700 Subject: Clean up indentation --- indra/newview/llvoavatar.cpp | 213 ++++++++++++++++++++------------------- indra/newview/llvoavatarself.cpp | 12 +-- 2 files changed, 113 insertions(+), 112 deletions(-) diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index f1578a4186..fd6be2094f 100755 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -253,7 +253,7 @@ struct LLAppearanceMessageContents }; struct LLVOAvatarChildJoint : public LLInitParam::ChoiceBlock - { +{ Alternative > bone; Alternative collision_volume; @@ -1660,15 +1660,15 @@ void LLVOAvatar::releaseMeshData() LLFace* facep = mDrawable->getFace(0); if (facep) { - facep->setSize(0, 0); - for(S32 i = mNumInitFaces ; i < mDrawable->getNumFaces(); i++) - { - facep = mDrawable->getFace(i); + facep->setSize(0, 0); + for(S32 i = mNumInitFaces ; i < mDrawable->getNumFaces(); i++) + { + facep = mDrawable->getFace(i); if (facep) { - facep->setSize(0, 0); - } - } + facep->setSize(0, 0); + } + } } } @@ -1855,11 +1855,11 @@ U32 LLVOAvatar::processUpdateMessage(LLMessageSystem *mesgsys, U32 retval = LLViewerObject::processUpdateMessage(mesgsys, user_data, block_num, update_type, dp); // Print out arrival information once we have name of avatar. - if (has_name && getNVPair("FirstName")) - { - mDebugExistenceTimer.reset(); + if (has_name && getNVPair("FirstName")) + { + mDebugExistenceTimer.reset(); debugAvatarRezTime("AvatarRezArrivedNotification","avatar arrived"); - } + } if(retval & LLViewerObject::INVALID_UPDATE) { @@ -1889,22 +1889,22 @@ LLViewerFetchedTexture *LLVOAvatar::getBakedTextureImage(const U8 te, const LLUU } if (!result) -{ + { const std::string url = getImageURL(te,uuid); if (!url.empty()) - { + { LL_DEBUGS("Avatar") << avString() << "from URL " << url << llendl; result = LLViewerTextureManager::getFetchedTextureFromUrl( url, FTT_SERVER_BAKE, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, uuid); - } - else - { + } + else + { LL_DEBUGS("Avatar") << avString() << "from host " << uuid << llendl; LLHost host = getObjectHost(); result = LLViewerTextureManager::getFetchedTexture( uuid, FTT_HOST_BAKE, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, host); + } } -} return result; } @@ -2398,8 +2398,8 @@ void LLVOAvatar::idleUpdateLoadingEffect() { LL_INFOS("Avatar") << avString() << "self isFullyLoaded, mFirstFullyVisible" << LL_ENDL; mFirstFullyVisible = FALSE; - LLAppearanceMgr::instance().onFirstFullyVisible(); - } + LLAppearanceMgr::instance().onFirstFullyVisible(); + } if (isFullyLoaded() && mFirstFullyVisible && !isSelf()) { LL_INFOS("Avatar") << avString() << "other isFullyLoaded, mFirstFullyVisible" << LL_ENDL; @@ -4072,7 +4072,7 @@ U32 LLVOAvatar::renderTransparent(BOOL first_pass) { LLViewerJoint* hair_mesh = getViewerJoint(MESH_ID_HAIR); if (hair_mesh) - { + { num_indices += hair_mesh->render(mAdjustedPixelArea, first_pass, mIsDummy); } first_pass = FALSE; @@ -5199,8 +5199,8 @@ BOOL LLVOAvatar::loadSkeletonNode () { if (!LLAvatarAppearance::loadSkeletonNode()) { - return FALSE; - } + return FALSE; + } // ATTACHMENTS { @@ -5731,20 +5731,21 @@ void LLVOAvatar::cleanupAttachedMesh( LLViewerObject* pVO ) if (pSkinData && pSkinData->mJointNames.size() > 20 // full rig && pSkinData->mAlternateBindMatrix.size() > 0) - { - LLVOAvatar::resetJointPositionsToDefault(); - //Need to handle the repositioning of the cam, updating rig data etc during outfit editing - //This handles the case where we detach a replacement rig. - if ( gAgentCamera.cameraCustomizeAvatar() ) - { - gAgent.unpauseAnimation(); - //Still want to refocus on head bone - gAgentCamera.changeCameraToCustomizeAvatar(); - } - } + { + LLVOAvatar::resetJointPositionsToDefault(); + //Need to handle the repositioning of the cam, updating rig data etc during outfit editing + //This handles the case where we detach a replacement rig. + if ( gAgentCamera.cameraCustomizeAvatar() ) + { + gAgent.unpauseAnimation(); + //Still want to refocus on head bone + gAgentCamera.changeCameraToCustomizeAvatar(); } - } + } } + } +} + //----------------------------------------------------------------------------- // detachObject() //----------------------------------------------------------------------------- @@ -5957,18 +5958,18 @@ BOOL LLVOAvatar::isWearingWearableType(LLWearableType::EType type) const { const LLAvatarAppearanceDictionary::TextureEntry *texture_dict = tex_iter->second; if (texture_dict->mWearableType == type) - { + { // Thus, you must check to see if the corresponding baked texture is defined. // NOTE: this is a poor substitute if you actually want to know about individual pieces of clothing // this works for detecting a skirt (most important), but is ineffective at any piece of clothing that // gets baked into a texture that always exists (upper or lower). if (texture_dict->mIsUsedByBakedTexture) - { + { const EBakedTextureIndex baked_index = texture_dict->mBakedTextureIndex; return isTextureDefined(LLAvatarAppearanceDictionary::getInstance()->getBakedTexture(baked_index)->mTextureIndex); - } + } return FALSE; - } + } } return FALSE; } @@ -6033,7 +6034,7 @@ void LLVOAvatar::onGlobalColorChanged(const LLTexGlobalColor* global_color, BOOL { LLAvatarJointMesh* mesh = (*iter); if (mesh) - { + { mesh->setColor( color ); } } @@ -6101,9 +6102,9 @@ void LLVOAvatar::updateRezzedStatusTimers() { // load level has decreased. start phase timers for higher load levels. for (S32 i = rez_status+1; i <= mLastRezzedStatus; i++) - { + { startPhase("load_" + LLVOAvatar::rezStatusToString(i)); - } + } } else if (rez_status > mLastRezzedStatus) { @@ -6112,9 +6113,9 @@ void LLVOAvatar::updateRezzedStatusTimers() { stopPhase("load_" + LLVOAvatar::rezStatusToString(i)); stopPhase("first_load_" + LLVOAvatar::rezStatusToString(i), false); - } + } if (rez_status == 3) - { + { // "fully loaded", mark any pending appearance change complete. selfStopPhase("update_appearance_from_cof"); selfStopPhase("wear_inventory_category", false); @@ -6148,7 +6149,7 @@ void LLVOAvatar::startPhase(const std::string& phase_name) } void LLVOAvatar::stopPhase(const std::string& phase_name, bool err_check) - { +{ F32 elapsed; bool completed; if (getPhases().getPhaseValues(phase_name, elapsed, completed)) @@ -6180,7 +6181,7 @@ void LLVOAvatar::stopPhase(const std::string& phase_name, bool err_check) void LLVOAvatar::logPendingPhases() { if (!isAgentAvatarValid()) - { + { return; } @@ -6196,14 +6197,14 @@ void LLVOAvatar::logPendingPhases() if (!completed) { logMetricsTimerRecord(phase_name, elapsed, completed); - } + } } } - } +} //static void LLVOAvatar::logPendingPhasesAllAvatars() - { +{ for (std::vector::iterator iter = LLCharacter::sInstances.begin(); iter != LLCharacter::sInstances.end(); ++iter) { @@ -6214,14 +6215,14 @@ void LLVOAvatar::logPendingPhasesAllAvatars() } inst->logPendingPhases(); } - } +} void LLVOAvatar::logMetricsTimerRecord(const std::string& phase_name, F32 elapsed, bool completed) - { +{ if (!isAgentAvatarValid()) - { + { return; - } + } LLSD record; record["timer_name"] = phase_name; @@ -6230,10 +6231,10 @@ void LLVOAvatar::logMetricsTimerRecord(const std::string& phase_name, F32 elapse record["completed"] = completed; U32 grid_x(0), grid_y(0); if (getRegion()) - { + { record["central_bake_version"] = LLSD::Integer(getRegion()->getCentralBakeVersion()); grid_from_region_handle(getRegion()->getHandle(), &grid_x, &grid_y); - } + } record["grid_x"] = LLSD::Integer(grid_x); record["grid_y"] = LLSD::Integer(grid_y); record["is_using_server_bakes"] = ((bool) isUsingServerBakes()); @@ -6294,8 +6295,8 @@ BOOL LLVOAvatar::processFullyLoadedChange(bool loading) mFullyLoaded = (mFullyLoadedTimer.getElapsedTimeF32() > PAUSE); - if (!mPreviousFullyLoaded && !loading && mFullyLoaded) - { + if (!mPreviousFullyLoaded && !loading && mFullyLoaded) + { debugAvatarRezTime("AvatarRezNotification","fully loaded"); } @@ -6629,13 +6630,13 @@ void LLVOAvatar::applyMorphMask(U8* tex_data, S32 width, S32 height, S32 num_com for (morph_list_t::const_iterator iter = mBakedTextureDatas[index].mMaskedMorphs.begin(); iter != mBakedTextureDatas[index].mMaskedMorphs.end(); ++iter) -{ + { const LLMaskedMorph* maskedMorph = (*iter); LLPolyMorphTarget* morph_target = dynamic_cast(maskedMorph->mMorphTarget); if (morph_target) - { + { morph_target->applyMask(tex_data, width, height, num_components, maskedMorph->mInvert); -} + } } } @@ -6918,7 +6919,7 @@ void dump_visual_param(apr_file_t* file, LLVisualParam* viewer_param, F32 value) LLWearableType::getTypeName(LLWearableType::EType(wtype)).c_str() // param_location_name(vparam->getParamLocation()).c_str() ); - } +} void LLVOAvatar::dumpAppearanceMsgParams( const std::string& dump_prefix, @@ -6933,9 +6934,9 @@ void LLVOAvatar::dumpAppearanceMsgParams( const std::string& dump_prefix, outfile.open(fullpath, LL_APR_WB ); apr_file_t* file = outfile.getFileHandle(); if (!file) - { - return; - } + { + return; + } else { LL_DEBUGS("Avatar") << "dumping appearance message to " << fullpath << llendl; @@ -6969,7 +6970,7 @@ void LLVOAvatar::dumpAppearanceMsgParams( const std::string& dump_prefix, apr_file_printf( file, "\t\t\n", i, uuid_str.c_str()); } apr_file_printf(file, "\n"); - } +} void LLVOAvatar::parseAppearanceMessage(LLMessageSystem* mesgsys, LLAppearanceMessageContents& contents) { @@ -7214,19 +7215,19 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) LLVisualParam* param = contents.mParams[i]; F32 newWeight = contents.mParamWeights[i]; - if (is_first_appearance_message || (param->getWeight() != newWeight)) + if (is_first_appearance_message || (param->getWeight() != newWeight)) + { + params_changed = TRUE; + if(is_first_appearance_message) { - params_changed = TRUE; - if(is_first_appearance_message) - { - param->setWeight(newWeight, FALSE); - } - else - { - interp_params = TRUE; - param->setAnimationTarget(newWeight, FALSE); - } + param->setWeight(newWeight, FALSE); } + else + { + interp_params = TRUE; + param->setAnimationTarget(newWeight, FALSE); + } + } } const S32 expected_tweakable_count = getVisualParamCountInGroup(VISUAL_PARAM_GROUP_TWEAKABLE); // don't worry about VISUAL_PARAM_GROUP_TWEAKABLE_NO_TRANSMIT if (num_params != expected_tweakable_count) @@ -7482,12 +7483,12 @@ void LLVOAvatar::useBakedTexture( const LLUUID& id ) avatar_joint_mesh_list_t::iterator iter = mBakedTextureDatas[i].mJointMeshes.begin(); avatar_joint_mesh_list_t::iterator end = mBakedTextureDatas[i].mJointMeshes.end(); for (; iter != end; ++iter) - { + { LLAvatarJointMesh* mesh = (*iter); if (mesh) - { + { mesh->setTexture( image_baked ); - } + } } } @@ -7511,7 +7512,7 @@ void LLVOAvatar::useBakedTexture( const LLUUID& id ) { LLAvatarJointMesh* mesh = (*iter); if (mesh) - { + { mesh->setColor( LLColor4::white ); } } @@ -7530,7 +7531,7 @@ std::string get_sequential_numbered_file_name(const std::string& prefix, file_num_type::iterator it = file_nums.find(prefix); S32 num = 0; if (it != file_nums.end()) -{ + { num = it->second; } file_nums[prefix] = num+1; @@ -7547,7 +7548,7 @@ void LLVOAvatar::dumpArchetypeXML(const std::string& prefix, bool group_by_weara outprefix = getFullname() + (isSelf()?"_s":"_o"); } if (outprefix.empty()) -{ + { outprefix = getFullname() + (isSelf()?"_s":"_o"); } if (outprefix.empty()) @@ -7576,36 +7577,36 @@ void LLVOAvatar::dumpArchetypeXML(const std::string& prefix, bool group_by_weara if (group_by_wearables) { for (S32 type = LLWearableType::WT_SHAPE; type < LLWearableType::WT_COUNT; type++) - { - const std::string& wearable_name = LLWearableType::getTypeName((LLWearableType::EType)type); - apr_file_printf( file, "\n\t\t\n", wearable_name.c_str() ); + { + const std::string& wearable_name = LLWearableType::getTypeName((LLWearableType::EType)type); + apr_file_printf( file, "\n\t\t\n", wearable_name.c_str() ); for (LLVisualParam* param = getFirstVisualParam(); param; param = getNextVisualParam()) - { - LLViewerVisualParam* viewer_param = (LLViewerVisualParam*)param; - if( (viewer_param->getWearableType() == type) && - (viewer_param->isTweakable() ) ) { - dump_visual_param(file, viewer_param, viewer_param->getWeight()); + LLViewerVisualParam* viewer_param = (LLViewerVisualParam*)param; + if( (viewer_param->getWearableType() == type) && + (viewer_param->isTweakable() ) ) + { + dump_visual_param(file, viewer_param, viewer_param->getWeight()); + } } - } - for (U8 te = 0; te < TEX_NUM_INDICES; te++) - { - if (LLAvatarAppearanceDictionary::getTEWearableType((ETextureIndex)te) == type) + for (U8 te = 0; te < TEX_NUM_INDICES; te++) { - // MULTIPLE_WEARABLES: extend to multiple wearables? - LLViewerTexture* te_image = getImage((ETextureIndex)te, 0); - if( te_image ) + if (LLAvatarAppearanceDictionary::getTEWearableType((ETextureIndex)te) == type) { - std::string uuid_str; - te_image->getID().toString( uuid_str ); - apr_file_printf( file, "\t\t\n", te, uuid_str.c_str()); + // MULTIPLE_WEARABLES: extend to multiple wearables? + LLViewerTexture* te_image = getImage((ETextureIndex)te, 0); + if( te_image ) + { + std::string uuid_str; + te_image->getID().toString( uuid_str ); + apr_file_printf( file, "\t\t\n", te, uuid_str.c_str()); + } } } } } - } else { // Just dump all params sequentially. @@ -7756,7 +7757,7 @@ void LLVOAvatar::bodySizeChanged() { // notify simulator of change in size // but not if we are in the middle of updating appearance gAgent.sendAgentSetAppearance(); -} + } } BOOL LLVOAvatar::isUsingServerBakes() const @@ -7768,21 +7769,21 @@ BOOL LLVOAvatar::isUsingServerBakes() const F32 wt = appearance_version_param->getWeight(); F32 expect_wt = mUseServerBakes ? 1.0 : 0.0; if (!is_approx_equal(wt,expect_wt)) -{ + { llwarns << "wt " << wt << " differs from expected " << expect_wt << llendl; } #endif return mUseServerBakes; - } +} void LLVOAvatar::setIsUsingServerBakes(BOOL newval) - { +{ mUseServerBakes = newval; LLVisualParam* appearance_version_param = getVisualParam(11000); llassert(appearance_version_param); appearance_version_param->setWeight(newval ? 1.0 : 0.0, false); - } +} // virtual void LLVOAvatar::removeMissingBakedTextures() diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index 4e93c93fd2..ff7a6e0eaa 100755 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -1075,9 +1075,9 @@ void LLVOAvatarSelf::wearableUpdated( LLWearableType::EType type, BOOL upload_re // Physics type has no associated baked textures, but change of params needs to be sent to // other avatars. if (type == LLWearableType::WT_PHYSICS) - { + { gAgent.sendAgentSetAppearance(); - } + } } //----------------------------------------------------------------------------- @@ -1799,11 +1799,11 @@ void LLVOAvatarSelf::setLocalTexture(ETextureIndex type, LLViewerTexture* src_te { requestLayerSetUpdate(type); if (isEditingAppearance()) - { - LLVisualParamHint::requestHintUpdates(); + { + LLVisualParamHint::requestHintUpdates(); + } } } - } else { tex->setLoadedCallback(onLocalTextureLoaded, desired_discard, TRUE, FALSE, new LLAvatarTexData(getID(), type), NULL); @@ -2959,7 +2959,7 @@ void LLVOAvatarSelf::onCustomizeStart(bool disable_camera_switch) gAgentAvatarp->mUseLocalAppearance = true; if (gSavedSettings.getBOOL("AppearanceCameraMovement") && !disable_camera_switch) -{ + { gAgentCamera.changeCameraToCustomizeAvatar(); } -- cgit v1.2.3 From 98529440c6d64067a9c807fec39eeb1ac0652f30 Mon Sep 17 00:00:00 2001 From: MaximB ProductEngine Date: Tue, 15 Oct 2013 18:38:05 +0300 Subject: MAINT-3305 ('Chat history' is enabled in contex menu for yourself.) --- indra/newview/llchathistory.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index ae0ac57e76..6c881b5717 100755 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -548,6 +548,7 @@ protected: menu->setItemEnabled("Remove Friend", false); menu->setItemEnabled("Offer Teleport",false); menu->setItemEnabled("Voice Call", false); + menu->setItemEnabled("Chat History", false); menu->setItemEnabled("Invite Group", false); menu->setItemEnabled("Zoom In", false); menu->setItemEnabled("Share", false); @@ -570,9 +571,9 @@ protected: menu->setItemVisible("Zoom In", should_show_zoom && gObjectList.findObject(mAvatarID)); menu->setItemEnabled("Block Unblock", LLAvatarActions::canBlock(mAvatarID)); menu->setItemEnabled("Mute Text", LLAvatarActions::canBlock(mAvatarID)); + menu->setItemEnabled("Chat History", LLLogChat::isTranscriptExist(mAvatarID)); } - menu->setItemEnabled("Chat History", LLLogChat::isTranscriptExist(mAvatarID)); menu->setItemEnabled("Map", (LLAvatarTracker::instance().isBuddyOnline(mAvatarID) && is_agent_mappable(mAvatarID)) || gAgent.isGodlike() ); menu->buildDrawLabels(); menu->updateParent(LLMenuGL::sMenuContainer); -- cgit v1.2.3 From 9b5ecebffcb0b6037f3668803b176071d9c9e699 Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Wed, 16 Oct 2013 11:53:36 +0300 Subject: MAINT-3231 FIXED Show first run dialog only for Desura viewer --- indra/newview/llstartup.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 506eba0683..d5f8a1e46e 100755 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -786,16 +786,19 @@ bool idle_startup() display_startup(); LLPanelLogin::giveFocus(); - /* MAINT-3231 Don't show first run dialog - if (gSavedSettings.getBOOL("FirstLoginThisInstall")) + // MAINT-3231 Show first run dialog only for Desura viewer + if (gSavedSettings.getString("sourceid") == "1208_desura") { - LL_INFOS("AppInit") << "FirstLoginThisInstall, calling show_first_run_dialog()" << LL_ENDL; - show_first_run_dialog(); + if (gSavedSettings.getBOOL("FirstLoginThisInstall")) + { + LL_INFOS("AppInit") << "FirstLoginThisInstall, calling show_first_run_dialog()" << LL_ENDL; + show_first_run_dialog(); + } + else + { + LL_DEBUGS("AppInit") << "FirstLoginThisInstall off" << LL_ENDL; + } } - else - { - LL_DEBUGS("AppInit") << "FirstLoginThisInstall off" << LL_ENDL; - }*/ LLStartUp::setStartupState( STATE_LOGIN_WAIT ); // Wait for user input } -- cgit v1.2.3 From 006490032af959caabc2b73bb0d8b9464e158d3a Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Mon, 21 Oct 2013 10:34:36 -0500 Subject: Fix for crash on exit with debug GL enabled. --- indra/newview/llviewertexture.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index 693eca8a06..3da6d33d72 100755 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -422,7 +422,9 @@ void LLViewerTextureManager::cleanup() LLViewerFetchedTexture::sDefaultImagep = NULL; LLViewerFetchedTexture::sSmokeImagep = NULL; LLViewerFetchedTexture::sMissingAssetImagep = NULL; + LLTexUnit::sWhiteTexture = 0; LLViewerFetchedTexture::sWhiteImagep = NULL; + LLViewerFetchedTexture::sFlatNormalImagep = NULL; LLViewerMediaTexture::cleanUpClass() ; -- cgit v1.2.3 From 95037bdefe8e17ec18fa6df972368d4ca079158f Mon Sep 17 00:00:00 2001 From: simon_linden Date: Mon, 21 Oct 2013 15:10:05 -0700 Subject: MAINT-3336 : double calls to deleteAndClear() in LLAvatarAppearance destructor --- indra/llappearance/llavatarappearance.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/indra/llappearance/llavatarappearance.cpp b/indra/llappearance/llavatarappearance.cpp index 3bb759d458..ce2b51cea2 100644 --- a/indra/llappearance/llavatarappearance.cpp +++ b/indra/llappearance/llavatarappearance.cpp @@ -291,10 +291,6 @@ LLAvatarAppearance::~LLAvatarAppearance() clearSkeleton(); deleteAndClearArray(mCollisionVolumes); - deleteAndClear(mTexSkinColor); - deleteAndClear(mTexHairColor); - deleteAndClear(mTexEyeColor); - std::for_each(mPolyMeshes.begin(), mPolyMeshes.end(), DeletePairedPointer()); mPolyMeshes.clear(); -- cgit v1.2.3 From 617b6918dee605901a0c8eabf5213dd03767a971 Mon Sep 17 00:00:00 2001 From: Maestro Linden Date: Mon, 21 Oct 2013 22:21:42 +0000 Subject: MAINT-3339 fix for invalid default permissions in Adjust Content Permissions floater. Reviewed by Simon. --- indra/newview/app_settings/settings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 13018b4f06..db9edd1e86 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -1203,7 +1203,7 @@ Type Boolean Value - 0 + 1 BulkChangeShareWithGroup -- cgit v1.2.3 From 62a0ba3db4685e5572b05d4921e2fe9974af2ba7 Mon Sep 17 00:00:00 2001 From: Maestro Linden Date: Mon, 21 Oct 2013 22:49:30 +0000 Subject: MAINT-3339 fix previously-set invalid permissions (from old viewer versions) in Adjust Content Permissions floater. Reviewed by Simon. --- indra/newview/llfloaterbulkpermission.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/indra/newview/llfloaterbulkpermission.cpp b/indra/newview/llfloaterbulkpermission.cpp index 76f62a7880..07bd262c00 100755 --- a/indra/newview/llfloaterbulkpermission.cpp +++ b/indra/newview/llfloaterbulkpermission.cpp @@ -82,6 +82,11 @@ BOOL LLFloaterBulkPermission::postBuild() mBulkChangeNextOwnerCopy = gSavedSettings.getBOOL("BulkChangeNextOwnerCopy"); mBulkChangeNextOwnerTransfer = gSavedSettings.getBOOL("BulkChangeNextOwnerTransfer"); + // fix invalid permissions case (in case initial settings were generated by a viewer affected by MAINT-3339) + if( !mBulkChangeNextOwnerTransfer && !mBulkChangeEveryoneCopy) + { + mBulkChangeNextOwnerTransfer = true; + } return TRUE; } -- cgit v1.2.3 From 28339afa157956d6ae4e68d0f8ce4eee6a254cfe Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Tue, 22 Oct 2013 12:47:16 +0300 Subject: MAINT-535 'trust model' is added for secondlife:// URLs in wiki style links. Chat history is marked as untrusted source now. --- indra/llui/llscrolllistctrl.cpp | 2 +- indra/llui/lltextbase.cpp | 4 +++- indra/llui/lltextbase.h | 5 ++++- indra/llui/llurlaction.cpp | 6 +++--- indra/llui/llurlaction.h | 4 ++-- indra/newview/llchathistory.cpp | 1 + indra/newview/llurldispatcher.cpp | 6 +++--- indra/newview/llurldispatcher.h | 2 +- indra/newview/llurldispatcherlistener.cpp | 2 +- 9 files changed, 19 insertions(+), 13 deletions(-) diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp index 6e03f604a2..594e1e150b 100755 --- a/indra/llui/llscrolllistctrl.cpp +++ b/indra/llui/llscrolllistctrl.cpp @@ -1855,7 +1855,7 @@ void LLScrollListCtrl::showNameDetails(std::string id, bool is_group) // open the resident's details or the group details std::string sltype = is_group ? "group" : "agent"; std::string slurl = "secondlife:///app/" + sltype + "/" + id + "/about"; - LLUrlAction::clickAction(slurl); + LLUrlAction::clickAction(slurl, true); } void LLScrollListCtrl::copyNameToClipboard(std::string id, bool is_group) diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 5ec4cf4fe5..4144a42fd6 100755 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -167,6 +167,7 @@ LLTextBase::Params::Params() max_text_length("max_length", 255), font_shadow("font_shadow"), wrap("wrap"), + trusted_content("trusted_content", true), use_ellipses("use_ellipses", false), parse_urls("parse_urls", false), parse_highlights("parse_highlights", false) @@ -211,6 +212,7 @@ LLTextBase::LLTextBase(const LLTextBase::Params &p) mLineSpacingPixels(p.line_spacing.pixels), mClip(p.clip), mClipPartial(p.clip_partial && !p.allow_scroll), + mTrustedContent(p.trusted_content), mTrackEnd( p.track_end ), mScrollIndex(-1), mSelectionStart( 0 ), @@ -3164,7 +3166,7 @@ BOOL LLNormalTextSegment::handleMouseUp(S32 x, S32 y, MASK mask) // Only process the click if it's actually in this segment, not to the right of the end-of-line. if(mEditor.getSegmentAtLocalPos(x, y, false) == this) { - LLUrlAction::clickAction(getStyle()->getLinkHREF()); + LLUrlAction::clickAction(getStyle()->getLinkHREF(), mEditor.isContentTrusted()); return TRUE; } } diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h index a74e97cac8..3603f55c3f 100755 --- a/indra/llui/lltextbase.h +++ b/indra/llui/lltextbase.h @@ -291,7 +291,8 @@ public: parse_urls, parse_highlights, clip, - clip_partial; + clip_partial, + trusted_content; Optional v_pad, h_pad; @@ -361,6 +362,7 @@ public: bool getWordWrap() { return mWordWrap; } bool getUseEllipses() { return mUseEllipses; } bool truncate(); // returns true of truncation occurred + bool isContentTrusted() {return mTrustedContent;} // TODO: move into LLTextSegment? void createUrlContextMenu(S32 x, S32 y, const std::string &url); // create a popup context menu for the given Url @@ -634,6 +636,7 @@ protected: bool mBGVisible; // render background? bool mClip; // clip text to widget rect bool mClipPartial; // false if we show lines that are partially inside bounding rect + bool mTrustedContent; // if false, does not allow to execute SURL links from this editor bool mPlainText; // didn't use Image or Icon segments bool mAutoIndent; S32 mMaxTextByteLength; // Maximum length mText is allowed to be in bytes diff --git a/indra/llui/llurlaction.cpp b/indra/llui/llurlaction.cpp index 23e574cb74..12537d9dd1 100755 --- a/indra/llui/llurlaction.cpp +++ b/indra/llui/llurlaction.cpp @@ -87,14 +87,14 @@ void LLUrlAction::executeSLURL(std::string url) { if (sExecuteSLURLCallback) { - sExecuteSLURLCallback(url); + sExecuteSLURLCallback(url ,true); } } -void LLUrlAction::clickAction(std::string url) +void LLUrlAction::clickAction(std::string url, bool trusted_content) { // Try to handle as SLURL first, then http Url - if ( (sExecuteSLURLCallback) && !sExecuteSLURLCallback(url) ) + if ( (sExecuteSLURLCallback) && !sExecuteSLURLCallback(url, trusted_content) ) { if (sOpenURLCallback) { diff --git a/indra/llui/llurlaction.h b/indra/llui/llurlaction.h index e731376b95..5f3626490c 100755 --- a/indra/llui/llurlaction.h +++ b/indra/llui/llurlaction.h @@ -66,7 +66,7 @@ public: static void showLocationOnMap(std::string url); /// perform the appropriate action for left-clicking on a Url - static void clickAction(std::string url); + static void clickAction(std::string url, bool trusted_content); /// copy the label for a Url to the clipboard static void copyLabelToClipboard(std::string url); @@ -86,7 +86,7 @@ public: /// specify the callbacks to enable this class's functionality typedef boost::function url_callback_t; - typedef boost::function execute_url_callback_t; + typedef boost::function execute_url_callback_t; static void setOpenURLCallback(url_callback_t cb); static void setOpenURLInternalCallback(url_callback_t cb); diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 6c881b5717..69aeec3975 100755 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -725,6 +725,7 @@ LLChatHistory::LLChatHistory(const LLChatHistory::Params& p) editor_params.follows.flags = FOLLOWS_ALL; editor_params.enabled = false; // read only editor_params.show_context_menu = "true"; + editor_params.trusted_content = false; mEditor = LLUICtrlFactory::create(editor_params, this); mEditor->setIsFriendCallback(LLAvatarActions::isFriend); } diff --git a/indra/newview/llurldispatcher.cpp b/indra/newview/llurldispatcher.cpp index 00b15a5f26..0c34db39b5 100755 --- a/indra/newview/llurldispatcher.cpp +++ b/indra/newview/llurldispatcher.cpp @@ -307,7 +307,7 @@ bool LLURLDispatcher::dispatchRightClick(const std::string& slurl) } // static -bool LLURLDispatcher::dispatchFromTextEditor(const std::string& slurl) +bool LLURLDispatcher::dispatchFromTextEditor(const std::string& slurl, bool trusted_content) { // *NOTE: Text editors are considered sources of trusted URLs // in order to make avatar profile links in chat history work. @@ -315,9 +315,9 @@ bool LLURLDispatcher::dispatchFromTextEditor(const std::string& slurl) // receiving resident will see it and must affirmatively // click on it. // *TODO: Make this trust model more refined. JC - const bool trusted_browser = true; + LLMediaCtrl* web = NULL; - return LLURLDispatcherImpl::dispatch(LLSLURL(slurl), "clicked", web, trusted_browser); + return LLURLDispatcherImpl::dispatch(LLSLURL(slurl), "clicked", web, trusted_content); } diff --git a/indra/newview/llurldispatcher.h b/indra/newview/llurldispatcher.h index 6309a97af5..9b05260af1 100755 --- a/indra/newview/llurldispatcher.h +++ b/indra/newview/llurldispatcher.h @@ -53,7 +53,7 @@ public: static bool dispatchRightClick(const std::string& slurl); - static bool dispatchFromTextEditor(const std::string& slurl); + static bool dispatchFromTextEditor(const std::string& slurl, bool trusted_content); }; #endif diff --git a/indra/newview/llurldispatcherlistener.cpp b/indra/newview/llurldispatcherlistener.cpp index c7b9afafef..7545f3a9b3 100755 --- a/indra/newview/llurldispatcherlistener.cpp +++ b/indra/newview/llurldispatcherlistener.cpp @@ -71,5 +71,5 @@ void LLURLDispatcherListener::dispatchRightClick(const LLSD& params) const void LLURLDispatcherListener::dispatchFromTextEditor(const LLSD& params) const { - LLURLDispatcher::dispatchFromTextEditor(params["url"]); + LLURLDispatcher::dispatchFromTextEditor(params["url"], false); } -- cgit v1.2.3 From 9a117c4b5d4576c8b6863fea156e14e92e13eede Mon Sep 17 00:00:00 2001 From: maksymsproductengine Date: Tue, 13 Aug 2013 19:22:35 +0300 Subject: MAINT-2861 FIXED llAdjustSoundVolume causes animated textures on same object to reset to first frame --- indra/newview/llvovolume.cpp | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 17efc5482b..5205bc6987 100755 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -334,15 +334,9 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys, if (!mTextureAnimp) { mTextureAnimp = new LLViewerTextureAnim(this); + mTexAnimMode = 0; } - else - { - if (!(mTextureAnimp->mMode & LLTextureAnim::SMOOTH)) - { - mTextureAnimp->reset(); - } - } - mTexAnimMode = 0; + mTextureAnimp->unpackTAMessage(mesgsys, block_num); } else -- cgit v1.2.3 From c775ae7cbd92099ee7a71c219a1b4b9ff7e7d82f Mon Sep 17 00:00:00 2001 From: "Graham Madarasz (Graham Linden)" Date: Thu, 26 Sep 2013 18:53:12 -0700 Subject: MAINT-3155 add cocoa equiv for former AppleEventManager shenanigans for SLURL handling --- indra/llwindow/llwindowmacosx-objc.h | 1 + indra/llwindow/llwindowmacosx-objc.mm | 2 +- indra/newview/llappdelegate-objc.mm | 13 +++++++++ indra/newview/llappviewermacosx.cpp | 53 ++++++++++++----------------------- 4 files changed, 33 insertions(+), 36 deletions(-) diff --git a/indra/llwindow/llwindowmacosx-objc.h b/indra/llwindow/llwindowmacosx-objc.h index 32b3bfb078..2cae6f3f72 100755 --- a/indra/llwindow/llwindowmacosx-objc.h +++ b/indra/llwindow/llwindowmacosx-objc.h @@ -49,6 +49,7 @@ void handleQuit(); bool runMainLoop(); void initMainLoop(); void cleanupViewer(); +void handleUrl(const char* url); /* Defined in llwindowmacosx-objc.mm: */ int createNSApp(int argc, const char **argv); diff --git a/indra/llwindow/llwindowmacosx-objc.mm b/indra/llwindow/llwindowmacosx-objc.mm index 0354c2b717..0768d0352e 100755 --- a/indra/llwindow/llwindowmacosx-objc.mm +++ b/indra/llwindow/llwindowmacosx-objc.mm @@ -57,7 +57,7 @@ void setupCocoa() [[NSUserDefaults standardUserDefaults] setObject:@"NO" forKey:@"NSTreatUnknownArgumentsAsOpen"]; [pool release]; - + inited = true; } } diff --git a/indra/newview/llappdelegate-objc.mm b/indra/newview/llappdelegate-objc.mm index 30476b3d22..91251ed7c0 100644 --- a/indra/newview/llappdelegate-objc.mm +++ b/indra/newview/llappdelegate-objc.mm @@ -54,6 +54,19 @@ } [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(languageUpdated) name:@"NSTextInputContextKeyboardSelectionDidChangeNotification" object:nil]; + + [[NSAppleEventManager sharedAppleEventManager] setEventHandler:self andSelector:@selector(handleGetURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL]; +} + +- (void) handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent { + NSString *url= nil; + url = [[[[NSAppleEventManager sharedAppleEventManager]// 1 + currentAppleEvent]// 2 + paramDescriptorForKeyword:keyDirectObject]// 3 + stringValue];// 4 + + const char* url_utf8 = [url UTF8String]; + handleUrl(url_utf8); } - (void) applicationDidBecomeActive:(NSNotification *)notification diff --git a/indra/newview/llappviewermacosx.cpp b/indra/newview/llappviewermacosx.cpp index 316c90d9d2..2723f0b90d 100755 --- a/indra/newview/llappviewermacosx.cpp +++ b/indra/newview/llappviewermacosx.cpp @@ -483,41 +483,24 @@ bool LLAppViewerMacOSX::getMasterSystemAudioMute() return (mute != 0); } -OSErr AEGURLHandler(const AppleEvent *messagein, AppleEvent *reply, long refIn) +void handleUrl(const char* url_utf8) { - OSErr result = noErr; - DescType actualType; - char buffer[1024]; // Flawfinder: ignore - Size size; - - result = AEGetParamPtr ( - messagein, - keyDirectObject, - typeCString, - &actualType, - (Ptr)buffer, - sizeof(buffer), - &size); - - if(result == noErr) - { - std::string url = buffer; + if (url_utf8) + { + std::string url = url_utf8; + // Safari 3.2 silently mangles secondlife:///app/ URLs into + // secondlife:/app/ (only one leading slash). + // Fix them up to meet the URL specification. JC + const std::string prefix = "secondlife:/app/"; + std::string test_prefix = url.substr(0, prefix.length()); + LLStringUtil::toLower(test_prefix); + if (test_prefix == prefix) + { + url.replace(0, prefix.length(), "secondlife:///app/"); + } - // Safari 3.2 silently mangles secondlife:///app/ URLs into - // secondlife:/app/ (only one leading slash). - // Fix them up to meet the URL specification. JC - const std::string prefix = "secondlife:/app/"; - std::string test_prefix = url.substr(0, prefix.length()); - LLStringUtil::toLower(test_prefix); - if (test_prefix == prefix) - { - url.replace(0, prefix.length(), "secondlife:///app/"); - } - - LLMediaCtrl* web = NULL; - const bool trusted_browser = false; - LLURLDispatcher::dispatch(url, "", web, trusted_browser); - } - - return(result); + LLMediaCtrl* web = NULL; + const bool trusted_browser = false; + LLURLDispatcher::dispatch(url, "", web, trusted_browser); + } } -- cgit v1.2.3 From 942369270415fd1cdffb213e0c18038ba6e127c7 Mon Sep 17 00:00:00 2001 From: MaximB ProductEngine Date: Mon, 30 Sep 2013 11:41:16 +0300 Subject: MAINT-3193 FIXED crash with LLControlCache::LLControlCache: Control named RenderAutoMuteLoggingnot found. --- indra/newview/llavatarrenderinfoaccountant.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llavatarrenderinfoaccountant.cpp b/indra/newview/llavatarrenderinfoaccountant.cpp index 5780268acb..9e3225a264 100644 --- a/indra/newview/llavatarrenderinfoaccountant.cpp +++ b/indra/newview/llavatarrenderinfoaccountant.cpp @@ -393,6 +393,6 @@ void LLAvatarRenderInfoAccountant::expireRenderInfoReportTimer(const LLUUID& reg // static bool LLAvatarRenderInfoAccountant::logRenderInfo() { - static LLCachedControl render_mute_logging_enabled(gSavedSettings, "RenderAutoMuteLogging"); + static LLCachedControl render_mute_logging_enabled(gSavedSettings, "RenderAutoMuteLogging", false); return render_mute_logging_enabled; } -- cgit v1.2.3 From f0a80bb49b43e8e6e2a53194f558c3385ba3214e Mon Sep 17 00:00:00 2001 From: PavelK ProductEngine Date: Fri, 6 Sep 2013 17:48:48 +0300 Subject: MAINT-3030 [CHUIBUG]Conversations pane has alignment issues when collapsed --- indra/newview/llfloaterimcontainer.cpp | 4 ++-- indra/newview/skins/default/xui/en/floater_im_container.xml | 8 ++++---- .../newview/skins/default/xui/en/panel_conversation_list_item.xml | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp index f26cb477ee..aa3bec878a 100755 --- a/indra/newview/llfloaterimcontainer.cpp +++ b/indra/newview/llfloaterimcontainer.cpp @@ -790,8 +790,8 @@ void LLFloaterIMContainer::collapseConversationsPane(bool collapse, bool save_is mConversationsPane->setTargetDim(gSavedPerAccountSettings.getS32("ConversationsListPaneWidth")); } - S32 delta_width = - gSavedPerAccountSettings.getS32("ConversationsListPaneWidth") - mConversationsPane->getMinDim(); + S32 delta_width = gSavedPerAccountSettings.getS32("ConversationsListPaneWidth") + - mConversationsPane->getMinDim() - mConversationsStack->getPanelSpacing() + 1; reshapeFloaterAndSetResizeLimits(collapse, delta_width); diff --git a/indra/newview/skins/default/xui/en/floater_im_container.xml b/indra/newview/skins/default/xui/en/floater_im_container.xml index 1215efb7f9..b639d534c3 100755 --- a/indra/newview/skins/default/xui/en/floater_im_container.xml +++ b/indra/newview/skins/default/xui/en/floater_im_container.xml @@ -41,7 +41,7 @@ auto_resize="false" user_resize="true" name="conversations_layout_panel" - min_dim="38" + min_dim="43" expanded_min_dim="136"> + width="36"> -- cgit v1.2.3 From 19f20baffba3fcbc1558e882fee64a4ac6c28d4b Mon Sep 17 00:00:00 2001 From: maksymsproductengine Date: Fri, 23 Aug 2013 20:31:02 +0300 Subject: MAINT-2575 FIXED Resident can accept unlimited number of friendship requests if they were sent before his first accept --- indra/newview/llchathistory.cpp | 51 ++++++++++++++++++++++++------------ indra/newview/lltoastnotifypanel.cpp | 22 ++++++++++++++++ indra/newview/lltoastnotifypanel.h | 2 ++ indra/newview/lltoastpanel.cpp | 6 +++++ indra/newview/lltoastpanel.h | 1 + indra/newview/llviewermessage.cpp | 42 ++++++++++++++++++++--------- 6 files changed, 95 insertions(+), 29 deletions(-) diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index afa6d4eaeb..64ae01c82a 100755 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -1075,25 +1075,42 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL // notify processing if (chat.mNotifId.notNull()) { - LLNotificationPtr notification = LLNotificationsUtil::find(chat.mNotifId); - if (notification != NULL) + bool create_toast = true; + for (LLToastNotifyPanel::instance_iter ti(LLToastNotifyPanel::beginInstances()) + , tend(LLToastNotifyPanel::endInstances()); ti != tend; ++ti) { - LLIMToastNotifyPanel* notify_box = new LLIMToastNotifyPanel( + LLToastNotifyPanel& panel = *ti; + LLIMToastNotifyPanel * imtoastp = dynamic_cast(&panel); + const std::string& notification_name = panel.getNotificationName(); + if (notification_name == "OfferFriendship" && panel.isControlPanelEnabled() && imtoastp) + { + create_toast = false; + break; + } + } + + if (create_toast) + { + LLNotificationPtr notification = LLNotificationsUtil::find(chat.mNotifId); + if (notification != NULL) + { + LLIMToastNotifyPanel* notify_box = new LLIMToastNotifyPanel( notification, chat.mSessionID, LLRect::null, !use_plain_text_chat_history, mEditor); - //Prepare the rect for the view - LLRect target_rect = mEditor->getDocumentView()->getRect(); - // squeeze down the widget by subtracting padding off left and right - target_rect.mLeft += mLeftWidgetPad + mEditor->getHPad(); - target_rect.mRight -= mRightWidgetPad; - notify_box->reshape(target_rect.getWidth(), notify_box->getRect().getHeight()); - notify_box->setOrigin(target_rect.mLeft, notify_box->getRect().mBottom); - - LLInlineViewSegment::Params params; - params.view = notify_box; - params.left_pad = mLeftWidgetPad; - params.right_pad = mRightWidgetPad; - mEditor->appendWidget(params, "\n", false); + //Prepare the rect for the view + LLRect target_rect = mEditor->getDocumentView()->getRect(); + // squeeze down the widget by subtracting padding off left and right + target_rect.mLeft += mLeftWidgetPad + mEditor->getHPad(); + target_rect.mRight -= mRightWidgetPad; + notify_box->reshape(target_rect.getWidth(), notify_box->getRect().getHeight()); + notify_box->setOrigin(target_rect.mLeft, notify_box->getRect().mBottom); + + LLInlineViewSegment::Params params; + params.view = notify_box; + params.left_pad = mLeftWidgetPad; + params.right_pad = mRightWidgetPad; + mEditor->appendWidget(params, "\n", false); + } } } @@ -1123,7 +1140,7 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL if (square_brackets) { message += "]"; - } + } mEditor->appendText(message, prependNewLineState, body_message_params); prependNewLineState = false; diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp index 94d07b37ef..3a41bf28b4 100755 --- a/indra/newview/lltoastnotifypanel.cpp +++ b/indra/newview/lltoastnotifypanel.cpp @@ -407,6 +407,28 @@ void LLToastNotifyPanel::init( LLRect rect, bool show_images ) } } +bool LLToastNotifyPanel::isControlPanelEnabled() const +{ + bool cp_enabled = mControlPanel->getEnabled(); + bool some_buttons_enabled = false; + if (cp_enabled) + { + LLView::child_list_const_iter_t child_it = mControlPanel->beginChild(); + LLView::child_list_const_iter_t child_it_end = mControlPanel->endChild(); + for(; child_it != child_it_end; ++child_it) + { + LLButton * buttonp = dynamic_cast(*child_it); + if (buttonp && buttonp->getEnabled()) + { + some_buttons_enabled = true; + break; + } + } + } + + return cp_enabled && some_buttons_enabled; +} + ////////////////////////////////////////////////////////////////////////// LLIMToastNotifyPanel::LLIMToastNotifyPanel(LLNotificationPtr& pNotification, const LLUUID& session_id, const LLRect& rect /* = LLRect::null */, diff --git a/indra/newview/lltoastnotifypanel.h b/indra/newview/lltoastnotifypanel.h index d02171b512..fe7f1cf8f3 100755 --- a/indra/newview/lltoastnotifypanel.h +++ b/indra/newview/lltoastnotifypanel.h @@ -69,6 +69,8 @@ public: virtual void updateNotification() {} + bool isControlPanelEnabled() const; + protected: LLButton* createButton(const LLSD& form_element, BOOL is_option); diff --git a/indra/newview/lltoastpanel.cpp b/indra/newview/lltoastpanel.cpp index a30f841980..e1b764a943 100755 --- a/indra/newview/lltoastpanel.cpp +++ b/indra/newview/lltoastpanel.cpp @@ -52,6 +52,12 @@ std::string LLToastPanel::getTitle() return mNotification->getMessage(); } +//virtual +const std::string& LLToastPanel::getNotificationName() +{ + return mNotification->getName(); +} + //virtual const LLUUID& LLToastPanel::getID() { diff --git a/indra/newview/lltoastpanel.h b/indra/newview/lltoastpanel.h index e4ab95007e..51630381f2 100755 --- a/indra/newview/lltoastpanel.h +++ b/indra/newview/lltoastpanel.h @@ -45,6 +45,7 @@ public: virtual ~LLToastPanel() = 0; virtual std::string getTitle(); + virtual const std::string& getNotificationName(); virtual const LLUUID& getID(); static const S32 MIN_PANEL_HEIGHT; diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 151a7c6213..c6f3ef6ae3 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -45,6 +45,7 @@ #include "llsd.h" #include "llsdserialize.h" #include "llteleportflags.h" +#include "lltoastnotifypanel.h" #include "lltransactionflags.h" #include "llvfile.h" #include "llvfs.h" @@ -3214,7 +3215,20 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) payload["online"] = (offline == IM_ONLINE); payload["sender"] = msg->getSender().getIPandPort(); - if (is_muted) + bool add_notification = true; + for (LLToastNotifyPanel::instance_iter ti(LLToastNotifyPanel::beginInstances()) + , tend(LLToastNotifyPanel::endInstances()); ti != tend; ++ti) + { + LLToastNotifyPanel& panel = *ti; + const std::string& notification_name = panel.getNotificationName(); + if (notification_name == "OfferFriendship" && panel.isControlPanelEnabled()) + { + add_notification = false; + break; + } + } + + if (is_muted && add_notification) { LLNotifications::instance().forceResponse(LLNotification::Params("OfferFriendship").payload(payload), 1); } @@ -3225,18 +3239,22 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) send_do_not_disturb_message(msg, from_id); } args["NAME_SLURL"] = LLSLURL("agent", from_id, "about").getSLURLString(); - if(message.empty()) - { - //support for frienship offers from clients before July 2008 - LLNotificationsUtil::add("OfferFriendshipNoMessage", args, payload); - } - else + + if (add_notification) { - args["[MESSAGE]"] = message; - LLNotification::Params params("OfferFriendship"); - params.substitutions = args; - params.payload = payload; - LLPostponedNotification::add( params, from_id, false); + if(message.empty()) + { + //support for frienship offers from clients before July 2008 + LLNotificationsUtil::add("OfferFriendshipNoMessage", args, payload); + } + else + { + args["[MESSAGE]"] = message; + LLNotification::Params params("OfferFriendship"); + params.substitutions = args; + params.payload = payload; + LLPostponedNotification::add( params, from_id, false); + } } } } -- cgit v1.2.3 From 6c45b3677ee06cd58056447a4b7b45fa78df8b74 Mon Sep 17 00:00:00 2001 From: Cho Date: Sat, 24 Aug 2013 02:15:08 +0100 Subject: added Google Analytics query parameters to URLs for FBC photos and checkins for ACME-854 --- indra/newview/llfloatersocial.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/indra/newview/llfloatersocial.cpp b/indra/newview/llfloatersocial.cpp index 4c17d9e40d..2a74c8e3ea 100644 --- a/indra/newview/llfloatersocial.cpp +++ b/indra/newview/llfloatersocial.cpp @@ -55,6 +55,8 @@ static LLRegisterPanelClassWrapper t_panel_account("llsoci const S32 MAX_POSTCARD_DATASIZE = 1024 * 1024; // one megabyte const std::string DEFAULT_CHECKIN_LOCATION_URL = "http://maps.secondlife.com/"; const std::string DEFAULT_CHECKIN_ICON_URL = "http://map.secondlife.com.s3.amazonaws.com/map_placeholder.png"; +const std::string DEFAULT_CHECKIN_QUERY_PARAMETERS = "?sourceid=slshare_checkin&utm_source=facebook&utm_medium=checkin&utm_campaign=slshare"; +const std::string DEFAULT_PHOTO_QUERY_PARAMETERS = "?sourceid=slshare_photo&utm_source=facebook&utm_medium=photo&utm_campaign=slshare"; std::string get_map_url() { @@ -345,12 +347,19 @@ void LLSocialPhotoPanel::sendPhoto() bool add_location = mLocationCheckbox->getValue().asBoolean(); if (add_location) { + // Get the SLURL for the location LLSLURL slurl; LLAgentUI::buildSLURL(slurl); + std::string slurl_string = slurl.getSLURLString(); + + // Add query parameters so Google Analytics can track incoming clicks! + slurl_string += DEFAULT_PHOTO_QUERY_PARAMETERS; + + // Add it to the caption (pretty crude, but we don't have a better option with photos) if (caption.empty()) - caption = slurl.getSLURLString(); + caption = slurl_string; else - caption = caption + " " + slurl.getSLURLString(); + caption = caption + " " + slurl_string; } // Get the image @@ -592,6 +601,9 @@ void LLSocialCheckinPanel::sendCheckin() { slurl_string = DEFAULT_CHECKIN_LOCATION_URL; } + + // Add query parameters so Google Analytics can track incoming clicks! + slurl_string += DEFAULT_CHECKIN_QUERY_PARAMETERS; // Get the region name std::string region_name = gAgent.getRegion()->getName(); -- cgit v1.2.3 From ecc4f2357df4cc139aa4e6a6a22f1ac5460f6871 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Mon, 26 Aug 2013 16:42:31 -0400 Subject: remove unused --logevents command line option because new validation causes unmapped options to be errors --- indra/newview/app_settings/cmd_line.xml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/indra/newview/app_settings/cmd_line.xml b/indra/newview/app_settings/cmd_line.xml index 789a07fbe2..a9f6079630 100755 --- a/indra/newview/app_settings/cmd_line.xml +++ b/indra/newview/app_settings/cmd_line.xml @@ -177,14 +177,6 @@ UserLoginInfo - logevents - - desc - Log ui events for later playback - map-to - LogEvents - - logmetrics desc -- cgit v1.2.3 From a4e74449857c57bf67104087015560baa69789ab Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Mon, 26 Aug 2013 16:43:03 -0400 Subject: correct merge error in llupdatechecker.cpp --- .../viewer_components/updater/llupdatechecker.cpp | 39 +++------------------- 1 file changed, 5 insertions(+), 34 deletions(-) diff --git a/indra/viewer_components/updater/llupdatechecker.cpp b/indra/viewer_components/updater/llupdatechecker.cpp index 3e170e44f4..abdace979a 100755 --- a/indra/viewer_components/updater/llupdatechecker.cpp +++ b/indra/viewer_components/updater/llupdatechecker.cpp @@ -149,40 +149,11 @@ void LLUpdateChecker::Implementation::completed(U32 status, server_error += content["error_text"].asString(); } - if (status == 404) - { - if (mProtocol == sProtocolVersion) - { - mProtocol = sLegacyProtocolVersion; - std::string retryUrl = buildUrl(mUrlBase, mChannel, mVersion, mPlatform, mPlatformVersion, mUniqueId, mWillingToTest); - - LL_WARNS("UpdaterService") - << "update response using " << sProtocolVersion - << " was HTTP 404 (" << server_error - << "); retry with legacy protocol " << mProtocol - << "\n at " << retryUrl - << LL_ENDL; - - mHttpClient.get(retryUrl, this); - } - else - { - LL_WARNS("UpdaterService") - << "update response using " << sLegacyProtocolVersion - << " was 404 (" << server_error - << "); request failed" - << LL_ENDL; - mClient.error(reason); - } - } - else - { - LL_WARNS("UpdaterService") << "response error " << status - << " " << reason - << " (" << server_error << ")" - << LL_ENDL; - mClient.error(reason); - } + LL_WARNS("UpdaterService") << "response error " << status + << " " << reason + << " (" << server_error << ")" + << LL_ENDL; + mClient.error(reason); } else { -- cgit v1.2.3 From 7614589adcf796e889c7d1d4ccda56a4b9353d31 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Tue, 27 Aug 2013 16:31:36 -0400 Subject: MAINT-3074: Remove warning log that kills FPS --- indra/llui/llview.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index 9a42fc637b..262d9335c0 100755 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -995,7 +995,6 @@ BOOL LLView::handleUnicodeChar(llwchar uni_char, BOOL called_from_parent) BOOL LLView::handleUnicodeCharHere(llwchar uni_char ) { - llwarns << "LLView::handleUnicodeCharHere - about to return false - key is not being handled - a class somewhere should implement this method" << llendl; return FALSE; } -- cgit v1.2.3 From 306b2d810effdc677194f4db26c906a59e7386ff Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Tue, 27 Aug 2013 16:27:19 -0400 Subject: Fix coding style fails --- indra/llui/llview.cpp | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index 262d9335c0..20015dca1a 100755 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -760,15 +760,15 @@ LLView* LLView::childrenHandleMouseEvent(const METHOD& method, S32 x, S32 y, XDA if ((viewp->*method)( local_x, local_y, extra ) || (allow_mouse_block && viewp->blockMouseEvent( local_x, local_y ))) { - lldebugs << "LLView::childrenHandleMouseEvent calling updatemouseeventinfo - local_x|global x "<< local_x << " " << x << "local/global y " << local_y << " " << y << llendl; - lldebugs << "LLView::childrenHandleMouseEvent getPathname for viewp result: " << viewp->getPathname() << "for this view: " << getPathname() << llendl; + lldebugs << "LLView::childrenHandleMouseEvent calling updatemouseeventinfo - local_x|global x "<< local_x << " " << x << "local/global y " << local_y << " " << y << llendl; + lldebugs << "LLView::childrenHandleMouseEvent getPathname for viewp result: " << viewp->getPathname() << "for this view: " << getPathname() << llendl; - LLViewerEventRecorder::instance().updateMouseEventInfo(x,y,-55,-55,getPathname()); + LLViewerEventRecorder::instance().updateMouseEventInfo(x,y,-55,-55,getPathname()); - // This is NOT event recording related - viewp->logMouseEvent(); + // This is NOT event recording related + viewp->logMouseEvent(); - return viewp; + return viewp; } } return NULL; @@ -936,7 +936,8 @@ BOOL LLView::handleKey(KEY key, MASK mask, BOOL called_from_parent) // For event logging we don't care which widget handles it // So we capture the key at the end of this function once we know if it was handled handled = handleKeyHere( key, mask ); - if (handled) { + if (handled) + { llwarns << "Key handled by " << getName() << llendl; } } @@ -985,7 +986,8 @@ BOOL LLView::handleUnicodeChar(llwchar uni_char, BOOL called_from_parent) handled = mParentView->handleUnicodeChar(uni_char, FALSE); } - if (handled) { + if (handled) + { LLViewerEventRecorder::instance().logKeyUnicodeEvent(uni_char); } @@ -1018,21 +1020,16 @@ BOOL LLView::hasMouseCapture() BOOL LLView::handleMouseUp(S32 x, S32 y, MASK mask) { - - LLView* r = childrenHandleMouseUp( x, y, mask ); return (r!=NULL); - } BOOL LLView::handleMouseDown(S32 x, S32 y, MASK mask) { - LLView* r= childrenHandleMouseDown(x, y, mask ); return (r!=NULL); - } BOOL LLView::handleDoubleClick(S32 x, S32 y, MASK mask) -- cgit v1.2.3 From ef3268feeeaa187c63ef0190b23d6843d83a25f5 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Wed, 28 Aug 2013 15:12:26 -0400 Subject: update gpu table test results --- indra/newview/tests/gpus_results.txt | 4836 ++++++++++++++++++++++------------ 1 file changed, 3110 insertions(+), 1726 deletions(-) diff --git a/indra/newview/tests/gpus_results.txt b/indra/newview/tests/gpus_results.txt index 68e2e688cb..c864ba109f 100755 --- a/indra/newview/tests/gpus_results.txt +++ b/indra/newview/tests/gpus_results.txt @@ -1,1726 +1,3110 @@ -GPU String Supported? Class Recognizer ------------------------------------------------------------------------------------------------------- ----------- ----- ------------------------------------ -ATI NO MATCH -ATI 3D-Analyze unsupported 0 ATI 3D-Analyze -ATI ASUS A9xxx supported 1 ATI ASUS A9xxx -ATI ASUS AH24xx supported 1 ATI ASUS AH24xx -ATI ASUS AH26xx supported 3 ATI ASUS AH26xx -ATI ASUS AH34xx supported 1 ATI ASUS AH34xx -ATI ASUS AH36xx supported 3 ATI ASUS AH36xx -ATI ASUS AH46xx supported 3 ATI ASUS AH46xx -ATI ASUS AX3xx supported 1 ATI ASUS AX3xx -ATI ASUS AX5xx supported 1 ATI ASUS AX5xx -ATI ASUS AX8xx supported 2 ATI ASUS AX8xx -ATI ASUS EAH38xx supported 3 ATI ASUS EAH38xx -ATI ASUS EAH43xx supported 1 ATI ASUS EAH43xx -ATI ASUS EAH45xx supported 1 ATI ASUS EAH45xx -ATI ASUS EAH48xx supported 3 ATI ASUS EAH48xx -ATI ASUS EAH57xx supported 3 ATI ASUS EAH57xx -ATI ASUS EAH58xx supported 3 ATI ASUS EAH58xx -ATI ASUS X1xxx supported 3 ATI ASUS Radeon X1xxx -ATI All-in-Wonder 9xxx supported 1 ATI All-in-Wonder 9xxx -ATI All-in-Wonder HD supported 1 ATI All-in-Wonder HD -ATI All-in-Wonder PCI-E supported 1 ATI All-in-Wonder PCI-E -ATI All-in-Wonder X1800 supported 3 ATI All-in-Wonder X1800 -ATI All-in-Wonder X1900 supported 3 ATI All-in-Wonder X1900 -ATI All-in-Wonder X600 supported 1 ATI All-in-Wonder X600 -ATI All-in-Wonder X800 supported 2 ATI All-in-Wonder X800 -ATI Diamond X1xxx supported 1 ATI Radeon X1xxx -ATI Display Adapter supported 0 ATI Display Adapter -ATI FireGL supported 0 ATI FireGL -ATI FireGL 5200 supported 0 ATI FireGL -ATI FireGL 5xxx supported 0 ATI FireGL -ATI FireMV supported 0 ATI FireMV -ATI Generic unsupported 0 ATI Generic -ATI Hercules 9800 supported 1 ATI Hercules 9800 -ATI IGP 340M unsupported 0 ATI IGP 340M -ATI M52 supported 1 ATI M52 -ATI M54 supported 1 ATI M54 -ATI M56 supported 1 ATI M56 -ATI M71 supported 1 ATI M71 -ATI M72 supported 1 ATI M72 -ATI M76 supported 3 ATI M76 -ATI Mobility Radeon supported 0 ATI Radeon -ATI Mobility Radeon 7xxx supported 0 ATI Mobility Radeon 7xxx -ATI Mobility Radeon 9600 supported 0 ATI Mobility Radeon 9600 -ATI Mobility Radeon 9700 supported 1 ATI Mobility Radeon 9700 -ATI Mobility Radeon 9800 supported 1 ATI Mobility Radeon 9800 -ATI Mobility Radeon HD 2300 supported 1 ATI Mobility Radeon HD 2300 -ATI Mobility Radeon HD 2400 supported 1 ATI Mobility Radeon HD 2400 -ATI Mobility Radeon HD 2600 supported 3 ATI Mobility Radeon HD 2600 -ATI Mobility Radeon HD 2700 supported 3 ATI Mobility Radeon HD 2700 -ATI Mobility Radeon HD 3400 supported 2 ATI Mobility Radeon HD 3400 -ATI Mobility Radeon HD 3600 supported 3 ATI Mobility Radeon HD 3600 -ATI Mobility Radeon HD 3800 supported 3 ATI Mobility Radeon HD 3800 -ATI Mobility Radeon HD 4200 supported 2 ATI Mobility Radeon HD 4200 -ATI Mobility Radeon HD 4300 supported 2 ATI Mobility Radeon HD 4300 -ATI Mobility Radeon HD 4500 supported 3 ATI Mobility Radeon HD 4500 -ATI Mobility Radeon HD 4600 supported 3 ATI Mobility Radeon HD 4600 -ATI Mobility Radeon HD 4800 supported 3 ATI Mobility Radeon HD 4800 -ATI Mobility Radeon HD 5400 supported 3 ATI Mobility Radeon HD 5400 -ATI Mobility Radeon HD 5600 supported 3 ATI Mobility Radeon HD 5600 -ATI Mobility Radeon X1xxx supported 1 ATI Radeon X1xxx -ATI Mobility Radeon X2xxx supported 1 ATI Radeon X2xxx -ATI Mobility Radeon X3xx supported 0 ATI Radeon X300 -ATI Mobility Radeon X6xx supported 1 ATI Radeon X600 -ATI Mobility Radeon X7xx supported 1 ATI Radeon X700 -ATI Mobility Radeon Xxxx supported 0 ATI Radeon -ATI RV380 supported 0 ATI RV380 -ATI RV530 supported 1 ATI RV530 -ATI Radeon 2100 supported 0 ATI Radeon 2100 -ATI Radeon 3000 supported 0 ATI Radeon 3000 -ATI Radeon 3100 supported 1 ATI Radeon 3100 -ATI Radeon 7000 supported 0 ATI Radeon 7xxx -ATI Radeon 7xxx supported 0 ATI Radeon 7xxx -ATI Radeon 8xxx supported 0 ATI Radeon 8xxx -ATI Radeon 9000 supported 0 ATI Radeon 9000 -ATI Radeon 9100 supported 0 ATI Radeon 9100 -ATI Radeon 9200 supported 0 ATI Radeon 9200 -ATI Radeon 9500 supported 0 ATI Radeon 9500 -ATI Radeon 9600 supported 0 ATI Radeon 9600 -ATI Radeon 9700 supported 1 ATI Radeon 9700 -ATI Radeon 9800 supported 1 ATI Radeon 9800 -ATI Radeon HD 2300 supported 0 ATI Radeon HD 2300 -ATI Radeon HD 2400 supported 1 ATI Radeon HD 2400 -ATI Radeon HD 2600 supported 2 ATI Radeon HD 2600 -ATI Radeon HD 2900 supported 3 ATI Radeon HD 2900 -ATI Radeon HD 3000 supported 0 ATI Radeon HD 3000 -ATI Radeon HD 3100 supported 1 ATI Radeon HD 3100 -ATI Radeon HD 3200 supported 1 ATI Radeon HD 3200 -ATI Radeon HD 3300 supported 1 ATI Radeon HD 3300 -ATI Radeon HD 3400 supported 1 ATI Radeon HD 3400 -ATI Radeon HD 3600 supported 3 ATI Radeon HD 3600 -ATI Radeon HD 3800 supported 3 ATI Radeon HD 3800 -ATI Radeon HD 4200 supported 1 ATI Radeon HD 4200 -ATI Radeon HD 4300 supported 1 ATI Radeon HD 4300 -ATI Radeon HD 4500 supported 3 ATI Radeon HD 4500 -ATI Radeon HD 4600 supported 3 ATI Radeon HD 4600 -ATI Radeon HD 4700 supported 3 ATI Radeon HD 4700 -ATI Radeon HD 4800 supported 3 ATI Radeon HD 4800 -ATI Radeon HD 5400 supported 3 ATI Radeon HD 5400 -ATI Radeon HD 5500 supported 3 ATI Radeon HD 5500 -ATI Radeon HD 5600 supported 3 ATI Radeon HD 5600 -ATI Radeon HD 5700 supported 3 ATI Radeon HD 5700 -ATI Radeon HD 5800 supported 3 ATI Radeon HD 5800 -ATI Radeon HD 5900 supported 3 ATI Radeon HD 5900 -ATI Radeon HD 6200 supported 3 ATI Radeon HD 6200 -ATI Radeon HD 6300 supported 3 ATI Radeon HD 6300 -ATI Radeon HD 6500 supported 3 ATI Radeon HD 6500 -ATI Radeon HD 6800 supported 3 ATI Radeon HD 6800 -ATI Radeon HD 6900 supported 3 ATI Radeon HD 6900 -ATI Radeon OpenGL unsupported 0 ATI Radeon OpenGL -ATI Radeon RV250 supported 0 ATI Radeon RV250 -ATI Radeon RV600 supported 1 ATI Radeon RV600 -ATI Radeon RX9550 supported 1 ATI Radeon RX9550 -ATI Radeon VE unsupported 0 ATI Radeon VE -ATI Radeon X1000 supported 1 ATI Radeon X1xxx -ATI Radeon X1200 supported 1 ATI Radeon X1xxx -ATI Radeon X1300 supported 1 ATI Radeon X13xx -ATI Radeon X13xx supported 1 ATI Radeon X13xx -ATI Radeon X1400 supported 1 ATI Radeon X1xxx -ATI Radeon X1500 supported 2 ATI Radeon X15xx -ATI Radeon X1600 supported 2 ATI Radeon X16xx -ATI Radeon X16xx supported 2 ATI Radeon X16xx -ATI Radeon X1700 supported 2 ATI Radeon X17xx -ATI Radeon X1800 supported 3 ATI Radeon X18xx -ATI Radeon X1900 supported 3 ATI Radeon X19xx -ATI Radeon X19xx supported 3 ATI Radeon X19xx -ATI Radeon X1xxx supported 1 ATI Radeon X1xxx -ATI Radeon X300 supported 0 ATI Radeon X300 -ATI Radeon X500 supported 0 ATI Radeon X500 -ATI Radeon X600 supported 1 ATI Radeon X600 -ATI Radeon X700 supported 1 ATI Radeon X700 -ATI Radeon X7xx supported 1 ATI Radeon X700 -ATI Radeon X800 supported 2 ATI Radeon X800 -ATI Radeon Xpress supported 0 ATI Radeon Xpress -ATI Rage 128 supported 0 ATI Rage 128 -ATI Technologies Inc. supported 0 ATI Technologies -ATI Technologies Inc. x86 supported 0 ATI Technologies -ATI Technologies Inc. x86/SSE2 supported 0 ATI Technologies -ATI Technologies Inc. (Vista) ATI Mobility Radeon HD 5730 supported 3 ATI Mobility Radeon HD 5700 -ATI Technologies Inc. 128MB ATI Radeon X1300 x86/SSE2 supported 1 ATI Radeon X13xx -ATI Technologies Inc. 256MB ATI Radeon X1300PRO x86/SSE2 supported 1 ATI Radeon X13xx -ATI Technologies Inc. AMD 760G supported 1 ATI 760G/Radeon 3000 -ATI Technologies Inc. AMD 760G (Microsoft WDDM 1.1) supported 1 ATI 760G/Radeon 3000 -ATI Technologies Inc. AMD 780L supported 1 ATI 780L/Radeon 3000 -ATI Technologies Inc. AMD FirePro 2270 supported 1 ATI FirePro 2000 -ATI Technologies Inc. AMD M860G with ATI Mobility Radeon 4100 supported 1 ATI Mobility Radeon 4100 -ATI Technologies Inc. AMD M880G with ATI Mobility Radeon HD 4200 supported 2 ATI Mobility Radeon HD 4200 -ATI Technologies Inc. AMD M880G with ATI Mobility Radeon HD 4250 supported 2 ATI Mobility Radeon HD 4200 -ATI Technologies Inc. AMD RADEON HD 6350 supported 3 ATI Radeon HD 6300 -ATI Technologies Inc. AMD RADEON HD 6450 supported 3 ATI Radeon HD 6400 -ATI Technologies Inc. AMD RADEON HD 6670 supported 3 ATI Radeon HD 6600 -ATI Technologies Inc. AMD Radeon 6600M and 6700M Series supported 0 ATI Technologies -ATI Technologies Inc. AMD Radeon HD 6200 series Graphics supported 3 ATI Radeon HD 6200 -ATI Technologies Inc. AMD Radeon HD 6250 Graphics supported 3 ATI Radeon HD 6200 -ATI Technologies Inc. AMD Radeon HD 6290 Graphics supported 3 ATI Radeon HD 6200 -ATI Technologies Inc. AMD Radeon HD 6300 series Graphics supported 3 ATI Radeon HD 6300 -ATI Technologies Inc. AMD Radeon HD 6300M Series supported 3 ATI Radeon HD 6300 -ATI Technologies Inc. AMD Radeon HD 6310 Graphics supported 3 ATI Radeon HD 6300 -ATI Technologies Inc. AMD Radeon HD 6310M supported 3 ATI Radeon HD 6300 -ATI Technologies Inc. AMD Radeon HD 6330M supported 3 ATI Radeon HD 6300 -ATI Technologies Inc. AMD Radeon HD 6350 supported 3 ATI Radeon HD 6300 -ATI Technologies Inc. AMD Radeon HD 6370M supported 3 ATI Radeon HD 6300 -ATI Technologies Inc. AMD Radeon HD 6400M Series supported 3 ATI Radeon HD 64xx -ATI Technologies Inc. AMD Radeon HD 6450 supported 3 ATI Radeon HD 6400 -ATI Technologies Inc. AMD Radeon HD 6470M supported 3 ATI Radeon HD 64xx -ATI Technologies Inc. AMD Radeon HD 6490M supported 3 ATI Radeon HD 64xx -ATI Technologies Inc. AMD Radeon HD 6500 Series supported 3 ATI Radeon HD 6500 -ATI Technologies Inc. AMD Radeon HD 6500M Series supported 3 ATI Radeon HD 65xx -ATI Technologies Inc. AMD Radeon HD 6500M/5600/5700 Series supported 3 ATI Radeon HD 65xx -ATI Technologies Inc. AMD Radeon HD 6530M supported 3 ATI Radeon HD 65xx -ATI Technologies Inc. AMD Radeon HD 6550M supported 3 ATI Radeon HD 65xx -ATI Technologies Inc. AMD Radeon HD 6570 supported 3 ATI Radeon HD 6500 -ATI Technologies Inc. AMD Radeon HD 6570M supported 3 ATI Radeon HD 65xx -ATI Technologies Inc. AMD Radeon HD 6570M/5700 Series supported 3 ATI Radeon HD 65xx -ATI Technologies Inc. AMD Radeon HD 6600 Series supported 3 ATI Radeon HD 6600 -ATI Technologies Inc. AMD Radeon HD 6600M Series supported 3 ATI Radeon HD 66xx -ATI Technologies Inc. AMD Radeon HD 6630M supported 3 ATI Radeon HD 66xx -ATI Technologies Inc. AMD Radeon HD 6650M supported 3 ATI Radeon HD 66xx -ATI Technologies Inc. AMD Radeon HD 6670 supported 3 ATI Radeon HD 6600 -ATI Technologies Inc. AMD Radeon HD 6700 Series supported 3 ATI Radeon HD 6700 -ATI Technologies Inc. AMD Radeon HD 6750 supported 3 ATI Radeon HD 6700 -ATI Technologies Inc. AMD Radeon HD 6750M supported 3 ATI Radeon HD 6700 -ATI Technologies Inc. AMD Radeon HD 6770 supported 3 ATI Radeon HD 6700 -ATI Technologies Inc. AMD Radeon HD 6770M supported 3 ATI Radeon HD 6700 -ATI Technologies Inc. AMD Radeon HD 6800 Series supported 3 ATI Radeon HD 6800 -ATI Technologies Inc. AMD Radeon HD 6800M Series supported 3 ATI Radeon HD 6800 -ATI Technologies Inc. AMD Radeon HD 6850 supported 3 ATI Radeon HD 6800 -ATI Technologies Inc. AMD Radeon HD 6850M supported 3 ATI Radeon HD 6800 -ATI Technologies Inc. AMD Radeon HD 6870 supported 3 ATI Radeon HD 6800 -ATI Technologies Inc. AMD Radeon HD 6870M supported 3 ATI Radeon HD 6800 -ATI Technologies Inc. AMD Radeon HD 6900 Series supported 3 ATI Radeon HD 6900 -ATI Technologies Inc. AMD Radeon HD 6900M Series supported 3 ATI Radeon HD 6900 -ATI Technologies Inc. AMD Radeon HD 6970M supported 3 ATI Radeon HD 6900 -ATI Technologies Inc. AMD Radeon HD 6990 supported 3 ATI Radeon HD 6900 -ATI Technologies Inc. AMD Radeon(TM) HD 6470M supported 3 ATI Radeon HD 64xx -ATI Technologies Inc. AMD Radeon(TM) HD 6480G supported 3 ATI Radeon HD 64xx -ATI Technologies Inc. AMD Radeon(TM) HD 6520G supported 3 ATI Radeon HD 65xx -ATI Technologies Inc. AMD Radeon(TM) HD 6620G supported 3 ATI Radeon HD 66xx -ATI Technologies Inc. AMD Radeon(TM) HD 6630M supported 3 ATI Radeon HD 66xx -ATI Technologies Inc. ASUS 5870 Eyefinity 6 supported 0 ATI Technologies -ATI Technologies Inc. ASUS A9550 Series supported 1 ATI ASUS A9xxx -ATI Technologies Inc. ASUS AH2600 Series supported 3 ATI ASUS AH26xx -ATI Technologies Inc. ASUS AH3450 Series supported 1 ATI ASUS AH34xx -ATI Technologies Inc. ASUS AH3650 Series supported 3 ATI ASUS AH36xx -ATI Technologies Inc. ASUS AH4650 Series supported 3 ATI ASUS AH46xx -ATI Technologies Inc. ASUS ARES supported 3 ATI ASUS ARES -ATI Technologies Inc. ASUS EAH2900 Series supported 3 ATI ASUS EAH29xx -ATI Technologies Inc. ASUS EAH3450 Series supported 1 ATI ASUS AH34xx -ATI Technologies Inc. ASUS EAH3650 Series supported 3 ATI ASUS AH36xx -ATI Technologies Inc. ASUS EAH4350 series supported 1 ATI ASUS EAH43xx -ATI Technologies Inc. ASUS EAH4550 series supported 1 ATI ASUS EAH45xx -ATI Technologies Inc. ASUS EAH4650 series supported 3 ATI ASUS AH46xx -ATI Technologies Inc. ASUS EAH4670 series supported 3 ATI ASUS AH46xx -ATI Technologies Inc. ASUS EAH4750 Series supported 0 ATI Technologies -ATI Technologies Inc. ASUS EAH4770 Series supported 0 ATI Technologies -ATI Technologies Inc. ASUS EAH4770 series supported 0 ATI Technologies -ATI Technologies Inc. ASUS EAH4850 series supported 3 ATI ASUS EAH48xx -ATI Technologies Inc. ASUS EAH5450 Series supported 0 ATI Technologies -ATI Technologies Inc. ASUS EAH5550 Series supported 0 ATI Technologies -ATI Technologies Inc. ASUS EAH5570 series supported 0 ATI Technologies -ATI Technologies Inc. ASUS EAH5670 Series supported 0 ATI Technologies -ATI Technologies Inc. ASUS EAH5750 Series supported 3 ATI ASUS EAH57xx -ATI Technologies Inc. ASUS EAH5770 Series supported 3 ATI ASUS EAH57xx -ATI Technologies Inc. ASUS EAH5830 Series supported 3 ATI ASUS EAH58xx -ATI Technologies Inc. ASUS EAH5850 Series supported 3 ATI ASUS EAH58xx -ATI Technologies Inc. ASUS EAH5870 Series supported 3 ATI ASUS EAH58xx -ATI Technologies Inc. ASUS EAH5970 Series supported 0 ATI Technologies -ATI Technologies Inc. ASUS EAH6450 Series supported 3 ATI ASUS EAH6xxx -ATI Technologies Inc. ASUS EAH6570 Series supported 3 ATI ASUS EAH6xxx -ATI Technologies Inc. ASUS EAH6670 Series supported 3 ATI ASUS EAH6xxx -ATI Technologies Inc. ASUS EAH6850 Series supported 3 ATI ASUS EAH6xxx -ATI Technologies Inc. ASUS EAH6870 Series supported 3 ATI ASUS EAH6xxx -ATI Technologies Inc. ASUS EAH6950 Series supported 3 ATI ASUS EAH6xxx -ATI Technologies Inc. ASUS EAH6970 Series supported 3 ATI ASUS EAH6xxx -ATI Technologies Inc. ASUS EAHG4670 series supported 0 ATI Technologies -ATI Technologies Inc. ASUS Extreme AX600 Series supported 0 ATI Technologies -ATI Technologies Inc. ASUS Extreme AX600XT-TD supported 0 ATI Technologies -ATI Technologies Inc. ASUS X1300 Series x86/SSE2 supported 3 ATI ASUS Radeon X1xxx -ATI Technologies Inc. ASUS X1550 Series supported 3 ATI ASUS Radeon X1xxx -ATI Technologies Inc. ASUS X1950 Series x86/SSE2 supported 3 ATI ASUS Radeon X1xxx -ATI Technologies Inc. ASUS X800 Series supported 0 ATI Technologies -ATI Technologies Inc. ASUS X850 Series supported 0 ATI Technologies -ATI Technologies Inc. ATI All-in-Wonder HD supported 1 ATI All-in-Wonder HD -ATI Technologies Inc. ATI FirePro 2260 supported 1 ATI FirePro 2000 -ATI Technologies Inc. ATI FirePro 2450 supported 1 ATI FirePro 2000 -ATI Technologies Inc. ATI FirePro M5800 supported 3 ATI FirePro M5800 -ATI Technologies Inc. ATI FirePro M7740 supported 3 ATI FirePro M7740 -ATI Technologies Inc. ATI FirePro M7820 supported 3 ATI FirePro M7820 -ATI Technologies Inc. ATI FirePro V3700 (FireGL) supported 0 ATI FireGL -ATI Technologies Inc. ATI FirePro V3800 supported 1 ATI FirePro 3000 -ATI Technologies Inc. ATI FirePro V4800 supported 2 ATI FirePro 4000 -ATI Technologies Inc. ATI FirePro V4800 (FireGL) supported 0 ATI FireGL -ATI Technologies Inc. ATI FirePro V5800 supported 3 ATI FirePro 5000 -ATI Technologies Inc. ATI FirePro V7800 supported 3 ATI FirePro 7000 -ATI Technologies Inc. ATI MOBILITY RADEON 9600/9700 Series supported 1 ATI Mobility Radeon 9700 -ATI Technologies Inc. ATI MOBILITY RADEON 9XXX x86/SSE2 supported 0 ATI Technologies -ATI Technologies Inc. ATI MOBILITY RADEON HD 2300 supported 1 ATI Mobility Radeon HD 2300 -ATI Technologies Inc. ATI MOBILITY RADEON HD 3450 supported 2 ATI Mobility Radeon HD 3400 -ATI Technologies Inc. ATI MOBILITY RADEON HD 3650 supported 3 ATI Mobility Radeon HD 3600 -ATI Technologies Inc. ATI MOBILITY RADEON X1600 supported 2 ATI Radeon X16xx -ATI Technologies Inc. ATI MOBILITY RADEON X2300 supported 1 ATI Radeon X2xxx -ATI Technologies Inc. ATI MOBILITY RADEON X2300 HD x86/SSE2 supported 1 ATI Radeon X2xxx -ATI Technologies Inc. ATI MOBILITY RADEON X2300 x86/MMX/3DNow!/SSE2 supported 1 ATI Radeon X2xxx -ATI Technologies Inc. ATI MOBILITY RADEON X2300 x86/SSE2 supported 1 ATI Radeon X2xxx -ATI Technologies Inc. ATI MOBILITY RADEON X300 supported 0 ATI Radeon X300 -ATI Technologies Inc. ATI MOBILITY RADEON X600 supported 1 ATI Radeon X600 -ATI Technologies Inc. ATI MOBILITY RADEON X700 supported 1 ATI Radeon X700 -ATI Technologies Inc. ATI MOBILITY RADEON XPRESS 200 supported 0 ATI Radeon Xpress -ATI Technologies Inc. ATI Mobility FireGL V5700 supported 1 ATI FireGL 5xxx -ATI Technologies Inc. ATI Mobility Radeon 4100 supported 1 ATI Mobility Radeon 4100 -ATI Technologies Inc. ATI Mobility Radeon Graphics supported 0 ATI Technologies -ATI Technologies Inc. ATI Mobility Radeon HD 2300 supported 1 ATI Mobility Radeon HD 2300 -ATI Technologies Inc. ATI Mobility Radeon HD 2400 supported 1 ATI Mobility Radeon HD 2400 -ATI Technologies Inc. ATI Mobility Radeon HD 2400 XT supported 1 ATI Mobility Radeon HD 2400 -ATI Technologies Inc. ATI Mobility Radeon HD 2600 supported 3 ATI Mobility Radeon HD 2600 -ATI Technologies Inc. ATI Mobility Radeon HD 2600 XT supported 3 ATI Mobility Radeon HD 2600 -ATI Technologies Inc. ATI Mobility Radeon HD 2700 supported 3 ATI Mobility Radeon HD 2700 -ATI Technologies Inc. ATI Mobility Radeon HD 3400 Series supported 2 ATI Mobility Radeon HD 3400 -ATI Technologies Inc. ATI Mobility Radeon HD 3410 supported 2 ATI Mobility Radeon HD 3400 -ATI Technologies Inc. ATI Mobility Radeon HD 3430 supported 2 ATI Mobility Radeon HD 3400 -ATI Technologies Inc. ATI Mobility Radeon HD 3450 supported 2 ATI Mobility Radeon HD 3400 -ATI Technologies Inc. ATI Mobility Radeon HD 3470 supported 2 ATI Mobility Radeon HD 3400 -ATI Technologies Inc. ATI Mobility Radeon HD 3470 Hybrid X2 supported 2 ATI Mobility Radeon HD 3400 -ATI Technologies Inc. ATI Mobility Radeon HD 3650 supported 3 ATI Mobility Radeon HD 3600 -ATI Technologies Inc. ATI Mobility Radeon HD 3670 supported 3 ATI Mobility Radeon HD 3600 -ATI Technologies Inc. ATI Mobility Radeon HD 4200 supported 2 ATI Mobility Radeon HD 4200 -ATI Technologies Inc. ATI Mobility Radeon HD 4200 Series supported 2 ATI Mobility Radeon HD 4200 -ATI Technologies Inc. ATI Mobility Radeon HD 4225 supported 2 ATI Mobility Radeon HD 4200 -ATI Technologies Inc. ATI Mobility Radeon HD 4225 Series supported 2 ATI Mobility Radeon HD 4200 -ATI Technologies Inc. ATI Mobility Radeon HD 4250 supported 2 ATI Mobility Radeon HD 4200 -ATI Technologies Inc. ATI Mobility Radeon HD 4250 Graphics supported 2 ATI Mobility Radeon HD 4200 -ATI Technologies Inc. ATI Mobility Radeon HD 4250 Series supported 2 ATI Mobility Radeon HD 4200 -ATI Technologies Inc. ATI Mobility Radeon HD 4270 supported 2 ATI Mobility Radeon HD 4200 -ATI Technologies Inc. ATI Mobility Radeon HD 4300 Series supported 2 ATI Mobility Radeon HD 4300 -ATI Technologies Inc. ATI Mobility Radeon HD 4300/4500 Series supported 2 ATI Mobility Radeon HD 4300 -ATI Technologies Inc. ATI Mobility Radeon HD 4330 supported 2 ATI Mobility Radeon HD 4300 -ATI Technologies Inc. ATI Mobility Radeon HD 4330 Series supported 2 ATI Mobility Radeon HD 4300 -ATI Technologies Inc. ATI Mobility Radeon HD 4350 supported 2 ATI Mobility Radeon HD 4300 -ATI Technologies Inc. ATI Mobility Radeon HD 4350 Series supported 2 ATI Mobility Radeon HD 4300 -ATI Technologies Inc. ATI Mobility Radeon HD 4500 Series supported 3 ATI Mobility Radeon HD 4500 -ATI Technologies Inc. ATI Mobility Radeon HD 4500/5100 Series supported 3 ATI Mobility Radeon HD 4500 -ATI Technologies Inc. ATI Mobility Radeon HD 4530 supported 3 ATI Mobility Radeon HD 4500 -ATI Technologies Inc. ATI Mobility Radeon HD 4530 Series supported 3 ATI Mobility Radeon HD 4500 -ATI Technologies Inc. ATI Mobility Radeon HD 4550 supported 3 ATI Mobility Radeon HD 4500 -ATI Technologies Inc. ATI Mobility Radeon HD 4570 supported 3 ATI Mobility Radeon HD 4500 -ATI Technologies Inc. ATI Mobility Radeon HD 4600 Series supported 3 ATI Mobility Radeon HD 4600 -ATI Technologies Inc. ATI Mobility Radeon HD 4650 supported 3 ATI Mobility Radeon HD 4600 -ATI Technologies Inc. ATI Mobility Radeon HD 4650 Series supported 3 ATI Mobility Radeon HD 4600 -ATI Technologies Inc. ATI Mobility Radeon HD 4670 supported 3 ATI Mobility Radeon HD 4600 -ATI Technologies Inc. ATI Mobility Radeon HD 4830 Series supported 3 ATI Mobility Radeon HD 4800 -ATI Technologies Inc. ATI Mobility Radeon HD 4850 supported 3 ATI Mobility Radeon HD 4800 -ATI Technologies Inc. ATI Mobility Radeon HD 4870 supported 3 ATI Mobility Radeon HD 4800 -ATI Technologies Inc. ATI Mobility Radeon HD 5000 supported 0 ATI Technologies -ATI Technologies Inc. ATI Mobility Radeon HD 5000 Series supported 0 ATI Technologies -ATI Technologies Inc. ATI Mobility Radeon HD 5145 supported 3 ATI Mobility Radeon HD 5100 -ATI Technologies Inc. ATI Mobility Radeon HD 5165 supported 3 ATI Mobility Radeon HD 5100 -ATI Technologies Inc. ATI Mobility Radeon HD 530v supported 1 ATI Mobility Radeon HD 530v -ATI Technologies Inc. ATI Mobility Radeon HD 5400 Series supported 3 ATI Mobility Radeon HD 5400 -ATI Technologies Inc. ATI Mobility Radeon HD 540v supported 2 ATI Mobility Radeon HD 540v -ATI Technologies Inc. ATI Mobility Radeon HD 5430 supported 3 ATI Mobility Radeon HD 5400 -ATI Technologies Inc. ATI Mobility Radeon HD 5450 supported 3 ATI Mobility Radeon HD 5400 -ATI Technologies Inc. ATI Mobility Radeon HD 5450 Series supported 3 ATI Mobility Radeon HD 5400 -ATI Technologies Inc. ATI Mobility Radeon HD 545v supported 2 ATI Mobility Radeon HD 545v -ATI Technologies Inc. ATI Mobility Radeon HD 5470 supported 3 ATI Mobility Radeon HD 5400 -ATI Technologies Inc. ATI Mobility Radeon HD 550v supported 2 ATI Mobility Radeon HD 550v -ATI Technologies Inc. ATI Mobility Radeon HD 5600/5700 Series supported 3 ATI Mobility Radeon HD 5600 -ATI Technologies Inc. ATI Mobility Radeon HD 560v supported 2 ATI Mobility Radeon HD 560v -ATI Technologies Inc. ATI Mobility Radeon HD 5650 supported 3 ATI Mobility Radeon HD 5600 -ATI Technologies Inc. ATI Mobility Radeon HD 5700 Series supported 3 ATI Mobility Radeon HD 5700 -ATI Technologies Inc. ATI Mobility Radeon HD 5730 supported 3 ATI Mobility Radeon HD 5700 -ATI Technologies Inc. ATI Mobility Radeon HD 5800 Series supported 3 ATI Radeon HD 5800 -ATI Technologies Inc. ATI Mobility Radeon HD 5830 Series supported 3 ATI Radeon HD 5800 -ATI Technologies Inc. ATI Mobility Radeon HD 5850 supported 3 ATI Radeon HD 5800 -ATI Technologies Inc. ATI Mobility Radeon HD 5870 supported 3 ATI Radeon HD 5800 -ATI Technologies Inc. ATI Mobility Radeon HD 6300 series supported 3 ATI Mobility Radeon HD 6300 -ATI Technologies Inc. ATI Mobility Radeon HD 6370 supported 3 ATI Mobility Radeon HD 6300 -ATI Technologies Inc. ATI Mobility Radeon HD 6470M supported 3 ATI Mobility Radeon HD 6400M -ATI Technologies Inc. ATI Mobility Radeon HD 6550 supported 3 ATI Mobility Radeon HD 6500M -ATI Technologies Inc. ATI Mobility Radeon HD 6570 supported 3 ATI Mobility Radeon HD 6500M -ATI Technologies Inc. ATI Mobility Radeon X1300 supported 1 ATI Radeon X13xx -ATI Technologies Inc. ATI Mobility Radeon X1300 x86/MMX/3DNow!/SSE2 supported 1 ATI Radeon X13xx -ATI Technologies Inc. ATI Mobility Radeon X1300 x86/SSE2 supported 1 ATI Radeon X13xx -ATI Technologies Inc. ATI Mobility Radeon X1350 supported 1 ATI Radeon X13xx -ATI Technologies Inc. ATI Mobility Radeon X1350 x86/SSE2 supported 1 ATI Radeon X13xx -ATI Technologies Inc. ATI Mobility Radeon X1400 supported 1 ATI Radeon X1xxx -ATI Technologies Inc. ATI Mobility Radeon X1400 x86/SSE2 supported 1 ATI Radeon X1xxx -ATI Technologies Inc. ATI Mobility Radeon X1600 supported 2 ATI Radeon X16xx -ATI Technologies Inc. ATI Mobility Radeon X1600 x86/SSE2 supported 2 ATI Radeon X16xx -ATI Technologies Inc. ATI Mobility Radeon X1700 x86/SSE2 supported 2 ATI Radeon X17xx -ATI Technologies Inc. ATI Mobility Radeon X2300 supported 1 ATI Radeon X2xxx -ATI Technologies Inc. ATI Mobility Radeon X2300 (Omega 3.8.442) supported 1 ATI Radeon X2xxx -ATI Technologies Inc. ATI Mobility Radeon X2300 x86 supported 1 ATI Radeon X2xxx -ATI Technologies Inc. ATI Mobility Radeon X2300 x86/MMX/3DNow!/SSE2 supported 1 ATI Radeon X2xxx -ATI Technologies Inc. ATI Mobility Radeon X2300 x86/SSE2 supported 1 ATI Radeon X2xxx -ATI Technologies Inc. ATI Mobility Radeon X2500 supported 1 ATI Radeon X2xxx -ATI Technologies Inc. ATI Mobility Radeon X2500 x86/SSE2 supported 1 ATI Radeon X2xxx -ATI Technologies Inc. ATI Mobility Radeon. HD 530v supported 1 ATI Mobility Radeon HD 530v -ATI Technologies Inc. ATI Mobility Radeon. HD 5470 supported 3 ATI Mobility Radeon HD 5400 -ATI Technologies Inc. ATI RADEON HD 3200 T25XX by CAMILO supported 1 ATI Radeon HD 3200 -ATI Technologies Inc. ATI RADEON XPRESS 1100 supported 0 ATI Radeon Xpress -ATI Technologies Inc. ATI RADEON XPRESS 1100 x86/SSE2 supported 0 ATI Radeon Xpress -ATI Technologies Inc. ATI RADEON XPRESS 200 Series supported 0 ATI Radeon Xpress -ATI Technologies Inc. ATI RADEON XPRESS 200 Series x86/SSE2 supported 0 ATI Radeon Xpress -ATI Technologies Inc. ATI RADEON XPRESS 200M SERIES supported 0 ATI Radeon Xpress -ATI Technologies Inc. ATI Radeon supported 0 ATI Technologies -ATI Technologies Inc. ATI Radeon 2100 supported 0 ATI Radeon 2100 -ATI Technologies Inc. ATI Radeon 2100 (Microsoft - WDDM) supported 0 ATI Radeon 2100 -ATI Technologies Inc. ATI Radeon 2100 Graphics supported 0 ATI Radeon 2100 -ATI Technologies Inc. ATI Radeon 3000 supported 0 ATI Radeon 3000 -ATI Technologies Inc. ATI Radeon 3000 Graphics supported 0 ATI Radeon 3000 -ATI Technologies Inc. ATI Radeon 3100 Graphics supported 1 ATI Radeon 3100 -ATI Technologies Inc. ATI Radeon 5xxx series supported 3 ATI Radeon 5xxx -ATI Technologies Inc. ATI Radeon 9550 / X1050 Series supported 0 ATI Radeon 9500 -ATI Technologies Inc. ATI Radeon 9550 / X1050 Series x86/MMX/3DNow!/SSE supported 0 ATI Radeon 9500 -ATI Technologies Inc. ATI Radeon 9550 / X1050 Series x86/SSE2 supported 0 ATI Radeon 9500 -ATI Technologies Inc. ATI Radeon 9550 / X1050 Series(Microsoft - WDDM) supported 0 ATI Radeon 9500 -ATI Technologies Inc. ATI Radeon 9600 / X1050 Series supported 0 ATI Radeon 9600 -ATI Technologies Inc. ATI Radeon 9600/9550/X1050 Series supported 0 ATI Radeon 9600 -ATI Technologies Inc. ATI Radeon BA Prototype OpenGL Engine supported 0 ATI Technologies -ATI Technologies Inc. ATI Radeon BB Prototype OpenGL Engine supported 0 ATI Technologies -ATI Technologies Inc. ATI Radeon Broadway XT Prototype OpenGL Engine supported 0 ATI Technologies -ATI Technologies Inc. ATI Radeon Cedar PRO Prototype OpenGL Engine supported 2 AMD CEDAR (HD 5450) -ATI Technologies Inc. ATI Radeon Cypress PRO Prototype OpenGL Engine supported 3 AMD CYPRESS (HD 5800) -ATI Technologies Inc. ATI Radeon Graphics Processor supported 0 ATI Technologies -ATI Technologies Inc. ATI Radeon HD 2200 Graphics supported 0 ATI Technologies -ATI Technologies Inc. ATI Radeon HD 2350 supported 0 ATI Radeon HD 2300 -ATI Technologies Inc. ATI Radeon HD 2400 supported 1 ATI Radeon HD 2400 -ATI Technologies Inc. ATI Radeon HD 2400 OpenGL Engine supported 1 ATI Radeon HD 2400 -ATI Technologies Inc. ATI Radeon HD 2400 PRO supported 1 ATI Radeon HD 2400 -ATI Technologies Inc. ATI Radeon HD 2400 PRO AGP supported 1 ATI Radeon HD 2400 -ATI Technologies Inc. ATI Radeon HD 2400 Pro supported 1 ATI Radeon HD 2400 -ATI Technologies Inc. ATI Radeon HD 2400 Series supported 1 ATI Radeon HD 2400 -ATI Technologies Inc. ATI Radeon HD 2400 XT supported 1 ATI Radeon HD 2400 -ATI Technologies Inc. ATI Radeon HD 2400 XT OpenGL Engine supported 1 ATI Radeon HD 2400 -ATI Technologies Inc. ATI Radeon HD 2600 OpenGL Engine supported 2 ATI Radeon HD 2600 -ATI Technologies Inc. ATI Radeon HD 2600 PRO supported 2 ATI Radeon HD 2600 -ATI Technologies Inc. ATI Radeon HD 2600 PRO OpenGL Engine supported 2 ATI Radeon HD 2600 -ATI Technologies Inc. ATI Radeon HD 2600 Pro supported 2 ATI Radeon HD 2600 -ATI Technologies Inc. ATI Radeon HD 2600 Series supported 2 ATI Radeon HD 2600 -ATI Technologies Inc. ATI Radeon HD 2600 XT supported 2 ATI Radeon HD 2600 -ATI Technologies Inc. ATI Radeon HD 2900 GT supported 3 ATI Radeon HD 2900 -ATI Technologies Inc. ATI Radeon HD 2900 XT supported 3 ATI Radeon HD 2900 -ATI Technologies Inc. ATI Radeon HD 3200 Graphics supported 1 ATI Radeon HD 3200 -ATI Technologies Inc. ATI Radeon HD 3300 Graphics supported 1 ATI Radeon HD 3300 -ATI Technologies Inc. ATI Radeon HD 3400 Series supported 1 ATI Radeon HD 3400 -ATI Technologies Inc. ATI Radeon HD 3450 supported 1 ATI Radeon HD 3400 -ATI Technologies Inc. ATI Radeon HD 3450 - Dell Optiplex supported 1 ATI Radeon HD 3400 -ATI Technologies Inc. ATI Radeon HD 3470 supported 1 ATI Radeon HD 3400 -ATI Technologies Inc. ATI Radeon HD 3470 - Dell Optiplex supported 1 ATI Radeon HD 3400 -ATI Technologies Inc. ATI Radeon HD 3550 supported 1 ATI Radeon HD 3500 -ATI Technologies Inc. ATI Radeon HD 3600 Series supported 3 ATI Radeon HD 3600 -ATI Technologies Inc. ATI Radeon HD 3650 supported 3 ATI Radeon HD 3600 -ATI Technologies Inc. ATI Radeon HD 3650 AGP supported 3 ATI Radeon HD 3600 -ATI Technologies Inc. ATI Radeon HD 3730 supported 3 ATI Radeon HD 3700 -ATI Technologies Inc. ATI Radeon HD 3800 Series supported 3 ATI Radeon HD 3800 -ATI Technologies Inc. ATI Radeon HD 3850 supported 3 ATI Radeon HD 3800 -ATI Technologies Inc. ATI Radeon HD 3850 AGP supported 3 ATI Radeon HD 3800 -ATI Technologies Inc. ATI Radeon HD 3870 supported 3 ATI Radeon HD 3800 -ATI Technologies Inc. ATI Radeon HD 3870 X2 supported 3 ATI Radeon HD 3800 -ATI Technologies Inc. ATI Radeon HD 4200 supported 1 ATI Radeon HD 4200 -ATI Technologies Inc. ATI Radeon HD 4250 supported 1 ATI Radeon HD 4200 -ATI Technologies Inc. ATI Radeon HD 4250 Graphics supported 1 ATI Radeon HD 4200 -ATI Technologies Inc. ATI Radeon HD 4270 supported 1 ATI Radeon HD 4200 -ATI Technologies Inc. ATI Radeon HD 4290 supported 1 ATI Radeon HD 4200 -ATI Technologies Inc. ATI Radeon HD 4290 (Engineering Sample) supported 1 ATI Radeon HD 4200 -ATI Technologies Inc. ATI Radeon HD 4300 Series supported 1 ATI Radeon HD 4300 -ATI Technologies Inc. ATI Radeon HD 4300/4500 Series supported 1 ATI Radeon HD 4300 -ATI Technologies Inc. ATI Radeon HD 4350 supported 1 ATI Radeon HD 4300 -ATI Technologies Inc. ATI Radeon HD 4350 (Microsoft WDDM 1.1) supported 1 ATI Radeon HD 4300 -ATI Technologies Inc. ATI Radeon HD 4450 supported 1 ATI Radeon HD 4400 -ATI Technologies Inc. ATI Radeon HD 4500 Series supported 3 ATI Radeon HD 4500 -ATI Technologies Inc. ATI Radeon HD 4550 supported 3 ATI Radeon HD 4500 -ATI Technologies Inc. ATI Radeon HD 4600 Series supported 3 ATI Radeon HD 4600 -ATI Technologies Inc. ATI Radeon HD 4650 supported 3 ATI Radeon HD 4600 -ATI Technologies Inc. ATI Radeon HD 4670 supported 3 ATI Radeon HD 4600 -ATI Technologies Inc. ATI Radeon HD 4670 OpenGL Engine supported 3 ATI Radeon HD 4600 -ATI Technologies Inc. ATI Radeon HD 4700 Series supported 3 ATI Radeon HD 4700 -ATI Technologies Inc. ATI Radeon HD 4720 supported 3 ATI Radeon HD 4700 -ATI Technologies Inc. ATI Radeon HD 4730 supported 3 ATI Radeon HD 4700 -ATI Technologies Inc. ATI Radeon HD 4730 Series supported 3 ATI Radeon HD 4700 -ATI Technologies Inc. ATI Radeon HD 4750 supported 3 ATI Radeon HD 4700 -ATI Technologies Inc. ATI Radeon HD 4770 supported 3 ATI Radeon HD 4700 -ATI Technologies Inc. ATI Radeon HD 4800 Series supported 3 ATI Radeon HD 4800 -ATI Technologies Inc. ATI Radeon HD 4850 supported 3 ATI Radeon HD 4800 -ATI Technologies Inc. ATI Radeon HD 4850 OpenGL Engine supported 3 ATI Radeon HD 4800 -ATI Technologies Inc. ATI Radeon HD 4850 Series supported 3 ATI Radeon HD 4800 -ATI Technologies Inc. ATI Radeon HD 4870 supported 3 ATI Radeon HD 4800 -ATI Technologies Inc. ATI Radeon HD 4870 OpenGL Engine supported 3 ATI Radeon HD 4800 -ATI Technologies Inc. ATI Radeon HD 4870 X2 supported 3 ATI Radeon HD 4800 -ATI Technologies Inc. ATI Radeon HD 5400 Series supported 3 ATI Radeon HD 5400 -ATI Technologies Inc. ATI Radeon HD 5450 supported 3 ATI Radeon HD 5400 -ATI Technologies Inc. ATI Radeon HD 5470 supported 3 ATI Radeon HD 5400 -ATI Technologies Inc. ATI Radeon HD 5500 Series supported 3 ATI Radeon HD 5500 -ATI Technologies Inc. ATI Radeon HD 5570 supported 3 ATI Radeon HD 5500 -ATI Technologies Inc. ATI Radeon HD 5600 Series supported 3 ATI Radeon HD 5600 -ATI Technologies Inc. ATI Radeon HD 5600/5700 supported 3 ATI Radeon HD 5600 -ATI Technologies Inc. ATI Radeon HD 5630 supported 3 ATI Radeon HD 5600 -ATI Technologies Inc. ATI Radeon HD 5670 supported 3 ATI Radeon HD 5600 -ATI Technologies Inc. ATI Radeon HD 5670 OpenGL Engine supported 3 ATI Radeon HD 5600 -ATI Technologies Inc. ATI Radeon HD 5700 Series supported 3 ATI Radeon HD 5700 -ATI Technologies Inc. ATI Radeon HD 5750 supported 3 ATI Radeon HD 5700 -ATI Technologies Inc. ATI Radeon HD 5750 OpenGL Engine supported 3 ATI Radeon HD 5700 -ATI Technologies Inc. ATI Radeon HD 5770 supported 3 ATI Radeon HD 5700 -ATI Technologies Inc. ATI Radeon HD 5770 OpenGL Engine supported 3 ATI Radeon HD 5700 -ATI Technologies Inc. ATI Radeon HD 5800 Series supported 3 ATI Radeon HD 5800 -ATI Technologies Inc. ATI Radeon HD 5850 supported 3 ATI Radeon HD 5800 -ATI Technologies Inc. ATI Radeon HD 5870 supported 3 ATI Radeon HD 5800 -ATI Technologies Inc. ATI Radeon HD 5870 OpenGL Engine supported 3 ATI Radeon HD 5800 -ATI Technologies Inc. ATI Radeon HD 5900 Series supported 3 ATI Radeon HD 5900 -ATI Technologies Inc. ATI Radeon HD 5970 supported 3 ATI Radeon HD 5900 -ATI Technologies Inc. ATI Radeon HD 6230 supported 3 ATI Radeon HD 6200 -ATI Technologies Inc. ATI Radeon HD 6250 supported 3 ATI Radeon HD 6200 -ATI Technologies Inc. ATI Radeon HD 6350 supported 3 ATI Radeon HD 6300 -ATI Technologies Inc. ATI Radeon HD 6390 supported 3 ATI Radeon HD 6300 -ATI Technologies Inc. ATI Radeon HD 6490M OpenGL Engine supported 3 ATI Radeon HD 6400 -ATI Technologies Inc. ATI Radeon HD 6510 supported 3 ATI Radeon HD 6500 -ATI Technologies Inc. ATI Radeon HD 6570M supported 3 ATI Radeon HD 6500 -ATI Technologies Inc. ATI Radeon HD 6630M OpenGL Engine supported 3 ATI Radeon HD 6600 -ATI Technologies Inc. ATI Radeon HD 6750 supported 3 ATI Radeon HD 6700 -ATI Technologies Inc. ATI Radeon HD 6750M OpenGL Engine supported 3 ATI Radeon HD 6700 -ATI Technologies Inc. ATI Radeon HD 6770 supported 3 ATI Radeon HD 6700 -ATI Technologies Inc. ATI Radeon HD 6770M OpenGL Engine supported 3 ATI Radeon HD 6700 -ATI Technologies Inc. ATI Radeon HD 6800 Series supported 3 ATI Radeon HD 6800 -ATI Technologies Inc. ATI Radeon HD 6970M OpenGL Engine supported 3 ATI Radeon HD 6900 -ATI Technologies Inc. ATI Radeon HD3750 supported 3 ATI Radeon HD 3700 -ATI Technologies Inc. ATI Radeon HD4300/HD4500 series supported 1 ATI Radeon HD 4300 -ATI Technologies Inc. ATI Radeon HD4670 supported 3 ATI Radeon HD 4600 -ATI Technologies Inc. ATI Radeon Juniper LE Prototype OpenGL Engine supported 3 AMD JUNIPER (HD 5700) -ATI Technologies Inc. ATI Radeon RV710 Prototype OpenGL Engine supported 1 AMD RV710 (HD 4300) -ATI Technologies Inc. ATI Radeon RV730 Prototype OpenGL Engine supported 3 AMD RV730 (HD 4600) -ATI Technologies Inc. ATI Radeon RV770 Prototype OpenGL Engine supported 3 AMD RV770 (HD 4800) -ATI Technologies Inc. ATI Radeon RV790 Prototype OpenGL Engine supported 3 AMD RV790 (HD 4800) -ATI Technologies Inc. ATI Radeon Redwood PRO Prototype OpenGL Engine supported 3 AMD REDWOOD (HD 5500/5600) -ATI Technologies Inc. ATI Radeon Redwood XT Prototype OpenGL Engine supported 3 AMD REDWOOD (HD 5500/5600) -ATI Technologies Inc. ATI Radeon Whistler PRO/LP Prototype OpenGL Engine supported 0 ATI Technologies -ATI Technologies Inc. ATI Radeon X1050 supported 1 ATI Radeon X1xxx -ATI Technologies Inc. ATI Radeon X1050 Series supported 1 ATI Radeon X1xxx -ATI Technologies Inc. ATI Radeon X1200 supported 1 ATI Radeon X1xxx -ATI Technologies Inc. ATI Radeon X1200 Series supported 1 ATI Radeon X1xxx -ATI Technologies Inc. ATI Radeon X1200 Series x86/MMX/3DNow!/SSE2 supported 1 ATI Radeon X1xxx -ATI Technologies Inc. ATI Radeon X1250 supported 1 ATI Radeon X1xxx -ATI Technologies Inc. ATI Radeon X1250 x86/MMX/3DNow!/SSE2 supported 1 ATI Radeon X1xxx -ATI Technologies Inc. ATI Radeon X1270 supported 1 ATI Radeon X1xxx -ATI Technologies Inc. ATI Radeon X1270 x86/MMX/3DNow!/SSE2 supported 1 ATI Radeon X1xxx -ATI Technologies Inc. ATI Radeon X1300/X1550 Series supported 1 ATI Radeon X13xx -ATI Technologies Inc. ATI Radeon X1550 Series supported 2 ATI Radeon X15xx -ATI Technologies Inc. ATI Radeon X1600 OpenGL Engine supported 2 ATI Radeon X16xx -ATI Technologies Inc. ATI Radeon X1900 OpenGL Engine supported 3 ATI Radeon X19xx -ATI Technologies Inc. ATI Radeon X1950 GT supported 3 ATI Radeon X19xx -ATI Technologies Inc. ATI Radeon X300/X550/X1050 Series supported 0 ATI Radeon X300 -ATI Technologies Inc. ATI Radeon Xpress 1100 supported 0 ATI Radeon Xpress -ATI Technologies Inc. ATI Radeon Xpress 1150 supported 0 ATI Radeon Xpress -ATI Technologies Inc. ATI Radeon Xpress 1150 x86/MMX/3DNow!/SSE2 supported 0 ATI Radeon Xpress -ATI Technologies Inc. ATI Radeon Xpress 1200 supported 0 ATI Radeon Xpress -ATI Technologies Inc. ATI Radeon Xpress 1200 Series supported 0 ATI Radeon Xpress -ATI Technologies Inc. ATI Radeon Xpress 1200 Series x86/MMX/3DNow!/SSE2 supported 0 ATI Radeon Xpress -ATI Technologies Inc. ATI Radeon Xpress 1200 x86/MMX/3DNow!/SSE2 supported 0 ATI Radeon Xpress -ATI Technologies Inc. ATI Radeon Xpress 1250 supported 0 ATI Radeon Xpress -ATI Technologies Inc. ATI Radeon Xpress 1250 x86/MMX/3DNow!/SSE2 supported 0 ATI Radeon Xpress -ATI Technologies Inc. ATI Radeon Xpress 1250 x86/SSE2 supported 0 ATI Radeon Xpress -ATI Technologies Inc. ATI Radeon Xpress Series supported 0 ATI Radeon Xpress -ATI Technologies Inc. ATI Radeon Xpress Series x86/MMX/3DNow!/SSE2 supported 0 ATI Radeon Xpress -ATI Technologies Inc. ATI Yamaha HD 9000 supported 0 ATI Technologies -ATI Technologies Inc. ATi RS880M supported 1 ATI RS880M -ATI Technologies Inc. Carte graphique VGA standard supported 0 ATI Technologies -ATI Technologies Inc. Diamond Radeon X1550 Series supported 2 ATI Radeon X15xx -ATI Technologies Inc. EG JUNIPER supported 3 AMD JUNIPER (HD 5700) -ATI Technologies Inc. EG PARK supported 3 AMD PARK -ATI Technologies Inc. FireGL V3100 Pentium 4 (SSE2) supported 0 ATI FireGL -ATI Technologies Inc. FireMV 2400 PCI DDR x86 supported 0 ATI FireMV -ATI Technologies Inc. FireMV 2400 PCI DDR x86/SSE2 supported 0 ATI FireMV -ATI Technologies Inc. GeCube Radeon X1550 supported 2 ATI Radeon X15xx -ATI Technologies Inc. GeForce 9600 GT x86/SSE2 supported 2 ATI Geforce 9600 GT -ATI Technologies Inc. Geforce 9500 GT supported 2 ATI Geforce 9500 GT -ATI Technologies Inc. Geforce 9500GT supported 2 ATI Geforce 9500 GT -ATI Technologies Inc. Geforce 9800 GT supported 2 ATI Geforce 9800 GT -ATI Technologies Inc. HD3730 supported 0 ATI Technologies -ATI Technologies Inc. HIGHTECH EXCALIBUR RADEON 9550SE Series supported 0 ATI Radeon 9500 -ATI Technologies Inc. HIGHTECH EXCALIBUR X700 PRO supported 0 ATI Technologies -ATI Technologies Inc. M21 x86/MMX/3DNow!/SSE2 supported 0 ATI Technologies -ATI Technologies Inc. M76M supported 3 ATI M76 -ATI Technologies Inc. MOBILITY RADEON 7500 DDR x86/SSE2 supported 0 ATI Mobility Radeon 7xxx -ATI Technologies Inc. MOBILITY RADEON 9000 DDR x86/SSE2 supported 0 ATI Radeon 9000 -ATI Technologies Inc. MOBILITY RADEON 9000 IGPRADEON 9100 IGP DDR x86/SSE2 supported 0 ATI Radeon 9000 -ATI Technologies Inc. MOBILITY RADEON 9100 IGP DDR x86/SSE2 supported 0 ATI Radeon 9100 -ATI Technologies Inc. MOBILITY RADEON 9600 x86/SSE2 supported 0 ATI Mobility Radeon 9600 -ATI Technologies Inc. MOBILITY RADEON 9700 x86/SSE2 supported 1 ATI Mobility Radeon 9700 -ATI Technologies Inc. MOBILITY RADEON X300 x86/SSE2 supported 0 ATI Radeon X300 -ATI Technologies Inc. MOBILITY RADEON X600 x86/SSE2 supported 1 ATI Radeon X600 -ATI Technologies Inc. MOBILITY RADEON X700 SE x86 supported 1 ATI Radeon X700 -ATI Technologies Inc. MOBILITY RADEON X700 x86/SSE2 supported 1 ATI Radeon X700 -ATI Technologies Inc. MOBILITY RADEON Xpress 200 Series SW TCL x86/MMX/3DNow!/SSE2 supported 0 ATI Radeon Xpress -ATI Technologies Inc. MSI RX9550SE supported 1 ATI Radeon RX9550 -ATI Technologies Inc. MSI Radeon X1550 Series supported 2 ATI Radeon X15xx -ATI Technologies Inc. Mobility Radeon HD 6000 series supported 0 ATI Technologies -ATI Technologies Inc. Mobility Radeon X2300 HD supported 1 ATI Radeon X2xxx -ATI Technologies Inc. Mobility Radeon X2300 HD x86/SSE2 supported 1 ATI Radeon X2xxx -ATI Technologies Inc. RADEON 7000 DDR x86/MMX/3DNow!/SSE supported 0 ATI Radeon 7xxx -ATI Technologies Inc. RADEON 7000 DDR x86/SSE2 supported 0 ATI Radeon 7xxx -ATI Technologies Inc. RADEON 7500 DDR x86/MMX/3DNow!/SSE2 supported 0 ATI Radeon 7xxx -ATI Technologies Inc. RADEON 7500 DDR x86/SSE2 supported 0 ATI Radeon 7xxx -ATI Technologies Inc. RADEON 9100 IGP DDR x86/SSE2 supported 0 ATI Radeon 9100 -ATI Technologies Inc. RADEON 9200 DDR x86/MMX/3DNow!/SSE supported 0 ATI Radeon 9200 -ATI Technologies Inc. RADEON 9200 DDR x86/SSE2 supported 0 ATI Radeon 9200 -ATI Technologies Inc. RADEON 9200 PRO DDR x86/MMX/3DNow!/SSE supported 0 ATI Radeon 9200 -ATI Technologies Inc. RADEON 9200 Series DDR x86/MMX/3DNow!/SSE supported 0 ATI Radeon 9200 -ATI Technologies Inc. RADEON 9200 Series DDR x86/MMX/3DNow!/SSE2 supported 0 ATI Radeon 9200 -ATI Technologies Inc. RADEON 9200 Series DDR x86/SSE supported 0 ATI Radeon 9200 -ATI Technologies Inc. RADEON 9200 Series DDR x86/SSE2 supported 0 ATI Radeon 9200 -ATI Technologies Inc. RADEON 9200SE DDR x86/MMX/3DNow!/SSE2 supported 0 ATI Radeon 9200 -ATI Technologies Inc. RADEON 9200SE DDR x86/SSE2 supported 0 ATI Radeon 9200 -ATI Technologies Inc. RADEON 9250/9200 Series DDR x86/MMX/3DNow!/SSE supported 0 ATI Radeon 9200 -ATI Technologies Inc. RADEON 9250/9200 Series DDR x86/MMX/3DNow!/SSE2 supported 0 ATI Radeon 9200 -ATI Technologies Inc. RADEON 9250/9200 Series DDR x86/SSE2 supported 0 ATI Radeon 9200 -ATI Technologies Inc. RADEON 9500 supported 0 ATI Radeon 9500 -ATI Technologies Inc. RADEON 9550 x86/SSE2 supported 0 ATI Radeon 9500 -ATI Technologies Inc. RADEON 9600 SERIES supported 0 ATI Radeon 9600 -ATI Technologies Inc. RADEON 9600 SERIES x86/MMX/3DNow!/SSE2 supported 0 ATI Radeon 9600 -ATI Technologies Inc. RADEON 9600 SERIES x86/SSE2 supported 0 ATI Radeon 9600 -ATI Technologies Inc. RADEON 9600 TX x86/SSE2 supported 0 ATI Radeon 9600 -ATI Technologies Inc. RADEON 9600 x86/MMX/3DNow!/SSE2 supported 0 ATI Radeon 9600 -ATI Technologies Inc. RADEON 9600 x86/SSE2 supported 0 ATI Radeon 9600 -ATI Technologies Inc. RADEON 9700 PRO x86/MMX/3DNow!/SSE supported 1 ATI Radeon 9700 -ATI Technologies Inc. RADEON 9800 PRO supported 1 ATI Radeon 9800 -ATI Technologies Inc. RADEON 9800 x86/SSE2 supported 1 ATI Radeon 9800 -ATI Technologies Inc. RADEON IGP 340M DDR x86/SSE2 unsupported 0 ATI IGP 340M -ATI Technologies Inc. RADEON X300 Series x86/SSE2 supported 0 ATI Radeon X300 -ATI Technologies Inc. RADEON X300 x86/SSE2 supported 0 ATI Radeon X300 -ATI Technologies Inc. RADEON X300/X550 Series x86/SSE2 supported 0 ATI Radeon X300 -ATI Technologies Inc. RADEON X550 x86/MMX/3DNow!/SSE2 supported 0 ATI Radeon X500 -ATI Technologies Inc. RADEON X550 x86/SSE2 supported 0 ATI Radeon X500 -ATI Technologies Inc. RADEON X600 Series supported 1 ATI Radeon X600 -ATI Technologies Inc. RADEON X600 x86/SSE2 supported 1 ATI Radeon X600 -ATI Technologies Inc. RADEON X600/X550 Series supported 1 ATI Radeon X600 -ATI Technologies Inc. RADEON X700 PRO x86/SSE2 supported 1 ATI Radeon X700 -ATI Technologies Inc. RADEON X800 SE x86/MMX/3DNow!/SSE2 supported 2 ATI Radeon X800 -ATI Technologies Inc. RADEON X800 XT supported 2 ATI Radeon X800 -ATI Technologies Inc. RADEON X800GT supported 2 ATI Radeon X800 -ATI Technologies Inc. RADEON XPRESS 200 Series SW TCL x86/MMX/3DNow!/SSE2 supported 0 ATI Radeon Xpress -ATI Technologies Inc. RADEON XPRESS 200 Series SW TCL x86/SSE2 supported 0 ATI Radeon Xpress -ATI Technologies Inc. RADEON XPRESS 200 Series x86/SSE2 supported 0 ATI Radeon Xpress -ATI Technologies Inc. RADEON XPRESS 200M Series SW TCL x86/MMX/3DNow!/SSE2 supported 0 ATI Radeon Xpress -ATI Technologies Inc. RADEON XPRESS 200M Series SW TCL x86/SSE2 supported 0 ATI Radeon Xpress -ATI Technologies Inc. RADEON XPRESS 200M Series x86/MMX/3DNow!/SSE2 supported 0 ATI Radeon Xpress -ATI Technologies Inc. RADEON XPRESS 200M Series x86/SSE2 supported 0 ATI Radeon Xpress -ATI Technologies Inc. RADEON XPRESS Series x86/MMX/3DNow!/SSE2 supported 0 ATI Radeon Xpress -ATI Technologies Inc. RADEON XPRESS Series x86/SSE2 supported 0 ATI Radeon Xpress -ATI Technologies Inc. RS740 supported 0 ATI Technologies -ATI Technologies Inc. RS780C supported 0 AMD RS780 (HD 3200) -ATI Technologies Inc. RS780M supported 0 AMD RS780 (HD 3200) -ATI Technologies Inc. RS880 supported 1 AMD RS880 (HD 4200) -ATI Technologies Inc. RV410 Pro x86/SSE2 supported 1 ATI RV410 (X700) -ATI Technologies Inc. RV790 supported 3 AMD RV790 (HD 4800) -ATI Technologies Inc. Radeon (TM) HD 6470M supported 0 ATI Technologies -ATI Technologies Inc. Radeon (TM) HD 6490M supported 0 ATI Technologies -ATI Technologies Inc. Radeon (TM) HD 6750M supported 0 ATI Technologies -ATI Technologies Inc. Radeon (TM) HD 6770M supported 0 ATI Technologies -ATI Technologies Inc. Radeon (TM) HD 6850M supported 0 ATI Technologies -ATI Technologies Inc. Radeon 7000 DDR x86/SSE supported 0 ATI Radeon 7xxx -ATI Technologies Inc. Radeon 7000 DDR x86/SSE2 supported 0 ATI Radeon 7xxx -ATI Technologies Inc. Radeon 7000 SDR x86/SSE2 supported 0 ATI Radeon 7xxx -ATI Technologies Inc. Radeon 7500 DDR x86/SSE2 supported 0 ATI Radeon 7xxx -ATI Technologies Inc. Radeon 9000 DDR x86/SSE2 supported 0 ATI Radeon 9000 -ATI Technologies Inc. Radeon DDR x86/MMX/3DNow!/SSE2 supported 0 ATI Radeon DDR -ATI Technologies Inc. Radeon DDR x86/SSE supported 0 ATI Radeon DDR -ATI Technologies Inc. Radeon DDR x86/SSE2 supported 0 ATI Radeon DDR -ATI Technologies Inc. Radeon HD 6310 supported 3 ATI Radeon HD 6300 -ATI Technologies Inc. Radeon HD 6470M supported 3 ATI Radeon HD 6400 -ATI Technologies Inc. Radeon HD 6490M supported 3 ATI Radeon HD 6400 -ATI Technologies Inc. Radeon HD 6800 Series supported 3 ATI Radeon HD 6800 -ATI Technologies Inc. Radeon SDR x86/SSE2 supported 0 ATI Technologies -ATI Technologies Inc. Radeon X1300 Series supported 1 ATI Radeon X13xx -ATI Technologies Inc. Radeon X1300 Series x86/MMX/3DNow!/SSE2 supported 1 ATI Radeon X13xx -ATI Technologies Inc. Radeon X1300 Series x86/SSE2 supported 1 ATI Radeon X13xx -ATI Technologies Inc. Radeon X1300/X1550 Series supported 1 ATI Radeon X13xx -ATI Technologies Inc. Radeon X1300/X1550 Series x86/SSE2 supported 1 ATI Radeon X13xx -ATI Technologies Inc. Radeon X1550 64-bit (Microsoft - WDDM) supported 2 ATI Radeon X15xx -ATI Technologies Inc. Radeon X1550 Series supported 2 ATI Radeon X15xx -ATI Technologies Inc. Radeon X1550 Series x86/SSE2 supported 2 ATI Radeon X15xx -ATI Technologies Inc. Radeon X1600 supported 2 ATI Radeon X16xx -ATI Technologies Inc. Radeon X1600 Pro / X1300XT x86/MMX/3DNow!/SSE2 supported 2 ATI Radeon X16xx -ATI Technologies Inc. Radeon X1600 Series supported 2 ATI Radeon X16xx -ATI Technologies Inc. Radeon X1600 Series x86/SSE2 supported 2 ATI Radeon X16xx -ATI Technologies Inc. Radeon X1600/1650 Series supported 2 ATI Radeon X16xx -ATI Technologies Inc. Radeon X1600/X1650 Series supported 2 ATI Radeon X16xx -ATI Technologies Inc. Radeon X1650 Series supported 2 ATI Radeon X16xx -ATI Technologies Inc. Radeon X1650 Series x86/MMX/3DNow!/SSE2 supported 2 ATI Radeon X16xx -ATI Technologies Inc. Radeon X1650 Series x86/SSE2 supported 2 ATI Radeon X16xx -ATI Technologies Inc. Radeon X1900 Series x86/MMX/3DNow!/SSE2 supported 3 ATI Radeon X19xx -ATI Technologies Inc. Radeon X1950 Pro supported 3 ATI Radeon X19xx -ATI Technologies Inc. Radeon X1950 Pro x86/MMX/3DNow!/SSE2 supported 3 ATI Radeon X19xx -ATI Technologies Inc. Radeon X1950 Series supported 3 ATI Radeon X19xx -ATI Technologies Inc. Radeon X1950 Series (Microsoft - WDDM) supported 3 ATI Radeon X19xx -ATI Technologies Inc. Radeon X300/X550/X1050 Series supported 0 ATI Radeon X300 -ATI Technologies Inc. Radeon X550/X700 Series supported 0 ATI Radeon X500 -ATI Technologies Inc. Radeon X550XTX x86/MMX/3DNow!/SSE2 supported 0 ATI Radeon X500 -ATI Technologies Inc. SAPPHIRE RADEON X300SE supported 0 ATI Radeon X300 -ATI Technologies Inc. SAPPHIRE RADEON X300SE x86/MMX/3DNow!/SSE2 supported 0 ATI Radeon X300 -ATI Technologies Inc. SAPPHIRE RADEON X300SE x86/SSE2 supported 0 ATI Radeon X300 -ATI Technologies Inc. SAPPHIRE Radeon X1550 Series supported 2 ATI Radeon X15xx -ATI Technologies Inc. SAPPHIRE Radeon X1550 Series x86/MMX/3DNow!/SSE2 supported 2 ATI Radeon X15xx -ATI Technologies Inc. SAPPHIRE Radeon X1550 Series x86/SSE2 supported 2 ATI Radeon X15xx -ATI Technologies Inc. SAPPHIRE Radeon X1550 x86/SSE2 supported 2 ATI Radeon X15xx -ATI Technologies Inc. Sapphire Radeon HD 3730 supported 3 ATI Radeon HD 3700 -ATI Technologies Inc. Sapphire Radeon HD 3750 supported 3 ATI Radeon HD 3700 -ATI Technologies Inc. Standard VGA Graphics Adapter supported 0 ATI Technologies -ATI Technologies Inc. Tul, RADEON X600 PRO supported 0 ATI Technologies -ATI Technologies Inc. Tul, RADEON X600 PRO x86/SSE2 supported 0 ATI Technologies -ATI Technologies Inc. Tul, RADEON X700 PRO supported 0 ATI Technologies -ATI Technologies Inc. Tul, RADEON X700 PRO x86/MMX/3DNow!/SSE2 supported 0 ATI Technologies -ATI Technologies Inc. VisionTek Radeon 4350 supported 0 ATI Technologies -ATI Technologies Inc. VisionTek Radeon X1550 Series supported 2 ATI Radeon X15xx -ATI Technologies Inc. WRESTLER 9802 supported 0 ATI Technologies -ATI Technologies Inc. WRESTLER 9803 supported 0 ATI Technologies -ATI Technologies Inc. XFX Radeon HD 4570 supported 3 ATI Radeon HD 4500 -ATI Technologies Inc. Yamaha ATI HD 9000da/s supported 0 ATI Technologies -ATI Technologies Inc. Yamaha ATI HD 9000da/s 2048 supported 0 ATI Technologies -Advanced Micro Devices, Inc. Mesa DRI R600 (RS780 9612) 20090101 x86/MMX+/3DNow!+/SSE2 TCL DRI2 supported 0 AMD RS780 (HD 3200) -Advanced Micro Devices, Inc. Mesa DRI R600 (RS880 9710) 20090101 x86/MMX+/3DNow!+/SSE2 TCL DRI2 supported 1 AMD RS880 (HD 4200) -Advanced Micro Devices, Inc. Mesa DRI R600 (RS880 9712) 20090101 TCL supported 1 AMD RS880 (HD 4200) -Advanced Micro Devices, Inc. Mesa DRI R600 (RV610 94C1) 20090101 x86/MMX+/3DNow!+/SSE2 TCL DRI2 supported 1 AMD RV610 (HD 2400) -Advanced Micro Devices, Inc. Mesa DRI R600 (RV610 94C9) 20090101 x86/MMX/SSE2 TCL DRI2 supported 1 AMD RV610 (HD 2400) -Advanced Micro Devices, Inc. Mesa DRI R600 (RV620 95C4) 20090101 x86/MMX/SSE2 TCL DRI2 supported 1 AMD RV620 (HD 3400) -Advanced Micro Devices, Inc. Mesa DRI R600 (RV620 95C5) 20090101 x86/MMX+/3DNow!+/SSE2 TCL DRI2 supported 1 AMD RV620 (HD 3400) -Advanced Micro Devices, Inc. Mesa DRI R600 (RV620 95C5) 20090101 x86/MMX/SSE2 TCL DRI2 supported 1 AMD RV620 (HD 3400) -Advanced Micro Devices, Inc. Mesa DRI R600 (RV635 9596) 20090101 x86/MMX+/3DNow!+/SSE TCL DRI2 supported 3 AMD RV635 (HD 3600) -Advanced Micro Devices, Inc. Mesa DRI R600 (RV670 9505) 20090101 x86/MMX+/3DNow!+/SSE2 TCL DRI2 supported 3 AMD RV670 (HD 3800) -Advanced Micro Devices, Inc. Mesa DRI R600 (RV670 9505) 20090101 x86/MMX/SSE2 TCL DRI2 supported 3 AMD RV670 (HD 3800) -Advanced Micro Devices, Inc. Mesa DRI R600 (RV710 9552) 20090101 x86/MMX/SSE2 TCL DRI2 supported 1 AMD RV710 (HD 4300) -Advanced Micro Devices, Inc. Mesa DRI R600 (RV730 9490) 20090101 x86/MMX+/3DNow!+/SSE2 TCL DRI2 supported 3 AMD RV730 (HD 4600) -Advanced Micro Devices, Inc. Mesa DRI R600 (RV730 9490) 20090101 x86/MMX/SSE2 TCL DRI2 supported 3 AMD RV730 (HD 4600) -Advanced Micro Devices, Inc. Mesa DRI R600 (RV730 9498) 20090101 TCL DRI2 supported 3 AMD RV730 (HD 4600) -Advanced Micro Devices, Inc. Mesa DRI R600 (RV770 9440) 20090101 x86/MMX+/3DNow!+/SSE2 TCL DRI2 supported 3 AMD RV770 (HD 4800) -Advanced Micro Devices, Inc. Mesa DRI R600 (RV770 9442) 20090101 x86/MMX/SSE2 TCL DRI2 supported 3 AMD RV770 (HD 4800) -Alex Mohr GL Hijacker! NO MATCH -Apple Software Renderer unsupported 0 Apple Software Renderer -DRI R300 Project Mesa DRI R300 (RS400 5954) 20090101 x86/MMX+/3DNow!+/SSE2 NO-TCL DRI2 supported 1 ATI R300 (9700) -DRI R300 Project Mesa DRI R300 (RS400 5975) 20090101 x86/MMX+/3DNow!+/SSE2 NO-TCL DRI2 supported 1 ATI R300 (9700) -DRI R300 Project Mesa DRI R300 (RS400 5A62) 20090101 x86/MMX/SSE2 NO-TCL DRI2 supported 1 ATI R300 (9700) -DRI R300 Project Mesa DRI R300 (RS600 7941) 20090101 x86/MMX/SSE2 NO-TCL unsupported 0 ATI RS600 (Xpress 3200) -DRI R300 Project Mesa DRI R300 (RS690 791F) 20090101 x86/MMX+/3DNow!+/SSE2 NO-TCL DRI2 supported 1 ATI R300 (9700) -DRI R300 Project Mesa DRI R300 (RV350 4151) 20090101 AGP 4x x86/MMX+/3DNow!+/SSE TCL supported 0 ATI RV350 (9600) -DRI R300 Project Mesa DRI R300 (RV350 4153) 20090101 AGP 8x x86/MMX+/3DNow!+/SSE TCL supported 0 ATI RV350 (9600) -DRI R300 Project Mesa DRI R300 (RV380 3150) 20090101 x86/MMX+/3DNow!+/SSE2 TCL DRI2 supported 0 ATI RV380 -DRI R300 Project Mesa DRI R300 (RV380 3150) 20090101 x86/MMX/SSE2 TCL DRI2 supported 0 ATI RV380 -DRI R300 Project Mesa DRI R300 (RV380 5B60) 20090101 x86/MMX/SSE2 TCL DRI2 supported 0 ATI RV380 -DRI R300 Project Mesa DRI R300 (RV380 5B62) 20090101 x86/MMX+/3DNow!+/SSE2 TCL DRI2 supported 0 ATI RV380 -DRI R300 Project Mesa DRI R300 (RV515 7145) 20090101 x86/MMX/SSE2 TCL DRI2 supported 1 ATI RV515 -DRI R300 Project Mesa DRI R300 (RV515 7146) 20090101 x86/MMX+/3DNow!+/SSE2 TCL DRI2 supported 1 ATI RV515 -DRI R300 Project Mesa DRI R300 (RV515 7146) 20090101 x86/MMX/SSE2 TCL DRI2 supported 1 ATI RV515 -DRI R300 Project Mesa DRI R300 (RV515 7149) 20090101 x86/MMX/SSE2 TCL DRI2 supported 1 ATI RV515 -DRI R300 Project Mesa DRI R300 (RV515 714A) 20090101 x86/MMX/SSE2 TCL supported 1 ATI RV515 -DRI R300 Project Mesa DRI R300 (RV515 714A) 20090101 x86/MMX/SSE2 TCL DRI2 supported 1 ATI RV515 -DRI R300 Project Mesa DRI R300 (RV530 71C4) 20090101 x86/MMX/SSE2 TCL DRI2 supported 1 ATI RV530 -GPU_CLASS_UNKNOWN NO MATCH -Humper 3D-Analyze v2.3 - http://www.tommti-systems.com supported 0 Humper -Humper Chromium supported 0 Humper -Imagination Technologies PowerVR SGX545 NO MATCH -Intel NO MATCH -Intel HD Graphics Family supported 2 Intel HD Graphics -Intel 3D-Analyze v2.2 - http://www.tommti-systems.com NO MATCH -Intel 3D-Analyze v2.3 - http://www.tommti-systems.com NO MATCH -Intel 4 Series Internal Chipset NO MATCH -Intel 830M unsupported 0 Intel 830M -Intel 845G unsupported 0 Intel 845G -Intel 855GM unsupported 0 Intel 855GM -Intel 865G unsupported 0 Intel 865G -Intel 915G unsupported 0 Intel 915G -Intel 915GM unsupported 0 Intel 915GM -Intel 945G supported 0 Intel 945G -Intel 945GM supported 0 Intel 945GM -Intel 950 supported 0 Intel 950 -Intel 965 supported 0 Intel 965 -Intel B43 Express Chipset NO MATCH -Intel Bear Lake unsupported 0 Intel Bear Lake -Intel Broadwater unsupported 0 Intel Broadwater -Intel Brookdale unsupported 0 Intel Brookdale -Intel Cantiga unsupported 0 Intel Cantiga -Intel EMGD on PowerVR SGX535 NO MATCH -Intel Eaglelake supported 0 Intel Eaglelake -Intel Familia Mobile 45 Express Chipset (Microsoft Corporation - WDDM 1.1) NO MATCH -Intel G33 unsupported 0 Intel G33 -Intel G41 supported 0 Intel G41 -Intel G41 Express Chipset supported 0 Intel G41 -Intel G45 supported 0 Intel G45 -Intel G45/G43 Express Chipset supported 0 Intel G45 -Intel Graphics Media Accelerator HD supported 0 Intel Graphics Media HD -Intel HD Graphics supported 2 Intel HD Graphics -Intel HD Graphics 100 supported 2 Intel HD Graphics -Intel HD Graphics 200 supported 2 Intel HD Graphics -Intel HD Graphics 200 BR-1101-00SH supported 2 Intel HD Graphics -Intel HD Graphics 200 BR-1101-00SJ supported 2 Intel HD Graphics -Intel HD Graphics 200 BR-1101-00SK supported 2 Intel HD Graphics -Intel HD Graphics 200 BR-1101-01M5 supported 2 Intel HD Graphics -Intel HD Graphics 200 BR-1101-01M6 supported 2 Intel HD Graphics -Intel HD Graphics BR-1004-01Y1 supported 2 Intel HD Graphics -Intel HD Graphics BR-1006-0364 supported 2 Intel HD Graphics -Intel HD Graphics BR-1006-0365 supported 2 Intel HD Graphics -Intel HD Graphics BR-1006-0366 supported 2 Intel HD Graphics -Intel HD Graphics BR-1007-02G4 supported 2 Intel HD Graphics -Intel HD Graphics BR-1101-04SY supported 2 Intel HD Graphics -Intel HD Graphics BR-1101-04SZ supported 2 Intel HD Graphics -Intel HD Graphics BR-1101-04T0 supported 2 Intel HD Graphics -Intel HD Graphics BR-1101-04T9 supported 2 Intel HD Graphics -Intel HD Graphics Family supported 2 Intel HD Graphics -Intel HD Graphics Family BR-1012-00Y8 supported 2 Intel HD Graphics -Intel HD Graphics Family BR-1012-00YF supported 2 Intel HD Graphics -Intel HD Graphics Family BR-1012-00ZD supported 2 Intel HD Graphics -Intel HD Graphics Family BR-1102-00ML supported 2 Intel HD Graphics -Intel Inc. Intel GMA 900 OpenGL Engine NO MATCH -Intel Inc. Intel GMA 950 OpenGL Engine supported 0 Intel 950 -Intel Inc. Intel GMA X3100 OpenGL Engine supported 0 Intel X3100 -Intel Inc. Intel HD Graphics 3000 OpenGL Engine supported 2 Intel HD Graphics -Intel Inc. Intel HD Graphics OpenGL Engine supported 2 Intel HD Graphics -Intel Inc. Intel HD xxxx OpenGL Engine NO MATCH -Intel Intel 845G unsupported 0 Intel 845G -Intel Intel 855GM unsupported 0 Intel 855GM -Intel Intel 865G unsupported 0 Intel 865G -Intel Intel 915G unsupported 0 Intel 915G -Intel Intel 915GM unsupported 0 Intel 915GM -Intel Intel 945G supported 0 Intel 945G -Intel Intel 945GM supported 0 Intel 945GM -Intel Intel 965/963 Graphics Media Accelerator supported 0 Intel 965 -Intel Intel Bear Lake B unsupported 0 Intel Bear Lake -Intel Intel Broadwater G unsupported 0 Intel Broadwater -Intel Intel Brookdale-G unsupported 0 Intel Brookdale -Intel Intel Calistoga NO MATCH -Intel Intel Cantiga unsupported 0 Intel Cantiga -Intel Intel Eaglelake supported 0 Intel Eaglelake -Intel Intel Generic Renderer NO MATCH -Intel Intel Grantsdale-G NO MATCH -Intel Intel HD Graphics 3000 supported 2 Intel HD Graphics -Intel Intel Lakeport NO MATCH -Intel Intel Montara-GM unsupported 0 Intel Montara -Intel Intel Pineview Platform supported 0 Intel Pineview -Intel Intel Springdale-G unsupported 0 Intel Springdale -Intel Mobile - famiglia Express Chipset 45 (Microsoft Corporation - WDDM 1.1) NO MATCH -Intel Mobile 4 Series supported 0 Intel Mobile 4 Series -Intel Mobile 4 Series Express Chipset Family supported 0 Intel Mobile 4 Series -Intel Mobile 45 Express Chipset Family NO MATCH -Intel Mobile 45 Express Chipset Family (Microsoft Corporation - WDDM 1.1) NO MATCH -Intel Mobile HD Graphics supported 2 Intel HD Graphics -Intel Mobile Intel(R) 4 Series Express Chipset Family supported 0 Intel Mobile 4 Series -Intel Mobile SandyBridge HD Graphics supported 2 Intel HD Graphics -Intel Montara unsupported 0 Intel Montara -Intel Pineview supported 0 Intel Pineview -Intel Q45/Q43 Express Chipset NO MATCH -Intel Royal BNA Driver NO MATCH -Intel SandyBridge HD Graphics supported 2 Intel HD Graphics -Intel SandyBridge HD Graphics BR-1006-00V8 supported 2 Intel HD Graphics -Intel Springdale unsupported 0 Intel Springdale -Intel X3100 supported 0 Intel X3100 -Intergraph wcgdrv 06.05.06.18 NO MATCH -Intergraph wcgdrv 06.06.00.35 NO MATCH -LegendgrafiX Mobile 945 Express C/TitaniumGL/GAC/D3D ACCELERATION/6x86/1 THREADs | http://Legendgra... NO MATCH -LegendgrafiX NVIDIA GeForce GT 430/TitaniumGL/GAC/D3D ACCELERATION/6x86/1 THREADs | http://Legendgr... supported 3 NVIDIA GT 430M -Linden Lab Headless NO MATCH -Matrox unsupported 0 Matrox -Mesa unsupported 0 Mesa -Mesa Project Software Rasterizer unsupported 0 Mesa -NVIDIA /PCI/SSE2 NO MATCH -NVIDIA /PCI/SSE2/3DNOW! NO MATCH -NVIDIA 205 supported 0 NVIDIA G 205M -NVIDIA 210 supported 1 NVIDIA G 210 -NVIDIA 310 supported 2 NVIDIA G 310M -NVIDIA 310M supported 2 NVIDIA G 310M -NVIDIA 315 supported 2 NVIDIA G 315 -NVIDIA 315M supported 2 NVIDIA G 315 -NVIDIA 320M supported 2 NVIDIA G 320M -NVIDIA C51 supported 0 NVIDIA C51 -NVIDIA Corporation GeForce GT 230/PCI/SSE2 supported 2 NVIDIA GT 230M -NVIDIA Corporation GeForce GTX 285/PCI/SSE2 supported 3 NVIDIA GTX 285 -NVIDIA D10M2-20/PCI/SSE2 NO MATCH -NVIDIA D10P1-25/PCI/SSE2 NO MATCH -NVIDIA D10P1-25/PCI/SSE2/3DNOW! NO MATCH -NVIDIA D10P1-30/PCI/SSE2 NO MATCH -NVIDIA D10P2-50/PCI/SSE2 NO MATCH -NVIDIA D11M2-30/PCI/SSE2 NO MATCH -NVIDIA D12-P1-35/PCI/SSE2 NO MATCH -NVIDIA D12U-15/PCI/SSE2 NO MATCH -NVIDIA D13M1-40/PCI/SSE2 NO MATCH -NVIDIA D13P1-40/PCI/SSE2 NO MATCH -NVIDIA D13P1-40/PCI/SSE2/3DNOW! NO MATCH -NVIDIA D13U-10/PCI/SSE2 NO MATCH -NVIDIA D13U/PCI/SSE2 NO MATCH -NVIDIA D9M supported 1 NVIDIA D9M -NVIDIA D9M-20/PCI/SSE2 supported 1 NVIDIA D9M -NVIDIA Entry Graphics/PCI/SSE2 NO MATCH -NVIDIA Entry Graphics/PCI/SSE2/3DNOW! NO MATCH -NVIDIA G 102M supported 0 NVIDIA G102M -NVIDIA G 103M supported 0 NVIDIA G103M -NVIDIA G 105M supported 0 NVIDIA G105M -NVIDIA G 110M supported 0 NVIDIA G 110M -NVIDIA G100 supported 0 NVIDIA G100 -NVIDIA G102M supported 0 NVIDIA G102M -NVIDIA G103M supported 0 NVIDIA G103M -NVIDIA G105M supported 0 NVIDIA G105M -NVIDIA G210 supported 1 NVIDIA G 210 -NVIDIA G210M supported 1 NVIDIA G 210 -NVIDIA G70/PCI/SSE2 NO MATCH -NVIDIA G72 supported 1 NVIDIA G72 -NVIDIA G73 supported 1 NVIDIA G73 -NVIDIA G84 supported 2 NVIDIA G84 -NVIDIA G86 supported 3 NVIDIA G86 -NVIDIA G92 supported 3 NVIDIA G92 -NVIDIA G92-200/PCI/SSE2 supported 0 NVIDIA G 200 -NVIDIA G94 supported 3 NVIDIA G94 -NVIDIA G96/PCI/SSE2 NO MATCH -NVIDIA G98/PCI/SSE2 NO MATCH -NVIDIA G98/PCI/SSE2/3DNOW! NO MATCH -NVIDIA GT 120 supported 2 NVIDIA GT 120M -NVIDIA GT 130 supported 2 NVIDIA GT 130M -NVIDIA GT 130M supported 2 NVIDIA GT 130M -NVIDIA GT 140 supported 2 NVIDIA GT 140M -NVIDIA GT 150 supported 2 NVIDIA GT 150M -NVIDIA GT 160M supported 2 NVIDIA GT 160M -NVIDIA GT 220 supported 2 NVIDIA GT 220M -NVIDIA GT 220/PCI/SSE2 supported 2 NVIDIA GT 220M -NVIDIA GT 220/PCI/SSE2/3DNOW! supported 2 NVIDIA GT 220M -NVIDIA GT 230 supported 2 NVIDIA GT 230M -NVIDIA GT 230M supported 2 NVIDIA GT 230M -NVIDIA GT 240 supported 2 NVIDIA GT 240M -NVIDIA GT 240M supported 2 NVIDIA GT 240M -NVIDIA GT 250M supported 2 NVIDIA GT 250M -NVIDIA GT 260M supported 2 NVIDIA GT 260M -NVIDIA GT 320 supported 2 NVIDIA G 320M -NVIDIA GT 320M supported 2 NVIDIA G 320M -NVIDIA GT 330 supported 3 NVIDIA GT 330M -NVIDIA GT 330M supported 3 NVIDIA GT 330M -NVIDIA GT 340 supported 2 NVIDIA GT 340M -NVIDIA GT 420 supported 2 NVIDIA GT 420M -NVIDIA GT 430 supported 3 NVIDIA GT 430M -NVIDIA GT 440 supported 3 NVIDIA GT 440M -NVIDIA GT 450 supported 3 NVIDIA GT 450M -NVIDIA GT 520 supported 3 NVIDIA GT 520M -NVIDIA GT 540 supported 3 NVIDIA GT 540M -NVIDIA GT 540M supported 3 NVIDIA GT 540M -NVIDIA GT-120 supported 2 NVIDIA GT 120 -NVIDIA GT200/PCI/SSE2 supported 0 NVIDIA G 200 -NVIDIA GTS 150 supported 2 NVIDIA GT 150M -NVIDIA GTS 240 supported 3 NVIDIA GTS 240 -NVIDIA GTS 250 supported 3 NVIDIA GTS 250 -NVIDIA GTS 350M supported 3 NVIDIA GTS 350M -NVIDIA GTS 360 supported 3 NVIDIA GTS 360 -NVIDIA GTS 360M supported 3 NVIDIA GTS 360M -NVIDIA GTS 450 supported 3 NVIDIA GTS 450 -NVIDIA GTX 260 supported 3 NVIDIA GTX 260 -NVIDIA GTX 260M supported 3 NVIDIA GTX 260 -NVIDIA GTX 270 supported 3 NVIDIA GTX 270 -NVIDIA GTX 280 supported 3 NVIDIA GTX 280 -NVIDIA GTX 285 supported 3 NVIDIA GTX 285 -NVIDIA GTX 290 supported 3 NVIDIA GTX 290 -NVIDIA GTX 460 supported 3 NVIDIA GTX 460 -NVIDIA GTX 460M supported 3 NVIDIA GTX 460M -NVIDIA GTX 465 supported 3 NVIDIA GTX 465 -NVIDIA GTX 470 supported 3 NVIDIA GTX 470 -NVIDIA GTX 470M supported 3 NVIDIA GTX 470M -NVIDIA GTX 480 supported 3 NVIDIA GTX 480 -NVIDIA GTX 480M supported 3 NVIDIA GTX 480M -NVIDIA GTX 550 Ti supported 3 NVIDIA GTX 550 -NVIDIA GTX 560 supported 3 NVIDIA GTX 560 -NVIDIA GTX 560 Ti supported 3 NVIDIA GTX 560 -NVIDIA GTX 570 supported 3 NVIDIA GTX 570 -NVIDIA GTX 580 supported 3 NVIDIA GTX 580 -NVIDIA GTX 590 supported 3 NVIDIA GTX 590 -NVIDIA GeForce NO MATCH -NVIDIA GeForce 2 supported 0 NVIDIA GeForce 2 -NVIDIA GeForce 205/PCI/SSE2 supported 2 NVIDIA 205 -NVIDIA GeForce 210 supported 2 NVIDIA 210 -NVIDIA GeForce 210/PCI/SSE2 supported 2 NVIDIA 210 -NVIDIA GeForce 210/PCI/SSE2/3DNOW! supported 2 NVIDIA 210 -NVIDIA GeForce 3 supported 0 NVIDIA GeForce 3 -NVIDIA GeForce 305M/PCI/SSE2 supported 1 NVIDIA 305M -NVIDIA GeForce 310/PCI/SSE2 supported 3 NVIDIA 310 -NVIDIA GeForce 310/PCI/SSE2/3DNOW! supported 3 NVIDIA 310 -NVIDIA GeForce 310M/PCI/SSE2 supported 1 NVIDIA 310M -NVIDIA GeForce 315/PCI/SSE2 supported 3 NVIDIA 315 -NVIDIA GeForce 315/PCI/SSE2/3DNOW! supported 3 NVIDIA 315 -NVIDIA GeForce 315M/PCI/SSE2 supported 2 NVIDIA 315M -NVIDIA GeForce 320M/PCI/SSE2 supported 2 NVIDIA 320M -NVIDIA GeForce 4 Go supported 0 NVIDIA GeForce 4 -NVIDIA GeForce 4 MX supported 0 NVIDIA GeForce 4 -NVIDIA GeForce 4 Ti supported 0 NVIDIA GeForce 4 -NVIDIA GeForce 405/PCI/SSE2 supported 1 NVIDIA G 405 -NVIDIA GeForce 410M/PCI/SSE2 supported 1 NVIDIA G 410M -NVIDIA GeForce 6100 supported 0 NVIDIA G100 -NVIDIA GeForce 6100 nForce 400/PCI/SSE2/3DNOW! supported 0 NVIDIA G100 -NVIDIA GeForce 6100 nForce 405/PCI/SSE2 supported 0 NVIDIA G100 -NVIDIA GeForce 6100 nForce 405/PCI/SSE2/3DNOW! supported 0 NVIDIA G100 -NVIDIA GeForce 6100 nForce 420/PCI/SSE2/3DNOW! supported 0 NVIDIA G100 -NVIDIA GeForce 6100 nForce 430/PCI/SSE2/3DNOW! supported 0 NVIDIA G100 -NVIDIA GeForce 6100/PCI/SSE2/3DNOW! supported 0 NVIDIA G100 -NVIDIA GeForce 6150 LE/PCI/SSE2/3DNOW! supported 0 NVIDIA GeForce 6100 -NVIDIA GeForce 6150/PCI/SSE2 supported 0 NVIDIA GeForce 6100 -NVIDIA GeForce 6150/PCI/SSE2/3DNOW! supported 0 NVIDIA GeForce 6100 -NVIDIA GeForce 6150SE nForce 430/PCI/SSE2 supported 0 NVIDIA GeForce 6100 -NVIDIA GeForce 6150SE nForce 430/PCI/SSE2/3DNOW! supported 0 NVIDIA GeForce 6100 -NVIDIA GeForce 6150SE/PCI/SSE2/3DNOW! supported 0 NVIDIA GeForce 6100 -NVIDIA GeForce 6200 supported 0 NVIDIA G 200 -NVIDIA GeForce 6200 A-LE/AGP/SSE/3DNOW! supported 0 NVIDIA G 200 -NVIDIA GeForce 6200 A-LE/AGP/SSE2 supported 0 NVIDIA G 200 -NVIDIA GeForce 6200 A-LE/AGP/SSE2/3DNOW! supported 0 NVIDIA G 200 -NVIDIA GeForce 6200 LE/PCI/SSE2 supported 0 NVIDIA G 200 -NVIDIA GeForce 6200 LE/PCI/SSE2/3DNOW! supported 0 NVIDIA G 200 -NVIDIA GeForce 6200 TurboCache(TM)/PCI/SSE2 supported 0 NVIDIA G 200 -NVIDIA GeForce 6200 TurboCache(TM)/PCI/SSE2/3DNOW! supported 0 NVIDIA G 200 -NVIDIA GeForce 6200/AGP/SSE/3DNOW! supported 0 NVIDIA G 200 -NVIDIA GeForce 6200/AGP/SSE2 supported 0 NVIDIA G 200 -NVIDIA GeForce 6200/AGP/SSE2/3DNOW! supported 0 NVIDIA G 200 -NVIDIA GeForce 6200/PCI/SSE/3DNOW! supported 0 NVIDIA G 200 -NVIDIA GeForce 6200/PCI/SSE2 supported 0 NVIDIA G 200 -NVIDIA GeForce 6200/PCI/SSE2/3DNOW! supported 0 NVIDIA G 200 -NVIDIA GeForce 6200SE TurboCache(TM)/PCI/SSE2/3DNOW! supported 0 NVIDIA G 200 -NVIDIA GeForce 6500 supported 0 NVIDIA GeForce 6500 -NVIDIA GeForce 6500/PCI/SSE2 supported 0 NVIDIA GeForce 6500 -NVIDIA GeForce 6600 supported 1 NVIDIA GeForce 6600 -NVIDIA GeForce 6600 GT/AGP/SSE/3DNOW! supported 1 NVIDIA GeForce 6600 -NVIDIA GeForce 6600 GT/AGP/SSE2 supported 1 NVIDIA GeForce 6600 -NVIDIA GeForce 6600 GT/PCI/SSE/3DNOW! supported 1 NVIDIA GeForce 6600 -NVIDIA GeForce 6600 GT/PCI/SSE2 supported 1 NVIDIA GeForce 6600 -NVIDIA GeForce 6600 GT/PCI/SSE2/3DNOW! supported 1 NVIDIA GeForce 6600 -NVIDIA GeForce 6600 LE/PCI/SSE2 supported 1 NVIDIA GeForce 6600 -NVIDIA GeForce 6600/AGP/SSE/3DNOW! supported 1 NVIDIA GeForce 6600 -NVIDIA GeForce 6600/AGP/SSE2 supported 1 NVIDIA GeForce 6600 -NVIDIA GeForce 6600/AGP/SSE2/3DNOW! supported 1 NVIDIA GeForce 6600 -NVIDIA GeForce 6600/PCI/SSE2 supported 1 NVIDIA GeForce 6600 -NVIDIA GeForce 6600/PCI/SSE2/3DNOW! supported 1 NVIDIA GeForce 6600 -NVIDIA GeForce 6700 supported 2 NVIDIA GeForce 6700 -NVIDIA GeForce 6800 supported 2 NVIDIA GeForce 6800 -NVIDIA GeForce 6800 GS/PCI/SSE2 supported 2 NVIDIA GeForce 6800 -NVIDIA GeForce 6800 GS/PCI/SSE2/3DNOW! supported 2 NVIDIA GeForce 6800 -NVIDIA GeForce 6800 GT/AGP/SSE2 supported 2 NVIDIA GeForce 6800 -NVIDIA GeForce 6800 GT/PCI/SSE2 supported 2 NVIDIA GeForce 6800 -NVIDIA GeForce 6800 XT/AGP/SSE2 supported 2 NVIDIA GeForce 6800 -NVIDIA GeForce 6800 XT/PCI/SSE2 supported 2 NVIDIA GeForce 6800 -NVIDIA GeForce 6800 XT/PCI/SSE2/3DNOW! supported 2 NVIDIA GeForce 6800 -NVIDIA GeForce 6800/PCI/SSE2 supported 2 NVIDIA GeForce 6800 -NVIDIA GeForce 6800/PCI/SSE2/3DNOW! supported 2 NVIDIA GeForce 6800 -NVIDIA GeForce 7000 supported 0 NVIDIA GeForce 7000 -NVIDIA GeForce 7000M supported 0 NVIDIA GeForce 7000 -NVIDIA GeForce 7000M / nForce 610M/PCI/SSE2 supported 0 NVIDIA GeForce 7000 -NVIDIA GeForce 7000M / nForce 610M/PCI/SSE2/3DNOW! supported 0 NVIDIA GeForce 7000 -NVIDIA GeForce 7025 / NVIDIA nForce 630a/PCI/SSE2/3DNOW! supported 0 NVIDIA GeForce 7000 -NVIDIA GeForce 7025 / nForce 630a/PCI/SSE2 supported 0 NVIDIA GeForce 7000 -NVIDIA GeForce 7025 / nForce 630a/PCI/SSE2/3DNOW! supported 0 NVIDIA GeForce 7000 -NVIDIA GeForce 7050 / NVIDIA nForce 610i/PCI/SSE2 supported 0 NVIDIA GeForce 7000 -NVIDIA GeForce 7050 / NVIDIA nForce 620i/PCI/SSE2 supported 0 NVIDIA GeForce 7000 -NVIDIA GeForce 7050 / nForce 610i/PCI/SSE2 supported 0 NVIDIA GeForce 7000 -NVIDIA GeForce 7050 / nForce 620i/PCI/SSE2 supported 0 NVIDIA GeForce 7000 -NVIDIA GeForce 7050 PV / NVIDIA nForce 630a/PCI/SSE2/3DNOW! supported 0 NVIDIA GeForce 7000 -NVIDIA GeForce 7050 PV / nForce 630a/PCI/SSE2 supported 0 NVIDIA GeForce 7000 -NVIDIA GeForce 7050 PV / nForce 630a/PCI/SSE2/3DNOW! supported 0 NVIDIA GeForce 7000 -NVIDIA GeForce 7050 SE / NVIDIA nForce 630a/PCI/SSE2/3DNOW! supported 0 NVIDIA GeForce 7000 -NVIDIA GeForce 7100 supported 0 NVIDIA G100 -NVIDIA GeForce 7100 / NVIDIA nForce 620i/PCI/SSE2 supported 0 NVIDIA G100 -NVIDIA GeForce 7100 / NVIDIA nForce 630i/PCI/SSE2 supported 0 NVIDIA G100 -NVIDIA GeForce 7100 / nForce 630i/PCI/SSE2 supported 0 NVIDIA G100 -NVIDIA GeForce 7100 GS/PCI/SSE2 supported 0 NVIDIA G100 -NVIDIA GeForce 7100 GS/PCI/SSE2/3DNOW! supported 0 NVIDIA G100 -NVIDIA GeForce 7150M / nForce 630M/PCI/SSE2 supported 0 NVIDIA GeForce 7100 -NVIDIA GeForce 7150M / nForce 630M/PCI/SSE2/3DNOW! supported 0 NVIDIA GeForce 7100 -NVIDIA GeForce 7300 supported 1 NVIDIA GeForce 7300 -NVIDIA GeForce 7300 GS/PCI/SSE2 supported 1 NVIDIA GeForce 7300 -NVIDIA GeForce 7300 GS/PCI/SSE2/3DNOW! supported 1 NVIDIA GeForce 7300 -NVIDIA GeForce 7300 GT/AGP/SSE2 supported 1 NVIDIA GeForce 7300 -NVIDIA GeForce 7300 GT/AGP/SSE2/3DNOW! supported 1 NVIDIA GeForce 7300 -NVIDIA GeForce 7300 GT/PCI/SSE2 supported 1 NVIDIA GeForce 7300 -NVIDIA GeForce 7300 GT/PCI/SSE2/3DNOW! supported 1 NVIDIA GeForce 7300 -NVIDIA GeForce 7300 LE/PCI/SSE2 supported 1 NVIDIA GeForce 7300 -NVIDIA GeForce 7300 LE/PCI/SSE2/3DNOW! supported 1 NVIDIA GeForce 7300 -NVIDIA GeForce 7300 SE/7200 GS/PCI/SSE2 supported 0 NVIDIA G 200 -NVIDIA GeForce 7300 SE/7200 GS/PCI/SSE2/3DNOW! supported 0 NVIDIA G 200 -NVIDIA GeForce 7300 SE/PCI/SSE2 supported 1 NVIDIA GeForce 7300 -NVIDIA GeForce 7300 SE/PCI/SSE2/3DNOW! supported 1 NVIDIA GeForce 7300 -NVIDIA GeForce 7350 LE/PCI/SSE2 supported 1 NVIDIA GeForce 7300 -NVIDIA GeForce 7500 supported 1 NVIDIA GeForce 7500 -NVIDIA GeForce 7500 LE/PCI/SSE2 supported 1 NVIDIA GeForce 7500 -NVIDIA GeForce 7500 LE/PCI/SSE2/3DNOW! supported 1 NVIDIA GeForce 7500 -NVIDIA GeForce 7600 supported 2 NVIDIA GeForce 7600 -NVIDIA GeForce 7600 GS/AGP/SSE2 supported 2 NVIDIA GeForce 7600 -NVIDIA GeForce 7600 GS/AGP/SSE2/3DNOW! supported 2 NVIDIA GeForce 7600 -NVIDIA GeForce 7600 GS/PCI/SSE2 supported 2 NVIDIA GeForce 7600 -NVIDIA GeForce 7600 GS/PCI/SSE2/3DNOW! supported 2 NVIDIA GeForce 7600 -NVIDIA GeForce 7600 GT/AGP/SSE/3DNOW! supported 2 NVIDIA GeForce 7600 -NVIDIA GeForce 7600 GT/AGP/SSE2 supported 2 NVIDIA GeForce 7600 -NVIDIA GeForce 7600 GT/PCI/SSE2 supported 2 NVIDIA GeForce 7600 -NVIDIA GeForce 7600 GT/PCI/SSE2/3DNOW! supported 2 NVIDIA GeForce 7600 -NVIDIA GeForce 7650 GS/PCI/SSE2 supported 2 NVIDIA GeForce 7600 -NVIDIA GeForce 7800 supported 2 NVIDIA GeForce 7800 -NVIDIA GeForce 7800 GS/AGP/SSE2 supported 2 NVIDIA GeForce 7800 -NVIDIA GeForce 7800 GS/AGP/SSE2/3DNOW! supported 2 NVIDIA GeForce 7800 -NVIDIA GeForce 7800 GT/PCI/SSE2 supported 2 NVIDIA GeForce 7800 -NVIDIA GeForce 7800 GT/PCI/SSE2/3DNOW! supported 2 NVIDIA GeForce 7800 -NVIDIA GeForce 7800 GTX/PCI/SSE2 supported 2 NVIDIA GeForce 7800 -NVIDIA GeForce 7800 GTX/PCI/SSE2/3DNOW! supported 2 NVIDIA GeForce 7800 -NVIDIA GeForce 7900 supported 2 NVIDIA GeForce 7900 -NVIDIA GeForce 7900 GS/PCI/SSE2 supported 2 NVIDIA GeForce 7900 -NVIDIA GeForce 7900 GS/PCI/SSE2/3DNOW! supported 2 NVIDIA GeForce 7900 -NVIDIA GeForce 7900 GT/GTO/PCI/SSE2 supported 2 NVIDIA GeForce 7900 -NVIDIA GeForce 7900 GT/GTO/PCI/SSE2/3DNOW! supported 2 NVIDIA GeForce 7900 -NVIDIA GeForce 7900 GT/PCI/SSE2/3DNOW! supported 2 NVIDIA GeForce 7900 -NVIDIA GeForce 7900 GTX/PCI/SSE2 supported 2 NVIDIA GeForce 7900 -NVIDIA GeForce 7950 GT/PCI/SSE2 supported 2 NVIDIA GeForce 7900 -NVIDIA GeForce 7950 GT/PCI/SSE2/3DNOW! supported 2 NVIDIA GeForce 7900 -NVIDIA GeForce 8100 supported 0 NVIDIA G100 -NVIDIA GeForce 8100 / nForce 720a/PCI/SSE2/3DNOW! supported 0 NVIDIA G100 -NVIDIA GeForce 8200 supported 0 NVIDIA G 200 -NVIDIA GeForce 8200/PCI/SSE2 supported 0 NVIDIA G 200 -NVIDIA GeForce 8200/PCI/SSE2/3DNOW! supported 0 NVIDIA G 200 -NVIDIA GeForce 8200M supported 0 NVIDIA G 200 -NVIDIA GeForce 8200M G/PCI/SSE2 supported 0 NVIDIA G 200 -NVIDIA GeForce 8200M G/PCI/SSE2/3DNOW! supported 0 NVIDIA G 200 -NVIDIA GeForce 8300 supported 1 NVIDIA GeForce 8300 -NVIDIA GeForce 8300 GS/PCI/SSE2 supported 1 NVIDIA GeForce 8300 -NVIDIA GeForce 8400 supported 1 NVIDIA GeForce 8400 -NVIDIA GeForce 8400 GS/PCI/SSE/3DNOW! supported 1 NVIDIA GeForce 8400 -NVIDIA GeForce 8400 GS/PCI/SSE2 supported 1 NVIDIA GeForce 8400 -NVIDIA GeForce 8400 GS/PCI/SSE2/3DNOW! supported 1 NVIDIA GeForce 8400 -NVIDIA GeForce 8400/PCI/SSE2/3DNOW! supported 1 NVIDIA GeForce 8400 -NVIDIA GeForce 8400GS/PCI/SSE2 supported 1 NVIDIA GeForce 8400 -NVIDIA GeForce 8400GS/PCI/SSE2/3DNOW! supported 1 NVIDIA GeForce 8400 -NVIDIA GeForce 8400M supported 1 NVIDIA GeForce 8400M -NVIDIA GeForce 8400M G/PCI/SSE2 supported 1 NVIDIA GeForce 8400M -NVIDIA GeForce 8400M G/PCI/SSE2/3DNOW! supported 1 NVIDIA GeForce 8400M -NVIDIA GeForce 8400M GS/PCI/SSE2 supported 1 NVIDIA GeForce 8400M -NVIDIA GeForce 8400M GS/PCI/SSE2/3DNOW! supported 1 NVIDIA GeForce 8400M -NVIDIA GeForce 8400M GT/PCI/SSE2 supported 1 NVIDIA GeForce 8400M -NVIDIA GeForce 8500 supported 3 NVIDIA GeForce 8500 -NVIDIA GeForce 8500 GT/PCI/SSE2 supported 3 NVIDIA GeForce 8500 -NVIDIA GeForce 8500 GT/PCI/SSE2/3DNOW! supported 3 NVIDIA GeForce 8500 -NVIDIA GeForce 8600 supported 3 NVIDIA GeForce 8600 -NVIDIA GeForce 8600 GS/PCI/SSE2 supported 3 NVIDIA GeForce 8600 -NVIDIA GeForce 8600 GS/PCI/SSE2/3DNOW! supported 3 NVIDIA GeForce 8600 -NVIDIA GeForce 8600 GT/PCI/SSE2 supported 3 NVIDIA GeForce 8600 -NVIDIA GeForce 8600 GT/PCI/SSE2/3DNOW! supported 3 NVIDIA GeForce 8600 -NVIDIA GeForce 8600 GTS/PCI/SSE2 supported 3 NVIDIA GeForce 8600 -NVIDIA GeForce 8600 GTS/PCI/SSE2/3DNOW! supported 3 NVIDIA GeForce 8600 -NVIDIA GeForce 8600GS/PCI/SSE2 supported 3 NVIDIA GeForce 8600 -NVIDIA GeForce 8600M supported 1 NVIDIA GeForce 8600M -NVIDIA GeForce 8600M GS/PCI/SSE2 supported 1 NVIDIA GeForce 8600M -NVIDIA GeForce 8600M GS/PCI/SSE2/3DNOW! supported 1 NVIDIA GeForce 8600M -NVIDIA GeForce 8600M GT/PCI/SSE2 supported 1 NVIDIA GeForce 8600M -NVIDIA GeForce 8700 supported 3 NVIDIA GeForce 8700 -NVIDIA GeForce 8700M supported 3 NVIDIA GeForce 8700M -NVIDIA GeForce 8700M GT/PCI/SSE2 supported 3 NVIDIA GeForce 8700M -NVIDIA GeForce 8800 supported 3 NVIDIA GeForce 8800 -NVIDIA GeForce 8800 GS/PCI/SSE2 supported 3 NVIDIA GeForce 8800 -NVIDIA GeForce 8800 GT/PCI/SSE2 supported 3 NVIDIA GeForce 8800 -NVIDIA GeForce 8800 GT/PCI/SSE2/3DNOW! supported 3 NVIDIA GeForce 8800 -NVIDIA GeForce 8800 GTS 512/PCI/SSE2 supported 3 NVIDIA GeForce 8800 -NVIDIA GeForce 8800 GTS 512/PCI/SSE2/3DNOW! supported 3 NVIDIA GeForce 8800 -NVIDIA GeForce 8800 GTS/PCI/SSE2 supported 3 NVIDIA GeForce 8800 -NVIDIA GeForce 8800 GTS/PCI/SSE2/3DNOW! supported 3 NVIDIA GeForce 8800 -NVIDIA GeForce 8800 GTX/PCI/SSE2 supported 3 NVIDIA GeForce 8800 -NVIDIA GeForce 8800 Ultra/PCI/SSE2 supported 3 NVIDIA GeForce 8800 -NVIDIA GeForce 8800M GTS/PCI/SSE2 supported 3 NVIDIA GeForce 8800M -NVIDIA GeForce 8800M GTX/PCI/SSE2 supported 3 NVIDIA GeForce 8800M -NVIDIA GeForce 9100 supported 0 NVIDIA G100 -NVIDIA GeForce 9100/PCI/SSE2 supported 0 NVIDIA G100 -NVIDIA GeForce 9100/PCI/SSE2/3DNOW! supported 0 NVIDIA G100 -NVIDIA GeForce 9100M supported 0 NVIDIA G100M -NVIDIA GeForce 9100M G/PCI/SSE2 supported 0 NVIDIA G100M -NVIDIA GeForce 9100M G/PCI/SSE2/3DNOW! supported 0 NVIDIA G100M -NVIDIA GeForce 9200 supported 0 NVIDIA G 200 -NVIDIA GeForce 9200/PCI/SSE2 supported 0 NVIDIA G 200 -NVIDIA GeForce 9200/PCI/SSE2/3DNOW! supported 0 NVIDIA G 200 -NVIDIA GeForce 9200M GE/PCI/SSE2 supported 0 NVIDIA G 200 -NVIDIA GeForce 9200M GS/PCI/SSE2 supported 0 NVIDIA G 200 -NVIDIA GeForce 9300 supported 1 NVIDIA GeForce 9300 -NVIDIA GeForce 9300 / nForce 730i/PCI/SSE2 supported 1 NVIDIA GeForce 9300 -NVIDIA GeForce 9300 GE/PCI/SSE2 supported 1 NVIDIA GeForce 9300 -NVIDIA GeForce 9300 GE/PCI/SSE2/3DNOW! supported 1 NVIDIA GeForce 9300 -NVIDIA GeForce 9300 GS/PCI/SSE2 supported 1 NVIDIA GeForce 9300 -NVIDIA GeForce 9300 GS/PCI/SSE2/3DNOW! supported 1 NVIDIA GeForce 9300 -NVIDIA GeForce 9300 SE/PCI/SSE2 supported 1 NVIDIA GeForce 9300 -NVIDIA GeForce 9300M supported 1 NVIDIA GeForce 9300M -NVIDIA GeForce 9300M G/PCI/SSE2 supported 1 NVIDIA GeForce 9300M -NVIDIA GeForce 9300M G/PCI/SSE2/3DNOW! supported 1 NVIDIA GeForce 9300M -NVIDIA GeForce 9300M GS/PCI/SSE2 supported 1 NVIDIA GeForce 9300M -NVIDIA GeForce 9300M GS/PCI/SSE2/3DNOW! supported 1 NVIDIA GeForce 9300M -NVIDIA GeForce 9400 supported 1 NVIDIA GeForce 9400 -NVIDIA GeForce 9400 GT/PCI/SSE2 supported 1 NVIDIA GeForce 9400 -NVIDIA GeForce 9400 GT/PCI/SSE2/3DNOW! supported 1 NVIDIA GeForce 9400 -NVIDIA GeForce 9400/PCI/SSE2 supported 1 NVIDIA GeForce 9400 -NVIDIA GeForce 9400M supported 1 NVIDIA GeForce 9400M -NVIDIA GeForce 9400M G/PCI/SSE2 supported 1 NVIDIA GeForce 9400M -NVIDIA GeForce 9400M/PCI/SSE2 supported 1 NVIDIA GeForce 9400M -NVIDIA GeForce 9500 supported 2 NVIDIA GeForce 9500 -NVIDIA GeForce 9500 GS/PCI/SSE2 supported 2 NVIDIA GeForce 9500 -NVIDIA GeForce 9500 GS/PCI/SSE2/3DNOW! supported 2 NVIDIA GeForce 9500 -NVIDIA GeForce 9500 GT/PCI/SSE2 supported 2 NVIDIA GeForce 9500 -NVIDIA GeForce 9500 GT/PCI/SSE2/3DNOW! supported 2 NVIDIA GeForce 9500 -NVIDIA GeForce 9500M supported 2 NVIDIA GeForce 9500M -NVIDIA GeForce 9500M GS/PCI/SSE2 supported 2 NVIDIA GeForce 9500M -NVIDIA GeForce 9600 supported 2 NVIDIA GeForce 9600 -NVIDIA GeForce 9600 GS/PCI/SSE2 supported 2 NVIDIA GeForce 9600 -NVIDIA GeForce 9600 GSO 512/PCI/SSE2 supported 2 NVIDIA GeForce 9600 -NVIDIA GeForce 9600 GSO/PCI/SSE2 supported 2 NVIDIA GeForce 9600 -NVIDIA GeForce 9600 GSO/PCI/SSE2/3DNOW! supported 2 NVIDIA GeForce 9600 -NVIDIA GeForce 9600 GT/PCI/SSE2 supported 2 NVIDIA GeForce 9600 -NVIDIA GeForce 9600 GT/PCI/SSE2/3DNOW! supported 2 NVIDIA GeForce 9600 -NVIDIA GeForce 9600M supported 3 NVIDIA GeForce 9600M -NVIDIA GeForce 9600M GS/PCI/SSE2 supported 3 NVIDIA GeForce 9600M -NVIDIA GeForce 9600M GT/PCI/SSE2 supported 3 NVIDIA GeForce 9600M -NVIDIA GeForce 9650M GT/PCI/SSE2 supported 2 NVIDIA GeForce 9600 -NVIDIA GeForce 9700M supported 2 NVIDIA GeForce 9700M -NVIDIA GeForce 9700M GT/PCI/SSE2 supported 2 NVIDIA GeForce 9700M -NVIDIA GeForce 9700M GTS/PCI/SSE2 supported 2 NVIDIA GeForce 9700M -NVIDIA GeForce 9800 supported 3 NVIDIA GeForce 9800 -NVIDIA GeForce 9800 GT/PCI/SSE2 supported 3 NVIDIA GeForce 9800 -NVIDIA GeForce 9800 GT/PCI/SSE2/3DNOW! supported 3 NVIDIA GeForce 9800 -NVIDIA GeForce 9800 GTX+/PCI/SSE2 supported 3 NVIDIA GeForce 9800 -NVIDIA GeForce 9800 GTX+/PCI/SSE2/3DNOW! supported 3 NVIDIA GeForce 9800 -NVIDIA GeForce 9800 GTX/9800 GTX+/PCI/SSE2 supported 3 NVIDIA GeForce 9800 -NVIDIA GeForce 9800 GTX/PCI/SSE2 supported 3 NVIDIA GeForce 9800 -NVIDIA GeForce 9800 GX2/PCI/SSE2 supported 3 NVIDIA GeForce 9800 -NVIDIA GeForce 9800M supported 3 NVIDIA GeForce 9800M -NVIDIA GeForce 9800M GS/PCI/SSE2 supported 3 NVIDIA GeForce 9800M -NVIDIA GeForce 9800M GT/PCI/SSE2 supported 3 NVIDIA GeForce 9800M -NVIDIA GeForce 9800M GTS/PCI/SSE2 supported 3 NVIDIA GeForce 9800M -NVIDIA GeForce FX 5100 supported 0 NVIDIA G100 -NVIDIA GeForce FX 5100/AGP/SSE/3DNOW! supported 0 NVIDIA G100 -NVIDIA GeForce FX 5200 supported 0 NVIDIA G 200 -NVIDIA GeForce FX 5200/AGP/SSE supported 0 NVIDIA G 200 -NVIDIA GeForce FX 5200/AGP/SSE/3DNOW! supported 0 NVIDIA G 200 -NVIDIA GeForce FX 5200/AGP/SSE2 supported 0 NVIDIA G 200 -NVIDIA GeForce FX 5200/AGP/SSE2/3DNOW! supported 0 NVIDIA G 200 -NVIDIA GeForce FX 5200/PCI/SSE2 supported 0 NVIDIA G 200 -NVIDIA GeForce FX 5200/PCI/SSE2/3DNOW! supported 0 NVIDIA G 200 -NVIDIA GeForce FX 5200LE/AGP/SSE2 supported 0 NVIDIA G 200 -NVIDIA GeForce FX 5500 supported 0 NVIDIA GeForce FX 5500 -NVIDIA GeForce FX 5500/AGP/SSE/3DNOW! supported 0 NVIDIA GeForce FX 5500 -NVIDIA GeForce FX 5500/AGP/SSE2 supported 0 NVIDIA GeForce FX 5500 -NVIDIA GeForce FX 5500/AGP/SSE2/3DNOW! supported 0 NVIDIA GeForce FX 5500 -NVIDIA GeForce FX 5500/PCI/SSE2 supported 0 NVIDIA GeForce FX 5500 -NVIDIA GeForce FX 5500/PCI/SSE2/3DNOW! supported 0 NVIDIA GeForce FX 5500 -NVIDIA GeForce FX 5600 supported 0 NVIDIA GeForce FX 5600 -NVIDIA GeForce FX 5600/AGP/SSE2 supported 0 NVIDIA GeForce FX 5600 -NVIDIA GeForce FX 5600/AGP/SSE2/3DNOW! supported 0 NVIDIA GeForce FX 5600 -NVIDIA GeForce FX 5600XT/AGP/SSE2/3DNOW! supported 0 NVIDIA GeForce FX 5600 -NVIDIA GeForce FX 5700 supported 1 NVIDIA GeForce FX 5700 -NVIDIA GeForce FX 5700/AGP/SSE/3DNOW! supported 1 NVIDIA GeForce FX 5700 -NVIDIA GeForce FX 5700LE/AGP/SSE supported 1 NVIDIA GeForce FX 5700 -NVIDIA GeForce FX 5700LE/AGP/SSE/3DNOW! supported 1 NVIDIA GeForce FX 5700 -NVIDIA GeForce FX 5800 supported 1 NVIDIA GeForce FX 5800 -NVIDIA GeForce FX 5900 supported 1 NVIDIA GeForce FX 5900 -NVIDIA GeForce FX 5900/AGP/SSE2 supported 1 NVIDIA GeForce FX 5900 -NVIDIA GeForce FX 5900XT/AGP/SSE2 supported 1 NVIDIA GeForce FX 5900 -NVIDIA GeForce FX Go5100 supported 0 NVIDIA G100 -NVIDIA GeForce FX Go5100/AGP/SSE2 supported 0 NVIDIA G100 -NVIDIA GeForce FX Go5200 supported 0 NVIDIA G 200 -NVIDIA GeForce FX Go5200/AGP/SSE2 supported 0 NVIDIA G 200 -NVIDIA GeForce FX Go5300 supported 0 NVIDIA GeForce FX Go5300 -NVIDIA GeForce FX Go5600 supported 0 NVIDIA GeForce FX Go5600 -NVIDIA GeForce FX Go5600/AGP/SSE2 supported 0 NVIDIA GeForce FX Go5600 -NVIDIA GeForce FX Go5650/AGP/SSE2 supported 0 NVIDIA GeForce FX Go5600 -NVIDIA GeForce FX Go5700 supported 1 NVIDIA GeForce FX Go5700 -NVIDIA GeForce FX Go5700/AGP/SSE2 supported 1 NVIDIA GeForce FX Go5700 -NVIDIA GeForce FX Go5xxx/AGP/SSE2 supported 0 NVIDIA GeForce FX Go5xxx -NVIDIA GeForce G 103M/PCI/SSE2 supported 0 NVIDIA G103M -NVIDIA GeForce G 103M/PCI/SSE2/3DNOW! supported 0 NVIDIA G103M -NVIDIA GeForce G 105M/PCI/SSE2 supported 0 NVIDIA G105M -NVIDIA GeForce G 110M/PCI/SSE2 supported 0 NVIDIA G 110M -NVIDIA GeForce G100/PCI/SSE2 supported 0 NVIDIA G100 -NVIDIA GeForce G100/PCI/SSE2/3DNOW! supported 0 NVIDIA G100 -NVIDIA GeForce G102M/PCI/SSE2 supported 0 NVIDIA G102M -NVIDIA GeForce G105M/PCI/SSE2 supported 0 NVIDIA G105M -NVIDIA GeForce G200/PCI/SSE2 supported 0 NVIDIA G 200 -NVIDIA GeForce G205M/PCI/SSE2 supported 0 NVIDIA G 205M -NVIDIA GeForce G210/PCI/SSE2 supported 1 NVIDIA G 210 -NVIDIA GeForce G210/PCI/SSE2/3DNOW! supported 1 NVIDIA G 210 -NVIDIA GeForce G210M/PCI/SSE2 supported 1 NVIDIA G 210 -NVIDIA GeForce G310M/PCI/SSE2 supported 2 NVIDIA G 310M -NVIDIA GeForce GT 120/PCI/SSE2 supported 2 NVIDIA GT 120M -NVIDIA GeForce GT 120/PCI/SSE2/3DNOW! supported 2 NVIDIA GT 120M -NVIDIA GeForce GT 120M/PCI/SSE2 supported 1 NVIDIA G 120M -NVIDIA GeForce GT 130M/PCI/SSE2 supported 2 NVIDIA GT 130M -NVIDIA GeForce GT 140/PCI/SSE2 supported 2 NVIDIA GT 140M -NVIDIA GeForce GT 220/PCI/SSE2 supported 2 NVIDIA GT 220M -NVIDIA GeForce GT 220/PCI/SSE2/3DNOW! supported 2 NVIDIA GT 220M -NVIDIA GeForce GT 220M/PCI/SSE2 supported 2 NVIDIA GT 220M -NVIDIA GeForce GT 230/PCI/SSE2 supported 2 NVIDIA GT 230M -NVIDIA GeForce GT 230M/PCI/SSE2 supported 2 NVIDIA GT 230M -NVIDIA GeForce GT 240 supported 2 NVIDIA GT 240M -NVIDIA GeForce GT 240/PCI/SSE2 supported 2 NVIDIA GT 240M -NVIDIA GeForce GT 240/PCI/SSE2/3DNOW! supported 2 NVIDIA GT 240M -NVIDIA GeForce GT 240M/PCI/SSE2 supported 2 NVIDIA GT 240M -NVIDIA GeForce GT 320/PCI/SSE2 supported 2 NVIDIA G 320M -NVIDIA GeForce GT 320M/PCI/SSE2 supported 2 NVIDIA G 320M -NVIDIA GeForce GT 325M/PCI/SSE2 supported 0 NVIDIA GT 325M -NVIDIA GeForce GT 330/PCI/SSE2 supported 3 NVIDIA GT 330M -NVIDIA GeForce GT 330/PCI/SSE2/3DNOW! supported 3 NVIDIA GT 330M -NVIDIA GeForce GT 330M/PCI/SSE2 supported 3 NVIDIA GT 330M -NVIDIA GeForce GT 335M/PCI/SSE2 supported 1 NVIDIA GT 335M -NVIDIA GeForce GT 340/PCI/SSE2 supported 2 NVIDIA GT 340M -NVIDIA GeForce GT 340/PCI/SSE2/3DNOW! supported 2 NVIDIA GT 340M -NVIDIA GeForce GT 415M/PCI/SSE2 supported 2 NVIDIA GT 415M -NVIDIA GeForce GT 420/PCI/SSE2 supported 2 NVIDIA GT 420M -NVIDIA GeForce GT 420M/PCI/SSE2 supported 2 NVIDIA GT 420M -NVIDIA GeForce GT 425M/PCI/SSE2 supported 3 NVIDIA GT 425M -NVIDIA GeForce GT 430/PCI/SSE2 supported 3 NVIDIA GT 430M -NVIDIA GeForce GT 430/PCI/SSE2/3DNOW! supported 3 NVIDIA GT 430M -NVIDIA GeForce GT 435M/PCI/SSE2 supported 3 NVIDIA GT 435M -NVIDIA GeForce GT 440/PCI/SSE2 supported 3 NVIDIA GT 440M -NVIDIA GeForce GT 440/PCI/SSE2/3DNOW! supported 3 NVIDIA GT 440M -NVIDIA GeForce GT 445M/PCI/SSE2 supported 3 NVIDIA GT 445M -NVIDIA GeForce GT 520/PCI/SSE2 supported 3 NVIDIA GT 520M -NVIDIA GeForce GT 520/PCI/SSE2/3DNOW! supported 3 NVIDIA GT 520M -NVIDIA GeForce GT 520M/PCI/SSE2 supported 3 NVIDIA GT 520M -NVIDIA GeForce GT 525M/PCI/SSE2 supported 3 NVIDIA GT 520M -NVIDIA GeForce GT 530/PCI/SSE2 supported 3 NVIDIA GT 530M -NVIDIA GeForce GT 530/PCI/SSE2/3DNOW! supported 3 NVIDIA GT 530M -NVIDIA GeForce GT 540M/PCI/SSE2 supported 3 NVIDIA GT 540M -NVIDIA GeForce GT 545/PCI/SSE2 supported 3 NVIDIA GT 540M -NVIDIA GeForce GT 550M/PCI/SSE2 supported 3 NVIDIA GT 550M -NVIDIA GeForce GT 555M/PCI/SSE2 supported 3 NVIDIA GT 555M -NVIDIA GeForce GTS 150/PCI/SSE2 supported 2 NVIDIA GT 150M -NVIDIA GeForce GTS 160M/PCI/SSE2 supported 2 NVIDIA GTS 160M -NVIDIA GeForce GTS 240/PCI/SSE2 supported 3 NVIDIA GTS 240 -NVIDIA GeForce GTS 250/PCI/SSE2 supported 3 NVIDIA GTS 250 -NVIDIA GeForce GTS 250/PCI/SSE2/3DNOW! supported 3 NVIDIA GTS 250 -NVIDIA GeForce GTS 250M/PCI/SSE2 supported 3 NVIDIA GTS 250 -NVIDIA GeForce GTS 350M/PCI/SSE2 supported 3 NVIDIA GTS 350M -NVIDIA GeForce GTS 360M/PCI/SSE2 supported 3 NVIDIA GTS 360M -NVIDIA GeForce GTS 450/PCI/SSE2 supported 3 NVIDIA GTS 450 -NVIDIA GeForce GTS 450/PCI/SSE2/3DNOW! supported 3 NVIDIA GTS 450 -NVIDIA GeForce GTS 455/PCI/SSE2 supported 3 NVIDIA GTS 450 -NVIDIA GeForce GTX 260/PCI/SSE2 supported 3 NVIDIA GTX 260 -NVIDIA GeForce GTX 260/PCI/SSE2/3DNOW! supported 3 NVIDIA GTX 260 -NVIDIA GeForce GTX 260M/PCI/SSE2 supported 3 NVIDIA GTX 260 -NVIDIA GeForce GTX 275/PCI/SSE2 supported 3 NVIDIA GTX 275 -NVIDIA GeForce GTX 275/PCI/SSE2/3DNOW! supported 3 NVIDIA GTX 275 -NVIDIA GeForce GTX 280 supported 3 NVIDIA GTX 280 -NVIDIA GeForce GTX 280/PCI/SSE2 supported 3 NVIDIA GTX 280 -NVIDIA GeForce GTX 280M/PCI/SSE2 supported 3 NVIDIA GTX 280 -NVIDIA GeForce GTX 285 supported 3 NVIDIA GTX 285 -NVIDIA GeForce GTX 285/PCI/SSE2 supported 3 NVIDIA GTX 285 -NVIDIA GeForce GTX 295/PCI/SSE2 supported 3 NVIDIA GTX 295 -NVIDIA GeForce GTX 460 SE/PCI/SSE2 supported 3 NVIDIA GTX 460 -NVIDIA GeForce GTX 460 SE/PCI/SSE2/3DNOW! supported 3 NVIDIA GTX 460 -NVIDIA GeForce GTX 460/PCI/SSE2 supported 3 NVIDIA GTX 460 -NVIDIA GeForce GTX 460/PCI/SSE2/3DNOW! supported 3 NVIDIA GTX 460 -NVIDIA GeForce GTX 460M/PCI/SSE2 supported 3 NVIDIA GTX 460M -NVIDIA GeForce GTX 465/PCI/SSE2 supported 3 NVIDIA GTX 465 -NVIDIA GeForce GTX 465/PCI/SSE2/3DNOW! supported 3 NVIDIA GTX 465 -NVIDIA GeForce GTX 470/PCI/SSE2 supported 3 NVIDIA GTX 470 -NVIDIA GeForce GTX 470/PCI/SSE2/3DNOW! supported 3 NVIDIA GTX 470 -NVIDIA GeForce GTX 480/PCI/SSE2 supported 3 NVIDIA GTX 480 -NVIDIA GeForce GTX 550 Ti/PCI/SSE2 supported 3 NVIDIA GTX 550 -NVIDIA GeForce GTX 550 Ti/PCI/SSE2/3DNOW! supported 3 NVIDIA GTX 550 -NVIDIA GeForce GTX 560 Ti/PCI/SSE2 supported 3 NVIDIA GTX 560 -NVIDIA GeForce GTX 560 Ti/PCI/SSE2/3DNOW! supported 3 NVIDIA GTX 560 -NVIDIA GeForce GTX 560/PCI/SSE2 supported 3 NVIDIA GTX 560 -NVIDIA GeForce GTX 560/PCI/SSE2/3DNOW! supported 3 NVIDIA GTX 560 -NVIDIA GeForce GTX 560M/PCI/SSE2 supported 3 NVIDIA GTX 560 -NVIDIA GeForce GTX 570/PCI/SSE2 supported 3 NVIDIA GTX 570 -NVIDIA GeForce GTX 570/PCI/SSE2/3DNOW! supported 3 NVIDIA GTX 570 -NVIDIA GeForce GTX 580/PCI/SSE2 supported 3 NVIDIA GTX 580 -NVIDIA GeForce GTX 580/PCI/SSE2/3DNOW! supported 3 NVIDIA GTX 580 -NVIDIA GeForce GTX 580M/PCI/SSE2 supported 3 NVIDIA GTX 580M -NVIDIA GeForce GTX 590/PCI/SSE2 supported 3 NVIDIA GTX 590 -NVIDIA GeForce Go 6 supported 1 NVIDIA GeForce Go 6 -NVIDIA GeForce Go 6100 supported 0 NVIDIA G100 -NVIDIA GeForce Go 6100/PCI/SSE2 supported 0 NVIDIA G100 -NVIDIA GeForce Go 6100/PCI/SSE2/3DNOW! supported 0 NVIDIA G100 -NVIDIA GeForce Go 6150/PCI/SSE2 supported 0 NVIDIA GeForce Go 6100 -NVIDIA GeForce Go 6150/PCI/SSE2/3DNOW! supported 0 NVIDIA GeForce Go 6100 -NVIDIA GeForce Go 6200 supported 0 NVIDIA G 200 -NVIDIA GeForce Go 6200/PCI/SSE2 supported 0 NVIDIA G 200 -NVIDIA GeForce Go 6400 supported 1 NVIDIA GeForce Go 6400 -NVIDIA GeForce Go 6400/PCI/SSE2 supported 1 NVIDIA GeForce Go 6400 -NVIDIA GeForce Go 6600 supported 1 NVIDIA GeForce Go 6600 -NVIDIA GeForce Go 6600/PCI/SSE2 supported 1 NVIDIA GeForce Go 6600 -NVIDIA GeForce Go 6800 supported 1 NVIDIA GeForce Go 6800 -NVIDIA GeForce Go 6800 Ultra/PCI/SSE2 supported 1 NVIDIA GeForce Go 6800 -NVIDIA GeForce Go 6800/PCI/SSE2 supported 1 NVIDIA GeForce Go 6800 -NVIDIA GeForce Go 7200 supported 0 NVIDIA G 200 -NVIDIA GeForce Go 7200/PCI/SSE2 supported 0 NVIDIA G 200 -NVIDIA GeForce Go 7200/PCI/SSE2/3DNOW! supported 0 NVIDIA G 200 -NVIDIA GeForce Go 7300 supported 1 NVIDIA GeForce Go 7300 -NVIDIA GeForce Go 7300/PCI/SSE2 supported 1 NVIDIA GeForce Go 7300 -NVIDIA GeForce Go 7300/PCI/SSE2/3DNOW! supported 1 NVIDIA GeForce Go 7300 -NVIDIA GeForce Go 7400 supported 1 NVIDIA GeForce Go 7400 -NVIDIA GeForce Go 7400/PCI/SSE2 supported 1 NVIDIA GeForce Go 7400 -NVIDIA GeForce Go 7400/PCI/SSE2/3DNOW! supported 1 NVIDIA GeForce Go 7400 -NVIDIA GeForce Go 7600 supported 2 NVIDIA GeForce Go 7600 -NVIDIA GeForce Go 7600/PCI/SSE2 supported 2 NVIDIA GeForce Go 7600 -NVIDIA GeForce Go 7600/PCI/SSE2/3DNOW! supported 2 NVIDIA GeForce Go 7600 -NVIDIA GeForce Go 7700 supported 2 NVIDIA GeForce Go 7700 -NVIDIA GeForce Go 7700/PCI/SSE2 supported 2 NVIDIA GeForce Go 7700 -NVIDIA GeForce Go 7800 supported 2 NVIDIA GeForce Go 7800 -NVIDIA GeForce Go 7800 GTX/PCI/SSE2 supported 2 NVIDIA GeForce Go 7800 -NVIDIA GeForce Go 7900 supported 2 NVIDIA GeForce Go 7900 -NVIDIA GeForce Go 7900 GS/PCI/SSE2 supported 2 NVIDIA GeForce Go 7900 -NVIDIA GeForce Go 7900 GTX/PCI/SSE2 supported 2 NVIDIA GeForce Go 7900 -NVIDIA GeForce Go 7950 GTX/PCI/SSE2 supported 2 NVIDIA GeForce Go 7900 -NVIDIA GeForce PCX supported 0 NVIDIA GeForce PCX -NVIDIA GeForce2 GTS/AGP/SSE supported 0 NVIDIA GeForce 2 -NVIDIA GeForce2 MX/AGP/3DNOW! supported 0 NVIDIA GeForce 2 -NVIDIA GeForce2 MX/AGP/SSE/3DNOW! supported 0 NVIDIA GeForce 2 -NVIDIA GeForce2 MX/AGP/SSE2 supported 0 NVIDIA GeForce 2 -NVIDIA GeForce2 MX/PCI/SSE2 supported 0 NVIDIA GeForce 2 -NVIDIA GeForce3/AGP/SSE/3DNOW! supported 0 NVIDIA GeForce 3 -NVIDIA GeForce3/AGP/SSE2 supported 0 NVIDIA GeForce 3 -NVIDIA GeForce4 420 Go 32M/AGP/SSE2 supported 0 NVIDIA GeForce 4 -NVIDIA GeForce4 420 Go 32M/AGP/SSE2/3DNOW! supported 0 NVIDIA GeForce 4 -NVIDIA GeForce4 420 Go 32M/PCI/SSE2/3DNOW! supported 0 NVIDIA GeForce 4 -NVIDIA GeForce4 420 Go/AGP/SSE2 supported 0 NVIDIA GeForce 4 -NVIDIA GeForce4 440 Go 64M/AGP/SSE2/3DNOW! supported 0 NVIDIA GeForce 4 -NVIDIA GeForce4 440 Go/AGP/SSE2 supported 0 NVIDIA GeForce 4 -NVIDIA GeForce4 460 Go/AGP/SSE2 supported 0 NVIDIA GeForce 4 -NVIDIA GeForce4 MX 4000/AGP/SSE/3DNOW! supported 0 NVIDIA GeForce 4 -NVIDIA GeForce4 MX 4000/AGP/SSE2 supported 0 NVIDIA GeForce 4 -NVIDIA GeForce4 MX 4000/PCI/3DNOW! supported 0 NVIDIA GeForce 4 -NVIDIA GeForce4 MX 4000/PCI/SSE/3DNOW! supported 0 NVIDIA GeForce 4 -NVIDIA GeForce4 MX 4000/PCI/SSE2 supported 0 NVIDIA GeForce 4 -NVIDIA GeForce4 MX 420/AGP/SSE/3DNOW! supported 0 NVIDIA GeForce 4 -NVIDIA GeForce4 MX 420/AGP/SSE2 supported 0 NVIDIA GeForce 4 -NVIDIA GeForce4 MX 440 with AGP8X/AGP/SSE2 supported 0 NVIDIA GeForce 4 -NVIDIA GeForce4 MX 440/AGP/SSE2 supported 0 NVIDIA GeForce 4 -NVIDIA GeForce4 MX 440/AGP/SSE2/3DNOW! supported 0 NVIDIA GeForce 4 -NVIDIA GeForce4 MX 440SE with AGP8X/AGP/SSE2 supported 0 NVIDIA GeForce 4 -NVIDIA GeForce4 MX Integrated GPU/AGP/SSE/3DNOW! supported 0 NVIDIA GeForce 4 -NVIDIA GeForce4 Ti 4200 with AGP8X/AGP/SSE supported 0 NVIDIA G 200 -NVIDIA GeForce4 Ti 4200/AGP/SSE/3DNOW! supported 0 NVIDIA G 200 -NVIDIA GeForce4 Ti 4400/AGP/SSE2 supported 0 NVIDIA GeForce 4 -NVIDIA Generic NO MATCH -NVIDIA ION LE/PCI/SSE2 supported 2 NVIDIA ION -NVIDIA ION/PCI/SSE2 supported 2 NVIDIA ION -NVIDIA ION/PCI/SSE2/3DNOW! supported 2 NVIDIA ION -NVIDIA MCP61/PCI/SSE2 supported 1 NVIDIA MCP61 -NVIDIA MCP61/PCI/SSE2/3DNOW! supported 1 NVIDIA MCP61 -NVIDIA MCP73/PCI/SSE2 supported 1 NVIDIA MCP73 -NVIDIA MCP79MH/PCI/SSE2 supported 1 NVIDIA MCP79 -NVIDIA MCP79MX/PCI/SSE2 supported 1 NVIDIA MCP79 -NVIDIA MCP7A-O/PCI/SSE2 supported 1 NVIDIA MCP7A -NVIDIA MCP7A-S/PCI/SSE2 supported 1 NVIDIA MCP7A -NVIDIA MCP89-EPT/PCI/SSE2 NO MATCH -NVIDIA N10M-GE1/PCI/SSE2 supported 1 NVIDIA N10 -NVIDIA N10P-GE1/PCI/SSE2 supported 1 NVIDIA N10 -NVIDIA N10P-GV2/PCI/SSE2 supported 1 NVIDIA N10 -NVIDIA N11M-GE1/PCI/SSE2 NO MATCH -NVIDIA N11M-GE2/PCI/SSE2 NO MATCH -NVIDIA N12E-GS-A1/PCI/SSE2 NO MATCH -NVIDIA N12P-GVR-B-A1/PCI/SSE2 NO MATCH -NVIDIA N13M-GE1-B-A1/PCI/SSE2 NO MATCH -NVIDIA N13P-GL-A1/PCI/SSE2 NO MATCH -NVIDIA NB9M-GE/PCI/SSE2 supported 1 NVIDIA NB9M -NVIDIA NB9M-GE1/PCI/SSE2 supported 1 NVIDIA NB9M -NVIDIA NB9M-GS/PCI/SSE2 supported 1 NVIDIA NB9M -NVIDIA NB9M-NS/PCI/SSE2 supported 1 NVIDIA NB9M -NVIDIA NB9P-GE1/PCI/SSE2 supported 2 NVIDIA NB9P -NVIDIA NB9P-GS/PCI/SSE2 supported 2 NVIDIA NB9P -NVIDIA NV17/AGP/3DNOW! supported 0 NVIDIA NV17 -NVIDIA NV17/AGP/SSE2 supported 0 NVIDIA NV17 -NVIDIA NV34 supported 0 NVIDIA NV34 -NVIDIA NV35 supported 0 NVIDIA NV35 -NVIDIA NV36/AGP/SSE/3DNOW! supported 1 NVIDIA NV36 -NVIDIA NV36/AGP/SSE2 supported 1 NVIDIA NV36 -NVIDIA NV41/PCI/SSE2 supported 1 NVIDIA NV41 -NVIDIA NV43 supported 1 NVIDIA NV43 -NVIDIA NV43/PCI/SSE2 supported 1 NVIDIA NV43 -NVIDIA NV44 supported 1 NVIDIA NV44 -NVIDIA NV44/AGP/SSE2 supported 1 NVIDIA NV44 -NVIDIA NVIDIA GeForce 210 OpenGL Engine supported 2 NVIDIA 210 -NVIDIA NVIDIA GeForce 320M OpenGL Engine supported 2 NVIDIA 320M -NVIDIA NVIDIA GeForce 7300 GT OpenGL Engine supported 1 NVIDIA GeForce 7300 -NVIDIA NVIDIA GeForce 7600 GT OpenGL Engine supported 2 NVIDIA GeForce 7600 -NVIDIA NVIDIA GeForce 8600M GT OpenGL Engine supported 1 NVIDIA GeForce 8600M -NVIDIA NVIDIA GeForce 8800 GS OpenGL Engine supported 3 NVIDIA GeForce 8800 -NVIDIA NVIDIA GeForce 8800 GT OpenGL Engine supported 3 NVIDIA GeForce 8800 -NVIDIA NVIDIA GeForce 9400 OpenGL Engine supported 1 NVIDIA GeForce 9400 -NVIDIA NVIDIA GeForce 9400M OpenGL Engine supported 1 NVIDIA GeForce 9400M -NVIDIA NVIDIA GeForce 9500 GT OpenGL Engine supported 2 NVIDIA GeForce 9500 -NVIDIA NVIDIA GeForce 9600M GT OpenGL Engine supported 3 NVIDIA GeForce 9600M -NVIDIA NVIDIA GeForce GT 120 OpenGL Engine supported 2 NVIDIA GT 120M -NVIDIA NVIDIA GeForce GT 130 OpenGL Engine supported 2 NVIDIA GT 130M -NVIDIA NVIDIA GeForce GT 220 OpenGL Engine supported 2 NVIDIA GT 220M -NVIDIA NVIDIA GeForce GT 230M OpenGL Engine supported 2 NVIDIA GT 230M -NVIDIA NVIDIA GeForce GT 240M OpenGL Engine supported 2 NVIDIA GT 240M -NVIDIA NVIDIA GeForce GT 330M OpenGL Engine supported 3 NVIDIA GT 330M -NVIDIA NVIDIA GeForce GT 420M OpenGL Engine supported 2 NVIDIA GT 420M -NVIDIA NVIDIA GeForce GT 425M OpenGL Engine supported 3 NVIDIA GT 425M -NVIDIA NVIDIA GeForce GT 430 OpenGL Engine supported 3 NVIDIA GT 430M -NVIDIA NVIDIA GeForce GT 440 OpenGL Engine supported 3 NVIDIA GT 440M -NVIDIA NVIDIA GeForce GT 540M OpenGL Engine supported 3 NVIDIA GT 540M -NVIDIA NVIDIA GeForce GTS 240 OpenGL Engine supported 3 NVIDIA GTS 240 -NVIDIA NVIDIA GeForce GTS 250 OpenGL Engine supported 3 NVIDIA GTS 250 -NVIDIA NVIDIA GeForce GTS 450 OpenGL Engine supported 3 NVIDIA GTS 450 -NVIDIA NVIDIA GeForce GTX 285 OpenGL Engine supported 3 NVIDIA GTX 285 -NVIDIA NVIDIA GeForce GTX 460 OpenGL Engine supported 3 NVIDIA GTX 460 -NVIDIA NVIDIA GeForce GTX 460M OpenGL Engine supported 3 NVIDIA GTX 460M -NVIDIA NVIDIA GeForce GTX 465 OpenGL Engine supported 3 NVIDIA GTX 465 -NVIDIA NVIDIA GeForce GTX 470 OpenGL Engine supported 3 NVIDIA GTX 470 -NVIDIA NVIDIA GeForce GTX 480 OpenGL Engine supported 3 NVIDIA GTX 480 -NVIDIA NVIDIA GeForce Pre-Release GF108 ES OpenGL Engine NO MATCH -NVIDIA NVIDIA GeForce Pre-Release ION OpenGL Engine supported 2 NVIDIA ION -NVIDIA NVIDIA GeForce Pre-Release MCP7A-J-DC OpenGL Engine supported 1 NVIDIA MCP7A -NVIDIA NVIDIA GeForce4 OpenGL Engine supported 0 NVIDIA GeForce 4 -NVIDIA NVIDIA NV34MAP OpenGL Engine supported 0 NVIDIA NV34 -NVIDIA NVIDIA Quadro 4000 OpenGL Engine supported 3 NVIDIA Quadro 4000 -NVIDIA NVIDIA Quadro FX 4800 OpenGL Engine supported 3 NVIDIA Quadro FX 4800 -NVIDIA NVS 2100M/PCI/SSE2 supported 0 NVIDIA G100M -NVIDIA NVS 300/PCI/SSE2 supported 0 NVIDIA Quadro NVS -NVIDIA NVS 3100M/PCI/SSE2 supported 0 NVIDIA G100M -NVIDIA NVS 4100/PCI/SSE2/3DNOW! supported 0 NVIDIA G100 -NVIDIA NVS 4200M/PCI/SSE2 supported 0 NVIDIA G 200 -NVIDIA NVS 5100M/PCI/SSE2 supported 0 NVIDIA G100M -NVIDIA PCI NO MATCH -NVIDIA Quadro 1000M/PCI/SSE2 supported 0 NVIDIA G100 -NVIDIA Quadro 2000/PCI/SSE2 supported 0 NVIDIA G 200 -NVIDIA Quadro 2000M/PCI/SSE2 supported 0 NVIDIA G 200 -NVIDIA Quadro 3000M/PCI/SSE2 supported 3 NVIDIA Quadro 3000M -NVIDIA Quadro 4000 supported 3 NVIDIA Quadro 4000 -NVIDIA Quadro 4000 OpenGL Engine supported 3 NVIDIA Quadro 4000 -NVIDIA Quadro 4000/PCI/SSE2 supported 3 NVIDIA Quadro 4000 -NVIDIA Quadro 4000M/PCI/SSE2 supported 3 NVIDIA Quadro 4000M -NVIDIA Quadro 5000/PCI/SSE2 supported 3 NVIDIA Quadro 50x0 M -NVIDIA Quadro 5000M/PCI/SSE2 supported 3 NVIDIA Quadro 50x0 M -NVIDIA Quadro 600 supported 2 NVIDIA Quadro 600 -NVIDIA Quadro 600/PCI/SSE2 supported 2 NVIDIA Quadro 600 -NVIDIA Quadro 600/PCI/SSE2/3DNOW! supported 2 NVIDIA Quadro 600 -NVIDIA Quadro 6000 supported 3 NVIDIA Quadro 6000 -NVIDIA Quadro 6000/PCI/SSE2 supported 3 NVIDIA Quadro 6000 -NVIDIA Quadro CX/PCI/SSE2 supported 3 NVIDIA Quadro CX -NVIDIA Quadro DCC supported 0 NVIDIA Quadro DCC -NVIDIA Quadro FX supported 1 NVIDIA Quadro FX -NVIDIA Quadro FX 1100/AGP/SSE2 supported 0 NVIDIA G100 -NVIDIA Quadro FX 1400/PCI/SSE2 supported 2 NVIDIA Quadro 400 -NVIDIA Quadro FX 1500 supported 1 NVIDIA Quadro FX -NVIDIA Quadro FX 1500/PCI/SSE2 supported 1 NVIDIA Quadro FX -NVIDIA Quadro FX 1500M/PCI/SSE2 supported 1 NVIDIA Quadro FX 1500M -NVIDIA Quadro FX 1600M/PCI/SSE2 supported 2 NVIDIA Quadro 600 -NVIDIA Quadro FX 1700 supported 1 NVIDIA Quadro FX -NVIDIA Quadro FX 1700M/PCI/SSE2 supported 1 NVIDIA Quadro FX -NVIDIA Quadro FX 1800 supported 1 NVIDIA Quadro FX -NVIDIA Quadro FX 1800/PCI/SSE2 supported 1 NVIDIA Quadro FX -NVIDIA Quadro FX 1800M/PCI/SSE2 supported 1 NVIDIA Quadro FX -NVIDIA Quadro FX 2500M/PCI/SSE2 supported 2 NVIDIA Quadro FX 2500M -NVIDIA Quadro FX 2700M/PCI/SSE2 supported 3 NVIDIA Quadro FX 2700M -NVIDIA Quadro FX 2800M/PCI/SSE2 supported 3 NVIDIA Quadro FX 2800M -NVIDIA Quadro FX 3400 supported 2 NVIDIA Quadro 400 -NVIDIA Quadro FX 3450 supported 1 NVIDIA Quadro FX -NVIDIA Quadro FX 3450/4000 SDI/PCI/SSE2 supported 2 NVIDIA Quadro 400 -NVIDIA Quadro FX 3500 supported 2 NVIDIA Quadro FX 3500 -NVIDIA Quadro FX 3500M/PCI/SSE2 supported 2 NVIDIA Quadro FX 3500 -NVIDIA Quadro FX 360M/PCI/SSE2 supported 1 NVIDIA Quadro FX -NVIDIA Quadro FX 370 supported 1 NVIDIA Quadro FX -NVIDIA Quadro FX 370/PCI/SSE2 supported 1 NVIDIA Quadro FX -NVIDIA Quadro FX 3700 supported 3 NVIDIA Quadro FX 3700 -NVIDIA Quadro FX 3700M/PCI/SSE2 supported 3 NVIDIA Quadro FX 3700 -NVIDIA Quadro FX 370M/PCI/SSE2 supported 1 NVIDIA Quadro FX -NVIDIA Quadro FX 3800 supported 3 NVIDIA Quadro FX 3800 -NVIDIA Quadro FX 3800M/PCI/SSE2 supported 3 NVIDIA Quadro FX 3800 -NVIDIA Quadro FX 4500 supported 3 NVIDIA Quadro FX 4500 -NVIDIA Quadro FX 4600 supported 2 NVIDIA Quadro 600 -NVIDIA Quadro FX 4800 supported 3 NVIDIA Quadro FX 4800 -NVIDIA Quadro FX 4800/PCI/SSE2 supported 3 NVIDIA Quadro FX 4800 -NVIDIA Quadro FX 540/PCI/SSE2/3DNOW! supported 1 NVIDIA Quadro FX -NVIDIA Quadro FX 560 supported 1 NVIDIA Quadro FX -NVIDIA Quadro FX 560/PCI/SSE2 supported 1 NVIDIA Quadro FX -NVIDIA Quadro FX 5600 supported 2 NVIDIA Quadro 600 -NVIDIA Quadro FX 570 supported 1 NVIDIA Quadro FX -NVIDIA Quadro FX 570/PCI/SSE2 supported 1 NVIDIA Quadro FX -NVIDIA Quadro FX 570M/PCI/SSE2 supported 1 NVIDIA Quadro FX -NVIDIA Quadro FX 580/PCI/SSE2 supported 1 NVIDIA Quadro FX -NVIDIA Quadro FX 770M/PCI/SSE2 supported 2 NVIDIA Quadro FX 770M -NVIDIA Quadro FX 880M supported 3 NVIDIA Quadro FX 880M -NVIDIA Quadro FX 880M/PCI/SSE2 supported 3 NVIDIA Quadro FX 880M -NVIDIA Quadro FX Go700/AGP/SSE2 supported 1 NVIDIA Quadro FX -NVIDIA Quadro NVS supported 0 NVIDIA Quadro NVS -NVIDIA Quadro NVS 110M/PCI/SSE2 supported 0 NVIDIA G 110M -NVIDIA Quadro NVS 130M/PCI/SSE2 supported 0 NVIDIA Quadro NVS 1xxM -NVIDIA Quadro NVS 135M/PCI/SSE2 supported 0 NVIDIA Quadro NVS 1xxM -NVIDIA Quadro NVS 140M/PCI/SSE2 supported 0 NVIDIA Quadro NVS 1xxM -NVIDIA Quadro NVS 150M/PCI/SSE2 supported 0 NVIDIA Quadro NVS 1xxM -NVIDIA Quadro NVS 160M/PCI/SSE2 supported 0 NVIDIA Quadro NVS 1xxM -NVIDIA Quadro NVS 210S/PCI/SSE2/3DNOW! supported 1 NVIDIA G 210 -NVIDIA Quadro NVS 285/PCI/SSE2 supported 0 NVIDIA Quadro NVS -NVIDIA Quadro NVS 290/PCI/SSE2 supported 0 NVIDIA Quadro NVS -NVIDIA Quadro NVS 295/PCI/SSE2 supported 0 NVIDIA Quadro NVS -NVIDIA Quadro NVS 320M/PCI/SSE2 supported 2 NVIDIA G 320M -NVIDIA Quadro NVS 55/280 PCI/PCI/SSE2 supported 0 NVIDIA Quadro NVS -NVIDIA Quadro NVS/PCI/SSE2 supported 0 NVIDIA Quadro NVS -NVIDIA Quadro PCI-E Series/PCI/SSE2/3DNOW! NO MATCH -NVIDIA Quadro VX 200/PCI/SSE2 supported 0 NVIDIA G 200 -NVIDIA Quadro/AGP/SSE2 NO MATCH -NVIDIA Quadro2 supported 0 NVIDIA Quadro2 -NVIDIA Quadro4 supported 0 NVIDIA Quadro4 -NVIDIA Quadro4 750 XGL/AGP/SSE2 supported 0 NVIDIA Quadro4 -NVIDIA RIVA TNT unsupported 0 NVIDIA RIVA TNT -NVIDIA RIVA TNT2/AGP/SSE2 unsupported 0 NVIDIA RIVA TNT -NVIDIA RIVA TNT2/PCI/3DNOW! unsupported 0 NVIDIA RIVA TNT -NVIDIA Tesla C2050/PCI/SSE2 supported 0 NVIDIA G 205M -NVIDIA nForce unsupported 0 NVIDIA nForce -NVIDIA nForce 730a/PCI/SSE2 unsupported 0 NVIDIA nForce -NVIDIA nForce 730a/PCI/SSE2/3DNOW! unsupported 0 NVIDIA nForce -NVIDIA nForce 750a SLI/PCI/SSE2 unsupported 0 NVIDIA nForce -NVIDIA nForce 750a SLI/PCI/SSE2/3DNOW! unsupported 0 NVIDIA nForce -NVIDIA nForce 760i SLI/PCI/SSE2 unsupported 0 NVIDIA nForce -NVIDIA nForce 780a SLI/PCI/SSE2/3DNOW! unsupported 0 NVIDIA nForce -NVIDIA nForce 980a/780a SLI/PCI/SSE2 unsupported 0 NVIDIA nForce -NVIDIA nForce 980a/780a SLI/PCI/SSE2/3DNOW! unsupported 0 NVIDIA nForce -NVIDIA unknown board/AGP/SSE2 unsupported 0 NVIDIA Generic -NVIDIA unknown board/PCI/SSE2 unsupported 0 NVIDIA Generic -NVIDIA unknown board/PCI/SSE2/3DNOW! unsupported 0 NVIDIA Generic -Parallels and ATI Technologies Inc. Parallels using ATI Radeon HD 5670 OpenGL Engine supported 3 ATI Radeon HD 5600 -Parallels and ATI Technologies Inc. Parallels using ATI Radeon HD 5750 OpenGL Engine supported 3 ATI Radeon HD 5700 -Parallels and ATI Technologies Inc. Parallels using ATI Radeon HD 5770 OpenGL Engine supported 3 ATI Radeon HD 5700 -Parallels and ATI Technologies Inc. Parallels using ATI Radeon HD 6490M OpenGL Engine supported 3 ATI Radeon HD 6400 -Parallels and ATI Technologies Inc. Parallels using ATI Radeon HD 6750M OpenGL Engine supported 3 ATI Radeon HD 6700 -Parallels and ATI Technologies Inc. Parallels using ATI Radeon HD 6770M OpenGL Engine supported 3 ATI Radeon HD 6700 -Parallels and ATI Technologies Inc. Parallels using ATI Radeon HD 6970M OpenGL Engine supported 3 ATI Radeon HD 6900 -Parallels and Intel Inc. 3D-Analyze v2.3 - http://www.tommti-systems.com NO MATCH -Parallels and Intel Inc. Parallels using Intel HD Graphics 3000 OpenGL Engine supported 2 Intel HD Graphics -Parallels and NVIDIA Parallels using NVIDIA GeForce 320M OpenGL Engine supported 2 NVIDIA 320M -Parallels and NVIDIA Parallels using NVIDIA GeForce 9400 OpenGL Engine supported 1 NVIDIA GeForce 9400 -Parallels and NVIDIA Parallels using NVIDIA GeForce GT 120 OpenGL Engine supported 2 NVIDIA GT 120M -Parallels and NVIDIA Parallels using NVIDIA GeForce GT 330M OpenGL Engine supported 3 NVIDIA GT 330M -Radeon RV350 on Gallium supported 0 ATI RV350 (9600) -S3 NO MATCH -S3 Fire GL2 NO MATCH -S3 Graphics VIA/S3G UniChrome IGP/MMX/K3D unsupported 0 S3 -S3 Graphics VIA/S3G UniChrome IGP/MMX/SSE unsupported 0 S3 -S3 Graphics VIA/S3G UniChrome Pro IGP/MMX/SSE unsupported 0 S3 -S3 Graphics, Incorporated ProSavage/Twister unsupported 0 S3 -S3 Graphics, Incorporated S3 Graphics Chrome9 HC unsupported 0 S3 -S3 Graphics, Incorporated S3 Graphics DeltaChrome unsupported 0 S3 -S3 Graphics, Incorporated VIA Chrome9 HC IGP unsupported 0 S3 -SiS unsupported 0 SiS -SiS 650/M650 VGA unsupported 0 SiS -SiS 661 VGA unsupported 0 SiS -SiS 662 VGA unsupported 0 SiS -SiS 741 VGA unsupported 0 SiS -SiS 760 VGA unsupported 0 SiS -SiS 761GX VGA unsupported 0 SiS -SiS Mirage Graphics3 unsupported 0 SiS -SiS Xabre VGA unsupported 0 SiS -Trident unsupported 0 Trident -Tungsten Graphics unsupported 0 Tungsten Graphics -Tungsten Graphics, Inc Mesa DRI 865G GEM 20091221 2009Q4 x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI 865G GEM 20100330 DEVELOPMENT x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI 915G GEM 20091221 2009Q4 x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI 915G GEM 20100330 DEVELOPMENT x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI 915GM GEM 20090712 2009Q2 RC3 x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI 915GM GEM 20091221 2009Q4 x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI 915GM GEM 20100330 DEVELOPMENT x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI 945G unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI 945G GEM 20091221 2009Q4 x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI 945G GEM 20100330 DEVELOPMENT unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI 945G GEM 20100330 DEVELOPMENT x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI 945GM GEM 20090712 2009Q2 RC3 x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI 945GM GEM 20091221 2009Q4 x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI 945GM GEM 20100328 2010Q1 x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI 945GM GEM 20100330 DEVELOPMENT x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI 945GME x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI 945GME 20061017 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI 945GME GEM 20090712 2009Q2 RC3 x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI 945GME GEM 20091221 2009Q4 x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI 945GME GEM 20100330 DEVELOPMENT x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI 965GM GEM 20090326 2009Q1 RC2 x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI 965GM GEM 20090712 2009Q2 RC3 x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI 965GM GEM 20091221 2009Q4 x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI 965GM GEM 20100330 DEVELOPMENT x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI G33 20061017 x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI G33 GEM 20090712 2009Q2 RC3 x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI G33 GEM 20091221 2009Q4 x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI G41 GEM 20091221 2009Q4 x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI G41 GEM 20100330 DEVELOPMENT x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI GMA500 20081116 - 5.0.1.0046 x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI IGD GEM 20091221 2009Q4 x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI IGD GEM 20100330 DEVELOPMENT unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI IGD GEM 20100330 DEVELOPMENT x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI IGDNG_D GEM 20091221 2009Q4 x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI Ironlake Desktop GEM 20100330 DEVELOPMENT x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI Ironlake Mobile GEM 20100330 DEVELOPMENT x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI Mobile Intel GM45 Express Chipset unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI Mobile Intel GM45 Express Chipset 20080716 x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI Mobile Intel GM45 Express Chipset GEM 20090712 2009Q2 RC3 x86/MMX... unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI Mobile Intel GM45 Express Chipset GEM 20091221 2009Q4 x86/MMX/SSE2 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI Mobile Intel GM45 Express Chipset GEM 20100328 2010Q1 unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI Mobile Intel GM45 Express Chipset GEM 20100330 DEVELOPMENT unsupported 0 Mesa -Tungsten Graphics, Inc Mesa DRI Mobile Intel GM45 Express Chipset GEM 20100330 DEVELOPMENT x86/MM... unsupported 0 Mesa -Tungsten Graphics, Inc. Mesa DRI R200 (RV250 4C66) 20090101 x86/MMX/SSE2 TCL DRI2 unsupported 0 Mesa -Tungsten Graphics, Inc. Mesa DRI R200 (RV280 5964) 20090101 x86/MMX+/3DNow!+/SSE2 TCL DRI2 unsupported 0 Mesa -VIA unsupported 0 VIA -VMware, Inc. Gallium 0.3 on SVGA3D; build: RELEASE; NO MATCH -VMware, Inc. Gallium 0.4 on SVGA3D; build: DEBUG; mutex: MSVC Intrinsics NO MATCH -VMware, Inc. Gallium 0.4 on SVGA3D; build: RELEASE; NO MATCH -VMware, Inc. Gallium 0.4 on i915 (chipset: 945GM) NO MATCH -VMware, Inc. Gallium 0.4 on llvmpipe NO MATCH -VMware, Inc. Gallium 0.4 on softpipe NO MATCH -X.Org Gallium 0.4 on AMD BARTS supported 3 AMD BARTS (HD 6800) -X.Org Gallium 0.4 on AMD CEDAR supported 2 AMD CEDAR (HD 5450) -X.Org Gallium 0.4 on AMD HEMLOCK supported 3 AMD HEMLOCK (HD 5970) -X.Org Gallium 0.4 on AMD JUNIPER supported 3 AMD JUNIPER (HD 5700) -X.Org Gallium 0.4 on AMD PALM NO MATCH -X.Org Gallium 0.4 on AMD REDWOOD supported 3 AMD REDWOOD (HD 5500/5600) -X.Org Gallium 0.4 on AMD RS780 supported 0 AMD RS780 (HD 3200) -X.Org Gallium 0.4 on AMD RS880 supported 1 AMD RS880 (HD 4200) -X.Org Gallium 0.4 on AMD RV610 supported 1 AMD RV610 (HD 2400) -X.Org Gallium 0.4 on AMD RV620 supported 1 AMD RV620 (HD 3400) -X.Org Gallium 0.4 on AMD RV630 supported 2 AMD RV630 (HD 2600) -X.Org Gallium 0.4 on AMD RV635 supported 3 AMD RV635 (HD 3600) -X.Org Gallium 0.4 on AMD RV710 supported 1 AMD RV710 (HD 4300) -X.Org Gallium 0.4 on AMD RV730 supported 3 AMD RV730 (HD 4600) -X.Org Gallium 0.4 on AMD RV740 supported 3 AMD RV740 (HD 4700) -X.Org Gallium 0.4 on AMD RV770 supported 3 AMD RV770 (HD 4800) -X.Org R300 Project Gallium 0.4 on ATI R300 supported 1 ATI R300 (9700) -X.Org R300 Project Gallium 0.4 on ATI R350 supported 1 ATI R350 (9800) -X.Org R300 Project Gallium 0.4 on ATI R420 supported 1 ATI R300 (9700) -X.Org R300 Project Gallium 0.4 on ATI R580 supported 3 ATI R580 (X1900) -X.Org R300 Project Gallium 0.4 on ATI RC410 unsupported 0 ATI RC410 (Xpress 200) -X.Org R300 Project Gallium 0.4 on ATI RS480 unsupported 0 ATI RS48x (Xpress 200x) -X.Org R300 Project Gallium 0.4 on ATI RS482 unsupported 0 ATI RS48x (Xpress 200x) -X.Org R300 Project Gallium 0.4 on ATI RS600 unsupported 0 ATI RS600 (Xpress 3200) -X.Org R300 Project Gallium 0.4 on ATI RS690 supported 1 ATI R300 (9700) -X.Org R300 Project Gallium 0.4 on ATI RS740 supported 1 ATI R300 (9700) -X.Org R300 Project Gallium 0.4 on ATI RV350 supported 0 ATI RV350 (9600) -X.Org R300 Project Gallium 0.4 on ATI RV370 supported 0 ATI RV370 (X300) -X.Org R300 Project Gallium 0.4 on ATI RV410 supported 1 ATI RV410 (X700) -X.Org R300 Project Gallium 0.4 on ATI RV515 supported 1 ATI RV515 -X.Org R300 Project Gallium 0.4 on ATI RV530 supported 1 ATI RV530 -X.Org R300 Project Gallium 0.4 on ATI RV560 supported 1 ATI R300 (9700) -X.Org R300 Project Gallium 0.4 on ATI RV570 supported 3 ATI RV570 (X1900 GT/PRO) -X.Org R300 Project Gallium 0.4 on R420 supported 1 ATI R300 (9700) -X.Org R300 Project Gallium 0.4 on R580 supported 3 ATI R580 (X1900) -X.Org R300 Project Gallium 0.4 on RC410 unsupported 0 ATI RC410 (Xpress 200) -X.Org R300 Project Gallium 0.4 on RS480 unsupported 0 ATI RS48x (Xpress 200x) -X.Org R300 Project Gallium 0.4 on RS482 unsupported 0 ATI RS48x (Xpress 200x) -X.Org R300 Project Gallium 0.4 on RS600 unsupported 0 ATI RS600 (Xpress 3200) -X.Org R300 Project Gallium 0.4 on RS690 supported 1 ATI R300 (9700) -X.Org R300 Project Gallium 0.4 on RS740 supported 1 ATI R300 (9700) -X.Org R300 Project Gallium 0.4 on RV350 supported 0 ATI RV350 (9600) -X.Org R300 Project Gallium 0.4 on RV370 supported 0 ATI RV370 (X300) -X.Org R300 Project Gallium 0.4 on RV410 supported 1 ATI RV410 (X700) -X.Org R300 Project Gallium 0.4 on RV515 supported 1 ATI RV515 -X.Org R300 Project Gallium 0.4 on RV530 supported 1 ATI RV530 -XGI unsupported 0 XGI -nouveau Gallium 0.4 on NV31 NO MATCH -nouveau Gallium 0.4 on NV34 NO MATCH -nouveau Gallium 0.4 on NV36 NO MATCH -nouveau Gallium 0.4 on NV43 NO MATCH -nouveau Gallium 0.4 on NV44 NO MATCH -nouveau Gallium 0.4 on NV46 NO MATCH -nouveau Gallium 0.4 on NV49 NO MATCH -nouveau Gallium 0.4 on NV4A NO MATCH -nouveau Gallium 0.4 on NV4B NO MATCH -nouveau Gallium 0.4 on NV4C NO MATCH -nouveau Gallium 0.4 on NV4E NO MATCH -nouveau Gallium 0.4 on NV50 NO MATCH -nouveau Gallium 0.4 on NV63 NO MATCH -nouveau Gallium 0.4 on NV67 NO MATCH -nouveau Gallium 0.4 on NV84 NO MATCH -nouveau Gallium 0.4 on NV86 NO MATCH -nouveau Gallium 0.4 on NV92 NO MATCH -nouveau Gallium 0.4 on NV94 NO MATCH -nouveau Gallium 0.4 on NV96 NO MATCH -nouveau Gallium 0.4 on NV98 NO MATCH -nouveau Gallium 0.4 on NVA0 NO MATCH -nouveau Gallium 0.4 on NVA3 NO MATCH -nouveau Gallium 0.4 on NVA5 NO MATCH -nouveau Gallium 0.4 on NVA8 NO MATCH -nouveau Gallium 0.4 on NVAA NO MATCH -nouveau Gallium 0.4 on NVAC NO MATCH +GPU String Supported? Class Stats OpenGL Recognizer +------------------------------------------------------------------------------------------------------ ----------- ----- ----- ------ ------------------------------------ +AMD BARTS (HD 6800) supported 3 1 2.1 AMD BARTS (HD 6800) +AMD CAICOS (HD 6400) supported 3 0 0 AMD CAICOS (HD 6400) +AMD CAYMAN (HD 6900) supported 3 0 0 AMD CAYMAN (HD 6900) +AMD CEDAR (HD 5450) supported 2 0 2.1 AMD CEDAR (HD 5450) +AMD JUNIPER (HD 5700) supported 3 0 0 AMD JUNIPER (HD 5700) +AMD PARK supported 3 0 0 AMD PARK +AMD REDWOOD (HD 5500/5600) supported 3 0 1.4 AMD REDWOOD (HD 5500/5600) +AMD RS780 (HD 3200) supported 0 1 2.1 AMD RS780 (HD 3200) +AMD RS880 (HD 4200) supported 0 1 3.2 AMD RS880 (HD 4200) +AMD RV610 (HD 2400) supported 1 0 0 AMD RV610 (HD 2400) +AMD RV620 (HD 3400) supported 1 0 0 AMD RV620 (HD 3400) +AMD RV630 (HD 2600) supported 2 0 0 AMD RV630 (HD 2600) +AMD RV635 (HD 3600) supported 3 0 1.4 AMD RV635 (HD 3600) +AMD RV670 (HD 3800) supported 3 0 0 AMD RV670 (HD 3800) +AMD RV710 (HD 4300) supported 0 1 1.4 AMD RV710 (HD 4300) +AMD RV730 (HD 4600) supported 3 0 1.4 AMD RV730 (HD 4600) +AMD RV770 (HD 4800) supported 3 0 0 AMD RV770 (HD 4800) +AMD RV790 (HD 4800) supported 3 0 0 AMD RV790 (HD 4800) +AMD TURKS (HD 6500/6600) supported 3 0 2.1 AMD TURKS (HD 6500/6600) +ATI NO MATCH +ATI 760G/Radeon 3000 supported 1 1 4 ATI Radeon 3000 +ATI ASUS AH24xx NO MATCH +ATI ASUS AH34xx supported 1 1 4 ATI Radeon HD 3400 +ATI ASUS AH36xx supported 3 1 4 ATI Radeon HD 3600 +ATI ASUS AH46xx NO MATCH +ATI ASUS AX3xx NO MATCH +ATI ASUS AX5xx NO MATCH +ATI ASUS EAH38xx supported 3 1 4 ATI Radeon HD 3800 +ATI ASUS EAH43xx supported 2 1 4 ATI Radeon HD 4300 +ATI ASUS EAH45xx supported 2 1 3.3 ATI Radeon HD 4500 +ATI ASUS EAH48xx supported 3 1 4 ATI Radeon HD 4800 +ATI ASUS EAH54xx supported 3 1 4.2 ATI Radeon HD 5400 +ATI ASUS EAH57xx supported 3 1 4.2 ATI Radeon HD 5700 +ATI ASUS EAH58xx supported 4 1 4.2 ATI Radeon HD 5800 +ATI ASUS EAH64xx supported 3 1 4.2 ATI Radeon HD 6400 +ATI ASUS EAH65xx supported 3 1 4.2 ATI Radeon HD 6500 +ATI ASUS EAH66xx supported 3 1 4.2 ATI Radeon HD 6600 +ATI ASUS EAH67xx supported 3 1 4.2 ATI Radeon HD 6700 +ATI ASUS EAH68xx supported 4 1 4.2 ATI Radeon HD 6800 +ATI ASUS EAH69xx supported 5 1 4.2 ATI Radeon HD 6900 +ATI ASUS EAH6xxx NO MATCH +ATI ASUS EAH77xx NO MATCH +ATI ASUS HD7700 supported 4 1 4.2 ATI Radeon HD 7700 +ATI ASUS Radeon X1xxx NO MATCH +ATI All-in-Wonder HD supported 1 1 3.3 ATI All-in-Wonder HD +ATI All-in-Wonder PCI-E supported 1 0 0 ATI All-in-Wonder PCI-E +ATI Display Adapter supported 1 1 4.1 ATI Display Adapter +ATI FireGL supported 4 1 4.2 ATI FireGL +ATI FireGL 5200 supported 4 1 4.2 ATI FireGL +ATI FireGL 5xxx supported 4 1 4.2 ATI FireGL +ATI FireMV supported 0 1 3.2 ATI FireMV +ATI FirePro 2000 supported 2 1 4.2 ATI FirePro 2000 +ATI FirePro 4000 NO MATCH +ATI FirePro M supported 3 1 4.2 ATI FirePro M +ATI FirePro M3900 supported 2 0 4.1 ATI FirePro M3900 +ATI FirePro M5800 supported 3 0 0 ATI FirePro M5800 +ATI FirePro M7740 supported 3 0 0 ATI FirePro M7740 +ATI FirePro M7820 supported 5 1 4.2 ATI FirePro M7820 +ATI Geforce 9500 GT NO MATCH +ATI Geforce 9600 GT NO MATCH +ATI Geforce 9800 GT NO MATCH +ATI IGP 340M unsupported 0 0 1.3 ATI IGP 340M +ATI Mobility Radeon supported 3 0 0 ATI Radeon +ATI Mobility Radeon 4100 supported 1 1 3.3 ATI Mobility Radeon 4100 +ATI Mobility Radeon 7xxx supported 0 1 1.3 ATI Mobility Radeon 7xxx +ATI Mobility Radeon 9600 supported 1 1 2.1 ATI Mobility Radeon 9600 +ATI Mobility Radeon 9700 supported 0 1 2.1 ATI Mobility Radeon 9700 +ATI Mobility Radeon 9800 supported 1 0 0 ATI Mobility Radeon 9800 +ATI Mobility Radeon HD 2300 supported 0 1 2.1 ATI Mobility Radeon HD 2300 +ATI Mobility Radeon HD 2400 supported 1 1 3.3 ATI Mobility Radeon HD 2400 +ATI Mobility Radeon HD 2600 supported 1 1 3.3 ATI Mobility Radeon HD 2600 +ATI Mobility Radeon HD 2700 supported 3 0 0 ATI Mobility Radeon HD 2700 +ATI Mobility Radeon HD 3400 supported 1 1 4 ATI Mobility Radeon HD 3400 +ATI Mobility Radeon HD 3600 supported 1 1 4 ATI Mobility Radeon HD 3600 +ATI Mobility Radeon HD 3800 supported 3 1 3.3 ATI Mobility Radeon HD 3800 +ATI Mobility Radeon HD 4200 supported 1 1 4 ATI Mobility Radeon HD 4200 +ATI Mobility Radeon HD 4300 supported 1 1 4 ATI Mobility Radeon HD 4300 +ATI Mobility Radeon HD 4500 supported 1 1 4 ATI Mobility Radeon HD 4500 +ATI Mobility Radeon HD 4600 supported 2 1 3.3 ATI Mobility Radeon HD 4600 +ATI Mobility Radeon HD 4800 supported 3 1 3.3 ATI Mobility Radeon HD 4800 +ATI Mobility Radeon HD 5100 supported 3 1 3.2 ATI Mobility Radeon HD 5100 +ATI Mobility Radeon HD 5300 supported 3 0 0 ATI Mobility Radeon HD 5300 +ATI Mobility Radeon HD 530v supported 1 1 3.3 ATI Mobility Radeon HD 530v +ATI Mobility Radeon HD 5400 supported 2 1 4.2 ATI Mobility Radeon HD 5400 +ATI Mobility Radeon HD 540v supported 1 1 3.3 ATI Mobility Radeon HD 540v +ATI Mobility Radeon HD 545v supported 2 1 4 ATI Mobility Radeon HD 545v +ATI Mobility Radeon HD 5500 supported 3 0 4.2 ATI Mobility Radeon HD 5500 +ATI Mobility Radeon HD 550v supported 3 1 4 ATI Mobility Radeon HD 550v +ATI Mobility Radeon HD 5600 supported 3 1 4.2 ATI Mobility Radeon HD 5600 +ATI Mobility Radeon HD 560v supported 3 1 3.2 ATI Mobility Radeon HD 560v +ATI Mobility Radeon HD 565v supported 3 1 3.3 ATI Mobility Radeon HD 565v +ATI Mobility Radeon HD 5700 supported 3 1 4.1 ATI Mobility Radeon HD 5700 +ATI Mobility Radeon HD 6300 supported 1 1 4.2 ATI Radeon HD 6300 +ATI Mobility Radeon HD 6500 supported 3 1 4.2 ATI Radeon HD 6500 +ATI Mobility Radeon HD 6500M supported 3 1 4.2 ATI Radeon HD 6500 +ATI Mobility Radeon X1xxx NO MATCH +ATI Mobility Radeon X2xxx NO MATCH +ATI Mobility Radeon X3xx supported 1 1 2.1 ATI Radeon X300 +ATI Mobility Radeon X6xx supported 1 1 2.1 ATI Radeon X600 +ATI Mobility Radeon X7xx supported 2 1 2.1 ATI Radeon X700 +ATI Mobility Radeon Xxxx NO MATCH +ATI R300 (9700) supported 0 1 2.1 ATI R300 (9700) +ATI RV410 (X700) supported 1 0 0 ATI RV410 (X700) +ATI RV530 supported 1 0 0 ATI RV530 +ATI Radeon supported 3 0 0 ATI Radeon +ATI Radeon 2100 supported 0 1 2.1 ATI Radeon 2100 +ATI Radeon 3000 supported 1 1 4 ATI Radeon 3000 +ATI Radeon 3100 supported 0 1 3.3 ATI Radeon 3100 +ATI Radeon 5xxx supported 3 0 0 ATI Radeon 5xxx +ATI Radeon 7000 supported 0 1 2 ATI Radeon 7xxx +ATI Radeon 7xxx supported 0 1 2 ATI Radeon 7xxx +ATI Radeon 8xxx supported 0 0 0 ATI Radeon 8xxx +ATI Radeon 9000 supported 0 1 1.3 ATI Radeon 9000 +ATI Radeon 9100 supported 0 0 0 ATI Radeon 9100 +ATI Radeon 9200 supported 0 1 1.3 ATI Radeon 9200 +ATI Radeon 9500 supported 0 1 2.1 ATI Radeon 9500 +ATI Radeon 9600 supported 0 1 2.1 ATI Radeon 9600 +ATI Radeon 9700 supported 1 0 0 ATI Radeon 9700 +ATI Radeon 9800 supported 1 1 2.1 ATI Radeon 9800 +ATI Radeon HD 2300 supported 0 1 3.3 ATI Radeon HD 2300 +ATI Radeon HD 2400 supported 1 1 4 ATI Radeon HD 2400 +ATI Radeon HD 2600 supported 2 1 4 ATI Radeon HD 2600 +ATI Radeon HD 2900 supported 3 1 3.3 ATI Radeon HD 2900 +ATI Radeon HD 3000 supported 0 0 0 ATI Radeon HD 3000 +ATI Radeon HD 3100 supported 1 0 0 ATI Radeon HD 3100 +ATI Radeon HD 3200 supported 1 1 4 ATI Radeon HD 3200 +ATI Radeon HD 3300 supported 1 1 3.3 ATI Radeon HD 3300 +ATI Radeon HD 3400 supported 1 1 4 ATI Radeon HD 3400 +ATI Radeon HD 3500 supported 2 0 0 ATI Radeon HD 3500 +ATI Radeon HD 3600 supported 3 1 4 ATI Radeon HD 3600 +ATI Radeon HD 3700 supported 3 0 3.3 ATI Radeon HD 3700 +ATI Radeon HD 3800 supported 3 1 4 ATI Radeon HD 3800 +ATI Radeon HD 4200 supported 1 1 4 ATI Radeon HD 4200 +ATI Radeon HD 4300 supported 2 1 4 ATI Radeon HD 4300 +ATI Radeon HD 4400 supported 2 0 0 ATI Radeon HD 4400 +ATI Radeon HD 4500 supported 2 1 3.3 ATI Radeon HD 4500 +ATI Radeon HD 4600 supported 3 1 4 ATI Radeon HD 4600 +ATI Radeon HD 4700 supported 3 1 3.3 ATI Radeon HD 4700 +ATI Radeon HD 4800 supported 3 1 4 ATI Radeon HD 4800 +ATI Radeon HD 5400 supported 3 1 4.2 ATI Radeon HD 5400 +ATI Radeon HD 5500 supported 3 1 4.2 ATI Radeon HD 5500 +ATI Radeon HD 5600 supported 3 1 4.2 ATI Radeon HD 5600 +ATI Radeon HD 5700 supported 3 1 4.2 ATI Radeon HD 5700 +ATI Radeon HD 5800 supported 4 1 4.2 ATI Radeon HD 5800 +ATI Radeon HD 5900 supported 4 1 4.2 ATI Radeon HD 5900 +ATI Radeon HD 6200 supported 0 1 4.2 ATI Radeon HD 6200 +ATI Radeon HD 6300 supported 1 1 4.2 ATI Radeon HD 6300 +ATI Radeon HD 6300M supported 1 1 4.2 ATI Radeon HD 6300 +ATI Radeon HD 6400 supported 3 1 4.2 ATI Radeon HD 6400 +ATI Radeon HD 64xx supported 3 1 4.2 ATI Radeon HD 6400 +ATI Radeon HD 6500 supported 3 1 4.2 ATI Radeon HD 6500 +ATI Radeon HD 65xx supported 3 1 4.2 ATI Radeon HD 6500 +ATI Radeon HD 6600 supported 3 1 4.2 ATI Radeon HD 6600 +ATI Radeon HD 66xx supported 3 1 4.2 ATI Radeon HD 6600 +ATI Radeon HD 6700 supported 3 1 4.2 ATI Radeon HD 6700 +ATI Radeon HD 6700M supported 3 1 4.2 ATI Radeon HD 6700 +ATI Radeon HD 6800 supported 4 1 4.2 ATI Radeon HD 6800 +ATI Radeon HD 6900 supported 5 1 4.2 ATI Radeon HD 6900 +ATI Radeon HD 7200 supported 2 0 4.2 ATI Radeon HD 7200 +ATI Radeon HD 7300 supported 2 0 4.2 ATI Radeon HD 7300 +ATI Radeon HD 7400 supported 2 0 4.2 ATI Radeon HD 7400 +ATI Radeon HD 7500 supported 3 1 4.2 ATI Radeon HD 7500 +ATI Radeon HD 7600 supported 3 0 4.2 ATI Radeon HD 7600 +ATI Radeon HD 7700 supported 4 1 4.2 ATI Radeon HD 7700 +ATI Radeon HD 7800 supported 5 1 4.2 ATI Radeon HD 7800 +ATI Radeon HD 7900 supported 5 1 4.2 ATI Radeon HD 7900 +ATI Radeon X1000 supported 2 0 2.1 ATI Radeon X1000 +ATI Radeon X1200 supported 2 0 2.1 ATI Radeon X1200 +ATI Radeon X1300 supported 2 1 2.1 ATI Radeon X1300 +ATI Radeon X13xx supported 2 1 2.1 ATI Radeon X1300 +ATI Radeon X1400 supported 2 1 2.1 ATI Radeon X1400 +ATI Radeon X1500 supported 2 1 2.1 ATI Radeon X1500 +ATI Radeon X15xx supported 2 1 2.1 ATI Radeon X1500 +ATI Radeon X1600 supported 2 1 2.1 ATI Radeon X1600 +ATI Radeon X16xx supported 2 1 2.1 ATI Radeon X1600 +ATI Radeon X17xx supported 2 1 2.1 ATI Radeon X1700 +ATI Radeon X1800 supported 3 1 2.1 ATI Radeon X1800 +ATI Radeon X18xx supported 3 1 2.1 ATI Radeon X1800 +ATI Radeon X1900 supported 2 1 2.1 ATI Radeon X1900 +ATI Radeon X19xx supported 2 1 2.1 ATI Radeon X1900 +ATI Radeon X1xxx NO MATCH +ATI Radeon X2xxx NO MATCH +ATI Radeon X300 supported 1 1 2.1 ATI Radeon X300 +ATI Radeon X500 supported 1 1 2.1 ATI Radeon X500 +ATI Radeon X600 supported 1 1 2.1 ATI Radeon X600 +ATI Radeon X700 supported 2 1 2.1 ATI Radeon X700 +ATI Radeon X800 supported 1 1 2.1 ATI Radeon X800 +ATI Radeon Xpress supported 0 1 2.1 ATI Radeon Xpress +ATI Rage 128 supported 0 0 0 ATI Rage 128 +ATI Technologies NO MATCH +ATI Technologies Inc. NO MATCH +ATI Technologies Inc. (DNA-AMD GFX) AMD Radeon HD 6290 Graphics supported 0 1 4.2 ATI Radeon HD 6200 +ATI Technologies Inc. (DNA-ATi 5.1.7.5x32) ATI Mobility Radeon HD 2 NO MATCH +ATI Technologies Inc. (Vista) ATI Mobility Radeon HD 5730 supported 3 1 4.1 ATI Mobility Radeon HD 5700 +ATI Technologies Inc. (Vista) ATI Mobility Radeon HD 5870 supported 4 1 4.2 ATI Radeon HD 5800 +ATI Technologies Inc. 128MB ATI RADEON X600 SE supported 1 1 2.1 ATI Radeon X600 +ATI Technologies Inc. 128MB ATI RADEON X600 SE x86/SSE2 supported 1 1 2.1 ATI Radeon X600 +ATI Technologies Inc. 128MB ATI Radeon X1300 supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. 128MB ATI Radeon X1300 x86/MMX/3DNow!/SSE2 supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. 128MB ATI Radeon X1300 x86/SSE2 supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. 256MB ATI RADEON X600 supported 1 1 2.1 ATI Radeon X600 +ATI Technologies Inc. 256MB ATI Radeon X1300PRO supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. 256MB ATI Radeon X1300PRO x86/MMX/3DNow!/SSE2 supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. 256MB ATI Radeon X1300PRO x86/SSE2 supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. 3DP (ATI RADEON XPRESS 200M) supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. 3DP Edition v10.04 (Mobility Radeon X1600) x86/SSE2 supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. 7900 MOD - AMD Radeon HD 7400M Series supported 3 0 4.2 ATI Radeon HD 7400D/G/M +ATI Technologies Inc. 7900 MOD - AMD Radeon HD 7640G supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. ALL-IN-WONDER 9600 SERIES supported 1 0 2.1 ATI All-in-Wonder 9xxx +ATI Technologies Inc. AMD (ATI) FirePro M5950 (FireGL) Mobility Pro Graphics supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. AMD (ATI) FirePro M4000 (FireGL V) Mobility Pro Graphics supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. AMD (ATI) FirePro M5950 (FireGL) Mobility Pro Graphics supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. AMD (ATI) FirePro M6000 (FireGL V) Mobility Pro Graphics supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. AMD (ATI) FirePro M8900 (FireGL) Mobility Pro supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. AMD (ATI) FirePro M8900 (FireGL) Mobility Pro Graphics supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. AMD 760G supported 1 1 3.3 ATI 760G/Radeon 3000 +ATI Technologies Inc. AMD 760G (Microsoft Corporation WDDM 1.1) supported 1 1 3.3 ATI 760G/Radeon 3000 +ATI Technologies Inc. AMD FirePro 2270 supported 2 1 4.2 ATI FirePro 2000 +ATI Technologies Inc. AMD FirePro 2460 supported 2 1 4.2 ATI FirePro 2000 +ATI Technologies Inc. AMD FirePro M2000 supported 3 1 4.2 ATI FirePro M +ATI Technologies Inc. AMD FirePro M3900 supported 2 0 4.1 ATI FirePro M3900 +ATI Technologies Inc. AMD FirePro M4000 supported 3 1 4.2 ATI FirePro M +ATI Technologies Inc. AMD FirePro M5950 supported 3 1 4.2 ATI FirePro M +ATI Technologies Inc. AMD FirePro M5950 Mobility Professional Graphics supported 3 1 4.2 ATI FirePro M +ATI Technologies Inc. AMD FirePro V3900 supported 2 0 0 ATI FirePro 3000 +ATI Technologies Inc. AMD FirePro V3900 (ATI FireGL) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. AMD FirePro V4900 supported 2 0 4.1 ATI FirePro 4000 +ATI Technologies Inc. AMD FirePro V4900 (ATI FireGL) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. AMD FirePro V4900 (FireGL V) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. AMD FirePro V4900 (FireGL V) Graphics Adapter supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. AMD FirePro V5900 supported 3 0 0 ATI FirePro 5000 +ATI Technologies Inc. AMD FirePro V5900 (ATI FireGL) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. AMD FirePro V5900 (FireGL V) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. AMD FirePro V5900 (FireGL V) Graphics Adapter supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. AMD FirePro V7900 supported 3 0 0 ATI FirePro 7000 +ATI Technologies Inc. AMD FirePro V7900 (ATI FireGL) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. AMD FirePro V7900 (FireGL V) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. AMD FirePro V7900 (FireGL V) Graphics Adapter supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. AMD FirePro W5000 (FireGL V) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. AMD FirePro W9000 (FireGL V) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. AMD M860G with ATI Mobility Radeon 4100 supported 1 1 3.3 ATI Mobility Radeon 4100 +ATI Technologies Inc. AMD M880G with ATI Mobility Radeon HD 4200 supported 1 1 4 ATI Mobility Radeon HD 4200 +ATI Technologies Inc. AMD M880G with ATI Mobility Radeon HD 4225 supported 1 1 4 ATI Mobility Radeon HD 4200 +ATI Technologies Inc. AMD M880G with ATI Mobility Radeon HD 4250 supported 1 1 4 ATI Mobility Radeon HD 4200 +ATI Technologies Inc. AMD RADEON HD 6350 supported 1 1 4.2 ATI Radeon HD 6300 +ATI Technologies Inc. AMD RADEON HD 6450 supported 3 1 4.2 ATI Radeon HD 6400 +ATI Technologies Inc. AMD RADEON HD 6450A supported 3 1 4.2 ATI Radeon HD 6400 +ATI Technologies Inc. AMD RADEON HD 6670 supported 3 1 4.2 ATI Radeon HD 6600 +ATI Technologies Inc. AMD RADEON HD 7450 supported 2 0 4.2 ATI Radeon HD 7400 +ATI Technologies Inc. AMD RADEON HD6370D Graphics supported 3 1 4.2 ATI Radeon HD 6300D/G/M +ATI Technologies Inc. AMD RADEON HD6410D Graphics supported 3 0 4.2 ATI Radeon HD 6400D/G/M +ATI Technologies Inc. AMD RADEON HD6530D Graphics supported 4 1 4.2 ATI Radeon HD 6500D/G/M +ATI Technologies Inc. AMD RADEON HD6550D Graphics supported 4 1 4.2 ATI Radeon HD 6500D/G/M +ATI Technologies Inc. AMD Radeon supported 3 0 0 ATI Radeon +ATI Technologies Inc. AMD Radeon (TM) HD 8500M/8700M supported 4 0 4.2 ATI Radeon HD 8500D/G/M +ATI Technologies Inc. AMD Radeon 6600M and 6700M Series supported 0 0 0 ATI Radeon 6xxx +ATI Technologies Inc. AMD Radeon 6600M and 6700M Series (Microsoft Corporation - WDDM v1.20) supported 0 0 0 ATI Radeon 6xxx +ATI Technologies Inc. AMD Radeon HD 5450 supported 3 1 4.2 ATI Radeon HD 5400 +ATI Technologies Inc. AMD Radeon HD 5500 Series supported 3 1 4.2 ATI Radeon HD 5500 +ATI Technologies Inc. AMD Radeon HD 5500 Series (Microsoft Corporation - WDDM v1.20) supported 3 1 4.2 ATI Radeon HD 5500 +ATI Technologies Inc. AMD Radeon HD 6200 series Graphics supported 0 1 4.2 ATI Radeon HD 6200 +ATI Technologies Inc. AMD Radeon HD 6250 supported 0 1 4.2 ATI Radeon HD 6200 +ATI Technologies Inc. AMD Radeon HD 6250 Graphics supported 0 1 4.2 ATI Radeon HD 6200 +ATI Technologies Inc. AMD Radeon HD 6250M supported 3 0 4.2 ATI Radeon HD 6200D/G/M +ATI Technologies Inc. AMD Radeon HD 6290 supported 0 1 4.2 ATI Radeon HD 6200 +ATI Technologies Inc. AMD Radeon HD 6290 Graphics supported 0 1 4.2 ATI Radeon HD 6200 +ATI Technologies Inc. AMD Radeon HD 6290M supported 3 0 4.2 ATI Radeon HD 6200D/G/M +ATI Technologies Inc. AMD Radeon HD 6300 series Graphics supported 1 1 4.2 ATI Radeon HD 6300 +ATI Technologies Inc. AMD Radeon HD 6300M Series supported 3 1 4.2 ATI Radeon HD 6300D/G/M +ATI Technologies Inc. AMD Radeon HD 6310 supported 1 1 4.2 ATI Radeon HD 6300 +ATI Technologies Inc. AMD Radeon HD 6310 Graphics supported 1 1 4.2 ATI Radeon HD 6300 +ATI Technologies Inc. AMD Radeon HD 6310 Graphics (Engineering Sample - WDDM v1.20) supported 1 1 4.2 ATI Radeon HD 6300 +ATI Technologies Inc. AMD Radeon HD 6310 Graphics (Microsoft Corporation - WDDM v1.3) supported 1 1 4.2 ATI Radeon HD 6300 +ATI Technologies Inc. AMD Radeon HD 6310 Graphics (Microsoft Corporation- WDDM v1.20) supported 1 1 4.2 ATI Radeon HD 6300 +ATI Technologies Inc. AMD Radeon HD 6310M supported 3 1 4.2 ATI Radeon HD 6300D/G/M +ATI Technologies Inc. AMD Radeon HD 6320 supported 1 1 4.2 ATI Radeon HD 6300 +ATI Technologies Inc. AMD Radeon HD 6320 Graphics supported 1 1 4.2 ATI Radeon HD 6300 +ATI Technologies Inc. AMD Radeon HD 6320 Graphic supported 1 1 4.2 ATI Radeon HD 6300 +ATI Technologies Inc. AMD Radeon HD 6320 Graphics supported 1 1 4.2 ATI Radeon HD 6300 +ATI Technologies Inc. AMD Radeon HD 6320 Graphics (Microsoft Corporation - WDDM v1.20) supported 1 1 4.2 ATI Radeon HD 6300 +ATI Technologies Inc. AMD Radeon HD 6320 series Graphics supported 1 1 4.2 ATI Radeon HD 6300 +ATI Technologies Inc. AMD Radeon HD 6320M supported 3 1 4.2 ATI Radeon HD 6300D/G/M +ATI Technologies Inc. AMD Radeon HD 6330M supported 3 1 4.2 ATI Radeon HD 6300D/G/M +ATI Technologies Inc. AMD Radeon HD 6350 supported 1 1 4.2 ATI Radeon HD 6300 +ATI Technologies Inc. AMD Radeon HD 6370D supported 3 1 4.2 ATI Radeon HD 6300D/G/M +ATI Technologies Inc. AMD Radeon HD 6370M supported 3 1 4.2 ATI Radeon HD 6300D/G/M +ATI Technologies Inc. AMD Radeon HD 6380G supported 3 1 4.2 ATI Radeon HD 6300D/G/M +ATI Technologies Inc. AMD Radeon HD 6400 Series supported 3 1 4.2 ATI Radeon HD 6400 +ATI Technologies Inc. AMD Radeon HD 6400M Series supported 3 0 4.2 ATI Radeon HD 6400D/G/M +ATI Technologies Inc. AMD Radeon HD 6410D supported 3 0 4.2 ATI Radeon HD 6400D/G/M +ATI Technologies Inc. AMD Radeon HD 6410D Graphics supported 3 0 4.2 ATI Radeon HD 6400D/G/M +ATI Technologies Inc. AMD Radeon HD 6450 supported 3 1 4.2 ATI Radeon HD 6400 +ATI Technologies Inc. AMD Radeon HD 6450 (Microsoft Corporation - WDDM v1.2) supported 3 1 4.2 ATI Radeon HD 6400 +ATI Technologies Inc. AMD Radeon HD 6450 Graphics supported 3 1 4.2 ATI Radeon HD 6400 +ATI Technologies Inc. AMD Radeon HD 6450A supported 3 1 4.2 ATI Radeon HD 6400 +ATI Technologies Inc. AMD Radeon HD 6450A Graphics supported 3 1 4.2 ATI Radeon HD 6400 +ATI Technologies Inc. AMD Radeon HD 6450M supported 3 0 4.2 ATI Radeon HD 6400D/G/M +ATI Technologies Inc. AMD Radeon HD 6470M supported 3 0 4.2 ATI Radeon HD 6400D/G/M +ATI Technologies Inc. AMD Radeon HD 6470M/7400M Series supported 3 0 4.2 ATI Radeon HD 6400D/G/M +ATI Technologies Inc. AMD Radeon HD 6480G supported 3 0 4.2 ATI Radeon HD 6400D/G/M +ATI Technologies Inc. AMD Radeon HD 6480M supported 3 0 4.2 ATI Radeon HD 6400D/G/M +ATI Technologies Inc. AMD Radeon HD 6490M supported 3 0 4.2 ATI Radeon HD 6400D/G/M +ATI Technologies Inc. AMD Radeon HD 6500 Series supported 3 1 4.2 ATI Radeon HD 6500 +ATI Technologies Inc. AMD Radeon HD 6500 series graphics supported 3 1 4.2 ATI Radeon HD 6500 +ATI Technologies Inc. AMD Radeon HD 6500M Series supported 4 1 4.2 ATI Radeon HD 6500D/G/M +ATI Technologies Inc. AMD Radeon HD 6500M/5600/5700 Series supported 4 1 4.2 ATI Radeon HD 6500D/G/M +ATI Technologies Inc. AMD Radeon HD 6510 Series supported 3 1 4.2 ATI Radeon HD 6500 +ATI Technologies Inc. AMD Radeon HD 6520G supported 4 1 4.2 ATI Radeon HD 6500D/G/M +ATI Technologies Inc. AMD Radeon HD 6530D supported 4 1 4.2 ATI Radeon HD 6500D/G/M +ATI Technologies Inc. AMD Radeon HD 6530D Graphics supported 4 1 4.2 ATI Radeon HD 6500D/G/M +ATI Technologies Inc. AMD Radeon HD 6530M supported 4 1 4.2 ATI Radeon HD 6500D/G/M +ATI Technologies Inc. AMD Radeon HD 6550A supported 3 1 4.2 ATI Radeon HD 6500 +ATI Technologies Inc. AMD Radeon HD 6550D supported 4 1 4.2 ATI Radeon HD 6500D/G/M +ATI Technologies Inc. AMD Radeon HD 6550D Graphics supported 4 1 4.2 ATI Radeon HD 6500D/G/M +ATI Technologies Inc. AMD Radeon HD 6550M supported 4 1 4.2 ATI Radeon HD 6500D/G/M +ATI Technologies Inc. AMD Radeon HD 6570 supported 3 1 4.2 ATI Radeon HD 6500 +ATI Technologies Inc. AMD Radeon HD 6570 (Microsoft Corporation - WDDM v1.2) supported 3 1 4.2 ATI Radeon HD 6500 +ATI Technologies Inc. AMD Radeon HD 6570 (Microsoft Corporation - WDDM v1.20) supported 3 1 4.2 ATI Radeon HD 6500 +ATI Technologies Inc. AMD Radeon HD 6570M supported 4 1 4.2 ATI Radeon HD 6500D/G/M +ATI Technologies Inc. AMD Radeon HD 6570M/5700 Series supported 4 1 4.2 ATI Radeon HD 6500D/G/M +ATI Technologies Inc. AMD Radeon HD 6570M/5730 supported 4 1 4.2 ATI Radeon HD 6500D/G/M +ATI Technologies Inc. AMD Radeon HD 6600 Series supported 3 1 4.2 ATI Radeon HD 6600 +ATI Technologies Inc. AMD Radeon HD 6600M Series supported 4 0 4.2 ATI Radeon HD 6600D/G/M +ATI Technologies Inc. AMD Radeon HD 6610M Graphics supported 4 0 4.2 ATI Radeon HD 6600D/G/M +ATI Technologies Inc. AMD Radeon HD 6620G supported 4 0 4.2 ATI Radeon HD 6600D/G/M +ATI Technologies Inc. AMD Radeon HD 6625M Graphics supported 4 0 4.2 ATI Radeon HD 6600D/G/M +ATI Technologies Inc. AMD Radeon HD 6630M supported 4 0 4.2 ATI Radeon HD 6600D/G/M +ATI Technologies Inc. AMD Radeon HD 6650A Graphics supported 3 1 4.2 ATI Radeon HD 6600 +ATI Technologies Inc. AMD Radeon HD 6650M supported 4 0 4.2 ATI Radeon HD 6600D/G/M +ATI Technologies Inc. AMD Radeon HD 6670 supported 3 1 4.2 ATI Radeon HD 6600 +ATI Technologies Inc. AMD Radeon HD 6670 (Microsoft Corporation - WDDM v1.2) supported 3 1 4.2 ATI Radeon HD 6600 +ATI Technologies Inc. AMD Radeon HD 6670 (Microsoft Corporation - WDDM v1.20) supported 3 1 4.2 ATI Radeon HD 6600 +ATI Technologies Inc. AMD Radeon HD 6700 Series supported 3 1 4.2 ATI Radeon HD 6700 +ATI Technologies Inc. AMD Radeon HD 6700 series supported 3 1 4.2 ATI Radeon HD 6700 +ATI Technologies Inc. AMD Radeon HD 6700M Series supported 4 0 4.2 ATI Radeon HD 6700D/G/M +ATI Technologies Inc. AMD Radeon HD 6700M Series (Microsoft Corporation - WDDM v1.20) supported 4 0 4.2 ATI Radeon HD 6700D/G/M +ATI Technologies Inc. AMD Radeon HD 6700M/7700M/7900M Series supported 4 0 4.2 ATI Radeon HD 6700D/G/M +ATI Technologies Inc. AMD Radeon HD 6730M supported 4 0 4.2 ATI Radeon HD 6700D/G/M +ATI Technologies Inc. AMD Radeon HD 6750 supported 3 1 4.2 ATI Radeon HD 6700 +ATI Technologies Inc. AMD Radeon HD 6750M supported 4 0 4.2 ATI Radeon HD 6700D/G/M +ATI Technologies Inc. AMD Radeon HD 6770 supported 3 1 4.2 ATI Radeon HD 6700 +ATI Technologies Inc. AMD Radeon HD 6770M supported 4 0 4.2 ATI Radeon HD 6700D/G/M +ATI Technologies Inc. AMD Radeon HD 6770M OpenGL Engine supported 4 0 4.2 ATI Radeon HD 6700D/G/M +ATI Technologies Inc. AMD Radeon HD 6800 Series supported 4 1 4.2 ATI Radeon HD 6800 +ATI Technologies Inc. AMD Radeon HD 6800 Series (Engineering Sample - WDDM v1.20) supported 4 1 4.2 ATI Radeon HD 6800 +ATI Technologies Inc. AMD Radeon HD 6800 Series (Microsoft Corporation - WDDM v1.2) supported 4 1 4.2 ATI Radeon HD 6800 +ATI Technologies Inc. AMD Radeon HD 6800 Series (Microsoft Corporation - WDDM v1.20) supported 4 1 4.2 ATI Radeon HD 6800 +ATI Technologies Inc. AMD Radeon HD 6800M Series supported 4 0 4.2 ATI Radeon HD 6800D/G/M +ATI Technologies Inc. AMD Radeon HD 6850 supported 4 1 4.2 ATI Radeon HD 6800 +ATI Technologies Inc. AMD Radeon HD 6850 X2 supported 4 1 4.2 ATI Radeon HD 6800 +ATI Technologies Inc. AMD Radeon HD 6850M supported 4 0 4.2 ATI Radeon HD 6800D/G/M +ATI Technologies Inc. AMD Radeon HD 6870 supported 4 1 4.2 ATI Radeon HD 6800 +ATI Technologies Inc. AMD Radeon HD 6870M supported 4 0 4.2 ATI Radeon HD 6800D/G/M +ATI Technologies Inc. AMD Radeon HD 6900 Series supported 5 1 4.2 ATI Radeon HD 6900 +ATI Technologies Inc. AMD Radeon HD 6900 Series (Microsoft Corporation - WDDM v1.2) supported 5 1 4.2 ATI Radeon HD 6900 +ATI Technologies Inc. AMD Radeon HD 6900M Series supported 4 0 4.2 ATI Radeon HD 6900D/G/M +ATI Technologies Inc. AMD Radeon HD 6970 supported 5 1 4.2 ATI Radeon HD 6900 +ATI Technologies Inc. AMD Radeon HD 6970M supported 4 0 4.2 ATI Radeon HD 6900D/G/M +ATI Technologies Inc. AMD Radeon HD 6990 supported 5 1 4.2 ATI Radeon HD 6900 +ATI Technologies Inc. AMD Radeon HD 6990M supported 4 0 4.2 ATI Radeon HD 6900D/G/M +ATI Technologies Inc. AMD Radeon HD 7000 series supported 3 1 4.2 ATI Radeon HD 7000 Series +ATI Technologies Inc. AMD Radeon HD 7290 Graphics supported 2 0 4.2 ATI Radeon HD 7200 +ATI Technologies Inc. AMD Radeon HD 7300 Series (Microsoft Corporation - WDDM v1.2) supported 2 0 4.2 ATI Radeon HD 7300 +ATI Technologies Inc. AMD Radeon HD 7300 Series Graphics supported 2 0 4.2 ATI Radeon HD 7300 +ATI Technologies Inc. AMD Radeon HD 7310 supported 2 0 4.2 ATI Radeon HD 7300 +ATI Technologies Inc. AMD Radeon HD 7310 Graphics supported 2 0 4.2 ATI Radeon HD 7300 +ATI Technologies Inc. AMD Radeon HD 7310 Graphics supported 2 0 4.2 ATI Radeon HD 7300 +ATI Technologies Inc. AMD Radeon HD 7310 Graphics (Microsoft Corporation - WDDM v1.2) supported 2 0 4.2 ATI Radeon HD 7300 +ATI Technologies Inc. AMD Radeon HD 7310G supported 3 0 4.2 ATI Radeon HD 7300D/G/M +ATI Technologies Inc. AMD Radeon HD 7310M supported 3 0 4.2 ATI Radeon HD 7300D/G/M +ATI Technologies Inc. AMD Radeon HD 7340 supported 2 0 4.2 ATI Radeon HD 7300 +ATI Technologies Inc. AMD Radeon HD 7340 Graphics supported 2 0 4.2 ATI Radeon HD 7300 +ATI Technologies Inc. AMD Radeon HD 7340G supported 3 0 4.2 ATI Radeon HD 7300D/G/M +ATI Technologies Inc. AMD Radeon HD 7340M supported 3 0 4.2 ATI Radeon HD 7300D/G/M +ATI Technologies Inc. AMD Radeon HD 7350 supported 2 0 4.2 ATI Radeon HD 7300 +ATI Technologies Inc. AMD Radeon HD 7350 Graphics supported 2 0 4.2 ATI Radeon HD 7300 +ATI Technologies Inc. AMD Radeon HD 7370M supported 3 0 4.2 ATI Radeon HD 7300D/G/M +ATI Technologies Inc. AMD Radeon HD 7400 Series supported 2 0 4.2 ATI Radeon HD 7400 +ATI Technologies Inc. AMD Radeon HD 7400 Series (Microsoft Corporation - WDDM v1.2) supported 2 0 4.2 ATI Radeon HD 7400 +ATI Technologies Inc. AMD Radeon HD 7400G supported 3 0 4.2 ATI Radeon HD 7400D/G/M +ATI Technologies Inc. AMD Radeon HD 7400M Series supported 3 0 4.2 ATI Radeon HD 7400D/G/M +ATI Technologies Inc. AMD Radeon HD 7400M Series (Microsoft Corporation - WDDM v1.20) supported 3 0 4.2 ATI Radeon HD 7400D/G/M +ATI Technologies Inc. AMD Radeon HD 7410M supported 3 0 4.2 ATI Radeon HD 7400D/G/M +ATI Technologies Inc. AMD Radeon HD 7420G supported 3 0 4.2 ATI Radeon HD 7400D/G/M +ATI Technologies Inc. AMD Radeon HD 7450 supported 2 0 4.2 ATI Radeon HD 7400 +ATI Technologies Inc. AMD Radeon HD 7450 Graphics supported 2 0 4.2 ATI Radeon HD 7400 +ATI Technologies Inc. AMD Radeon HD 7450A Graphics supported 2 0 4.2 ATI Radeon HD 7400 +ATI Technologies Inc. AMD Radeon HD 7450M supported 3 0 4.2 ATI Radeon HD 7400D/G/M +ATI Technologies Inc. AMD Radeon HD 7470 supported 2 0 4.2 ATI Radeon HD 7400 +ATI Technologies Inc. AMD Radeon HD 7470 Series supported 2 0 4.2 ATI Radeon HD 7400 +ATI Technologies Inc. AMD Radeon HD 7470M supported 3 0 4.2 ATI Radeon HD 7400D/G/M +ATI Technologies Inc. AMD Radeon HD 7480D supported 3 0 4.2 ATI Radeon HD 7400D/G/M +ATI Technologies Inc. AMD Radeon HD 7500 Series supported 3 1 4.2 ATI Radeon HD 7500 +ATI Technologies Inc. AMD Radeon HD 7500 Series (Microsoft Corporation - WDDM v1.2) supported 3 1 4.2 ATI Radeon HD 7500 +ATI Technologies Inc. AMD Radeon HD 7500 Series (Microsoft Corporation - WDDM v1.20) supported 3 1 4.2 ATI Radeon HD 7500 +ATI Technologies Inc. AMD Radeon HD 7500/7600 Series supported 3 1 4.2 ATI Radeon HD 7500 +ATI Technologies Inc. AMD Radeon HD 7500G supported 4 0 4.2 ATI Radeon HD 7500D/G/M +ATI Technologies Inc. AMD Radeon HD 7500G + 7500M/7600M Dual Graphics supported 4 0 4.2 ATI Radeon HD 7500D/G/M +ATI Technologies Inc. AMD Radeon HD 7500M/7600M Series supported 4 0 4.2 ATI Radeon HD 7500D/G/M +ATI Technologies Inc. AMD Radeon HD 7510 supported 3 1 4.2 ATI Radeon HD 7500 +ATI Technologies Inc. AMD Radeon HD 7520G supported 4 0 4.2 ATI Radeon HD 7500D/G/M +ATI Technologies Inc. AMD Radeon HD 7520G + 6400M Dual Graphics supported 4 0 4.2 ATI Radeon HD 7500D/G/M +ATI Technologies Inc. AMD Radeon HD 7520G + 7470M Dual Graphics supported 4 0 4.2 ATI Radeon HD 7500D/G/M +ATI Technologies Inc. AMD Radeon HD 7520G + 7500/7600 Dual Graphics supported 4 0 4.2 ATI Radeon HD 7500D/G/M +ATI Technologies Inc. AMD Radeon HD 7520G + 7600M Dual Graphics supported 4 0 4.2 ATI Radeon HD 7500D/G/M +ATI Technologies Inc. AMD Radeon HD 7520G + 7610M Dual Graphics supported 4 0 4.2 ATI Radeon HD 7500D/G/M +ATI Technologies Inc. AMD Radeon HD 7520G + 7670M Dual Graphics supported 4 0 4.2 ATI Radeon HD 7500D/G/M +ATI Technologies Inc. AMD Radeon HD 7540D supported 4 0 4.2 ATI Radeon HD 7500D/G/M +ATI Technologies Inc. AMD Radeon HD 7540D + 7450 Dual Graphics supported 4 0 4.2 ATI Radeon HD 7500D/G/M +ATI Technologies Inc. AMD Radeon HD 7550M supported 4 0 4.2 ATI Radeon HD 7500D/G/M +ATI Technologies Inc. AMD Radeon HD 7550M/7650M Graphics supported 4 0 4.2 ATI Radeon HD 7500D/G/M +ATI Technologies Inc. AMD Radeon HD 7560D supported 4 0 4.2 ATI Radeon HD 7500D/G/M +ATI Technologies Inc. AMD Radeon HD 7560D (Microsoft Corporation - WDDM v1.20) supported 4 0 4.2 ATI Radeon HD 7500D/G/M +ATI Technologies Inc. AMD Radeon HD 7560D + 6570 Dual Graphics supported 4 0 4.2 ATI Radeon HD 7500D/G/M +ATI Technologies Inc. AMD Radeon HD 7560D + 6670 Dual Graphics supported 4 0 4.2 ATI Radeon HD 7500D/G/M +ATI Technologies Inc. AMD Radeon HD 7560D + 7560D Dual Graphics supported 4 0 4.2 ATI Radeon HD 7500D/G/M +ATI Technologies Inc. AMD Radeon HD 7560D + 7600 Dual Graphics supported 4 0 4.2 ATI Radeon HD 7500D/G/M +ATI Technologies Inc. AMD Radeon HD 7560D + 7670 Dual Graphics supported 4 0 4.2 ATI Radeon HD 7500D/G/M +ATI Technologies Inc. AMD Radeon HD 7570 supported 3 1 4.2 ATI Radeon HD 7500 +ATI Technologies Inc. AMD Radeon HD 7570 Graphics supported 3 1 4.2 ATI Radeon HD 7500 +ATI Technologies Inc. AMD Radeon HD 7570 Series supported 3 1 4.2 ATI Radeon HD 7500 +ATI Technologies Inc. AMD Radeon HD 7570M supported 4 0 4.2 ATI Radeon HD 7500D/G/M +ATI Technologies Inc. AMD Radeon HD 7570M/HD 7670M Graphics supported 4 0 4.2 ATI Radeon HD 7500D/G/M +ATI Technologies Inc. AMD Radeon HD 7580D supported 4 0 4.2 ATI Radeon HD 7500D/G/M +ATI Technologies Inc. AMD Radeon HD 7600 Series (Microsoft Corporation - WDDM v1.20) supported 3 0 4.2 ATI Radeon HD 7600 +ATI Technologies Inc. AMD Radeon HD 7600G supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7600G + 7500M/7600M Dual Graphics supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7600G + 7550M Dual Graphics supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7600M + 7600M Dual Graphics supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7600M Series supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7610M supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7620G supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7640G supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7640G + 6400M Dual Graphics supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7640G + 7450M Dual Graphics supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7640G + 7470M Dual Graphics supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7640G + 7500/7600 Dual Graphics supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7640G + 7500M/7600M Dual Graphics supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7640G + 7600M Dual Graphics supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7640G + 7610M Dual Graphics supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7640G + 7670M Dual Graphics supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7650A supported 3 0 4.2 ATI Radeon HD 7600 +ATI Technologies Inc. AMD Radeon HD 7650A Graphics supported 3 0 4.2 ATI Radeon HD 7600 +ATI Technologies Inc. AMD Radeon HD 7650M supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7650M Series supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7660D supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7660D + 6570 Dual Graphics supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7660D + 6670 Dual Graphics supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7660D + 7670 Dual Graphics supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7660D + 7700 Dual Graphics supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7660G supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7660G + 6400M Dual Graphics supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7660G + 7400M Dual Graphics supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7660G + 7470M Dual Graphics supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7660G + 7500/7600 Dual Graphics supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7660G + 7600M Dual Graphics supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7660G + 7610M Dual Graphics supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7660G + 7670M Dual Graphics supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7660G + 7700M Dual Graphics supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7670 supported 3 0 4.2 ATI Radeon HD 7600 +ATI Technologies Inc. AMD Radeon HD 7670M supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7690M supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD 7700 Series supported 4 1 4.2 ATI Radeon HD 7700 +ATI Technologies Inc. AMD Radeon HD 7700 Series (Microsoft Corporation - WDDM v1.3) supported 4 1 4.2 ATI Radeon HD 7700 +ATI Technologies Inc. AMD Radeon HD 7700M Series supported 4 0 4.2 ATI Radeon HD 7700D/G/M +ATI Technologies Inc. AMD Radeon HD 7730M supported 4 0 4.2 ATI Radeon HD 7700D/G/M +ATI Technologies Inc. AMD Radeon HD 7770 supported 4 1 4.2 ATI Radeon HD 7700 +ATI Technologies Inc. AMD Radeon HD 7770 GHz Edition supported 4 1 4.2 ATI Radeon HD 7700 +ATI Technologies Inc. AMD Radeon HD 7800 Series supported 5 1 4.2 ATI Radeon HD 7800 +ATI Technologies Inc. AMD Radeon HD 7800 Series (Engineering Sample - WDDM v1.20) supported 5 1 4.2 ATI Radeon HD 7800 +ATI Technologies Inc. AMD Radeon HD 7800 Series (Microsoft Corporation - WDDM v1.20) supported 5 1 4.2 ATI Radeon HD 7800 +ATI Technologies Inc. AMD Radeon HD 7800 Series (Microsoft Corporation - WDDM v1.3) supported 5 1 4.2 ATI Radeon HD 7800 +ATI Technologies Inc. AMD Radeon HD 7800M Series supported 4 0 4.2 ATI Radeon HD 7800D/G/M +ATI Technologies Inc. AMD Radeon HD 7870 supported 5 1 4.2 ATI Radeon HD 7800 +ATI Technologies Inc. AMD Radeon HD 7870M supported 4 0 4.2 ATI Radeon HD 7800D/G/M +ATI Technologies Inc. AMD Radeon HD 7900 Series supported 5 1 4.2 ATI Radeon HD 7900 +ATI Technologies Inc. AMD Radeon HD 7900 Series (Microsoft Corporation - WDDM v1.3) supported 5 1 4.2 ATI Radeon HD 7900 +ATI Technologies Inc. AMD Radeon HD 7950 supported 5 1 4.2 ATI Radeon HD 7900 +ATI Technologies Inc. AMD Radeon HD 7970 supported 5 1 4.2 ATI Radeon HD 7900 +ATI Technologies Inc. AMD Radeon HD 7970M supported 4 0 4.2 ATI Radeon HD 7900D/G/M +ATI Technologies Inc. AMD Radeon HD 8210 NO MATCH +ATI Technologies Inc. AMD Radeon HD 8240 NO MATCH +ATI Technologies Inc. AMD Radeon HD 8250 NO MATCH +ATI Technologies Inc. AMD Radeon HD 8280G supported 3 0 4.2 ATI Radeon HD 8200D/G/M +ATI Technologies Inc. AMD Radeon HD 8330 supported 2 0 4.2 ATI Radeon HD 8300 (OEM) +ATI Technologies Inc. AMD Radeon HD 8350 supported 2 0 4.2 ATI Radeon HD 8300 (OEM) +ATI Technologies Inc. AMD Radeon HD 8350G supported 3 0 4.2 ATI Radeon HD 8300D/G/M +ATI Technologies Inc. AMD Radeon HD 8400 supported 2 0 4.2 ATI Radeon HD 8400 (OEM) +ATI Technologies Inc. AMD Radeon HD 8450 supported 2 0 4.2 ATI Radeon HD 8400 (OEM) +ATI Technologies Inc. AMD Radeon HD 8450G supported 4 0 4.2 ATI Radeon HD 8400D/G/M +ATI Technologies Inc. AMD Radeon HD 8470 supported 2 0 4.2 ATI Radeon HD 8400 (OEM) +ATI Technologies Inc. AMD Radeon HD 8470D supported 4 0 4.2 ATI Radeon HD 8400D/G/M +ATI Technologies Inc. AMD Radeon HD 8550G supported 4 0 4.2 ATI Radeon HD 8500D/G/M +ATI Technologies Inc. AMD Radeon HD 8570 supported 3 1 4.2 ATI Radeon HD 8500 (OEM) +ATI Technologies Inc. AMD Radeon HD 8570D supported 4 0 4.2 ATI Radeon HD 8500D/G/M +ATI Technologies Inc. AMD Radeon HD 8610G supported 4 0 4.2 ATI Radeon HD 8600D/G/M +ATI Technologies Inc. AMD Radeon HD 8650G supported 4 0 4.2 ATI Radeon HD 8600D/G/M +ATI Technologies Inc. AMD Radeon HD 8670D supported 4 0 4.2 ATI Radeon HD 8600D/G/M +ATI Technologies Inc. AMD Radeon HD 8670D + 6670 Dual Graphics supported 4 0 4.2 ATI Radeon HD 8600D/G/M +ATI Technologies Inc. AMD Radeon HD 8700M Series supported 4 0 4.2 ATI Radeon HD 8700D/G/M +ATI Technologies Inc. AMD Radeon HD 8730M supported 4 0 4.2 ATI Radeon HD 8700D/G/M +ATI Technologies Inc. AMD Radeon HD 8750M supported 4 0 4.2 ATI Radeon HD 8700D/G/M +ATI Technologies Inc. AMD Radeon HD 8760 supported 4 1 4.2 ATI Radeon HD 8700 (OEM) +ATI Technologies Inc. AMD Radeon HD 8800M Series supported 4 0 4.2 ATI Radeon HD 8800D/G/M +ATI Technologies Inc. AMD Radeon HD 8900 Series (OEM) supported 5 1 4.2 ATI Radeon HD 8900 (OEM) +ATI Technologies Inc. AMD Radeon HD 8950 supported 5 1 4.2 ATI Radeon HD 8900 (OEM) +ATI Technologies Inc. AMD Radeon HD HD7850M supported 4 0 4.2 ATI Radeon HD 7800D/G/M +ATI Technologies Inc. AMD Radeon HD6370D Graphics supported 3 1 4.2 ATI Radeon HD 6300D/G/M +ATI Technologies Inc. AMD Radeon HD7610M supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon HD7700 Series supported 4 1 4.2 ATI Radeon HD 7700 +ATI Technologies Inc. AMD Radeon HD7770 supported 4 1 4.2 ATI Radeon HD 7700 +ATI Technologies Inc. AMD Radeon HD7770 GHz Edition supported 4 1 4.2 ATI Radeon HD 7700 +ATI Technologies Inc. AMD Radeon HD8350 supported 2 0 4.2 ATI Radeon HD 8300 (OEM) +ATI Technologies Inc. AMD Radeon(TM) HD 6380G supported 3 1 4.2 ATI Radeon HD 6300D/G/M +ATI Technologies Inc. AMD Radeon(TM) HD 6470M supported 3 0 4.2 ATI Radeon HD 6400D/G/M +ATI Technologies Inc. AMD Radeon(TM) HD 6480G supported 3 0 4.2 ATI Radeon HD 6400D/G/M +ATI Technologies Inc. AMD Radeon(TM) HD 6480G (Microsoft Corporation - WDDM v1.20) supported 3 0 4.2 ATI Radeon HD 6400D/G/M +ATI Technologies Inc. AMD Radeon(TM) HD 6520G supported 4 1 4.2 ATI Radeon HD 6500D/G/M +ATI Technologies Inc. AMD Radeon(TM) HD 6620G supported 4 0 4.2 ATI Radeon HD 6600D/G/M +ATI Technologies Inc. AMD Radeon(TM) HD 6630M supported 4 0 4.2 ATI Radeon HD 6600D/G/M +ATI Technologies Inc. AMD Radeon(TM) HD 6650M supported 4 0 4.2 ATI Radeon HD 6600D/G/M +ATI Technologies Inc. AMD Radeon(TM) HD 7450 supported 2 0 4.2 ATI Radeon HD 7400 +ATI Technologies Inc. AMD Radeon(TM) HD 7450A Graphics supported 2 0 4.2 ATI Radeon HD 7400 +ATI Technologies Inc. AMD Radeon(TM) HD 7650A Graphics supported 3 0 4.2 ATI Radeon HD 7600 +ATI Technologies Inc. AMD Radeon(TM) HD 7670A Graphics supported 3 0 4.2 ATI Radeon HD 7600 +ATI Technologies Inc. AMD Radeon(TM) HD 7670M supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon(TM) HD 8350 supported 2 0 4.2 ATI Radeon HD 8300 (OEM) +ATI Technologies Inc. AMD Radeon(TM) HD8490 supported 2 0 4.2 ATI Radeon HD 8400 (OEM) +ATI Technologies Inc. AMD Radeon. HD 7350 supported 2 0 4.2 ATI Radeon HD 7300 +ATI Technologies Inc. AMD Radeon. HD 7670M supported 4 0 4.2 ATI Radeon HD 7600D/G/M +ATI Technologies Inc. AMD Radeon. HD 7730M supported 4 0 4.2 ATI Radeon HD 7700D/G/M +ATI Technologies Inc. ASUS AH3450 Series supported 1 1 4 ATI Radeon HD 3400 +ATI Technologies Inc. ASUS AH3650 Series supported 3 1 4 ATI Radeon HD 3600 +ATI Technologies Inc. ASUS AH4650 Series NO MATCH +ATI Technologies Inc. ASUS ARES NO MATCH +ATI Technologies Inc. ASUS ARES2 NO MATCH +ATI Technologies Inc. ASUS EAH2400 Series supported 1 1 4 ATI Radeon HD 2400 +ATI Technologies Inc. ASUS EAH2600 Series supported 2 1 4 ATI Radeon HD 2600 +ATI Technologies Inc. ASUS EAH3450 Series supported 1 1 4 ATI Radeon HD 3400 +ATI Technologies Inc. ASUS EAH3650 Series supported 3 1 4 ATI Radeon HD 3600 +ATI Technologies Inc. ASUS EAH3850 Series supported 3 1 4 ATI Radeon HD 3800 +ATI Technologies Inc. ASUS EAH3870 Series supported 3 1 4 ATI Radeon HD 3800 +ATI Technologies Inc. ASUS EAH4350 series supported 2 1 4 ATI Radeon HD 4300 +ATI Technologies Inc. ASUS EAH4550 series supported 2 1 3.3 ATI Radeon HD 4500 +ATI Technologies Inc. ASUS EAH4650 series supported 3 1 4 ATI Radeon HD 4600 +ATI Technologies Inc. ASUS EAH4670 series supported 3 1 4 ATI Radeon HD 4600 +ATI Technologies Inc. ASUS EAH4770 Series supported 3 1 3.3 ATI Radeon HD 4700 +ATI Technologies Inc. ASUS EAH4770 series supported 3 1 3.3 ATI Radeon HD 4700 +ATI Technologies Inc. ASUS EAH4850 series supported 3 1 4 ATI Radeon HD 4800 +ATI Technologies Inc. ASUS EAH4870 series supported 3 1 4 ATI Radeon HD 4800 +ATI Technologies Inc. ASUS EAH4870x2 supported 3 1 4 ATI Radeon HD 4800 +ATI Technologies Inc. ASUS EAH4890 supported 3 1 4 ATI Radeon HD 4800 +ATI Technologies Inc. ASUS EAH5450 Series supported 3 1 4.2 ATI Radeon HD 5400 +ATI Technologies Inc. ASUS EAH5550 Series supported 3 1 4.2 ATI Radeon HD 5500 +ATI Technologies Inc. ASUS EAH5570 series supported 3 1 4.2 ATI Radeon HD 5500 +ATI Technologies Inc. ASUS EAH5670 Series supported 3 1 4.2 ATI Radeon HD 5600 +ATI Technologies Inc. ASUS EAH5750 Series supported 3 1 4.2 ATI Radeon HD 5700 +ATI Technologies Inc. ASUS EAH5770 Series supported 3 1 4.2 ATI Radeon HD 5700 +ATI Technologies Inc. ASUS EAH5830 Series supported 4 1 4.2 ATI Radeon HD 5800 +ATI Technologies Inc. ASUS EAH5850 Series supported 4 1 4.2 ATI Radeon HD 5800 +ATI Technologies Inc. ASUS EAH5870 Series supported 4 1 4.2 ATI Radeon HD 5800 +ATI Technologies Inc. ASUS EAH6450 Series supported 3 1 4.2 ATI Radeon HD 6400 +ATI Technologies Inc. ASUS EAH6570 Series supported 3 1 4.2 ATI Radeon HD 6500 +ATI Technologies Inc. ASUS EAH6670 Series supported 3 1 4.2 ATI Radeon HD 6600 +ATI Technologies Inc. ASUS EAH6750 Series supported 3 1 4.2 ATI Radeon HD 6700 +ATI Technologies Inc. ASUS EAH6770 Series supported 3 1 4.2 ATI Radeon HD 6700 +ATI Technologies Inc. ASUS EAH6850 Series supported 4 1 4.2 ATI Radeon HD 6800 +ATI Technologies Inc. ASUS EAH6870 Series supported 4 1 4.2 ATI Radeon HD 6800 +ATI Technologies Inc. ASUS EAH6950 Series supported 5 1 4.2 ATI Radeon HD 6900 +ATI Technologies Inc. ASUS EAH6970 Series supported 5 1 4.2 ATI Radeon HD 6900 +ATI Technologies Inc. ASUS Extreme AX300 Series NO MATCH +ATI Technologies Inc. ASUS Extreme AX300SE/T NO MATCH +ATI Technologies Inc. ASUS Extreme AX550 Series NO MATCH +ATI Technologies Inc. ASUS Extreme AX550 Series x86/SSE2 NO MATCH +ATI Technologies Inc. ASUS Extreme AX600 Series supported 1 1 2.1 ATI Radeon X600 +ATI Technologies Inc. ASUS HD 7350 supported 2 0 4.2 ATI Radeon HD 7300 +ATI Technologies Inc. ASUS HD7470 Series supported 2 0 4.2 ATI Radeon HD 7400 +ATI Technologies Inc. ASUS HD7670 Series supported 3 0 4.2 ATI Radeon HD 7600 +ATI Technologies Inc. ASUS HD7750 Series supported 4 1 4.2 ATI Radeon HD 7700 +ATI Technologies Inc. ASUS HD7770 Series supported 4 1 4.2 ATI Radeon HD 7700 +ATI Technologies Inc. ASUS HD7790 Series supported 4 1 4.2 ATI Radeon HD 7700 +ATI Technologies Inc. ASUS HD7850 Series supported 5 1 4.2 ATI Radeon HD 7800 +ATI Technologies Inc. ASUS HD7870 Series supported 5 1 4.2 ATI Radeon HD 7800 +ATI Technologies Inc. ASUS HD7950 Series supported 5 1 4.2 ATI Radeon HD 7900 +ATI Technologies Inc. ASUS HD7970 Series supported 5 1 4.2 ATI Radeon HD 7900 +ATI Technologies Inc. ASUS X1300 Series supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. ASUS X1300 Series x86/MMX/3DNow!/SSE2 supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. ASUS X1300 Series x86/SSE2 supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. ASUS X1300 x86/SSE2 supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. ASUS X1550 Series supported 2 1 2.1 ATI Radeon X1500 +ATI Technologies Inc. ASUS X1550 Series x86/MMX/3DNow!/SSE2 supported 2 1 2.1 ATI Radeon X1500 +ATI Technologies Inc. ASUS X1550 Series x86/SSE2 supported 2 1 2.1 ATI Radeon X1500 +ATI Technologies Inc. ASUS X1600 Series supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. ASUS X1600 Series x86 supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. ASUS X1600 Series x86/MMX/3DNow!/SSE2 supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. ASUS X1600 Series x86/SSE2 supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. ASUS X1650 Series supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. ASUS X1650 Series x86/MMX/3DNow!/SSE2 supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. ASUS X1650 Series x86/SSE2 supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. ASUS X1950 Series x86/MMX/3DNow!/SSE2 supported 2 1 2.1 ATI Radeon X1900 +ATI Technologies Inc. ATI Radeon HD 5000 Series NO MATCH +ATI Technologies Inc. ATI Radeon HD 6350 supported 1 1 4.2 ATI Radeon HD 6300 +ATI Technologies Inc. ATI All-in-Wonder HD supported 1 1 3.3 ATI All-in-Wonder HD +ATI Technologies Inc. ATI Display Adapter supported 1 1 4.1 ATI Display Adapter +ATI Technologies Inc. ATI FireGL V3100 supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI FireGL V3200 Pentium 4 (SSE2) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI FireGL V3300 supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI FireGL V3350 supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI FireGL V3350 Pentium 4 (SSE2) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI FireGL V3400 (Microsoft Corporation - WDDM) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI FireGL V3400 Pentium 4 (SSE2) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI FireGL V3600 supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI FireGL V5200 (Microsoft Corporation - WDDM) supported 1 1 2.1 ATI FireGL 5200 +ATI Technologies Inc. ATI FireGL V5200 Pentium 4 (SSE2) supported 1 1 2.1 ATI FireGL 5200 +ATI Technologies Inc. ATI FireGL V5600 supported 2 1 3.3 ATI FireGL 5xxx +ATI Technologies Inc. ATI FireGL V7200 supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI FireGL V7200 Pentium 4 (SSE2) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI FireGL V7600 supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI FireGL V7700 supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI FireMV 2250 supported 0 1 3.2 ATI FireMV +ATI Technologies Inc. ATI FireMV 2250 x86/SSE2 supported 0 1 3.2 ATI FireMV +ATI Technologies Inc. ATI FirePro 2260 supported 2 1 4.2 ATI FirePro 2000 +ATI Technologies Inc. ATI FirePro 2450 supported 2 1 4.2 ATI FirePro 2000 +ATI Technologies Inc. ATI FirePro 3800 (FireGL) Graphics Adapter supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI FirePro M5800 supported 3 0 0 ATI FirePro M5800 +ATI Technologies Inc. ATI FirePro M7740 supported 3 0 0 ATI FirePro M7740 +ATI Technologies Inc. ATI FirePro M7820 supported 5 1 4.2 ATI FirePro M7820 +ATI Technologies Inc. ATI FirePro M7820 (FireGL) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI FirePro V3700 (FireGL) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI FirePro V3800 supported 2 0 0 ATI FirePro 3000 +ATI Technologies Inc. ATI FirePro V3800 (FireGL V) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI FirePro V3800 (FireGL V) Graphics Adapter supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI FirePro V3800 (FireGL) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI FirePro V4800 supported 2 0 4.1 ATI FirePro 4000 +ATI Technologies Inc. ATI FirePro V4800 (FireGL V) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI FirePro V4800 (FireGL) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI FirePro V5700 (FireGL) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI FirePro V5800 (FireGL V) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI FirePro V5800 (FireGL) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI FirePro V7800 (FireGL V) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI FirePro V7800 (FireGL) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI FirePro V8700 (FireGL) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI FirePro V9800 (FireGL V) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI MOBILITY FIRE GL T2/T2e supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI MOBILITY FireGL V3200 supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. ATI MOBILITY FireGL V5000 Pentium 4 (SSE2) supported 2 1 3.3 ATI FireGL 5xxx +ATI Technologies Inc. ATI MOBILITY FireGL V5200 supported 1 1 2.1 ATI FireGL 5200 +ATI Technologies Inc. ATI MOBILITY FireGL V5200 Pentium 4 (SSE2) supported 1 1 2.1 ATI FireGL 5200 +ATI Technologies Inc. ATI MOBILITY FireGL V5250 supported 1 1 2.1 ATI FireGL 5200 +ATI Technologies Inc. ATI MOBILITY RADEON 9600 Series supported 1 1 2.1 ATI Mobility Radeon 9600 +ATI Technologies Inc. ATI MOBILITY RADEON 9600/9700 supported 1 1 2.1 ATI Mobility Radeon 9600 +ATI Technologies Inc. ATI MOBILITY RADEON 9600/9700 Series supported 1 1 2.1 ATI Mobility Radeon 9600 +ATI Technologies Inc. ATI MOBILITY RADEON 9600/9700 Series (Omega 3 supported 1 1 2.1 ATI Mobility Radeon 9600 +ATI Technologies Inc. ATI MOBILITY RADEON HD 2300 supported 0 1 2.1 ATI Mobility Radeon HD 2300 +ATI Technologies Inc. ATI MOBILITY RADEON HD 2400 supported 1 1 3.3 ATI Mobility Radeon HD 2400 +ATI Technologies Inc. ATI MOBILITY RADEON HD 2600 supported 1 1 3.3 ATI Mobility Radeon HD 2600 +ATI Technologies Inc. ATI MOBILITY RADEON HD 3430 supported 1 1 4 ATI Mobility Radeon HD 3400 +ATI Technologies Inc. ATI MOBILITY RADEON HD 3450 supported 1 1 4 ATI Mobility Radeon HD 3400 +ATI Technologies Inc. ATI MOBILITY RADEON HD 3650 supported 1 1 4 ATI Mobility Radeon HD 3600 +ATI Technologies Inc. ATI MOBILITY RADEON HD 4530 / 4570 supported 1 1 4 ATI Mobility Radeon HD 4500 +ATI Technologies Inc. ATI MOBILITY RADEON X1300 supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. ATI MOBILITY RADEON X1350 supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. ATI MOBILITY RADEON X1400 supported 2 1 2.1 ATI Radeon X1400 +ATI Technologies Inc. ATI MOBILITY RADEON X1600 supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. ATI MOBILITY RADEON X1700 supported 2 1 2.1 ATI Radeon X1700 +ATI Technologies Inc. ATI MOBILITY RADEON X1800 supported 3 1 2.1 ATI Radeon X1800 +ATI Technologies Inc. ATI MOBILITY RADEON X1900 supported 2 1 2.1 ATI Radeon X1900 +ATI Technologies Inc. ATI MOBILITY RADEON X2300 supported 2 0 2.1 ATI Radeon X2300 +ATI Technologies Inc. ATI MOBILITY RADEON X2300 x86/MMX/3DNow!/SSE2 supported 2 0 2.1 ATI Radeon X2300 +ATI Technologies Inc. ATI MOBILITY RADEON X300 supported 1 1 2.1 ATI Radeon X300 +ATI Technologies Inc. ATI MOBILITY RADEON X300 x86/SSE2 supported 1 1 2.1 ATI Radeon X300 +ATI Technologies Inc. ATI MOBILITY RADEON X600 supported 1 1 2.1 ATI Radeon X600 +ATI Technologies Inc. ATI MOBILITY RADEON X600 SE supported 1 1 2.1 ATI Radeon X600 +ATI Technologies Inc. ATI MOBILITY RADEON X700 supported 2 1 2.1 ATI Radeon X700 +ATI Technologies Inc. ATI MOBILITY RADEON XPRESS 200 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI MOBILITY RADEON XPRESS 200 x86/MMX/3DNow!/SSE2 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI MOBILITY Radeon HD 4650 supported 2 1 3.3 ATI Mobility Radeon HD 4600 +ATI Technologies Inc. ATI Mobility FireGL V5700 supported 2 1 3.3 ATI FireGL 5xxx +ATI Technologies Inc. ATI Mobility FireGL V5725 supported 2 1 3.3 ATI FireGL 5xxx +ATI Technologies Inc. ATI Mobility Radeon 4100 supported 1 1 3.3 ATI Mobility Radeon 4100 +ATI Technologies Inc. ATI Mobility Radeon Graphics NO MATCH +ATI Technologies Inc. ATI Mobility Radeon HD 2300 supported 0 1 2.1 ATI Mobility Radeon HD 2300 +ATI Technologies Inc. ATI Mobility Radeon HD 2300 x86/SSE2 supported 0 1 2.1 ATI Mobility Radeon HD 2300 +ATI Technologies Inc. ATI Mobility Radeon HD 2400 supported 1 1 3.3 ATI Mobility Radeon HD 2400 +ATI Technologies Inc. ATI Mobility Radeon HD 2400 (Omega 3.8.442) supported 1 1 3.3 ATI Mobility Radeon HD 2400 +ATI Technologies Inc. ATI Mobility Radeon HD 2400 XT supported 1 1 3.3 ATI Mobility Radeon HD 2400 +ATI Technologies Inc. ATI Mobility Radeon HD 2600 supported 1 1 3.3 ATI Mobility Radeon HD 2600 +ATI Technologies Inc. ATI Mobility Radeon HD 2600 XT supported 1 1 3.3 ATI Mobility Radeon HD 2600 +ATI Technologies Inc. ATI Mobility Radeon HD 2600 XT (Microsoft Corporation WDDM 1.1) supported 1 1 3.3 ATI Mobility Radeon HD 2600 +ATI Technologies Inc. ATI Mobility Radeon HD 2700 supported 3 0 0 ATI Mobility Radeon HD 2700 +ATI Technologies Inc. ATI Mobility Radeon HD 3400 Series supported 1 1 4 ATI Mobility Radeon HD 3400 +ATI Technologies Inc. ATI Mobility Radeon HD 3400 Series (Microsoft Corporation WDDM 1.1) supported 1 1 4 ATI Mobility Radeon HD 3400 +ATI Technologies Inc. ATI Mobility Radeon HD 3400 Series (Microsoft Corporation- WDDM v1.1) supported 1 1 4 ATI Mobility Radeon HD 3400 +ATI Technologies Inc. ATI Mobility Radeon HD 3410 supported 1 1 4 ATI Mobility Radeon HD 3400 +ATI Technologies Inc. ATI Mobility Radeon HD 3430 supported 1 1 4 ATI Mobility Radeon HD 3400 +ATI Technologies Inc. ATI Mobility Radeon HD 3430 (Microsoft Corporation- WDDM v1.1) supported 1 1 4 ATI Mobility Radeon HD 3400 +ATI Technologies Inc. ATI Mobility Radeon HD 3450 supported 1 1 4 ATI Mobility Radeon HD 3400 +ATI Technologies Inc. ATI Mobility Radeon HD 3470 supported 1 1 4 ATI Mobility Radeon HD 3400 +ATI Technologies Inc. ATI Mobility Radeon HD 3470 Hybrid X2 supported 1 1 4 ATI Mobility Radeon HD 3400 +ATI Technologies Inc. ATI Mobility Radeon HD 3470 Series supported 1 1 4 ATI Mobility Radeon HD 3400 +ATI Technologies Inc. ATI Mobility Radeon HD 3650 supported 1 1 4 ATI Mobility Radeon HD 3600 +ATI Technologies Inc. ATI Mobility Radeon HD 3670 supported 1 1 4 ATI Mobility Radeon HD 3600 +ATI Technologies Inc. ATI Mobility Radeon HD 3850 supported 3 1 3.3 ATI Mobility Radeon HD 3800 +ATI Technologies Inc. ATI Mobility Radeon HD 3870 supported 3 1 3.3 ATI Mobility Radeon HD 3800 +ATI Technologies Inc. ATI Mobility Radeon HD 3870 X2 supported 3 1 3.3 ATI Mobility Radeon HD 3800 +ATI Technologies Inc. ATI Mobility Radeon HD 4200 supported 1 1 4 ATI Mobility Radeon HD 4200 +ATI Technologies Inc. ATI Mobility Radeon HD 4200 Series supported 1 1 4 ATI Mobility Radeon HD 4200 +ATI Technologies Inc. ATI Mobility Radeon HD 4200 Series (Microsoft Corporation - WDDM v1.1) supported 1 1 4 ATI Mobility Radeon HD 4200 +ATI Technologies Inc. ATI Mobility Radeon HD 4225 supported 1 1 4 ATI Mobility Radeon HD 4200 +ATI Technologies Inc. ATI Mobility Radeon HD 4225 Series supported 1 1 4 ATI Mobility Radeon HD 4200 +ATI Technologies Inc. ATI Mobility Radeon HD 4250 supported 1 1 4 ATI Mobility Radeon HD 4200 +ATI Technologies Inc. ATI Mobility Radeon HD 4250 Graphics supported 1 1 4 ATI Mobility Radeon HD 4200 +ATI Technologies Inc. ATI Mobility Radeon HD 4250 Series supported 1 1 4 ATI Mobility Radeon HD 4200 +ATI Technologies Inc. ATI Mobility Radeon HD 4270 supported 1 1 4 ATI Mobility Radeon HD 4200 +ATI Technologies Inc. ATI Mobility Radeon HD 4270 Series supported 1 1 4 ATI Mobility Radeon HD 4200 +ATI Technologies Inc. ATI Mobility Radeon HD 4300 Series supported 1 1 4 ATI Mobility Radeon HD 4300 +ATI Technologies Inc. ATI Mobility Radeon HD 4300/4500 Series supported 1 1 4 ATI Mobility Radeon HD 4300 +ATI Technologies Inc. ATI Mobility Radeon HD 4330 supported 1 1 4 ATI Mobility Radeon HD 4300 +ATI Technologies Inc. ATI Mobility Radeon HD 4330 Series supported 1 1 4 ATI Mobility Radeon HD 4300 +ATI Technologies Inc. ATI Mobility Radeon HD 4350 supported 1 1 4 ATI Mobility Radeon HD 4300 +ATI Technologies Inc. ATI Mobility Radeon HD 4350 Series supported 1 1 4 ATI Mobility Radeon HD 4300 +ATI Technologies Inc. ATI Mobility Radeon HD 4500 Series supported 1 1 4 ATI Mobility Radeon HD 4500 +ATI Technologies Inc. ATI Mobility Radeon HD 4500 Series (Microsoft Corporation - WDDM v1.1) supported 1 1 4 ATI Mobility Radeon HD 4500 +ATI Technologies Inc. ATI Mobility Radeon HD 4500 Series (Microsoft Corporation WDDM 1.1) supported 1 1 4 ATI Mobility Radeon HD 4500 +ATI Technologies Inc. ATI Mobility Radeon HD 4500/5100 Series supported 1 1 4 ATI Mobility Radeon HD 4500 +ATI Technologies Inc. ATI Mobility Radeon HD 4530 supported 1 1 4 ATI Mobility Radeon HD 4500 +ATI Technologies Inc. ATI Mobility Radeon HD 4530 Series supported 1 1 4 ATI Mobility Radeon HD 4500 +ATI Technologies Inc. ATI Mobility Radeon HD 4550 supported 1 1 4 ATI Mobility Radeon HD 4500 +ATI Technologies Inc. ATI Mobility Radeon HD 4570 supported 1 1 4 ATI Mobility Radeon HD 4500 +ATI Technologies Inc. ATI Mobility Radeon HD 4600 Series supported 2 1 3.3 ATI Mobility Radeon HD 4600 +ATI Technologies Inc. ATI Mobility Radeon HD 4650 supported 2 1 3.3 ATI Mobility Radeon HD 4600 +ATI Technologies Inc. ATI Mobility Radeon HD 4650 (Microsoft Corporation - WDDM v1.1) supported 2 1 3.3 ATI Mobility Radeon HD 4600 +ATI Technologies Inc. ATI Mobility Radeon HD 4650 (Microsoft Corporation- WDDM v1.1) supported 2 1 3.3 ATI Mobility Radeon HD 4600 +ATI Technologies Inc. ATI Mobility Radeon HD 4650 Series supported 2 1 3.3 ATI Mobility Radeon HD 4600 +ATI Technologies Inc. ATI Mobility Radeon HD 4670 supported 2 1 3.3 ATI Mobility Radeon HD 4600 +ATI Technologies Inc. ATI Mobility Radeon HD 4670 (Microsoft Corporation - WDDM v1.1) supported 2 1 3.3 ATI Mobility Radeon HD 4600 +ATI Technologies Inc. ATI Mobility Radeon HD 4830 supported 3 1 3.3 ATI Mobility Radeon HD 4800 +ATI Technologies Inc. ATI Mobility Radeon HD 4830 Series supported 3 1 3.3 ATI Mobility Radeon HD 4800 +ATI Technologies Inc. ATI Mobility Radeon HD 4850 supported 3 1 3.3 ATI Mobility Radeon HD 4800 +ATI Technologies Inc. ATI Mobility Radeon HD 4870 supported 3 1 3.3 ATI Mobility Radeon HD 4800 +ATI Technologies Inc. ATI Mobility Radeon HD 5000 supported 1 1 4.2 ATI Mobility Radeon 5000 +ATI Technologies Inc. ATI Mobility Radeon HD 5000 Series supported 1 1 4.2 ATI Mobility Radeon 5000 +ATI Technologies Inc. ATI Mobility Radeon HD 5000 Series (Engineering Sample - WDDM v1.20) supported 1 1 4.2 ATI Mobility Radeon 5000 +ATI Technologies Inc. ATI Mobility Radeon HD 5000 Series (Microsoft Corporation - WDDM v1.2) supported 1 1 4.2 ATI Mobility Radeon 5000 +ATI Technologies Inc. ATI Mobility Radeon HD 5000 Series (Microsoft Corporation - WDDM v1.20) supported 1 1 4.2 ATI Mobility Radeon 5000 +ATI Technologies Inc. ATI Mobility Radeon HD 5100 supported 3 1 3.2 ATI Mobility Radeon HD 5100 +ATI Technologies Inc. ATI Mobility Radeon HD 5145 supported 3 1 3.2 ATI Mobility Radeon HD 5100 +ATI Technologies Inc. ATI Mobility Radeon HD 5165 supported 3 1 3.2 ATI Mobility Radeon HD 5100 +ATI Technologies Inc. ATI Mobility Radeon HD 530v supported 1 1 3.3 ATI Mobility Radeon HD 530v +ATI Technologies Inc. ATI Mobility Radeon HD 5400 supported 2 1 4.2 ATI Mobility Radeon HD 5400 +ATI Technologies Inc. ATI Mobility Radeon HD 5400 Series supported 2 1 4.2 ATI Mobility Radeon HD 5400 +ATI Technologies Inc. ATI Mobility Radeon HD 540v supported 1 1 3.3 ATI Mobility Radeon HD 540v +ATI Technologies Inc. ATI Mobility Radeon HD 5430 supported 2 1 4.2 ATI Mobility Radeon HD 5400 +ATI Technologies Inc. ATI Mobility Radeon HD 5450 supported 2 1 4.2 ATI Mobility Radeon HD 5400 +ATI Technologies Inc. ATI Mobility Radeon HD 5450 Series supported 2 1 4.2 ATI Mobility Radeon HD 5400 +ATI Technologies Inc. ATI Mobility Radeon HD 545v supported 2 1 4 ATI Mobility Radeon HD 545v +ATI Technologies Inc. ATI Mobility Radeon HD 5470 supported 2 1 4.2 ATI Mobility Radeon HD 5400 +ATI Technologies Inc. ATI Mobility Radeon HD 550v supported 3 1 4 ATI Mobility Radeon HD 550v +ATI Technologies Inc. ATI Mobility Radeon HD 5570 supported 3 0 4.2 ATI Mobility Radeon HD 5500 +ATI Technologies Inc. ATI Mobility Radeon HD 5600/5700 Series supported 3 1 4.2 ATI Mobility Radeon HD 5600 +ATI Technologies Inc. ATI Mobility Radeon HD 560v supported 3 1 3.2 ATI Mobility Radeon HD 560v +ATI Technologies Inc. ATI Mobility Radeon HD 5650 supported 3 1 4.2 ATI Mobility Radeon HD 5600 +ATI Technologies Inc. ATI Mobility Radeon HD 565v supported 3 1 3.3 ATI Mobility Radeon HD 565v +ATI Technologies Inc. ATI Mobility Radeon HD 5700 Series supported 3 1 4.1 ATI Mobility Radeon HD 5700 +ATI Technologies Inc. ATI Mobility Radeon HD 5730 supported 3 1 4.1 ATI Mobility Radeon HD 5700 +ATI Technologies Inc. ATI Mobility Radeon HD 5800 Series supported 4 1 4.2 ATI Radeon HD 5800 +ATI Technologies Inc. ATI Mobility Radeon HD 5800 Series (Microsoft Corporation - WDDM v1.20) supported 4 1 4.2 ATI Radeon HD 5800 +ATI Technologies Inc. ATI Mobility Radeon HD 5830 Series supported 4 1 4.2 ATI Radeon HD 5800 +ATI Technologies Inc. ATI Mobility Radeon HD 5850 supported 4 1 4.2 ATI Radeon HD 5800 +ATI Technologies Inc. ATI Mobility Radeon HD 5870 supported 4 1 4.2 ATI Radeon HD 5800 +ATI Technologies Inc. ATI Mobility Radeon HD 6370 supported 1 1 4.2 ATI Radeon HD 6300 +ATI Technologies Inc. ATI Mobility Radeon HD 6550 supported 3 1 4.2 ATI Radeon HD 6500 +ATI Technologies Inc. ATI Mobility Radeon HD 6570 supported 3 1 4.2 ATI Radeon HD 6500 +ATI Technologies Inc. ATI Mobility Radeon X1300 supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. ATI Mobility Radeon X1300 (Omega 3.8.252) x86/SSE2 supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. ATI Mobility Radeon X1300 x86/MMX/3DNow!/SSE2 supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. ATI Mobility Radeon X1300 x86/SSE2 supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. ATI Mobility Radeon X1350 supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. ATI Mobility Radeon X1350 x86/SSE2 supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. ATI Mobility Radeon X1400 supported 2 1 2.1 ATI Radeon X1400 +ATI Technologies Inc. ATI Mobility Radeon X1400 (Omega 3.8.442) supported 2 1 2.1 ATI Radeon X1400 +ATI Technologies Inc. ATI Mobility Radeon X1400 x86 supported 2 1 2.1 ATI Radeon X1400 +ATI Technologies Inc. ATI Mobility Radeon X1400 x86/SSE2 supported 2 1 2.1 ATI Radeon X1400 +ATI Technologies Inc. ATI Mobility Radeon X1450 x86/SSE2 supported 2 1 2.1 ATI Radeon X1400 +ATI Technologies Inc. ATI Mobility Radeon X1600 supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. ATI Mobility Radeon X1600 x86/MMX/3DNow!/SSE2 supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. ATI Mobility Radeon X1600 x86/SSE2 supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. ATI Mobility Radeon X1700 supported 2 1 2.1 ATI Radeon X1700 +ATI Technologies Inc. ATI Mobility Radeon X1700 x86 supported 2 1 2.1 ATI Radeon X1700 +ATI Technologies Inc. ATI Mobility Radeon X1700 x86/SSE2 supported 2 1 2.1 ATI Radeon X1700 +ATI Technologies Inc. ATI Mobility Radeon X1800 x86/SSE2 supported 3 1 2.1 ATI Radeon X1800 +ATI Technologies Inc. ATI Mobility Radeon X1900 supported 2 1 2.1 ATI Radeon X1900 +ATI Technologies Inc. ATI Mobility Radeon X2300 supported 2 0 2.1 ATI Radeon X2300 +ATI Technologies Inc. ATI Mobility Radeon X2300 x86/MMX/3DNow! supported 2 0 2.1 ATI Radeon X2300 +ATI Technologies Inc. ATI Mobility Radeon X2300 x86/MMX/3DNow!/SSE2 supported 2 0 2.1 ATI Radeon X2300 +ATI Technologies Inc. ATI Mobility Radeon X2300 x86/SSE2 supported 2 0 2.1 ATI Radeon X2300 +ATI Technologies Inc. ATI Mobility Radeon X2500 NO MATCH +ATI Technologies Inc. ATI Mobility Radeon. HD 530v supported 1 1 3.3 ATI Mobility Radeon HD 530v +ATI Technologies Inc. ATI Mobility Radeon. HD 5470 supported 2 1 4.2 ATI Mobility Radeon HD 5400 +ATI Technologies Inc. ATI RADEON 9600 Series supported 0 1 2.1 ATI Radeon 9600 +ATI Technologies Inc. ATI RADEON 9600/X1050 Series supported 0 1 2.1 ATI Radeon 9600 +ATI Technologies Inc. ATI RADEON E4690 NO MATCH +ATI Technologies Inc. ATI RADEON HD 3200 Graphics supported 1 1 4 ATI Radeon HD 3200 +ATI Technologies Inc. ATI RADEON XPRESS 1100 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI RADEON XPRESS 1100 Series supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI RADEON XPRESS 1100 x86/SSE2 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI RADEON XPRESS 1200 Series supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI RADEON XPRESS 200 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI RADEON XPRESS 200 Series supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI RADEON XPRESS 200 Series x86/SSE2 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI RADEON XPRESS 200 x86/MMX/3DNow!/SSE2 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI RADEON XPRESS 200M SERIES supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI RADEON XPRESS 200M Series supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI RADEON XPRESS 200M Series (Microsoft Corporation) supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI RADEON XPRESS 200M Series (Omega 3.8.421) x86/SSE2 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI RADEON XPRESS 200M Series x86/SSE2 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI Radeon 2100 supported 0 1 2.1 ATI Radeon 2100 +ATI Technologies Inc. ATI Radeon 2100 (Microsoft Corporation - WDDM) supported 0 1 2.1 ATI Radeon 2100 +ATI Technologies Inc. ATI Radeon 2100 Graphics supported 0 1 2.1 ATI Radeon 2100 +ATI Technologies Inc. ATI Radeon 3000 supported 1 1 4 ATI Radeon 3000 +ATI Technologies Inc. ATI Radeon 3000 Graphics supported 1 1 4 ATI Radeon 3000 +ATI Technologies Inc. ATI Radeon 3000 Graphics (Engineering Sample - WDDM v1.1) supported 1 1 4 ATI Radeon 3000 +ATI Technologies Inc. ATI Radeon 3000 Series Graphics supported 1 1 4 ATI Radeon 3000 +ATI Technologies Inc. ATI Radeon 3100 Graphics supported 0 1 3.3 ATI Radeon 3100 +ATI Technologies Inc. ATI Radeon 3100 Graphics (Microsoft Corporation WDDM 1.1) supported 0 1 3.3 ATI Radeon 3100 +ATI Technologies Inc. ATI Radeon 3100 Series Graphics supported 0 1 3.3 ATI Radeon 3100 +ATI Technologies Inc. ATI Radeon 9550 / X1050 supported 0 1 2.1 ATI Radeon 9500 +ATI Technologies Inc. ATI Radeon 9550 / X1050 Series supported 0 1 2.1 ATI Radeon 9500 +ATI Technologies Inc. ATI Radeon 9550 / X1050 Series x86/SSE2 supported 0 1 2.1 ATI Radeon 9500 +ATI Technologies Inc. ATI Radeon 9550 / X1050 Series(Microsoft Corporation - WDDM) supported 0 1 2.1 ATI Radeon 9500 +ATI Technologies Inc. ATI Radeon 9600 / X1050 Series supported 0 1 2.1 ATI Radeon 9600 +ATI Technologies Inc. ATI Radeon 9600 / X1050 Series x86/SSE2 supported 0 1 2.1 ATI Radeon 9600 +ATI Technologies Inc. ATI Radeon 9600/9550/X1050 Series supported 0 1 2.1 ATI Radeon 9600 +ATI Technologies Inc. ATI Radeon BA Prototype OpenGL Engine NO MATCH +ATI Technologies Inc. ATI Radeon Barts PRO Prototype OpenGL Engine supported 3 1 2.1 AMD BARTS (HD 6800) +ATI Technologies Inc. ATI Radeon Barts XT Prototype OpenGL Engine supported 3 1 2.1 AMD BARTS (HD 6800) +ATI Technologies Inc. ATI Radeon Caicos PRO Prototype OpenGL Engine supported 3 0 0 AMD CAICOS (HD 6400) +ATI Technologies Inc. ATI Radeon Caicos Unknown Prototype OpenGL Engine supported 3 0 0 AMD CAICOS (HD 6400) +ATI Technologies Inc. ATI Radeon Cedar PRO Prototype OpenGL Engine supported 2 0 2.1 AMD CEDAR (HD 5450) +ATI Technologies Inc. ATI Radeon Graphics Processor NO MATCH +ATI Technologies Inc. ATI Radeon HD 2350 supported 0 1 3.3 ATI Radeon HD 2300 +ATI Technologies Inc. ATI Radeon HD 2400 supported 1 1 4 ATI Radeon HD 2400 +ATI Technologies Inc. ATI Radeon HD 2400 OpenGL Engine supported 1 1 4 ATI Radeon HD 2400 +ATI Technologies Inc. ATI Radeon HD 2400 PCI supported 1 1 4 ATI Radeon HD 2400 +ATI Technologies Inc. ATI Radeon HD 2400 PRO supported 1 1 4 ATI Radeon HD 2400 +ATI Technologies Inc. ATI Radeon HD 2400 PRO AGP supported 1 1 4 ATI Radeon HD 2400 +ATI Technologies Inc. ATI Radeon HD 2400 Pro supported 1 1 4 ATI Radeon HD 2400 +ATI Technologies Inc. ATI Radeon HD 2400 Series supported 1 1 4 ATI Radeon HD 2400 +ATI Technologies Inc. ATI Radeon HD 2400 Series AGP supported 1 1 4 ATI Radeon HD 2400 +ATI Technologies Inc. ATI Radeon HD 2400 XT supported 1 1 4 ATI Radeon HD 2400 +ATI Technologies Inc. ATI Radeon HD 2400 XT OpenGL Engine supported 1 1 4 ATI Radeon HD 2400 +ATI Technologies Inc. ATI Radeon HD 2600 OpenGL Engine supported 2 1 4 ATI Radeon HD 2600 +ATI Technologies Inc. ATI Radeon HD 2600 PRO supported 2 1 4 ATI Radeon HD 2600 +ATI Technologies Inc. ATI Radeon HD 2600 PRO OpenGL Engine supported 2 1 4 ATI Radeon HD 2600 +ATI Technologies Inc. ATI Radeon HD 2600 Pro supported 2 1 4 ATI Radeon HD 2600 +ATI Technologies Inc. ATI Radeon HD 2600 Pro AGP supported 2 1 4 ATI Radeon HD 2600 +ATI Technologies Inc. ATI Radeon HD 2600 Series supported 2 1 4 ATI Radeon HD 2600 +ATI Technologies Inc. ATI Radeon HD 2600 Series AGP supported 2 1 4 ATI Radeon HD 2600 +ATI Technologies Inc. ATI Radeon HD 2600 XT supported 2 1 4 ATI Radeon HD 2600 +ATI Technologies Inc. ATI Radeon HD 2600/3600 Series supported 2 1 4 ATI Radeon HD 2600 +ATI Technologies Inc. ATI Radeon HD 2900 GT supported 3 1 3.3 ATI Radeon HD 2900 +ATI Technologies Inc. ATI Radeon HD 2900 PRO supported 3 1 3.3 ATI Radeon HD 2900 +ATI Technologies Inc. ATI Radeon HD 2900 XT supported 3 1 3.3 ATI Radeon HD 2900 +ATI Technologies Inc. ATI Radeon HD 3200 Graphics supported 1 1 4 ATI Radeon HD 3200 +ATI Technologies Inc. ATI Radeon HD 3200 Graphics (Microsoft Corporation - WDDM v1.1) supported 1 1 4 ATI Radeon HD 3200 +ATI Technologies Inc. ATI Radeon HD 3200 Graphics (Microsoft Corporation WDDM 1.1) supported 1 1 4 ATI Radeon HD 3200 +ATI Technologies Inc. ATI Radeon HD 3300 Graphics supported 1 1 3.3 ATI Radeon HD 3300 +ATI Technologies Inc. ATI Radeon HD 3400 Series supported 1 1 4 ATI Radeon HD 3400 +ATI Technologies Inc. ATI Radeon HD 3450 supported 1 1 4 ATI Radeon HD 3400 +ATI Technologies Inc. ATI Radeon HD 3450 - Dell Optiplex supported 1 1 4 ATI Radeon HD 3400 +ATI Technologies Inc. ATI Radeon HD 3450 AGP supported 1 1 4 ATI Radeon HD 3400 +ATI Technologies Inc. ATI Radeon HD 3470 supported 1 1 4 ATI Radeon HD 3400 +ATI Technologies Inc. ATI Radeon HD 3470 - Dell Optiplex supported 1 1 4 ATI Radeon HD 3400 +ATI Technologies Inc. ATI Radeon HD 3600 Series supported 3 1 4 ATI Radeon HD 3600 +ATI Technologies Inc. ATI Radeon HD 3600 Series (Microsoft Corporation - WDDM v1.1) supported 3 1 4 ATI Radeon HD 3600 +ATI Technologies Inc. ATI Radeon HD 3600 Series (Microsoft Corporation WDDM 1.1) supported 3 1 4 ATI Radeon HD 3600 +ATI Technologies Inc. ATI Radeon HD 3650 supported 3 1 4 ATI Radeon HD 3600 +ATI Technologies Inc. ATI Radeon HD 3650 AGP supported 3 1 4 ATI Radeon HD 3600 +ATI Technologies Inc. ATI Radeon HD 3800 Series supported 3 1 4 ATI Radeon HD 3800 +ATI Technologies Inc. ATI Radeon HD 3850 supported 3 1 4 ATI Radeon HD 3800 +ATI Technologies Inc. ATI Radeon HD 3850 (Microsoft Corporation - WDDM v1.1) supported 3 1 4 ATI Radeon HD 3800 +ATI Technologies Inc. ATI Radeon HD 3850 AGP supported 3 1 4 ATI Radeon HD 3800 +ATI Technologies Inc. ATI Radeon HD 3870 supported 3 1 4 ATI Radeon HD 3800 +ATI Technologies Inc. ATI Radeon HD 3870 (Engineering Sample - WDDM v1.1) supported 3 1 4 ATI Radeon HD 3800 +ATI Technologies Inc. ATI Radeon HD 3870 (Microsoft Corporation - WDDM v1.1) supported 3 1 4 ATI Radeon HD 3800 +ATI Technologies Inc. ATI Radeon HD 3870 OpenGL Engine supported 3 1 4 ATI Radeon HD 3800 +ATI Technologies Inc. ATI Radeon HD 3870 X2 supported 3 1 4 ATI Radeon HD 3800 +ATI Technologies Inc. ATI Radeon HD 4200 supported 1 1 4 ATI Radeon HD 4200 +ATI Technologies Inc. ATI Radeon HD 4200 (Microsoft Corporation - WDDM v1.1) supported 1 1 4 ATI Radeon HD 4200 +ATI Technologies Inc. ATI Radeon HD 4250 supported 1 1 4 ATI Radeon HD 4200 +ATI Technologies Inc. ATI Radeon HD 4250 (Engineering Sample - WDDM v1.1) supported 1 1 4 ATI Radeon HD 4200 +ATI Technologies Inc. ATI Radeon HD 4250 (Microsoft Corporation - WDDM v1.1) supported 1 1 4 ATI Radeon HD 4200 +ATI Technologies Inc. ATI Radeon HD 4250 Graphics supported 1 1 4 ATI Radeon HD 4200 +ATI Technologies Inc. ATI Radeon HD 4270 supported 1 1 4 ATI Radeon HD 4200 +ATI Technologies Inc. ATI Radeon HD 4290 supported 1 1 4 ATI Radeon HD 4200 +ATI Technologies Inc. ATI Radeon HD 4300 Series supported 2 1 4 ATI Radeon HD 4300 +ATI Technologies Inc. ATI Radeon HD 4300/4500 Series supported 2 1 4 ATI Radeon HD 4300 +ATI Technologies Inc. ATI Radeon HD 4300/4500 Series (Microsoft Corporation - WDDM v1.1) supported 2 1 4 ATI Radeon HD 4300 +ATI Technologies Inc. ATI Radeon HD 4300/4500 Series (Microsoft Corporation- WDDM v1.1) supported 2 1 4 ATI Radeon HD 4300 +ATI Technologies Inc. ATI Radeon HD 4350 supported 2 1 4 ATI Radeon HD 4300 +ATI Technologies Inc. ATI Radeon HD 4350 (Microsoft Corporation WDDM 1.1) supported 2 1 4 ATI Radeon HD 4300 +ATI Technologies Inc. ATI Radeon HD 4450 supported 2 0 0 ATI Radeon HD 4400 +ATI Technologies Inc. ATI Radeon HD 4500 Series supported 2 1 3.3 ATI Radeon HD 4500 +ATI Technologies Inc. ATI Radeon HD 4520 supported 2 1 3.3 ATI Radeon HD 4500 +ATI Technologies Inc. ATI Radeon HD 4550 supported 2 1 3.3 ATI Radeon HD 4500 +ATI Technologies Inc. ATI Radeon HD 4550 (Microsoft Corporation - WDDM v1.1) supported 2 1 3.3 ATI Radeon HD 4500 +ATI Technologies Inc. ATI Radeon HD 4570 supported 2 1 3.3 ATI Radeon HD 4500 +ATI Technologies Inc. ATI Radeon HD 4580 supported 2 1 3.3 ATI Radeon HD 4500 +ATI Technologies Inc. ATI Radeon HD 4590 supported 2 1 3.3 ATI Radeon HD 4500 +ATI Technologies Inc. ATI Radeon HD 4600 Series supported 3 1 4 ATI Radeon HD 4600 +ATI Technologies Inc. ATI Radeon HD 4600 Series (Engineering Sample - WDDM v1.1) supported 3 1 4 ATI Radeon HD 4600 +ATI Technologies Inc. ATI Radeon HD 4600 Series (Microsoft Corporation - WDDM v1.1) supported 3 1 4 ATI Radeon HD 4600 +ATI Technologies Inc. ATI Radeon HD 4600-serie (Microsoft Corporation - WDDM v1.1) supported 3 1 4 ATI Radeon HD 4600 +ATI Technologies Inc. ATI Radeon HD 4650 supported 3 1 4 ATI Radeon HD 4600 +ATI Technologies Inc. ATI Radeon HD 4650 (Microsoft Corporation WDDM 1.1) supported 3 1 4 ATI Radeon HD 4600 +ATI Technologies Inc. ATI Radeon HD 4670 supported 3 1 4 ATI Radeon HD 4600 +ATI Technologies Inc. ATI Radeon HD 4670 OpenGL Engine supported 3 1 4 ATI Radeon HD 4600 +ATI Technologies Inc. ATI Radeon HD 4700 supported 3 1 3.3 ATI Radeon HD 4700 +ATI Technologies Inc. ATI Radeon HD 4700 Series supported 3 1 3.3 ATI Radeon HD 4700 +ATI Technologies Inc. ATI Radeon HD 4720 supported 3 1 3.3 ATI Radeon HD 4700 +ATI Technologies Inc. ATI Radeon HD 4730 supported 3 1 3.3 ATI Radeon HD 4700 +ATI Technologies Inc. ATI Radeon HD 4730 Series supported 3 1 3.3 ATI Radeon HD 4700 +ATI Technologies Inc. ATI Radeon HD 4770 supported 3 1 3.3 ATI Radeon HD 4700 +ATI Technologies Inc. ATI Radeon HD 4800 supported 3 1 4 ATI Radeon HD 4800 +ATI Technologies Inc. ATI Radeon HD 4800 Series supported 3 1 4 ATI Radeon HD 4800 +ATI Technologies Inc. ATI Radeon HD 4800 Series (Microsoft Corporation - WDDM v1.1) supported 3 1 4 ATI Radeon HD 4800 +ATI Technologies Inc. ATI Radeon HD 4810 series supported 3 1 4 ATI Radeon HD 4800 +ATI Technologies Inc. ATI Radeon HD 4830 supported 3 1 4 ATI Radeon HD 4800 +ATI Technologies Inc. ATI Radeon HD 4850 supported 3 1 4 ATI Radeon HD 4800 +ATI Technologies Inc. ATI Radeon HD 4850 OpenGL Engine supported 3 1 4 ATI Radeon HD 4800 +ATI Technologies Inc. ATI Radeon HD 4850 PRO OpenGL Engine supported 3 1 4 ATI Radeon HD 4800 +ATI Technologies Inc. ATI Radeon HD 4850 Series supported 3 1 4 ATI Radeon HD 4800 +ATI Technologies Inc. ATI Radeon HD 4850 X2 supported 3 1 4 ATI Radeon HD 4800 +ATI Technologies Inc. ATI Radeon HD 4870 supported 3 1 4 ATI Radeon HD 4800 +ATI Technologies Inc. ATI Radeon HD 4870 OpenGL Engine supported 3 1 4 ATI Radeon HD 4800 +ATI Technologies Inc. ATI Radeon HD 4870 Series supported 3 1 4 ATI Radeon HD 4800 +ATI Technologies Inc. ATI Radeon HD 4870 X2 supported 3 1 4 ATI Radeon HD 4800 +ATI Technologies Inc. ATI Radeon HD 5400 Series supported 3 1 4.2 ATI Radeon HD 5400 +ATI Technologies Inc. ATI Radeon HD 5450 supported 3 1 4.2 ATI Radeon HD 5400 +ATI Technologies Inc. ATI Radeon HD 5450 (Microsoft Corporation - WDDM v1.20) supported 3 1 4.2 ATI Radeon HD 5400 +ATI Technologies Inc. ATI Radeon HD 5470 supported 3 1 4.2 ATI Radeon HD 5400 +ATI Technologies Inc. ATI Radeon HD 5500 supported 3 1 4.2 ATI Radeon HD 5500 +ATI Technologies Inc. ATI Radeon HD 5500 Series supported 3 1 4.2 ATI Radeon HD 5500 +ATI Technologies Inc. ATI Radeon HD 5530 supported 3 1 4.2 ATI Radeon HD 5500 +ATI Technologies Inc. ATI Radeon HD 5570 supported 3 1 4.2 ATI Radeon HD 5500 +ATI Technologies Inc. ATI Radeon HD 5600 Series supported 3 1 4.2 ATI Radeon HD 5600 +ATI Technologies Inc. ATI Radeon HD 5600/5700 supported 3 1 4.2 ATI Radeon HD 5600 +ATI Technologies Inc. ATI Radeon HD 5630 supported 3 1 4.2 ATI Radeon HD 5600 +ATI Technologies Inc. ATI Radeon HD 5670 supported 3 1 4.2 ATI Radeon HD 5600 +ATI Technologies Inc. ATI Radeon HD 5670 OpenGL Engine supported 3 1 4.2 ATI Radeon HD 5600 +ATI Technologies Inc. ATI Radeon HD 5700 Series supported 3 1 4.2 ATI Radeon HD 5700 +ATI Technologies Inc. ATI Radeon HD 5700 Series (Microsoft Corporation - WDDM v1.2) supported 3 1 4.2 ATI Radeon HD 5700 +ATI Technologies Inc. ATI Radeon HD 5700 Series (Microsoft Corporation - WDDM v1.20) supported 3 1 4.2 ATI Radeon HD 5700 +ATI Technologies Inc. ATI Radeon HD 5750 supported 3 1 4.2 ATI Radeon HD 5700 +ATI Technologies Inc. ATI Radeon HD 5750 OpenGL Engine supported 3 1 4.2 ATI Radeon HD 5700 +ATI Technologies Inc. ATI Radeon HD 5750 Series supported 3 1 4.2 ATI Radeon HD 5700 +ATI Technologies Inc. ATI Radeon HD 5770 supported 3 1 4.2 ATI Radeon HD 5700 +ATI Technologies Inc. ATI Radeon HD 5770 OpenGL Engine supported 3 1 4.2 ATI Radeon HD 5700 +ATI Technologies Inc. ATI Radeon HD 5800 Series supported 4 1 4.2 ATI Radeon HD 5800 +ATI Technologies Inc. ATI Radeon HD 5850 supported 4 1 4.2 ATI Radeon HD 5800 +ATI Technologies Inc. ATI Radeon HD 5870 supported 4 1 4.2 ATI Radeon HD 5800 +ATI Technologies Inc. ATI Radeon HD 5870 OpenGL Engine supported 4 1 4.2 ATI Radeon HD 5800 +ATI Technologies Inc. ATI Radeon HD 5900 Series supported 4 1 4.2 ATI Radeon HD 5900 +ATI Technologies Inc. ATI Radeon HD 5970 supported 4 1 4.2 ATI Radeon HD 5900 +ATI Technologies Inc. ATI Radeon HD 6230 supported 0 1 4.2 ATI Radeon HD 6200 +ATI Technologies Inc. ATI Radeon HD 6290 supported 0 1 4.2 ATI Radeon HD 6200 +ATI Technologies Inc. ATI Radeon HD 6350 supported 1 1 4.2 ATI Radeon HD 6300 +ATI Technologies Inc. ATI Radeon HD 6390 supported 1 1 4.2 ATI Radeon HD 6300 +ATI Technologies Inc. ATI Radeon HD 6490 supported 3 1 4.2 ATI Radeon HD 6400 +ATI Technologies Inc. ATI Radeon HD 6490M OpenGL Engine supported 3 1 4.2 ATI Radeon HD 6400 +ATI Technologies Inc. ATI Radeon HD 6510 supported 3 1 4.2 ATI Radeon HD 6500 +ATI Technologies Inc. ATI Radeon HD 6570M supported 3 1 4.2 ATI Radeon HD 6500 +ATI Technologies Inc. ATI Radeon HD 6630M OpenGL Engine supported 3 1 4.2 ATI Radeon HD 6600 +ATI Technologies Inc. ATI Radeon HD 6750M OpenGL Engine supported 3 1 4.2 ATI Radeon HD 6700 +ATI Technologies Inc. ATI Radeon HD 6770 supported 3 1 4.2 ATI Radeon HD 6700 +ATI Technologies Inc. ATI Radeon HD 6770M OpenGL Engine supported 3 1 4.2 ATI Radeon HD 6700 +ATI Technologies Inc. ATI Radeon HD 6970M OpenGL Engine supported 5 1 4.2 ATI Radeon HD 6900 +ATI Technologies Inc. ATI Radeon HD 7350 supported 2 0 4.2 ATI Radeon HD 7300 +ATI Technologies Inc. ATI Radeon HD 7950 OpenGL Engine supported 5 1 4.2 ATI Radeon HD 7900 +ATI Technologies Inc. ATI Radeon HD Pitcairn XT Prototype OpenGL Engine NO MATCH +ATI Technologies Inc. ATI Radeon HD Tahiti XT Prototype OpenGL Engine NO MATCH +ATI Technologies Inc. ATI Radeon HD Verde XT Prototype OpenGL Engine unsupported 0 0 0 ATI Radeon VE +ATI Technologies Inc. ATI Radeon HD3750 supported 3 0 3.3 ATI Radeon HD 3700 +ATI Technologies Inc. ATI Radeon HD4300/HD4500 series supported 2 1 4 ATI Radeon HD 4300 +ATI Technologies Inc. ATI Radeon HD4650 supported 3 1 4 ATI Radeon HD 4600 +ATI Technologies Inc. ATI Radeon HD4670 supported 3 1 4 ATI Radeon HD 4600 +ATI Technologies Inc. ATI Radeon RV730 Prototype OpenGL Engine supported 3 0 1.4 AMD RV730 (HD 4600) +ATI Technologies Inc. ATI Radeon RV790 Prototype OpenGL Engine supported 3 0 0 AMD RV790 (HD 4800) +ATI Technologies Inc. ATI Radeon Redwood XT Prototype OpenGL Engine supported 3 0 1.4 AMD REDWOOD (HD 5500/5600) +ATI Technologies Inc. ATI Radeon Turks PRO Prototype OpenGL Engine supported 3 0 2.1 AMD TURKS (HD 6500/6600) +ATI Technologies Inc. ATI Radeon Turks XT Prototype OpenGL Engine supported 3 0 2.1 AMD TURKS (HD 6500/6600) +ATI Technologies Inc. ATI Radeon X1050 supported 2 0 2.1 ATI Radeon X1000 +ATI Technologies Inc. ATI Radeon X1050 Series supported 2 0 2.1 ATI Radeon X1000 +ATI Technologies Inc. ATI Radeon X1050 x86/MMX/3DNow!/SSE2 supported 2 0 2.1 ATI Radeon X1000 +ATI Technologies Inc. ATI Radeon X1050 x86/SSE2 supported 2 0 2.1 ATI Radeon X1000 +ATI Technologies Inc. ATI Radeon X1200 supported 2 0 2.1 ATI Radeon X1200 +ATI Technologies Inc. ATI Radeon X1200 Series supported 2 0 2.1 ATI Radeon X1200 +ATI Technologies Inc. ATI Radeon X1200 Series (Microsoft Corporation - WDDM) supported 2 0 2.1 ATI Radeon X1200 +ATI Technologies Inc. ATI Radeon X1200 Series x86/MMX/3DNow!/SSE2 supported 2 0 2.1 ATI Radeon X1200 +ATI Technologies Inc. ATI Radeon X1200 x86/MMX/3DNow!/SSE2 supported 2 0 2.1 ATI Radeon X1200 +ATI Technologies Inc. ATI Radeon X1250 supported 2 0 2.1 ATI Radeon X1200 +ATI Technologies Inc. ATI Radeon X1250 x86/MMX/3DNow!/SSE2 supported 2 0 2.1 ATI Radeon X1200 +ATI Technologies Inc. ATI Radeon X1270 supported 2 0 2.1 ATI Radeon X1200 +ATI Technologies Inc. ATI Radeon X1270 x86/MMX/3DNow!/SSE2 supported 2 0 2.1 ATI Radeon X1200 +ATI Technologies Inc. ATI Radeon X1300 / X1550 Series supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. ATI Radeon X1300/X1550 Series supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. ATI Radeon X1550 supported 2 1 2.1 ATI Radeon X1500 +ATI Technologies Inc. ATI Radeon X1550 Series supported 2 1 2.1 ATI Radeon X1500 +ATI Technologies Inc. ATI Radeon X1550 Series x86/MMX/3DNow!/SSE2 supported 2 1 2.1 ATI Radeon X1500 +ATI Technologies Inc. ATI Radeon X1550 Series x86/SSE2 supported 2 1 2.1 ATI Radeon X1500 +ATI Technologies Inc. ATI Radeon X1550 x86/MMX/3DNow!/SSE2 supported 2 1 2.1 ATI Radeon X1500 +ATI Technologies Inc. ATI Radeon X1550 x86/SSE2 supported 2 1 2.1 ATI Radeon X1500 +ATI Technologies Inc. ATI Radeon X1600 OpenGL Engine supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. ATI Radeon X1900 OpenGL Engine supported 2 1 2.1 ATI Radeon X1900 +ATI Technologies Inc. ATI Radeon X1950 GT supported 2 1 2.1 ATI Radeon X1900 +ATI Technologies Inc. ATI Radeon X1950 GT x86/MMX/3DNow!/SSE2 supported 2 1 2.1 ATI Radeon X1900 +ATI Technologies Inc. ATI Radeon X1950 GT x86/SSE2 supported 2 1 2.1 ATI Radeon X1900 +ATI Technologies Inc. ATI Radeon X300/X550/X1050 Series supported 1 1 2.1 ATI Radeon X300 +ATI Technologies Inc. ATI Radeon X600/X550/X1050 Series supported 1 1 2.1 ATI Radeon X600 +ATI Technologies Inc. ATI Radeon Xpress 1100 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI Radeon Xpress 1100 x86/SSE2 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI Radeon Xpress 1150 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI Radeon Xpress 1150 Series supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI Radeon Xpress 1150 x86/MMX/3DNow!/SSE2 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI Radeon Xpress 1200 Series supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI Radeon Xpress 1200 Series (Microsoft Corporation - WDDM) supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI Radeon Xpress 1200 Series x86/MMX/3DNow!/SSE2 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI Radeon Xpress 1200 x86/MMX/3DNow!/SSE2 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI Radeon Xpress 1250 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI Radeon Xpress 1250 x86/MMX/3DNow!/SSE2 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI Radeon Xpress 1250 x86/SSE2 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI Radeon Xpress 1270 x86/MMX/3DNow!/SSE2 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI Radeon Xpress Series supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ATI Radeon Xpress Series x86/MMX/3DNow!/SSE2 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. All-in-Wonder 2006 PCI-E Edition supported 1 0 0 ATI All-in-Wonder PCI-E +ATI Technologies Inc. All-in-Wonder 2006 PCI-E Edition x86/MMX/3DNow!/SSE2 supported 1 0 0 ATI All-in-Wonder PCI-E +ATI Technologies Inc. Diamond Radeon X1550 supported 2 1 2.1 ATI Radeon X1500 +ATI Technologies Inc. Diamond Radeon X1550 Series supported 2 1 2.1 ATI Radeon X1500 +ATI Technologies Inc. Diamond Radeon X1550 Series x86/SSE2 supported 2 1 2.1 ATI Radeon X1500 +ATI Technologies Inc. Diamond Radeon X1550 x86/SSE2 supported 2 1 2.1 ATI Radeon X1500 +ATI Technologies Inc. Diamond X1600 PRO 512MB PCI-E x86/MMX/3DNow!/SSE2 supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. FireGL V3100 Pentium 4 (SSE2) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. FireGL V3200 Pentium 4 (SSE2) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. FireGL X1-128 supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. FireMV 2400 PCI DDR x86 supported 0 1 3.2 ATI FireMV +ATI Technologies Inc. FireMV 2400 PCI DDR x86/SSE2 supported 0 1 3.2 ATI FireMV +ATI Technologies Inc. FirePro M3900 Mobility Professional Graphics supported 2 0 4.1 ATI FirePro M3900 +ATI Technologies Inc. GIGABYTE RADEON 9600 PRO supported 0 1 2.1 ATI Radeon 9600 +ATI Technologies Inc. GIGABYTE Radeon X1300 Pro supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. GIGABYTE Radeon X1300 Series supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. GIGABYTE Radeon X1600 PRO supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. GeCube RADEON 9600XT supported 0 1 2.1 ATI Radeon 9600 +ATI Technologies Inc. GeCube RADEON X550 x86/SSE2 supported 1 1 2.1 ATI Radeon X500 +ATI Technologies Inc. GeCube RADEON X700 Series supported 2 1 2.1 ATI Radeon X700 +ATI Technologies Inc. GeCube Radeon X1550 supported 2 1 2.1 ATI Radeon X1500 +ATI Technologies Inc. GeCube Radeon X1550 Series supported 2 1 2.1 ATI Radeon X1500 +ATI Technologies Inc. GeForce 9600 GT x86/SSE2 NO MATCH +ATI Technologies Inc. GigaByte Radeon X1050 supported 2 0 2.1 ATI Radeon X1000 +ATI Technologies Inc. Gigabyte RADEON X300 supported 1 1 2.1 ATI Radeon X300 +ATI Technologies Inc. Gigabyte RADEON X300 SE supported 1 1 2.1 ATI Radeon X300 +ATI Technologies Inc. Gigabyte RADEON X300 x86/SSE2 supported 1 1 2.1 ATI Radeon X300 +ATI Technologies Inc. HD3730 supported 3 0 3.3 ATI HD3700 +ATI Technologies Inc. HIGHTECH EXCALIBUR RADEON 9550SE Series supported 0 1 2.1 ATI Radeon 9500 +ATI Technologies Inc. HIGHTECH EXCALIBUR RADEON 9550SE Series x86/SSE2 supported 0 1 2.1 ATI Radeon 9500 +ATI Technologies Inc. HIGHTECH RADEON 9600XT supported 0 1 2.1 ATI Radeon 9600 +ATI Technologies Inc. HIS Radeon X1550 x86/SSE2 supported 2 1 2.1 ATI Radeon X1500 +ATI Technologies Inc. M52 x86 supported 1 0 0 ATI M52 +ATI Technologies Inc. M72-M supported 1 0 0 ATI M72 +ATI Technologies Inc. MEDION RADEON 9600 TX supported 0 1 2.1 ATI Radeon 9600 +ATI Technologies Inc. MEDION RADEON X740XL x86/SSE2 supported 2 1 2.1 ATI Radeon X700 +ATI Technologies Inc. MOBILITY FIREGL T2 Pentium 4 (SSE2) supported 4 1 4.2 ATI FireGL +ATI Technologies Inc. MOBILITY RADEON 7000 IGP DDR x86/SSE2 supported 0 1 1.3 ATI Mobility Radeon 7xxx +ATI Technologies Inc. MOBILITY RADEON 7500 DDR x86/SSE2 supported 0 1 1.3 ATI Mobility Radeon 7xxx +ATI Technologies Inc. MOBILITY RADEON 9000 DDR x86 supported 0 1 1.3 ATI Radeon 9000 +ATI Technologies Inc. MOBILITY RADEON 9000 DDR x86/SSE2 supported 0 1 1.3 ATI Radeon 9000 +ATI Technologies Inc. MOBILITY RADEON 9000 IGPRADEON 9100 IGP DDR x86 supported 0 1 1.3 ATI Radeon 9000 +ATI Technologies Inc. MOBILITY RADEON 9000 IGPRADEON 9100 IGP DDR x86/SSE2 supported 0 1 1.3 ATI Radeon 9000 +ATI Technologies Inc. MOBILITY RADEON 9000/9100 IGP Series DDR x86/SSE2 supported 0 1 1.3 ATI Radeon 9000 +ATI Technologies Inc. MOBILITY RADEON 9000/9100 PRO IGP Series DDR x86/SSE2 supported 0 1 1.3 ATI Radeon 9000 +ATI Technologies Inc. MOBILITY RADEON 9200 DDR x86/SSE2 supported 0 1 1.3 ATI Radeon 9200 +ATI Technologies Inc. MOBILITY RADEON 9600 x86 supported 1 1 2.1 ATI Mobility Radeon 9600 +ATI Technologies Inc. MOBILITY RADEON 9600 x86/MMX/3DNow!/SSE2 supported 1 1 2.1 ATI Mobility Radeon 9600 +ATI Technologies Inc. MOBILITY RADEON 9600 x86/SSE2 supported 1 1 2.1 ATI Mobility Radeon 9600 +ATI Technologies Inc. MOBILITY RADEON 9700 x86 supported 0 1 2.1 ATI Mobility Radeon 9700 +ATI Technologies Inc. MOBILITY RADEON 9700 x86/MMX/3DNow!/SSE2 supported 0 1 2.1 ATI Mobility Radeon 9700 +ATI Technologies Inc. MOBILITY RADEON 9700 x86/SSE2 supported 0 1 2.1 ATI Mobility Radeon 9700 +ATI Technologies Inc. MOBILITY RADEON 9800 x86/SSE2 supported 1 0 0 ATI Mobility Radeon 9800 +ATI Technologies Inc. MOBILITY RADEON X300 x86 supported 1 1 2.1 ATI Radeon X300 +ATI Technologies Inc. MOBILITY RADEON X300 x86/SSE2 supported 1 1 2.1 ATI Radeon X300 +ATI Technologies Inc. MOBILITY RADEON X600 SE x86/SSE2 supported 1 1 2.1 ATI Radeon X600 +ATI Technologies Inc. MOBILITY RADEON X600 x86 supported 1 1 2.1 ATI Radeon X600 +ATI Technologies Inc. MOBILITY RADEON X600 x86/SSE2 supported 1 1 2.1 ATI Radeon X600 +ATI Technologies Inc. MOBILITY RADEON X700 SE x86/SSE2 supported 2 1 2.1 ATI Radeon X700 +ATI Technologies Inc. MOBILITY RADEON X700 x86/MMX/3DNow!/SSE2 supported 2 1 2.1 ATI Radeon X700 +ATI Technologies Inc. MOBILITY RADEON X700 x86/SSE2 supported 2 1 2.1 ATI Radeon X700 +ATI Technologies Inc. MOBILITY RADEON Xpress 200 Series SW TCL x86/MMX/3DNow!/SSE2 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. MOBILITY/RADEON 9000 DDR x86/MMX/3DNow!/SSE2 supported 0 1 1.3 ATI Radeon 9000 +ATI Technologies Inc. MOBILITY/RADEON 9000 DDR x86/SSE2 supported 0 1 1.3 ATI Radeon 9000 +ATI Technologies Inc. MOBILITY/RADEON 9250/9200 Series DDR x86/MMX/3DNow!/SSE2 supported 0 1 1.3 ATI Radeon 9200 +ATI Technologies Inc. MOBILITY/RADEON 9250/9200 Series DDR x86/SSE2 supported 0 1 1.3 ATI Radeon 9200 +ATI Technologies Inc. MSI RX9550SE x86/MMX/3DNow!/SSE supported 1 0 0 ATI Radeon RX9550 +ATI Technologies Inc. MSI Radeon X1550 supported 2 1 2.1 ATI Radeon X1500 +ATI Technologies Inc. Mobility Radeon X2300 HD supported 2 0 2.1 ATI Radeon X2300 +ATI Technologies Inc. Mobility Radeon X2300 HD x86/SSE2 supported 2 0 2.1 ATI Radeon X2300 +ATI Technologies Inc. RADEON 7000 DDR x86/MMX/3DNow!/SSE2 supported 0 1 2 ATI Radeon 7xxx +ATI Technologies Inc. RADEON 7000 DDR x86/SSE2 supported 0 1 2 ATI Radeon 7xxx +ATI Technologies Inc. RADEON 7000 SDR x86 supported 0 1 2 ATI Radeon 7xxx +ATI Technologies Inc. RADEON 7000 SW TCL x86/SSE2 supported 0 1 2 ATI Radeon 7xxx +ATI Technologies Inc. RADEON 7200 DDR x86/MMX/3DNow!/SSE2 supported 0 1 2 ATI Radeon 7xxx +ATI Technologies Inc. RADEON 7200 DDR x86/SSE2 supported 0 1 2 ATI Radeon 7xxx +ATI Technologies Inc. RADEON 7200 SDR x86/SSE2 supported 0 1 2 ATI Radeon 7xxx +ATI Technologies Inc. RADEON 7500 DDR x86/SSE2 supported 0 1 2 ATI Radeon 7xxx +ATI Technologies Inc. RADEON 8500 DDR x86/MMX/3DNow!/SSE2 supported 0 0 0 ATI Radeon 8xxx +ATI Technologies Inc. RADEON 8500 DDR x86/SSE2 supported 0 0 0 ATI Radeon 8xxx +ATI Technologies Inc. RADEON 9000 DDR x86/MMX/3DNow!/SSE2 supported 0 1 1.3 ATI Radeon 9000 +ATI Technologies Inc. RADEON 9000 DDR x86/SSE2 supported 0 1 1.3 ATI Radeon 9000 +ATI Technologies Inc. RADEON 9000 PRO DDR x86/SSE2 supported 0 1 1.3 ATI Radeon 9000 +ATI Technologies Inc. RADEON 9000 XT IGPRADEON 9100 XT IGP DDR x86/SSE2 supported 0 1 1.3 ATI Radeon 9000 +ATI Technologies Inc. RADEON 9100 DDR x86/MMX/3DNow!/SSE2 supported 0 0 0 ATI Radeon 9100 +ATI Technologies Inc. RADEON 9100 DDR x86/SSE2 supported 0 0 0 ATI Radeon 9100 +ATI Technologies Inc. RADEON 9100 IGP DDR x86 supported 0 0 0 ATI Radeon 9100 +ATI Technologies Inc. RADEON 9100 IGP DDR x86/SSE2 supported 0 0 0 ATI Radeon 9100 +ATI Technologies Inc. RADEON 9200 DDR x86/MMX/3DNow!/SSE2 supported 0 1 1.3 ATI Radeon 9200 +ATI Technologies Inc. RADEON 9200 DDR x86/SSE2 supported 0 1 1.3 ATI Radeon 9200 +ATI Technologies Inc. RADEON 9200 LE DDR x86/SSE2 supported 0 1 1.3 ATI Radeon 9200 +ATI Technologies Inc. RADEON 9200 PRO DDR x86/SSE2 supported 0 1 1.3 ATI Radeon 9200 +ATI Technologies Inc. RADEON 9200 Series DDR x86 supported 0 1 1.3 ATI Radeon 9200 +ATI Technologies Inc. RADEON 9200 Series DDR x86/MMX/3DNow! supported 0 1 1.3 ATI Radeon 9200 +ATI Technologies Inc. RADEON 9200 Series DDR x86/MMX/3DNow!/SSE2 supported 0 1 1.3 ATI Radeon 9200 +ATI Technologies Inc. RADEON 9200 Series DDR x86/SSE2 supported 0 1 1.3 ATI Radeon 9200 +ATI Technologies Inc. RADEON 9200SE DDR x86/MMX/3DNow!/SSE2 supported 0 1 1.3 ATI Radeon 9200 +ATI Technologies Inc. RADEON 9200SE DDR x86/SSE2 supported 0 1 1.3 ATI Radeon 9200 +ATI Technologies Inc. RADEON 9250/9000 Series DDR x86/MMX/3DNow!/SSE2 supported 0 1 1.3 ATI Radeon 9200 +ATI Technologies Inc. RADEON 9250/9200 Series DDR x86/MMX/3DNow!/SSE2 supported 0 1 1.3 ATI Radeon 9200 +ATI Technologies Inc. RADEON 9250/9200 Series DDR x86/SSE2 supported 0 1 1.3 ATI Radeon 9200 +ATI Technologies Inc. RADEON 9500 supported 0 1 2.1 ATI Radeon 9500 +ATI Technologies Inc. RADEON 9500 PRO / 9700 supported 0 1 2.1 ATI Radeon 9500 +ATI Technologies Inc. RADEON 9550 supported 0 1 2.1 ATI Radeon 9500 +ATI Technologies Inc. RADEON 9550 x86/MMX/3DNow!/SSE2 supported 0 1 2.1 ATI Radeon 9500 +ATI Technologies Inc. RADEON 9550 x86/SSE2 supported 0 1 2.1 ATI Radeon 9500 +ATI Technologies Inc. RADEON 9600 SERIES supported 0 1 2.1 ATI Radeon 9600 +ATI Technologies Inc. RADEON 9600 TX supported 0 1 2.1 ATI Radeon 9600 +ATI Technologies Inc. RADEON 9600 TX x86/SSE2 supported 0 1 2.1 ATI Radeon 9600 +ATI Technologies Inc. RADEON 9600 XT x86/MMX/3DNow!/SSE2 supported 0 1 2.1 ATI Radeon 9600 +ATI Technologies Inc. RADEON 9600 XT x86/SSE2 supported 0 1 2.1 ATI Radeon 9600 +ATI Technologies Inc. RADEON 9600 x86/MMX/3DNow!/SSE2 supported 0 1 2.1 ATI Radeon 9600 +ATI Technologies Inc. RADEON 9600 x86/SSE2 supported 0 1 2.1 ATI Radeon 9600 +ATI Technologies Inc. RADEON 9600SE x86/MMX/3DNow!/SSE2 supported 0 1 2.1 ATI Radeon 9600 +ATI Technologies Inc. RADEON 9600SE x86/SSE2 supported 0 1 2.1 ATI Radeon 9600 +ATI Technologies Inc. RADEON 9700 PRO supported 1 0 0 ATI Radeon 9700 +ATI Technologies Inc. RADEON 9800 PRO supported 1 1 2.1 ATI Radeon 9800 +ATI Technologies Inc. RADEON 9800 PRO (Microsoft Corporation - WDDM) supported 1 1 2.1 ATI Radeon 9800 +ATI Technologies Inc. RADEON 9800 PRO - Secondary supported 1 1 2.1 ATI Radeon 9800 +ATI Technologies Inc. RADEON 9800 Pro x86/SSE2 supported 1 1 2.1 ATI Radeon 9800 +ATI Technologies Inc. RADEON 9800 SERIES supported 1 1 2.1 ATI Radeon 9800 +ATI Technologies Inc. RADEON 9800 XT supported 1 1 2.1 ATI Radeon 9800 +ATI Technologies Inc. RADEON 9800 XT x86/SSE2 supported 1 1 2.1 ATI Radeon 9800 +ATI Technologies Inc. RADEON 9800 x86/SSE2 supported 1 1 2.1 ATI Radeon 9800 +ATI Technologies Inc. RADEON IGP 340M DDR x86/SSE2 unsupported 0 0 1.3 ATI IGP 340M +ATI Technologies Inc. RADEON Radeon X300/X550/X1050 Series x86/SSE2 supported 1 1 2.1 ATI Radeon X300 +ATI Technologies Inc. RADEON X1600 Series x86/MMX/3DNow!/SSE2 supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. RADEON X1600 Series x86/SSE2 supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. RADEON X300 SE 128MB HyperMemory x86/SSE2 supported 1 1 2.1 ATI Radeon X300 +ATI Technologies Inc. RADEON X300 SE x86/MMX/3DNow!/SSE2 supported 1 1 2.1 ATI Radeon X300 +ATI Technologies Inc. RADEON X300 Series supported 1 1 2.1 ATI Radeon X300 +ATI Technologies Inc. RADEON X300 Series x86/SSE2 supported 1 1 2.1 ATI Radeon X300 +ATI Technologies Inc. RADEON X300 x86/MMX/3DNow!/SSE2 supported 1 1 2.1 ATI Radeon X300 +ATI Technologies Inc. RADEON X300 x86/SSE2 supported 1 1 2.1 ATI Radeon X300 +ATI Technologies Inc. RADEON X300/X550 Series x86 supported 1 1 2.1 ATI Radeon X300 +ATI Technologies Inc. RADEON X300/X550 Series x86/MMX/3DNow!/SSE2 supported 1 1 2.1 ATI Radeon X300 +ATI Technologies Inc. RADEON X300/X550 Series x86/SSE2 supported 1 1 2.1 ATI Radeon X300 +ATI Technologies Inc. RADEON X550 x86/MMX/3DNow! supported 1 1 2.1 ATI Radeon X500 +ATI Technologies Inc. RADEON X550 x86/MMX/3DNow!/SSE2 supported 1 1 2.1 ATI Radeon X500 +ATI Technologies Inc. RADEON X550 x86/SSE2 supported 1 1 2.1 ATI Radeon X500 +ATI Technologies Inc. RADEON X550XT supported 1 1 2.1 ATI Radeon X500 +ATI Technologies Inc. RADEON X600 256MB HyperMemory x86/SSE2 supported 1 1 2.1 ATI Radeon X600 +ATI Technologies Inc. RADEON X600 PRO x86/MMX/3DNow!/SSE2 supported 1 1 2.1 ATI Radeon X600 +ATI Technologies Inc. RADEON X600 PRO x86/SSE2 supported 1 1 2.1 ATI Radeon X600 +ATI Technologies Inc. RADEON X600 SE x86/SSE2 supported 1 1 2.1 ATI Radeon X600 +ATI Technologies Inc. RADEON X600 Series supported 1 1 2.1 ATI Radeon X600 +ATI Technologies Inc. RADEON X600 x86/MMX/3DNow!/SSE2 supported 1 1 2.1 ATI Radeon X600 +ATI Technologies Inc. RADEON X600 x86/SSE2 supported 1 1 2.1 ATI Radeon X600 +ATI Technologies Inc. RADEON X600/X550 Series supported 1 1 2.1 ATI Radeon X600 +ATI Technologies Inc. RADEON X600/X550 Series (Microsoft Corporation - WDDM) supported 1 1 2.1 ATI Radeon X600 +ATI Technologies Inc. RADEON X600/X550 Series Secondary supported 1 1 2.1 ATI Radeon X600 +ATI Technologies Inc. RADEON X600/X550 Series x86/SSE2 supported 1 1 2.1 ATI Radeon X600 +ATI Technologies Inc. RADEON X700 PRO x86/MMX/3DNow!/SSE2 supported 2 1 2.1 ATI Radeon X700 +ATI Technologies Inc. RADEON X700 PRO x86/SSE2 supported 2 1 2.1 ATI Radeon X700 +ATI Technologies Inc. RADEON X700 SE supported 2 1 2.1 ATI Radeon X700 +ATI Technologies Inc. RADEON X700 SE x86/MMX/3DNow!/SSE2 supported 2 1 2.1 ATI Radeon X700 +ATI Technologies Inc. RADEON X700 SE x86/SSE2 supported 2 1 2.1 ATI Radeon X700 +ATI Technologies Inc. RADEON X700 Series supported 2 1 2.1 ATI Radeon X700 +ATI Technologies Inc. RADEON X700 Series x86/MMX/3DNow!/SSE2 supported 2 1 2.1 ATI Radeon X700 +ATI Technologies Inc. RADEON X700 Series x86/SSE2 supported 2 1 2.1 ATI Radeon X700 +ATI Technologies Inc. RADEON X700 x86/SSE2 supported 2 1 2.1 ATI Radeon X700 +ATI Technologies Inc. RADEON X700/X550 Series x86/SSE2 supported 2 1 2.1 ATI Radeon X700 +ATI Technologies Inc. RADEON X800 GT x86/MMX/3DNow!/SSE2 supported 1 1 2.1 ATI Radeon X800 +ATI Technologies Inc. RADEON X800 GTO supported 1 1 2.1 ATI Radeon X800 +ATI Technologies Inc. RADEON X800 GTO x86/MMX/3DNow!/SSE2 supported 1 1 2.1 ATI Radeon X800 +ATI Technologies Inc. RADEON X800 GTO x86/SSE2 supported 1 1 2.1 ATI Radeon X800 +ATI Technologies Inc. RADEON X800 PRO/GTO supported 1 1 2.1 ATI Radeon X800 +ATI Technologies Inc. RADEON X800 SE x86/MMX/3DNow!/SSE2 supported 1 1 2.1 ATI Radeon X800 +ATI Technologies Inc. RADEON X800 SE x86/SSE2 supported 1 1 2.1 ATI Radeon X800 +ATI Technologies Inc. RADEON X800 Series supported 1 1 2.1 ATI Radeon X800 +ATI Technologies Inc. RADEON X800 XL x86/MMX/3DNow!/SSE2 supported 1 1 2.1 ATI Radeon X800 +ATI Technologies Inc. RADEON X800 XL x86/SSE2 supported 1 1 2.1 ATI Radeon X800 +ATI Technologies Inc. RADEON X800 XT supported 1 1 2.1 ATI Radeon X800 +ATI Technologies Inc. RADEON X800 XT (Microsoft Corporation - WDDM) supported 1 1 2.1 ATI Radeon X800 +ATI Technologies Inc. RADEON X800 XT x86/SSE2 supported 1 1 2.1 ATI Radeon X800 +ATI Technologies Inc. RADEON X800/X850 Series supported 1 1 2.1 ATI Radeon X800 +ATI Technologies Inc. RADEON X800GT supported 1 1 2.1 ATI Radeon X800 +ATI Technologies Inc. RADEON X850 Series supported 1 1 2.1 ATI Radeon X800 +ATI Technologies Inc. RADEON X850 XT Platinum Edition (Microsoft Corporation - WDDM) supported 1 1 2.1 ATI Radeon X800 +ATI Technologies Inc. RADEON X850 XT Platinum Edition x86/SSE2 supported 1 1 2.1 ATI Radeon X800 +ATI Technologies Inc. RADEON X850 XT x86/SSE2 supported 1 1 2.1 ATI Radeon X800 +ATI Technologies Inc. RADEON XPRESS 200 Series SW TCL x86 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. RADEON XPRESS 200 Series SW TCL x86/MMX/3DNow! supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. RADEON XPRESS 200 Series SW TCL x86/MMX/3DNow!/SSE2 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. RADEON XPRESS 200 Series SW TCL x86/SSE2 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. RADEON XPRESS 200 Series x86/MMX/3DNow!/SSE2 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. RADEON XPRESS 200 Series x86/SSE2 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. RADEON XPRESS 200M Series (Microsoft Corporation - WDDM) supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. RADEON XPRESS 200M Series SW TCL x86 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. RADEON XPRESS 200M Series SW TCL x86/MMX/3DNow! supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. RADEON XPRESS 200M Series SW TCL x86/MMX/3DNow!/SSE2 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. RADEON XPRESS 200M Series SW TCL x86/SSE2 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. RADEON XPRESS 200M Series x86/MMX/3DNow! supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. RADEON XPRESS 200M Series x86/MMX/3DNow!/SSE2 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. RADEON XPRESS 200M Series x86/SSE2 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. RADEON XPRESS Series x86/MMX/3DNow!/SSE2 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. RADEON XPRESS Series x86/SSE2 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. RADEON Xpress 200 Series SW TCL x86/MMX/3DNow!/SSE2 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. RADEON Xpress 200G Series SW TCL x86/MMX/3DNow!/SSE2 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. ROBSON CE supported 3 0 4 ATI ROBSON +ATI Technologies Inc. ROBSON LE supported 3 0 4 ATI ROBSON +ATI Technologies Inc. RS780M supported 0 1 2.1 AMD RS780 (HD 3200) +ATI Technologies Inc. RS880 supported 0 1 3.2 AMD RS880 (HD 4200) +ATI Technologies Inc. RV250 DDR x86/SSE2 supported 0 0 0 ATI Radeon RV250 +ATI Technologies Inc. Radeon X1300XT/X1600 Pro Series NO MATCH +ATI Technologies Inc. Radeon X1300XT/X1600Pro/X1650 Series NO MATCH +ATI Technologies Inc. Radeon (TM) HD 7670M supported 3 0 4.2 ATI Radeon HD 7600 +ATI Technologies Inc. Radeon (TM) HD 6370M supported 1 1 4.2 ATI Radeon HD 6300 +ATI Technologies Inc. Radeon (TM) HD 6470M supported 3 1 4.2 ATI Radeon HD 6400 +ATI Technologies Inc. Radeon (TM) HD 6490M supported 3 1 4.2 ATI Radeon HD 6400 +ATI Technologies Inc. Radeon (TM) HD 6630M supported 3 1 4.2 ATI Radeon HD 6600 +ATI Technologies Inc. Radeon (TM) HD 6750M supported 3 1 4.2 ATI Radeon HD 6700 +ATI Technologies Inc. Radeon (TM) HD 6770M supported 3 1 4.2 ATI Radeon HD 6700 +ATI Technologies Inc. Radeon (TM) HD 6850M supported 4 1 4.2 ATI Radeon HD 6800 +ATI Technologies Inc. Radeon (TM) HD 7450M supported 2 0 4.2 ATI Radeon HD 7400 +ATI Technologies Inc. Radeon (TM) HD 7470M supported 2 0 4.2 ATI Radeon HD 7400 +ATI Technologies Inc. Radeon (TM) HD 7670M supported 3 0 4.2 ATI Radeon HD 7600 +ATI Technologies Inc. Radeon (TM) HD 7690M XT supported 3 0 4.2 ATI Radeon HD 7600 +ATI Technologies Inc. Radeon (TM) HD 7750M supported 4 1 4.2 ATI Radeon HD 7700 +ATI Technologies Inc. Radeon (TM) HD 7850M supported 5 1 4.2 ATI Radeon HD 7800 +ATI Technologies Inc. Radeon (TM) HD 8750M supported 4 1 4.2 ATI Radeon HD 8700 (OEM) +ATI Technologies Inc. Radeon 7000 DDR x86/SSE2 supported 0 1 2 ATI Radeon 7xxx +ATI Technologies Inc. Radeon 7500 DDR x86 supported 0 1 2 ATI Radeon 7xxx +ATI Technologies Inc. Radeon 7500 DDR x86/SSE2 supported 0 1 2 ATI Radeon 7xxx +ATI Technologies Inc. Radeon 9100 DDR x86/MMX/3DNow!/SSE2 supported 0 0 0 ATI Radeon 9100 +ATI Technologies Inc. Radeon 9200 DDR x86/SSE2 supported 0 1 1.3 ATI Radeon 9200 +ATI Technologies Inc. Radeon HD 2600 PRO (Omega 3.8.442) supported 2 1 4 ATI Radeon HD 2600 +ATI Technologies Inc. Radeon HD 6470M supported 3 1 4.2 ATI Radeon HD 6400 +ATI Technologies Inc. Radeon HD 6490M supported 3 1 4.2 ATI Radeon HD 6400 +ATI Technologies Inc. Radeon HD 6800 Series supported 4 1 4.2 ATI Radeon HD 6800 +ATI Technologies Inc. Radeon Radeon X300/X550/X1050 Series x86/SSE2 supported 1 1 2.1 ATI Radeon X300 +ATI Technologies Inc. Radeon X1050 supported 2 0 2.1 ATI Radeon X1000 +ATI Technologies Inc. Radeon X1050 Series (Omega 3.8.442) supported 2 0 2.1 ATI Radeon X1000 +ATI Technologies Inc. Radeon X1200 Series (Omega 3.8.442) supported 2 0 2.1 ATI Radeon X1200 +ATI Technologies Inc. Radeon X1300 / X1550 Series supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. Radeon X1300 / X1550 Series (Microsoft Corporation - WDDM) supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. Radeon X1300 / X1550 Series (Microsoft Corporation - WDDM) supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. Radeon X1300 / X1600 Series supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. Radeon X1300 Series supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. Radeon X1300 Series x86/MMX/3DNow!/SSE2 supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. Radeon X1300 Series x86/SSE2 supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. Radeon X1300/X1550 Series supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. Radeon X1300/X1550 Series (Microsoft Corporation - WDDM) supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. Radeon X1300/X1550 Series (Microsoft Corporation - WDDM) supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. Radeon X1300/X1550 Series (Omega 3.8.442) supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. Radeon X1300/X1550 Series x86/MMX/3DNow!/SSE2 supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. Radeon X1300/X1550 Series x86/SSE2 supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. Radeon X1550 64-bit (Microsoft Corporation - WDDM) supported 2 1 2.1 ATI Radeon X1500 +ATI Technologies Inc. Radeon X1550 64-bit x86/SSE2 supported 2 1 2.1 ATI Radeon X1500 +ATI Technologies Inc. Radeon X1550 Series supported 2 1 2.1 ATI Radeon X1500 +ATI Technologies Inc. Radeon X1550 Series (Microsoft Corporation - WDDM) supported 2 1 2.1 ATI Radeon X1500 +ATI Technologies Inc. Radeon X1550 Series x86/MMX/3DNow!/SSE2 supported 2 1 2.1 ATI Radeon X1500 +ATI Technologies Inc. Radeon X1550 Series x86/SSE2 supported 2 1 2.1 ATI Radeon X1500 +ATI Technologies Inc. Radeon X1600 supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. Radeon X1600 Pro / X1300XT supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. Radeon X1600 Pro / X1300XT x86/SSE2 supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. Radeon X1600 Series supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. Radeon X1600 Series (Microsoft Corporation - WDDM) supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. Radeon X1600 Series (Omega 3.8.442) supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. Radeon X1600 Series x86/MMX/3DNow!/SSE2 supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. Radeon X1600 Series x86/SSE2 supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. Radeon X1600 x86/SSE2 supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. Radeon X1600/1650 Series supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. Radeon X1600/X1650 Series supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. Radeon X1600/X1650 Series x86/SSE2 supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. Radeon X1650 GTO supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. Radeon X1650 SE supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. Radeon X1650 SE x86/SSE2 supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. Radeon X1650 Series supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. Radeon X1650 Series (Microsoft Corporation - WDDM) supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. Radeon X1650 Series (Microsoft Corporation - WDDM) supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. Radeon X1650 Series (Omega 3.8.442) supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. Radeon X1650 Series x86/MMX/3DNow!/SSE2 supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. Radeon X1650 Series x86/SSE2 supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. Radeon X1650/X1700 Series (Omega 3.8.442) supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. Radeon X1700 FSC supported 2 1 2.1 ATI Radeon X1700 +ATI Technologies Inc. Radeon X1800 CrossFire Edition supported 3 1 2.1 ATI Radeon X1800 +ATI Technologies Inc. Radeon X1800 Series supported 3 1 2.1 ATI Radeon X1800 +ATI Technologies Inc. Radeon X1800 Series x86/MMX/3DNow!/SSE2 supported 3 1 2.1 ATI Radeon X1800 +ATI Technologies Inc. Radeon X1900 CrossFire Edition supported 2 1 2.1 ATI Radeon X1900 +ATI Technologies Inc. Radeon X1900 GT supported 2 1 2.1 ATI Radeon X1900 +ATI Technologies Inc. Radeon X1900 GT x86/SSE2 supported 2 1 2.1 ATI Radeon X1900 +ATI Technologies Inc. Radeon X1900 Series supported 2 1 2.1 ATI Radeon X1900 +ATI Technologies Inc. Radeon X1900 Series (Microsoft Corporation - WDDM) supported 2 1 2.1 ATI Radeon X1900 +ATI Technologies Inc. Radeon X1900 Series x86/MMX/3DNow!/SSE2 supported 2 1 2.1 ATI Radeon X1900 +ATI Technologies Inc. Radeon X1900 Series x86/SSE2 supported 2 1 2.1 ATI Radeon X1900 +ATI Technologies Inc. Radeon X1950 CrossFire Edition supported 2 1 2.1 ATI Radeon X1900 +ATI Technologies Inc. Radeon X1950 Pro supported 2 1 2.1 ATI Radeon X1900 +ATI Technologies Inc. Radeon X1950 Pro (Omega 3.8.442) supported 2 1 2.1 ATI Radeon X1900 +ATI Technologies Inc. Radeon X1950 Pro x86/MMX/3DNow!/SSE2 supported 2 1 2.1 ATI Radeon X1900 +ATI Technologies Inc. Radeon X1950 Pro x86/SSE2 supported 2 1 2.1 ATI Radeon X1900 +ATI Technologies Inc. Radeon X1950 Series supported 2 1 2.1 ATI Radeon X1900 +ATI Technologies Inc. Radeon X1950 Series (Microsoft Corporation - WDDM) supported 2 1 2.1 ATI Radeon X1900 +ATI Technologies Inc. Radeon X1950 Series (Microsoft Corporation - WDDM) supported 2 1 2.1 ATI Radeon X1900 +ATI Technologies Inc. Radeon X1950 Series x86/MMX/3DNow!/SSE2 supported 2 1 2.1 ATI Radeon X1900 +ATI Technologies Inc. Radeon X1950 Series x86/SSE2 supported 2 1 2.1 ATI Radeon X1900 +ATI Technologies Inc. Radeon X300/X550/X1050 Series supported 1 1 2.1 ATI Radeon X300 +ATI Technologies Inc. Radeon X300/X550/X1050 Series (Microsoft Corporation - WDDM) supported 1 1 2.1 ATI Radeon X300 +ATI Technologies Inc. Radeon X300/X550/X1050 Series (Microsoft Corporation - WDDM) supported 1 1 2.1 ATI Radeon X300 +ATI Technologies Inc. Radeon X300/X550/X1050 Series (Omega 3.8.442) supported 1 1 2.1 ATI Radeon X300 +ATI Technologies Inc. Radeon X300/X550/X1050 Series x86/SSE2 supported 1 1 2.1 ATI Radeon X300 +ATI Technologies Inc. Radeon X550/X700 Series supported 1 1 2.1 ATI Radeon X500 +ATI Technologies Inc. Radeon X550XTX supported 1 1 2.1 ATI Radeon X500 +ATI Technologies Inc. Radeon Xpress 200 Series (Omega 3.8.442) x86/SSE2 supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. Radeon Xpress 200M Series (Omega 3.8.442) supported 0 1 2.1 ATI Radeon Xpress +ATI Technologies Inc. SAPPHIRE RADEON 9600 ATLANTIS supported 0 1 2.1 ATI Radeon 9600 +ATI Technologies Inc. SAPPHIRE RADEON X300SE supported 1 1 2.1 ATI Radeon X300 +ATI Technologies Inc. SAPPHIRE Radeon X1550 supported 2 1 2.1 ATI Radeon X1500 +ATI Technologies Inc. SAPPHIRE Radeon X1550 Series supported 2 1 2.1 ATI Radeon X1500 +ATI Technologies Inc. SAPPHIRE Radeon X1550 Series x86/SSE2 supported 2 1 2.1 ATI Radeon X1500 +ATI Technologies Inc. SUMO 9640 supported 3 1 4.1 AMD SUMO +ATI Technologies Inc. SUMO 964A supported 3 1 4.1 AMD SUMO +ATI Technologies Inc. Sapphire RADEON X1600 PRO supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. Sapphire RADEON X1600 PRO x86/SSE2 supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. Sapphire RADEON X1600 XT supported 2 1 2.1 ATI Radeon X1600 +ATI Technologies Inc. Tul Corporation, RADEON X1300 Series NO MATCH +ATI Technologies Inc. Tul Corporation, RADEON X300SE NO MATCH +ATI Technologies Inc. VisionTek Radeon 4350 supported 2 1 4 ATI Radeon HD 4300 +ATI Technologies Inc. VisionTek Radeon HD 2400 PCI supported 1 1 4 ATI Radeon HD 2400 +ATI Technologies Inc. VisionTek Radeon HD 2600 XT AGP supported 2 1 4 ATI Radeon HD 2600 +ATI Technologies Inc. VisionTek Radeon HD 5450 supported 3 1 4.2 ATI Radeon HD 5400 +ATI Technologies Inc. VisionTek Radeon HD2400 Pro AGP supported 1 1 4 ATI Radeon HD 2400 +ATI Technologies Inc. VisionTek Radeon HD2400 Pro PCI supported 1 1 4 ATI Radeon HD 2400 +ATI Technologies Inc. VisionTek Radeon X1300 supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. VisionTek Radeon X1300 Series supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. VisionTek Radeon X1300 XGE supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. VisionTek Radeon X1550 Series supported 2 1 2.1 ATI Radeon X1500 +ATI Technologies Inc. WRESTLER 9802 supported 3 1 4 AMD WRESTLER +ATI Technologies Inc. XFX Radeon HD 4570 supported 2 1 3.3 ATI Radeon HD 4500 +Advanced Micro Devices, Inc. Mesa DRI R600 (RS880 9712) 20090101 x86/MMX+/3DNow!+/SSE2 TCL DRI2 supported 0 1 3.2 AMD RS880 (HD 4200) +Alex Mohr GL Hijacker! NO MATCH +Brian Paul Mesa X11 unsupported 1 1 3 Mesa +Gallium supported 1 1 2.1 Gallium +Humper supported 0 1 2.1 Humper +Humper Chromium supported 0 1 2.1 Humper +Imagination Technologies 3D-Analyze v2.3 - http://www.tommti-systems.com unsupported 0 0 0 ATI 3D-Analyze +Imagination Technologies PowerVR SGX545 supported 1 1 3 PowerVR SGX545 +Intel NO MATCH +Intel 3D-Analyze v2.3 - http://www.tommti-systems.com supported 2 0 0 Intel 3D-Analyze +Intel 4 Series Internal supported 1 1 2.1 Intel 4 Series Internal +Intel 845G unsupported 0 1 1.4 Intel 845G +Intel 855GM unsupported 0 1 1.4 Intel 855GM +Intel 865G unsupported 0 1 1.4 Intel 865G +Intel 915G unsupported 0 1 1.4 Intel 915G +Intel 915GM unsupported 0 1 1.4 Intel 915GM +Intel 945G supported 0 1 1.4 Intel 945G +Intel 945GM supported 0 1 1.4 Intel 945GM +Intel 950 supported 0 1 1.4 Intel 950 +Intel 965 supported 0 1 2.1 Intel 965 +Intel Bear Lake unsupported 1 1 1.4 Intel Bear Lake +Intel Broadwater unsupported 0 1 1.4 Intel Broadwater +Intel Brookdale unsupported 0 1 1.3 Intel Brookdale +Intel Cantiga unsupported 0 1 2 Intel Cantiga +Intel Corporation Intel(R) Graphics Media Accelerator 3600 Series supported 0 1 3 Intel GMA 3600 +Intel Eaglelake supported 1 1 2 Intel Eaglelake +Intel G33 unsupported 1 1 1.4 Intel G33 +Intel G41 supported 1 1 2.1 Intel G41 +Intel G45 supported 1 1 2.1 Intel G45 +Intel Graphics Media HD supported 1 1 2.1 Intel Graphics Media HD +Intel HD Graphics supported 2 1 4 Intel HD Graphics +Intel HD Graphics 2000 supported 2 0 3.1 Intel HD Graphics 2000 +Intel HD Graphics 3000 supported 3 1 3.1 Intel HD Graphics 3000 +Intel HD Graphics 4000 supported 3 1 4 Intel HD Graphics 4000 +Intel Inc. Intel GMA 950 OpenGL Engine supported 0 1 1.4 Intel 950 +Intel Inc. Intel GMA X3100 OpenGL Engine supported 1 1 2.1 Intel X3100 +Intel Inc. Intel HD Graphics 3000 OpenGL Engine supported 3 1 3.1 Intel HD Graphics 3000 +Intel Inc. Intel HD Graphics 4000 OpenGL Engine supported 3 1 4 Intel HD Graphics 4000 +Intel Inc. Intel HD Graphics 5000 OpenGL Engine supported 4 0 4 Intel HD Graphics 5000 +Intel Inc. Intel HD Graphics OpenGL Engine supported 2 1 4 Intel HD Graphics +Intel Intel 845G unsupported 0 1 1.4 Intel 845G +Intel Intel 855GM unsupported 0 1 1.4 Intel 855GM +Intel Intel 865G unsupported 0 1 1.4 Intel 865G +Intel Intel 915G unsupported 0 1 1.4 Intel 915G +Intel Intel 915GM unsupported 0 1 1.4 Intel 915GM +Intel Intel 945G supported 0 1 1.4 Intel 945G +Intel Intel 945GM supported 0 1 1.4 Intel 945GM +Intel Intel 965/963 Graphics Media Accelerator supported 0 1 2.1 Intel 965 +Intel Intel Bear Lake B unsupported 1 1 1.4 Intel Bear Lake +Intel Intel Broadwater G unsupported 0 1 1.4 Intel Broadwater +Intel Intel Brookdale-G unsupported 0 1 1.3 Intel Brookdale +Intel Intel Cantiga unsupported 0 1 2 Intel Cantiga +Intel Intel Eaglelake supported 1 1 2 Intel Eaglelake +Intel Intel Grantsdale-G supported 1 0 0 Intel Grantsdale +Intel Intel Iris Pro Graphics 5200 supported 4 0 4 Intel Intel Iris Pro Graphics 5200 +Intel Intel Montara-GM unsupported 0 1 1.3 Intel Montara +Intel Intel Pineview Platform supported 0 1 1.4 Intel Pineview +Intel Intel Springdale-G unsupported 0 1 1.3 Intel Springdale +Intel Intel(R) HD Graphics Family supported 2 1 4 Intel HD Graphics +Intel Intel(R) 4 Series Internal Chipset supported 1 1 2.1 Intel 4 Series Internal +Intel Intel(R) B43 Express Chipset supported 1 1 2.1 Intel B45/B43 +Intel Intel(R) G41 Express Chipset supported 1 1 2.1 Intel G41 +Intel Intel(R) G41 Express Chipset (Microsoft Corporation - WDDM 1.1) supported 1 1 2.1 Intel G41 +Intel Intel(R) G41 Express Chipset v2 supported 1 1 2.1 Intel G41 +Intel Intel(R) G45/G43 Express Chipset supported 1 1 2.1 Intel G45 +Intel Intel(R) G45/G43/G41 Express Chipset supported 1 1 2.1 Intel G41 +Intel Intel(R) Graphics Media Accelerator HD supported 1 1 2.1 Intel Graphics Media HD +Intel Intel(R) HD Graphics supported 2 1 4 Intel HD Graphics +Intel Intel(R) HD Graphics 100 supported 2 1 4 Intel HD Graphics +Intel Intel(R) HD Graphics 2000 supported 2 0 3.1 Intel HD Graphics 2000 +Intel Intel(R) HD Graphics 2500 supported 2 0 4 Intel HD Graphics 2500 +Intel Intel(R) HD Graphics 3000 supported 3 1 3.1 Intel HD Graphics 3000 +Intel Intel(R) HD Graphics 4000 supported 3 1 4 Intel HD Graphics 4000 +Intel Intel(R) HD Graphics 4400 supported 3 0 4 Intel HD Graphics 4400 +Intel Intel(R) HD Graphics 4600 supported 3 0 4 Intel HD Graphics 4600 +Intel Intel(R) HD Graphics 5000 supported 4 0 4 Intel HD Graphics 5000 +Intel Intel(R) HD Graphics BR-1004-01Y1 supported 2 1 4 Intel HD Graphics +Intel Intel(R) HD Graphics Family supported 2 1 4 Intel HD Graphics +Intel Intel(R) HD Graphics P3000 supported 2 1 4 Intel HD Graphics +Intel Intel(R) HD Graphics P4000 supported 2 1 4 Intel HD Graphics +Intel Intel(R) Q45/Q43 Express Chipset supported 1 1 2.1 Intel Q45/Q43 +Intel Mobile 4 Series supported 0 1 2.1 Intel Mobile 4 Series +Intel Mobile Intel(R) 4 Series Express Chipset Family supported 0 1 2.1 Intel Mobile 4 Series +Intel Mobile Intel(R) 4 Series Express Chipset Family v2 supported 0 1 2.1 Intel Mobile 4 Series +Intel Mobile Intel(R) 45 Express Chipset Family (Microsoft Corporation - WDDM 1.1) NO MATCH +Intel Mobile Intel(R) HD Graphics supported 2 1 4 Intel HD Graphics +Intel Montara unsupported 0 1 1.3 Intel Montara +Intel Open Source Technology Center Mesa DRI Intel(R) 852GM/855GM x86/MMX/SSE2 unsupported 0 1 1.4 Intel 855GM +Intel Open Source Technology Center Mesa DRI Intel(R) 915G unsupported 0 1 1.4 Intel 915G +Intel Open Source Technology Center Mesa DRI Intel(R) 915G x86/MMX/SSE2 unsupported 0 1 1.4 Intel 915G +Intel Open Source Technology Center Mesa DRI Intel(R) 915GM x86/MMX/SSE2 unsupported 0 1 1.4 Intel 915GM +Intel Open Source Technology Center Mesa DRI Intel(R) 945G supported 0 1 1.4 Intel 945G +Intel Open Source Technology Center Mesa DRI Intel(R) 945G x86/MMX/SSE2 supported 0 1 1.4 Intel 945G +Intel Open Source Technology Center Mesa DRI Intel(R) 945GM supported 0 1 1.4 Intel 945GM +Intel Open Source Technology Center Mesa DRI Intel(R) 945GM x86/MMX/SSE2 supported 0 1 1.4 Intel 945GM +Intel Open Source Technology Center Mesa DRI Intel(R) 945GME x86/MMX/SSE2 supported 0 1 1.4 Intel 945GM +Intel Open Source Technology Center Mesa DRI Intel(R) 965G x86/MMX/SSE2 supported 0 1 2.1 Intel 965 +Intel Open Source Technology Center Mesa DRI Intel(R) 965GM supported 0 1 2.1 Intel 965 +Intel Open Source Technology Center Mesa DRI Intel(R) 965GM x86/MMX/SSE2 supported 0 1 2.1 Intel 965 +Intel Open Source Technology Center Mesa DRI Intel(R) 965GME/GLE supported 0 1 2.1 Intel 965 +Intel Open Source Technology Center Mesa DRI Intel(R) 965Q supported 0 1 2.1 Intel 965 +Intel Open Source Technology Center Mesa DRI Intel(R) 965Q x86/MMX/SSE2 supported 0 1 2.1 Intel 965 +Intel Open Source Technology Center Mesa DRI Intel(R) G33 x86/MMX/SSE2 unsupported 1 1 1.4 Intel G33 +Intel Open Source Technology Center Mesa DRI Intel(R) G41 x86/MMX/SSE2 supported 1 1 2.1 Intel G41 +Intel Open Source Technology Center Mesa DRI Intel(R) G45/G43 supported 1 1 2.1 Intel G45 +Intel Open Source Technology Center Mesa DRI Intel(R) G45/G43 x86/MMX/SSE2 supported 1 1 2.1 Intel G45 +Intel Open Source Technology Center Mesa DRI Intel(R) IGD unsupported 1 1 3 Mesa +Intel Open Source Technology Center Mesa DRI Intel(R) IGD x86/MMX/SSE2 unsupported 1 1 3 Mesa +Intel Open Source Technology Center Mesa DRI Intel(R) Ironlake Desktop x86/MMX/SSE2 unsupported 1 1 3 Mesa +Intel Open Source Technology Center Mesa DRI Intel(R) Ironlake Mobile unsupported 1 1 3 Mesa +Intel Open Source Technology Center Mesa DRI Intel(R) Ironlake Mobile x86/MMX/SSE2 unsupported 1 1 3 Mesa +Intel Open Source Technology Center Mesa DRI Intel(R) Ivybridge Desktop unsupported 1 1 3 Mesa +Intel Open Source Technology Center Mesa DRI Intel(R) Ivybridge Desktop x86/MMX/SSE2 unsupported 1 1 3 Mesa +Intel Open Source Technology Center Mesa DRI Intel(R) Ivybridge Mobile unsupported 1 1 3 Mesa +Intel Open Source Technology Center Mesa DRI Intel(R) Ivybridge Mobile x86/MMX/SSE2 unsupported 1 1 3 Mesa +Intel Open Source Technology Center Mesa DRI Intel(R) Q35 unsupported 1 1 3 Mesa +Intel Open Source Technology Center Mesa DRI Intel(R) Q35 x86/MMX/SSE2 unsupported 1 1 3 Mesa +Intel Open Source Technology Center Mesa DRI Intel(R) Q45/Q43 supported 1 1 2.1 Intel Q45/Q43 +Intel Open Source Technology Center Mesa DRI Intel(R) Q45/Q43 x86/MMX/SSE2 supported 1 1 2.1 Intel Q45/Q43 +Intel Open Source Technology Center Mesa DRI Intel(R) Sandybridge Desktop unsupported 1 1 3 Mesa +Intel Open Source Technology Center Mesa DRI Intel(R) Sandybridge Desktop x86/MMX/SSE2 unsupported 1 1 3 Mesa +Intel Open Source Technology Center Mesa DRI Intel(R) Sandybridge Mobile unsupported 1 1 3 Mesa +Intel Open Source Technology Center Mesa DRI Intel(R) Sandybridge Mobile x86/MMX/SSE2 unsupported 1 1 3 Mesa +Intel Open Source Technology Center Mesa DRI Mobile Intel GM45 Express Chipset unsupported 1 1 3 Mesa +Intel Open Source Technology Center Mesa DRI Mobile Intel GM45 Express Chipset x86/MMX/SSE2 unsupported 1 1 3 Mesa +Intel Pineview supported 0 1 1.4 Intel Pineview +Intel Q45/Q43 supported 1 1 2.1 Intel Q45/Q43 +Intel Royal BNA Driver NO MATCH +Intel Springdale unsupported 0 1 1.3 Intel Springdale +Intel X3100 supported 1 1 2.1 Intel X3100 +Matrox Graphics Inc. Matrox ICD for M-Series unsupported 0 0 0 Matrox +Matrox Graphics Inc. Matrox G400 unsupported 0 0 0 Matrox +Matrox Graphics Inc. Matrox ICD for Parhelia unsupported 0 0 0 Matrox +Mesa unsupported 1 1 3 Mesa +Mesa Project Software Rasterizer unsupported 1 1 3 Mesa +Mesa project: www.mesa3d.org Mesa GLX Indirect unsupported 1 1 3 Mesa +NVIDIA 205 NO MATCH +NVIDIA 210 NO MATCH +NVIDIA 310 NO MATCH +NVIDIA 310M NO MATCH +NVIDIA 315 NO MATCH +NVIDIA 315M NO MATCH +NVIDIA 320M NO MATCH +NVIDIA 405 NO MATCH +NVIDIA 410 NO MATCH +NVIDIA 510 NO MATCH +NVIDIA 610M supported 3 1 4.2 NVIDIA 610M +NVIDIA Corporation /PCI/SSE2 NO MATCH +NVIDIA Corporation 3D-Analyze v2.3 - http://www.tommti-systems.com unsupported 0 0 0 ATI 3D-Analyze +NVIDIA Corporation C51/PCI/SSE2/3DNOW! supported 0 1 2 NVIDIA C51 +NVIDIA Corporation C51G/PCI/SSE2/3DNOW! supported 0 1 2 NVIDIA C51 +NVIDIA Corporation D10P1-25/PCI/SSE2/3DNOW! NO MATCH +NVIDIA Corporation D14P1-30/PCIe/SSE2 NO MATCH +NVIDIA Corporation D9M-20/PCI/SSE2 supported 1 0 0 NVIDIA D9M +NVIDIA Corporation D9M-20/PCI/SSE2/3DNOW! supported 1 0 0 NVIDIA D9M +NVIDIA Corporation G72/PCI/SSE2/3DNOW! supported 1 0 0 NVIDIA G72 +NVIDIA Corporation G73/AGP/SSE2/3DNOW! supported 1 0 0 NVIDIA G73 +NVIDIA Corporation G73/PCI/SSE2/3DNOW! supported 1 0 0 NVIDIA G73 +NVIDIA Corporation G84-50/PCI/SSE2 supported 2 0 0 NVIDIA G84 +NVIDIA Corporation G92-100/PCI/SSE2/3DNOW! supported 3 0 0 NVIDIA G92 +NVIDIA Corporation GK106/PCIe/SSE2 NO MATCH +NVIDIA Corporation GRID K2/PCIe/SSE2 NO MATCH +NVIDIA Corporation GeForce GTX 555/PCI/SSE2 supported 5 1 4.3 NVIDIA GTX 550 +NVIDIA Corporation GeForce GTX 555/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 550 +NVIDIA Corporation GeForce 205/PCI/SSE2 supported 2 1 3.3 NVIDIA 200 +NVIDIA Corporation GeForce 210/PCI/SSE2 supported 3 1 3.3 NVIDIA 210 +NVIDIA Corporation GeForce 210/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA 210 +NVIDIA Corporation GeForce 210/PCIe/SSE2 supported 3 1 3.3 NVIDIA 210 +NVIDIA Corporation GeForce 210/PCIe/SSE2/3DNOW! supported 3 1 3.3 NVIDIA 210 +NVIDIA Corporation GeForce 310/PCI/SSE2 supported 3 1 3.3 NVIDIA 310 +NVIDIA Corporation GeForce 310/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA 310 +NVIDIA Corporation GeForce 310/PCIe/SSE2 supported 3 1 3.3 NVIDIA 310 +NVIDIA Corporation GeForce 310/PCIe/SSE2/3DNOW! supported 3 1 3.3 NVIDIA 310 +NVIDIA Corporation GeForce 310M/PCI/SSE2 supported 2 0 3.3 NVIDIA G 310M +NVIDIA Corporation GeForce 310M/PCIe/SSE2 supported 2 0 3.3 NVIDIA G 310M +NVIDIA Corporation GeForce 315/PCI/SSE2 supported 3 1 3.3 NVIDIA 315 +NVIDIA Corporation GeForce 315/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA 315 +NVIDIA Corporation GeForce 315/PCIe/SSE2 supported 3 1 3.3 NVIDIA 315 +NVIDIA Corporation GeForce 315/PCIe/SSE2/3DNOW! supported 3 1 3.3 NVIDIA 315 +NVIDIA Corporation GeForce 315M/PCI/SSE2 supported 2 0 3.3 NVIDIA G 310M +NVIDIA Corporation GeForce 315M/PCIe/SSE2 supported 2 0 3.3 NVIDIA G 310M +NVIDIA Corporation GeForce 320M/PCI/SSE2 supported 3 0 3.3 NVIDIA GT 320M +NVIDIA Corporation GeForce 320M/integrated/SSE2 supported 3 0 3.3 NVIDIA GT 320M +NVIDIA Corporation GeForce 405/PCI/SSE2 supported 3 0 3.3 NVIDIA 405 +NVIDIA Corporation GeForce 405/PCI/SSE2/3DNOW! supported 3 0 3.3 NVIDIA 405 +NVIDIA Corporation GeForce 405/PCIe/SSE2 supported 3 0 3.3 NVIDIA 405 +NVIDIA Corporation GeForce 405/PCIe/SSE2/3DNOW! supported 3 0 3.3 NVIDIA 405 +NVIDIA Corporation GeForce 410M/PCI/SSE2 supported 3 0 0 NVIDIA 410M +NVIDIA Corporation GeForce 410M/PCIe/SSE2 supported 3 0 0 NVIDIA 410M +NVIDIA Corporation GeForce 505/PCIe/SSE2 NO MATCH +NVIDIA Corporation GeForce 510/PCI/SSE2 supported 3 0 0 NVIDIA 510 +NVIDIA Corporation GeForce 510/PCIe/SSE2 supported 3 0 0 NVIDIA 510 +NVIDIA Corporation GeForce 605/PCI/SSE2 supported 3 1 4.2 NVIDIA 605 +NVIDIA Corporation GeForce 605/PCIe/SSE2 supported 3 1 4.2 NVIDIA 605 +NVIDIA Corporation GeForce 605/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA 605 +NVIDIA Corporation GeForce 610/PCIe/SSE2 supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation GeForce 6100 nForce 400/PCI/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation GeForce 6100 nForce 400/integrated/SSE2 supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation GeForce 6100 nForce 400/integrated/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation GeForce 6100 nForce 405/PCI/SSE2 supported 3 0 3.3 NVIDIA 405 +NVIDIA Corporation GeForce 6100 nForce 405/PCI/SSE2/3DNOW! supported 3 0 3.3 NVIDIA 405 +NVIDIA Corporation GeForce 6100 nForce 405/integrated/SSE2 supported 3 0 3.3 NVIDIA 405 +NVIDIA Corporation GeForce 6100 nForce 405/integrated/SSE2/3DNOW! supported 3 0 3.3 NVIDIA 405 +NVIDIA Corporation GeForce 6100 nForce 420/PCI/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation GeForce 6100 nForce 430/PCI/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation GeForce 6100/PCI/SSE2 supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation GeForce 6100/PCI/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation GeForce 6100/integrated/SSE2 supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation GeForce 6100/integrated/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation GeForce 610M/PCI/SSE2 supported 3 1 4.2 NVIDIA 610M +NVIDIA Corporation GeForce 610M/PCIe/SSE2 supported 3 1 4.2 NVIDIA 610M +NVIDIA Corporation GeForce 615/PCIe/SSE2 supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation GeForce 6150 LE/PCI/SSE2 supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation GeForce 6150 LE/PCI/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation GeForce 6150 LE/integrated/SSE2 supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation GeForce 6150 LE/integrated/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation GeForce 6150 SE/PCI/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation GeForce 6150/PCI/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation GeForce 6150/integrated/SSE2 supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation GeForce 6150/integrated/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation GeForce 6150SE nForce 430/PCI/SSE2 supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation GeForce 6150SE nForce 430/PCI/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation GeForce 6150SE nForce 430/integrated/SSE2 supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation GeForce 6150SE nForce 430/integrated/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation GeForce 6150SE/PCI/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation GeForce 6200 A-LE/AGP/SSE2 supported 0 1 2.1 NVIDIA GeForce 6200 +NVIDIA Corporation GeForce 6200 A-LE/AGP/SSE2/3DNOW! supported 0 1 2.1 NVIDIA GeForce 6200 +NVIDIA Corporation GeForce 6200 A-LE/PCI/SSE2 supported 0 1 2.1 NVIDIA GeForce 6200 +NVIDIA Corporation GeForce 6200 A-LE/PCI/SSE2/3DNOW! supported 0 1 2.1 NVIDIA GeForce 6200 +NVIDIA Corporation GeForce 6200 LE/PCI/SSE2 supported 0 1 2.1 NVIDIA GeForce 6200 +NVIDIA Corporation GeForce 6200 LE/PCI/SSE2/3DNOW! supported 0 1 2.1 NVIDIA GeForce 6200 +NVIDIA Corporation GeForce 6200 LE/PCIe/SSE2 supported 0 1 2.1 NVIDIA GeForce 6200 +NVIDIA Corporation GeForce 6200 LE/PCIe/SSE2/3DNOW! supported 0 1 2.1 NVIDIA GeForce 6200 +NVIDIA Corporation GeForce 6200 TurboCache(TM)/PCI/SSE2 supported 0 1 2.1 NVIDIA GeForce 6200 +NVIDIA Corporation GeForce 6200 TurboCache(TM)/PCI/SSE2/3DNOW! supported 0 1 2.1 NVIDIA GeForce 6200 +NVIDIA Corporation GeForce 6200 TurboCache(TM)/PCIe/SSE2 supported 0 1 2.1 NVIDIA GeForce 6200 +NVIDIA Corporation GeForce 6200 TurboCache(TM)/PCIe/SSE2/3DNOW! supported 0 1 2.1 NVIDIA GeForce 6200 +NVIDIA Corporation GeForce 6200/AGP/SSE2 supported 0 1 2.1 NVIDIA GeForce 6200 +NVIDIA Corporation GeForce 6200/AGP/SSE2/3DNOW! supported 0 1 2.1 NVIDIA GeForce 6200 +NVIDIA Corporation GeForce 6200/PCI/SSE2 supported 0 1 2.1 NVIDIA GeForce 6200 +NVIDIA Corporation GeForce 6200/PCI/SSE2/3DNOW! supported 0 1 2.1 NVIDIA GeForce 6200 +NVIDIA Corporation GeForce 6200/PCIe/SSE2 supported 0 1 2.1 NVIDIA GeForce 6200 +NVIDIA Corporation GeForce 6200/PCIe/SSE2/3DNOW! supported 0 1 2.1 NVIDIA GeForce 6200 +NVIDIA Corporation GeForce 6200SE TurboCache(TM)/PCI/SSE2 supported 0 1 2.1 NVIDIA GeForce 6200 +NVIDIA Corporation GeForce 6200SE TurboCache(TM)/PCI/SSE2/3DNOW! supported 0 1 2.1 NVIDIA GeForce 6200 +NVIDIA Corporation GeForce 6200SE TurboCache(TM)/PCIe/SSE2 supported 0 1 2.1 NVIDIA GeForce 6200 +NVIDIA Corporation GeForce 6200SE TurboCache(TM)/PCIe/SSE2/3DNOW! supported 0 1 2.1 NVIDIA GeForce 6200 +NVIDIA Corporation GeForce 6500/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 6500 +NVIDIA Corporation GeForce 6500/PCI/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 6500 +NVIDIA Corporation GeForce 6500/PCIe/SSE2 supported 1 1 2.1 NVIDIA GeForce 6500 +NVIDIA Corporation GeForce 6500/PCIe/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 6500 +NVIDIA Corporation GeForce 6600 GT/AGP/SSE2 supported 2 1 2.1 NVIDIA GeForce 6600 +NVIDIA Corporation GeForce 6600 GT/AGP/SSE2/3DNOW! supported 2 1 2.1 NVIDIA GeForce 6600 +NVIDIA Corporation GeForce 6600 GT/PCI/SSE2 supported 2 1 2.1 NVIDIA GeForce 6600 +NVIDIA Corporation GeForce 6600 GT/PCI/SSE2/3DNOW! supported 2 1 2.1 NVIDIA GeForce 6600 +NVIDIA Corporation GeForce 6600 GT/PCIe/SSE2 supported 2 1 2.1 NVIDIA GeForce 6600 +NVIDIA Corporation GeForce 6600 GT/PCIe/SSE2/3DNOW! supported 2 1 2.1 NVIDIA GeForce 6600 +NVIDIA Corporation GeForce 6600 LE/AGP/SSE2/3DNOW! supported 2 1 2.1 NVIDIA GeForce 6600 +NVIDIA Corporation GeForce 6600 LE/PCI/SSE2 supported 2 1 2.1 NVIDIA GeForce 6600 +NVIDIA Corporation GeForce 6600 LE/PCI/SSE2/3DNOW! supported 2 1 2.1 NVIDIA GeForce 6600 +NVIDIA Corporation GeForce 6600 LE/PCIe/SSE2 supported 2 1 2.1 NVIDIA GeForce 6600 +NVIDIA Corporation GeForce 6600 LE/PCIe/SSE2/3DNOW! supported 2 1 2.1 NVIDIA GeForce 6600 +NVIDIA Corporation GeForce 6600/AGP/SSE2 supported 2 1 2.1 NVIDIA GeForce 6600 +NVIDIA Corporation GeForce 6600/AGP/SSE2/3DNOW! supported 2 1 2.1 NVIDIA GeForce 6600 +NVIDIA Corporation GeForce 6600/PCI/SSE2 supported 2 1 2.1 NVIDIA GeForce 6600 +NVIDIA Corporation GeForce 6600/PCI/SSE2/3DNOW! supported 2 1 2.1 NVIDIA GeForce 6600 +NVIDIA Corporation GeForce 6600/PCIe/SSE2 supported 2 1 2.1 NVIDIA GeForce 6600 +NVIDIA Corporation GeForce 6600/PCIe/SSE2/3DNOW! supported 2 1 2.1 NVIDIA GeForce 6600 +NVIDIA Corporation GeForce 6610 XL/PCI/SSE2 supported 2 1 2.1 NVIDIA GeForce 6600 +NVIDIA Corporation GeForce 6610 XL/PCIe/SSE2 supported 2 1 2.1 NVIDIA GeForce 6600 +NVIDIA Corporation GeForce 6700 XL/PCI/SSE2 supported 2 1 2.1 NVIDIA GeForce 6700 +NVIDIA Corporation GeForce 6700 XL/PCIe/SSE2 supported 2 1 2.1 NVIDIA GeForce 6700 +NVIDIA Corporation GeForce 6800 GS/AGP/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 6800 +NVIDIA Corporation GeForce 6800 GS/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 6800 +NVIDIA Corporation GeForce 6800 GS/PCIe/SSE2 supported 1 1 2.1 NVIDIA GeForce 6800 +NVIDIA Corporation GeForce 6800 GS/PCIe/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 6800 +NVIDIA Corporation GeForce 6800 GT/AGP/SSE2 supported 1 1 2.1 NVIDIA GeForce 6800 +NVIDIA Corporation GeForce 6800 GT/AGP/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 6800 +NVIDIA Corporation GeForce 6800 GT/PCIe/SSE2 supported 1 1 2.1 NVIDIA GeForce 6800 +NVIDIA Corporation GeForce 6800 GT/PCIe/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 6800 +NVIDIA Corporation GeForce 6800 LE/AGP/SSE2 supported 1 1 2.1 NVIDIA GeForce 6800 +NVIDIA Corporation GeForce 6800 LE/AGP/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 6800 +NVIDIA Corporation GeForce 6800 LE/PCI/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 6800 +NVIDIA Corporation GeForce 6800 Ultra/AGP/SSE2 supported 1 1 2.1 NVIDIA GeForce 6800 +NVIDIA Corporation GeForce 6800 Ultra/AGP/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 6800 +NVIDIA Corporation GeForce 6800 Ultra/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 6800 +NVIDIA Corporation GeForce 6800 Ultra/PCIe/SSE2 supported 1 1 2.1 NVIDIA GeForce 6800 +NVIDIA Corporation GeForce 6800 Ultra/PCIe/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 6800 +NVIDIA Corporation GeForce 6800 XT/AGP/SSE2 supported 1 1 2.1 NVIDIA GeForce 6800 +NVIDIA Corporation GeForce 6800 XT/AGP/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 6800 +NVIDIA Corporation GeForce 6800 XT/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 6800 +NVIDIA Corporation GeForce 6800 XT/PCI/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 6800 +NVIDIA Corporation GeForce 6800 XT/PCIe/SSE2 supported 1 1 2.1 NVIDIA GeForce 6800 +NVIDIA Corporation GeForce 6800 XT/PCIe/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 6800 +NVIDIA Corporation GeForce 6800/AGP/SSE2 supported 1 1 2.1 NVIDIA GeForce 6800 +NVIDIA Corporation GeForce 6800/AGP/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 6800 +NVIDIA Corporation GeForce 6800/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 6800 +NVIDIA Corporation GeForce 6800/PCIe/SSE2 supported 1 1 2.1 NVIDIA GeForce 6800 +NVIDIA Corporation GeForce 6800/PCIe/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 6800 +NVIDIA Corporation GeForce 7000M / nForce 610M/PCI/SSE2 supported 3 1 4.2 NVIDIA 610M +NVIDIA Corporation GeForce 7000M / nForce 610M/PCI/SSE2/3DNOW! supported 3 1 4.2 NVIDIA 610M +NVIDIA Corporation GeForce 7025 / NVIDIA nForce 630a/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 7000 +NVIDIA Corporation GeForce 7025 / NVIDIA nForce 630a/PCI/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 7000 +NVIDIA Corporation GeForce 7025 / nForce 630a/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 7000 +NVIDIA Corporation GeForce 7025 / nForce 630a/PCI/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 7000 +NVIDIA Corporation GeForce 7025 / nForce 630a/integrated/SSE2 supported 1 1 2.1 NVIDIA GeForce 7000 +NVIDIA Corporation GeForce 7025 / nForce 630a/integrated/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 7000 +NVIDIA Corporation GeForce 7050 / NVIDIA nForce 610i/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 7000 +NVIDIA Corporation GeForce 7050 / NVIDIA nForce 620i/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 7000 +NVIDIA Corporation GeForce 7050 / NVIDIA nForce 630i/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 7000 +NVIDIA Corporation GeForce 7050 / nForce 610i/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 7000 +NVIDIA Corporation GeForce 7050 / nForce 610i/integrated/SSE2 supported 1 1 2.1 NVIDIA GeForce 7000 +NVIDIA Corporation GeForce 7050 / nForce 620i/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 7000 +NVIDIA Corporation GeForce 7050 / nForce 620i/integrated/SSE2 supported 1 1 2.1 NVIDIA GeForce 7000 +NVIDIA Corporation GeForce 7050 / nForce 630i/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 7000 +NVIDIA Corporation GeForce 7050 / nForce 630i/integrated/SSE2 supported 1 1 2.1 NVIDIA GeForce 7000 +NVIDIA Corporation GeForce 7050 PV / NVIDIA nForce 630a/PCI/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 7000 +NVIDIA Corporation GeForce 7050 PV / nForce 630a/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 7000 +NVIDIA Corporation GeForce 7050 PV / nForce 630a/PCI/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 7000 +NVIDIA Corporation GeForce 7050 PV / nForce 630a/integrated/SSE2 supported 1 1 2.1 NVIDIA GeForce 7000 +NVIDIA Corporation GeForce 7050 PV / nForce 630a/integrated/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 7000 +NVIDIA Corporation GeForce 7100 / NVIDIA nForce 620i/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 7100 +NVIDIA Corporation GeForce 7100 / NVIDIA nForce 630i/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 7100 +NVIDIA Corporation GeForce 7100 / nForce 630i/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 7100 +NVIDIA Corporation GeForce 7100 / nForce 630i/integrated/SSE2 supported 1 1 2.1 NVIDIA GeForce 7100 +NVIDIA Corporation GeForce 7100 GS/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 7100 +NVIDIA Corporation GeForce 7100 GS/PCI/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 7100 +NVIDIA Corporation GeForce 7100 GS/PCIe/SSE2 supported 1 1 2.1 NVIDIA GeForce 7100 +NVIDIA Corporation GeForce 7100 GS/PCIe/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 7100 +NVIDIA Corporation GeForce 710A/PCIe/SSE2 supported 1 1 2.1 NVIDIA GeForce 7100 +NVIDIA Corporation GeForce 710M/PCIe/SSE2 supported 3 0 4.2 NVIDIA 710M +NVIDIA Corporation GeForce 7150 / nForce 630i/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 7100 +NVIDIA Corporation GeForce 7150M / nForce 630M/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 7100 +NVIDIA Corporation GeForce 7150M / nForce 630M/PCI/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 7100 +NVIDIA Corporation GeForce 7150M / nForce 630M/integrated/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 7100 +NVIDIA Corporation GeForce 7300 GS/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 7300 +NVIDIA Corporation GeForce 7300 GS/PCI/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 7300 +NVIDIA Corporation GeForce 7300 GS/PCIe/SSE2 supported 1 1 2.1 NVIDIA GeForce 7300 +NVIDIA Corporation GeForce 7300 GS/PCIe/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 7300 +NVIDIA Corporation GeForce 7300 GT/AGP/SSE2 supported 1 1 2.1 NVIDIA GeForce 7300 +NVIDIA Corporation GeForce 7300 GT/AGP/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 7300 +NVIDIA Corporation GeForce 7300 GT/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 7300 +NVIDIA Corporation GeForce 7300 GT/PCI/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 7300 +NVIDIA Corporation GeForce 7300 GT/PCIe/SSE2 supported 1 1 2.1 NVIDIA GeForce 7300 +NVIDIA Corporation GeForce 7300 GT/PCIe/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 7300 +NVIDIA Corporation GeForce 7300 LE/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 7300 +NVIDIA Corporation GeForce 7300 LE/PCI/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 7300 +NVIDIA Corporation GeForce 7300 LE/PCIe/SSE2 supported 1 1 2.1 NVIDIA GeForce 7300 +NVIDIA Corporation GeForce 7300 LE/PCIe/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 7300 +NVIDIA Corporation GeForce 7300 SE/7200 GS/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 7300 +NVIDIA Corporation GeForce 7300 SE/7200 GS/PCI/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 7300 +NVIDIA Corporation GeForce 7300 SE/7200 GS/PCIe/SSE2 supported 1 1 2.1 NVIDIA GeForce 7300 +NVIDIA Corporation GeForce 7300 SE/7200 GS/PCIe/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 7300 +NVIDIA Corporation GeForce 7300 SE/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 7300 +NVIDIA Corporation GeForce 7300 SE/PCI/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 7300 +NVIDIA Corporation GeForce 7300 SE/PCIe/SSE2 supported 1 1 2.1 NVIDIA GeForce 7300 +NVIDIA Corporation GeForce 7350 LE/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 7300 +NVIDIA Corporation GeForce 7350 LE/PCIe/SSE2 supported 1 1 2.1 NVIDIA GeForce 7300 +NVIDIA Corporation GeForce 7350 LE/PCIe/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 7300 +NVIDIA Corporation GeForce 7500 LE/PCI/SSE2 supported 2 1 2.1 NVIDIA GeForce 7500 +NVIDIA Corporation GeForce 7500 LE/PCI/SSE2/3DNOW! supported 2 1 2.1 NVIDIA GeForce 7500 +NVIDIA Corporation GeForce 7500 LE/PCIe/SSE2 supported 2 1 2.1 NVIDIA GeForce 7500 +NVIDIA Corporation GeForce 7500 LE/PCIe/SSE2/3DNOW! supported 2 1 2.1 NVIDIA GeForce 7500 +NVIDIA Corporation GeForce 7600 GS/AGP/SSE2 supported 2 1 2.1 NVIDIA GeForce 7600 +NVIDIA Corporation GeForce 7600 GS/AGP/SSE2/3DNOW! supported 2 1 2.1 NVIDIA GeForce 7600 +NVIDIA Corporation GeForce 7600 GS/PCI/SSE2 supported 2 1 2.1 NVIDIA GeForce 7600 +NVIDIA Corporation GeForce 7600 GS/PCI/SSE2/3DNOW! supported 2 1 2.1 NVIDIA GeForce 7600 +NVIDIA Corporation GeForce 7600 GS/PCIe/SSE2 supported 2 1 2.1 NVIDIA GeForce 7600 +NVIDIA Corporation GeForce 7600 GS/PCIe/SSE2/3DNOW! supported 2 1 2.1 NVIDIA GeForce 7600 +NVIDIA Corporation GeForce 7600 GT/AGP/SSE2 supported 2 1 2.1 NVIDIA GeForce 7600 +NVIDIA Corporation GeForce 7600 GT/AGP/SSE2/3DNOW! supported 2 1 2.1 NVIDIA GeForce 7600 +NVIDIA Corporation GeForce 7600 GT/PCI/SSE2 supported 2 1 2.1 NVIDIA GeForce 7600 +NVIDIA Corporation GeForce 7600 GT/PCI/SSE2/3DNOW! supported 2 1 2.1 NVIDIA GeForce 7600 +NVIDIA Corporation GeForce 7600 GT/PCIe/SSE2 supported 2 1 2.1 NVIDIA GeForce 7600 +NVIDIA Corporation GeForce 7600 GT/PCIe/SSE2/3DNOW! supported 2 1 2.1 NVIDIA GeForce 7600 +NVIDIA Corporation GeForce 7600 LE/PCIe/SSE2 supported 2 1 2.1 NVIDIA GeForce 7600 +NVIDIA Corporation GeForce 7650 GS/AGP/SSE2 supported 2 1 2.1 NVIDIA GeForce 7600 +NVIDIA Corporation GeForce 7650 GS/PCI/SSE2 supported 2 1 2.1 NVIDIA GeForce 7600 +NVIDIA Corporation GeForce 7650 GS/PCI/SSE2/3DNOW! supported 2 1 2.1 NVIDIA GeForce 7600 +NVIDIA Corporation GeForce 7650 GS/PCIe/SSE2 supported 2 1 2.1 NVIDIA GeForce 7600 +NVIDIA Corporation GeForce 7800 GS/AGP/SSE2 supported 2 1 2.1 NVIDIA GeForce 7800 +NVIDIA Corporation GeForce 7800 GS/AGP/SSE2/3DNOW! supported 2 1 2.1 NVIDIA GeForce 7800 +NVIDIA Corporation GeForce 7800 GS/PCI/SSE2/3DNOW! supported 2 1 2.1 NVIDIA GeForce 7800 +NVIDIA Corporation GeForce 7800 GT/PCI/SSE2 supported 2 1 2.1 NVIDIA GeForce 7800 +NVIDIA Corporation GeForce 7800 GT/PCIe/SSE2 supported 2 1 2.1 NVIDIA GeForce 7800 +NVIDIA Corporation GeForce 7800 GT/PCIe/SSE2/3DNOW! supported 2 1 2.1 NVIDIA GeForce 7800 +NVIDIA Corporation GeForce 7800 GTX/PCI/SSE2 supported 2 1 2.1 NVIDIA GeForce 7800 +NVIDIA Corporation GeForce 7800 GTX/PCIe/SSE2 supported 2 1 2.1 NVIDIA GeForce 7800 +NVIDIA Corporation GeForce 7800 GTX/PCIe/SSE2/3DNOW! supported 2 1 2.1 NVIDIA GeForce 7800 +NVIDIA Corporation GeForce 7900 GS/AGP/SSE2 supported 3 1 2.1 NVIDIA GeForce 7900 +NVIDIA Corporation GeForce 7900 GS/AGP/SSE2/3DNOW! supported 3 1 2.1 NVIDIA GeForce 7900 +NVIDIA Corporation GeForce 7900 GS/PCI/SSE2 supported 3 1 2.1 NVIDIA GeForce 7900 +NVIDIA Corporation GeForce 7900 GS/PCI/SSE2/3DNOW! supported 3 1 2.1 NVIDIA GeForce 7900 +NVIDIA Corporation GeForce 7900 GS/PCIe/SSE2 supported 3 1 2.1 NVIDIA GeForce 7900 +NVIDIA Corporation GeForce 7900 GS/PCIe/SSE2/3DNOW! supported 3 1 2.1 NVIDIA GeForce 7900 +NVIDIA Corporation GeForce 7900 GT/GTO/PCI/SSE2/3DNOW! supported 3 1 2.1 NVIDIA GeForce 7900 +NVIDIA Corporation GeForce 7900 GT/GTO/PCIe/SSE2 supported 3 1 2.1 NVIDIA GeForce 7900 +NVIDIA Corporation GeForce 7900 GT/GTO/PCIe/SSE2/3DNOW! supported 3 1 2.1 NVIDIA GeForce 7900 +NVIDIA Corporation GeForce 7900 GT/PCI/SSE2 supported 3 1 2.1 NVIDIA GeForce 7900 +NVIDIA Corporation GeForce 7900 GTX/PCI/SSE2 supported 3 1 2.1 NVIDIA GeForce 7900 +NVIDIA Corporation GeForce 7900 GTX/PCI/SSE2/3DNOW! supported 3 1 2.1 NVIDIA GeForce 7900 +NVIDIA Corporation GeForce 7900 GTX/PCIe/SSE2 supported 3 1 2.1 NVIDIA GeForce 7900 +NVIDIA Corporation GeForce 7900 GTX/PCIe/SSE2/3DNOW! supported 3 1 2.1 NVIDIA GeForce 7900 +NVIDIA Corporation GeForce 7950 GT/AGP/SSE2 supported 3 1 2.1 NVIDIA GeForce 7900 +NVIDIA Corporation GeForce 7950 GT/AGP/SSE2/3DNOW! supported 3 1 2.1 NVIDIA GeForce 7900 +NVIDIA Corporation GeForce 7950 GT/PCI/SSE2 supported 3 1 2.1 NVIDIA GeForce 7900 +NVIDIA Corporation GeForce 7950 GT/PCI/SSE2/3DNOW! supported 3 1 2.1 NVIDIA GeForce 7900 +NVIDIA Corporation GeForce 7950 GT/PCIe/SSE2 supported 3 1 2.1 NVIDIA GeForce 7900 +NVIDIA Corporation GeForce 7950 GT/PCIe/SSE2/3DNOW! supported 3 1 2.1 NVIDIA GeForce 7900 +NVIDIA Corporation GeForce 7950 GX2/PCI/SSE2 supported 3 1 2.1 NVIDIA GeForce 7900 +NVIDIA Corporation GeForce 7950 GX2/PCIe/SSE2 supported 3 1 2.1 NVIDIA GeForce 7900 +NVIDIA Corporation GeForce 7950 GX2/PCIe/SSE2/3DNOW! supported 3 1 2.1 NVIDIA GeForce 7900 +NVIDIA Corporation GeForce 8100 / nForce 720a/PCI/SSE2 supported 1 0 3.3 NVIDIA GeForce 8100 +NVIDIA Corporation GeForce 8100 / nForce 720a/PCI/SSE2/3DNOW! supported 1 0 3.3 NVIDIA GeForce 8100 +NVIDIA Corporation GeForce 8100 / nForce 720a/integrated/SSE2 supported 1 0 3.3 NVIDIA GeForce 8100 +NVIDIA Corporation GeForce 8100 / nForce 720a/integrated/SSE2/3DNOW! supported 1 0 3.3 NVIDIA GeForce 8100 +NVIDIA Corporation GeForce 8200/PCI/SSE2 supported 1 0 3.3 NVIDIA GeForce 8200 +NVIDIA Corporation GeForce 8200/PCI/SSE2/3DNOW! supported 1 0 3.3 NVIDIA GeForce 8200 +NVIDIA Corporation GeForce 8200/integrated/SSE2 supported 1 0 3.3 NVIDIA GeForce 8200 +NVIDIA Corporation GeForce 8200/integrated/SSE2/3DNOW! supported 1 0 3.3 NVIDIA GeForce 8200 +NVIDIA Corporation GeForce 8200M G/PCI/SSE2 supported 1 0 3.3 NVIDIA GeForce 8200M +NVIDIA Corporation GeForce 8200M G/PCI/SSE2/3DNOW! supported 1 0 3.3 NVIDIA GeForce 8200M +NVIDIA Corporation GeForce 8200M G/integrated/SSE2 supported 1 0 3.3 NVIDIA GeForce 8200M +NVIDIA Corporation GeForce 8200M G/integrated/SSE2/3DNOW! supported 1 0 3.3 NVIDIA GeForce 8200M +NVIDIA Corporation GeForce 8200M/PCI/SSE2/3DNOW! supported 1 0 3.3 NVIDIA GeForce 8200M +NVIDIA Corporation GeForce 8300 GS/PCI/SSE2 supported 3 1 3.3 NVIDIA GeForce 8300 +NVIDIA Corporation GeForce 8300 GS/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 8300 +NVIDIA Corporation GeForce 8300 GS/PCIe/SSE2 supported 3 1 3.3 NVIDIA GeForce 8300 +NVIDIA Corporation GeForce 8300 GS/PCIe/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 8300 +NVIDIA Corporation GeForce 8300/PCI/SSE2 supported 3 1 3.3 NVIDIA GeForce 8300 +NVIDIA Corporation GeForce 8300/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 8300 +NVIDIA Corporation GeForce 8300/integrated/SSE2 supported 3 1 3.3 NVIDIA GeForce 8300 +NVIDIA Corporation GeForce 8300/integrated/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 8300 +NVIDIA Corporation GeForce 8400 GS/PCI/SSE2 supported 2 1 3.3 NVIDIA GeForce 8400 +NVIDIA Corporation GeForce 8400 GS/PCI/SSE2/3DNOW! supported 2 1 3.3 NVIDIA GeForce 8400 +NVIDIA Corporation GeForce 8400 GS/PCIe/SSE2 supported 2 1 3.3 NVIDIA GeForce 8400 +NVIDIA Corporation GeForce 8400 GS/PCIe/SSE2/3DNOW! supported 2 1 3.3 NVIDIA GeForce 8400 +NVIDIA Corporation GeForce 8400 SE/PCI/SSE2 supported 2 1 3.3 NVIDIA GeForce 8400 +NVIDIA Corporation GeForce 8400 SE/PCIe/SSE2 supported 2 1 3.3 NVIDIA GeForce 8400 +NVIDIA Corporation GeForce 8400/PCI/SSE2 supported 2 1 3.3 NVIDIA GeForce 8400 +NVIDIA Corporation GeForce 8400/PCI/SSE2/3DNOW! supported 2 1 3.3 NVIDIA GeForce 8400 +NVIDIA Corporation GeForce 8400/PCIe/SSE2 supported 2 1 3.3 NVIDIA GeForce 8400 +NVIDIA Corporation GeForce 8400/PCIe/SSE2/3DNOW! supported 2 1 3.3 NVIDIA GeForce 8400 +NVIDIA Corporation GeForce 8400GS/PCI/SSE2 supported 2 1 3.3 NVIDIA GeForce 8400 +NVIDIA Corporation GeForce 8400GS/PCI/SSE2/3DNOW! supported 2 1 3.3 NVIDIA GeForce 8400 +NVIDIA Corporation GeForce 8400GS/PCIe/SSE2 supported 2 1 3.3 NVIDIA GeForce 8400 +NVIDIA Corporation GeForce 8400GS/PCIe/SSE2/3DNOW! supported 2 1 3.3 NVIDIA GeForce 8400 +NVIDIA Corporation GeForce 8400M G/PCI/SSE2 supported 1 1 3.3 NVIDIA GeForce 8400M +NVIDIA Corporation GeForce 8400M G/PCI/SSE2/3DNOW! supported 1 1 3.3 NVIDIA GeForce 8400M +NVIDIA Corporation GeForce 8400M G/PCIe/SSE2 supported 1 1 3.3 NVIDIA GeForce 8400M +NVIDIA Corporation GeForce 8400M G/PCIe/SSE2/3DNOW! supported 1 1 3.3 NVIDIA GeForce 8400M +NVIDIA Corporation GeForce 8400M GS/PCI/SSE2 supported 1 1 3.3 NVIDIA GeForce 8400M +NVIDIA Corporation GeForce 8400M GS/PCI/SSE2/3DNOW! supported 1 1 3.3 NVIDIA GeForce 8400M +NVIDIA Corporation GeForce 8400M GS/PCIe/SSE2 supported 1 1 3.3 NVIDIA GeForce 8400M +NVIDIA Corporation GeForce 8400M GS/PCIe/SSE2/3DNOW! supported 1 1 3.3 NVIDIA GeForce 8400M +NVIDIA Corporation GeForce 8400M GT/PCI/SSE2 supported 1 1 3.3 NVIDIA GeForce 8400M +NVIDIA Corporation GeForce 8400M GT/PCIe/SSE2 supported 1 1 3.3 NVIDIA GeForce 8400M +NVIDIA Corporation GeForce 8500 GT/PCI/SSE2 supported 2 1 3.3 NVIDIA GeForce 8500 +NVIDIA Corporation GeForce 8500 GT/PCI/SSE2/3DNOW! supported 2 1 3.3 NVIDIA GeForce 8500 +NVIDIA Corporation GeForce 8500 GT/PCIe/SSE2 supported 2 1 3.3 NVIDIA GeForce 8500 +NVIDIA Corporation GeForce 8500 GT/PCIe/SSE2/3DNOW! supported 2 1 3.3 NVIDIA GeForce 8500 +NVIDIA Corporation GeForce 8600 GS/PCI/SSE2 supported 3 1 3.3 NVIDIA GeForce 8600 +NVIDIA Corporation GeForce 8600 GS/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 8600 +NVIDIA Corporation GeForce 8600 GS/PCIe/SSE2 supported 3 1 3.3 NVIDIA GeForce 8600 +NVIDIA Corporation GeForce 8600 GS/PCIe/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 8600 +NVIDIA Corporation GeForce 8600 GT/PCI/SSE2 supported 3 1 3.3 NVIDIA GeForce 8600 +NVIDIA Corporation GeForce 8600 GT/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 8600 +NVIDIA Corporation GeForce 8600 GT/PCIe/SSE2 supported 3 1 3.3 NVIDIA GeForce 8600 +NVIDIA Corporation GeForce 8600 GT/PCIe/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 8600 +NVIDIA Corporation GeForce 8600 GTS/PCI/SSE2 supported 3 1 3.3 NVIDIA GeForce 8600 +NVIDIA Corporation GeForce 8600 GTS/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 8600 +NVIDIA Corporation GeForce 8600 GTS/PCIe/SSE2 supported 3 1 3.3 NVIDIA GeForce 8600 +NVIDIA Corporation GeForce 8600 GTS/PCIe/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 8600 +NVIDIA Corporation GeForce 8600GS/PCI/SSE2 supported 3 1 3.3 NVIDIA GeForce 8600 +NVIDIA Corporation GeForce 8600GS/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 8600 +NVIDIA Corporation GeForce 8600M GS/PCI/SSE2 supported 2 1 3.3 NVIDIA GeForce 8600M +NVIDIA Corporation GeForce 8600M GS/PCI/SSE2/3DNOW! supported 2 1 3.3 NVIDIA GeForce 8600M +NVIDIA Corporation GeForce 8600M GS/PCIe/SSE2 supported 2 1 3.3 NVIDIA GeForce 8600M +NVIDIA Corporation GeForce 8600M GS/PCIe/SSE2/3DNOW! supported 2 1 3.3 NVIDIA GeForce 8600M +NVIDIA Corporation GeForce 8600M GT/PCI/SSE2 supported 2 1 3.3 NVIDIA GeForce 8600M +NVIDIA Corporation GeForce 8600M GT/PCI/SSE2/3DNOW! supported 2 1 3.3 NVIDIA GeForce 8600M +NVIDIA Corporation GeForce 8600M GT/PCIe/SSE2 supported 2 1 3.3 NVIDIA GeForce 8600M +NVIDIA Corporation GeForce 8600M GT/PCIe/SSE2/3DNOW! supported 2 1 3.3 NVIDIA GeForce 8600M +NVIDIA Corporation GeForce 8700M GT/PCI/SSE2 supported 2 1 3.3 NVIDIA GeForce 8700M +NVIDIA Corporation GeForce 8700M GT/PCIe/SSE2 supported 2 1 3.3 NVIDIA GeForce 8700M +NVIDIA Corporation GeForce 8800 GS/PCI/SSE2 supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation GeForce 8800 GS/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation GeForce 8800 GS/PCIe/SSE2 supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation GeForce 8800 GS/PCIe/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation GeForce 8800 GT/PCI/SSE2 supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation GeForce 8800 GT/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation GeForce 8800 GT/PCIe/SSE2 supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation GeForce 8800 GT/PCIe/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation GeForce 8800 GTS 512/PCI/SSE2 supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation GeForce 8800 GTS 512/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation GeForce 8800 GTS 512/PCIe/SSE2 supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation GeForce 8800 GTS 512/PCIe/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation GeForce 8800 GTS/PCI/SSE2 supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation GeForce 8800 GTS/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation GeForce 8800 GTS/PCIe/SSE2 supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation GeForce 8800 GTS/PCIe/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation GeForce 8800 GTX/PCI/SSE2 supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation GeForce 8800 GTX/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation GeForce 8800 GTX/PCIe/SSE2 supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation GeForce 8800 GTX/PCIe/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation GeForce 8800 Ultra/PCI/SSE2 supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation GeForce 8800 Ultra/PCIe/SSE2 supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation GeForce 8800 Ultra/PCIe/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation GeForce 8800M GTS/PCI/SSE2 supported 2 1 3.3 NVIDIA GeForce 8800M +NVIDIA Corporation GeForce 8800M GTS/PCIe/SSE2 supported 2 1 3.3 NVIDIA GeForce 8800M +NVIDIA Corporation GeForce 8800M GTX/PCI/SSE2 supported 2 1 3.3 NVIDIA GeForce 8800M +NVIDIA Corporation GeForce 8800M GTX/PCIe/SSE2 supported 2 1 3.3 NVIDIA GeForce 8800M +NVIDIA Corporation GeForce 9100/PCI/SSE2 supported 0 0 3.3 NVIDIA GeForce 9100 +NVIDIA Corporation GeForce 9100/PCI/SSE2/3DNOW! supported 0 0 3.3 NVIDIA GeForce 9100 +NVIDIA Corporation GeForce 9100/integrated/SSE2 supported 0 0 3.3 NVIDIA GeForce 9100 +NVIDIA Corporation GeForce 9100/integrated/SSE2/3DNOW! supported 0 0 3.3 NVIDIA GeForce 9100 +NVIDIA Corporation GeForce 9100M G/PCI/SSE2 supported 0 0 3.3 NVIDIA GeForce 9100M +NVIDIA Corporation GeForce 9100M G/PCI/SSE2/3DNOW! supported 0 0 3.3 NVIDIA GeForce 9100M +NVIDIA Corporation GeForce 9100M G/integrated/SSE2 supported 0 0 3.3 NVIDIA GeForce 9100M +NVIDIA Corporation GeForce 9100M G/integrated/SSE2/3DNOW! supported 0 0 3.3 NVIDIA GeForce 9100M +NVIDIA Corporation GeForce 9200/PCI/SSE2 supported 1 0 3.3 NVIDIA GeForce 9200 +NVIDIA Corporation GeForce 9200/PCI/SSE2/3DNOW! supported 1 0 3.3 NVIDIA GeForce 9200 +NVIDIA Corporation GeForce 9200/integrated/SSE2 supported 1 0 3.3 NVIDIA GeForce 9200 +NVIDIA Corporation GeForce 9200/integrated/SSE2/3DNOW! supported 1 0 3.3 NVIDIA GeForce 9200 +NVIDIA Corporation GeForce 9200M GE/PCI/SSE2 supported 1 0 3.3 NVIDIA GeForce 9200M +NVIDIA Corporation GeForce 9200M GE/PCIe/SSE2 supported 1 0 3.3 NVIDIA GeForce 9200M +NVIDIA Corporation GeForce 9200M GS/PCI/SSE2 supported 1 0 3.3 NVIDIA GeForce 9200M +NVIDIA Corporation GeForce 9200M GS/PCIe/SSE2 supported 1 0 3.3 NVIDIA GeForce 9200M +NVIDIA Corporation GeForce 9300 / nForce 730i/integrated/SSE2 supported 1 1 3.3 NVIDIA GeForce 9300 +NVIDIA Corporation GeForce 9300 GE/PCI/SSE2 supported 1 1 3.3 NVIDIA GeForce 9300 +NVIDIA Corporation GeForce 9300 GE/PCI/SSE2/3DNOW! supported 1 1 3.3 NVIDIA GeForce 9300 +NVIDIA Corporation GeForce 9300 GE/PCIe/SSE2 supported 1 1 3.3 NVIDIA GeForce 9300 +NVIDIA Corporation GeForce 9300 GE/PCIe/SSE2/3DNOW! supported 1 1 3.3 NVIDIA GeForce 9300 +NVIDIA Corporation GeForce 9300 GS/PCI/SSE2 supported 1 1 3.3 NVIDIA GeForce 9300 +NVIDIA Corporation GeForce 9300 GS/PCI/SSE2/3DNOW! supported 1 1 3.3 NVIDIA GeForce 9300 +NVIDIA Corporation GeForce 9300 GS/PCIe/SSE2 supported 1 1 3.3 NVIDIA GeForce 9300 +NVIDIA Corporation GeForce 9300 GS/PCIe/SSE2/3DNOW! supported 1 1 3.3 NVIDIA GeForce 9300 +NVIDIA Corporation GeForce 9300 SE/PCIe/SSE2 supported 1 1 3.3 NVIDIA GeForce 9300 +NVIDIA Corporation GeForce 9300/PCI/SSE2 supported 1 1 3.3 NVIDIA GeForce 9300 +NVIDIA Corporation GeForce 9300/integrated/SSE2 supported 1 1 3.3 NVIDIA GeForce 9300 +NVIDIA Corporation GeForce 9300M G/PCI/SSE2 supported 1 1 3.3 NVIDIA GeForce 9300M +NVIDIA Corporation GeForce 9300M G/PCIe/SSE2 supported 1 1 3.3 NVIDIA GeForce 9300M +NVIDIA Corporation GeForce 9300M G/PCIe/SSE2/3DNOW! supported 1 1 3.3 NVIDIA GeForce 9300M +NVIDIA Corporation GeForce 9300M GS/PCI/SSE2 supported 1 1 3.3 NVIDIA GeForce 9300M +NVIDIA Corporation GeForce 9300M GS/PCI/SSE2/3DNOW! supported 1 1 3.3 NVIDIA GeForce 9300M +NVIDIA Corporation GeForce 9300M GS/PCIe/SSE2 supported 1 1 3.3 NVIDIA GeForce 9300M +NVIDIA Corporation GeForce 9400 GT/PCI/SSE2 supported 3 1 3.3 NVIDIA GeForce 9400 +NVIDIA Corporation GeForce 9400 GT/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 9400 +NVIDIA Corporation GeForce 9400 GT/PCIe/SSE2 supported 3 1 3.3 NVIDIA GeForce 9400 +NVIDIA Corporation GeForce 9400 GT/PCIe/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 9400 +NVIDIA Corporation GeForce 9400/PCI/SSE2 supported 3 1 3.3 NVIDIA GeForce 9400 +NVIDIA Corporation GeForce 9400/integrated/SSE2 supported 3 1 3.3 NVIDIA GeForce 9400 +NVIDIA Corporation GeForce 9400M G/PCI/SSE2 supported 2 1 3.3 NVIDIA GeForce 9400M +NVIDIA Corporation GeForce 9400M G/integrated/SSE2 supported 2 1 3.3 NVIDIA GeForce 9400M +NVIDIA Corporation GeForce 9400M/PCI/SSE2 supported 2 1 3.3 NVIDIA GeForce 9400M +NVIDIA Corporation GeForce 9400M/integrated/SSE2 supported 2 1 3.3 NVIDIA GeForce 9400M +NVIDIA Corporation GeForce 9500 GS/PCI/SSE2 supported 3 1 3.3 NVIDIA GeForce 9500 +NVIDIA Corporation GeForce 9500 GS/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 9500 +NVIDIA Corporation GeForce 9500 GS/PCIe/SSE2 supported 3 1 3.3 NVIDIA GeForce 9500 +NVIDIA Corporation GeForce 9500 GS/PCIe/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 9500 +NVIDIA Corporation GeForce 9500 GT/PCI/SSE2 supported 3 1 3.3 NVIDIA GeForce 9500 +NVIDIA Corporation GeForce 9500 GT/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 9500 +NVIDIA Corporation GeForce 9500 GT/PCIe/SSE2 supported 3 1 3.3 NVIDIA GeForce 9500 +NVIDIA Corporation GeForce 9500 GT/PCIe/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 9500 +NVIDIA Corporation GeForce 9500M GS/PCI/SSE2 supported 1 1 3.3 NVIDIA GeForce 9500M +NVIDIA Corporation GeForce 9500M GS/PCI/SSE2/3DNOW! supported 1 1 3.3 NVIDIA GeForce 9500M +NVIDIA Corporation GeForce 9500M GS/PCIe/SSE2 supported 1 1 3.3 NVIDIA GeForce 9500M +NVIDIA Corporation GeForce 9600 GS/PCI/SSE2 supported 3 1 3.3 NVIDIA GeForce 9600 +NVIDIA Corporation GeForce 9600 GS/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 9600 +NVIDIA Corporation GeForce 9600 GS/PCIe/SSE2 supported 3 1 3.3 NVIDIA GeForce 9600 +NVIDIA Corporation GeForce 9600 GS/PCIe/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 9600 +NVIDIA Corporation GeForce 9600 GSO 512/PCI/SSE2 supported 3 1 3.3 NVIDIA GeForce 9600 +NVIDIA Corporation GeForce 9600 GSO 512/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 9600 +NVIDIA Corporation GeForce 9600 GSO 512/PCIe/SSE2 supported 3 1 3.3 NVIDIA GeForce 9600 +NVIDIA Corporation GeForce 9600 GSO 512/PCIe/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 9600 +NVIDIA Corporation GeForce 9600 GSO/PCI/SSE2 supported 3 1 3.3 NVIDIA GeForce 9600 +NVIDIA Corporation GeForce 9600 GSO/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 9600 +NVIDIA Corporation GeForce 9600 GSO/PCIe/SSE2 supported 3 1 3.3 NVIDIA GeForce 9600 +NVIDIA Corporation GeForce 9600 GSO/PCIe/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 9600 +NVIDIA Corporation GeForce 9600 GT/PCI/SSE2 supported 3 1 3.3 NVIDIA GeForce 9600 +NVIDIA Corporation GeForce 9600 GT/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 9600 +NVIDIA Corporation GeForce 9600 GT/PCIe/SSE2 supported 3 1 3.3 NVIDIA GeForce 9600 +NVIDIA Corporation GeForce 9600 GT/PCIe/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 9600 +NVIDIA Corporation GeForce 9600M GS/PCI/SSE2 supported 2 1 3.3 NVIDIA GeForce 9600M +NVIDIA Corporation GeForce 9600M GS/PCI/SSE2/3DNOW! supported 2 1 3.3 NVIDIA GeForce 9600M +NVIDIA Corporation GeForce 9600M GS/PCIe/SSE2 supported 2 1 3.3 NVIDIA GeForce 9600M +NVIDIA Corporation GeForce 9600M GT/PCI/SSE2 supported 2 1 3.3 NVIDIA GeForce 9600M +NVIDIA Corporation GeForce 9600M GT/PCI/SSE2/3DNOW! supported 2 1 3.3 NVIDIA GeForce 9600M +NVIDIA Corporation GeForce 9600M GT/PCIe/SSE2 supported 2 1 3.3 NVIDIA GeForce 9600M +NVIDIA Corporation GeForce 9600M GT/PCIe/SSE2/3DNOW! supported 2 1 3.3 NVIDIA GeForce 9600M +NVIDIA Corporation GeForce 9650M GS/PCIe/SSE2 supported 3 1 3.3 NVIDIA GeForce 9600 +NVIDIA Corporation GeForce 9650M GT/PCI/SSE2 supported 3 1 3.3 NVIDIA GeForce 9600 +NVIDIA Corporation GeForce 9650M GT/PCIe/SSE2 supported 3 1 3.3 NVIDIA GeForce 9600 +NVIDIA Corporation GeForce 9700M GT/PCI/SSE2 supported 0 1 3.3 NVIDIA GeForce 9700M +NVIDIA Corporation GeForce 9700M GT/PCIe/SSE2 supported 0 1 3.3 NVIDIA GeForce 9700M +NVIDIA Corporation GeForce 9700M GTS/PCI/SSE2 supported 0 1 3.3 NVIDIA GeForce 9700M +NVIDIA Corporation GeForce 9700M GTS/PCIe/SSE2 supported 0 1 3.3 NVIDIA GeForce 9700M +NVIDIA Corporation GeForce 9800 GT/PCI/SSE2 supported 3 1 3.3 NVIDIA GeForce 9800 +NVIDIA Corporation GeForce 9800 GT/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 9800 +NVIDIA Corporation GeForce 9800 GT/PCIe/SSE2 supported 3 1 3.3 NVIDIA GeForce 9800 +NVIDIA Corporation GeForce 9800 GT/PCIe/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 9800 +NVIDIA Corporation GeForce 9800 GTX+/PCI/SSE2 supported 3 1 3.3 NVIDIA GeForce 9800 +NVIDIA Corporation GeForce 9800 GTX+/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 9800 +NVIDIA Corporation GeForce 9800 GTX+/PCIe/SSE2 supported 3 1 3.3 NVIDIA GeForce 9800 +NVIDIA Corporation GeForce 9800 GTX+/PCIe/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 9800 +NVIDIA Corporation GeForce 9800 GTX/9800 GTX+/PCI/SSE2 supported 3 1 3.3 NVIDIA GeForce 9800 +NVIDIA Corporation GeForce 9800 GTX/9800 GTX+/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 9800 +NVIDIA Corporation GeForce 9800 GTX/9800 GTX+/PCIe/SSE2 supported 3 1 3.3 NVIDIA GeForce 9800 +NVIDIA Corporation GeForce 9800 GTX/9800 GTX+/PCIe/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 9800 +NVIDIA Corporation GeForce 9800 GTX/PCI/SSE2 supported 3 1 3.3 NVIDIA GeForce 9800 +NVIDIA Corporation GeForce 9800 GX2/PCIe/SSE2 supported 3 1 3.3 NVIDIA GeForce 9800 +NVIDIA Corporation GeForce 9800 S/PCI/SSE2 supported 3 1 3.3 NVIDIA GeForce 9800 +NVIDIA Corporation GeForce 9800M GS/PCI/SSE2 supported 2 1 3.3 NVIDIA GeForce 9800M +NVIDIA Corporation GeForce 9800M GS/PCIe/SSE2 supported 2 1 3.3 NVIDIA GeForce 9800M +NVIDIA Corporation GeForce 9800M GT/PCI/SSE2 supported 2 1 3.3 NVIDIA GeForce 9800M +NVIDIA Corporation GeForce 9800M GT/PCIe/SSE2 supported 2 1 3.3 NVIDIA GeForce 9800M +NVIDIA Corporation GeForce 9800M GTS/PCI/SSE2 supported 2 1 3.3 NVIDIA GeForce 9800M +NVIDIA Corporation GeForce 9800M GTS/PCIe/SSE2 supported 2 1 3.3 NVIDIA GeForce 9800M +NVIDIA Corporation GeForce 9800M GTX/PCI/SSE2 supported 2 1 3.3 NVIDIA GeForce 9800M +NVIDIA Corporation GeForce 9800M GTX/PCIe/SSE2 supported 2 1 3.3 NVIDIA GeForce 9800M +NVIDIA Corporation GeForce FX 5100/AGP/SSE2 supported 3 0 0 NVIDIA 510 +NVIDIA Corporation GeForce FX 5200 Ultra/AGP/SSE2 supported 0 0 2.1 NVIDIA GeForce FX 5200 +NVIDIA Corporation GeForce FX 5200 Ultra/AGP/SSE2/3DNOW! supported 0 0 2.1 NVIDIA GeForce FX 5200 +NVIDIA Corporation GeForce FX 5200/AGP/SSE/3DNOW! supported 0 0 2.1 NVIDIA GeForce FX 5200 +NVIDIA Corporation GeForce FX 5200/AGP/SSE2 supported 0 0 2.1 NVIDIA GeForce FX 5200 +NVIDIA Corporation GeForce FX 5200/AGP/SSE2/3DNOW! supported 0 0 2.1 NVIDIA GeForce FX 5200 +NVIDIA Corporation GeForce FX 5200/PCI/SSE2 supported 0 0 2.1 NVIDIA GeForce FX 5200 +NVIDIA Corporation GeForce FX 5200/PCI/SSE2/3DNOW! supported 0 0 2.1 NVIDIA GeForce FX 5200 +NVIDIA Corporation GeForce FX 5200LE/AGP/SSE2 supported 0 0 2.1 NVIDIA GeForce FX 5200 +NVIDIA Corporation GeForce FX 5200LE/AGP/SSE2/3DNOW! supported 0 0 2.1 NVIDIA GeForce FX 5200 +NVIDIA Corporation GeForce FX 5200SE/AGP/SSE2 supported 0 0 2.1 NVIDIA GeForce FX 5200 +NVIDIA Corporation GeForce FX 5500/AGP/SSE2 supported 0 1 2.1 NVIDIA GeForce FX 5500 +NVIDIA Corporation GeForce FX 5500/AGP/SSE2/3DNOW! supported 0 1 2.1 NVIDIA GeForce FX 5500 +NVIDIA Corporation GeForce FX 5500/PCI/SSE2 supported 0 1 2.1 NVIDIA GeForce FX 5500 +NVIDIA Corporation GeForce FX 5500/PCI/SSE2/3DNOW! supported 0 1 2.1 NVIDIA GeForce FX 5500 +NVIDIA Corporation GeForce FX 5600/AGP/SSE2 supported 1 1 2.1 NVIDIA GeForce FX 5600 +NVIDIA Corporation GeForce FX 5600XT/AGP/SSE2 supported 1 1 2.1 NVIDIA GeForce FX 5600 +NVIDIA Corporation GeForce FX 5600XT/AGP/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce FX 5600 +NVIDIA Corporation GeForce FX 5600XT/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce FX 5600 +NVIDIA Corporation GeForce FX 5700/AGP/SSE2 supported 0 1 2.1 NVIDIA GeForce FX 5700 +NVIDIA Corporation GeForce FX 5700/AGP/SSE2/3DNOW! supported 0 1 2.1 NVIDIA GeForce FX 5700 +NVIDIA Corporation GeForce FX 5700LE/AGP/SSE2 supported 0 1 2.1 NVIDIA GeForce FX 5700 +NVIDIA Corporation GeForce FX 5700LE/AGP/SSE2/3DNOW! supported 0 1 2.1 NVIDIA GeForce FX 5700 +NVIDIA Corporation GeForce FX 5700LE/PCI/SSE2/3DNOW! supported 0 1 2.1 NVIDIA GeForce FX 5700 +NVIDIA Corporation GeForce FX 5700VE/AGP/SSE2 supported 0 1 2.1 NVIDIA GeForce FX 5700 +NVIDIA Corporation GeForce FX 5700VE/AGP/SSE2/3DNOW! supported 0 1 2.1 NVIDIA GeForce FX 5700 +NVIDIA Corporation GeForce FX 5900 Ultra/AGP/SSE2 supported 1 1 2.1 NVIDIA GeForce FX 5900 +NVIDIA Corporation GeForce FX 5900/AGP/SSE2 supported 1 1 2.1 NVIDIA GeForce FX 5900 +NVIDIA Corporation GeForce FX 5900XT/AGP/SSE2 supported 1 1 2.1 NVIDIA GeForce FX 5900 +NVIDIA Corporation GeForce FX 5900ZT/AGP/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce FX 5900 +NVIDIA Corporation GeForce FX 5950 Ultra/AGP/SSE2 supported 1 1 2.1 NVIDIA GeForce FX 5900 +NVIDIA Corporation GeForce FX 5950 Ultra/AGP/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce FX 5900 +NVIDIA Corporation GeForce FX Go5200 32M/64M/AGP/SSE2 supported 0 0 1.5 NVIDIA GeForce FX Go5200 +NVIDIA Corporation GeForce FX Go5200/AGP/SSE2 supported 0 0 1.5 NVIDIA GeForce FX Go5200 +NVIDIA Corporation GeForce FX Go5200/AGP/SSE2/3DNOW! supported 0 0 1.5 NVIDIA GeForce FX Go5200 +NVIDIA Corporation GeForce FX Go5200/PCI/SSE2 supported 0 0 1.5 NVIDIA GeForce FX Go5200 +NVIDIA Corporation GeForce FX Go5300/AGP/SSE2 supported 0 0 0 NVIDIA GeForce FX Go5300 +NVIDIA Corporation GeForce FX Go53xx Series/AGP/SSE2 supported 0 0 0 NVIDIA GeForce FX Go5300 +NVIDIA Corporation GeForce FX Go5600/AGP/SSE2 supported 0 1 2.1 NVIDIA GeForce FX Go5600 +NVIDIA Corporation GeForce FX Go5650/AGP/SSE2 supported 0 1 2.1 NVIDIA GeForce FX Go5600 +NVIDIA Corporation GeForce FX Go5700/AGP/SSE2 supported 1 1 1.5 NVIDIA GeForce FX Go5700 +NVIDIA Corporation GeForce FX Go5700/AGP/SSE2/3DNOW! supported 1 1 1.5 NVIDIA GeForce FX Go5700 +NVIDIA Corporation GeForce G 103M/PCI/SSE2 supported 1 1 3.3 NVIDIA G 100M +NVIDIA Corporation GeForce G 103M/PCIe/SSE2 supported 1 1 3.3 NVIDIA G 100M +NVIDIA Corporation GeForce G 105M/PCI/SSE2 supported 1 1 3.3 NVIDIA G 100M +NVIDIA Corporation GeForce G 105M/PCIe/SSE2 supported 1 1 3.3 NVIDIA G 100M +NVIDIA Corporation GeForce G 110M/PCI/SSE2 supported 1 1 3.3 NVIDIA G 110M +NVIDIA Corporation GeForce G100/PCI/SSE2 supported 3 1 4.2 NVIDIA G100 +NVIDIA Corporation GeForce G100/PCI/SSE2/3DNOW! supported 3 1 4.2 NVIDIA G100 +NVIDIA Corporation GeForce G100/PCIe/SSE2 supported 3 1 4.2 NVIDIA G100 +NVIDIA Corporation GeForce G100/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA G100 +NVIDIA Corporation GeForce G102M/PCI/SSE2 supported 3 1 4.2 NVIDIA G100 +NVIDIA Corporation GeForce G102M/integrated/SSE2 supported 3 1 4.2 NVIDIA G100 +NVIDIA Corporation GeForce G105M/PCI/SSE2 supported 3 1 4.2 NVIDIA G100 +NVIDIA Corporation GeForce G105M/PCIe/SSE2 supported 3 1 4.2 NVIDIA G100 +NVIDIA Corporation GeForce G200/PCI/SSE2 supported 2 1 3.3 NVIDIA G200 +NVIDIA Corporation GeForce G200/integrated/SSE2 supported 2 1 3.3 NVIDIA G200 +NVIDIA Corporation GeForce G205M/PCI/SSE2 supported 2 1 3.3 NVIDIA G200 +NVIDIA Corporation GeForce G205M/integrated/SSE2 supported 2 1 3.3 NVIDIA G200 +NVIDIA Corporation GeForce G210/PCI/SSE2 supported 3 1 3.3 NVIDIA G210 +NVIDIA Corporation GeForce G210/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA G210 +NVIDIA Corporation GeForce G210/PCIe/SSE2 supported 3 1 3.3 NVIDIA G210 +NVIDIA Corporation GeForce G210/PCIe/SSE2/3DNOW! supported 3 1 3.3 NVIDIA G210 +NVIDIA Corporation GeForce G210M/PCI/SSE2 supported 3 0 3.3 NVIDIA G210M +NVIDIA Corporation GeForce G210M/PCIe/SSE2 supported 3 0 3.3 NVIDIA G210M +NVIDIA Corporation GeForce GT 120/PCI/SSE2 supported 2 0 3.3 NVIDIA GT 120 +NVIDIA Corporation GeForce GT 120/PCI/SSE2/3DNOW! supported 2 0 3.3 NVIDIA GT 120 +NVIDIA Corporation GeForce GT 120/PCIe/SSE2 supported 2 0 3.3 NVIDIA GT 120 +NVIDIA Corporation GeForce GT 120/PCIe/SSE2/3DNOW! supported 2 0 3.3 NVIDIA GT 120 +NVIDIA Corporation GeForce GT 120M/PCI/SSE2 supported 2 0 3.3 NVIDIA GT 120 +NVIDIA Corporation GeForce GT 120M/PCIe/SSE2 supported 2 0 3.3 NVIDIA GT 120 +NVIDIA Corporation GeForce GT 130/PCI/SSE2 supported 2 0 3.3 NVIDIA GT 130 +NVIDIA Corporation GeForce GT 130/PCIe/SSE2 supported 2 0 3.3 NVIDIA GT 130 +NVIDIA Corporation GeForce GT 130/PCIe/SSE2/3DNOW! supported 2 0 3.3 NVIDIA GT 130 +NVIDIA Corporation GeForce GT 130M/PCI/SSE2 supported 3 1 3.3 NVIDIA GT 130M +NVIDIA Corporation GeForce GT 130M/PCIe/SSE2 supported 3 1 3.3 NVIDIA GT 130M +NVIDIA Corporation GeForce GT 140/PCI/SSE2 supported 2 0 3.3 NVIDIA GT 140 +NVIDIA Corporation GeForce GT 140/PCIe/SSE2 supported 2 0 3.3 NVIDIA GT 140 +NVIDIA Corporation GeForce GT 220/PCI/SSE2 supported 2 1 3.3 NVIDIA GT 220 +NVIDIA Corporation GeForce GT 220/PCI/SSE2/3DNOW! supported 2 1 3.3 NVIDIA GT 220 +NVIDIA Corporation GeForce GT 220/PCIe/SSE2 supported 2 1 3.3 NVIDIA GT 220 +NVIDIA Corporation GeForce GT 220/PCIe/SSE2/3DNOW! supported 2 1 3.3 NVIDIA GT 220 +NVIDIA Corporation GeForce GT 220M/PCI/SSE2 supported 3 1 3.3 NVIDIA GT 220M +NVIDIA Corporation GeForce GT 220M/PCIe/SSE2 supported 3 1 3.3 NVIDIA GT 220M +NVIDIA Corporation GeForce GT 230/PCI/SSE2 supported 2 1 3.3 NVIDIA GT 230 +NVIDIA Corporation GeForce GT 230/PCIe/SSE2 supported 2 1 3.3 NVIDIA GT 230 +NVIDIA Corporation GeForce GT 230/PCIe/SSE2/3DNOW! supported 2 1 3.3 NVIDIA GT 230 +NVIDIA Corporation GeForce GT 230M/PCI/SSE2 supported 3 1 3.3 NVIDIA GT 230M +NVIDIA Corporation GeForce GT 230M/PCIe/SSE2 supported 3 1 3.3 NVIDIA GT 230M +NVIDIA Corporation GeForce GT 240/PCI/SSE2 supported 4 1 3.3 NVIDIA GT 240 +NVIDIA Corporation GeForce GT 240/PCI/SSE2/3DNOW! supported 4 1 3.3 NVIDIA GT 240 +NVIDIA Corporation GeForce GT 240/PCIe/SSE2 supported 4 1 3.3 NVIDIA GT 240 +NVIDIA Corporation GeForce GT 240/PCIe/SSE2/3DNOW! supported 4 1 3.3 NVIDIA GT 240 +NVIDIA Corporation GeForce GT 240M LE/PCIe/SSE2 supported 3 1 3.3 NVIDIA GT 240M +NVIDIA Corporation GeForce GT 240M/PCI/SSE2 supported 3 1 3.3 NVIDIA GT 240M +NVIDIA Corporation GeForce GT 240M/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GT 240M +NVIDIA Corporation GeForce GT 240M/PCIe/SSE2 supported 3 1 3.3 NVIDIA GT 240M +NVIDIA Corporation GeForce GT 320/PCI/SSE2 supported 3 0 3.3 NVIDIA GT 320 +NVIDIA Corporation GeForce GT 320/PCI/SSE2/3DNOW! supported 3 0 3.3 NVIDIA GT 320 +NVIDIA Corporation GeForce GT 320/PCIe/SSE2 supported 3 0 3.3 NVIDIA GT 320 +NVIDIA Corporation GeForce GT 320/PCIe/SSE2/3DNOW! supported 3 0 3.3 NVIDIA GT 320 +NVIDIA Corporation GeForce GT 320M/PCI/SSE2 supported 3 0 3.3 NVIDIA GT 320M +NVIDIA Corporation GeForce GT 320M/PCIe/SSE2 supported 3 0 3.3 NVIDIA GT 320M +NVIDIA Corporation GeForce GT 325M/PCI/SSE2 supported 3 0 3.3 NVIDIA GT 320M +NVIDIA Corporation GeForce GT 325M/PCIe/SSE2 supported 3 0 3.3 NVIDIA GT 320M +NVIDIA Corporation GeForce GT 330/PCI/SSE2 supported 3 0 3.3 NVIDIA GT 330 +NVIDIA Corporation GeForce GT 330/PCIe/SSE2 supported 3 0 3.3 NVIDIA GT 330 +NVIDIA Corporation GeForce GT 330/PCIe/SSE2/3DNOW! supported 3 0 3.3 NVIDIA GT 330 +NVIDIA Corporation GeForce GT 330M/PCI/SSE2 supported 3 1 3.3 NVIDIA GT 330M +NVIDIA Corporation GeForce GT 330M/PCIe/SSE2 supported 3 1 3.3 NVIDIA GT 330M +NVIDIA Corporation GeForce GT 335M/PCI/SSE2 supported 3 1 3.3 NVIDIA GT 330M +NVIDIA Corporation GeForce GT 335M/PCIe/SSE2 supported 3 1 3.3 NVIDIA GT 330M +NVIDIA Corporation GeForce GT 340/PCI/SSE2 supported 3 0 0 NVIDIA GT 340 +NVIDIA Corporation GeForce GT 340/PCIe/SSE2 supported 3 0 0 NVIDIA GT 340 +NVIDIA Corporation GeForce GT 415/PCIe/SSE2 NO MATCH +NVIDIA Corporation GeForce GT 415/PCIe/SSE2/3DNOW! NO MATCH +NVIDIA Corporation GeForce GT 415M/PCI/SSE2 supported 3 0 0 NVIDIA 410M +NVIDIA Corporation GeForce GT 415M/PCIe/SSE2 supported 3 0 0 NVIDIA 410M +NVIDIA Corporation GeForce GT 420/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 420 +NVIDIA Corporation GeForce GT 420/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 420 +NVIDIA Corporation GeForce GT 420/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GT 420 +NVIDIA Corporation GeForce GT 420M/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 420M +NVIDIA Corporation GeForce GT 420M/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 420M +NVIDIA Corporation GeForce GT 425M/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 420M +NVIDIA Corporation GeForce GT 425M/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 420M +NVIDIA Corporation GeForce GT 430/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 430 +NVIDIA Corporation GeForce GT 430/PCI/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GT 430 +NVIDIA Corporation GeForce GT 430/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 430 +NVIDIA Corporation GeForce GT 430/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GT 430 +NVIDIA Corporation GeForce GT 435M/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 430M +NVIDIA Corporation GeForce GT 435M/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 430M +NVIDIA Corporation GeForce GT 440/PCI/SSE2 supported 4 0 4.2 NVIDIA GT 440 +NVIDIA Corporation GeForce GT 440/PCI/SSE2/3DNOW! supported 4 0 4.2 NVIDIA GT 440 +NVIDIA Corporation GeForce GT 440/PCIe/SSE2 supported 4 0 4.2 NVIDIA GT 440 +NVIDIA Corporation GeForce GT 440/PCIe/SSE2/3DNOW! supported 4 0 4.2 NVIDIA GT 440 +NVIDIA Corporation GeForce GT 445M/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 440M +NVIDIA Corporation GeForce GT 445M/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 440M +NVIDIA Corporation GeForce GT 520/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 520 +NVIDIA Corporation GeForce GT 520/PCI/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GT 520 +NVIDIA Corporation GeForce GT 520/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 520 +NVIDIA Corporation GeForce GT 520/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GT 520 +NVIDIA Corporation GeForce GT 520M/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 520M +NVIDIA Corporation GeForce GT 520M/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 520M +NVIDIA Corporation GeForce GT 520MX/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 520M +NVIDIA Corporation GeForce GT 520MX/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 520M +NVIDIA Corporation GeForce GT 525M/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 520M +NVIDIA Corporation GeForce GT 525M/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 520M +NVIDIA Corporation GeForce GT 530/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 530 +NVIDIA Corporation GeForce GT 530/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 530 +NVIDIA Corporation GeForce GT 530/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GT 530 +NVIDIA Corporation GeForce GT 540M/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 540M +NVIDIA Corporation GeForce GT 540M/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 540M +NVIDIA Corporation GeForce GT 545/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 540 +NVIDIA Corporation GeForce GT 545/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 540 +NVIDIA Corporation GeForce GT 545/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GT 540 +NVIDIA Corporation GeForce GT 550M/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 550M +NVIDIA Corporation GeForce GT 550M/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 550M +NVIDIA Corporation GeForce GT 555M/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 550M +NVIDIA Corporation GeForce GT 555M/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 550M +NVIDIA Corporation GeForce GT 610/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 610 +NVIDIA Corporation GeForce GT 610/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GT 610 +NVIDIA Corporation GeForce GT 620/PCI/SSE2 supported 3 0 4.2 NVIDIA GT 620 +NVIDIA Corporation GeForce GT 620/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 620 +NVIDIA Corporation GeForce GT 620/PCIe/SSE2/3DNOW! supported 3 0 4.2 NVIDIA GT 620 +NVIDIA Corporation GeForce GT 620M/PCI/SSE2 supported 3 0 4.2 NVIDIA GT 620M +NVIDIA Corporation GeForce GT 620M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 620M +NVIDIA Corporation GeForce GT 625/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 620 +NVIDIA Corporation GeForce GT 625M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 620M +NVIDIA Corporation GeForce GT 630/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 630 +NVIDIA Corporation GeForce GT 630/PCIe/SSE2/3DNOW! supported 3 0 4.2 NVIDIA GT 630 +NVIDIA Corporation GeForce GT 630M/PCI/SSE2 supported 3 0 4.2 NVIDIA GT 630M +NVIDIA Corporation GeForce GT 630M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 630M +NVIDIA Corporation GeForce GT 635M/PCI/SSE2 supported 3 0 4.2 NVIDIA GT 630M +NVIDIA Corporation GeForce GT 635M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 630M +NVIDIA Corporation GeForce GT 640/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 640 +NVIDIA Corporation GeForce GT 640/PCIe/SSE2/3DNOW! supported 3 0 4.2 NVIDIA GT 640 +NVIDIA Corporation GeForce GT 640M LE/PCI/SSE2 supported 3 0 4.2 NVIDIA GT 640M +NVIDIA Corporation GeForce GT 640M LE/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 640M +NVIDIA Corporation GeForce GT 640M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 640M +NVIDIA Corporation GeForce GT 645/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 640 +NVIDIA Corporation GeForce GT 645M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 640M +NVIDIA Corporation GeForce GT 650M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 650M +NVIDIA Corporation GeForce GT 720M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 720M +NVIDIA Corporation GeForce GT 730M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 730M +NVIDIA Corporation GeForce GT 735M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 730M +NVIDIA Corporation GeForce GT 740M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 740M +NVIDIA Corporation GeForce GT 750M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 750M +NVIDIA Corporation GeForce GT620M/PCIe/SSE2 NO MATCH +NVIDIA Corporation GeForce GT625M/PCIe/SSE2 NO MATCH +NVIDIA Corporation GeForce GTS 150/PCI/SSE2 supported 2 0 0 NVIDIA GTS 150 +NVIDIA Corporation GeForce GTS 160M/PCI/SSE2 supported 2 0 0 NVIDIA GTS 160M +NVIDIA Corporation GeForce GTS 160M/PCIe/SSE2 supported 2 0 0 NVIDIA GTS 160M +NVIDIA Corporation GeForce GTS 240/PCI/SSE2 supported 4 1 3.3 NVIDIA GTS 240 +NVIDIA Corporation GeForce GTS 240/PCIe/SSE2 supported 4 1 3.3 NVIDIA GTS 240 +NVIDIA Corporation GeForce GTS 240/PCIe/SSE2/3DNOW! supported 4 1 3.3 NVIDIA GTS 240 +NVIDIA Corporation GeForce GTS 250/PCI/SSE2 supported 4 1 3.3 NVIDIA GTS 250 +NVIDIA Corporation GeForce GTS 250/PCI/SSE2/3DNOW! supported 4 1 3.3 NVIDIA GTS 250 +NVIDIA Corporation GeForce GTS 250/PCIe/SSE2 supported 4 1 3.3 NVIDIA GTS 250 +NVIDIA Corporation GeForce GTS 250/PCIe/SSE2/3DNOW! supported 4 1 3.3 NVIDIA GTS 250 +NVIDIA Corporation GeForce GTS 250M/PCI/SSE2 supported 3 0 3.3 NVIDIA GTS 250M +NVIDIA Corporation GeForce GTS 250M/PCIe/SSE2 supported 3 0 3.3 NVIDIA GTS 250M +NVIDIA Corporation GeForce GTS 350M/PCI/SSE2 supported 4 1 3.3 NVIDIA GTS 350M +NVIDIA Corporation GeForce GTS 350M/PCIe/SSE2 supported 4 1 3.3 NVIDIA GTS 350M +NVIDIA Corporation GeForce GTS 360M/PCI/SSE2 supported 5 1 3.3 NVIDIA GTS 360M +NVIDIA Corporation GeForce GTS 360M/PCIe/SSE2 supported 5 1 3.3 NVIDIA GTS 360M +NVIDIA Corporation GeForce GTS 450/PCI/SSE2 supported 4 1 4.2 NVIDIA GTS 450 +NVIDIA Corporation GeForce GTS 450/PCI/SSE2/3DNOW! supported 4 1 4.2 NVIDIA GTS 450 +NVIDIA Corporation GeForce GTS 450/PCIe/SSE2 supported 4 1 4.2 NVIDIA GTS 450 +NVIDIA Corporation GeForce GTS 450/PCIe/SSE2/3DNOW! supported 4 1 4.2 NVIDIA GTS 450 +NVIDIA Corporation GeForce GTX 260/PCI/SSE2 supported 4 1 3.3 NVIDIA GTX 260 +NVIDIA Corporation GeForce GTX 260/PCI/SSE2/3DNOW! supported 4 1 3.3 NVIDIA GTX 260 +NVIDIA Corporation GeForce GTX 260/PCIe/SSE2 supported 4 1 3.3 NVIDIA GTX 260 +NVIDIA Corporation GeForce GTX 260/PCIe/SSE2/3DNOW! supported 4 1 3.3 NVIDIA GTX 260 +NVIDIA Corporation GeForce GTX 260M/PCI/SSE2 supported 3 0 3.3 NVIDIA GTX 260M +NVIDIA Corporation GeForce GTX 260M/PCIe/SSE2 supported 3 0 3.3 NVIDIA GTX 260M +NVIDIA Corporation GeForce GTX 275/PCI/SSE2 supported 4 0 3.3 NVIDIA GTX 270 +NVIDIA Corporation GeForce GTX 275/PCI/SSE2/3DNOW! supported 4 0 3.3 NVIDIA GTX 270 +NVIDIA Corporation GeForce GTX 275/PCIe/SSE2 supported 4 0 3.3 NVIDIA GTX 270 +NVIDIA Corporation GeForce GTX 275/PCIe/SSE2/3DNOW! supported 4 0 3.3 NVIDIA GTX 270 +NVIDIA Corporation GeForce GTX 280/PCI/SSE2 supported 4 1 3.3 NVIDIA GTX 280 +NVIDIA Corporation GeForce GTX 280/PCIe/SSE2 supported 4 1 3.3 NVIDIA GTX 280 +NVIDIA Corporation GeForce GTX 280/PCIe/SSE2/3DNOW! supported 4 1 3.3 NVIDIA GTX 280 +NVIDIA Corporation GeForce GTX 280M/PCI/SSE2 supported 3 0 3.3 NVIDIA GTX 280M +NVIDIA Corporation GeForce GTX 280M/PCIe/SSE2 supported 3 0 3.3 NVIDIA GTX 280M +NVIDIA Corporation GeForce GTX 285/PCI/SSE2 supported 4 1 3.3 NVIDIA GTX 280 +NVIDIA Corporation GeForce GTX 285/PCIe/SSE2 supported 4 1 3.3 NVIDIA GTX 280 +NVIDIA Corporation GeForce GTX 285/PCIe/SSE2/3DNOW! supported 4 1 3.3 NVIDIA GTX 280 +NVIDIA Corporation GeForce GTX 285M/PCI/SSE2 supported 3 0 3.3 NVIDIA GTX 280M +NVIDIA Corporation GeForce GTX 285M/PCIe/SSE2 supported 3 0 3.3 NVIDIA GTX 280M +NVIDIA Corporation GeForce GTX 295/PCI/SSE2 supported 5 0 3.3 NVIDIA GTX 290 +NVIDIA Corporation GeForce GTX 295/PCIe/SSE2 supported 5 0 3.3 NVIDIA GTX 290 +NVIDIA Corporation GeForce GTX 295/PCIe/SSE2/3DNOW! supported 5 0 3.3 NVIDIA GTX 290 +NVIDIA Corporation GeForce GTX 460 SE/PCI/SSE2 supported 5 1 4.3 NVIDIA GTX 460 +NVIDIA Corporation GeForce GTX 460 SE/PCI/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 460 +NVIDIA Corporation GeForce GTX 460 SE/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 460 +NVIDIA Corporation GeForce GTX 460 SE/PCIe/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 460 +NVIDIA Corporation GeForce GTX 460 v2/PCI/SSE2 supported 5 1 4.3 NVIDIA GTX 460 +NVIDIA Corporation GeForce GTX 460 v2/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 460 +NVIDIA Corporation GeForce GTX 460 v2/PCIe/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 460 +NVIDIA Corporation GeForce GTX 460/PCI/SSE2 supported 5 1 4.3 NVIDIA GTX 460 +NVIDIA Corporation GeForce GTX 460/PCI/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 460 +NVIDIA Corporation GeForce GTX 460/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 460 +NVIDIA Corporation GeForce GTX 460/PCIe/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 460 +NVIDIA Corporation GeForce GTX 460M/PCI/SSE2 supported 4 1 4.2 NVIDIA GTX 460M +NVIDIA Corporation GeForce GTX 460M/PCIe/SSE2 supported 4 1 4.2 NVIDIA GTX 460M +NVIDIA Corporation GeForce GTX 465/PCI/SSE2 supported 5 1 4.3 NVIDIA GTX 460 +NVIDIA Corporation GeForce GTX 465/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 460 +NVIDIA Corporation GeForce GTX 465/PCIe/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 460 +NVIDIA Corporation GeForce GTX 470/PCI/SSE2 supported 5 1 4.2 NVIDIA GTX 470 +NVIDIA Corporation GeForce GTX 470/PCI/SSE2/3DNOW! supported 5 1 4.2 NVIDIA GTX 470 +NVIDIA Corporation GeForce GTX 470/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 470 +NVIDIA Corporation GeForce GTX 470/PCIe/SSE2/3DNOW! supported 5 1 4.2 NVIDIA GTX 470 +NVIDIA Corporation GeForce GTX 470M/PCI/SSE2 supported 3 0 4.2 NVIDIA GTX 470M +NVIDIA Corporation GeForce GTX 480/PCI/SSE2 supported 5 1 4.2 NVIDIA GTX 480 +NVIDIA Corporation GeForce GTX 480/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 480 +NVIDIA Corporation GeForce GTX 480/PCIe/SSE2/3DNOW! supported 5 1 4.2 NVIDIA GTX 480 +NVIDIA Corporation GeForce GTX 480M/PCIe/SSE2 supported 3 1 4.2 NVIDIA GTX 480M +NVIDIA Corporation GeForce GTX 485M/PCI/SSE2 supported 3 1 4.2 NVIDIA GTX 480M +NVIDIA Corporation GeForce GTX 485M/PCIe/SSE2 supported 3 1 4.2 NVIDIA GTX 480M +NVIDIA Corporation GeForce GTX 550 Ti/PCI/SSE2 supported 5 1 4.3 NVIDIA GTX 550 +NVIDIA Corporation GeForce GTX 550 Ti/PCI/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 550 +NVIDIA Corporation GeForce GTX 550 Ti/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 550 +NVIDIA Corporation GeForce GTX 550 Ti/PCIe/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 550 +NVIDIA Corporation GeForce GTX 560 SE/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 560 +NVIDIA Corporation GeForce GTX 560 Ti/PCI/SSE2 supported 5 1 4.2 NVIDIA GTX 560 +NVIDIA Corporation GeForce GTX 560 Ti/PCI/SSE2/3DNOW! supported 5 1 4.2 NVIDIA GTX 560 +NVIDIA Corporation GeForce GTX 560 Ti/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 560 +NVIDIA Corporation GeForce GTX 560 Ti/PCIe/SSE2/3DNOW! supported 5 1 4.2 NVIDIA GTX 560 +NVIDIA Corporation GeForce GTX 560/PCI/SSE2 supported 5 1 4.2 NVIDIA GTX 560 +NVIDIA Corporation GeForce GTX 560/PCI/SSE2/3DNOW! supported 5 1 4.2 NVIDIA GTX 560 +NVIDIA Corporation GeForce GTX 560/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 560 +NVIDIA Corporation GeForce GTX 560/PCIe/SSE2/3DNOW! supported 5 1 4.2 NVIDIA GTX 560 +NVIDIA Corporation GeForce GTX 560M/PCI/SSE2 supported 3 0 4.2 NVIDIA GTX 560M +NVIDIA Corporation GeForce GTX 560M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GTX 560M +NVIDIA Corporation GeForce GTX 570/PCI/SSE2 supported 5 1 4.2 NVIDIA GTX 570 +NVIDIA Corporation GeForce GTX 570/PCI/SSE2/3DNOW! supported 5 1 4.2 NVIDIA GTX 570 +NVIDIA Corporation GeForce GTX 570/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 570 +NVIDIA Corporation GeForce GTX 570/PCIe/SSE2/3DNOW! supported 5 1 4.2 NVIDIA GTX 570 +NVIDIA Corporation GeForce GTX 570M/PCI/SSE2 supported 5 0 4.2 NVIDIA GTX 570M +NVIDIA Corporation GeForce GTX 570M/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 570M +NVIDIA Corporation GeForce GTX 580/PCI/SSE2 supported 5 1 4.3 NVIDIA GTX 580 +NVIDIA Corporation GeForce GTX 580/PCI/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 580 +NVIDIA Corporation GeForce GTX 580/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 580 +NVIDIA Corporation GeForce GTX 580/PCIe/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 580 +NVIDIA Corporation GeForce GTX 580M/PCI/SSE2 supported 5 1 4.2 NVIDIA GTX 580M +NVIDIA Corporation GeForce GTX 580M/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 580M +NVIDIA Corporation GeForce GTX 590/PCI/SSE2 supported 5 1 4.2 NVIDIA GTX 590 +NVIDIA Corporation GeForce GTX 590/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 590 +NVIDIA Corporation GeForce GTX 590/PCIe/SSE2/3DNOW! supported 5 1 4.2 NVIDIA GTX 590 +NVIDIA Corporation GeForce GTX 645/PCIe/SSE2 NO MATCH +NVIDIA Corporation GeForce GTX 650 Ti BOOST/PCIe/SSE2 supported 3 1 4.2 NVIDIA GTX 650 +NVIDIA Corporation GeForce GTX 650 Ti BOOST/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GTX 650 +NVIDIA Corporation GeForce GTX 650 Ti Boost/PCIe/SSE2 supported 3 1 4.2 NVIDIA GTX 650 +NVIDIA Corporation GeForce GTX 650 Ti Boost/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GTX 650 +NVIDIA Corporation GeForce GTX 650 Ti/PCIe/SSE2 supported 3 1 4.2 NVIDIA GTX 650 +NVIDIA Corporation GeForce GTX 650 Ti/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GTX 650 +NVIDIA Corporation GeForce GTX 650/PCIe/SSE2 supported 3 1 4.2 NVIDIA GTX 650 +NVIDIA Corporation GeForce GTX 650/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GTX 650 +NVIDIA Corporation GeForce GTX 660 Ti/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 660 +NVIDIA Corporation GeForce GTX 660 Ti/PCIe/SSE2/3DNOW! supported 5 0 4.2 NVIDIA GTX 660 +NVIDIA Corporation GeForce GTX 660/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 660 +NVIDIA Corporation GeForce GTX 660/PCIe/SSE2/3DNOW! supported 5 0 4.2 NVIDIA GTX 660 +NVIDIA Corporation GeForce GTX 660M/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 660M +NVIDIA Corporation GeForce GTX 670/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 670 +NVIDIA Corporation GeForce GTX 670/PCIe/SSE2/3DNOW! supported 5 1 4.2 NVIDIA GTX 670 +NVIDIA Corporation GeForce GTX 670M/PCI/SSE2 supported 5 1 4.2 NVIDIA GTX 670M +NVIDIA Corporation GeForce GTX 670M/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 670M +NVIDIA Corporation GeForce GTX 670MX/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 670M +NVIDIA Corporation GeForce GTX 675M/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 670M +NVIDIA Corporation GeForce GTX 675MX/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 670M +NVIDIA Corporation GeForce GTX 680/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 680 +NVIDIA Corporation GeForce GTX 680/PCIe/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 680 +NVIDIA Corporation GeForce GTX 680M/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 680M +NVIDIA Corporation GeForce GTX 680MX/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 680M +NVIDIA Corporation GeForce GTX 690/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 690 +NVIDIA Corporation GeForce GTX 760/PCIe/SSE2 supported 5 0 4.3 NVIDIA GTX 760 +NVIDIA Corporation GeForce GTX 760M/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 760M +NVIDIA Corporation GeForce GTX 765M/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 760M +NVIDIA Corporation GeForce GTX 770/PCIe/SSE2 supported 5 0 4.3 NVIDIA GTX 770 +NVIDIA Corporation GeForce GTX 770/PCIe/SSE2/3DNOW! supported 5 0 4.3 NVIDIA GTX 770 +NVIDIA Corporation GeForce GTX 770M/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 770M +NVIDIA Corporation GeForce GTX 780/PCIe/SSE2 supported 5 0 4.3 NVIDIA GTX 780 +NVIDIA Corporation GeForce GTX 780M/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 780M +NVIDIA Corporation GeForce GTX TITAN/PCIe/SSE2 supported 5 0 4.3 NVIDIA GTX TITAN +NVIDIA Corporation GeForce GTX TITAN/PCIe/SSE2/3DNOW! supported 5 0 4.3 NVIDIA GTX TITAN +NVIDIA Corporation GeForce GTX Titan/PCIe/SSE2 supported 5 0 4.3 NVIDIA GTX TITAN +NVIDIA Corporation GeForce Go 6100/PCI/SSE2 supported 0 1 2.1 NVIDIA GeForce Go 6100 +NVIDIA Corporation GeForce Go 6100/PCI/SSE2/3DNOW! supported 0 1 2.1 NVIDIA GeForce Go 6100 +NVIDIA Corporation GeForce Go 6150/PCI/SSE2 supported 0 1 2.1 NVIDIA GeForce Go 6100 +NVIDIA Corporation GeForce Go 6150/PCI/SSE2/3DNOW! supported 0 1 2.1 NVIDIA GeForce Go 6100 +NVIDIA Corporation GeForce Go 6150/integrated/SSE2/3DNOW! supported 0 1 2.1 NVIDIA GeForce Go 6100 +NVIDIA Corporation GeForce Go 6200/PCI/SSE2 supported 0 0 1.5 NVIDIA GeForce Go 6200 +NVIDIA Corporation GeForce Go 6200/PCI/SSE2/3DNOW! supported 0 0 1.5 NVIDIA GeForce Go 6200 +NVIDIA Corporation GeForce Go 6400/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce Go 6400 +NVIDIA Corporation GeForce Go 6400/PCIe/SSE2 supported 1 1 2.1 NVIDIA GeForce Go 6400 +NVIDIA Corporation GeForce Go 6600 TE/6200 TE/PCI/SSE2 supported 0 1 2.1 NVIDIA GeForce Go 6600 +NVIDIA Corporation GeForce Go 6600/PCI/SSE2 supported 0 1 2.1 NVIDIA GeForce Go 6600 +NVIDIA Corporation GeForce Go 6800 Ultra/PCI/SSE2 supported 0 1 2.1 NVIDIA GeForce Go 6800 +NVIDIA Corporation GeForce Go 6800/PCI/SSE2 supported 0 1 2.1 NVIDIA GeForce Go 6800 +NVIDIA Corporation GeForce Go 6800/PCIe/SSE2 supported 0 1 2.1 NVIDIA GeForce Go 6800 +NVIDIA Corporation GeForce Go 7200/PCI/SSE2 supported 1 0 2.1 NVIDIA GeForce Go 7200 +NVIDIA Corporation GeForce Go 7200/PCI/SSE2/3DNOW! supported 1 0 2.1 NVIDIA GeForce Go 7200 +NVIDIA Corporation GeForce Go 7300/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce Go 7300 +NVIDIA Corporation GeForce Go 7300/PCI/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce Go 7300 +NVIDIA Corporation GeForce Go 7300/PCIe/SSE2 supported 1 1 2.1 NVIDIA GeForce Go 7300 +NVIDIA Corporation GeForce Go 7400/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce Go 7400 +NVIDIA Corporation GeForce Go 7400/PCI/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce Go 7400 +NVIDIA Corporation GeForce Go 7400/PCIe/SSE2 supported 1 1 2.1 NVIDIA GeForce Go 7400 +NVIDIA Corporation GeForce Go 7600 GT/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce Go 7600 +NVIDIA Corporation GeForce Go 7600/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce Go 7600 +NVIDIA Corporation GeForce Go 7600/PCI/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce Go 7600 +NVIDIA Corporation GeForce Go 7600/PCIe/SSE2 supported 1 1 2.1 NVIDIA GeForce Go 7600 +NVIDIA Corporation GeForce Go 7600/PCIe/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce Go 7600 +NVIDIA Corporation GeForce Go 7700/PCI/SSE2 supported 0 1 2.1 NVIDIA GeForce Go 7700 +NVIDIA Corporation GeForce Go 7800 GTX/PCI/SSE2 supported 2 0 0 NVIDIA GeForce Go 7800 +NVIDIA Corporation GeForce Go 7800/PCI/SSE2 supported 2 0 0 NVIDIA GeForce Go 7800 +NVIDIA Corporation GeForce Go 7900 GS/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce Go 7900 +NVIDIA Corporation GeForce Go 7900 GS/PCI/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce Go 7900 +NVIDIA Corporation GeForce Go 7900 GS/PCIe/SSE2 supported 1 1 2.1 NVIDIA GeForce Go 7900 +NVIDIA Corporation GeForce Go 7900 GTX/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce Go 7900 +NVIDIA Corporation GeForce Go 7950 GTX/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce Go 7900 +NVIDIA Corporation GeForce Go 7950 GTX/PCI/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce Go 7900 +NVIDIA Corporation GeForce PCX 5300/PCI/SSE2 supported 0 0 1.5 NVIDIA GeForce PCX +NVIDIA Corporation GeForce PCX 5750/PCI/SSE2 supported 0 0 1.5 NVIDIA GeForce PCX +NVIDIA Corporation GeForce2 GTS/AGP/SSE2 supported 0 1 1.5 NVIDIA GeForce 2 +NVIDIA Corporation GeForce2 MX/AGP/SSE2 supported 0 1 1.5 NVIDIA GeForce 2 +NVIDIA Corporation GeForce2 MX/AGP/SSE2/3DNOW! supported 0 1 1.5 NVIDIA GeForce 2 +NVIDIA Corporation GeForce2 MX/PCI/SSE2 supported 0 1 1.5 NVIDIA GeForce 2 +NVIDIA Corporation GeForce3/AGP/SSE2 supported 2 1 2.1 NVIDIA GeForce 3 +NVIDIA Corporation GeForce3/AGP/SSE2/3DNOW! supported 2 1 2.1 NVIDIA GeForce 3 +NVIDIA Corporation GeForce4 420 Go 32M/AGP/SSE2 supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 420 Go 32M/AGP/SSE2/3DNOW! supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 420 Go 32M/PCI/SSE2/3DNOW! supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 420 Go/AGP/SSE2 supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 4200 Go/AGP/SSE2 supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 440 Go 64M/AGP/SSE2/3DNOW! supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 440 Go 64M/PCI/SSE2/3DNOW! supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 440 Go/AGP/SSE2 supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 448 Go/AGP/SSE2 supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 MX 4000/AGP/SSE2 supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 MX 4000/AGP/SSE2/3DNOW! supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 MX 4000/PCI/SSE2 supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 MX 4000/PCI/SSE2/3DNOW! supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 MX 420/AGP/SSE2 supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 MX 420/PCI/SSE2 supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 MX 440 with AGP8X/AGP/SSE2 supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 MX 440 with AGP8X/AGP/SSE2/3DNOW! supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 MX 440 with AGP8X/PCI/SSE2 supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 MX 440/440SE/AGP/SSE2 supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 MX 440/AGP/SSE2 supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 MX 440/AGP/SSE2/3DNOW! supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 MX 440/PCI/SSE2 supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 MX 440SE with AGP8X/AGP/SSE2 supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 MX 440SE with AGP8X/PCI/SSE2 supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 MX 460/AGP/SSE2 supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 MX 460/AGP/SSE2/3DNOW! supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 Ti 4200 with AGP8X/AGP/SSE2 supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 Ti 4200 with AGP8X/PCI/SSE2 supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 Ti 4200/AGP/SSE2 supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 Ti 4400/AGP/SSE2 supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 Ti 4600/AGP/SSE2 supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation GeForce4 Ti 4600/PCI/SSE2 supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA Corporation ION LE/PCI/SSE2 supported 2 1 3.3 NVIDIA ION +NVIDIA Corporation ION LE/integrated/SSE2 supported 2 1 3.3 NVIDIA ION +NVIDIA Corporation ION/PCI/SSE2 supported 2 1 3.3 NVIDIA ION +NVIDIA Corporation ION/PCIe/SSE2 supported 2 1 3.3 NVIDIA ION +NVIDIA Corporation ION/PCIe/SSE2/3DNOW! supported 2 1 3.3 NVIDIA ION +NVIDIA Corporation ION/integrated/SSE2 supported 2 1 3.3 NVIDIA ION +NVIDIA Corporation MCP61/PCI/SSE2/3DNOW! supported 1 0 2.1 NVIDIA MCP61 +NVIDIA Corporation MCP7A-O/PCI/SSE2 supported 1 0 0 NVIDIA MCP7A +NVIDIA Corporation MCP7A-P/PCI/SSE2 supported 1 0 0 NVIDIA MCP7A +NVIDIA Corporation N10P-GV2/PCI/SSE2 supported 1 0 2.1 NVIDIA N10 +NVIDIA Corporation N11M-GE2/PCI/SSE2 supported 2 0 3.1 NVIDIA Corporation N11M +NVIDIA Corporation N12P-GVR-B-A1/PCI/SSE2 supported 1 1 4.1 NVIDIA Corporation N12P +NVIDIA Corporation NB9M-GE1/PCI/SSE2 supported 1 0 0 NVIDIA NB9M +NVIDIA Corporation NB9M-GS/PCI/SSE2 supported 1 0 0 NVIDIA NB9M +NVIDIA Corporation NV17/AGP/SSE2 supported 0 0 0 NVIDIA NV17 +NVIDIA Corporation NVIDIA GeForce 210 OpenGL Engine supported 3 1 3.3 NVIDIA 210 +NVIDIA Corporation NVIDIA GeForce 310M OpenGL Engine supported 2 0 3.3 NVIDIA G 310M +NVIDIA Corporation NVIDIA GeForce 320M OpenGL Engine supported 3 0 3.3 NVIDIA GT 320M +NVIDIA Corporation NVIDIA GeForce 6600 GT OpenGL Engine supported 2 1 2.1 NVIDIA GeForce 6600 +NVIDIA Corporation NVIDIA GeForce 7300 GT OpenGL Engine supported 1 1 2.1 NVIDIA GeForce 7300 +NVIDIA Corporation NVIDIA GeForce 7600 GT OpenGL Engine supported 2 1 2.1 NVIDIA GeForce 7600 +NVIDIA Corporation NVIDIA GeForce 7950 GT OpenGL Engine supported 3 1 2.1 NVIDIA GeForce 7900 +NVIDIA Corporation NVIDIA GeForce 8400 GS OpenGL Engine supported 2 1 3.3 NVIDIA GeForce 8400 +NVIDIA Corporation NVIDIA GeForce 8500 GT OpenGL Engine supported 2 1 3.3 NVIDIA GeForce 8500 +NVIDIA Corporation NVIDIA GeForce 8600 GT OpenGL Engine supported 3 1 3.3 NVIDIA GeForce 8600 +NVIDIA Corporation NVIDIA GeForce 8600 GTS OpenGL Engine supported 3 1 3.3 NVIDIA GeForce 8600 +NVIDIA Corporation NVIDIA GeForce 8600M GT OpenGL Engine supported 2 1 3.3 NVIDIA GeForce 8600M +NVIDIA Corporation NVIDIA GeForce 8800 GS OpenGL Engine supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation NVIDIA GeForce 8800 GT OpenGL Engine supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation NVIDIA GeForce 8800 GTS 512 OpenGL Engine supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation NVIDIA GeForce 8800 GTS OpenGL Engine supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation NVIDIA GeForce 8800 GTX OpenGL Engine supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation NVIDIA GeForce 8800 Ultra OpenGL Engine supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA Corporation NVIDIA GeForce 9200M GS OpenGL Engine supported 1 0 3.3 NVIDIA GeForce 9200M +NVIDIA Corporation NVIDIA GeForce 9400 GT OpenGL Engine supported 3 1 3.3 NVIDIA GeForce 9400 +NVIDIA Corporation NVIDIA GeForce 9400 OpenGL Engine supported 3 1 3.3 NVIDIA GeForce 9400 +NVIDIA Corporation NVIDIA GeForce 9400M OpenGL Engine supported 2 1 3.3 NVIDIA GeForce 9400M +NVIDIA Corporation NVIDIA GeForce 9500 GT OpenGL Engine supported 3 1 3.3 NVIDIA GeForce 9500 +NVIDIA Corporation NVIDIA GeForce 9600 GT OpenGL Engine supported 3 1 3.3 NVIDIA GeForce 9600 +NVIDIA Corporation NVIDIA GeForce 9600M GT OpenGL Engine supported 2 1 3.3 NVIDIA GeForce 9600M +NVIDIA Corporation NVIDIA GeForce 9800 GT OpenGL Engine supported 3 1 3.3 NVIDIA GeForce 9800 +NVIDIA Corporation NVIDIA GeForce 9800 GTX+ OpenGL Engine supported 3 1 3.3 NVIDIA GeForce 9800 +NVIDIA Corporation NVIDIA GeForce GT 120 OpenGL Engine supported 2 0 3.3 NVIDIA GT 120 +NVIDIA Corporation NVIDIA GeForce GT 130 OpenGL Engine supported 2 0 3.3 NVIDIA GT 130 +NVIDIA Corporation NVIDIA GeForce GT 220 OpenGL Engine supported 2 1 3.3 NVIDIA GT 220 +NVIDIA Corporation NVIDIA GeForce GT 240 OpenGL Engine supported 4 1 3.3 NVIDIA GT 240 +NVIDIA Corporation NVIDIA GeForce GT 320M OpenGL Engine supported 3 0 3.3 NVIDIA GT 320M +NVIDIA Corporation NVIDIA GeForce GT 330M OpenGL Engine supported 3 1 3.3 NVIDIA GT 330M +NVIDIA Corporation NVIDIA GeForce GT 430 OpenGL Engine supported 3 1 4.2 NVIDIA GT 430 +NVIDIA Corporation NVIDIA GeForce GT 440 OpenGL Engine supported 4 0 4.2 NVIDIA GT 440 +NVIDIA Corporation NVIDIA GeForce GT 520 OpenGL Engine supported 3 1 4.2 NVIDIA GT 520 +NVIDIA Corporation NVIDIA GeForce GT 630 OpenGL Engine supported 3 0 4.2 NVIDIA GT 630 +NVIDIA Corporation NVIDIA GeForce GT 640 OpenGL Engine supported 3 0 4.2 NVIDIA GT 640 +NVIDIA Corporation NVIDIA GeForce GT 640M OpenGL Engine supported 3 0 4.2 NVIDIA GT 640M +NVIDIA Corporation NVIDIA GeForce GT 650M OpenGL Engine supported 3 0 4.2 NVIDIA GT 650M +NVIDIA Corporation NVIDIA GeForce GTS 250 OpenGL Engine supported 4 1 3.3 NVIDIA GTS 250 +NVIDIA Corporation NVIDIA GeForce GTS 450 OpenGL Engine supported 4 1 4.2 NVIDIA GTS 450 +NVIDIA Corporation NVIDIA GeForce GTX 260 OpenGL Engine supported 4 1 3.3 NVIDIA GTX 260 +NVIDIA Corporation NVIDIA GeForce GTX 280 OpenGL Engine supported 4 1 3.3 NVIDIA GTX 280 +NVIDIA Corporation NVIDIA GeForce GTX 285 OpenGL Engine supported 4 1 3.3 NVIDIA GTX 280 +NVIDIA Corporation NVIDIA GeForce GTX 460 OpenGL Engine supported 5 1 4.3 NVIDIA GTX 460 +NVIDIA Corporation NVIDIA GeForce GTX 470 OpenGL Engine supported 5 1 4.2 NVIDIA GTX 470 +NVIDIA Corporation NVIDIA GeForce GTX 480 OpenGL Engine supported 5 1 4.2 NVIDIA GTX 480 +NVIDIA Corporation NVIDIA GeForce GTX 550 Ti OpenGL Engine supported 5 1 4.3 NVIDIA GTX 550 +NVIDIA Corporation NVIDIA GeForce GTX 560 OpenGL Engine supported 5 1 4.2 NVIDIA GTX 560 +NVIDIA Corporation NVIDIA GeForce GTX 560 Ti OpenGL Engine supported 5 1 4.2 NVIDIA GTX 560 +NVIDIA Corporation NVIDIA GeForce GTX 570 OpenGL Engine supported 5 1 4.2 NVIDIA GTX 570 +NVIDIA Corporation NVIDIA GeForce GTX 580 OpenGL Engine supported 5 1 4.3 NVIDIA GTX 580 +NVIDIA Corporation NVIDIA GeForce GTX 650 OpenGL Engine supported 3 1 4.2 NVIDIA GTX 650 +NVIDIA Corporation NVIDIA GeForce GTX 650 Ti OpenGL Engine supported 3 1 4.2 NVIDIA GTX 650 +NVIDIA Corporation NVIDIA GeForce GTX 660 OpenGL Engine supported 5 0 4.2 NVIDIA GTX 660 +NVIDIA Corporation NVIDIA GeForce GTX 660 Ti OpenGL Engine supported 5 0 4.2 NVIDIA GTX 660 +NVIDIA Corporation NVIDIA GeForce GTX 660M OpenGL Engine supported 5 0 4.2 NVIDIA GTX 660M +NVIDIA Corporation NVIDIA GeForce GTX 670 OpenGL Engine supported 5 1 4.2 NVIDIA GTX 670 +NVIDIA Corporation NVIDIA GeForce GTX 675MX OpenGL Engine supported 5 1 4.2 NVIDIA GTX 670M +NVIDIA Corporation NVIDIA GeForce GTX 680 OpenGL Engine supported 5 1 4.3 NVIDIA GTX 680 +NVIDIA Corporation NVIDIA GeForce GTX 680MX OpenGL Engine supported 5 0 4.2 NVIDIA GTX 680M +NVIDIA Corporation NVIDIA GeForce GTX 775M OpenGL Engine supported 5 0 4.2 NVIDIA GTX 770M +NVIDIA Corporation NVIDIA GeForce GTX 780M OpenGL Engine supported 5 0 4.2 NVIDIA GTX 780M +NVIDIA Corporation NVIDIA GeForce Go 7600 OpenGL Engine supported 1 1 2.1 NVIDIA GeForce Go 7600 +NVIDIA Corporation NVIDIA GeForce Pre-Release D14P2-30 OpenGL Engine NO MATCH +NVIDIA Corporation NVIDIA GeForce Pre-Release GK104 OpenGL Engine NO MATCH +NVIDIA Corporation NVIDIA GeForce Pre-Release ION OpenGL Engine supported 2 1 3.3 NVIDIA ION +NVIDIA Corporation NVIDIA GeForce Pre-Release Unknown OpenGL Engine unsupported 0 0 2.1 NVIDIA Generic +NVIDIA Corporation NVIDIA NV34MAP OpenGL Engine supported 0 0 0 NVIDIA NV34 +NVIDIA Corporation NVIDIA Quadro 4000 OpenGL Engine supported 3 0 4.2 NVIDIA Quadro 4000 +NVIDIA Corporation NVIDIA Quadro FX 4500 OpenGL Engine supported 3 0 2.1 NVIDIA Quadro FX 4500 +NVIDIA Corporation NVIDIA Quadro FX 4800 OpenGL Engine supported 3 0 3.1 NVIDIA Quadro FX 4800 +NVIDIA Corporation NVIDIA Quadro FX 5600 OpenGL Engine supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation NVIDIA Quadro FX 580 OpenGL Engine supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation NVIDIA Quadro FX 770M OpenGL Engine supported 2 0 3.3 NVIDIA Quadro FX 770M +NVIDIA Corporation NVS 2100M/PCI/SSE2 supported 2 0 3.3 NVIDIA Quadro NVS 2100M +NVIDIA Corporation NVS 2100M/PCIe/SSE2 supported 2 0 3.3 NVIDIA Quadro NVS 2100M +NVIDIA Corporation NVS 300/PCI/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation NVS 300/PCI/SSE2/3DNOW! supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation NVS 300/PCIe/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation NVS 310/PCIe/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation NVS 3100M/PCI/SSE2 supported 2 0 3.3 NVIDIA Quadro NVS 3100M +NVIDIA Corporation NVS 3100M/PCIe/SSE2 supported 2 0 3.3 NVIDIA Quadro NVS 3100M +NVIDIA Corporation NVS 315/PCIe/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation NVS 4200M/PCI/SSE2 supported 2 0 4.2 NVIDIA Quadro NVS 4200M +NVIDIA Corporation NVS 4200M/PCIe/SSE2 supported 2 0 4.2 NVIDIA Quadro NVS 4200M +NVIDIA Corporation NVS 510/PCIe/SSE2 supported 3 0 0 NVIDIA 510 +NVIDIA Corporation NVS 5100M/PCI/SSE2 supported 3 0 0 NVIDIA 510 +NVIDIA Corporation NVS 5100M/PCIe/SSE2 supported 3 0 0 NVIDIA 510 +NVIDIA Corporation NVS 5200M/PCI/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation NVS 5200M/PCIe/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation NVS 5400M/PCIe/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation Quadro 1000M/PCI/SSE2 supported 2 0 4.2 NVIDIA Quadro 1000M +NVIDIA Corporation Quadro 1000M/PCIe/SSE2 supported 2 0 4.2 NVIDIA Quadro 1000M +NVIDIA Corporation Quadro 1100M/PCIe/SSE2 NO MATCH +NVIDIA Corporation Quadro 2000 D/PCI/SSE2 supported 3 0 4.2 NVIDIA Quadro 2000 M/D +NVIDIA Corporation Quadro 2000/PCI/SSE2 supported 3 0 4.2 NVIDIA Quadro 2000 M/D +NVIDIA Corporation Quadro 2000/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 2000 M/D +NVIDIA Corporation Quadro 2000D/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 2000 M/D +NVIDIA Corporation Quadro 2000M/PCI/SSE2 supported 3 0 4.2 NVIDIA Quadro 2000 M/D +NVIDIA Corporation Quadro 2000M/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 2000 M/D +NVIDIA Corporation Quadro 3000M/PCI/SSE2 supported 3 0 4.2 NVIDIA Quadro 3000M +NVIDIA Corporation Quadro 3000M/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 3000M +NVIDIA Corporation Quadro 400/PCI/SSE2 supported 2 0 3.3 NVIDIA Quadro 400 +NVIDIA Corporation Quadro 400/PCI/SSE2/3DNOW! supported 2 0 3.3 NVIDIA Quadro 400 +NVIDIA Corporation Quadro 400/PCIe/SSE2 supported 2 0 3.3 NVIDIA Quadro 400 +NVIDIA Corporation Quadro 4000/PCI/SSE2 supported 3 0 4.2 NVIDIA Quadro 4000 +NVIDIA Corporation Quadro 4000/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 4000 +NVIDIA Corporation Quadro 4000M/PCI/SSE2 supported 3 0 4.2 NVIDIA Quadro 4000M +NVIDIA Corporation Quadro 4000M/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 4000M +NVIDIA Corporation Quadro 410/PCIe/SSE2 NO MATCH +NVIDIA Corporation Quadro 5000/PCI/SSE2 supported 3 0 4.2 NVIDIA Quadro 50x0 M +NVIDIA Corporation Quadro 5000/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 50x0 M +NVIDIA Corporation Quadro 5000M/PCI/SSE2 supported 3 0 4.2 NVIDIA Quadro 50x0 M +NVIDIA Corporation Quadro 5000M/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 50x0 M +NVIDIA Corporation Quadro 5010M/PCI/SSE2 supported 3 0 4.2 NVIDIA Quadro 50x0 M +NVIDIA Corporation Quadro 5010M/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 50x0 M +NVIDIA Corporation Quadro 600/PCI/SSE2 supported 2 0 4.2 NVIDIA Quadro 600 +NVIDIA Corporation Quadro 600/PCIe/SSE2 supported 2 0 4.2 NVIDIA Quadro 600 +NVIDIA Corporation Quadro 600/PCIe/SSE2/3DNOW! supported 2 0 4.2 NVIDIA Quadro 600 +NVIDIA Corporation Quadro 6000/PCIe/SSE2 supported 3 0 0 NVIDIA Quadro 6000 +NVIDIA Corporation Quadro FX 1000/AGP/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 1100/AGP/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 1300/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 1400/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 1400/PCIe/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 1400/PCIe/SSE2/3DNOW! supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 1500/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 1500/PCIe/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 1500/PCIe/SSE2/3DNOW! supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 1500M/PCI/SSE2 supported 1 0 2.1 NVIDIA Quadro FX 1500M +NVIDIA Corporation Quadro FX 1600M/PCI/SSE2 supported 2 0 3.3 NVIDIA Quadro FX 1600M +NVIDIA Corporation Quadro FX 1600M/PCIe/SSE2 supported 2 0 3.3 NVIDIA Quadro FX 1600M +NVIDIA Corporation Quadro FX 1700/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 1700/PCIe/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 1700/PCIe/SSE2/3DNOW! supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 1700M/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 1700M/PCIe/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 1800/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 1800/PCIe/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 1800M/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 1800M/PCIe/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 2000/AGP/SSE2 supported 3 0 4.2 NVIDIA Quadro 2000 M/D +NVIDIA Corporation Quadro FX 2500M/PCI/SSE2 supported 2 0 2.1 NVIDIA Quadro FX 2500M +NVIDIA Corporation Quadro FX 2500M/PCIe/SSE2 supported 2 0 2.1 NVIDIA Quadro FX 2500M +NVIDIA Corporation Quadro FX 2700M/PCI/SSE2 supported 3 0 3.3 NVIDIA Quadro FX 2700M +NVIDIA Corporation Quadro FX 2700M/PCIe/SSE2 supported 3 0 3.3 NVIDIA Quadro FX 2700M +NVIDIA Corporation Quadro FX 2800M/PCI/SSE2 supported 3 0 3.3 NVIDIA Quadro FX 2800M +NVIDIA Corporation Quadro FX 2800M/PCIe/SSE2 supported 3 0 3.3 NVIDIA Quadro FX 2800M +NVIDIA Corporation Quadro FX 3000/AGP/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 3400/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 3450/4000 SDI/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 3450/4000 SDI/PCI/SSE2/3DNOW! supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 3450/4000 SDI/PCIe/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 3500/PCI/SSE2 supported 2 0 2.1 NVIDIA Quadro FX 3500 +NVIDIA Corporation Quadro FX 3500/PCIe/SSE2 supported 2 0 2.1 NVIDIA Quadro FX 3500 +NVIDIA Corporation Quadro FX 3500M/PCI/SSE2 supported 2 0 2.1 NVIDIA Quadro FX 3500 +NVIDIA Corporation Quadro FX 350M/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 3600M/PCI/SSE2 supported 3 0 3.3 NVIDIA Quadro FX 3600 +NVIDIA Corporation Quadro FX 3600M/PCIe/SSE2 supported 3 0 3.3 NVIDIA Quadro FX 3600 +NVIDIA Corporation Quadro FX 360M/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 360M/PCIe/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 370 Low Profile/PCIe/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 370/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 370/PCIe/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 370/PCIe/SSE2/3DNOW! supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 3700/PCI/SSE2 supported 3 0 3.3 NVIDIA Quadro FX 3700 +NVIDIA Corporation Quadro FX 3700/PCIe/SSE2 supported 3 0 3.3 NVIDIA Quadro FX 3700 +NVIDIA Corporation Quadro FX 3700M/PCI/SSE2 supported 3 0 3.3 NVIDIA Quadro FX 3700 +NVIDIA Corporation Quadro FX 3700M/PCIe/SSE2 supported 3 0 3.3 NVIDIA Quadro FX 3700 +NVIDIA Corporation Quadro FX 370M/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 370M/PCIe/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 380 LP/PCIe/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 380 LP/PCIe/SSE2/3DNOW! supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 380/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 380/PCIe/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 3800/PCI/SSE2 supported 3 0 3.3 NVIDIA Quadro FX 3800 +NVIDIA Corporation Quadro FX 3800/PCIe/SSE2 supported 3 0 3.3 NVIDIA Quadro FX 3800 +NVIDIA Corporation Quadro FX 3800M/PCI/SSE2 supported 3 0 3.3 NVIDIA Quadro FX 3800 +NVIDIA Corporation Quadro FX 3800M/PCIe/SSE2 supported 3 0 3.3 NVIDIA Quadro FX 3800 +NVIDIA Corporation Quadro FX 380M/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 380M/PCIe/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 4500/PCI/SSE2 supported 3 0 2.1 NVIDIA Quadro FX 4500 +NVIDIA Corporation Quadro FX 4500/PCIe/SSE2 supported 3 0 2.1 NVIDIA Quadro FX 4500 +NVIDIA Corporation Quadro FX 4600/PCIe/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 4800/PCI/SSE2 supported 3 0 3.1 NVIDIA Quadro FX 4800 +NVIDIA Corporation Quadro FX 4800/PCIe/SSE2 supported 3 0 3.1 NVIDIA Quadro FX 4800 +NVIDIA Corporation Quadro FX 500/AGP/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 500/FX 600/AGP/SSE2 supported 2 0 4.2 NVIDIA Quadro 600 +NVIDIA Corporation Quadro FX 500/FX 600/AGP/SSE2/3DNOW! supported 2 0 4.2 NVIDIA Quadro 600 +NVIDIA Corporation Quadro FX 500/FX 600/PCI/SSE2 supported 2 0 4.2 NVIDIA Quadro 600 +NVIDIA Corporation Quadro FX 540/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 540/PCIe/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 550/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 550/PCIe/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 5500/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 560/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 560/PCIe/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 5600/PCIe/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 570/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 570/PCIe/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 570M/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 570M/PCIe/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 580/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 580/PCIe/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 5800/PCIe/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 770M/PCI/SSE2 supported 2 0 3.3 NVIDIA Quadro FX 770M +NVIDIA Corporation Quadro FX 770M/PCIe/SSE2 supported 2 0 3.3 NVIDIA Quadro FX 770M +NVIDIA Corporation Quadro FX 880M/PCI/SSE2 supported 3 0 3.3 NVIDIA Quadro FX 880M +NVIDIA Corporation Quadro FX 880M/PCIe/SSE2 supported 3 0 3.3 NVIDIA Quadro FX 880M +NVIDIA Corporation Quadro FX Go1400/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX Go1400/PCIe/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX Go700/AGP/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro K1000/PCIe/SSE2 NO MATCH +NVIDIA Corporation Quadro K1000M/PCIe/SSE2 supported 2 0 4.2 NVIDIA Quadro 1000M +NVIDIA Corporation Quadro K2000/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 2000 M/D +NVIDIA Corporation Quadro K2000D/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 2000 M/D +NVIDIA Corporation Quadro K2000M/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 2000 M/D +NVIDIA Corporation Quadro K3000M/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 3000M +NVIDIA Corporation Quadro K4000/PCIe/SSE2 NO MATCH +NVIDIA Corporation Quadro K4000M/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 4000M +NVIDIA Corporation Quadro K5000/PCIe/SSE2 NO MATCH +NVIDIA Corporation Quadro K5000M/PCIe/SSE2 NO MATCH +NVIDIA Corporation Quadro K600/PCIe/SSE2 NO MATCH +NVIDIA Corporation Quadro NVS 110M/PCI/SSE2 supported 0 1 3.3 NVIDIA Quadro NVS 1xxM +NVIDIA Corporation Quadro NVS 130M/PCI/SSE2 supported 0 1 3.3 NVIDIA Quadro NVS 1xxM +NVIDIA Corporation Quadro NVS 130M/PCIe/SSE2 supported 0 1 3.3 NVIDIA Quadro NVS 1xxM +NVIDIA Corporation Quadro NVS 135M/PCI/SSE2 supported 0 1 3.3 NVIDIA Quadro NVS 1xxM +NVIDIA Corporation Quadro NVS 135M/PCIe/SSE2 supported 0 1 3.3 NVIDIA Quadro NVS 1xxM +NVIDIA Corporation Quadro NVS 140M/PCI/SSE2 supported 0 1 3.3 NVIDIA Quadro NVS 1xxM +NVIDIA Corporation Quadro NVS 140M/PCIe/SSE2 supported 0 1 3.3 NVIDIA Quadro NVS 1xxM +NVIDIA Corporation Quadro NVS 150M/PCI/SSE2 supported 0 1 3.3 NVIDIA Quadro NVS 1xxM +NVIDIA Corporation Quadro NVS 150M/PCIe/SSE2 supported 0 1 3.3 NVIDIA Quadro NVS 1xxM +NVIDIA Corporation Quadro NVS 160M/PCI/SSE2 supported 0 1 3.3 NVIDIA Quadro NVS 1xxM +NVIDIA Corporation Quadro NVS 160M/PCIe/SSE2 supported 0 1 3.3 NVIDIA Quadro NVS 1xxM +NVIDIA Corporation Quadro NVS 210S / GeForce 6150LE/PCI/SSE2 supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation Quadro NVS 210S / GeForce 6150LE/PCI/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation Quadro NVS 210S / GeForce 6150LE/integrated/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation Quadro NVS 210S / NVIDIA GeForce 6150LE/PCI/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation Quadro NVS 210S/PCI/SSE2/3DNOW! supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation Quadro NVS 280 PCI-E/PCI/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation Quadro NVS 280 SD/AGP/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation Quadro NVS 285/PCI/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation Quadro NVS 285/PCIe/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation Quadro NVS 290/PCI/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation Quadro NVS 290/PCIe/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation Quadro NVS 290/PCIe/SSE2/3DNOW! supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation Quadro NVS 295/PCI/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation Quadro NVS 295/PCIe/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation Quadro NVS 300M/PCI/SSE2 supported 2 0 0 NVIDIA Quadro NVS 300M +NVIDIA Corporation Quadro NVS 320M/PCI/SSE2 supported 3 0 3.3 NVIDIA GT 320M +NVIDIA Corporation Quadro NVS 320M/PCIe/SSE2 supported 3 0 3.3 NVIDIA GT 320M +NVIDIA Corporation Quadro NVS 420/PCI/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation Quadro NVS 420/PCIe/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation Quadro NVS 420/PCIe/SSE2/3DNOW! supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation Quadro NVS 450/PCIe/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation Quadro NVS 510M/PCI/SSE2 supported 3 0 0 NVIDIA 510 +NVIDIA Corporation Quadro NVS 55/280 PCI/PCI/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation Quadro NVS with AGP8X/AGP/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation Quadro NVS/AGP/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation Quadro PCI-E Series/PCI/SSE2 NO MATCH +NVIDIA Corporation Quadro2 MXR/AGP/SSE2 supported 0 0 1.5 NVIDIA Quadro2 +NVIDIA Corporation Quadro4 380 XGL/AGP/SSE2 supported 0 0 1.5 NVIDIA Quadro4 +NVIDIA Corporation Quadro4 550 XGL/AGP/SSE2 supported 0 0 1.5 NVIDIA Quadro4 +NVIDIA Corporation Quadro4 700 XGL/AGP/SSE2 supported 0 0 1.5 NVIDIA Quadro4 +NVIDIA Corporation Quadro4 980 XGL/AGP/SSE2 supported 0 0 1.5 NVIDIA Quadro4 +NVIDIA Corporation RIVA TNT2/AGP/SSE2 unsupported 0 0 1.5 NVIDIA RIVA TNT +NVIDIA Corporation RIVA TNT2/AGP/SSE2/3DNOW! unsupported 0 0 1.5 NVIDIA RIVA TNT +NVIDIA Corporation Stinger/emulated by Quadro FX 500/FX 600/PCI/SSE2 supported 2 0 4.2 NVIDIA Quadro 600 +NVIDIA Corporation nForce 750a SLI/PCI/SSE2 unsupported 0 0 3.3 NVIDIA nForce +NVIDIA Corporation nForce 750a SLI/integrated/SSE2 unsupported 0 0 3.3 NVIDIA nForce +NVIDIA Corporation nForce 760i SLI/integrated/SSE2 unsupported 0 0 3.3 NVIDIA nForce +NVIDIA Corporation nForce 980a/780a SLI/integrated/SSE2 unsupported 0 0 3.3 NVIDIA nForce +NVIDIA Corporation unknown board/AGP/SSE2 unsupported 0 0 2.1 NVIDIA Generic +NVIDIA Corporation unknown board/PCI/SSE2 unsupported 0 0 2.1 NVIDIA Generic +NVIDIA Corporation unknown board/PCI/SSE2/3DNOW! unsupported 0 0 2.1 NVIDIA Generic +NVIDIA Corporation unknown board/PCIe/SSE2 unsupported 0 0 2.1 NVIDIA Generic +NVIDIA D9M supported 1 0 0 NVIDIA D9M +NVIDIA G 103M supported 1 1 3.3 NVIDIA G 100M +NVIDIA G 105M supported 1 1 3.3 NVIDIA G 100M +NVIDIA G 110M supported 1 1 3.3 NVIDIA G 110M +NVIDIA G 120M supported 1 1 3.3 NVIDIA G 120M +NVIDIA G 200 NO MATCH +NVIDIA G 205M supported 1 0 0 NVIDIA G 200M +NVIDIA G 210 NO MATCH +NVIDIA G 310M supported 2 0 3.3 NVIDIA G 310M +NVIDIA G 320M supported 3 0 3.3 NVIDIA GT 320M +NVIDIA G 405 supported 3 0 3.3 NVIDIA 405 +NVIDIA G 410M supported 3 1 4.2 NVIDIA G 410M +NVIDIA G 610M supported 3 1 4.2 NVIDIA 610M +NVIDIA G100 supported 3 1 4.2 NVIDIA G100 +NVIDIA G100M supported 3 1 4.2 NVIDIA G100 +NVIDIA G102M supported 3 1 4.2 NVIDIA G100 +NVIDIA G103M supported 3 1 4.2 NVIDIA G100 +NVIDIA G105M supported 3 1 4.2 NVIDIA G100 +NVIDIA G200 NO MATCH +NVIDIA G210 NO MATCH +NVIDIA G210M supported 3 0 3.3 NVIDIA G210M +NVIDIA G73 supported 1 0 0 NVIDIA G73 +NVIDIA G84 supported 2 0 0 NVIDIA G84 +NVIDIA G92 supported 3 0 0 NVIDIA G92 +NVIDIA G94 supported 3 0 0 NVIDIA G94 +NVIDIA GT 120 supported 2 0 3.3 NVIDIA GT 120 +NVIDIA GT 120M supported 2 0 3.3 NVIDIA GT 120 +NVIDIA GT 130 supported 2 0 3.3 NVIDIA GT 130 +NVIDIA GT 130M supported 3 1 3.3 NVIDIA GT 130M +NVIDIA GT 140 supported 2 0 3.3 NVIDIA GT 140 +NVIDIA GT 140M supported 3 1 3.3 NVIDIA GT 140M +NVIDIA GT 150 NO MATCH +NVIDIA GT 220 supported 2 1 3.3 NVIDIA GT 220 +NVIDIA GT 220M supported 3 1 3.3 NVIDIA GT 220M +NVIDIA GT 230 supported 2 1 3.3 NVIDIA GT 230 +NVIDIA GT 230M supported 3 1 3.3 NVIDIA GT 230M +NVIDIA GT 240 supported 4 1 3.3 NVIDIA GT 240 +NVIDIA GT 240M supported 3 1 3.3 NVIDIA GT 240M +NVIDIA GT 260M NO MATCH +NVIDIA GT 320 supported 3 0 3.3 NVIDIA GT 320 +NVIDIA GT 320M supported 3 0 3.3 NVIDIA GT 320M +NVIDIA GT 325M supported 3 0 3.3 NVIDIA GT 320M +NVIDIA GT 330 supported 3 0 3.3 NVIDIA GT 330 +NVIDIA GT 330M supported 3 1 3.3 NVIDIA GT 330M +NVIDIA GT 335M supported 3 1 3.3 NVIDIA GT 330M +NVIDIA GT 340 supported 3 0 0 NVIDIA GT 340 +NVIDIA GT 340M supported 4 1 3.3 NVIDIA GT 340M +NVIDIA GT 415M supported 3 0 0 NVIDIA 410M +NVIDIA GT 420 supported 3 1 4.2 NVIDIA GT 420 +NVIDIA GT 420M supported 3 1 4.2 NVIDIA GT 420M +NVIDIA GT 425M supported 3 1 4.2 NVIDIA GT 420M +NVIDIA GT 430 supported 3 1 4.2 NVIDIA GT 430 +NVIDIA GT 430M supported 3 1 4.2 NVIDIA GT 430M +NVIDIA GT 435M supported 3 1 4.2 NVIDIA GT 430M +NVIDIA GT 440 supported 4 0 4.2 NVIDIA GT 440 +NVIDIA GT 440M supported 3 1 4.2 NVIDIA GT 440M +NVIDIA GT 445M supported 3 1 4.2 NVIDIA GT 440M +NVIDIA GT 450 NO MATCH +NVIDIA GT 520 supported 3 1 4.2 NVIDIA GT 520 +NVIDIA GT 520M supported 3 1 4.2 NVIDIA GT 520M +NVIDIA GT 525M supported 3 1 4.2 NVIDIA GT 520M +NVIDIA GT 530M supported 3 1 4.2 NVIDIA GT 530M +NVIDIA GT 540 supported 3 1 4.2 NVIDIA GT 540 +NVIDIA GT 540M supported 3 1 4.2 NVIDIA GT 540M +NVIDIA GT 550 NO MATCH +NVIDIA GT 550M NO MATCH +NVIDIA GT 555M NO MATCH +NVIDIA GT 610 supported 3 1 4.2 NVIDIA GT 610 +NVIDIA GT 620 supported 3 0 4.2 NVIDIA GT 620 +NVIDIA GT 620M supported 3 0 4.2 NVIDIA GT 620M +NVIDIA GT 630 supported 3 0 4.2 NVIDIA GT 630 +NVIDIA GT 630M supported 3 0 4.2 NVIDIA GT 630M +NVIDIA GT 635M supported 3 0 4.2 NVIDIA GT 630M +NVIDIA GT 640 supported 3 0 4.2 NVIDIA GT 640 +NVIDIA GT 640M supported 3 0 4.2 NVIDIA GT 640M +NVIDIA GT 650 supported 3 1 4.2 NVIDIA GT 650 +NVIDIA GT 650M supported 3 0 4.2 NVIDIA GT 650M +NVIDIA GTS 160M supported 2 0 0 NVIDIA GTS 160M +NVIDIA GTS 240 supported 4 1 3.3 NVIDIA GTS 240 +NVIDIA GTS 250 supported 4 1 3.3 NVIDIA GTS 250 +NVIDIA GTS 350M supported 4 1 3.3 NVIDIA GTS 350M +NVIDIA GTS 360 NO MATCH +NVIDIA GTS 360M supported 5 1 3.3 NVIDIA GTS 360M +NVIDIA GTS 450 supported 4 1 4.2 NVIDIA GTS 450 +NVIDIA GTX 260 supported 4 1 3.3 NVIDIA GTX 260 +NVIDIA GTX 270 supported 4 0 3.3 NVIDIA GTX 270 +NVIDIA GTX 275 supported 4 0 3.3 NVIDIA GTX 270 +NVIDIA GTX 280 supported 4 1 3.3 NVIDIA GTX 280 +NVIDIA GTX 285 supported 4 1 3.3 NVIDIA GTX 280 +NVIDIA GTX 290 supported 5 0 3.3 NVIDIA GTX 290 +NVIDIA GTX 295 supported 5 0 3.3 NVIDIA GTX 290 +NVIDIA GTX 460 supported 5 1 4.3 NVIDIA GTX 460 +NVIDIA GTX 460M supported 4 1 4.2 NVIDIA GTX 460M +NVIDIA GTX 465 supported 5 1 4.3 NVIDIA GTX 460 +NVIDIA GTX 470 supported 5 1 4.2 NVIDIA GTX 470 +NVIDIA GTX 470M supported 3 0 4.2 NVIDIA GTX 470M +NVIDIA GTX 480 supported 5 1 4.2 NVIDIA GTX 480 +NVIDIA GTX 480M supported 3 1 4.2 NVIDIA GTX 480M +NVIDIA GTX 485M supported 3 1 4.2 NVIDIA GTX 480M +NVIDIA GTX 550 supported 5 1 4.3 NVIDIA GTX 550 +NVIDIA GTX 560 supported 5 1 4.2 NVIDIA GTX 560 +NVIDIA GTX 560 Ti supported 5 1 4.2 NVIDIA GTX 560 +NVIDIA GTX 570 supported 5 1 4.2 NVIDIA GTX 570 +NVIDIA GTX 580 supported 5 1 4.3 NVIDIA GTX 580 +NVIDIA GTX 580M supported 5 1 4.2 NVIDIA GTX 580M +NVIDIA GTX 590 supported 5 1 4.2 NVIDIA GTX 590 +NVIDIA GTX 650 supported 3 1 4.2 NVIDIA GTX 650 +NVIDIA GTX 660 supported 5 0 4.2 NVIDIA GTX 660 +NVIDIA GTX 670 supported 5 1 4.2 NVIDIA GTX 670 +NVIDIA GTX 670M supported 5 1 4.2 NVIDIA GTX 670M +NVIDIA GTX 675M supported 5 1 4.2 NVIDIA GTX 670M +NVIDIA GTX 680 supported 5 1 4.3 NVIDIA GTX 680 +NVIDIA GTX 680M supported 5 0 4.2 NVIDIA GTX 680M +NVIDIA GTX 690 supported 5 1 4.3 NVIDIA GTX 690 +NVIDIA GTX 770 supported 5 0 4.3 NVIDIA GTX 770 +NVIDIA GTX TITAN supported 5 0 4.3 NVIDIA GTX TITAN +NVIDIA GeForce 2 supported 0 1 1.5 NVIDIA GeForce 2 +NVIDIA GeForce 3 supported 2 1 2.1 NVIDIA GeForce 3 +NVIDIA GeForce 4 supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA GeForce 4 Go supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA GeForce 4 MX supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA GeForce 4 Ti supported 0 1 1.5 NVIDIA GeForce 4 +NVIDIA GeForce 6100 supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA GeForce 6200 supported 0 1 2.1 NVIDIA GeForce 6200 +NVIDIA GeForce 6500 supported 1 1 2.1 NVIDIA GeForce 6500 +NVIDIA GeForce 6600 supported 2 1 2.1 NVIDIA GeForce 6600 +NVIDIA GeForce 6700 supported 2 1 2.1 NVIDIA GeForce 6700 +NVIDIA GeForce 6800 supported 1 1 2.1 NVIDIA GeForce 6800 +NVIDIA GeForce 7000 supported 1 1 2.1 NVIDIA GeForce 7000 +NVIDIA GeForce 7000M supported 1 1 2.1 NVIDIA GeForce 7000 +NVIDIA GeForce 7100 supported 1 1 2.1 NVIDIA GeForce 7100 +NVIDIA GeForce 7300 supported 1 1 2.1 NVIDIA GeForce 7300 +NVIDIA GeForce 7500 supported 2 1 2.1 NVIDIA GeForce 7500 +NVIDIA GeForce 7600 supported 2 1 2.1 NVIDIA GeForce 7600 +NVIDIA GeForce 7800 supported 2 1 2.1 NVIDIA GeForce 7800 +NVIDIA GeForce 7900 supported 3 1 2.1 NVIDIA GeForce 7900 +NVIDIA GeForce 8100 supported 1 0 3.3 NVIDIA GeForce 8100 +NVIDIA GeForce 8200 supported 1 0 3.3 NVIDIA GeForce 8200 +NVIDIA GeForce 8200M supported 1 0 3.3 NVIDIA GeForce 8200M +NVIDIA GeForce 8300 supported 3 1 3.3 NVIDIA GeForce 8300 +NVIDIA GeForce 8400 supported 2 1 3.3 NVIDIA GeForce 8400 +NVIDIA GeForce 8400M supported 1 1 3.3 NVIDIA GeForce 8400M +NVIDIA GeForce 8500 supported 2 1 3.3 NVIDIA GeForce 8500 +NVIDIA GeForce 8600 supported 3 1 3.3 NVIDIA GeForce 8600 +NVIDIA GeForce 8600M supported 2 1 3.3 NVIDIA GeForce 8600M +NVIDIA GeForce 8700 supported 3 0 0 NVIDIA GeForce 8700 +NVIDIA GeForce 8700M supported 2 1 3.3 NVIDIA GeForce 8700M +NVIDIA GeForce 8800 supported 3 1 3.3 NVIDIA GeForce 8800 +NVIDIA GeForce 8800M supported 2 1 3.3 NVIDIA GeForce 8800M +NVIDIA GeForce 9100 supported 0 0 3.3 NVIDIA GeForce 9100 +NVIDIA GeForce 9100M supported 0 0 3.3 NVIDIA GeForce 9100M +NVIDIA GeForce 9200 supported 1 0 3.3 NVIDIA GeForce 9200 +NVIDIA GeForce 9200M supported 1 0 3.3 NVIDIA GeForce 9200M +NVIDIA GeForce 9300 supported 1 1 3.3 NVIDIA GeForce 9300 +NVIDIA GeForce 9300M supported 1 1 3.3 NVIDIA GeForce 9300M +NVIDIA GeForce 9400 supported 3 1 3.3 NVIDIA GeForce 9400 +NVIDIA GeForce 9400M supported 2 1 3.3 NVIDIA GeForce 9400M +NVIDIA GeForce 9500 supported 3 1 3.3 NVIDIA GeForce 9500 +NVIDIA GeForce 9500M supported 1 1 3.3 NVIDIA GeForce 9500M +NVIDIA GeForce 9600 supported 3 1 3.3 NVIDIA GeForce 9600 +NVIDIA GeForce 9600M supported 2 1 3.3 NVIDIA GeForce 9600M +NVIDIA GeForce 9700M supported 0 1 3.3 NVIDIA GeForce 9700M +NVIDIA GeForce 9800 supported 3 1 3.3 NVIDIA GeForce 9800 +NVIDIA GeForce 9800M supported 2 1 3.3 NVIDIA GeForce 9800M +NVIDIA GeForce FX 5200 supported 0 0 2.1 NVIDIA GeForce FX 5200 +NVIDIA GeForce FX 5500 supported 0 1 2.1 NVIDIA GeForce FX 5500 +NVIDIA GeForce FX 5600 supported 1 1 2.1 NVIDIA GeForce FX 5600 +NVIDIA GeForce FX 5700 supported 0 1 2.1 NVIDIA GeForce FX 5700 +NVIDIA GeForce FX 5900 supported 1 1 2.1 NVIDIA GeForce FX 5900 +NVIDIA GeForce FX Go5100 supported 0 0 0 NVIDIA GeForce FX Go5100 +NVIDIA GeForce FX Go5200 supported 0 0 1.5 NVIDIA GeForce FX Go5200 +NVIDIA GeForce FX Go5600 supported 0 1 2.1 NVIDIA GeForce FX Go5600 +NVIDIA GeForce FX Go5700 supported 1 1 1.5 NVIDIA GeForce FX Go5700 +NVIDIA GeForce Go 6 supported 1 0 0 NVIDIA GeForce Go 6 +NVIDIA GeForce Go 6100 supported 0 1 2.1 NVIDIA GeForce Go 6100 +NVIDIA GeForce Go 6200 supported 0 0 1.5 NVIDIA GeForce Go 6200 +NVIDIA GeForce Go 6400 supported 1 1 2.1 NVIDIA GeForce Go 6400 +NVIDIA GeForce Go 6600 supported 0 1 2.1 NVIDIA GeForce Go 6600 +NVIDIA GeForce Go 6800 supported 0 1 2.1 NVIDIA GeForce Go 6800 +NVIDIA GeForce Go 7200 supported 1 0 2.1 NVIDIA GeForce Go 7200 +NVIDIA GeForce Go 7300 supported 1 1 2.1 NVIDIA GeForce Go 7300 +NVIDIA GeForce Go 7400 supported 1 1 2.1 NVIDIA GeForce Go 7400 +NVIDIA GeForce Go 7600 supported 1 1 2.1 NVIDIA GeForce Go 7600 +NVIDIA GeForce Go 7700 supported 0 1 2.1 NVIDIA GeForce Go 7700 +NVIDIA GeForce Go 7800 supported 2 0 0 NVIDIA GeForce Go 7800 +NVIDIA GeForce Go 7900 supported 1 1 2.1 NVIDIA GeForce Go 7900 +NVIDIA GeForce PCX supported 0 0 1.5 NVIDIA GeForce PCX +NVIDIA Generic NO MATCH +NVIDIA ION NO MATCH +NVIDIA MCP61 supported 1 0 2.1 NVIDIA MCP61 +NVIDIA NV34 supported 0 0 0 NVIDIA NV34 +NVIDIA PCI NO MATCH +NVIDIA Quadro 2000 supported 3 0 4.2 NVIDIA Quadro 2000 M/D +NVIDIA Quadro 2000 M/D supported 3 0 4.2 NVIDIA Quadro 2000 M/D +NVIDIA Quadro 3000M supported 3 0 4.2 NVIDIA Quadro 3000M +NVIDIA Quadro 400 supported 2 0 3.3 NVIDIA Quadro 400 +NVIDIA Quadro 4000 supported 3 0 4.2 NVIDIA Quadro 4000 +NVIDIA Quadro 4000M supported 3 0 4.2 NVIDIA Quadro 4000M +NVIDIA Quadro 50x0 M supported 3 0 4.2 NVIDIA Quadro 50x0 M +NVIDIA Quadro 600 supported 2 0 4.2 NVIDIA Quadro 600 +NVIDIA Quadro 6000 supported 3 0 0 NVIDIA Quadro 6000 +NVIDIA Quadro FX supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Quadro FX 1500M supported 1 0 2.1 NVIDIA Quadro FX 1500M +NVIDIA Quadro FX 1800 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Quadro FX 2500M supported 2 0 2.1 NVIDIA Quadro FX 2500M +NVIDIA Quadro FX 2700M supported 3 0 3.3 NVIDIA Quadro FX 2700M +NVIDIA Quadro FX 2800M supported 3 0 3.3 NVIDIA Quadro FX 2800M +NVIDIA Quadro FX 3500 supported 2 0 2.1 NVIDIA Quadro FX 3500 +NVIDIA Quadro FX 3700 supported 3 0 3.3 NVIDIA Quadro FX 3700 +NVIDIA Quadro FX 3800 supported 3 0 3.3 NVIDIA Quadro FX 3800 +NVIDIA Quadro FX 4500 supported 3 0 2.1 NVIDIA Quadro FX 4500 +NVIDIA Quadro FX 4800 supported 3 0 3.1 NVIDIA Quadro FX 4800 +NVIDIA Quadro FX 550 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Quadro FX 770M supported 2 0 3.3 NVIDIA Quadro FX 770M +NVIDIA Quadro FX 880M supported 3 0 3.3 NVIDIA Quadro FX 880M +NVIDIA Quadro NVS supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Quadro NVS 1xxM supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Quadro NVS 4200M supported 2 0 4.2 NVIDIA Quadro NVS 4200M +NVIDIA Quadro2 supported 0 0 1.5 NVIDIA Quadro2 +NVIDIA nForce unsupported 0 0 3.3 NVIDIA nForce +Oracle VirtualBox Graphics NO MATCH +Parallels and ATI Technologies Inc. Parallels using ATI Radeon Barts XT Prototype OpenGL Engine supported 3 1 2.1 AMD BARTS (HD 6800) +Parallels and ATI Technologies Inc. Parallels using ATI Radeon HD 2600 OpenGL Engine supported 2 1 4 ATI Radeon HD 2600 +Parallels and ATI Technologies Inc. Parallels using ATI Radeon HD 2600 PRO OpenGL Engine supported 2 1 4 ATI Radeon HD 2600 +Parallels and ATI Technologies Inc. Parallels using ATI Radeon HD 4670 OpenGL Engine supported 3 1 4 ATI Radeon HD 4600 +Parallels and ATI Technologies Inc. Parallels using ATI Radeon HD 4850 OpenGL Engine supported 3 1 4 ATI Radeon HD 4800 +Parallels and ATI Technologies Inc. Parallels using ATI Radeon HD 5670 OpenGL Engine supported 3 1 4.2 ATI Radeon HD 5600 +Parallels and ATI Technologies Inc. Parallels using ATI Radeon HD 5750 OpenGL Engine supported 3 1 4.2 ATI Radeon HD 5700 +Parallels and ATI Technologies Inc. Parallels using ATI Radeon HD 5770 OpenGL Engine supported 3 1 4.2 ATI Radeon HD 5700 +Parallels and ATI Technologies Inc. Parallels using ATI Radeon HD 6630M OpenGL Engine supported 3 1 4.2 ATI Radeon HD 6600 +Parallels and ATI Technologies Inc. Parallels using ATI Radeon HD 6750M OpenGL Engine supported 3 1 4.2 ATI Radeon HD 6700 +Parallels and ATI Technologies Inc. Parallels using ATI Radeon HD 6770M OpenGL Engine supported 3 1 4.2 ATI Radeon HD 6700 +Parallels and ATI Technologies Inc. Parallels using ATI Radeon HD 6970M OpenGL Engine supported 5 1 4.2 ATI Radeon HD 6900 +Parallels and ATI Technologies Inc. Parallels using ATI Radeon X1600 OpenGL Engine supported 2 1 2.1 ATI Radeon X1600 +Parallels and Intel Inc. Parallels using Intel GMA X3100 OpenGL Engine supported 1 1 2.1 Intel X3100 +Parallels and Intel Inc. Parallels using Intel HD Graphics 3000 OpenGL Engine supported 3 1 3.1 Intel HD Graphics 3000 +Parallels and Intel Inc. Parallels using Intel HD Graphics 4000 OpenGL Engine supported 3 1 4 Intel HD Graphics 4000 +Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce 320M OpenGL Engine supported 3 0 3.3 NVIDIA GT 320M +Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce 8800 GS OpenGL Engine supported 3 1 3.3 NVIDIA GeForce 8800 +Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce 9400 OpenGL Engine supported 3 1 3.3 NVIDIA GeForce 9400 +Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce 9400M OpenGL Engine supported 2 1 3.3 NVIDIA GeForce 9400M +Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce 9600M GT OpenGL Engine supported 2 1 3.3 NVIDIA GeForce 9600M +Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GT 130 OpenGL Engine supported 2 0 3.3 NVIDIA GT 130 +Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GT 330M OpenGL Engine supported 3 1 3.3 NVIDIA GT 330M +Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GT 640 OpenGL Engine supported 3 0 4.2 NVIDIA GT 640 +Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GT 640M OpenGL Engine supported 3 0 4.2 NVIDIA GT 640M +Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GT 650M OpenGL Engine supported 3 0 4.2 NVIDIA GT 650M +Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GTX 570 OpenGL Engine supported 5 1 4.2 NVIDIA GTX 570 +Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GTX 660 OpenGL Engine supported 5 0 4.2 NVIDIA GTX 660 +Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GTX 660 Ti OpenGL Engine supported 5 0 4.2 NVIDIA GTX 660 +Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GTX 670 OpenGL Engine supported 5 1 4.2 NVIDIA GTX 670 +Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GTX 680MX OpenGL Engine supported 5 0 4.2 NVIDIA GTX 680M +PowerVR SGX545 supported 1 1 3 PowerVR SGX545 +S3 NO MATCH +S3 Graphics K8M800/MMX/K3D unsupported 0 1 1.4 S3 +S3 Graphics KM400/KN400/MMX/SSE unsupported 0 1 1.4 S3 +S3 Graphics P8M800/MMX/SSE unsupported 0 1 1.4 S3 +S3 Graphics Unknown Device/MMX/SSE unsupported 0 1 1.4 S3 +S3 Graphics VIA/S3G UniChrome IGP/MMX/SSE unsupported 0 1 1.4 S3 +S3 Graphics VIA/S3G UniChrome Pro IGP/MMX/SSE unsupported 0 1 1.4 S3 +S3 Graphics, Incorporated ProSavage/Twister unsupported 0 1 1.4 S3 +S3 Graphics, Incorporated S3 Graphics Chrome9 HC unsupported 0 1 1.4 S3 +S3 Graphics, Incorporated S3 Graphics DeltaChrome unsupported 0 1 1.4 S3 +S3 Graphics, Incorporated VIA Chrome9 HC IGP unsupported 0 1 1.4 S3 +S3 Graphics, Incorporated VIA Chrome9 HC3 IGP unsupported 0 1 1.4 S3 +S3 Graphics, Incorporated VIA Chrome9 HD Pro IGP unsupported 0 1 1.4 S3 +SiS unsupported 0 1 1.5 SiS +SiS 3D-Analyze v2.3 - http://www.tommti-systems.com unsupported 0 1 1.5 SiS +SiS 650/M650 VGA unsupported 0 1 1.5 SiS +SiS 650/M650 VGA / MMX/SSE2 /AGP unsupported 0 1 1.5 SiS +SiS 661 VGA unsupported 0 1 1.5 SiS +SiS 662 VGA unsupported 0 1 1.5 SiS +SiS 760 VGA unsupported 0 1 1.5 SiS +SiS 761GX VGA unsupported 0 1 1.5 SiS +SiS Mirage Graphics3 unsupported 0 1 1.5 SiS +SiS Xabre VGA unsupported 0 1 1.5 SiS +Tungsten Graphics, Inc Mesa DRI Intel(R) 845G unsupported 0 1 1.4 Intel 845G +Tungsten Graphics, Inc Mesa DRI Intel(R) 852GM/855GM unsupported 0 1 1.4 Intel 855GM +Tungsten Graphics, Inc Mesa DRI Intel(R) 852GM/855GM x86/MMX/SSE2 unsupported 0 1 1.4 Intel 855GM +Tungsten Graphics, Inc Mesa DRI Intel(R) 865G unsupported 0 1 1.4 Intel 865G +Tungsten Graphics, Inc Mesa DRI Intel(R) 865G x86/MMX/SSE2 unsupported 0 1 1.4 Intel 865G +Tungsten Graphics, Inc Mesa DRI Intel(R) 915G unsupported 0 1 1.4 Intel 915G +Tungsten Graphics, Inc Mesa DRI Intel(R) 915G x86/MMX/SSE2 unsupported 0 1 1.4 Intel 915G +Tungsten Graphics, Inc Mesa DRI Intel(R) 915GM unsupported 0 1 1.4 Intel 915GM +Tungsten Graphics, Inc Mesa DRI Intel(R) 915GM 20061017 x86/MMX/SSE2 unsupported 0 1 1.4 Intel 915GM +Tungsten Graphics, Inc Mesa DRI Intel(R) 915GM GEM 20091221 2009Q4 x86/MMX/SSE2 unsupported 0 1 1.4 Intel 915GM +Tungsten Graphics, Inc Mesa DRI Intel(R) 915GM x86/MMX/SSE2 unsupported 0 1 1.4 Intel 915GM +Tungsten Graphics, Inc Mesa DRI Intel(R) 945G GEM 20091221 2009Q4 x86/MMX/SSE2 supported 0 1 1.4 Intel 945G +Tungsten Graphics, Inc Mesa DRI Intel(R) 945G GEM 20100330 DEVELOPMENT x86/MMX/SSE2 supported 0 1 1.4 Intel 945G +Tungsten Graphics, Inc Mesa DRI Intel(R) 945G x86/MMX/SSE2 supported 0 1 1.4 Intel 945G +Tungsten Graphics, Inc Mesa DRI Intel(R) 945GM GEM 20091221 2009Q4 x86/MMX/SSE2 supported 0 1 1.4 Intel 945GM +Tungsten Graphics, Inc Mesa DRI Intel(R) 945GM x86/MMX/SSE2 supported 0 1 1.4 Intel 945GM +Tungsten Graphics, Inc Mesa DRI Intel(R) 945GME supported 0 1 1.4 Intel 945GM +Tungsten Graphics, Inc Mesa DRI Intel(R) 945GME GEM 20091221 2009Q4 x86/MMX/SSE2 supported 0 1 1.4 Intel 945GM +Tungsten Graphics, Inc Mesa DRI Intel(R) 945GME x86/MMX/SSE2 supported 0 1 1.4 Intel 945GM +Tungsten Graphics, Inc Mesa DRI Intel(R) 965GM supported 0 1 2.1 Intel 965 +Tungsten Graphics, Inc Mesa DRI Intel(R) 965GM GEM 20091221 2009Q4 x86/MMX/SSE2 supported 0 1 2.1 Intel 965 +Tungsten Graphics, Inc Mesa DRI Intel(R) 965GM x86/MMX/SSE2 supported 0 1 2.1 Intel 965 +Tungsten Graphics, Inc Mesa DRI Intel(R) 965GME/GLE x86/MMX/SSE2 supported 0 1 2.1 Intel 965 +Tungsten Graphics, Inc Mesa DRI Intel(R) 965Q supported 0 1 2.1 Intel 965 +Tungsten Graphics, Inc Mesa DRI Intel(R) 965Q GEM 20091221 2009Q4 x86/MMX/SSE2 supported 0 1 2.1 Intel 965 +Tungsten Graphics, Inc Mesa DRI Intel(R) 965Q x86/MMX/SSE2 supported 0 1 2.1 Intel 965 +Tungsten Graphics, Inc Mesa DRI Intel(R) G33 GEM 20091221 2009Q4 x86/MMX/SSE2 unsupported 1 1 1.4 Intel G33 +Tungsten Graphics, Inc Mesa DRI Intel(R) G33 x86/MMX/SSE2 unsupported 1 1 1.4 Intel G33 +Tungsten Graphics, Inc Mesa DRI Intel(R) G41 GEM 20091221 2009Q4 x86/MMX/SSE2 supported 1 1 2.1 Intel G41 +Tungsten Graphics, Inc Mesa DRI Intel(R) G41 GEM 20100330 DEVELOPMENT x86/MMX/SSE2 supported 1 1 2.1 Intel G41 +Tungsten Graphics, Inc Mesa DRI Intel(R) G41 x86/MMX/SSE2 supported 1 1 2.1 Intel G41 +Tungsten Graphics, Inc Mesa DRI Intel(R) IGD unsupported 1 1 3 Mesa +Tungsten Graphics, Inc Mesa DRI Intel(R) IGD x86/MMX/SSE2 unsupported 1 1 3 Mesa +Tungsten Graphics, Inc Mesa DRI Intel(R) IGD GEM 20091221 2009Q4 supported 1 1 2.1 Intel Q45/Q43 +Tungsten Graphics, Inc Mesa DRI Intel(R) IGD GEM 20091221 2009Q4 x86/MMX/SSE2 supported 1 1 2.1 Intel Q45/Q43 +Tungsten Graphics, Inc Mesa DRI Intel(R) IGD x86/MMX/SSE2 unsupported 1 1 3 Mesa +Tungsten Graphics, Inc Mesa DRI Intel(R) IGDNG_M GEM 20091221 2009Q4 supported 1 1 2.1 Intel Q45/Q43 +Tungsten Graphics, Inc Mesa DRI Intel(R) IGDNG_M GEM 20091221 2009Q4 x86/MMX/SSE2 supported 1 1 2.1 Intel Q45/Q43 +Tungsten Graphics, Inc Mesa DRI Intel(R) Ironlake Desktop unsupported 1 1 3 Mesa +Tungsten Graphics, Inc Mesa DRI Intel(R) Ironlake Desktop x86/MMX/SSE2 unsupported 1 1 3 Mesa +Tungsten Graphics, Inc Mesa DRI Intel(R) Ironlake Mobile unsupported 1 1 3 Mesa +Tungsten Graphics, Inc Mesa DRI Intel(R) Ironlake Mobile GEM 20100330 DEVELOPMENT x86/MMX/SSE2 unsupported 1 1 3 Mesa +Tungsten Graphics, Inc Mesa DRI Intel(R) Ironlake Mobile x86/MMX/SSE2 unsupported 1 1 3 Mesa +Tungsten Graphics, Inc Mesa DRI Intel(R) Ivybridge Desktop unsupported 1 1 3 Mesa +Tungsten Graphics, Inc Mesa DRI Intel(R) Ivybridge Desktop x86/MMX/SSE2 unsupported 1 1 3 Mesa +Tungsten Graphics, Inc Mesa DRI Intel(R) Ivybridge Mobile unsupported 1 1 3 Mesa +Tungsten Graphics, Inc Mesa DRI Intel(R) Ivybridge Mobile x86/MMX/SSE2 unsupported 1 1 3 Mesa +Tungsten Graphics, Inc Mesa DRI Intel(R) Q35 GEM 20091221 2009Q4 x86/MMX/SSE2 supported 1 1 2.1 Intel Q45/Q43 +Tungsten Graphics, Inc Mesa DRI Intel(R) Q35 x86/MMX/SSE2 unsupported 1 1 3 Mesa +Tungsten Graphics, Inc Mesa DRI Intel(R) Q45/Q43 x86/MMX/SSE2 supported 1 1 2.1 Intel Q45/Q43 +Tungsten Graphics, Inc Mesa DRI Intel(R) Sandybridge Desktop unsupported 1 1 3 Mesa +Tungsten Graphics, Inc Mesa DRI Intel(R) Sandybridge Desktop x86/MMX/SSE2 unsupported 1 1 3 Mesa +Tungsten Graphics, Inc Mesa DRI Intel(R) Sandybridge Mobile unsupported 1 1 3 Mesa +Tungsten Graphics, Inc Mesa DRI Intel(R) Sandybridge Mobile x86/MMX/SSE2 unsupported 1 1 3 Mesa +Tungsten Graphics, Inc Mesa DRI Intel(R) Sandybridge Mobile GEM 20100330 DEVELOPMENT x86/MMX/SSE2 unsupported 1 1 3 Mesa +Tungsten Graphics, Inc Mesa DRI Intel(R) Sandybridge Mobile x86/MMX/SSE2 unsupported 1 1 3 Mesa +Tungsten Graphics, Inc Mesa DRI Intel(R) Sandybridge Server unsupported 1 1 3 Mesa +Tungsten Graphics, Inc Mesa DRI Mobile Intel GM45 Express Chipset unsupported 1 1 3 Mesa +Tungsten Graphics, Inc Mesa DRI Mobile Intel GM45 Express Chipset GEM 20091221 2009Q4 supported 1 1 2.1 Intel Q45/Q43 +Tungsten Graphics, Inc Mesa DRI Mobile Intel GM45 Express Chipset GEM 20091221 2009Q4 x86/MMX/SSE2 supported 1 1 2.1 Intel Q45/Q43 +Tungsten Graphics, Inc Mesa DRI Mobile Intel GM45 Express Chipset GEM 20100330 DEVELOPMENT x86/MMX unsupported 1 1 3 Mesa +Tungsten Graphics, Inc Mesa DRI Mobile Intel GM45 Express Chipset x86/MMX/SSE2 unsupported 1 1 3 Mesa +Tungsten Graphics, Inc. Mesa DRI R100 (RS200 4437) x86/MMX/SSE2 NO-TCL DRI2 unsupported 1 1 3 Mesa +Tungsten Graphics, Inc. Mesa DRI R100 (RV200 4C57) TCL DRI2 unsupported 1 1 3 Mesa +Tungsten Graphics, Inc. Mesa DRI R100 (RV200 4C57) x86/MMX/SSE2 TCL DRI2 unsupported 1 1 3 Mesa +Tungsten Graphics, Inc. Mesa DRI R200 (RV250 4C66) x86/MMX/SSE2 TCL DRI2 unsupported 1 1 3 Mesa +Tungsten Graphics, Inc. Mesa DRI R200 (RV280 5960) x86/MMX+/3DNow!+/SSE2 TCL DRI2 unsupported 1 1 3 Mesa +Tungsten Graphics, Inc. Mesa DRI R200 (RV280 5960) x86/MMX/SSE2 TCL DRI2 unsupported 1 1 3 Mesa +Tungsten Graphics, Inc. Mesa DRI R200 (RV280 5961) x86/MMX/SSE2 TCL DRI2 unsupported 1 1 3 Mesa +VMware, Inc. Gallium 0.3 on SVGA3D; build: RELEASE; supported 1 1 2.1 Gallium +VMware, Inc. Gallium 0.4 on SVGA3D; build: RELEASE; supported 1 1 2.1 Gallium +VMware, Inc. Gallium 0.4 on i915 (chipset: 945GME) supported 1 1 2.1 Gallium +VMware, Inc. Gallium 0.4 on llvmpipe supported 1 1 2.1 Gallium +VMware, Inc. Gallium 0.4 on llvmpipe (LLVM 0x209) supported 1 1 2.1 Gallium +VMware, Inc. Gallium 0.4 on llvmpipe (LLVM 0x300) supported 1 1 2.1 Gallium +VMware, Inc. Gallium 0.4 on llvmpipe (LLVM 0x301) supported 1 1 2.1 Gallium +VMware, Inc. Gallium 0.4 on llvmpipe (LLVM 0x302) supported 1 1 2.1 Gallium +VMware, Inc. Gallium 0.4 on llvmpipe (LLVM 3.2, 128 bits) supported 1 1 2.1 Gallium +VMware, Inc. Gallium 0.4 on llvmpipe (LLVM 3.2, 256 bits) supported 1 1 2.1 Gallium +VMware, Inc. Gallium 0.4 on llvmpipe (LLVM 3.3, 128 bits) supported 1 1 2.1 Gallium +X.Org Gallium 0.4 on AMD ARUBA supported 1 1 2.1 Gallium +X.Org Gallium 0.4 on AMD BARTS supported 3 1 2.1 AMD BARTS (HD 6800) +X.Org Gallium 0.4 on AMD CAICOS supported 3 0 0 AMD CAICOS (HD 6400) +X.Org Gallium 0.4 on AMD CAPE VERDE supported 1 1 2.1 Gallium +X.Org Gallium 0.4 on AMD CEDAR supported 2 0 2.1 AMD CEDAR (HD 5450) +X.Org Gallium 0.4 on AMD CYPRESS supported 3 0 0 AMD CYPRESS (HD 5800) +X.Org Gallium 0.4 on AMD JUNIPER supported 3 0 0 AMD JUNIPER (HD 5700) +X.Org Gallium 0.4 on AMD PALM supported 1 1 2.1 Gallium +X.Org Gallium 0.4 on AMD REDWOOD supported 3 0 1.4 AMD REDWOOD (HD 5500/5600) +X.Org Gallium 0.4 on AMD RS780 supported 0 1 2.1 AMD RS780 (HD 3200) +X.Org Gallium 0.4 on AMD RS880 supported 0 1 3.2 AMD RS880 (HD 4200) +X.Org Gallium 0.4 on AMD RV610 supported 1 0 0 AMD RV610 (HD 2400) +X.Org Gallium 0.4 on AMD RV620 supported 1 0 0 AMD RV620 (HD 3400) +X.Org Gallium 0.4 on AMD RV630 supported 2 0 0 AMD RV630 (HD 2600) +X.Org Gallium 0.4 on AMD RV635 supported 3 0 1.4 AMD RV635 (HD 3600) +X.Org Gallium 0.4 on AMD RV670 supported 3 0 0 AMD RV670 (HD 3800) +X.Org Gallium 0.4 on AMD RV710 supported 0 1 1.4 AMD RV710 (HD 4300) +X.Org Gallium 0.4 on AMD RV730 supported 3 0 1.4 AMD RV730 (HD 4600) +X.Org Gallium 0.4 on AMD RV740 supported 3 0 0 AMD RV740 (HD 4700) +X.Org Gallium 0.4 on AMD RV770 supported 3 0 0 AMD RV770 (HD 4800) +X.Org Gallium 0.4 on AMD SUMO supported 3 1 4.1 AMD SUMO +X.Org Gallium 0.4 on AMD SUMO2 supported 3 1 4.1 AMD SUMO +X.Org Gallium 0.4 on AMD TURKS supported 3 0 2.1 AMD TURKS (HD 6500/6600) +X.Org R300 Project Gallium 0.4 on ATI R350 supported 0 1 2.1 ATI R300 (9700) +X.Org R300 Project Gallium 0.4 on ATI R580 supported 0 1 2.1 ATI R300 (9700) +X.Org R300 Project Gallium 0.4 on ATI RC410 supported 0 1 2.1 ATI R300 (9700) +X.Org R300 Project Gallium 0.4 on ATI RS480 supported 0 1 2.1 ATI R300 (9700) +X.Org R300 Project Gallium 0.4 on ATI RS482 supported 0 1 2.1 ATI R300 (9700) +X.Org R300 Project Gallium 0.4 on ATI RS600 supported 0 1 2.1 ATI R300 (9700) +X.Org R300 Project Gallium 0.4 on ATI RS690 supported 0 1 2.1 ATI R300 (9700) +X.Org R300 Project Gallium 0.4 on ATI RV350 supported 0 1 2.1 ATI R300 (9700) +X.Org R300 Project Gallium 0.4 on ATI RV370 supported 0 1 2.1 ATI R300 (9700) +X.Org R300 Project Gallium 0.4 on ATI RV380 supported 0 1 2.1 ATI R300 (9700) +X.Org R300 Project Gallium 0.4 on ATI RV410 supported 0 1 2.1 ATI R300 (9700) +X.Org R300 Project Gallium 0.4 on ATI RV515 supported 0 1 2.1 ATI R300 (9700) +X.Org R300 Project Gallium 0.4 on ATI RV530 supported 0 1 2.1 ATI R300 (9700) +X.Org R300 Project Gallium 0.4 on ATI RV570 supported 0 1 2.1 ATI R300 (9700) +XGI Volari V3 unsupported 0 0 0 XGI +http://TitaniumGL.tk NVIDIA GeForce GTX 690/3999M VRAM/TitaniumGL/4 THREADs/3D GRAPHICS ACCELERATION supported 5 1 4.3 NVIDIA GTX 690 +nouveau Gallium 0.4 on NV34 supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NV42 supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NV44 supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NV46 supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NV49 supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NV4A supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NV4B supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NV4C supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NV4E supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NV50 supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NV63 supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NV67 supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NV84 supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NV86 supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NV92 supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NV94 supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NV96 supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NV98 supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NVA0 supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NVA3 supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NVA5 supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NVA8 supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NVAA supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NVAC supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NVAF supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NVC0 supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NVC1 supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NVC3 supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NVC4 supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NVCE supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NVCF supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NVD9 supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NVE4 supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NVE6 supported 1 1 2.1 Gallium +nouveau Gallium 0.4 on NVE7 supported 1 1 2.1 Gallium -- cgit v1.2.3 From 7f742fc493cfd781a82f37ccf6fad394fe907be3 Mon Sep 17 00:00:00 2001 From: Graham Linden Date: Wed, 28 Aug 2013 13:27:34 -0700 Subject: STORM-1950 MAINT-2981 Update regex to fix unmatched entries from Oz stats pull --- indra/newview/gpu_table.txt | 225 +++++++++++++++++++++++++------------------- 1 file changed, 127 insertions(+), 98 deletions(-) diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt index eef760b9c2..990693d79e 100755 --- a/indra/newview/gpu_table.txt +++ b/indra/newview/gpu_table.txt @@ -34,7 +34,11 @@ 3Dfx .*3Dfx.* 0 0 0 0 3Dlabs .*3Dlabs.* 0 0 0 0 +Hijacker .*Mohr.*Hijacker.* 0 0 0 0 +ATI GeForce Lulz .*ATI.*GeForce.* 0 0 0 0 ATI 3D-Analyze .*ATI.*3D-Analyze.* 0 0 0 0 +ATI Protoype .*ATI.*Prototype.* 0 0 0 0 +ATI ARES .*ATI.*ARES.* 0 0 0 0 ATI All-in-Wonder 7500 .*ATI.*All-in-Wonder 75.* 0 1 0 0 ATI All-in-Wonder 8500 .*ATI.*All-in-Wonder 85.* 0 1 0 0 ATI All-in-Wonder 9200 .*ATI.*All-in-Wonder 92.* 0 1 0 0 @@ -46,14 +50,14 @@ ATI All-in-Wonder X1800 .*ATI.*All-in-Wonder X18.* 3 1 0 0 ATI All-in-Wonder X1900 .*ATI.*All-in-Wonder X19.* 3 1 0 0 ATI All-in-Wonder PCI-E .*ATI.*All-in-Wonder.*PCI-E.* 1 1 0 0 ATI All-in-Wonder Radeon .*ATI.*All-in-Wonder Radeon.* 0 1 0 0 -ATI Radeon X1300 .*ATI.*(Radeon|Diamond|ASUS) X13.* ?.* 2 1 1 2.1 -ATI Radeon X1400 .*ATI.*(Radeon|Diamond|ASUS) X14.* ?.* 2 1 1 2.1 -ATI Radeon X1500 .*ATI.*(Radeon|Diamond|ASUS) X15.* ?.* 2 1 1 2.1 -ATI Radeon X1600 .*ATI.*(Radeon|Diamond|ASUS) X16.* ?.* 2 1 1 2.1 -ATI Radeon X1700 .*ATI.*(Radeon|Diamond|ASUS) X17.* ?.* 2 1 1 2.1 -ATI Radeon X1800 .*ATI.*(Radeon|Diamond|ASUS) X18.* ?.* 3 1 1 2.1 -ATI Radeon X1900 .*ATI.*(Radeon|Diamond|ASUS) X19.* ?.* 2 1 1 2.1 -ATI Radeon X2800 .*ATI.*(Radeon|Diamond|ASUS) X28.* ?.* 2 1 1 2.1 +ATI Radeon X1300 .*ATI.*(Radeon|Diamond|ASUS) *X13.* ?.* 2 1 1 2.1 +ATI Radeon X1400 .*ATI.*(Radeon|Diamond|ASUS) *X14.* ?.* 2 1 1 2.1 +ATI Radeon X1500 .*ATI.*(Radeon|Diamond|ASUS) *X15.* ?.* 2 1 1 2.1 +ATI Radeon X1600 .*ATI.*(Radeon|Diamond|ASUS) *X16.* ?.* 2 1 1 2.1 +ATI Radeon X1700 .*ATI.*(Radeon|Diamond|ASUS) *X17.* ?.* 2 1 1 2.1 +ATI Radeon X1800 .*ATI.*(Radeon|Diamond|ASUS) *X18.* ?.* 3 1 1 2.1 +ATI Radeon X1900 .*ATI.*(Radeon|Diamond|ASUS) *X19.* ?.* 2 1 1 2.1 +ATI Radeon X2800 .*ATI.*(Radeon|Diamond|ASUS) *X28.* ?.* 2 1 1 2.1 ATI Display Adapter .*ATI.*display adapter.* 1 1 1 4.1 ATI FireGL 5200 .*ATI.*FireGL V52.* 1 1 1 2.1 ATI FireGL 5xxx .*ATI.*FireGL V5.* 2 1 1 3.3 @@ -106,6 +110,10 @@ ATI Mobility Radeon HD 5400 .*ATI.*Mobility.*HD 54.* 2 1 1 4.2 ATI Mobility Radeon HD 5500 .*ATI.*Mobility.*HD 55.* 3 1 0 4.2 ATI Mobility Radeon HD 5600 .*ATI.*Mobility.*HD 56.* 3 1 1 4.2 ATI Mobility Radeon HD 5700 .*ATI.*Mobility.*HD 57.* 3 1 1 4.1 +ATI Mobility Radeon X1000 .*ATI.*Mobility.*Radeon ?X1.* 2 1 0 2.1 +ATI Mobility Radeon X1200 .*ATI.*Mobility.*Radeon ?X12.* 2 1 0 2.1 +ATI Mobility Radeon X2000 .*ATI.*Mobility.*Radeon ?X2.* 2 1 0 2.1 +ATI Mobility Radeon XX000 .*ATI.*Mobility.*Radeon ?Xx.* 2 1 0 2.1 ATI Radeon HD 6200D/G/M .*ATI.*AMD Radeon.* (HD|HD )62..[DGM].* 3 1 0 4.2 ATI Radeon HD 6300D/G/M .*ATI.*AMD Radeon.* (HD|HD )63..[DGM].* 3 1 1 4.2 ATI Radeon HD 6400D/G/M .*ATI.*AMD Radeon.* (HD|HD )64..[DGM].* 3 1 0 4.2 @@ -130,33 +138,36 @@ ATI Radeon HD 8600D/G/M .*ATI.*AMD Radeon.* (HD|HD )86..[DGM].* 4 1 0 4.2 ATI Radeon HD 8700D/G/M .*ATI.*AMD Radeon.* (HD|HD )87..[DGM].* 4 1 0 4.2 ATI Radeon HD 8800D/G/M .*ATI.*AMD Radeon.* (HD|HD )88..[DGM].* 4 1 0 4.2 ATI Radeon HD 8900D/G/M .*ATI.*AMD Radeon.* (HD|HD )89..[DGM].* 4 1 0 4.2 +ATI Radeon HD 5xx .*ATI.*(Radeon|ASUS).* (AH|AX|HD|HD |EAH)5x. 1 1 1 4 ATI Radeon HD 2300 .*ATI.*Radeon.* (HD|HD )23.. 0 1 1 3.3 -ATI Radeon HD 2400 .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)24.. 1 1 1 4 -ATI Radeon HD 2600 .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)26.. 2 1 1 4 +ATI Radeon HD 2400 .*ATI.*(Radeon|ASUS).* (AH|AX|HD|HD |EAH)24.. 1 1 1 4 +ATI Radeon HD 2600 .*ATI.*(Radeon|ASUS).* (AH|AX|HD|HD |EAH)26.. 2 1 1 4 ATI Radeon HD 2900 .*ATI.*Radeon.* (HD|HD )29.. 3 1 1 3.3 ATI Radeon HD 3000 .*ATI.*Radeon.* (HD|HD )30.. 0 1 0 0 ATI Radeon HD 3100 .*ATI.*Radeon.* (HD|HD )31.. 1 1 0 0 ATI Radeon HD 3200 .*ATI.*Radeon.* (HD|HD )32.. 1 1 1 4 ATI Radeon HD 3300 .*ATI.*Radeon.* (HD|HD )33.. 1 1 1 3.3 -ATI Radeon HD 3400 .*ATI.*(Radeon|ASUS).* (HD|HD |AH|EAH)34.. 1 1 1 4 +ATI Radeon HD 3400 .*ATI.*(Radeon|ASUS).* (AH|AX|HD|HD |AH||AX|EAH)34.. 1 1 1 4 ATI Radeon HD 3500 .*ATI.*Radeon.* (HD|HD )35.. 2 1 0 0 -ATI Radeon HD 3600 .*ATI.*(Radeon|ASUS).* (HD|HD |AH|EAH)36.. 3 1 1 4 +ATI Radeon HD 3600 .*ATI.*(Radeon|ASUS).* (AH|AX|HD|HD |AH||AX|EAH)36.. 3 1 1 4 ATI Radeon HD 3700 .*ATI.*Radeon.* (HD|HD )37.. 3 1 0 3.3 ATI HD3700 .*ATI.* HD37.. 3 1 0 3.3 -ATI Radeon HD 3800 .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)38.. 3 1 1 4 +ATI Radeon HD 3800 .*ATI.*(Radeon|ASUS).* (AH|AX|HD|HD |EAH|AX|)38.. 3 1 1 4 ATI Radeon HD 4100 .*ATI.*Radeon.* (HD|HD )41.. 1 1 0 0 ATI Radeon HD 4200 .*ATI.*Radeon.* (HD|HD )42.. 1 1 1 4 -ATI Radeon HD 4300 .*ATI.*(Radeon|ASUS).* (HD4|HD 4|EAH4|4)3.. 2 1 1 4 +ATI Radeon HD 4300 .*ATI.*(Radeon|ASUS).* (AH|AX|HD4|HD 4|EAH4|4)3.. 2 1 1 4 ATI Radeon HD 4400 .*ATI.*Radeon.* (HD|HD )44.. 2 1 0 0 -ATI Radeon HD 4500 .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)45.. 2 1 1 3.3 -ATI Radeon HD 4600 .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)46.. 3 1 1 4 -ATI Radeon HD 4700 .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)47.. 3 1 1 3.3 -ATI Radeon HD 4800 .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)48.. 3 1 1 4 -ATI Radeon HD 5400 .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)54.. 3 1 1 4.2 -ATI Radeon HD 5500 .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)55.. 3 1 1 4.2 -ATI Radeon HD 5600 .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)56.. 3 1 1 4.2 -ATI Radeon HD 5700 .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)57.. 3 1 1 4.2 -ATI Radeon HD 5800 .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)58.. 4 1 1 4.2 +ATI Radeon HD 4500 .*ATI.*(Radeon|ASUS).* (AH|AX|HD|HD |EAH)45.. 2 1 1 3.3 +ATI RADEON E4690 .*ATI.*RADEON.* E46.. 3 1 1 4 +ATI Radeon HD 4600 .*ATI.*(Radeon|ASUS).* (AH|AX|HD|HD |EAH)46.. 3 1 1 4 +ATI Radeon HD 4700 .*ATI.*(Radeon|ASUS).* (AH|AX|HD|HD |EAH)47.. 3 1 1 3.3 +ATI Radeon HD 4800 .*ATI.*(Radeon|ASUS).* (AH|AX|HD|HD |EAH)48.. 3 1 1 4 +ATI Radeon HD 5000 .*ATI.*(Radeon|ASUS).* (AH|AX|HD|HD |EAH)50.. 3 1 1 4.2 +ATI Radeon HD 5400 .*ATI.*(Radeon|ASUS).* (AH|AX|HD|HD |EAH)54.. 3 1 1 4.2 +ATI Radeon HD 5500 .*ATI.*(Radeon|ASUS).* (AH|AX|HD|HD |EAH)55.. 3 1 1 4.2 +ATI Radeon HD 5600 .*ATI.*(Radeon|ASUS).* (AH|AX|HD|HD |EAH)56.. 3 1 1 4.2 +ATI Radeon HD 5700 .*ATI.*(Radeon|ASUS).* (AH|AX|HD|HD |EAH)57.. 3 1 1 4.2 +ATI Radeon HD 5800 .*ATI.*(Radeon|ASUS).* (AH|AX|HD|HD |EAH)58.. 4 1 1 4.2 ATI Radeon HD 5900 .*ATI.*Radeon.* (HD|HD )59.. 4 1 1 4.2 ATI Radeon HD 6200 .*ATI.*Radeon.* (HD|HD )62.. 0 1 1 4.2 ATI Radeon HD 6300 .*ATI.*Radeon.* (HD|HD )63.. 1 1 1 4.2 @@ -166,23 +177,25 @@ ATI Radeon HD 6600 .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)66.. 3 1 1 4.2 ATI Radeon HD 6700 .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)67.. 3 1 1 4.2 ATI Radeon HD 6800 .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)68.. 4 1 1 4.2 ATI Radeon HD 6900 .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)69.. 5 1 1 4.2 -ATI Radeon HD 7100 .*ATI.*(Radeon|ASUS).* (HD|HD )71.* 2 1 0 0 -ATI Radeon HD 7200 .*ATI.*(Radeon|ASUS).* (HD|HD )72.* 2 1 0 4.2 -ATI Radeon HD 7300 .*ATI.*(Radeon|ASUS).* (HD|HD )73.* 2 1 0 4.2 -ATI Radeon HD 7400 .*ATI.*(Radeon|ASUS).* (HD|HD )74.* 2 1 0 4.2 -ATI Radeon HD 7500 .*ATI.*(Radeon|ASUS).* (HD|HD )75.* 3 1 1 4.2 -ATI Radeon HD 7600 .*ATI.*(Radeon|ASUS).* (HD|HD )76.* 3 1 0 4.2 -ATI Radeon HD 7700 .*ATI.*(Radeon|ASUS).* (HD|HD )77.* 4 1 1 4.2 -ATI Radeon HD 7800 .*ATI.*(Radeon|ASUS).* (HD|HD )78.* 5 1 1 4.2 -ATI Radeon HD 7900 .*ATI.*(Radeon|ASUS).* (HD|HD )79.* 5 1 1 4.2 -ATI Radeon HD 7000 Series .*ATI.*(Radeon|ASUS).* (HD|HD )7000 Series.* 3 1 1 4.2 -ATI Radeon HD 8300 (OEM) .*ATI.*(Radeon|ASUS).* (HD|HD )83.* 2 1 0 4.2 -ATI Radeon HD 8400 (OEM) .*ATI.*(Radeon|ASUS).* (HD|HD )84.* 2 1 0 4.2 -ATI Radeon HD 8500 (OEM) .*ATI.*(Radeon|ASUS).* (HD|HD )85.* 3 1 1 4.2 -ATI Radeon HD 8600 (OEM) .*ATI.*(Radeon|ASUS).* (HD|HD )86.* 3 1 0 4.2 -ATI Radeon HD 8700 (OEM) .*ATI.*(Radeon|ASUS).* (HD|HD )87.* 4 1 1 4.2 -ATI Radeon HD 8800 (OEM) .*ATI.*(Radeon|ASUS).* (HD|HD )88.* 5 1 1 4.2 -ATI Radeon HD 8900 (OEM) .*ATI.*(Radeon|ASUS).* (HD|HD )89.* 5 1 1 4.2 +ATI Radeon HD 6x00 .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)6x.. 5 1 1 4.2 +ATI Radeon HD 7100 .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)71.* 2 1 0 0 +ATI Radeon HD 7200 .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)72.* 2 1 0 4.2 +ATI Radeon HD 7300 .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)73.* 2 1 0 4.2 +ATI Radeon HD 7400 .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)74.* 2 1 0 4.2 +ATI Radeon HD 7500 .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)75.* 3 1 1 4.2 +ATI Radeon HD 7600 .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)76.* 3 1 0 4.2 +ATI Radeon HD 7700 .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)77.* 4 1 1 4.2 +ATI Radeon HD 7800 .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)78.* 5 1 1 4.2 +ATI Radeon HD 7900 .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)79.* 5 1 1 4.2 +ATI Radeon HD 7000 Series .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)7000 Series.* 3 1 1 4.2 +ATI Radeon HD 8200 .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)82.* 2 1 0 4.2 +ATI Radeon HD 8300 (OEM) .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)83.* 2 1 0 4.2 +ATI Radeon HD 8400 (OEM) .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)84.* 2 1 0 4.2 +ATI Radeon HD 8500 (OEM) .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)85.* 3 1 1 4.2 +ATI Radeon HD 8600 (OEM) .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)86.* 3 1 0 4.2 +ATI Radeon HD 8700 (OEM) .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)87.* 4 1 1 4.2 +ATI Radeon HD 8800 (OEM) .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)88.* 5 1 1 4.2 +ATI Radeon HD 8900 (OEM) .*ATI.*(Radeon|ASUS).* (HD|HD |EAH)89.* 5 1 1 4.2 ATI Radeon OpenGL .*ATI.*Radeon OpenGL.* 0 0 0 0 ATI Radeon 2100 .*ATI.*Radeon 21.. 0 1 1 2.1 ATI Radeon 3000 .*ATI.*Radeon 30.. 1 1 1 4 @@ -206,14 +219,17 @@ ATI RS880M .*ATI.*RS880M 1 1 0 0 ATI Radeon RX9550 .*ATI.*RX9550.* 1 1 0 0 ATI Radeon VE .*ATI.*Radeon.*VE.* 0 0 0 0 ATI Radeon X300 .*ATI.*Radeon X3.* 1 1 1 2.1 +ATI RADEON X300SE .*ATI.*RADEON[ ]*X300SE* 1 1 1 2.1 ATI Radeon X400 .*ATI.*Radeon ?X4.* 0 1 0 0 ATI Radeon X500 .*ATI.*Radeon ?X5.* 1 1 1 2.1 ATI Radeon X600 .*ATI.*(Radeon |ASUS Extreme A)X6.* 1 1 1 2.1 ATI Radeon X700 .*ATI.*Radeon ?X7.* 2 1 1 2.1 ATI Radeon X800 .*ATI.*Radeon ?X8.* 1 1 1 2.1 ATI Radeon X900 .*ATI.*Radeon ?X9.* 2 1 0 0 -ATI Radeon X1000 .*ATI.*Radeon ?X10.* 2 1 0 2.1 +ATI Radeon X1000 .*ATI.*Radeon ?X1.* 2 1 0 2.1 +ATI Radeon X1100 .*ATI.*Radeon ?X11.* 2 1 0 2.1 ATI Radeon X1200 .*ATI.*Radeon ?X12.* 2 1 0 2.1 +ATI Radeon X2xxx .*ATI.*Radeon ?X2x.* 2 1 0 2.1 ATI Radeon X2300 .*ATI.*Radeon ?X23.* 2 1 0 2.1 ATI Radeon Xpress .*ATI.*Radeon Xpress.* 0 1 1 2.1 ATI Radeon .*ATI.*Radeon$ 3 1 0 0 @@ -264,14 +280,15 @@ AMD RV790 (HD 4800) .*RV790.* 3 1 0 0 ATI 760G/Radeon 3000 .*ATI.*AMD 760G.* 1 1 1 3.3 ATI 780L/Radeon 3000 .*ATI.*AMD 780L.* 1 1 0 0 ATI Radeon DDR .*ATI.*Radeon ?DDR.* 0 1 0 0 -ATI FirePro 2000 .*ATI.*FirePro 2.* 2 1 1 4.2 -ATI FirePro 3000 .*ATI.*FirePro V3.* 2 1 0 0 -ATI FirePro 4000 .*ATI.*FirePro V4.* 2 1 0 4.1 -ATI FirePro 5000 .*ATI.*FirePro V5.* 3 1 0 0 -ATI FirePro 7000 .*ATI.*FirePro V7.* 3 1 0 0 +ATI FirePro 2000 .*ATI.*FirePro [V]*2.* 2 1 1 4.2 +ATI FirePro 3000 .*ATI.*FirePro [V]*3.* 2 1 0 0 +ATI FirePro 4000 .*ATI.*FirePro [V]*4.* 2 1 0 4.1 +ATI FirePro 5000 .*ATI.*FirePro [V]*5.* 3 1 0 0 +ATI FirePro 7000 .*ATI.*FirePro [V]*7.* 3 1 0 0 ATI FirePro M .*ATI.*FirePro M.* 3 1 1 4.2 Intel X3100 .*Intel.*X3100.* 1 1 1 2.1 Intel GMA 3600 .*Intel.* 3600.* 0 1 1 3 +Intel Royal BNA .*Intel.*Royal[ ]*BNA.* 0 0 0 0 Intel 830M .*Intel.*830M 0 0 0 0 Intel 845G .*Intel.*845G 0 0 1 1.4 Intel 855GM .*Intel.*855GM 0 0 1 1.4 @@ -304,6 +321,7 @@ Intel Intel Iris Graphics 5100 .*Intel.*Iris Graphics 51.* 4 1 0 4 Intel HD Graphics 5000 .*Intel.*HD Graphics 5.* 4 1 0 4 Intel HD Graphics .*Intel.*HD Graphics.* 2 1 1 4 Intel Mobile 4 Series .*Intel.*Mobile.* 4 Series.* 0 1 1 2.1 +Intel Mobile 45 Express .*Intel.*Mobile.* 45 Express Chipset.* 0 1 0 2.1 Intel 4 Series Internal .*Intel.* 4 Series Internal.* 1 1 1 2.1 Intel Media Graphics HD .*Intel.*Media Graphics HD.* 0 1 0 0 Intel Montara .*Intel.*Montara.* 0 0 1 1.3 @@ -316,56 +334,57 @@ Intel 3D-Analyze .*Intel.*3D-Analyze.* 2 1 0 0 Matrox .*Matrox.* 0 0 0 0 Mesa .*Mesa.* 1 0 1 3 Gallium .*Gallium.* 1 1 1 2.1 -NVIDIA G 100M .*NVIDIA .*G 10[0-9]M.* 1 1 1 3.3 -NVIDIA G 110M .*NVIDIA .*G 11[0-9]M.* 1 1 1 3.3 -NVIDIA G 120M .*NVIDIA .*G 12[0-9]M.* 1 1 1 3.3 -NVIDIA G 200M .*NVIDIA .*G 20[0-9]M.* 1 1 0 0 -NVIDIA G 410M .*NVIDIA .*G 41[0-9]M.* 3 1 1 4.2 -NVIDIA GT 130M .*NVIDIA .*GT 13[0-9]M.* 3 1 1 3.3 -NVIDIA GT 140M .*NVIDIA .*GT 14[0-9]M.* 3 1 1 3.3 -NVIDIA GT 150M .*NVIDIA .*GTS 15[0-9]M.* 2 1 0 0 -NVIDIA GTS 160M .*NVIDIA .*GTS 16[0-9]M.* 2 1 0 0 -NVIDIA G210M .*NVIDIA .*G21[0-9]M.* 3 1 0 3.3 +NVIDIA G 100M .*NVIDIA .*G *10[0-9]M.* 1 1 1 3.3 +NVIDIA G 110M .*NVIDIA .*G *11[0-9]M.* 1 1 1 3.3 +NVIDIA G 120M .*NVIDIA .*G *12[0-9]M.* 1 1 1 3.3 +NVIDIA G 200M .*NVIDIA .*G *20[0-9]M.* 1 1 0 0 +NVIDIA G 410M .*NVIDIA .*G *41[0-9]M.* 3 1 1 4.2 +NVIDIA GT 130M .*NVIDIA .*GT *13[0-9]M.* 3 1 1 3.3 +NVIDIA GT 140M .*NVIDIA .*GT *14[0-9]M.* 3 1 1 3.3 +NVIDIA GT 150M .*NVIDIA .*GTS *15[0-9]M.* 2 1 0 0 +NVIDIA GTS 160M .*NVIDIA .*GTS *16[0-9]M.* 2 1 0 0 +NVIDIA G210M .*NVIDIA .*G *21[0-9]M.* 3 1 0 3.3 NVIDIA GT 220M .*NVIDIA .*GT 22[0-9]M.* 3 1 1 3.3 NVIDIA GT 230M .*NVIDIA .*GT 23[0-9]M.* 3 1 1 3.3 NVIDIA GT 240M .*NVIDIA .*GT 24[0-9]M.* 3 1 1 3.3 +NVIDIA GT 260M .*NVIDIA .*GT 26[0-9]M.* 3 1 1 3.3 NVIDIA GTS 250M .*NVIDIA .*GTS 25[0-9]M.* 3 1 0 3.3 NVIDIA GTS 260M .*NVIDIA .*GTS 26[0-9]M.* 3 1 0 0 NVIDIA GTX 260M .*NVIDIA .*GTX 26[0-9]M.* 3 1 0 3.3 NVIDIA GTX 270M .*NVIDIA .*GTX 27[0-9]M.* 3 1 0 0 NVIDIA GTX 280M .*NVIDIA .*GTX 28[0-9]M.* 3 1 0 3.3 NVIDIA 300M .*NVIDIA .*GT 30[0-9]M.* 3 1 1 4.2 -NVIDIA G 310M .*NVIDIA .* 31[0-9]M.* 2 1 0 3.3 -NVIDIA GT 320M .*NVIDIA .* 32[0-9]M.* 3 1 0 3.3 +NVIDIA G 310M .*NVIDIA .*31[0-9]M.* 2 1 0 3.3 +NVIDIA GT 320M .*NVIDIA .*32[0-9]M.* 3 1 0 3.3 NVIDIA GT 330M .*NVIDIA .*GT 33[0-9]M.* 3 1 1 3.3 NVIDIA GT 340M .*NVIDIA .*GT 34[0-9]M.* 4 1 1 3.3 NVIDIA GTS 350M .*NVIDIA .*GTS 35[0-9]M.* 4 1 1 3.3 NVIDIA GTS 360M .*NVIDIA .*GTS 36[0-9]M.* 5 1 1 3.3 -NVIDIA 400M .*NVIDIA .* 40[0-9]M.* 2 1 0 0 -NVIDIA 410M .*NVIDIA .* 41[0-9]M.* 3 1 0 0 -NVIDIA GT 420M .*NVIDIA .*GT 42[0-9]M.* 3 1 1 4.2 -NVIDIA GT 430M .*NVIDIA .*GT 43[0-9]M.* 3 1 1 4.2 -NVIDIA GT 440M .*NVIDIA .*GT 44[0-9]M.* 3 1 1 4.2 -NVIDIA GT 450M .*NVIDIA .*GT 45[0-9]M.* 3 1 0 0 -NVIDIA GTX 460M .*NVIDIA .*GTX 46[0-9]M.* 4 1 1 4.2 -NVIDIA GTX 470M .*NVIDIA .*GTX 47[0-9]M.* 3 1 0 4.2 -NVIDIA GTX 480M .*NVIDIA .*GTX 48[0-9]M.* 3 1 1 4.2 -NVIDIA GT 520M .*NVIDIA .*GT 52[0-9]M.* 3 1 1 4.2 -NVIDIA GT 530M .*NVIDIA .*GT 53[0-9]M.* 3 1 1 4.2 -NVIDIA GT 540M .*NVIDIA .*GT 54[0-9]M.* 3 1 1 4.2 -NVIDIA GT 550M .*GeForce GT 55[0-9]M.* 3 1 1 4.2 -NVIDIA GTX 560M .*NVIDIA .*GTX 56[0-9]M.* 3 1 0 4.2 -NVIDIA GTX 570M .*NVIDIA .*GTX 57[0-9]M.* 5 1 0 4.2 -NVIDIA GTX 580M .*NVIDIA .*GTX 58[0-9]M.* 5 1 1 4.2 -NVIDIA 610M .*NVIDIA.* 61[0-9]M.* 3 1 1 4.2 -NVIDIA GT 620M .*NVIDIA .*GT 62[0-9]M.* 3 1 0 4.2 -NVIDIA GT 630M .*NVIDIA .*GT 63[0-9]M.* 3 1 0 4.2 -NVIDIA GT 640M .*NVIDIA .*GT 64[0-9]M.* 3 1 0 4.2 -NVIDIA GT 650M .*NVIDIA .*GT 65[0-9]M.* 3 1 0 4.2 -NVIDIA GTX 660M .*NVIDIA .*GTX 66[0-9]M.* 5 1 0 4.2 -NVIDIA GTX 670M .*NVIDIA .*GTX 67[0-9]M.* 5 1 1 4.2 -NVIDIA GTX 680M .*NVIDIA .*GTX 68[0-9]M.* 5 1 0 4.2 -NVIDIA GTX 690M .*NVIDIA .*GTX 69[0-9]M.* 5 1 0 4.2 +NVIDIA 400M .*NVIDIA .*40[0-9]M.* 2 1 0 0 +NVIDIA 410M .*NVIDIA .*41[0-9]M.* 3 1 0 0 +NVIDIA GT 420M .*NVIDIA .*GT *42[0-9]M.* 3 1 1 4.2 +NVIDIA GT 430M .*NVIDIA .*GT *43[0-9]M.* 3 1 1 4.2 +NVIDIA GT 440M .*NVIDIA .*GT *44[0-9]M.* 3 1 1 4.2 +NVIDIA GT 450M .*NVIDIA .*GT *45[0-9]M.* 3 1 0 0 +NVIDIA GTX 460M .*NVIDIA .*GTX *46[0-9]M.* 4 1 1 4.2 +NVIDIA GTX 470M .*NVIDIA .*GTX *47[0-9]M.* 3 1 0 4.2 +NVIDIA GTX 480M .*NVIDIA .*GTX *48[0-9]M.* 3 1 1 4.2 +NVIDIA GT 520M .*NVIDIA .*GT *52[0-9]M.* 3 1 1 4.2 +NVIDIA GT 530M .*NVIDIA .*GT *53[0-9]M.* 3 1 1 4.2 +NVIDIA GT 540M .*NVIDIA .*GT *54[0-9]M.* 3 1 1 4.2 +NVIDIA GT 550M .*NVIDIA .*GT *55[0-9]M.* 3 1 1 4.2 +NVIDIA GTX 560M .*NVIDIA .*GTX *56[0-9]M.* 3 1 0 4.2 +NVIDIA GTX 570M .*NVIDIA .*GTX *57[0-9]M.* 5 1 0 4.2 +NVIDIA GTX 580M .*NVIDIA .*GTX *58[0-9]M.* 5 1 1 4.2 +NVIDIA 610M .*NVIDIA .*61[0-9]M.* 3 1 1 4.2 +NVIDIA GT 620M .*NVIDIA .*GT *62[0-9]M.* 3 1 0 4.2 +NVIDIA GT 630M .*NVIDIA .*GT *63[0-9]M.* 3 1 0 4.2 +NVIDIA GT 640M .*NVIDIA .*GT *64[0-9]M.* 3 1 0 4.2 +NVIDIA GT 650M .*NVIDIA .*GT *65[0-9]M.* 3 1 0 4.2 +NVIDIA GTX 660M .*NVIDIA .*GTX *66[0-9]M.* 5 1 0 4.2 +NVIDIA GTX 670M .*NVIDIA .*GTX *67[0-9]M.* 5 1 1 4.2 +NVIDIA GTX 680M .*NVIDIA .*GTX *68[0-9]M.* 5 1 0 4.2 +NVIDIA GTX 690M .*NVIDIA .*GTX *69[0-9]M.* 5 1 0 4.2 NVIDIA 710M .*NVIDIA.* 71[0-9]M.* 3 1 0 4.2 NVIDIA GT 720M .*NVIDIA .*GT *72[0-9]M.* 3 1 0 4.2 NVIDIA GT 730M .*NVIDIA .*GT *73[0-9]M.* 3 1 0 4.2 @@ -378,43 +397,50 @@ NVIDIA G100 .*NVIDIA .*G10.* 3 1 1 4.2 NVIDIA GT 120 .*NVIDIA .*GT 12.* 2 1 0 3.3 NVIDIA GT 130 .*NVIDIA .*GT 13.* 2 1 0 3.3 NVIDIA GT 140 .*NVIDIA .*GT 14.* 2 1 0 3.3 +NVIDIA GT 150 .*NVIDIA .*GT 15.* 2 1 1 3.3 NVIDIA GTS 150 .*NVIDIA .*GTS 15.* 2 1 0 0 -NVIDIA 200 .*NVIDIA .*GeForce 20.* 2 1 1 3.3 -NVIDIA G200 .*NVIDIA .*GeForce G20.* 2 1 1 3.3 -NVIDIA G210 .*NVIDIA .*GeForce G210.* 3 1 1 3.3 -NVIDIA 210 .*NVIDIA .*GeForce 210.* 3 1 1 3.3 +NVIDIA 200 .*NVIDIA .*200.* 2 1 1 3.3 +NVIDIA G200 .*NVIDIA .*G200.* 2 1 1 3.3 +NVIDIA G210 .*NVIDIA .*G210.* 3 1 1 3.3 +NVIDIA 205 .*NVIDIA .*205.* 3 1 1 3.3 +NVIDIA 210 .*NVIDIA .*210.* 3 1 1 3.3 NVIDIA GT 220 .*NVIDIA .*GT *22.* 2 1 1 3.3 NVIDIA GT 230 .*NVIDIA .*GT *23.* 2 1 1 3.3 NVIDIA GT 240 .*NVIDIA .*GT *24.* 4 1 1 3.3 NVIDIA GTS 240 .*NVIDIA .*GTS *24.* 4 1 1 3.3 NVIDIA GTS 250 .*NVIDIA .*GTS *25.* 4 1 1 3.3 +NVIDIA GTS 360 .*NVIDIA .*GTS *36.* 4 1 1 3.3 NVIDIA GTX 260 .*NVIDIA .*GTX *26.* 4 1 1 3.3 NVIDIA GTX 270 .*NVIDIA .*GTX *27.* 4 1 0 3.3 NVIDIA GTX 280 .*NVIDIA .*GTX *28.* 4 1 1 3.3 NVIDIA GTX 290 .*NVIDIA .*GTX *29.* 5 1 0 3.3 -NVIDIA 310 .*NVIDIA .*GeForce 310.* 3 1 1 3.3 -NVIDIA 315 .*NVIDIA .*GeForce 315.* 3 1 1 3.3 +NVIDIA 310 .*NVIDIA .*310.* 3 1 1 3.3 +NVIDIA 315 .*NVIDIA .*315.* 3 1 1 3.3 NVIDIA GT 320 .*NVIDIA .*GT *32.* 3 1 0 3.3 NVIDIA GT 330 .*NVIDIA .*GT *33.* 3 1 0 3.3 NVIDIA GT 340 .*NVIDIA .*GT *34.* 3 1 0 0 -NVIDIA 405 .*NVIDIA .* 405.* 3 1 0 3.3 +NVIDIA 405 .*NVIDIA .*405.* 3 1 0 3.3 +NVIDIA 410 .*NVIDIA .*410.* 3 1 0 3.3 +NVIDIA GT 415 .*NVIDIA .*GT *415.* 3 1 1 4.2 NVIDIA GT 420 .*NVIDIA .*GT *42.* 3 1 1 4.2 NVIDIA GT 430 .*NVIDIA .*GT *43.* 3 1 1 4.2 -NVIDIA GT 440 .*NVIDIA .*GT *44.* 4 1 0 4.2 +NVIDIA GT 440 .*NVIDIA .*GT *44.* 4 1 1 4.2 +NVIDIA GT 450 .*NVIDIA .*GT *45.* 4 1 1 4.2 NVIDIA GTS 450 .*NVIDIA .*GTS *45.* 4 1 1 4.2 NVIDIA GTX 460 .*NVIDIA .*GTX *46.* 5 1 1 4.3 NVIDIA GTX 470 .*NVIDIA .*GTX *47.* 5 1 1 4.2 NVIDIA GTX 480 .*NVIDIA .*GTX *48.* 5 1 1 4.2 -NVIDIA 510 .*NVIDIA .* 510.* 3 1 0 0 +NVIDIA 510 .*NVIDIA .*510.* 3 1 0 0 NVIDIA GT 520 .*NVIDIA .*GT *52.* 3 1 1 4.2 NVIDIA GT 530 .*NVIDIA .*GT *53.* 3 1 1 4.2 NVIDIA GT 540 .*NVIDIA .*GT *54.* 3 1 1 4.2 +NVIDIA GT 550 .*NVIDIA .*GT *55.* 3 1 1 4.2 NVIDIA GTX 550 .*NVIDIA .*GTX *55.* 5 1 1 4.3 NVIDIA GTX 560 .*NVIDIA .*GTX *56.* 5 1 1 4.2 NVIDIA GTX 570 .*NVIDIA .*GTX *57.* 5 1 1 4.2 NVIDIA GTX 580 .*NVIDIA .*GTX *58.* 5 1 1 4.3 NVIDIA GTX 590 .*NVIDIA .*GTX *59.* 5 1 1 4.2 -NVIDIA 605 .*NVIDIA .* 605.* 3 1 1 4.2 +NVIDIA 605 .*NVIDIA .*605.* 3 1 1 4.2 NVIDIA GT 610 .*NVIDIA .*GT 61.* 3 1 1 4.2 NVIDIA GT 620 .*NVIDIA .*GT 62.* 3 1 0 4.2 NVIDIA GT 630 .*NVIDIA .*GT 63.* 3 1 0 4.2 @@ -527,7 +553,7 @@ NVIDIA D9M .*NVIDIA .*D9M.* 1 1 0 0 NVIDIA G94 .*NVIDIA .*G94.* 3 1 0 0 NVIDIA GeForce Go 6 .*GeForce Go 6.* 1 1 0 0 NVIDIA ION 2 .*NVIDIA .*ION 2.* 2 1 0 0 -NVIDIA ION .*NVIDIA Corporation.*ION.* 2 1 1 3.3 +NVIDIA ION .*NVIDIA .*ION.* 2 1 1 3.3 NVIDIA NB8M .*NVIDIA .*NB8M.* 1 1 0 0 NVIDIA NB8P .*NVIDIA .*NB8P.* 2 1 0 0 NVIDIA NB9E .*NVIDIA .*NB9E.* 3 1 0 0 @@ -535,7 +561,9 @@ NVIDIA NB9M .*NVIDIA .*NB9M.* 1 1 0 0 NVIDIA NB9P .*NVIDIA .*NB9P.* 2 1 0 0 NVIDIA N10 .*NVIDIA .*N10.* 1 1 0 2.1 NVIDIA GeForce PCX .*GeForce PCX.* 0 1 0 1.5 -NVIDIA Generic .*NVIDIA .*Unknown.* 0 0 0 2.1 +NVIDIA PCI .*NVIDIA PCI[ ]* 0 0 0 2.1 +NVIDIA Generic .*NVIDIA Generic.* 0 0 0 2.1 +NVIDIA Generic Unknown .*NVIDIA .*Unknown.* 0 0 0 2.1 NVIDIA NV17 .*NVIDIA .*NV17.* 0 1 0 0 NVIDIA NV34 .*NVIDIA .*NV34.* 0 1 0 0 NVIDIA NV35 .*NVIDIA .*NV35.* 0 1 0 0 @@ -559,8 +587,8 @@ NVIDIA Quadro 2000 M/D .*Quadro.* (K2|2)000.* 3 1 0 4.2 NVIDIA Quadro 3000M .*Quadro.* (K3|3)00[0-9]M.* 3 1 0 4.2 NVIDIA Quadro 4000M .*Quadro.* (K4|4)00[0-9]M.* 3 1 0 4.2 NVIDIA Quadro 4000 .*Quadro 4000.* 3 1 0 4.2 -NVIDIA Quadro 50x0 M .*Quadro.* 50.0.* 3 1 0 4.2 -NVIDIA Quadro 6000 .*Quadro.* 6000.* 3 1 0 0 +NVIDIA Quadro 50x0 M .*Quadro.* (K5|5)0.0.* 3 1 0 4.2 +NVIDIA Quadro 6000 .*Quadro.* (K6|6)000.* 3 1 0 0 NVIDIA Quadro 400 .*Quadro.* 400.* 2 1 0 3.3 NVIDIA Quadro 600 .*Quadro.* 600.* 2 1 0 4.2 NVIDIA Quadro4 .*Quadro4.* 0 1 0 1.5 @@ -591,7 +619,7 @@ NVIDIA Quadro NVS .*NVIDIA .*NVS 0 1 0 4.2 NVIDIA Corporation N12P .*NVIDIA .*N12P.* 1 1 1 4.1 NVIDIA Corporation N11M .*NVIDIA .*N11M.* 2 1 0 3.1 NVIDIA RIVA TNT .*RIVA TNT.* 0 0 0 1.5 -S3 .*S3 Graphics.* 0 0 1 1.4 +S3 .*S3 *(Graphics)*.* 0 0 1 1.4 SiS SiS.* 0 0 1 1.5 Trident Trident.* 0 0 0 0 Tungsten Graphics Tungsten.* 0 0 0 0 @@ -599,5 +627,6 @@ XGI XGI.* 0 0 0 0 VIA VIA.* 0 0 0 0 Apple Generic Apple.*Generic.* 0 0 0 0 Apple Software Renderer Apple.*Software Renderer.* 0 0 0 0 +Oracle VirtualBox.* 0 1 1 2.1 Humper Humper.* 0 1 1 2.1 PowerVR SGX545 .*PowerVR SGX.* 1 1 1 3 -- cgit v1.2.3 From 1e8c5b7ebf595b81cae5a6dbf8ead7828aa7b788 Mon Sep 17 00:00:00 2001 From: Graham Linden Date: Wed, 28 Aug 2013 16:09:32 -0700 Subject: More gpu_table mods to address misidentificatIONs from early nvidia rules --- indra/newview/gpu_table.txt | 98 +++++----- indra/newview/tests/gpus_results.txt | 348 +++++++++++++++++------------------ 2 files changed, 227 insertions(+), 219 deletions(-) diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt index 990693d79e..36a98e35a2 100755 --- a/indra/newview/gpu_table.txt +++ b/indra/newview/gpu_table.txt @@ -35,10 +35,8 @@ 3Dfx .*3Dfx.* 0 0 0 0 3Dlabs .*3Dlabs.* 0 0 0 0 Hijacker .*Mohr.*Hijacker.* 0 0 0 0 -ATI GeForce Lulz .*ATI.*GeForce.* 0 0 0 0 ATI 3D-Analyze .*ATI.*3D-Analyze.* 0 0 0 0 -ATI Protoype .*ATI.*Prototype.* 0 0 0 0 -ATI ARES .*ATI.*ARES.* 0 0 0 0 +ATI ARES .*ATI.*ARES.* 0 0 0 0 ATI All-in-Wonder 7500 .*ATI.*All-in-Wonder 75.* 0 1 0 0 ATI All-in-Wonder 8500 .*ATI.*All-in-Wonder 85.* 0 1 0 0 ATI All-in-Wonder 9200 .*ATI.*All-in-Wonder 92.* 0 1 0 0 @@ -110,10 +108,12 @@ ATI Mobility Radeon HD 5400 .*ATI.*Mobility.*HD 54.* 2 1 1 4.2 ATI Mobility Radeon HD 5500 .*ATI.*Mobility.*HD 55.* 3 1 0 4.2 ATI Mobility Radeon HD 5600 .*ATI.*Mobility.*HD 56.* 3 1 1 4.2 ATI Mobility Radeon HD 5700 .*ATI.*Mobility.*HD 57.* 3 1 1 4.1 -ATI Mobility Radeon X1000 .*ATI.*Mobility.*Radeon ?X1.* 2 1 0 2.1 +ATI Mobility Radeon X1000 .*ATI.*Mobility.*Radeon ?X1..* 2 1 0 2.1 ATI Mobility Radeon X1200 .*ATI.*Mobility.*Radeon ?X12.* 2 1 0 2.1 -ATI Mobility Radeon X2000 .*ATI.*Mobility.*Radeon ?X2.* 2 1 0 2.1 +ATI Mobility Radeon X2000 .*ATI.*Mobility.*Radeon ?X20.* 2 1 0 2.1 +ATI Mobility Radeon X2300 .*ATI.*Mobility.*Radeon ?X23.* 2 1 0 2.1 ATI Mobility Radeon XX000 .*ATI.*Mobility.*Radeon ?Xx.* 2 1 0 2.1 +ATI Radeon HD 5xx .*ATI.*(Radeon|ASUS).* (AH|AX|HD|HD |EAH)5x. 1 1 1 4 ATI Radeon HD 6200D/G/M .*ATI.*AMD Radeon.* (HD|HD )62..[DGM].* 3 1 0 4.2 ATI Radeon HD 6300D/G/M .*ATI.*AMD Radeon.* (HD|HD )63..[DGM].* 3 1 1 4.2 ATI Radeon HD 6400D/G/M .*ATI.*AMD Radeon.* (HD|HD )64..[DGM].* 3 1 0 4.2 @@ -138,7 +138,6 @@ ATI Radeon HD 8600D/G/M .*ATI.*AMD Radeon.* (HD|HD )86..[DGM].* 4 1 0 4.2 ATI Radeon HD 8700D/G/M .*ATI.*AMD Radeon.* (HD|HD )87..[DGM].* 4 1 0 4.2 ATI Radeon HD 8800D/G/M .*ATI.*AMD Radeon.* (HD|HD )88..[DGM].* 4 1 0 4.2 ATI Radeon HD 8900D/G/M .*ATI.*AMD Radeon.* (HD|HD )89..[DGM].* 4 1 0 4.2 -ATI Radeon HD 5xx .*ATI.*(Radeon|ASUS).* (AH|AX|HD|HD |EAH)5x. 1 1 1 4 ATI Radeon HD 2300 .*ATI.*Radeon.* (HD|HD )23.. 0 1 1 3.3 ATI Radeon HD 2400 .*ATI.*(Radeon|ASUS).* (AH|AX|HD|HD |EAH)24.. 1 1 1 4 ATI Radeon HD 2600 .*ATI.*(Radeon|ASUS).* (AH|AX|HD|HD |EAH)26.. 2 1 1 4 @@ -226,9 +225,11 @@ ATI Radeon X600 .*ATI.*(Radeon |ASUS Extreme A)X6.* 1 1 1 2.1 ATI Radeon X700 .*ATI.*Radeon ?X7.* 2 1 1 2.1 ATI Radeon X800 .*ATI.*Radeon ?X8.* 1 1 1 2.1 ATI Radeon X900 .*ATI.*Radeon ?X9.* 2 1 0 0 -ATI Radeon X1000 .*ATI.*Radeon ?X1.* 2 1 0 2.1 +ATI Radeon X1000 .*ATI.*Radeon ?X10.* 2 1 0 2.1 ATI Radeon X1100 .*ATI.*Radeon ?X11.* 2 1 0 2.1 ATI Radeon X1200 .*ATI.*Radeon ?X12.* 2 1 0 2.1 +ATI Radeon X1xxx .*ATI.*Radeon ?X1xx.* 2 1 0 2.1 +ATI Radeon X12xx .*ATI.*Radeon ?X12x.* 2 1 0 2.1 ATI Radeon X2xxx .*ATI.*Radeon ?X2x.* 2 1 0 2.1 ATI Radeon X2300 .*ATI.*Radeon ?X23.* 2 1 0 2.1 ATI Radeon Xpress .*ATI.*Radeon Xpress.* 0 1 1 2.1 @@ -251,7 +252,9 @@ ATI RX480 (Xpress 200P) .*RX480.* 0 1 0 0 ATI RX700 .*RX700.* 1 1 0 0 AMD ANTILLES (HD 6990) .*(AMD|ATI).*Antilles.* 3 1 0 0 ATI ROBSON .*(AMD|ATI).*ROBSON.* 3 1 0 4 +AMD ARUBA (HD 6800) .*(AMD|ATI).*ARUBA.* 3 1 1 2.1 AMD BARTS (HD 6800) .*(AMD|ATI).*Barts.* 3 1 1 2.1 +AMD BA (HD 6800) .*(AMD|ATI).*BA.* 3 1 1 2.1 AMD WRESTLER .*(AMD|ATI).*WRESTLER.* 3 1 1 4 AMD SUMO .*(AMD|ATI).*SUMO.* 3 1 1 4.1 AMD CAICOS (HD 6400) .*(AMD|ATI).*Caicos.* 3 1 0 0 @@ -334,6 +337,7 @@ Intel 3D-Analyze .*Intel.*3D-Analyze.* 2 1 0 0 Matrox .*Matrox.* 0 0 0 0 Mesa .*Mesa.* 1 0 1 3 Gallium .*Gallium.* 1 1 1 2.1 +NVIDIA GeForce Pre-Release .*NVIDIA .*GeForce[ ]Pre-Release.* 2 1 1 3.3 NVIDIA G 100M .*NVIDIA .*G *10[0-9]M.* 1 1 1 3.3 NVIDIA G 110M .*NVIDIA .*G *11[0-9]M.* 1 1 1 3.3 NVIDIA G 120M .*NVIDIA .*G *12[0-9]M.* 1 1 1 3.3 @@ -360,8 +364,8 @@ NVIDIA GT 330M .*NVIDIA .*GT 33[0-9]M.* 3 1 1 3.3 NVIDIA GT 340M .*NVIDIA .*GT 34[0-9]M.* 4 1 1 3.3 NVIDIA GTS 350M .*NVIDIA .*GTS 35[0-9]M.* 4 1 1 3.3 NVIDIA GTS 360M .*NVIDIA .*GTS 36[0-9]M.* 5 1 1 3.3 -NVIDIA 400M .*NVIDIA .*40[0-9]M.* 2 1 0 0 -NVIDIA 410M .*NVIDIA .*41[0-9]M.* 3 1 0 0 +NVIDIA 400M .*NVIDIA .*[ ]+40[0-9]M.* 2 1 0 0 +NVIDIA 410M .*NVIDIA .*[ ]+41[0-9]M.* 3 1 0 0 NVIDIA GT 420M .*NVIDIA .*GT *42[0-9]M.* 3 1 1 4.2 NVIDIA GT 430M .*NVIDIA .*GT *43[0-9]M.* 3 1 1 4.2 NVIDIA GT 440M .*NVIDIA .*GT *44[0-9]M.* 3 1 1 4.2 @@ -399,11 +403,11 @@ NVIDIA GT 130 .*NVIDIA .*GT 13.* 2 1 0 3.3 NVIDIA GT 140 .*NVIDIA .*GT 14.* 2 1 0 3.3 NVIDIA GT 150 .*NVIDIA .*GT 15.* 2 1 1 3.3 NVIDIA GTS 150 .*NVIDIA .*GTS 15.* 2 1 0 0 -NVIDIA 200 .*NVIDIA .*200.* 2 1 1 3.3 +NVIDIA 200 .*NVIDIA .[ ]+200[^0].* 2 1 1 3.3 NVIDIA G200 .*NVIDIA .*G200.* 2 1 1 3.3 NVIDIA G210 .*NVIDIA .*G210.* 3 1 1 3.3 -NVIDIA 205 .*NVIDIA .*205.* 3 1 1 3.3 -NVIDIA 210 .*NVIDIA .*210.* 3 1 1 3.3 +NVIDIA 205 .*NVIDIA .*[ ]+205.* 3 1 1 3.3 +NVIDIA 210 .*NVIDIA .*[ ]+210[^0].* 3 1 1 3.3 NVIDIA GT 220 .*NVIDIA .*GT *22.* 2 1 1 3.3 NVIDIA GT 230 .*NVIDIA .*GT *23.* 2 1 1 3.3 NVIDIA GT 240 .*NVIDIA .*GT *24.* 4 1 1 3.3 @@ -414,13 +418,13 @@ NVIDIA GTX 260 .*NVIDIA .*GTX *26.* 4 1 1 3.3 NVIDIA GTX 270 .*NVIDIA .*GTX *27.* 4 1 0 3.3 NVIDIA GTX 280 .*NVIDIA .*GTX *28.* 4 1 1 3.3 NVIDIA GTX 290 .*NVIDIA .*GTX *29.* 5 1 0 3.3 -NVIDIA 310 .*NVIDIA .*310.* 3 1 1 3.3 -NVIDIA 315 .*NVIDIA .*315.* 3 1 1 3.3 +NVIDIA 310 .*NVIDIA .*[ ]+310.* 3 1 1 3.3 +NVIDIA 315 .*NVIDIA .*[ ]+315.* 3 1 1 3.3 NVIDIA GT 320 .*NVIDIA .*GT *32.* 3 1 0 3.3 NVIDIA GT 330 .*NVIDIA .*GT *33.* 3 1 0 3.3 NVIDIA GT 340 .*NVIDIA .*GT *34.* 3 1 0 0 -NVIDIA 405 .*NVIDIA .*405.* 3 1 0 3.3 -NVIDIA 410 .*NVIDIA .*410.* 3 1 0 3.3 +NVIDIA 405 .*NVIDIA .*[ ]+405.* 3 1 0 3.3 +NVIDIA 410 .*NVIDIA .*[ ]+410.* 3 1 0 3.3 NVIDIA GT 415 .*NVIDIA .*GT *415.* 3 1 1 4.2 NVIDIA GT 420 .*NVIDIA .*GT *42.* 3 1 1 4.2 NVIDIA GT 430 .*NVIDIA .*GT *43.* 3 1 1 4.2 @@ -430,6 +434,7 @@ NVIDIA GTS 450 .*NVIDIA .*GTS *45.* 4 1 1 4.2 NVIDIA GTX 460 .*NVIDIA .*GTX *46.* 5 1 1 4.3 NVIDIA GTX 470 .*NVIDIA .*GTX *47.* 5 1 1 4.2 NVIDIA GTX 480 .*NVIDIA .*GTX *48.* 5 1 1 4.2 +NVIDIA 505 .*NVIDIA .*505.* 3 1 0 0 NVIDIA 510 .*NVIDIA .*510.* 3 1 0 0 NVIDIA GT 520 .*NVIDIA .*GT *52.* 3 1 1 4.2 NVIDIA GT 530 .*NVIDIA .*GT *53.* 3 1 1 4.2 @@ -441,24 +446,25 @@ NVIDIA GTX 570 .*NVIDIA .*GTX *57.* 5 1 1 4.2 NVIDIA GTX 580 .*NVIDIA .*GTX *58.* 5 1 1 4.3 NVIDIA GTX 590 .*NVIDIA .*GTX *59.* 5 1 1 4.2 NVIDIA 605 .*NVIDIA .*605.* 3 1 1 4.2 -NVIDIA GT 610 .*NVIDIA .*GT 61.* 3 1 1 4.2 -NVIDIA GT 620 .*NVIDIA .*GT 62.* 3 1 0 4.2 -NVIDIA GT 630 .*NVIDIA .*GT 63.* 3 1 0 4.2 -NVIDIA GT 640 .*NVIDIA .*GT 64.* 3 1 0 4.2 -NVIDIA GT 650 .*NVIDIA .*GT 65.* 3 1 1 4.2 -NVIDIA GTX 650 .*NVIDIA .*GTX 65.* 3 1 1 4.2 -NVIDIA GTX 660 .*NVIDIA .*GTX 66.* 5 1 0 4.2 -NVIDIA GTX 670 .*NVIDIA .*GTX 67.* 5 1 1 4.2 -NVIDIA GTX 680 .*NVIDIA .*GTX 68.* 5 1 1 4.3 -NVIDIA GTX 690 .*NVIDIA .*GTX 69.* 5 1 1 4.3 -NVIDIA GT 710 .*NVIDIA .*GT *71.* 3 1 0 4.3 -NVIDIA GT 720 .*NVIDIA .*GT *72.* 3 1 0 4.3 -NVIDIA GT 730 .*NVIDIA .*GT *73.* 3 1 0 4.3 -NVIDIA GT 740 .*NVIDIA .*GT *74.* 3 1 0 4.3 -NVIDIA GTX 750 .*NVIDIA .*GTX *75.* 3 1 0 4.3 -NVIDIA GTX 760 .*NVIDIA .*GTX *76.* 5 1 0 4.3 -NVIDIA GTX 770 .*NVIDIA .*GTX *77.* 5 1 0 4.3 -NVIDIA GTX 780 .*NVIDIA .*GTX *78.* 5 1 0 4.3 +NVIDIA GT 61x .*NVIDIA .*GT 61.* 3 1 1 4.2 +NVIDIA GT 62x .*NVIDIA .*GT 62.* 3 1 0 4.2 +NVIDIA GT 63x .*NVIDIA .*GT 63.* 3 1 0 4.2 +NVIDIA GT 64x .*NVIDIA .*GT 64.* 3 1 0 4.2 +NVIDIA GT 65x .*NVIDIA .*GT 65.* 3 1 1 4.2 +NVIDIA GTX 64x .*NVIDIA .*GTX 64.* 3 1 1 4.2 +NVIDIA GTX 65x .*NVIDIA .*GTX 65.* 3 1 1 4.2 +NVIDIA GTX 66x .*NVIDIA .*GTX 66.* 5 1 0 4.2 +NVIDIA GTX 67x .*NVIDIA .*GTX 67.* 5 1 1 4.2 +NVIDIA GTX 68x .*NVIDIA .*GTX 68.* 5 1 1 4.3 +NVIDIA GTX 69x .*NVIDIA .*GTX 69.* 5 1 1 4.3 +NVIDIA GT 71x .*NVIDIA .*GT *71.* 3 1 0 4.3 +NVIDIA GT 72x .*NVIDIA .*GT *72.* 3 1 0 4.3 +NVIDIA GT 73x .*NVIDIA .*GT *73.* 3 1 0 4.3 +NVIDIA GT 74x .*NVIDIA .*GT *74.* 3 1 0 4.3 +NVIDIA GTX 75x .*NVIDIA .*GTX *75.* 3 1 0 4.3 +NVIDIA GTX 76x .*NVIDIA .*GTX *76.* 5 1 0 4.3 +NVIDIA GTX 77x .*NVIDIA .*GTX *77.* 5 1 0 4.3 +NVIDIA GTX 78x .*NVIDIA .*GTX *78.* 5 1 0 4.3 NVIDIA GTX TITAN .*NVIDIA .*GTX *TITAN.* 5 1 0 4.3 NVIDIA C51 .*NVIDIA .*C51.* 0 1 1 2 NVIDIA G72 .*NVIDIA .*G72.* 1 1 0 0 @@ -552,8 +558,8 @@ NVIDIA GeForce Go 7900 .*NVIDIA .*GeForce Go 79.* 1 1 1 2.1 NVIDIA D9M .*NVIDIA .*D9M.* 1 1 0 0 NVIDIA G94 .*NVIDIA .*G94.* 3 1 0 0 NVIDIA GeForce Go 6 .*GeForce Go 6.* 1 1 0 0 -NVIDIA ION 2 .*NVIDIA .*ION 2.* 2 1 0 0 -NVIDIA ION .*NVIDIA .*ION.* 2 1 1 3.3 +NVIDIA ION 2 .*NVIDIA .*[ ]+[I][O][N] 2.* 2 1 0 0 +NVIDIA ION .*NVIDIA .*[ ]+[I][O][N].* 2 1 1 3.3 NVIDIA NB8M .*NVIDIA .*NB8M.* 1 1 0 0 NVIDIA NB8P .*NVIDIA .*NB8P.* 2 1 0 0 NVIDIA NB9E .*NVIDIA .*NB9E.* 3 1 0 0 @@ -607,15 +613,15 @@ NVIDIA Quadro FX 3800 .*Quadro.*FX 3800.* 3 1 0 3.3 NVIDIA Quadro FX 4500 .*Quadro.*FX 45.* 3 1 0 2.1 NVIDIA Quadro FX 880M .*Quadro.*FX 88[0-9]M.* 3 1 0 3.3 NVIDIA Quadro FX 4800 .*NVIDIA .*Quadro FX 4800.* 3 1 0 3.1 -NVIDIA Quadro FX .*Quadro FX.* 1 1 0 3.3 -NVIDIA Quadro NVS 1xxM .*Quadro NVS *1.[05]M.* 0 1 1 3.3 -NVIDIA Quadro NVS 300M .*NVIDIA .*NVS *30[0-9]M.* 2 1 0 0 -NVIDIA Quadro NVS 320M .*NVIDIA .*NVS *32[0-9]M.* 2 1 0 0 -NVIDIA Quadro NVS 2100M .*NVIDIA .*NVS *210[0-9]M.* 2 1 0 3.3 -NVIDIA Quadro NVS 3100M .*NVIDIA .*NVS *310[0-9]M.* 2 1 0 3.3 -NVIDIA Quadro NVS 4200M .*NVIDIA .*NVS *420[0-9]M.* 2 1 0 4.2 -NVIDIA Quadro NVS 5100M .*NVIDIA .*NVS *510[0-9]M.* 2 1 0 0 -NVIDIA Quadro NVS .*NVIDIA .*NVS 0 1 0 4.2 +NVIDIA Quadro FX .*NVIDIA .*Quadro FX.* 1 1 0 3.3 +NVIDIA Quadro NVS 1xxM .*NVIDIA .*Quadro NVS *1.[05]M.* 0 1 1 3.3 +NVIDIA Quadro NVS 300M .*NVIDIA .*Quadro[ ]+NVS *30[0-9]M.* 2 1 0 0 +NVIDIA Quadro NVS 320M .*NVIDIA .*Quadro[ ]+NVS *32[0-9]M.* 2 1 0 0 +NVIDIA Quadro NVS 2100M .*NVIDIA .*Quadro[ ]+NVS *210[0-9]M.* 2 1 0 3.3 +NVIDIA Quadro NVS 3100M .*NVIDIA .*Quadro[ ]+NVS *310[0-9]M.* 2 1 0 3.3 +NVIDIA Quadro NVS 4200M .*NVIDIA .*Quadro[ ]+NVS *420[0-9]M.* 2 1 0 4.2 +NVIDIA Quadro NVS 5100M .*NVIDIA .*Quadro[ ]+NVS *510[0-9]M.* 2 1 0 0 +NVIDIA Quadro NVS .*NVIDIA .*Quadro[ ]+NVS 0 1 0 4.2 NVIDIA Corporation N12P .*NVIDIA .*N12P.* 1 1 1 4.1 NVIDIA Corporation N11M .*NVIDIA .*N11M.* 2 1 0 3.1 NVIDIA RIVA TNT .*RIVA TNT.* 0 0 0 1.5 @@ -630,3 +636,5 @@ Apple Software Renderer Apple.*Software Renderer.* 0 0 0 0 Oracle VirtualBox.* 0 1 1 2.1 Humper Humper.* 0 1 1 2.1 PowerVR SGX545 .*PowerVR SGX.* 1 1 1 3 +ATI GeForce Lulz .*ATI.*GeForce.* 0 0 0 0 + diff --git a/indra/newview/tests/gpus_results.txt b/indra/newview/tests/gpus_results.txt index c864ba109f..41741f849b 100755 --- a/indra/newview/tests/gpus_results.txt +++ b/indra/newview/tests/gpus_results.txt @@ -21,12 +21,12 @@ AMD RV790 (HD 4800) AMD TURKS (HD 6500/6600) supported 3 0 2.1 AMD TURKS (HD 6500/6600) ATI NO MATCH ATI 760G/Radeon 3000 supported 1 1 4 ATI Radeon 3000 -ATI ASUS AH24xx NO MATCH +ATI ASUS AH24xx supported 1 1 4 ATI Radeon HD 2400 ATI ASUS AH34xx supported 1 1 4 ATI Radeon HD 3400 ATI ASUS AH36xx supported 3 1 4 ATI Radeon HD 3600 -ATI ASUS AH46xx NO MATCH -ATI ASUS AX3xx NO MATCH -ATI ASUS AX5xx NO MATCH +ATI ASUS AH46xx supported 3 1 4 ATI Radeon HD 4600 +ATI ASUS AX3xx supported 2 1 4 ATI Radeon HD 4300 +ATI ASUS AX5xx supported 1 1 4 ATI Radeon HD 5xx ATI ASUS EAH38xx supported 3 1 4 ATI Radeon HD 3800 ATI ASUS EAH43xx supported 2 1 4 ATI Radeon HD 4300 ATI ASUS EAH45xx supported 2 1 3.3 ATI Radeon HD 4500 @@ -40,10 +40,10 @@ ATI ASUS EAH66xx ATI ASUS EAH67xx supported 3 1 4.2 ATI Radeon HD 6700 ATI ASUS EAH68xx supported 4 1 4.2 ATI Radeon HD 6800 ATI ASUS EAH69xx supported 5 1 4.2 ATI Radeon HD 6900 -ATI ASUS EAH6xxx NO MATCH -ATI ASUS EAH77xx NO MATCH +ATI ASUS EAH6xxx supported 5 1 4.2 ATI Radeon HD 6x00 +ATI ASUS EAH77xx supported 4 1 4.2 ATI Radeon HD 7700 ATI ASUS HD7700 supported 4 1 4.2 ATI Radeon HD 7700 -ATI ASUS Radeon X1xxx NO MATCH +ATI ASUS Radeon X1xxx supported 2 0 2.1 ATI Radeon X1xxx ATI All-in-Wonder HD supported 1 1 3.3 ATI All-in-Wonder HD ATI All-in-Wonder PCI-E supported 1 0 0 ATI All-in-Wonder PCI-E ATI Display Adapter supported 1 1 4.1 ATI Display Adapter @@ -52,15 +52,15 @@ ATI FireGL 5200 ATI FireGL 5xxx supported 4 1 4.2 ATI FireGL ATI FireMV supported 0 1 3.2 ATI FireMV ATI FirePro 2000 supported 2 1 4.2 ATI FirePro 2000 -ATI FirePro 4000 NO MATCH +ATI FirePro 4000 supported 2 0 4.1 ATI FirePro 4000 ATI FirePro M supported 3 1 4.2 ATI FirePro M ATI FirePro M3900 supported 2 0 4.1 ATI FirePro M3900 ATI FirePro M5800 supported 3 0 0 ATI FirePro M5800 ATI FirePro M7740 supported 3 0 0 ATI FirePro M7740 ATI FirePro M7820 supported 5 1 4.2 ATI FirePro M7820 -ATI Geforce 9500 GT NO MATCH -ATI Geforce 9600 GT NO MATCH -ATI Geforce 9800 GT NO MATCH +ATI Geforce 9500 GT unsupported 0 0 0 ATI GeForce Lulz +ATI Geforce 9600 GT unsupported 0 0 0 ATI GeForce Lulz +ATI Geforce 9800 GT unsupported 0 0 0 ATI GeForce Lulz ATI IGP 340M unsupported 0 0 1.3 ATI IGP 340M ATI Mobility Radeon supported 3 0 0 ATI Radeon ATI Mobility Radeon 4100 supported 1 1 3.3 ATI Mobility Radeon 4100 @@ -95,12 +95,12 @@ ATI Mobility Radeon HD 5700 ATI Mobility Radeon HD 6300 supported 1 1 4.2 ATI Radeon HD 6300 ATI Mobility Radeon HD 6500 supported 3 1 4.2 ATI Radeon HD 6500 ATI Mobility Radeon HD 6500M supported 3 1 4.2 ATI Radeon HD 6500 -ATI Mobility Radeon X1xxx NO MATCH -ATI Mobility Radeon X2xxx NO MATCH +ATI Mobility Radeon X1xxx supported 2 0 2.1 ATI Mobility Radeon X1000 +ATI Mobility Radeon X2xxx supported 2 0 2.1 ATI Radeon X2xxx ATI Mobility Radeon X3xx supported 1 1 2.1 ATI Radeon X300 ATI Mobility Radeon X6xx supported 1 1 2.1 ATI Radeon X600 ATI Mobility Radeon X7xx supported 2 1 2.1 ATI Radeon X700 -ATI Mobility Radeon Xxxx NO MATCH +ATI Mobility Radeon Xxxx supported 2 0 2.1 ATI Mobility Radeon XX000 ATI R300 (9700) supported 0 1 2.1 ATI R300 (9700) ATI RV410 (X700) supported 1 0 0 ATI RV410 (X700) ATI RV530 supported 1 0 0 ATI RV530 @@ -180,8 +180,8 @@ ATI Radeon X1800 ATI Radeon X18xx supported 3 1 2.1 ATI Radeon X1800 ATI Radeon X1900 supported 2 1 2.1 ATI Radeon X1900 ATI Radeon X19xx supported 2 1 2.1 ATI Radeon X1900 -ATI Radeon X1xxx NO MATCH -ATI Radeon X2xxx NO MATCH +ATI Radeon X1xxx supported 2 0 2.1 ATI Radeon X1xxx +ATI Radeon X2xxx supported 2 0 2.1 ATI Radeon X2xxx ATI Radeon X300 supported 1 1 2.1 ATI Radeon X300 ATI Radeon X500 supported 1 1 2.1 ATI Radeon X500 ATI Radeon X600 supported 1 1 2.1 ATI Radeon X600 @@ -480,9 +480,9 @@ ATI Technologies Inc. AMD Radeon HD 7900 Series (Microsoft Corporation - WDDM v1 ATI Technologies Inc. AMD Radeon HD 7950 supported 5 1 4.2 ATI Radeon HD 7900 ATI Technologies Inc. AMD Radeon HD 7970 supported 5 1 4.2 ATI Radeon HD 7900 ATI Technologies Inc. AMD Radeon HD 7970M supported 4 0 4.2 ATI Radeon HD 7900D/G/M -ATI Technologies Inc. AMD Radeon HD 8210 NO MATCH -ATI Technologies Inc. AMD Radeon HD 8240 NO MATCH -ATI Technologies Inc. AMD Radeon HD 8250 NO MATCH +ATI Technologies Inc. AMD Radeon HD 8210 supported 2 0 4.2 ATI Radeon HD 8200 +ATI Technologies Inc. AMD Radeon HD 8240 supported 2 0 4.2 ATI Radeon HD 8200 +ATI Technologies Inc. AMD Radeon HD 8250 supported 2 0 4.2 ATI Radeon HD 8200 ATI Technologies Inc. AMD Radeon HD 8280G supported 3 0 4.2 ATI Radeon HD 8200D/G/M ATI Technologies Inc. AMD Radeon HD 8330 supported 2 0 4.2 ATI Radeon HD 8300 (OEM) ATI Technologies Inc. AMD Radeon HD 8350 supported 2 0 4.2 ATI Radeon HD 8300 (OEM) @@ -533,9 +533,9 @@ ATI Technologies Inc. AMD Radeon. HD 7670M ATI Technologies Inc. AMD Radeon. HD 7730M supported 4 0 4.2 ATI Radeon HD 7700D/G/M ATI Technologies Inc. ASUS AH3450 Series supported 1 1 4 ATI Radeon HD 3400 ATI Technologies Inc. ASUS AH3650 Series supported 3 1 4 ATI Radeon HD 3600 -ATI Technologies Inc. ASUS AH4650 Series NO MATCH -ATI Technologies Inc. ASUS ARES NO MATCH -ATI Technologies Inc. ASUS ARES2 NO MATCH +ATI Technologies Inc. ASUS AH4650 Series supported 3 1 4 ATI Radeon HD 4600 +ATI Technologies Inc. ASUS ARES unsupported 0 0 0 ATI ARES +ATI Technologies Inc. ASUS ARES2 unsupported 0 0 0 ATI ARES ATI Technologies Inc. ASUS EAH2400 Series supported 1 1 4 ATI Radeon HD 2400 ATI Technologies Inc. ASUS EAH2600 Series supported 2 1 4 ATI Radeon HD 2600 ATI Technologies Inc. ASUS EAH3450 Series supported 1 1 4 ATI Radeon HD 3400 @@ -570,10 +570,10 @@ ATI Technologies Inc. ASUS EAH6850 Series ATI Technologies Inc. ASUS EAH6870 Series supported 4 1 4.2 ATI Radeon HD 6800 ATI Technologies Inc. ASUS EAH6950 Series supported 5 1 4.2 ATI Radeon HD 6900 ATI Technologies Inc. ASUS EAH6970 Series supported 5 1 4.2 ATI Radeon HD 6900 -ATI Technologies Inc. ASUS Extreme AX300 Series NO MATCH -ATI Technologies Inc. ASUS Extreme AX300SE/T NO MATCH -ATI Technologies Inc. ASUS Extreme AX550 Series NO MATCH -ATI Technologies Inc. ASUS Extreme AX550 Series x86/SSE2 NO MATCH +ATI Technologies Inc. ASUS Extreme AX300 Series supported 2 1 4 ATI Radeon HD 4300 +ATI Technologies Inc. ASUS Extreme AX300SE/T supported 2 1 4 ATI Radeon HD 4300 +ATI Technologies Inc. ASUS Extreme AX550 Series supported 3 1 4.2 ATI Radeon HD 5500 +ATI Technologies Inc. ASUS Extreme AX550 Series x86/SSE2 supported 3 1 4.2 ATI Radeon HD 5500 ATI Technologies Inc. ASUS Extreme AX600 Series supported 1 1 2.1 ATI Radeon X600 ATI Technologies Inc. ASUS HD 7350 supported 2 0 4.2 ATI Radeon HD 7300 ATI Technologies Inc. ASUS HD7470 Series supported 2 0 4.2 ATI Radeon HD 7400 @@ -600,7 +600,7 @@ ATI Technologies Inc. ASUS X1650 Series ATI Technologies Inc. ASUS X1650 Series x86/MMX/3DNow!/SSE2 supported 2 1 2.1 ATI Radeon X1600 ATI Technologies Inc. ASUS X1650 Series x86/SSE2 supported 2 1 2.1 ATI Radeon X1600 ATI Technologies Inc. ASUS X1950 Series x86/MMX/3DNow!/SSE2 supported 2 1 2.1 ATI Radeon X1900 -ATI Technologies Inc. ATI Radeon HD 5000 Series NO MATCH +ATI Technologies Inc. ATI Radeon HD 5000 Series supported 3 1 4.2 ATI Radeon HD 5000 ATI Technologies Inc. ATI Radeon HD 6350 supported 1 1 4.2 ATI Radeon HD 6300 ATI Technologies Inc. ATI All-in-Wonder HD supported 1 1 3.3 ATI All-in-Wonder HD ATI Technologies Inc. ATI Display Adapter supported 1 1 4.1 ATI Display Adapter @@ -667,8 +667,8 @@ ATI Technologies Inc. ATI MOBILITY RADEON X1600 ATI Technologies Inc. ATI MOBILITY RADEON X1700 supported 2 1 2.1 ATI Radeon X1700 ATI Technologies Inc. ATI MOBILITY RADEON X1800 supported 3 1 2.1 ATI Radeon X1800 ATI Technologies Inc. ATI MOBILITY RADEON X1900 supported 2 1 2.1 ATI Radeon X1900 -ATI Technologies Inc. ATI MOBILITY RADEON X2300 supported 2 0 2.1 ATI Radeon X2300 -ATI Technologies Inc. ATI MOBILITY RADEON X2300 x86/MMX/3DNow!/SSE2 supported 2 0 2.1 ATI Radeon X2300 +ATI Technologies Inc. ATI MOBILITY RADEON X2300 supported 2 0 2.1 ATI Mobility Radeon X2300 +ATI Technologies Inc. ATI MOBILITY RADEON X2300 x86/MMX/3DNow!/SSE2 supported 2 0 2.1 ATI Mobility Radeon X2300 ATI Technologies Inc. ATI MOBILITY RADEON X300 supported 1 1 2.1 ATI Radeon X300 ATI Technologies Inc. ATI MOBILITY RADEON X300 x86/SSE2 supported 1 1 2.1 ATI Radeon X300 ATI Technologies Inc. ATI MOBILITY RADEON X600 supported 1 1 2.1 ATI Radeon X600 @@ -792,16 +792,16 @@ ATI Technologies Inc. ATI Mobility Radeon X1700 x86 ATI Technologies Inc. ATI Mobility Radeon X1700 x86/SSE2 supported 2 1 2.1 ATI Radeon X1700 ATI Technologies Inc. ATI Mobility Radeon X1800 x86/SSE2 supported 3 1 2.1 ATI Radeon X1800 ATI Technologies Inc. ATI Mobility Radeon X1900 supported 2 1 2.1 ATI Radeon X1900 -ATI Technologies Inc. ATI Mobility Radeon X2300 supported 2 0 2.1 ATI Radeon X2300 -ATI Technologies Inc. ATI Mobility Radeon X2300 x86/MMX/3DNow! supported 2 0 2.1 ATI Radeon X2300 -ATI Technologies Inc. ATI Mobility Radeon X2300 x86/MMX/3DNow!/SSE2 supported 2 0 2.1 ATI Radeon X2300 -ATI Technologies Inc. ATI Mobility Radeon X2300 x86/SSE2 supported 2 0 2.1 ATI Radeon X2300 +ATI Technologies Inc. ATI Mobility Radeon X2300 supported 2 0 2.1 ATI Mobility Radeon X2300 +ATI Technologies Inc. ATI Mobility Radeon X2300 x86/MMX/3DNow! supported 2 0 2.1 ATI Mobility Radeon X2300 +ATI Technologies Inc. ATI Mobility Radeon X2300 x86/MMX/3DNow!/SSE2 supported 2 0 2.1 ATI Mobility Radeon X2300 +ATI Technologies Inc. ATI Mobility Radeon X2300 x86/SSE2 supported 2 0 2.1 ATI Mobility Radeon X2300 ATI Technologies Inc. ATI Mobility Radeon X2500 NO MATCH ATI Technologies Inc. ATI Mobility Radeon. HD 530v supported 1 1 3.3 ATI Mobility Radeon HD 530v ATI Technologies Inc. ATI Mobility Radeon. HD 5470 supported 2 1 4.2 ATI Mobility Radeon HD 5400 ATI Technologies Inc. ATI RADEON 9600 Series supported 0 1 2.1 ATI Radeon 9600 ATI Technologies Inc. ATI RADEON 9600/X1050 Series supported 0 1 2.1 ATI Radeon 9600 -ATI Technologies Inc. ATI RADEON E4690 NO MATCH +ATI Technologies Inc. ATI RADEON E4690 supported 3 1 4 ATI RADEON E4690 ATI Technologies Inc. ATI RADEON HD 3200 Graphics supported 1 1 4 ATI Radeon HD 3200 ATI Technologies Inc. ATI RADEON XPRESS 1100 supported 0 1 2.1 ATI Radeon Xpress ATI Technologies Inc. ATI RADEON XPRESS 1100 Series supported 0 1 2.1 ATI Radeon Xpress @@ -833,7 +833,7 @@ ATI Technologies Inc. ATI Radeon 9550 / X1050 Series(Microsoft Corporation - WDD ATI Technologies Inc. ATI Radeon 9600 / X1050 Series supported 0 1 2.1 ATI Radeon 9600 ATI Technologies Inc. ATI Radeon 9600 / X1050 Series x86/SSE2 supported 0 1 2.1 ATI Radeon 9600 ATI Technologies Inc. ATI Radeon 9600/9550/X1050 Series supported 0 1 2.1 ATI Radeon 9600 -ATI Technologies Inc. ATI Radeon BA Prototype OpenGL Engine NO MATCH +ATI Technologies Inc. ATI Radeon BA Prototype OpenGL Engine supported 3 1 2.1 AMD BA (HD 6800) ATI Technologies Inc. ATI Radeon Barts PRO Prototype OpenGL Engine supported 3 1 2.1 AMD BARTS (HD 6800) ATI Technologies Inc. ATI Radeon Barts XT Prototype OpenGL Engine supported 3 1 2.1 AMD BARTS (HD 6800) ATI Technologies Inc. ATI Radeon Caicos PRO Prototype OpenGL Engine supported 3 0 0 AMD CAICOS (HD 6400) @@ -1056,7 +1056,7 @@ ATI Technologies Inc. GeCube RADEON X550 x86/SSE2 ATI Technologies Inc. GeCube RADEON X700 Series supported 2 1 2.1 ATI Radeon X700 ATI Technologies Inc. GeCube Radeon X1550 supported 2 1 2.1 ATI Radeon X1500 ATI Technologies Inc. GeCube Radeon X1550 Series supported 2 1 2.1 ATI Radeon X1500 -ATI Technologies Inc. GeForce 9600 GT x86/SSE2 NO MATCH +ATI Technologies Inc. GeForce 9600 GT x86/SSE2 unsupported 0 0 0 ATI GeForce Lulz ATI Technologies Inc. GigaByte Radeon X1050 supported 2 0 2.1 ATI Radeon X1000 ATI Technologies Inc. Gigabyte RADEON X300 supported 1 1 2.1 ATI Radeon X300 ATI Technologies Inc. Gigabyte RADEON X300 SE supported 1 1 2.1 ATI Radeon X300 @@ -1102,8 +1102,8 @@ ATI Technologies Inc. MOBILITY/RADEON 9250/9200 Series DDR x86/MMX/3DNow!/SSE2 ATI Technologies Inc. MOBILITY/RADEON 9250/9200 Series DDR x86/SSE2 supported 0 1 1.3 ATI Radeon 9200 ATI Technologies Inc. MSI RX9550SE x86/MMX/3DNow!/SSE supported 1 0 0 ATI Radeon RX9550 ATI Technologies Inc. MSI Radeon X1550 supported 2 1 2.1 ATI Radeon X1500 -ATI Technologies Inc. Mobility Radeon X2300 HD supported 2 0 2.1 ATI Radeon X2300 -ATI Technologies Inc. Mobility Radeon X2300 HD x86/SSE2 supported 2 0 2.1 ATI Radeon X2300 +ATI Technologies Inc. Mobility Radeon X2300 HD supported 2 0 2.1 ATI Mobility Radeon X2300 +ATI Technologies Inc. Mobility Radeon X2300 HD x86/SSE2 supported 2 0 2.1 ATI Mobility Radeon X2300 ATI Technologies Inc. RADEON 7000 DDR x86/MMX/3DNow!/SSE2 supported 0 1 2 ATI Radeon 7xxx ATI Technologies Inc. RADEON 7000 DDR x86/SSE2 supported 0 1 2 ATI Radeon 7xxx ATI Technologies Inc. RADEON 7000 SDR x86 supported 0 1 2 ATI Radeon 7xxx @@ -1238,8 +1238,8 @@ ATI Technologies Inc. ROBSON LE ATI Technologies Inc. RS780M supported 0 1 2.1 AMD RS780 (HD 3200) ATI Technologies Inc. RS880 supported 0 1 3.2 AMD RS880 (HD 4200) ATI Technologies Inc. RV250 DDR x86/SSE2 supported 0 0 0 ATI Radeon RV250 -ATI Technologies Inc. Radeon X1300XT/X1600 Pro Series NO MATCH -ATI Technologies Inc. Radeon X1300XT/X1600Pro/X1650 Series NO MATCH +ATI Technologies Inc. Radeon X1300XT/X1600 Pro Series supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. Radeon X1300XT/X1600Pro/X1650 Series supported 2 1 2.1 ATI Radeon X1300 ATI Technologies Inc. Radeon (TM) HD 7670M supported 3 0 4.2 ATI Radeon HD 7600 ATI Technologies Inc. Radeon (TM) HD 6370M supported 1 1 4.2 ATI Radeon HD 6300 ATI Technologies Inc. Radeon (TM) HD 6470M supported 3 1 4.2 ATI Radeon HD 6400 @@ -1349,8 +1349,8 @@ ATI Technologies Inc. SUMO 964A ATI Technologies Inc. Sapphire RADEON X1600 PRO supported 2 1 2.1 ATI Radeon X1600 ATI Technologies Inc. Sapphire RADEON X1600 PRO x86/SSE2 supported 2 1 2.1 ATI Radeon X1600 ATI Technologies Inc. Sapphire RADEON X1600 XT supported 2 1 2.1 ATI Radeon X1600 -ATI Technologies Inc. Tul Corporation, RADEON X1300 Series NO MATCH -ATI Technologies Inc. Tul Corporation, RADEON X300SE NO MATCH +ATI Technologies Inc. Tul Corporation, RADEON X1300 Series supported 2 1 2.1 ATI Radeon X1300 +ATI Technologies Inc. Tul Corporation, RADEON X300SE supported 1 1 2.1 ATI RADEON X300SE ATI Technologies Inc. VisionTek Radeon 4350 supported 2 1 4 ATI Radeon HD 4300 ATI Technologies Inc. VisionTek Radeon HD 2400 PCI supported 1 1 4 ATI Radeon HD 2400 ATI Technologies Inc. VisionTek Radeon HD 2600 XT AGP supported 2 1 4 ATI Radeon HD 2600 @@ -1364,7 +1364,7 @@ ATI Technologies Inc. VisionTek Radeon X1550 Series ATI Technologies Inc. WRESTLER 9802 supported 3 1 4 AMD WRESTLER ATI Technologies Inc. XFX Radeon HD 4570 supported 2 1 3.3 ATI Radeon HD 4500 Advanced Micro Devices, Inc. Mesa DRI R600 (RS880 9712) 20090101 x86/MMX+/3DNow!+/SSE2 TCL DRI2 supported 0 1 3.2 AMD RS880 (HD 4200) -Alex Mohr GL Hijacker! NO MATCH +Alex Mohr GL Hijacker! unsupported 0 0 0 Hijacker Brian Paul Mesa X11 unsupported 1 1 3 Mesa Gallium supported 1 1 2.1 Gallium Humper supported 0 1 2.1 Humper @@ -1447,7 +1447,7 @@ Intel Intel(R) Q45/Q43 Express Chipset Intel Mobile 4 Series supported 0 1 2.1 Intel Mobile 4 Series Intel Mobile Intel(R) 4 Series Express Chipset Family supported 0 1 2.1 Intel Mobile 4 Series Intel Mobile Intel(R) 4 Series Express Chipset Family v2 supported 0 1 2.1 Intel Mobile 4 Series -Intel Mobile Intel(R) 45 Express Chipset Family (Microsoft Corporation - WDDM 1.1) NO MATCH +Intel Mobile Intel(R) 45 Express Chipset Family (Microsoft Corporation - WDDM 1.1) supported 0 0 2.1 Intel Mobile 45 Express Intel Mobile Intel(R) HD Graphics supported 2 1 4 Intel HD Graphics Intel Montara unsupported 0 1 1.3 Intel Montara Intel Open Source Technology Center Mesa DRI Intel(R) 852GM/855GM x86/MMX/SSE2 unsupported 0 1 1.4 Intel 855GM @@ -1490,7 +1490,7 @@ Intel Open Source Technology Center Mesa DRI Mobile Intel Intel Open Source Technology Center Mesa DRI Mobile Intel GM45 Express Chipset x86/MMX/SSE2 unsupported 1 1 3 Mesa Intel Pineview supported 0 1 1.4 Intel Pineview Intel Q45/Q43 supported 1 1 2.1 Intel Q45/Q43 -Intel Royal BNA Driver NO MATCH +Intel Royal BNA Driver unsupported 0 0 0 Intel Royal BNA Intel Springdale unsupported 0 1 1.3 Intel Springdale Intel X3100 supported 1 1 2.1 Intel X3100 Matrox Graphics Inc. Matrox ICD for M-Series unsupported 0 0 0 Matrox @@ -1502,13 +1502,13 @@ Mesa project: www.mesa3d.org Mesa GLX Indirect NVIDIA 205 NO MATCH NVIDIA 210 NO MATCH NVIDIA 310 NO MATCH -NVIDIA 310M NO MATCH +NVIDIA 310M supported 2 0 3.3 NVIDIA G 310M NVIDIA 315 NO MATCH -NVIDIA 315M NO MATCH -NVIDIA 320M NO MATCH +NVIDIA 315M supported 2 0 3.3 NVIDIA G 310M +NVIDIA 320M supported 3 0 3.3 NVIDIA GT 320M NVIDIA 405 NO MATCH NVIDIA 410 NO MATCH -NVIDIA 510 NO MATCH +NVIDIA 510 supported 3 0 0 NVIDIA 510 NVIDIA 610M supported 3 1 4.2 NVIDIA 610M NVIDIA Corporation /PCI/SSE2 NO MATCH NVIDIA Corporation 3D-Analyze v2.3 - http://www.tommti-systems.com unsupported 0 0 0 ATI 3D-Analyze @@ -1527,7 +1527,7 @@ NVIDIA Corporation GK106/PCIe/SSE2 NVIDIA Corporation GRID K2/PCIe/SSE2 NO MATCH NVIDIA Corporation GeForce GTX 555/PCI/SSE2 supported 5 1 4.3 NVIDIA GTX 550 NVIDIA Corporation GeForce GTX 555/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 550 -NVIDIA Corporation GeForce 205/PCI/SSE2 supported 2 1 3.3 NVIDIA 200 +NVIDIA Corporation GeForce 205/PCI/SSE2 supported 3 1 3.3 NVIDIA 205 NVIDIA Corporation GeForce 210/PCI/SSE2 supported 3 1 3.3 NVIDIA 210 NVIDIA Corporation GeForce 210/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA 210 NVIDIA Corporation GeForce 210/PCIe/SSE2 supported 3 1 3.3 NVIDIA 210 @@ -1552,7 +1552,7 @@ NVIDIA Corporation GeForce 405/PCIe/SSE2 NVIDIA Corporation GeForce 405/PCIe/SSE2/3DNOW! supported 3 0 3.3 NVIDIA 405 NVIDIA Corporation GeForce 410M/PCI/SSE2 supported 3 0 0 NVIDIA 410M NVIDIA Corporation GeForce 410M/PCIe/SSE2 supported 3 0 0 NVIDIA 410M -NVIDIA Corporation GeForce 505/PCIe/SSE2 NO MATCH +NVIDIA Corporation GeForce 505/PCIe/SSE2 supported 3 0 0 NVIDIA 505 NVIDIA Corporation GeForce 510/PCI/SSE2 supported 3 0 0 NVIDIA 510 NVIDIA Corporation GeForce 510/PCIe/SSE2 supported 3 0 0 NVIDIA 510 NVIDIA Corporation GeForce 605/PCI/SSE2 supported 3 1 4.2 NVIDIA 605 @@ -2034,14 +2034,14 @@ NVIDIA Corporation GeForce G100/PCI/SSE2 NVIDIA Corporation GeForce G100/PCI/SSE2/3DNOW! supported 3 1 4.2 NVIDIA G100 NVIDIA Corporation GeForce G100/PCIe/SSE2 supported 3 1 4.2 NVIDIA G100 NVIDIA Corporation GeForce G100/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA G100 -NVIDIA Corporation GeForce G102M/PCI/SSE2 supported 3 1 4.2 NVIDIA G100 -NVIDIA Corporation GeForce G102M/integrated/SSE2 supported 3 1 4.2 NVIDIA G100 -NVIDIA Corporation GeForce G105M/PCI/SSE2 supported 3 1 4.2 NVIDIA G100 -NVIDIA Corporation GeForce G105M/PCIe/SSE2 supported 3 1 4.2 NVIDIA G100 +NVIDIA Corporation GeForce G102M/PCI/SSE2 supported 1 1 3.3 NVIDIA G 100M +NVIDIA Corporation GeForce G102M/integrated/SSE2 supported 1 1 3.3 NVIDIA G 100M +NVIDIA Corporation GeForce G105M/PCI/SSE2 supported 1 1 3.3 NVIDIA G 100M +NVIDIA Corporation GeForce G105M/PCIe/SSE2 supported 1 1 3.3 NVIDIA G 100M NVIDIA Corporation GeForce G200/PCI/SSE2 supported 2 1 3.3 NVIDIA G200 NVIDIA Corporation GeForce G200/integrated/SSE2 supported 2 1 3.3 NVIDIA G200 -NVIDIA Corporation GeForce G205M/PCI/SSE2 supported 2 1 3.3 NVIDIA G200 -NVIDIA Corporation GeForce G205M/integrated/SSE2 supported 2 1 3.3 NVIDIA G200 +NVIDIA Corporation GeForce G205M/PCI/SSE2 supported 1 0 0 NVIDIA G 200M +NVIDIA Corporation GeForce G205M/integrated/SSE2 supported 1 0 0 NVIDIA G 200M NVIDIA Corporation GeForce G210/PCI/SSE2 supported 3 1 3.3 NVIDIA G210 NVIDIA Corporation GeForce G210/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA G210 NVIDIA Corporation GeForce G210/PCIe/SSE2 supported 3 1 3.3 NVIDIA G210 @@ -2097,8 +2097,8 @@ NVIDIA Corporation GeForce GT 335M/PCI/SSE2 NVIDIA Corporation GeForce GT 335M/PCIe/SSE2 supported 3 1 3.3 NVIDIA GT 330M NVIDIA Corporation GeForce GT 340/PCI/SSE2 supported 3 0 0 NVIDIA GT 340 NVIDIA Corporation GeForce GT 340/PCIe/SSE2 supported 3 0 0 NVIDIA GT 340 -NVIDIA Corporation GeForce GT 415/PCIe/SSE2 NO MATCH -NVIDIA Corporation GeForce GT 415/PCIe/SSE2/3DNOW! NO MATCH +NVIDIA Corporation GeForce GT 415/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 415 +NVIDIA Corporation GeForce GT 415/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GT 415 NVIDIA Corporation GeForce GT 415M/PCI/SSE2 supported 3 0 0 NVIDIA 410M NVIDIA Corporation GeForce GT 415M/PCIe/SSE2 supported 3 0 0 NVIDIA 410M NVIDIA Corporation GeForce GT 420/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 420 @@ -2114,10 +2114,10 @@ NVIDIA Corporation GeForce GT 430/PCIe/SSE2 NVIDIA Corporation GeForce GT 430/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GT 430 NVIDIA Corporation GeForce GT 435M/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 430M NVIDIA Corporation GeForce GT 435M/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 430M -NVIDIA Corporation GeForce GT 440/PCI/SSE2 supported 4 0 4.2 NVIDIA GT 440 -NVIDIA Corporation GeForce GT 440/PCI/SSE2/3DNOW! supported 4 0 4.2 NVIDIA GT 440 -NVIDIA Corporation GeForce GT 440/PCIe/SSE2 supported 4 0 4.2 NVIDIA GT 440 -NVIDIA Corporation GeForce GT 440/PCIe/SSE2/3DNOW! supported 4 0 4.2 NVIDIA GT 440 +NVIDIA Corporation GeForce GT 440/PCI/SSE2 supported 4 1 4.2 NVIDIA GT 440 +NVIDIA Corporation GeForce GT 440/PCI/SSE2/3DNOW! supported 4 1 4.2 NVIDIA GT 440 +NVIDIA Corporation GeForce GT 440/PCIe/SSE2 supported 4 1 4.2 NVIDIA GT 440 +NVIDIA Corporation GeForce GT 440/PCIe/SSE2/3DNOW! supported 4 1 4.2 NVIDIA GT 440 NVIDIA Corporation GeForce GT 445M/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 440M NVIDIA Corporation GeForce GT 445M/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 440M NVIDIA Corporation GeForce GT 520/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 520 @@ -2142,27 +2142,27 @@ NVIDIA Corporation GeForce GT 550M/PCI/SSE2 NVIDIA Corporation GeForce GT 550M/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 550M NVIDIA Corporation GeForce GT 555M/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 550M NVIDIA Corporation GeForce GT 555M/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 550M -NVIDIA Corporation GeForce GT 610/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 610 -NVIDIA Corporation GeForce GT 610/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GT 610 -NVIDIA Corporation GeForce GT 620/PCI/SSE2 supported 3 0 4.2 NVIDIA GT 620 -NVIDIA Corporation GeForce GT 620/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 620 -NVIDIA Corporation GeForce GT 620/PCIe/SSE2/3DNOW! supported 3 0 4.2 NVIDIA GT 620 +NVIDIA Corporation GeForce GT 610/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 61x +NVIDIA Corporation GeForce GT 610/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GT 61x +NVIDIA Corporation GeForce GT 620/PCI/SSE2 supported 3 0 4.2 NVIDIA GT 62x +NVIDIA Corporation GeForce GT 620/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 62x +NVIDIA Corporation GeForce GT 620/PCIe/SSE2/3DNOW! supported 3 0 4.2 NVIDIA GT 62x NVIDIA Corporation GeForce GT 620M/PCI/SSE2 supported 3 0 4.2 NVIDIA GT 620M NVIDIA Corporation GeForce GT 620M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 620M -NVIDIA Corporation GeForce GT 625/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 620 +NVIDIA Corporation GeForce GT 625/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 62x NVIDIA Corporation GeForce GT 625M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 620M -NVIDIA Corporation GeForce GT 630/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 630 -NVIDIA Corporation GeForce GT 630/PCIe/SSE2/3DNOW! supported 3 0 4.2 NVIDIA GT 630 +NVIDIA Corporation GeForce GT 630/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 63x +NVIDIA Corporation GeForce GT 630/PCIe/SSE2/3DNOW! supported 3 0 4.2 NVIDIA GT 63x NVIDIA Corporation GeForce GT 630M/PCI/SSE2 supported 3 0 4.2 NVIDIA GT 630M NVIDIA Corporation GeForce GT 630M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 630M NVIDIA Corporation GeForce GT 635M/PCI/SSE2 supported 3 0 4.2 NVIDIA GT 630M NVIDIA Corporation GeForce GT 635M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 630M -NVIDIA Corporation GeForce GT 640/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 640 -NVIDIA Corporation GeForce GT 640/PCIe/SSE2/3DNOW! supported 3 0 4.2 NVIDIA GT 640 +NVIDIA Corporation GeForce GT 640/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 64x +NVIDIA Corporation GeForce GT 640/PCIe/SSE2/3DNOW! supported 3 0 4.2 NVIDIA GT 64x NVIDIA Corporation GeForce GT 640M LE/PCI/SSE2 supported 3 0 4.2 NVIDIA GT 640M NVIDIA Corporation GeForce GT 640M LE/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 640M NVIDIA Corporation GeForce GT 640M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 640M -NVIDIA Corporation GeForce GT 645/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 640 +NVIDIA Corporation GeForce GT 645/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 64x NVIDIA Corporation GeForce GT 645M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 640M NVIDIA Corporation GeForce GT 650M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 650M NVIDIA Corporation GeForce GT 720M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 720M @@ -2170,8 +2170,8 @@ NVIDIA Corporation GeForce GT 730M/PCIe/SSE2 NVIDIA Corporation GeForce GT 735M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 730M NVIDIA Corporation GeForce GT 740M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 740M NVIDIA Corporation GeForce GT 750M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 750M -NVIDIA Corporation GeForce GT620M/PCIe/SSE2 NO MATCH -NVIDIA Corporation GeForce GT625M/PCIe/SSE2 NO MATCH +NVIDIA Corporation GeForce GT620M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 620M +NVIDIA Corporation GeForce GT625M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 620M NVIDIA Corporation GeForce GTS 150/PCI/SSE2 supported 2 0 0 NVIDIA GTS 150 NVIDIA Corporation GeForce GTS 160M/PCI/SSE2 supported 2 0 0 NVIDIA GTS 160M NVIDIA Corporation GeForce GTS 160M/PCIe/SSE2 supported 2 0 0 NVIDIA GTS 160M @@ -2272,39 +2272,39 @@ NVIDIA Corporation GeForce GTX 580M/PCIe/SSE2 NVIDIA Corporation GeForce GTX 590/PCI/SSE2 supported 5 1 4.2 NVIDIA GTX 590 NVIDIA Corporation GeForce GTX 590/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 590 NVIDIA Corporation GeForce GTX 590/PCIe/SSE2/3DNOW! supported 5 1 4.2 NVIDIA GTX 590 -NVIDIA Corporation GeForce GTX 645/PCIe/SSE2 NO MATCH -NVIDIA Corporation GeForce GTX 650 Ti BOOST/PCIe/SSE2 supported 3 1 4.2 NVIDIA GTX 650 -NVIDIA Corporation GeForce GTX 650 Ti BOOST/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GTX 650 -NVIDIA Corporation GeForce GTX 650 Ti Boost/PCIe/SSE2 supported 3 1 4.2 NVIDIA GTX 650 -NVIDIA Corporation GeForce GTX 650 Ti Boost/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GTX 650 -NVIDIA Corporation GeForce GTX 650 Ti/PCIe/SSE2 supported 3 1 4.2 NVIDIA GTX 650 -NVIDIA Corporation GeForce GTX 650 Ti/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GTX 650 -NVIDIA Corporation GeForce GTX 650/PCIe/SSE2 supported 3 1 4.2 NVIDIA GTX 650 -NVIDIA Corporation GeForce GTX 650/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GTX 650 -NVIDIA Corporation GeForce GTX 660 Ti/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 660 -NVIDIA Corporation GeForce GTX 660 Ti/PCIe/SSE2/3DNOW! supported 5 0 4.2 NVIDIA GTX 660 -NVIDIA Corporation GeForce GTX 660/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 660 -NVIDIA Corporation GeForce GTX 660/PCIe/SSE2/3DNOW! supported 5 0 4.2 NVIDIA GTX 660 +NVIDIA Corporation GeForce GTX 645/PCIe/SSE2 supported 3 1 4.2 NVIDIA GTX 64x +NVIDIA Corporation GeForce GTX 650 Ti BOOST/PCIe/SSE2 supported 3 1 4.2 NVIDIA GTX 65x +NVIDIA Corporation GeForce GTX 650 Ti BOOST/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GTX 65x +NVIDIA Corporation GeForce GTX 650 Ti Boost/PCIe/SSE2 supported 3 1 4.2 NVIDIA GTX 65x +NVIDIA Corporation GeForce GTX 650 Ti Boost/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GTX 65x +NVIDIA Corporation GeForce GTX 650 Ti/PCIe/SSE2 supported 3 1 4.2 NVIDIA GTX 65x +NVIDIA Corporation GeForce GTX 650 Ti/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GTX 65x +NVIDIA Corporation GeForce GTX 650/PCIe/SSE2 supported 3 1 4.2 NVIDIA GTX 65x +NVIDIA Corporation GeForce GTX 650/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GTX 65x +NVIDIA Corporation GeForce GTX 660 Ti/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 66x +NVIDIA Corporation GeForce GTX 660 Ti/PCIe/SSE2/3DNOW! supported 5 0 4.2 NVIDIA GTX 66x +NVIDIA Corporation GeForce GTX 660/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 66x +NVIDIA Corporation GeForce GTX 660/PCIe/SSE2/3DNOW! supported 5 0 4.2 NVIDIA GTX 66x NVIDIA Corporation GeForce GTX 660M/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 660M -NVIDIA Corporation GeForce GTX 670/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 670 -NVIDIA Corporation GeForce GTX 670/PCIe/SSE2/3DNOW! supported 5 1 4.2 NVIDIA GTX 670 +NVIDIA Corporation GeForce GTX 670/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 67x +NVIDIA Corporation GeForce GTX 670/PCIe/SSE2/3DNOW! supported 5 1 4.2 NVIDIA GTX 67x NVIDIA Corporation GeForce GTX 670M/PCI/SSE2 supported 5 1 4.2 NVIDIA GTX 670M NVIDIA Corporation GeForce GTX 670M/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 670M NVIDIA Corporation GeForce GTX 670MX/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 670M NVIDIA Corporation GeForce GTX 675M/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 670M NVIDIA Corporation GeForce GTX 675MX/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 670M -NVIDIA Corporation GeForce GTX 680/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 680 -NVIDIA Corporation GeForce GTX 680/PCIe/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 680 +NVIDIA Corporation GeForce GTX 680/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 68x +NVIDIA Corporation GeForce GTX 680/PCIe/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 68x NVIDIA Corporation GeForce GTX 680M/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 680M NVIDIA Corporation GeForce GTX 680MX/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 680M -NVIDIA Corporation GeForce GTX 690/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 690 -NVIDIA Corporation GeForce GTX 760/PCIe/SSE2 supported 5 0 4.3 NVIDIA GTX 760 +NVIDIA Corporation GeForce GTX 690/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 69x +NVIDIA Corporation GeForce GTX 760/PCIe/SSE2 supported 5 0 4.3 NVIDIA GTX 76x NVIDIA Corporation GeForce GTX 760M/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 760M NVIDIA Corporation GeForce GTX 765M/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 760M -NVIDIA Corporation GeForce GTX 770/PCIe/SSE2 supported 5 0 4.3 NVIDIA GTX 770 -NVIDIA Corporation GeForce GTX 770/PCIe/SSE2/3DNOW! supported 5 0 4.3 NVIDIA GTX 770 +NVIDIA Corporation GeForce GTX 770/PCIe/SSE2 supported 5 0 4.3 NVIDIA GTX 77x +NVIDIA Corporation GeForce GTX 770/PCIe/SSE2/3DNOW! supported 5 0 4.3 NVIDIA GTX 77x NVIDIA Corporation GeForce GTX 770M/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 770M -NVIDIA Corporation GeForce GTX 780/PCIe/SSE2 supported 5 0 4.3 NVIDIA GTX 780 +NVIDIA Corporation GeForce GTX 780/PCIe/SSE2 supported 5 0 4.3 NVIDIA GTX 78x NVIDIA Corporation GeForce GTX 780M/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 780M NVIDIA Corporation GeForce GTX TITAN/PCIe/SSE2 supported 5 0 4.3 NVIDIA GTX TITAN NVIDIA Corporation GeForce GTX TITAN/PCIe/SSE2/3DNOW! supported 5 0 4.3 NVIDIA GTX TITAN @@ -2434,10 +2434,10 @@ NVIDIA Corporation NVIDIA GeForce GT 240 OpenGL Engine NVIDIA Corporation NVIDIA GeForce GT 320M OpenGL Engine supported 3 0 3.3 NVIDIA GT 320M NVIDIA Corporation NVIDIA GeForce GT 330M OpenGL Engine supported 3 1 3.3 NVIDIA GT 330M NVIDIA Corporation NVIDIA GeForce GT 430 OpenGL Engine supported 3 1 4.2 NVIDIA GT 430 -NVIDIA Corporation NVIDIA GeForce GT 440 OpenGL Engine supported 4 0 4.2 NVIDIA GT 440 +NVIDIA Corporation NVIDIA GeForce GT 440 OpenGL Engine supported 4 1 4.2 NVIDIA GT 440 NVIDIA Corporation NVIDIA GeForce GT 520 OpenGL Engine supported 3 1 4.2 NVIDIA GT 520 -NVIDIA Corporation NVIDIA GeForce GT 630 OpenGL Engine supported 3 0 4.2 NVIDIA GT 630 -NVIDIA Corporation NVIDIA GeForce GT 640 OpenGL Engine supported 3 0 4.2 NVIDIA GT 640 +NVIDIA Corporation NVIDIA GeForce GT 630 OpenGL Engine supported 3 0 4.2 NVIDIA GT 63x +NVIDIA Corporation NVIDIA GeForce GT 640 OpenGL Engine supported 3 0 4.2 NVIDIA GT 64x NVIDIA Corporation NVIDIA GeForce GT 640M OpenGL Engine supported 3 0 4.2 NVIDIA GT 640M NVIDIA Corporation NVIDIA GeForce GT 650M OpenGL Engine supported 3 0 4.2 NVIDIA GT 650M NVIDIA Corporation NVIDIA GeForce GTS 250 OpenGL Engine supported 4 1 3.3 NVIDIA GTS 250 @@ -2453,22 +2453,22 @@ NVIDIA Corporation NVIDIA GeForce GTX 560 OpenGL Engine NVIDIA Corporation NVIDIA GeForce GTX 560 Ti OpenGL Engine supported 5 1 4.2 NVIDIA GTX 560 NVIDIA Corporation NVIDIA GeForce GTX 570 OpenGL Engine supported 5 1 4.2 NVIDIA GTX 570 NVIDIA Corporation NVIDIA GeForce GTX 580 OpenGL Engine supported 5 1 4.3 NVIDIA GTX 580 -NVIDIA Corporation NVIDIA GeForce GTX 650 OpenGL Engine supported 3 1 4.2 NVIDIA GTX 650 -NVIDIA Corporation NVIDIA GeForce GTX 650 Ti OpenGL Engine supported 3 1 4.2 NVIDIA GTX 650 -NVIDIA Corporation NVIDIA GeForce GTX 660 OpenGL Engine supported 5 0 4.2 NVIDIA GTX 660 -NVIDIA Corporation NVIDIA GeForce GTX 660 Ti OpenGL Engine supported 5 0 4.2 NVIDIA GTX 660 +NVIDIA Corporation NVIDIA GeForce GTX 650 OpenGL Engine supported 3 1 4.2 NVIDIA GTX 65x +NVIDIA Corporation NVIDIA GeForce GTX 650 Ti OpenGL Engine supported 3 1 4.2 NVIDIA GTX 65x +NVIDIA Corporation NVIDIA GeForce GTX 660 OpenGL Engine supported 5 0 4.2 NVIDIA GTX 66x +NVIDIA Corporation NVIDIA GeForce GTX 660 Ti OpenGL Engine supported 5 0 4.2 NVIDIA GTX 66x NVIDIA Corporation NVIDIA GeForce GTX 660M OpenGL Engine supported 5 0 4.2 NVIDIA GTX 660M -NVIDIA Corporation NVIDIA GeForce GTX 670 OpenGL Engine supported 5 1 4.2 NVIDIA GTX 670 +NVIDIA Corporation NVIDIA GeForce GTX 670 OpenGL Engine supported 5 1 4.2 NVIDIA GTX 67x NVIDIA Corporation NVIDIA GeForce GTX 675MX OpenGL Engine supported 5 1 4.2 NVIDIA GTX 670M -NVIDIA Corporation NVIDIA GeForce GTX 680 OpenGL Engine supported 5 1 4.3 NVIDIA GTX 680 +NVIDIA Corporation NVIDIA GeForce GTX 680 OpenGL Engine supported 5 1 4.3 NVIDIA GTX 68x NVIDIA Corporation NVIDIA GeForce GTX 680MX OpenGL Engine supported 5 0 4.2 NVIDIA GTX 680M NVIDIA Corporation NVIDIA GeForce GTX 775M OpenGL Engine supported 5 0 4.2 NVIDIA GTX 770M NVIDIA Corporation NVIDIA GeForce GTX 780M OpenGL Engine supported 5 0 4.2 NVIDIA GTX 780M NVIDIA Corporation NVIDIA GeForce Go 7600 OpenGL Engine supported 1 1 2.1 NVIDIA GeForce Go 7600 -NVIDIA Corporation NVIDIA GeForce Pre-Release D14P2-30 OpenGL Engine NO MATCH -NVIDIA Corporation NVIDIA GeForce Pre-Release GK104 OpenGL Engine NO MATCH -NVIDIA Corporation NVIDIA GeForce Pre-Release ION OpenGL Engine supported 2 1 3.3 NVIDIA ION -NVIDIA Corporation NVIDIA GeForce Pre-Release Unknown OpenGL Engine unsupported 0 0 2.1 NVIDIA Generic +NVIDIA Corporation NVIDIA GeForce Pre-Release D14P2-30 OpenGL Engine supported 2 1 3.3 NVIDIA GeForce Pre-Release +NVIDIA Corporation NVIDIA GeForce Pre-Release GK104 OpenGL Engine supported 2 1 3.3 NVIDIA GeForce Pre-Release +NVIDIA Corporation NVIDIA GeForce Pre-Release ION OpenGL Engine supported 2 1 3.3 NVIDIA GeForce Pre-Release +NVIDIA Corporation NVIDIA GeForce Pre-Release Unknown OpenGL Engine supported 2 1 3.3 NVIDIA GeForce Pre-Release NVIDIA Corporation NVIDIA NV34MAP OpenGL Engine supported 0 0 0 NVIDIA NV34 NVIDIA Corporation NVIDIA Quadro 4000 OpenGL Engine supported 3 0 4.2 NVIDIA Quadro 4000 NVIDIA Corporation NVIDIA Quadro FX 4500 OpenGL Engine supported 3 0 2.1 NVIDIA Quadro FX 4500 @@ -2476,23 +2476,23 @@ NVIDIA Corporation NVIDIA Quadro FX 4800 OpenGL Engine NVIDIA Corporation NVIDIA Quadro FX 5600 OpenGL Engine supported 1 0 3.3 NVIDIA Quadro FX NVIDIA Corporation NVIDIA Quadro FX 580 OpenGL Engine supported 1 0 3.3 NVIDIA Quadro FX NVIDIA Corporation NVIDIA Quadro FX 770M OpenGL Engine supported 2 0 3.3 NVIDIA Quadro FX 770M -NVIDIA Corporation NVS 2100M/PCI/SSE2 supported 2 0 3.3 NVIDIA Quadro NVS 2100M -NVIDIA Corporation NVS 2100M/PCIe/SSE2 supported 2 0 3.3 NVIDIA Quadro NVS 2100M -NVIDIA Corporation NVS 300/PCI/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS -NVIDIA Corporation NVS 300/PCI/SSE2/3DNOW! supported 0 0 4.2 NVIDIA Quadro NVS -NVIDIA Corporation NVS 300/PCIe/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS -NVIDIA Corporation NVS 310/PCIe/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS -NVIDIA Corporation NVS 3100M/PCI/SSE2 supported 2 0 3.3 NVIDIA Quadro NVS 3100M -NVIDIA Corporation NVS 3100M/PCIe/SSE2 supported 2 0 3.3 NVIDIA Quadro NVS 3100M -NVIDIA Corporation NVS 315/PCIe/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS -NVIDIA Corporation NVS 4200M/PCI/SSE2 supported 2 0 4.2 NVIDIA Quadro NVS 4200M -NVIDIA Corporation NVS 4200M/PCIe/SSE2 supported 2 0 4.2 NVIDIA Quadro NVS 4200M +NVIDIA Corporation NVS 2100M/PCI/SSE2 NO MATCH +NVIDIA Corporation NVS 2100M/PCIe/SSE2 NO MATCH +NVIDIA Corporation NVS 300/PCI/SSE2 NO MATCH +NVIDIA Corporation NVS 300/PCI/SSE2/3DNOW! NO MATCH +NVIDIA Corporation NVS 300/PCIe/SSE2 NO MATCH +NVIDIA Corporation NVS 310/PCIe/SSE2 supported 3 1 3.3 NVIDIA 310 +NVIDIA Corporation NVS 3100M/PCI/SSE2 supported 3 1 3.3 NVIDIA 310 +NVIDIA Corporation NVS 3100M/PCIe/SSE2 supported 3 1 3.3 NVIDIA 310 +NVIDIA Corporation NVS 315/PCIe/SSE2 supported 3 1 3.3 NVIDIA 315 +NVIDIA Corporation NVS 4200M/PCI/SSE2 NO MATCH +NVIDIA Corporation NVS 4200M/PCIe/SSE2 NO MATCH NVIDIA Corporation NVS 510/PCIe/SSE2 supported 3 0 0 NVIDIA 510 NVIDIA Corporation NVS 5100M/PCI/SSE2 supported 3 0 0 NVIDIA 510 NVIDIA Corporation NVS 5100M/PCIe/SSE2 supported 3 0 0 NVIDIA 510 -NVIDIA Corporation NVS 5200M/PCI/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS -NVIDIA Corporation NVS 5200M/PCIe/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS -NVIDIA Corporation NVS 5400M/PCIe/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation NVS 5200M/PCI/SSE2 NO MATCH +NVIDIA Corporation NVS 5200M/PCIe/SSE2 NO MATCH +NVIDIA Corporation NVS 5400M/PCIe/SSE2 NO MATCH NVIDIA Corporation Quadro 1000M/PCI/SSE2 supported 2 0 4.2 NVIDIA Quadro 1000M NVIDIA Corporation Quadro 1000M/PCIe/SSE2 supported 2 0 4.2 NVIDIA Quadro 1000M NVIDIA Corporation Quadro 1100M/PCIe/SSE2 NO MATCH @@ -2511,7 +2511,7 @@ NVIDIA Corporation Quadro 4000/PCI/SSE2 NVIDIA Corporation Quadro 4000/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 4000 NVIDIA Corporation Quadro 4000M/PCI/SSE2 supported 3 0 4.2 NVIDIA Quadro 4000M NVIDIA Corporation Quadro 4000M/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 4000M -NVIDIA Corporation Quadro 410/PCIe/SSE2 NO MATCH +NVIDIA Corporation Quadro 410/PCIe/SSE2 supported 3 0 3.3 NVIDIA 410 NVIDIA Corporation Quadro 5000/PCI/SSE2 supported 3 0 4.2 NVIDIA Quadro 50x0 M NVIDIA Corporation Quadro 5000/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 50x0 M NVIDIA Corporation Quadro 5000M/PCI/SSE2 supported 3 0 4.2 NVIDIA Quadro 50x0 M @@ -2622,8 +2622,8 @@ NVIDIA Corporation Quadro K2000M/PCIe/SSE2 NVIDIA Corporation Quadro K3000M/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 3000M NVIDIA Corporation Quadro K4000/PCIe/SSE2 NO MATCH NVIDIA Corporation Quadro K4000M/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 4000M -NVIDIA Corporation Quadro K5000/PCIe/SSE2 NO MATCH -NVIDIA Corporation Quadro K5000M/PCIe/SSE2 NO MATCH +NVIDIA Corporation Quadro K5000/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 50x0 M +NVIDIA Corporation Quadro K5000M/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 50x0 M NVIDIA Corporation Quadro K600/PCIe/SSE2 NO MATCH NVIDIA Corporation Quadro NVS 110M/PCI/SSE2 supported 0 1 3.3 NVIDIA Quadro NVS 1xxM NVIDIA Corporation Quadro NVS 130M/PCI/SSE2 supported 0 1 3.3 NVIDIA Quadro NVS 1xxM @@ -2636,11 +2636,11 @@ NVIDIA Corporation Quadro NVS 150M/PCI/SSE2 NVIDIA Corporation Quadro NVS 150M/PCIe/SSE2 supported 0 1 3.3 NVIDIA Quadro NVS 1xxM NVIDIA Corporation Quadro NVS 160M/PCI/SSE2 supported 0 1 3.3 NVIDIA Quadro NVS 1xxM NVIDIA Corporation Quadro NVS 160M/PCIe/SSE2 supported 0 1 3.3 NVIDIA Quadro NVS 1xxM -NVIDIA Corporation Quadro NVS 210S / GeForce 6150LE/PCI/SSE2 supported 3 1 4.2 NVIDIA GeForce 6100 -NVIDIA Corporation Quadro NVS 210S / GeForce 6150LE/PCI/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 -NVIDIA Corporation Quadro NVS 210S / GeForce 6150LE/integrated/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 -NVIDIA Corporation Quadro NVS 210S / NVIDIA GeForce 6150LE/PCI/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 -NVIDIA Corporation Quadro NVS 210S/PCI/SSE2/3DNOW! supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation Quadro NVS 210S / GeForce 6150LE/PCI/SSE2 supported 3 1 3.3 NVIDIA 210 +NVIDIA Corporation Quadro NVS 210S / GeForce 6150LE/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA 210 +NVIDIA Corporation Quadro NVS 210S / GeForce 6150LE/integrated/SSE2/3DNOW! supported 3 1 3.3 NVIDIA 210 +NVIDIA Corporation Quadro NVS 210S / NVIDIA GeForce 6150LE/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA 210 +NVIDIA Corporation Quadro NVS 210S/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA 210 NVIDIA Corporation Quadro NVS 280 PCI-E/PCI/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS NVIDIA Corporation Quadro NVS 280 SD/AGP/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS NVIDIA Corporation Quadro NVS 285/PCI/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS @@ -2674,10 +2674,10 @@ NVIDIA Corporation nForce 750a SLI/PCI/SSE2 NVIDIA Corporation nForce 750a SLI/integrated/SSE2 unsupported 0 0 3.3 NVIDIA nForce NVIDIA Corporation nForce 760i SLI/integrated/SSE2 unsupported 0 0 3.3 NVIDIA nForce NVIDIA Corporation nForce 980a/780a SLI/integrated/SSE2 unsupported 0 0 3.3 NVIDIA nForce -NVIDIA Corporation unknown board/AGP/SSE2 unsupported 0 0 2.1 NVIDIA Generic -NVIDIA Corporation unknown board/PCI/SSE2 unsupported 0 0 2.1 NVIDIA Generic -NVIDIA Corporation unknown board/PCI/SSE2/3DNOW! unsupported 0 0 2.1 NVIDIA Generic -NVIDIA Corporation unknown board/PCIe/SSE2 unsupported 0 0 2.1 NVIDIA Generic +NVIDIA Corporation unknown board/AGP/SSE2 unsupported 0 0 2.1 NVIDIA Generic Unknown +NVIDIA Corporation unknown board/PCI/SSE2 unsupported 0 0 2.1 NVIDIA Generic Unknown +NVIDIA Corporation unknown board/PCI/SSE2/3DNOW! unsupported 0 0 2.1 NVIDIA Generic Unknown +NVIDIA Corporation unknown board/PCIe/SSE2 unsupported 0 0 2.1 NVIDIA Generic Unknown NVIDIA D9M supported 1 0 0 NVIDIA D9M NVIDIA G 103M supported 1 1 3.3 NVIDIA G 100M NVIDIA G 105M supported 1 1 3.3 NVIDIA G 100M @@ -2692,12 +2692,12 @@ NVIDIA G 405 NVIDIA G 410M supported 3 1 4.2 NVIDIA G 410M NVIDIA G 610M supported 3 1 4.2 NVIDIA 610M NVIDIA G100 supported 3 1 4.2 NVIDIA G100 -NVIDIA G100M supported 3 1 4.2 NVIDIA G100 -NVIDIA G102M supported 3 1 4.2 NVIDIA G100 -NVIDIA G103M supported 3 1 4.2 NVIDIA G100 -NVIDIA G105M supported 3 1 4.2 NVIDIA G100 -NVIDIA G200 NO MATCH -NVIDIA G210 NO MATCH +NVIDIA G100M supported 1 1 3.3 NVIDIA G 100M +NVIDIA G102M supported 1 1 3.3 NVIDIA G 100M +NVIDIA G103M supported 1 1 3.3 NVIDIA G 100M +NVIDIA G105M supported 1 1 3.3 NVIDIA G 100M +NVIDIA G200 supported 2 1 3.3 NVIDIA G200 +NVIDIA G210 supported 3 1 3.3 NVIDIA G210 NVIDIA G210M supported 3 0 3.3 NVIDIA G210M NVIDIA G73 supported 1 0 0 NVIDIA G73 NVIDIA G84 supported 2 0 0 NVIDIA G84 @@ -2709,14 +2709,14 @@ NVIDIA GT 130 NVIDIA GT 130M supported 3 1 3.3 NVIDIA GT 130M NVIDIA GT 140 supported 2 0 3.3 NVIDIA GT 140 NVIDIA GT 140M supported 3 1 3.3 NVIDIA GT 140M -NVIDIA GT 150 NO MATCH +NVIDIA GT 150 supported 2 1 3.3 NVIDIA GT 150 NVIDIA GT 220 supported 2 1 3.3 NVIDIA GT 220 NVIDIA GT 220M supported 3 1 3.3 NVIDIA GT 220M NVIDIA GT 230 supported 2 1 3.3 NVIDIA GT 230 NVIDIA GT 230M supported 3 1 3.3 NVIDIA GT 230M NVIDIA GT 240 supported 4 1 3.3 NVIDIA GT 240 NVIDIA GT 240M supported 3 1 3.3 NVIDIA GT 240M -NVIDIA GT 260M NO MATCH +NVIDIA GT 260M supported 3 1 3.3 NVIDIA GT 260M NVIDIA GT 320 supported 3 0 3.3 NVIDIA GT 320 NVIDIA GT 320M supported 3 0 3.3 NVIDIA GT 320M NVIDIA GT 325M supported 3 0 3.3 NVIDIA GT 320M @@ -2732,34 +2732,34 @@ NVIDIA GT 425M NVIDIA GT 430 supported 3 1 4.2 NVIDIA GT 430 NVIDIA GT 430M supported 3 1 4.2 NVIDIA GT 430M NVIDIA GT 435M supported 3 1 4.2 NVIDIA GT 430M -NVIDIA GT 440 supported 4 0 4.2 NVIDIA GT 440 +NVIDIA GT 440 supported 4 1 4.2 NVIDIA GT 440 NVIDIA GT 440M supported 3 1 4.2 NVIDIA GT 440M NVIDIA GT 445M supported 3 1 4.2 NVIDIA GT 440M -NVIDIA GT 450 NO MATCH +NVIDIA GT 450 supported 4 1 4.2 NVIDIA GT 450 NVIDIA GT 520 supported 3 1 4.2 NVIDIA GT 520 NVIDIA GT 520M supported 3 1 4.2 NVIDIA GT 520M NVIDIA GT 525M supported 3 1 4.2 NVIDIA GT 520M NVIDIA GT 530M supported 3 1 4.2 NVIDIA GT 530M NVIDIA GT 540 supported 3 1 4.2 NVIDIA GT 540 NVIDIA GT 540M supported 3 1 4.2 NVIDIA GT 540M -NVIDIA GT 550 NO MATCH -NVIDIA GT 550M NO MATCH -NVIDIA GT 555M NO MATCH -NVIDIA GT 610 supported 3 1 4.2 NVIDIA GT 610 -NVIDIA GT 620 supported 3 0 4.2 NVIDIA GT 620 +NVIDIA GT 550 supported 3 1 4.2 NVIDIA GT 550 +NVIDIA GT 550M supported 3 1 4.2 NVIDIA GT 550M +NVIDIA GT 555M supported 3 1 4.2 NVIDIA GT 550M +NVIDIA GT 610 supported 3 1 4.2 NVIDIA GT 61x +NVIDIA GT 620 supported 3 0 4.2 NVIDIA GT 62x NVIDIA GT 620M supported 3 0 4.2 NVIDIA GT 620M -NVIDIA GT 630 supported 3 0 4.2 NVIDIA GT 630 +NVIDIA GT 630 supported 3 0 4.2 NVIDIA GT 63x NVIDIA GT 630M supported 3 0 4.2 NVIDIA GT 630M NVIDIA GT 635M supported 3 0 4.2 NVIDIA GT 630M -NVIDIA GT 640 supported 3 0 4.2 NVIDIA GT 640 +NVIDIA GT 640 supported 3 0 4.2 NVIDIA GT 64x NVIDIA GT 640M supported 3 0 4.2 NVIDIA GT 640M -NVIDIA GT 650 supported 3 1 4.2 NVIDIA GT 650 +NVIDIA GT 650 supported 3 1 4.2 NVIDIA GT 65x NVIDIA GT 650M supported 3 0 4.2 NVIDIA GT 650M NVIDIA GTS 160M supported 2 0 0 NVIDIA GTS 160M NVIDIA GTS 240 supported 4 1 3.3 NVIDIA GTS 240 NVIDIA GTS 250 supported 4 1 3.3 NVIDIA GTS 250 NVIDIA GTS 350M supported 4 1 3.3 NVIDIA GTS 350M -NVIDIA GTS 360 NO MATCH +NVIDIA GTS 360 supported 4 1 3.3 NVIDIA GTS 360 NVIDIA GTS 360M supported 5 1 3.3 NVIDIA GTS 360M NVIDIA GTS 450 supported 4 1 4.2 NVIDIA GTS 450 NVIDIA GTX 260 supported 4 1 3.3 NVIDIA GTX 260 @@ -2784,15 +2784,15 @@ NVIDIA GTX 570 NVIDIA GTX 580 supported 5 1 4.3 NVIDIA GTX 580 NVIDIA GTX 580M supported 5 1 4.2 NVIDIA GTX 580M NVIDIA GTX 590 supported 5 1 4.2 NVIDIA GTX 590 -NVIDIA GTX 650 supported 3 1 4.2 NVIDIA GTX 650 -NVIDIA GTX 660 supported 5 0 4.2 NVIDIA GTX 660 -NVIDIA GTX 670 supported 5 1 4.2 NVIDIA GTX 670 +NVIDIA GTX 650 supported 3 1 4.2 NVIDIA GTX 65x +NVIDIA GTX 660 supported 5 0 4.2 NVIDIA GTX 66x +NVIDIA GTX 670 supported 5 1 4.2 NVIDIA GTX 67x NVIDIA GTX 670M supported 5 1 4.2 NVIDIA GTX 670M NVIDIA GTX 675M supported 5 1 4.2 NVIDIA GTX 670M -NVIDIA GTX 680 supported 5 1 4.3 NVIDIA GTX 680 +NVIDIA GTX 680 supported 5 1 4.3 NVIDIA GTX 68x NVIDIA GTX 680M supported 5 0 4.2 NVIDIA GTX 680M -NVIDIA GTX 690 supported 5 1 4.3 NVIDIA GTX 690 -NVIDIA GTX 770 supported 5 0 4.3 NVIDIA GTX 770 +NVIDIA GTX 690 supported 5 1 4.3 NVIDIA GTX 69x +NVIDIA GTX 770 supported 5 0 4.3 NVIDIA GTX 77x NVIDIA GTX TITAN supported 5 0 4.3 NVIDIA GTX TITAN NVIDIA GeForce 2 supported 0 1 1.5 NVIDIA GeForce 2 NVIDIA GeForce 3 supported 2 1 2.1 NVIDIA GeForce 3 @@ -2847,7 +2847,7 @@ NVIDIA GeForce FX 5500 NVIDIA GeForce FX 5600 supported 1 1 2.1 NVIDIA GeForce FX 5600 NVIDIA GeForce FX 5700 supported 0 1 2.1 NVIDIA GeForce FX 5700 NVIDIA GeForce FX 5900 supported 1 1 2.1 NVIDIA GeForce FX 5900 -NVIDIA GeForce FX Go5100 supported 0 0 0 NVIDIA GeForce FX Go5100 +NVIDIA GeForce FX Go5100 supported 3 0 0 NVIDIA 510 NVIDIA GeForce FX Go5200 supported 0 0 1.5 NVIDIA GeForce FX Go5200 NVIDIA GeForce FX Go5600 supported 0 1 2.1 NVIDIA GeForce FX Go5600 NVIDIA GeForce FX Go5700 supported 1 1 1.5 NVIDIA GeForce FX Go5700 @@ -2865,11 +2865,11 @@ NVIDIA GeForce Go 7700 NVIDIA GeForce Go 7800 supported 2 0 0 NVIDIA GeForce Go 7800 NVIDIA GeForce Go 7900 supported 1 1 2.1 NVIDIA GeForce Go 7900 NVIDIA GeForce PCX supported 0 0 1.5 NVIDIA GeForce PCX -NVIDIA Generic NO MATCH +NVIDIA Generic unsupported 0 0 2.1 NVIDIA Generic NVIDIA ION NO MATCH NVIDIA MCP61 supported 1 0 2.1 NVIDIA MCP61 NVIDIA NV34 supported 0 0 0 NVIDIA NV34 -NVIDIA PCI NO MATCH +NVIDIA PCI unsupported 0 0 2.1 NVIDIA PCI NVIDIA Quadro 2000 supported 3 0 4.2 NVIDIA Quadro 2000 M/D NVIDIA Quadro 2000 M/D supported 3 0 4.2 NVIDIA Quadro 2000 M/D NVIDIA Quadro 3000M supported 3 0 4.2 NVIDIA Quadro 3000M @@ -2898,7 +2898,7 @@ NVIDIA Quadro NVS 1xxM NVIDIA Quadro NVS 4200M supported 2 0 4.2 NVIDIA Quadro NVS 4200M NVIDIA Quadro2 supported 0 0 1.5 NVIDIA Quadro2 NVIDIA nForce unsupported 0 0 3.3 NVIDIA nForce -Oracle VirtualBox Graphics NO MATCH +Oracle VirtualBox Graphics supported 0 1 2.1 Oracle Parallels and ATI Technologies Inc. Parallels using ATI Radeon Barts XT Prototype OpenGL Engine supported 3 1 2.1 AMD BARTS (HD 6800) Parallels and ATI Technologies Inc. Parallels using ATI Radeon HD 2600 OpenGL Engine supported 2 1 4 ATI Radeon HD 2600 Parallels and ATI Technologies Inc. Parallels using ATI Radeon HD 2600 PRO OpenGL Engine supported 2 1 4 ATI Radeon HD 2600 @@ -2922,16 +2922,16 @@ Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce 9400M OpenGL Eng Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce 9600M GT OpenGL Engine supported 2 1 3.3 NVIDIA GeForce 9600M Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GT 130 OpenGL Engine supported 2 0 3.3 NVIDIA GT 130 Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GT 330M OpenGL Engine supported 3 1 3.3 NVIDIA GT 330M -Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GT 640 OpenGL Engine supported 3 0 4.2 NVIDIA GT 640 +Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GT 640 OpenGL Engine supported 3 0 4.2 NVIDIA GT 64x Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GT 640M OpenGL Engine supported 3 0 4.2 NVIDIA GT 640M Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GT 650M OpenGL Engine supported 3 0 4.2 NVIDIA GT 650M Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GTX 570 OpenGL Engine supported 5 1 4.2 NVIDIA GTX 570 -Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GTX 660 OpenGL Engine supported 5 0 4.2 NVIDIA GTX 660 -Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GTX 660 Ti OpenGL Engine supported 5 0 4.2 NVIDIA GTX 660 -Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GTX 670 OpenGL Engine supported 5 1 4.2 NVIDIA GTX 670 +Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GTX 660 OpenGL Engine supported 5 0 4.2 NVIDIA GTX 66x +Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GTX 660 Ti OpenGL Engine supported 5 0 4.2 NVIDIA GTX 66x +Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GTX 670 OpenGL Engine supported 5 1 4.2 NVIDIA GTX 67x Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GTX 680MX OpenGL Engine supported 5 0 4.2 NVIDIA GTX 680M PowerVR SGX545 supported 1 1 3 PowerVR SGX545 -S3 NO MATCH +S3 unsupported 0 1 1.4 S3 S3 Graphics K8M800/MMX/K3D unsupported 0 1 1.4 S3 S3 Graphics KM400/KN400/MMX/SSE unsupported 0 1 1.4 S3 S3 Graphics P8M800/MMX/SSE unsupported 0 1 1.4 S3 @@ -2952,7 +2952,7 @@ SiS 661 VGA SiS 662 VGA unsupported 0 1 1.5 SiS SiS 760 VGA unsupported 0 1 1.5 SiS SiS 761GX VGA unsupported 0 1 1.5 SiS -SiS Mirage Graphics3 unsupported 0 1 1.5 SiS +SiS Mirage Graphics3 unsupported 0 1 1.4 S3 SiS Xabre VGA unsupported 0 1 1.5 SiS Tungsten Graphics, Inc Mesa DRI Intel(R) 845G unsupported 0 1 1.4 Intel 845G Tungsten Graphics, Inc Mesa DRI Intel(R) 852GM/855GM unsupported 0 1 1.4 Intel 855GM @@ -3034,7 +3034,7 @@ VMware, Inc. Gallium 0.4 on llvmpipe (LLVM 0x302) VMware, Inc. Gallium 0.4 on llvmpipe (LLVM 3.2, 128 bits) supported 1 1 2.1 Gallium VMware, Inc. Gallium 0.4 on llvmpipe (LLVM 3.2, 256 bits) supported 1 1 2.1 Gallium VMware, Inc. Gallium 0.4 on llvmpipe (LLVM 3.3, 128 bits) supported 1 1 2.1 Gallium -X.Org Gallium 0.4 on AMD ARUBA supported 1 1 2.1 Gallium +X.Org Gallium 0.4 on AMD ARUBA supported 3 1 2.1 AMD ARUBA (HD 6800) X.Org Gallium 0.4 on AMD BARTS supported 3 1 2.1 AMD BARTS (HD 6800) X.Org Gallium 0.4 on AMD CAICOS supported 3 0 0 AMD CAICOS (HD 6400) X.Org Gallium 0.4 on AMD CAPE VERDE supported 1 1 2.1 Gallium @@ -3072,7 +3072,7 @@ X.Org R300 Project Gallium 0.4 on ATI RV515 X.Org R300 Project Gallium 0.4 on ATI RV530 supported 0 1 2.1 ATI R300 (9700) X.Org R300 Project Gallium 0.4 on ATI RV570 supported 0 1 2.1 ATI R300 (9700) XGI Volari V3 unsupported 0 0 0 XGI -http://TitaniumGL.tk NVIDIA GeForce GTX 690/3999M VRAM/TitaniumGL/4 THREADs/3D GRAPHICS ACCELERATION supported 5 1 4.3 NVIDIA GTX 690 +http://TitaniumGL.tk NVIDIA GeForce GTX 690/3999M VRAM/TitaniumGL/4 THREADs/3D GRAPHICS ACCELERATION supported 5 1 4.3 NVIDIA GTX 69x nouveau Gallium 0.4 on NV34 supported 1 1 2.1 Gallium nouveau Gallium 0.4 on NV42 supported 1 1 2.1 Gallium nouveau Gallium 0.4 on NV44 supported 1 1 2.1 Gallium -- cgit v1.2.3 From 3364614f8b3c61a369760b4effc2ed9382be75f9 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Thu, 29 Aug 2013 09:27:12 -0400 Subject: add "Settings" logging tag to make debugging settings loading easier --- indra/llxml/llcontrol.cpp | 31 ++++++++++++++++--------------- indra/newview/llappviewer.cpp | 22 +++++++++++----------- 2 files changed, 27 insertions(+), 26 deletions(-) diff --git a/indra/llxml/llcontrol.cpp b/indra/llxml/llcontrol.cpp index 16f2290787..97fad7feb0 100755 --- a/indra/llxml/llcontrol.cpp +++ b/indra/llxml/llcontrol.cpp @@ -391,7 +391,7 @@ LLControlVariable* LLControlGroup::declareControl(const std::string& name, eCont } else { - llwarns << "Control named " << name << " already exists, ignoring new declaration." << llendl; + LL_WARNS("Settings") << "Control named " << name << " already exists, ignoring new declaration." << LL_ENDL; } return existing_control; } @@ -630,14 +630,14 @@ U32 LLControlGroup::loadFromFileLegacy(const std::string& filename, BOOL require if (!xml_controls.parseFile(filename)) { - llwarns << "Unable to open control file " << filename << llendl; + LL_WARNS("Settings") << "Unable to open control file " << filename << LL_ENDL; return 0; } LLXmlTreeNode* rootp = xml_controls.getRoot(); if (!rootp || !rootp->hasAttribute("version")) { - llwarns << "No valid settings header found in control file " << filename << llendl; + LL_WARNS("Settings") << "No valid settings header found in control file " << filename << LL_ENDL; return 0; } @@ -650,7 +650,7 @@ U32 LLControlGroup::loadFromFileLegacy(const std::string& filename, BOOL require // Check file version if (version != CURRENT_VERSION) { - llinfos << filename << " does not appear to be a version " << CURRENT_VERSION << " controls file" << llendl; + LL_INFOS("Settings") << filename << " does not appear to be a version " << CURRENT_VERSION << " controls file" << LL_ENDL; return 0; } @@ -668,7 +668,7 @@ U32 LLControlGroup::loadFromFileLegacy(const std::string& filename, BOOL require if (!name.empty()) { //read in to end of line - llwarns << "LLControlGroup::loadFromFile() : Trying to set \"" << name << "\", setting doesn't exist." << llendl; + LL_WARNS("Settings") << "LLControlGroup::loadFromFile() : Trying to set \"" << name << "\", setting doesn't exist." << LL_ENDL; } child_nodep = rootp->getNextChild(); continue; @@ -822,7 +822,7 @@ U32 LLControlGroup::saveToFile(const std::string& filename, BOOL nondefault_only LLControlVariable* control = iter->second; if (!control) { - llwarns << "Tried to save invalid control: " << iter->first << llendl; + LL_WARNS("Settings") << "Tried to save invalid control: " << iter->first << LL_ENDL; } else if( control->shouldSave(nondefault_only) ) { @@ -838,12 +838,12 @@ U32 LLControlGroup::saveToFile(const std::string& filename, BOOL nondefault_only { LLSDSerialize::toPrettyXML(settings, file); file.close(); - llinfos << "Saved to " << filename << llendl; + LL_INFOS("Settings") << "Saved to " << filename << LL_ENDL; } else { // This is a warning because sometime we want to use settings files which can't be written... - llwarns << "Unable to open settings file: " << filename << llendl; + LL_WARNS("Settings") << "Unable to open settings file: " << filename << LL_ENDL; return 0; } return num_saved; @@ -856,14 +856,14 @@ U32 LLControlGroup::loadFromFile(const std::string& filename, bool set_default_v infile.open(filename); if(!infile.is_open()) { - llwarns << "Cannot find file " << filename << " to load." << llendl; + LL_WARNS("Settings") << "Cannot find file " << filename << " to load." << LL_ENDL; return 0; } if (LLSDParser::PARSE_FAILURE == LLSDSerialize::fromXML(settings, infile)) { infile.close(); - llwarns << "Unable to parse LLSD control file " << filename << ". Trying Legacy Method." << llendl; + LL_WARNS("Settings") << "Unable to parse LLSD control file " << filename << ". Trying Legacy Method." << LL_ENDL; return loadFromFileLegacy(filename, TRUE, TYPE_STRING); } @@ -976,6 +976,7 @@ U32 LLControlGroup::loadFromFile(const std::string& filename, bool set_default_v ++validitems; } + LL_DEBUGS("Settings") << "Loaded " << validitems << " settings from " << filename << LL_ENDL; return validitems; } @@ -1012,7 +1013,7 @@ void main() BOOL_CONTROL baz; U32 count = gGlobals.loadFromFile("controls.ini"); - llinfos << "Loaded " << count << " controls" << llendl; + LL_INFOS("Settings") << "Loaded " << count << " controls" << LL_ENDL; // test insertion foo = new LLControlVariable("gFoo", 5.f, 1.f, 20.f); @@ -1273,19 +1274,19 @@ LLColor4 convert_from_llsd(const LLSD& sd, eControlType type, const st LLColor4 color(sd); if (color.mV[VRED] < 0.f || color.mV[VRED] > 1.f) { - llwarns << "Color " << control_name << " red value out of range: " << color << llendl; + LL_WARNS("Settings") << "Color " << control_name << " red value out of range: " << color << LL_ENDL; } else if (color.mV[VGREEN] < 0.f || color.mV[VGREEN] > 1.f) { - llwarns << "Color " << control_name << " green value out of range: " << color << llendl; + LL_WARNS("Settings") << "Color " << control_name << " green value out of range: " << color << LL_ENDL; } else if (color.mV[VBLUE] < 0.f || color.mV[VBLUE] > 1.f) { - llwarns << "Color " << control_name << " blue value out of range: " << color << llendl; + LL_WARNS("Settings") << "Color " << control_name << " blue value out of range: " << color << LL_ENDL; } else if (color.mV[VALPHA] < 0.f || color.mV[VALPHA] > 1.f) { - llwarns << "Color " << control_name << " alpha value out of range: " << color << llendl; + LL_WARNS("Settings") << "Color " << control_name << " alpha value out of range: " << color << LL_ENDL; } return LLColor4(sd); diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 338558c937..8a7c24c5b5 100755 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -2227,13 +2227,13 @@ bool LLAppViewer::loadSettingsFromDirectory(const std::string& location_key, BOOST_FOREACH(const SettingsFile& file, group.files) { - llinfos << "Attempting to load settings for the group " << file.name() - << " - from location " << location_key << llendl; + LL_INFOS("Settings") << "Attempting to load settings for the group " << file.name() + << " - from location " << location_key << LL_ENDL; LLControlGroup* settings_group = LLControlGroup::getInstance(file.name); if(!settings_group) { - llwarns << "No matching settings group for name " << file.name() << llendl; + LL_WARNS("Settings") << "No matching settings group for name " << file.name() << LL_ENDL; continue; } @@ -2262,7 +2262,7 @@ bool LLAppViewer::loadSettingsFromDirectory(const std::string& location_key, if(settings_group->loadFromFile(full_settings_path, set_defaults, file.persistent)) { // success! - llinfos << "Loaded settings file " << full_settings_path << llendl; + LL_INFOS("Settings") << "Loaded settings file " << full_settings_path << LL_ENDL; } else { // failed to load @@ -2276,7 +2276,7 @@ bool LLAppViewer::loadSettingsFromDirectory(const std::string& location_key, // only complain if we actually have a filename at this point if (!full_settings_path.empty()) { - llinfos << "Cannot load " << full_settings_path << " - No settings found." << llendl; + LL_INFOS("Settings") << "Cannot load " << full_settings_path << " - No settings found." << LL_ENDL; } } } @@ -2435,8 +2435,8 @@ bool LLAppViewer::initConfiguration() gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, clp.getOption("settings")[0]); gSavedSettings.setString("ClientSettingsFile", user_settings_filename); - llinfos << "Using command line specified settings filename: " - << user_settings_filename << llendl; + LL_INFOS("Settings") << "Using command line specified settings filename: " + << user_settings_filename << LL_ENDL; } // - load overrides from user_settings @@ -2452,8 +2452,8 @@ bool LLAppViewer::initConfiguration() { std::string session_settings_filename = clp.getOption("sessionsettings")[0]; gSavedSettings.setString("SessionSettingsFile", session_settings_filename); - llinfos << "Using session settings filename: " - << session_settings_filename << llendl; + LL_INFOS("Settings") << "Using session settings filename: " + << session_settings_filename << LL_ENDL; } loadSettingsFromDirectory("Session"); @@ -2461,8 +2461,8 @@ bool LLAppViewer::initConfiguration() { std::string user_session_settings_filename = clp.getOption("usersessionsettings")[0]; gSavedSettings.setString("UserSessionSettingsFile", user_session_settings_filename); - llinfos << "Using user session settings filename: " - << user_session_settings_filename << llendl; + LL_INFOS("Settings") << "Using user session settings filename: " + << user_session_settings_filename << LL_ENDL; } loadSettingsFromDirectory("UserSession"); -- cgit v1.2.3 From d5c9b7b8e5ea81ae6f3d7ca7f67d527c2f7e5ef4 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Thu, 29 Aug 2013 09:56:44 -0400 Subject: fix header display for diff report --- scripts/gpu_table_tester | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/scripts/gpu_table_tester b/scripts/gpu_table_tester index 6989e6f968..4ce08e3005 100755 --- a/scripts/gpu_table_tester +++ b/scripts/gpu_table_tester @@ -195,30 +195,27 @@ GPU String ------------------------------------------------------------------------------------------------------ ----------- ----- ----- ------ ------------------------------------ . format STDOUT = -@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<... @<<<<<<<<<< @> @> @<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<... +@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<< @> @> @<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<... $_, $Supported{$RecognizedBy{$_}},$Class{$RecognizedBy{$_}},$StatsBased{$RecognizedBy{$_}},$ExpectedOpenGL{$RecognizedBy{$_}},$Name{$RecognizedBy{$_}} . -my $ReportLineTemplate = "A102xxxA12xxxA2xxxxA2xxxxA5A*"; # MUST match the format STDOUT above +my $ReportLineTemplate = "A102xxxA12xxxA2xxxxA2xxxxA5A*"; # Used to read a previous report - MUST match the format STDOUT above + +my ( $oldSupported, $oldClass, $newSupported, $newClass ); format DIFF_TOP = ------------- OLD ------------- ----------- NEW -------------------- GPU String Supported? Class Stats OpenGL Supported? Class Stats OpenGL Line ------------------------------------------------------------------------------------------------------ ----------- ----- ----- ------ ----------- ----- ----- ------ ----- -. - -my ( $oldSupported, $oldClass, $newSupported, $newClass ); - +. format DIFF = -@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<... @<<<<<<<<<< @> @> @<<<< @<<<<<<<<<< @> @> @<<<< @>>>> -$_, $oldSupported, $oldClass, $oldStatsBased, $oldExpectedOpenGL, $newSupported, $newClass, $newStatsBased, $newExpectedOpenGL, $newRecognizedLine +@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<< @> @> @<<<< @<<<<<<<<<< @> @> @<<<< @>>>> +$_, $oldSupported, $oldClass, $oldStatsBased, $oldExpectedOpenGL, $newSupported, $newClass, $newStatsBased, $newExpectedOpenGL, $newRecognizedLine . if ( ! $Diff ) { - ## Print results. - ## For each input, show supported or unsupported, the class, and the recognizer name - + ## Print results of testing each input line and how it was recognized. foreach ( sort keys %RecognizedBy ) { write if ! $UnMatchedOnly || $Name{$RecognizedBy{$_}} eq $NoMatch; @@ -227,6 +224,7 @@ if ( ! $Diff ) } else { + ## Print a comparison of how the recognition this time compared to the results from the $Diff file open OLD, "<$Diff" || die "Failed to open --diff file '$Diff'\n\t$!\n"; my $discard = 2; @@ -248,8 +246,8 @@ else } close OLD; - $FORMAT_TOP_NAME = DIFF_TOP; - $FORMAT_NAME = DIFF; + $FORMAT_TOP_NAME = 'DIFF_TOP'; + $FORMAT_NAME = 'DIFF'; foreach ( sort keys %RecognizedBy ) { $newSupported = $Supported{$RecognizedBy{$_}} || $NoMatch; @@ -265,6 +263,7 @@ else $oldStatsBased = '-'; $oldExpectedOpenGL = '-'; write; + $-++; # suppresses pagination } else { @@ -280,9 +279,10 @@ else ) { write; + $-++; # suppresses pagination } } - $-++; # suppresses pagination + } } -- cgit v1.2.3 From 60a03da021e6c828247d228b09384dd13438c908 Mon Sep 17 00:00:00 2001 From: Graham Linden Date: Thu, 29 Aug 2013 08:05:26 -0700 Subject: Pass to fix new unmatched entries --- indra/newview/gpu_table.txt | 52 ++++++++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt index 36a98e35a2..95eabd4bae 100755 --- a/indra/newview/gpu_table.txt +++ b/indra/newview/gpu_table.txt @@ -112,6 +112,7 @@ ATI Mobility Radeon X1000 .*ATI.*Mobility.*Radeon ?X1..* 2 1 0 2.1 ATI Mobility Radeon X1200 .*ATI.*Mobility.*Radeon ?X12.* 2 1 0 2.1 ATI Mobility Radeon X2000 .*ATI.*Mobility.*Radeon ?X20.* 2 1 0 2.1 ATI Mobility Radeon X2300 .*ATI.*Mobility.*Radeon ?X23.* 2 1 0 2.1 +ATI Mobility Radeon X2500 .*ATI.*Mobility.*Radeon ?X25.* 2 1 0 2.1 ATI Mobility Radeon XX000 .*ATI.*Mobility.*Radeon ?Xx.* 2 1 0 2.1 ATI Radeon HD 5xx .*ATI.*(Radeon|ASUS).* (AH|AX|HD|HD |EAH)5x. 1 1 1 4 ATI Radeon HD 6200D/G/M .*ATI.*AMD Radeon.* (HD|HD )62..[DGM].* 3 1 0 4.2 @@ -266,6 +267,8 @@ AMD JUNIPER (HD 5700) .*(AMD|ATI).*Juniper.* 3 1 0 0 AMD PARK .*(AMD|ATI).*Park.* 3 1 0 0 AMD REDWOOD (HD 5500/5600) .*(AMD|ATI).*Redwood.* 3 1 0 1.4 AMD TURKS (HD 6500/6600) .*(AMD|ATI).*Turks.* 3 1 0 2.1 +AMD PITCAIRN (HD 7870) .*(AMD|ATI).*Pitcairn.* 3 1 0 2.1 +AMD TAHITI (HD 7000) .*(AMD|ATI).*Tahiti.* 3 1 0 2.1 AMD RS780 (HD 3200) .*RS780.* 0 1 1 2.1 AMD RS880 (HD 4200) .*RS880.* 0 1 1 3.2 AMD RV610 (HD 2400) .*RV610.* 1 1 0 0 @@ -404,10 +407,10 @@ NVIDIA GT 140 .*NVIDIA .*GT 14.* 2 1 0 3.3 NVIDIA GT 150 .*NVIDIA .*GT 15.* 2 1 1 3.3 NVIDIA GTS 150 .*NVIDIA .*GTS 15.* 2 1 0 0 NVIDIA 200 .*NVIDIA .[ ]+200[^0].* 2 1 1 3.3 -NVIDIA G200 .*NVIDIA .*G200.* 2 1 1 3.3 -NVIDIA G210 .*NVIDIA .*G210.* 3 1 1 3.3 -NVIDIA 205 .*NVIDIA .*[ ]+205.* 3 1 1 3.3 -NVIDIA 210 .*NVIDIA .*[ ]+210[^0].* 3 1 1 3.3 +NVIDIA G200 .*NVIDIA .*G[ ]*200.* 2 1 1 3.3 +NVIDIA G210 .*NVIDIA .*G[ ]*210.* 3 1 1 3.3 +NVIDIA 205 .*NVIDIA .*205[^0]*.* 3 1 1 3.3 +NVIDIA 210 .*NVIDIA .*210[^0]*.* 3 1 1 3.3 NVIDIA GT 220 .*NVIDIA .*GT *22.* 2 1 1 3.3 NVIDIA GT 230 .*NVIDIA .*GT *23.* 2 1 1 3.3 NVIDIA GT 240 .*NVIDIA .*GT *24.* 4 1 1 3.3 @@ -418,13 +421,13 @@ NVIDIA GTX 260 .*NVIDIA .*GTX *26.* 4 1 1 3.3 NVIDIA GTX 270 .*NVIDIA .*GTX *27.* 4 1 0 3.3 NVIDIA GTX 280 .*NVIDIA .*GTX *28.* 4 1 1 3.3 NVIDIA GTX 290 .*NVIDIA .*GTX *29.* 5 1 0 3.3 -NVIDIA 310 .*NVIDIA .*[ ]+310.* 3 1 1 3.3 -NVIDIA 315 .*NVIDIA .*[ ]+315.* 3 1 1 3.3 +NVIDIA 310 .*NVIDIA .*310[^0]*.* 3 1 1 3.3 +NVIDIA 315 .*NVIDIA .*315[^0]*.* 3 1 1 3.3 NVIDIA GT 320 .*NVIDIA .*GT *32.* 3 1 0 3.3 NVIDIA GT 330 .*NVIDIA .*GT *33.* 3 1 0 3.3 NVIDIA GT 340 .*NVIDIA .*GT *34.* 3 1 0 0 -NVIDIA 405 .*NVIDIA .*[ ]+405.* 3 1 0 3.3 -NVIDIA 410 .*NVIDIA .*[ ]+410.* 3 1 0 3.3 +NVIDIA 405 .*NVIDIA .*405[^0]*.* 3 1 0 3.3 +NVIDIA 410 .*NVIDIA .*410[^0]*.* 3 1 0 3.3 NVIDIA GT 415 .*NVIDIA .*GT *415.* 3 1 1 4.2 NVIDIA GT 420 .*NVIDIA .*GT *42.* 3 1 1 4.2 NVIDIA GT 430 .*NVIDIA .*GT *43.* 3 1 1 4.2 @@ -434,8 +437,8 @@ NVIDIA GTS 450 .*NVIDIA .*GTS *45.* 4 1 1 4.2 NVIDIA GTX 460 .*NVIDIA .*GTX *46.* 5 1 1 4.3 NVIDIA GTX 470 .*NVIDIA .*GTX *47.* 5 1 1 4.2 NVIDIA GTX 480 .*NVIDIA .*GTX *48.* 5 1 1 4.2 -NVIDIA 505 .*NVIDIA .*505.* 3 1 0 0 -NVIDIA 510 .*NVIDIA .*510.* 3 1 0 0 +NVIDIA 505 .*NVIDIA .*505[^0]*.* 3 1 0 0 +NVIDIA 510 .*NVIDIA .*510[^0]*.* 3 1 0 0 NVIDIA GT 520 .*NVIDIA .*GT *52.* 3 1 1 4.2 NVIDIA GT 530 .*NVIDIA .*GT *53.* 3 1 1 4.2 NVIDIA GT 540 .*NVIDIA .*GT *54.* 3 1 1 4.2 @@ -445,7 +448,7 @@ NVIDIA GTX 560 .*NVIDIA .*GTX *56.* 5 1 1 4.2 NVIDIA GTX 570 .*NVIDIA .*GTX *57.* 5 1 1 4.2 NVIDIA GTX 580 .*NVIDIA .*GTX *58.* 5 1 1 4.3 NVIDIA GTX 590 .*NVIDIA .*GTX *59.* 5 1 1 4.2 -NVIDIA 605 .*NVIDIA .*605.* 3 1 1 4.2 +NVIDIA 605 .*NVIDIA .*605[^0]*.* 3 1 1 4.2 NVIDIA GT 61x .*NVIDIA .*GT 61.* 3 1 1 4.2 NVIDIA GT 62x .*NVIDIA .*GT 62.* 3 1 0 4.2 NVIDIA GT 63x .*NVIDIA .*GT 63.* 3 1 0 4.2 @@ -558,8 +561,6 @@ NVIDIA GeForce Go 7900 .*NVIDIA .*GeForce Go 79.* 1 1 1 2.1 NVIDIA D9M .*NVIDIA .*D9M.* 1 1 0 0 NVIDIA G94 .*NVIDIA .*G94.* 3 1 0 0 NVIDIA GeForce Go 6 .*GeForce Go 6.* 1 1 0 0 -NVIDIA ION 2 .*NVIDIA .*[ ]+[I][O][N] 2.* 2 1 0 0 -NVIDIA ION .*NVIDIA .*[ ]+[I][O][N].* 2 1 1 3.3 NVIDIA NB8M .*NVIDIA .*NB8M.* 1 1 0 0 NVIDIA NB8P .*NVIDIA .*NB8P.* 2 1 0 0 NVIDIA NB9E .*NVIDIA .*NB9E.* 3 1 0 0 @@ -589,10 +590,12 @@ NVIDIA MCP79 .*NVIDIA .*MCP79.* 1 1 0 0 NVIDIA MCP7A .*NVIDIA .*MCP7A.* 1 1 0 0 NVIDIA Quadro2 .*Quadro2.* 0 1 0 1.5 NVIDIA Quadro 1000M .*Quadro.* (K1|1)00[0-9]M.* 2 1 0 4.2 +NVIDIA Quadro 1100M .*Quadro.* *110[0-9]M.* 2 1 0 3.3 +NVIDIA Quadro K1000 .*Quadro.* (K1|1)00[0-9].* 2 1 0 4.2 NVIDIA Quadro 2000 M/D .*Quadro.* (K2|2)000.* 3 1 0 4.2 NVIDIA Quadro 3000M .*Quadro.* (K3|3)00[0-9]M.* 3 1 0 4.2 NVIDIA Quadro 4000M .*Quadro.* (K4|4)00[0-9]M.* 3 1 0 4.2 -NVIDIA Quadro 4000 .*Quadro 4000.* 3 1 0 4.2 +NVIDIA Quadro 4000 .*Quadro.* (K4|4)000.* 3 1 0 4.2 NVIDIA Quadro 50x0 M .*Quadro.* (K5|5)0.0.* 3 1 0 4.2 NVIDIA Quadro 6000 .*Quadro.* (K6|6)000.* 3 1 0 0 NVIDIA Quadro 400 .*Quadro.* 400.* 2 1 0 3.3 @@ -614,17 +617,22 @@ NVIDIA Quadro FX 4500 .*Quadro.*FX 45.* 3 1 0 2.1 NVIDIA Quadro FX 880M .*Quadro.*FX 88[0-9]M.* 3 1 0 3.3 NVIDIA Quadro FX 4800 .*NVIDIA .*Quadro FX 4800.* 3 1 0 3.1 NVIDIA Quadro FX .*NVIDIA .*Quadro FX.* 1 1 0 3.3 -NVIDIA Quadro NVS 1xxM .*NVIDIA .*Quadro NVS *1.[05]M.* 0 1 1 3.3 -NVIDIA Quadro NVS 300M .*NVIDIA .*Quadro[ ]+NVS *30[0-9]M.* 2 1 0 0 -NVIDIA Quadro NVS 320M .*NVIDIA .*Quadro[ ]+NVS *32[0-9]M.* 2 1 0 0 -NVIDIA Quadro NVS 2100M .*NVIDIA .*Quadro[ ]+NVS *210[0-9]M.* 2 1 0 3.3 -NVIDIA Quadro NVS 3100M .*NVIDIA .*Quadro[ ]+NVS *310[0-9]M.* 2 1 0 3.3 -NVIDIA Quadro NVS 4200M .*NVIDIA .*Quadro[ ]+NVS *420[0-9]M.* 2 1 0 4.2 -NVIDIA Quadro NVS 5100M .*NVIDIA .*Quadro[ ]+NVS *510[0-9]M.* 2 1 0 0 -NVIDIA Quadro NVS .*NVIDIA .*Quadro[ ]+NVS 0 1 0 4.2 +NVIDIA Quadro NVS 1xxM .*NVIDIA .*(Quadro) NVS *1.[05]M.* 0 1 1 3.3 +NVIDIA Quadro NVS 300M .*NVIDIA .*(Quadro)*[ ]+NVS *30[0-9]M.* 2 1 0 0 +NVIDIA Quadro NVS 320M .*NVIDIA .*(Quadro)*[ ]+NVS *32[0-9]M.* 2 1 0 0 +NVIDIA Quadro NVS 2100M .*NVIDIA .*(Quadro)*[ ]+NVS *210[0-9]M.* 2 1 0 3.3 +NVIDIA Quadro NVS 3100M .*NVIDIA .*(Quadro)*[ ]+NVS *310[0-9]M.* 2 1 0 3.3 +NVIDIA Quadro NVS 4200M .*NVIDIA .*(Quadro)*[ ]+NVS *420[0-9]M.* 2 1 0 4.2 +NVIDIA Quadro NVS 5100M .*NVIDIA .*(Quadro)*[ ]+NVS *510[0-9]M.* 2 1 0 0 +NVIDIA Quadro NVS 5200M .*NVIDIA .*(Quadro)*[ ]+NVS *520[0-9]M.* 2 1 0 0 +NVIDIA Quadro NVS 5400M .*NVIDIA .*(Quadro)*[ ]+NVS *540[0-9]M.* 2 1 0 0 +NVIDIA Quadro NVS .*NVIDIA .*(Quadro)*[ ]+NVS 0 1 0 4.2 NVIDIA Corporation N12P .*NVIDIA .*N12P.* 1 1 1 4.1 NVIDIA Corporation N11M .*NVIDIA .*N11M.* 2 1 0 3.1 NVIDIA RIVA TNT .*RIVA TNT.* 0 0 0 1.5 +NVIDIA GRID .*NVIDIA .*GRID.* 0 0 0 1.5 +NVIDIA ION 2 .*NVIDIA .* *[I][O][N] 2.* 2 1 0 0 +NVIDIA ION .*NVIDIA .* *[I][O][N].* 2 1 1 3.3 S3 .*S3 *(Graphics)*.* 0 0 1 1.4 SiS SiS.* 0 0 1 1.5 Trident Trident.* 0 0 0 0 -- cgit v1.2.3 From 237fbea41d248663b11fbb1716eae97bb307f7cb Mon Sep 17 00:00:00 2001 From: Graham Linden Date: Thu, 29 Aug 2013 08:48:09 -0700 Subject: STORM-1950 MAINT-2981 Fixed misidentifications and re-checked unmatched entries, added gpu_unmatched.txt --- indra/newview/gpu_table.txt | 48 ++++++++------- indra/newview/tests/gpus_results.txt | 108 ++++++++++++++++----------------- indra/newview/tests/gpus_unmatched.txt | 9 +++ 3 files changed, 90 insertions(+), 75 deletions(-) create mode 100644 indra/newview/tests/gpus_unmatched.txt diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt index 95eabd4bae..c723914a08 100755 --- a/indra/newview/gpu_table.txt +++ b/indra/newview/gpu_table.txt @@ -341,6 +341,8 @@ Matrox .*Matrox.* 0 0 0 0 Mesa .*Mesa.* 1 0 1 3 Gallium .*Gallium.* 1 1 1 2.1 NVIDIA GeForce Pre-Release .*NVIDIA .*GeForce[ ]Pre-Release.* 2 1 1 3.3 +NVIDIA D1xP1 .*NVIDIA .*D1[0-4]P1.* 0 0 0 0 +NVIDIA Mystery PCI Card .*NVIDIA .Corporation [/]PCI]/]SSE2.* 0 0 0 0 NVIDIA G 100M .*NVIDIA .*G *10[0-9]M.* 1 1 1 3.3 NVIDIA G 110M .*NVIDIA .*G *11[0-9]M.* 1 1 1 3.3 NVIDIA G 120M .*NVIDIA .*G *12[0-9]M.* 1 1 1 3.3 @@ -410,7 +412,8 @@ NVIDIA 200 .*NVIDIA .[ ]+200[^0].* 2 1 1 3.3 NVIDIA G200 .*NVIDIA .*G[ ]*200.* 2 1 1 3.3 NVIDIA G210 .*NVIDIA .*G[ ]*210.* 3 1 1 3.3 NVIDIA 205 .*NVIDIA .*205[^0]*.* 3 1 1 3.3 -NVIDIA 210 .*NVIDIA .*210[^0]*.* 3 1 1 3.3 +NVIDIA 210 .*NVIDIA .*210$ 3 1 1 3.3 +NVIDIA GeForce 210 .*NVIDIA .*(GeForce)[ ]210[^0]*$ 3 1 1 3.3 NVIDIA GT 220 .*NVIDIA .*GT *22.* 2 1 1 3.3 NVIDIA GT 230 .*NVIDIA .*GT *23.* 2 1 1 3.3 NVIDIA GT 240 .*NVIDIA .*GT *24.* 4 1 1 3.3 @@ -475,6 +478,7 @@ NVIDIA G73 .*NVIDIA .*G73.* 1 1 0 0 NVIDIA G84 .*NVIDIA .*G84.* 2 1 0 0 NVIDIA G86 .*NVIDIA .*G86.* 3 1 0 0 NVIDIA G92 .*NVIDIA .*G92.* 3 1 0 0 +NVIDIA GK106 .*NVIDIA .*GK106.* 5 1 0 4.3 NVIDIA GeForce .*GeForce 256.* 0 0 0 0 NVIDIA GeForce 2 .*GeForce ?2 ?.* 0 1 1 1.5 NVIDIA GeForce 3 .*GeForce ?3 ?.* 2 1 1 2.1 @@ -588,21 +592,6 @@ NVIDIA MCP77 .*NVIDIA .*MCP77.* 1 1 0 0 NVIDIA MCP78 .*NVIDIA .*MCP78.* 1 1 0 0 NVIDIA MCP79 .*NVIDIA .*MCP79.* 1 1 0 0 NVIDIA MCP7A .*NVIDIA .*MCP7A.* 1 1 0 0 -NVIDIA Quadro2 .*Quadro2.* 0 1 0 1.5 -NVIDIA Quadro 1000M .*Quadro.* (K1|1)00[0-9]M.* 2 1 0 4.2 -NVIDIA Quadro 1100M .*Quadro.* *110[0-9]M.* 2 1 0 3.3 -NVIDIA Quadro K1000 .*Quadro.* (K1|1)00[0-9].* 2 1 0 4.2 -NVIDIA Quadro 2000 M/D .*Quadro.* (K2|2)000.* 3 1 0 4.2 -NVIDIA Quadro 3000M .*Quadro.* (K3|3)00[0-9]M.* 3 1 0 4.2 -NVIDIA Quadro 4000M .*Quadro.* (K4|4)00[0-9]M.* 3 1 0 4.2 -NVIDIA Quadro 4000 .*Quadro.* (K4|4)000.* 3 1 0 4.2 -NVIDIA Quadro 50x0 M .*Quadro.* (K5|5)0.0.* 3 1 0 4.2 -NVIDIA Quadro 6000 .*Quadro.* (K6|6)000.* 3 1 0 0 -NVIDIA Quadro 400 .*Quadro.* 400.* 2 1 0 3.3 -NVIDIA Quadro 600 .*Quadro.* 600.* 2 1 0 4.2 -NVIDIA Quadro4 .*Quadro4.* 0 1 0 1.5 -NVIDIA Quadro DCC .*Quadro DCC.* 0 1 0 0 -NVIDIA Quadro CX .*Quadro.*CX.* 3 1 0 0 NVIDIA Quadro FX 770M .*Quadro.*FX 77[0-9]M.* 2 1 0 3.3 NVIDIA Quadro FX 1500M .*Quadro.*FX 150[0-9]M.* 1 1 0 2.1 NVIDIA Quadro FX 1600M .*Quadro.*FX 160[0-9]M.* 2 1 0 3.3 @@ -617,7 +606,7 @@ NVIDIA Quadro FX 4500 .*Quadro.*FX 45.* 3 1 0 2.1 NVIDIA Quadro FX 880M .*Quadro.*FX 88[0-9]M.* 3 1 0 3.3 NVIDIA Quadro FX 4800 .*NVIDIA .*Quadro FX 4800.* 3 1 0 3.1 NVIDIA Quadro FX .*NVIDIA .*Quadro FX.* 1 1 0 3.3 -NVIDIA Quadro NVS 1xxM .*NVIDIA .*(Quadro) NVS *1.[05]M.* 0 1 1 3.3 +NVIDIA Quadro NVS 1xxM .*NVIDIA .*(Quadro)* NVS *1.[05]M.* 0 1 1 3.3 NVIDIA Quadro NVS 300M .*NVIDIA .*(Quadro)*[ ]+NVS *30[0-9]M.* 2 1 0 0 NVIDIA Quadro NVS 320M .*NVIDIA .*(Quadro)*[ ]+NVS *32[0-9]M.* 2 1 0 0 NVIDIA Quadro NVS 2100M .*NVIDIA .*(Quadro)*[ ]+NVS *210[0-9]M.* 2 1 0 3.3 @@ -627,13 +616,30 @@ NVIDIA Quadro NVS 5100M .*NVIDIA .*(Quadro)*[ ]+NVS *510[0-9]M.* 2 1 0 NVIDIA Quadro NVS 5200M .*NVIDIA .*(Quadro)*[ ]+NVS *520[0-9]M.* 2 1 0 0 NVIDIA Quadro NVS 5400M .*NVIDIA .*(Quadro)*[ ]+NVS *540[0-9]M.* 2 1 0 0 NVIDIA Quadro NVS .*NVIDIA .*(Quadro)*[ ]+NVS 0 1 0 4.2 +NVIDIA Quadro2 .*Quadro2.* 0 1 0 1.5 +NVIDIA Quadro 1000M .*Quadro.* (K1|1)00[0-9]M.* 2 1 0 4.2 +NVIDIA Quadro 1100M .*Quadro.* *110[0-9]M.* 2 1 0 3.3 +NVIDIA Quadro K600 .*Quadro.* (K6|6)0[0-9][^0].* 2 1 0 4.2 +NVIDIA Quadro K1000 .*Quadro.* (K1|1)00[0-9].* 2 1 0 4.2 +NVIDIA Quadro 2000 M/D .*Quadro.* (K2|2)000.* 3 1 0 4.2 +NVIDIA Quadro 3000M .*Quadro.* (K3|3)00[0-9]M.* 3 1 0 4.2 +NVIDIA Quadro 4000M .*Quadro.* (K4|4)00[0-9]M.* 3 1 0 4.2 +NVIDIA Quadro 4000 .*Quadro.* (K4|4)000.* 3 1 0 4.2 +NVIDIA Quadro 50x0 M .*Quadro.* (K5|5)0.0.* 3 1 0 4.2 +NVIDIA Quadro 6000 .*Quadro.* (K6|6)000.* 3 1 0 0 +NVIDIA Quadro 400 .*Quadro.* 400.* 2 1 0 3.3 +NVIDIA Quadro 600 .*Quadro.* 600.* 2 1 0 4.2 +NVIDIA Quadro4 .*Quadro4.* 0 1 0 1.5 +NVIDIA Quadro DCC .*Quadro DCC.* 0 1 0 0 +NVIDIA Quadro CX .*Quadro.*CX.* 3 1 0 0 NVIDIA Corporation N12P .*NVIDIA .*N12P.* 1 1 1 4.1 NVIDIA Corporation N11M .*NVIDIA .*N11M.* 2 1 0 3.1 NVIDIA RIVA TNT .*RIVA TNT.* 0 0 0 1.5 -NVIDIA GRID .*NVIDIA .*GRID.* 0 0 0 1.5 -NVIDIA ION 2 .*NVIDIA .* *[I][O][N] 2.* 2 1 0 0 -NVIDIA ION .*NVIDIA .* *[I][O][N].* 2 1 1 3.3 -S3 .*S3 *(Graphics)*.* 0 0 1 1.4 +NVIDIA GRID .*NVIDIA .*GRID.* 0 0 0 1.5 +NVIDIA ION 2 .*NVIDIA .* *[I][O][N] 2.* 2 1 0 0 +NVIDIA ION a .*NVIDIA .*[I][O][N]$ 2 1 1 3.3 +NVIDIA ION b .*NVIDIA .*(Corporation) [I][O][N].* 2 1 1 3.3 +S3 .*S3 *(Graphics)*.* 0 0 1 1.4 SiS SiS.* 0 0 1 1.5 Trident Trident.* 0 0 0 0 Tungsten Graphics Tungsten.* 0 0 0 0 diff --git a/indra/newview/tests/gpus_results.txt b/indra/newview/tests/gpus_results.txt index 41741f849b..cd242f4d19 100755 --- a/indra/newview/tests/gpus_results.txt +++ b/indra/newview/tests/gpus_results.txt @@ -796,7 +796,7 @@ ATI Technologies Inc. ATI Mobility Radeon X2300 ATI Technologies Inc. ATI Mobility Radeon X2300 x86/MMX/3DNow! supported 2 0 2.1 ATI Mobility Radeon X2300 ATI Technologies Inc. ATI Mobility Radeon X2300 x86/MMX/3DNow!/SSE2 supported 2 0 2.1 ATI Mobility Radeon X2300 ATI Technologies Inc. ATI Mobility Radeon X2300 x86/SSE2 supported 2 0 2.1 ATI Mobility Radeon X2300 -ATI Technologies Inc. ATI Mobility Radeon X2500 NO MATCH +ATI Technologies Inc. ATI Mobility Radeon X2500 supported 2 0 2.1 ATI Mobility Radeon X2500 ATI Technologies Inc. ATI Mobility Radeon. HD 530v supported 1 1 3.3 ATI Mobility Radeon HD 530v ATI Technologies Inc. ATI Mobility Radeon. HD 5470 supported 2 1 4.2 ATI Mobility Radeon HD 5400 ATI Technologies Inc. ATI RADEON 9600 Series supported 0 1 2.1 ATI Radeon 9600 @@ -979,8 +979,8 @@ ATI Technologies Inc. ATI Radeon HD 6770M OpenGL Engine ATI Technologies Inc. ATI Radeon HD 6970M OpenGL Engine supported 5 1 4.2 ATI Radeon HD 6900 ATI Technologies Inc. ATI Radeon HD 7350 supported 2 0 4.2 ATI Radeon HD 7300 ATI Technologies Inc. ATI Radeon HD 7950 OpenGL Engine supported 5 1 4.2 ATI Radeon HD 7900 -ATI Technologies Inc. ATI Radeon HD Pitcairn XT Prototype OpenGL Engine NO MATCH -ATI Technologies Inc. ATI Radeon HD Tahiti XT Prototype OpenGL Engine NO MATCH +ATI Technologies Inc. ATI Radeon HD Pitcairn XT Prototype OpenGL Engine supported 3 0 2.1 AMD PITCAIRN (HD 7870) +ATI Technologies Inc. ATI Radeon HD Tahiti XT Prototype OpenGL Engine supported 3 0 2.1 AMD TAHITI (HD 7000) ATI Technologies Inc. ATI Radeon HD Verde XT Prototype OpenGL Engine unsupported 0 0 0 ATI Radeon VE ATI Technologies Inc. ATI Radeon HD3750 supported 3 0 3.3 ATI Radeon HD 3700 ATI Technologies Inc. ATI Radeon HD4300/HD4500 series supported 2 1 4 ATI Radeon HD 4300 @@ -1499,23 +1499,23 @@ Matrox Graphics Inc. Matrox ICD for Parhelia Mesa unsupported 1 1 3 Mesa Mesa Project Software Rasterizer unsupported 1 1 3 Mesa Mesa project: www.mesa3d.org Mesa GLX Indirect unsupported 1 1 3 Mesa -NVIDIA 205 NO MATCH -NVIDIA 210 NO MATCH -NVIDIA 310 NO MATCH +NVIDIA 205 supported 3 1 3.3 NVIDIA 205 +NVIDIA 210 supported 3 1 3.3 NVIDIA 210 +NVIDIA 310 supported 3 1 3.3 NVIDIA 310 NVIDIA 310M supported 2 0 3.3 NVIDIA G 310M -NVIDIA 315 NO MATCH +NVIDIA 315 supported 3 1 3.3 NVIDIA 315 NVIDIA 315M supported 2 0 3.3 NVIDIA G 310M NVIDIA 320M supported 3 0 3.3 NVIDIA GT 320M -NVIDIA 405 NO MATCH -NVIDIA 410 NO MATCH +NVIDIA 405 supported 3 0 3.3 NVIDIA 405 +NVIDIA 410 supported 3 0 3.3 NVIDIA 410 NVIDIA 510 supported 3 0 0 NVIDIA 510 NVIDIA 610M supported 3 1 4.2 NVIDIA 610M NVIDIA Corporation /PCI/SSE2 NO MATCH NVIDIA Corporation 3D-Analyze v2.3 - http://www.tommti-systems.com unsupported 0 0 0 ATI 3D-Analyze NVIDIA Corporation C51/PCI/SSE2/3DNOW! supported 0 1 2 NVIDIA C51 NVIDIA Corporation C51G/PCI/SSE2/3DNOW! supported 0 1 2 NVIDIA C51 -NVIDIA Corporation D10P1-25/PCI/SSE2/3DNOW! NO MATCH -NVIDIA Corporation D14P1-30/PCIe/SSE2 NO MATCH +NVIDIA Corporation D10P1-25/PCI/SSE2/3DNOW! unsupported 0 0 0 NVIDIA D1xP1 +NVIDIA Corporation D14P1-30/PCIe/SSE2 unsupported 0 0 0 NVIDIA D1xP1 NVIDIA Corporation D9M-20/PCI/SSE2 supported 1 0 0 NVIDIA D9M NVIDIA Corporation D9M-20/PCI/SSE2/3DNOW! supported 1 0 0 NVIDIA D9M NVIDIA Corporation G72/PCI/SSE2/3DNOW! supported 1 0 0 NVIDIA G72 @@ -1523,15 +1523,15 @@ NVIDIA Corporation G73/AGP/SSE2/3DNOW! NVIDIA Corporation G73/PCI/SSE2/3DNOW! supported 1 0 0 NVIDIA G73 NVIDIA Corporation G84-50/PCI/SSE2 supported 2 0 0 NVIDIA G84 NVIDIA Corporation G92-100/PCI/SSE2/3DNOW! supported 3 0 0 NVIDIA G92 -NVIDIA Corporation GK106/PCIe/SSE2 NO MATCH -NVIDIA Corporation GRID K2/PCIe/SSE2 NO MATCH +NVIDIA Corporation GK106/PCIe/SSE2 supported 5 0 4.3 NVIDIA GK106 +NVIDIA Corporation GRID K2/PCIe/SSE2 unsupported 0 0 1.5 NVIDIA GRID NVIDIA Corporation GeForce GTX 555/PCI/SSE2 supported 5 1 4.3 NVIDIA GTX 550 NVIDIA Corporation GeForce GTX 555/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 550 NVIDIA Corporation GeForce 205/PCI/SSE2 supported 3 1 3.3 NVIDIA 205 -NVIDIA Corporation GeForce 210/PCI/SSE2 supported 3 1 3.3 NVIDIA 210 -NVIDIA Corporation GeForce 210/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA 210 -NVIDIA Corporation GeForce 210/PCIe/SSE2 supported 3 1 3.3 NVIDIA 210 -NVIDIA Corporation GeForce 210/PCIe/SSE2/3DNOW! supported 3 1 3.3 NVIDIA 210 +NVIDIA Corporation GeForce 210/PCI/SSE2 supported 3 1 3.3 NVIDIA GeForce 210 +NVIDIA Corporation GeForce 210/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 210 +NVIDIA Corporation GeForce 210/PCIe/SSE2 supported 3 1 3.3 NVIDIA GeForce 210 +NVIDIA Corporation GeForce 210/PCIe/SSE2/3DNOW! supported 3 1 3.3 NVIDIA GeForce 210 NVIDIA Corporation GeForce 310/PCI/SSE2 supported 3 1 3.3 NVIDIA 310 NVIDIA Corporation GeForce 310/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA 310 NVIDIA Corporation GeForce 310/PCIe/SSE2 supported 3 1 3.3 NVIDIA 310 @@ -2385,12 +2385,12 @@ NVIDIA Corporation GeForce4 Ti 4200/AGP/SSE2 NVIDIA Corporation GeForce4 Ti 4400/AGP/SSE2 supported 0 1 1.5 NVIDIA GeForce 4 NVIDIA Corporation GeForce4 Ti 4600/AGP/SSE2 supported 0 1 1.5 NVIDIA GeForce 4 NVIDIA Corporation GeForce4 Ti 4600/PCI/SSE2 supported 0 1 1.5 NVIDIA GeForce 4 -NVIDIA Corporation ION LE/PCI/SSE2 supported 2 1 3.3 NVIDIA ION -NVIDIA Corporation ION LE/integrated/SSE2 supported 2 1 3.3 NVIDIA ION -NVIDIA Corporation ION/PCI/SSE2 supported 2 1 3.3 NVIDIA ION -NVIDIA Corporation ION/PCIe/SSE2 supported 2 1 3.3 NVIDIA ION -NVIDIA Corporation ION/PCIe/SSE2/3DNOW! supported 2 1 3.3 NVIDIA ION -NVIDIA Corporation ION/integrated/SSE2 supported 2 1 3.3 NVIDIA ION +NVIDIA Corporation ION LE/PCI/SSE2 supported 2 1 3.3 NVIDIA ION b +NVIDIA Corporation ION LE/integrated/SSE2 supported 2 1 3.3 NVIDIA ION b +NVIDIA Corporation ION/PCI/SSE2 supported 2 1 3.3 NVIDIA ION b +NVIDIA Corporation ION/PCIe/SSE2 supported 2 1 3.3 NVIDIA ION b +NVIDIA Corporation ION/PCIe/SSE2/3DNOW! supported 2 1 3.3 NVIDIA ION b +NVIDIA Corporation ION/integrated/SSE2 supported 2 1 3.3 NVIDIA ION b NVIDIA Corporation MCP61/PCI/SSE2/3DNOW! supported 1 0 2.1 NVIDIA MCP61 NVIDIA Corporation MCP7A-O/PCI/SSE2 supported 1 0 0 NVIDIA MCP7A NVIDIA Corporation MCP7A-P/PCI/SSE2 supported 1 0 0 NVIDIA MCP7A @@ -2400,7 +2400,7 @@ NVIDIA Corporation N12P-GVR-B-A1/PCI/SSE2 NVIDIA Corporation NB9M-GE1/PCI/SSE2 supported 1 0 0 NVIDIA NB9M NVIDIA Corporation NB9M-GS/PCI/SSE2 supported 1 0 0 NVIDIA NB9M NVIDIA Corporation NV17/AGP/SSE2 supported 0 0 0 NVIDIA NV17 -NVIDIA Corporation NVIDIA GeForce 210 OpenGL Engine supported 3 1 3.3 NVIDIA 210 +NVIDIA Corporation NVIDIA GeForce 210 OpenGL Engine supported 3 1 3.3 NVIDIA GeForce 210 NVIDIA Corporation NVIDIA GeForce 310M OpenGL Engine supported 2 0 3.3 NVIDIA G 310M NVIDIA Corporation NVIDIA GeForce 320M OpenGL Engine supported 3 0 3.3 NVIDIA GT 320M NVIDIA Corporation NVIDIA GeForce 6600 GT OpenGL Engine supported 2 1 2.1 NVIDIA GeForce 6600 @@ -2476,26 +2476,26 @@ NVIDIA Corporation NVIDIA Quadro FX 4800 OpenGL Engine NVIDIA Corporation NVIDIA Quadro FX 5600 OpenGL Engine supported 1 0 3.3 NVIDIA Quadro FX NVIDIA Corporation NVIDIA Quadro FX 580 OpenGL Engine supported 1 0 3.3 NVIDIA Quadro FX NVIDIA Corporation NVIDIA Quadro FX 770M OpenGL Engine supported 2 0 3.3 NVIDIA Quadro FX 770M -NVIDIA Corporation NVS 2100M/PCI/SSE2 NO MATCH -NVIDIA Corporation NVS 2100M/PCIe/SSE2 NO MATCH -NVIDIA Corporation NVS 300/PCI/SSE2 NO MATCH -NVIDIA Corporation NVS 300/PCI/SSE2/3DNOW! NO MATCH -NVIDIA Corporation NVS 300/PCIe/SSE2 NO MATCH +NVIDIA Corporation NVS 2100M/PCI/SSE2 supported 2 0 3.3 NVIDIA Quadro NVS 2100M +NVIDIA Corporation NVS 2100M/PCIe/SSE2 supported 2 0 3.3 NVIDIA Quadro NVS 2100M +NVIDIA Corporation NVS 300/PCI/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation NVS 300/PCI/SSE2/3DNOW! supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation NVS 300/PCIe/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS NVIDIA Corporation NVS 310/PCIe/SSE2 supported 3 1 3.3 NVIDIA 310 NVIDIA Corporation NVS 3100M/PCI/SSE2 supported 3 1 3.3 NVIDIA 310 NVIDIA Corporation NVS 3100M/PCIe/SSE2 supported 3 1 3.3 NVIDIA 310 NVIDIA Corporation NVS 315/PCIe/SSE2 supported 3 1 3.3 NVIDIA 315 -NVIDIA Corporation NVS 4200M/PCI/SSE2 NO MATCH -NVIDIA Corporation NVS 4200M/PCIe/SSE2 NO MATCH +NVIDIA Corporation NVS 4200M/PCI/SSE2 supported 2 0 4.2 NVIDIA Quadro NVS 4200M +NVIDIA Corporation NVS 4200M/PCIe/SSE2 supported 2 0 4.2 NVIDIA Quadro NVS 4200M NVIDIA Corporation NVS 510/PCIe/SSE2 supported 3 0 0 NVIDIA 510 NVIDIA Corporation NVS 5100M/PCI/SSE2 supported 3 0 0 NVIDIA 510 NVIDIA Corporation NVS 5100M/PCIe/SSE2 supported 3 0 0 NVIDIA 510 -NVIDIA Corporation NVS 5200M/PCI/SSE2 NO MATCH -NVIDIA Corporation NVS 5200M/PCIe/SSE2 NO MATCH -NVIDIA Corporation NVS 5400M/PCIe/SSE2 NO MATCH +NVIDIA Corporation NVS 5200M/PCI/SSE2 supported 2 0 0 NVIDIA Quadro NVS 5200M +NVIDIA Corporation NVS 5200M/PCIe/SSE2 supported 2 0 0 NVIDIA Quadro NVS 5200M +NVIDIA Corporation NVS 5400M/PCIe/SSE2 supported 2 0 0 NVIDIA Quadro NVS 5400M NVIDIA Corporation Quadro 1000M/PCI/SSE2 supported 2 0 4.2 NVIDIA Quadro 1000M NVIDIA Corporation Quadro 1000M/PCIe/SSE2 supported 2 0 4.2 NVIDIA Quadro 1000M -NVIDIA Corporation Quadro 1100M/PCIe/SSE2 NO MATCH +NVIDIA Corporation Quadro 1100M/PCIe/SSE2 supported 2 0 3.3 NVIDIA Quadro 1100M NVIDIA Corporation Quadro 2000 D/PCI/SSE2 supported 3 0 4.2 NVIDIA Quadro 2000 M/D NVIDIA Corporation Quadro 2000/PCI/SSE2 supported 3 0 4.2 NVIDIA Quadro 2000 M/D NVIDIA Corporation Quadro 2000/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 2000 M/D @@ -2518,9 +2518,9 @@ NVIDIA Corporation Quadro 5000M/PCI/SSE2 NVIDIA Corporation Quadro 5000M/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 50x0 M NVIDIA Corporation Quadro 5010M/PCI/SSE2 supported 3 0 4.2 NVIDIA Quadro 50x0 M NVIDIA Corporation Quadro 5010M/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 50x0 M -NVIDIA Corporation Quadro 600/PCI/SSE2 supported 2 0 4.2 NVIDIA Quadro 600 -NVIDIA Corporation Quadro 600/PCIe/SSE2 supported 2 0 4.2 NVIDIA Quadro 600 -NVIDIA Corporation Quadro 600/PCIe/SSE2/3DNOW! supported 2 0 4.2 NVIDIA Quadro 600 +NVIDIA Corporation Quadro 600/PCI/SSE2 supported 2 0 4.2 NVIDIA Quadro K600 +NVIDIA Corporation Quadro 600/PCIe/SSE2 supported 2 0 4.2 NVIDIA Quadro K600 +NVIDIA Corporation Quadro 600/PCIe/SSE2/3DNOW! supported 2 0 4.2 NVIDIA Quadro K600 NVIDIA Corporation Quadro 6000/PCIe/SSE2 supported 3 0 0 NVIDIA Quadro 6000 NVIDIA Corporation Quadro FX 1000/AGP/SSE2 supported 1 0 3.3 NVIDIA Quadro FX NVIDIA Corporation Quadro FX 1100/AGP/SSE2 supported 1 0 3.3 NVIDIA Quadro FX @@ -2543,7 +2543,7 @@ NVIDIA Corporation Quadro FX 1800/PCI/SSE2 NVIDIA Corporation Quadro FX 1800/PCIe/SSE2 supported 1 0 3.3 NVIDIA Quadro FX NVIDIA Corporation Quadro FX 1800M/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX NVIDIA Corporation Quadro FX 1800M/PCIe/SSE2 supported 1 0 3.3 NVIDIA Quadro FX -NVIDIA Corporation Quadro FX 2000/AGP/SSE2 supported 3 0 4.2 NVIDIA Quadro 2000 M/D +NVIDIA Corporation Quadro FX 2000/AGP/SSE2 supported 1 0 3.3 NVIDIA Quadro FX NVIDIA Corporation Quadro FX 2500M/PCI/SSE2 supported 2 0 2.1 NVIDIA Quadro FX 2500M NVIDIA Corporation Quadro FX 2500M/PCIe/SSE2 supported 2 0 2.1 NVIDIA Quadro FX 2500M NVIDIA Corporation Quadro FX 2700M/PCI/SSE2 supported 3 0 3.3 NVIDIA Quadro FX 2700M @@ -2589,9 +2589,9 @@ NVIDIA Corporation Quadro FX 4600/PCIe/SSE2 NVIDIA Corporation Quadro FX 4800/PCI/SSE2 supported 3 0 3.1 NVIDIA Quadro FX 4800 NVIDIA Corporation Quadro FX 4800/PCIe/SSE2 supported 3 0 3.1 NVIDIA Quadro FX 4800 NVIDIA Corporation Quadro FX 500/AGP/SSE2 supported 1 0 3.3 NVIDIA Quadro FX -NVIDIA Corporation Quadro FX 500/FX 600/AGP/SSE2 supported 2 0 4.2 NVIDIA Quadro 600 -NVIDIA Corporation Quadro FX 500/FX 600/AGP/SSE2/3DNOW! supported 2 0 4.2 NVIDIA Quadro 600 -NVIDIA Corporation Quadro FX 500/FX 600/PCI/SSE2 supported 2 0 4.2 NVIDIA Quadro 600 +NVIDIA Corporation Quadro FX 500/FX 600/AGP/SSE2 supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 500/FX 600/AGP/SSE2/3DNOW! supported 1 0 3.3 NVIDIA Quadro FX +NVIDIA Corporation Quadro FX 500/FX 600/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX NVIDIA Corporation Quadro FX 540/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX NVIDIA Corporation Quadro FX 540/PCIe/SSE2 supported 1 0 3.3 NVIDIA Quadro FX NVIDIA Corporation Quadro FX 550/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX @@ -2614,17 +2614,17 @@ NVIDIA Corporation Quadro FX 880M/PCIe/SSE2 NVIDIA Corporation Quadro FX Go1400/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX NVIDIA Corporation Quadro FX Go1400/PCIe/SSE2 supported 1 0 3.3 NVIDIA Quadro FX NVIDIA Corporation Quadro FX Go700/AGP/SSE2 supported 1 0 3.3 NVIDIA Quadro FX -NVIDIA Corporation Quadro K1000/PCIe/SSE2 NO MATCH +NVIDIA Corporation Quadro K1000/PCIe/SSE2 supported 2 0 4.2 NVIDIA Quadro K1000 NVIDIA Corporation Quadro K1000M/PCIe/SSE2 supported 2 0 4.2 NVIDIA Quadro 1000M NVIDIA Corporation Quadro K2000/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 2000 M/D NVIDIA Corporation Quadro K2000D/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 2000 M/D NVIDIA Corporation Quadro K2000M/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 2000 M/D NVIDIA Corporation Quadro K3000M/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 3000M -NVIDIA Corporation Quadro K4000/PCIe/SSE2 NO MATCH +NVIDIA Corporation Quadro K4000/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 4000 NVIDIA Corporation Quadro K4000M/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 4000M NVIDIA Corporation Quadro K5000/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 50x0 M NVIDIA Corporation Quadro K5000M/PCIe/SSE2 supported 3 0 4.2 NVIDIA Quadro 50x0 M -NVIDIA Corporation Quadro K600/PCIe/SSE2 NO MATCH +NVIDIA Corporation Quadro K600/PCIe/SSE2 supported 2 0 4.2 NVIDIA Quadro K600 NVIDIA Corporation Quadro NVS 110M/PCI/SSE2 supported 0 1 3.3 NVIDIA Quadro NVS 1xxM NVIDIA Corporation Quadro NVS 130M/PCI/SSE2 supported 0 1 3.3 NVIDIA Quadro NVS 1xxM NVIDIA Corporation Quadro NVS 130M/PCIe/SSE2 supported 0 1 3.3 NVIDIA Quadro NVS 1xxM @@ -2636,11 +2636,11 @@ NVIDIA Corporation Quadro NVS 150M/PCI/SSE2 NVIDIA Corporation Quadro NVS 150M/PCIe/SSE2 supported 0 1 3.3 NVIDIA Quadro NVS 1xxM NVIDIA Corporation Quadro NVS 160M/PCI/SSE2 supported 0 1 3.3 NVIDIA Quadro NVS 1xxM NVIDIA Corporation Quadro NVS 160M/PCIe/SSE2 supported 0 1 3.3 NVIDIA Quadro NVS 1xxM -NVIDIA Corporation Quadro NVS 210S / GeForce 6150LE/PCI/SSE2 supported 3 1 3.3 NVIDIA 210 -NVIDIA Corporation Quadro NVS 210S / GeForce 6150LE/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA 210 -NVIDIA Corporation Quadro NVS 210S / GeForce 6150LE/integrated/SSE2/3DNOW! supported 3 1 3.3 NVIDIA 210 -NVIDIA Corporation Quadro NVS 210S / NVIDIA GeForce 6150LE/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA 210 -NVIDIA Corporation Quadro NVS 210S/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA 210 +NVIDIA Corporation Quadro NVS 210S / GeForce 6150LE/PCI/SSE2 supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation Quadro NVS 210S / GeForce 6150LE/PCI/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation Quadro NVS 210S / GeForce 6150LE/integrated/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation Quadro NVS 210S / NVIDIA GeForce 6150LE/PCI/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation Quadro NVS 210S/PCI/SSE2/3DNOW! supported 0 0 4.2 NVIDIA Quadro NVS NVIDIA Corporation Quadro NVS 280 PCI-E/PCI/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS NVIDIA Corporation Quadro NVS 280 SD/AGP/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS NVIDIA Corporation Quadro NVS 285/PCI/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS @@ -2669,7 +2669,7 @@ NVIDIA Corporation Quadro4 700 XGL/AGP/SSE2 NVIDIA Corporation Quadro4 980 XGL/AGP/SSE2 supported 0 0 1.5 NVIDIA Quadro4 NVIDIA Corporation RIVA TNT2/AGP/SSE2 unsupported 0 0 1.5 NVIDIA RIVA TNT NVIDIA Corporation RIVA TNT2/AGP/SSE2/3DNOW! unsupported 0 0 1.5 NVIDIA RIVA TNT -NVIDIA Corporation Stinger/emulated by Quadro FX 500/FX 600/PCI/SSE2 supported 2 0 4.2 NVIDIA Quadro 600 +NVIDIA Corporation Stinger/emulated by Quadro FX 500/FX 600/PCI/SSE2 supported 1 0 3.3 NVIDIA Quadro FX NVIDIA Corporation nForce 750a SLI/PCI/SSE2 unsupported 0 0 3.3 NVIDIA nForce NVIDIA Corporation nForce 750a SLI/integrated/SSE2 unsupported 0 0 3.3 NVIDIA nForce NVIDIA Corporation nForce 760i SLI/integrated/SSE2 unsupported 0 0 3.3 NVIDIA nForce @@ -2683,9 +2683,9 @@ NVIDIA G 103M NVIDIA G 105M supported 1 1 3.3 NVIDIA G 100M NVIDIA G 110M supported 1 1 3.3 NVIDIA G 110M NVIDIA G 120M supported 1 1 3.3 NVIDIA G 120M -NVIDIA G 200 NO MATCH +NVIDIA G 200 supported 2 1 3.3 NVIDIA G200 NVIDIA G 205M supported 1 0 0 NVIDIA G 200M -NVIDIA G 210 NO MATCH +NVIDIA G 210 supported 3 1 3.3 NVIDIA G210 NVIDIA G 310M supported 2 0 3.3 NVIDIA G 310M NVIDIA G 320M supported 3 0 3.3 NVIDIA GT 320M NVIDIA G 405 supported 3 0 3.3 NVIDIA 405 @@ -2866,7 +2866,7 @@ NVIDIA GeForce Go 7800 NVIDIA GeForce Go 7900 supported 1 1 2.1 NVIDIA GeForce Go 7900 NVIDIA GeForce PCX supported 0 0 1.5 NVIDIA GeForce PCX NVIDIA Generic unsupported 0 0 2.1 NVIDIA Generic -NVIDIA ION NO MATCH +NVIDIA ION supported 2 1 3.3 NVIDIA ION a NVIDIA MCP61 supported 1 0 2.1 NVIDIA MCP61 NVIDIA NV34 supported 0 0 0 NVIDIA NV34 NVIDIA PCI unsupported 0 0 2.1 NVIDIA PCI diff --git a/indra/newview/tests/gpus_unmatched.txt b/indra/newview/tests/gpus_unmatched.txt new file mode 100644 index 0000000000..083f29aaa0 --- /dev/null +++ b/indra/newview/tests/gpus_unmatched.txt @@ -0,0 +1,9 @@ +ATI NO MATCH +ATI Technologies NO MATCH +ATI Technologies Inc. NO MATCH +ATI Technologies Inc. (DNA-ATi 5.1.7.5x32) ATI Mobility Radeon HD 2 NO MATCH +ATI Technologies Inc. ATI Mobility Radeon Graphics NO MATCH +ATI Technologies Inc. ATI Radeon Graphics Processor NO MATCH +Intel NO MATCH +NVIDIA Corporation /PCI/SSE2 NO MATCH +NVIDIA Corporation Quadro PCI-E Series/PCI/SSE2 NO MATCH -- cgit v1.2.3 From ea305b74d124aedf64afbb89d2b3685dae49bed9 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Thu, 29 Aug 2013 12:56:20 -0400 Subject: remove refresh of search attributes from draw method in About Land floater; does not seem to be needed and slows things down --- indra/newview/llfloaterland.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index f6d4f9a605..ba9fbbc84e 100755 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -2092,7 +2092,6 @@ void LLPanelLandOptions::refresh() // virtual void LLPanelLandOptions::draw() { - refreshSearch(); // Is this necessary? JC LLPanel::draw(); } -- cgit v1.2.3 From 357ded33cf48247ce0a305419f9e42c87e19062d Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Thu, 29 Aug 2013 12:06:46 -0700 Subject: removing test code --- indra/newview/llparticipantlist.cpp | 15 --------------- indra/newview/llparticipantlist.h | 1 - 2 files changed, 16 deletions(-) diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp index b5c9f4a310..ee6893907e 100755 --- a/indra/newview/llparticipantlist.cpp +++ b/indra/newview/llparticipantlist.cpp @@ -404,21 +404,6 @@ void LLParticipantList::addAvatarIDExceptAgent(const LLUUID& avatar_id) static LLFastTimer::DeclareTimer FTM_FOLDERVIEW_TEST("add test avatar agents"); - -void LLParticipantList::addTestAvatarAgents() -{ - LLFastTimer _(FTM_FOLDERVIEW_TEST); - - LL_INFOS("LLParticipantList") << "start adding 300 users" << LL_ENDL; - - for(int i = 0; i < 300; ++i) - { - addAvatarIDExceptAgent(LLUUID().generateNewID()); - } - - LL_INFOS("LLParticipantList") << "finished adding 300 users" << LL_ENDL; -} - void LLParticipantList::adjustParticipant(const LLUUID& speaker_id) { LLPointer speakerp = mSpeakerMgr->findSpeaker(speaker_id); diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h index 936e289c08..3a3ae76604 100755 --- a/indra/newview/llparticipantlist.h +++ b/indra/newview/llparticipantlist.h @@ -50,7 +50,6 @@ public: * @param[in] avatar_id - Avatar UUID to be added into the list */ void addAvatarIDExceptAgent(const LLUUID& avatar_id); - void addTestAvatarAgents(); /** * Refreshes the participant list. -- cgit v1.2.3 From d43a302eaf1b0ca521d4b865e39a8d849da5d5b8 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Thu, 29 Aug 2013 16:51:59 -0400 Subject: MAINT-3075: don't display the target user name as a SLURL in the RequestTeleport dialog --- indra/newview/llavataractions.cpp | 9 ++++++++- indra/newview/skins/default/xui/en/notifications.xml | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index 5f1f57f550..70cc48f12b 100755 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -445,7 +445,14 @@ void LLAvatarActions::teleportRequest(const LLUUID& id) { LLSD notification; notification["uuid"] = id; - notification["NAME_SLURL"] = LLSLURL("agent", id, "about").getSLURLString(); + LLAvatarName av_name; + if (!LLAvatarNameCache::get(id, &av_name)) + { + // unlikely ... they just picked this name from somewhere... + LLAvatarNameCache::get(id, boost::bind(&LLAvatarActions::teleportRequest, id)); + return; // reinvoke this when the name resolves + } + notification["NAME"] = av_name.getCompleteName(); LLSD payload; diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 9ed9a6f409..fce21b403b 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -4073,7 +4073,7 @@ Join me in [REGION] icon="alertmodal.tga" name="TeleportRequestPrompt" type="alertmodal"> -Request a teleport to [NAME_SLURL] with the following message +Request a teleport to [NAME] with the following message confirm -- cgit v1.2.3 From ed828365b8a5371b1deadaa8cc1c2f1fdf729227 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Thu, 29 Aug 2013 16:05:49 -0700 Subject: ACME-866 User receives error when hitting Disconnect in Facebook floater, if access token was cleared manually on backend: Problem was that when the user was already disconnected the Facebook connection state was not being set to disconnected. --- indra/newview/llfacebookconnect.cpp | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp index abfacdb93c..451c0f5767 100644 --- a/indra/newview/llfacebookconnect.cpp +++ b/indra/newview/llfacebookconnect.cpp @@ -190,17 +190,28 @@ public: LLFacebookConnect::instance().setConnectionState(LLFacebookConnect::FB_DISCONNECTING); } + void setUserDisconnected() + { + // Clear data + LLFacebookConnect::instance().clearInfo(); + LLFacebookConnect::instance().clearContent(); + //Notify state change + LLFacebookConnect::instance().setConnectionState(LLFacebookConnect::FB_NOT_CONNECTED); + } + virtual void completed(U32 status, const std::string& reason, const LLSD& content) { - if (isGoodStatus(status)) + if (isGoodStatus(status)) { LL_DEBUGS("FacebookConnect") << "Disconnect successful. content: " << content << LL_ENDL; - - // Clear data - LLFacebookConnect::instance().clearInfo(); - LLFacebookConnect::instance().clearContent(); - //Notify state change - LLFacebookConnect::instance().setConnectionState(LLFacebookConnect::FB_NOT_CONNECTED); + setUserDisconnected(); + + } + //User not found so already disconnected + else if(status == 404) + { + LL_DEBUGS("FacebookConnect") << "Already disconnected. content: " << content << LL_ENDL; + setUserDisconnected(); } else { -- cgit v1.2.3 From 5172d4edac75fbca2209279ffd8a837cfe99434d Mon Sep 17 00:00:00 2001 From: Nicky Date: Tue, 3 Sep 2013 13:50:35 -0400 Subject: OPEN-187: Properly cleanup all allocated OpenSSL structures. --- doc/contributions.txt | 1 + indra/newview/llsechandler_basic.cpp | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/doc/contributions.txt b/doc/contributions.txt index a6d522de2f..17c38ce343 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -924,6 +924,7 @@ Nicky Dasmijn BUG-2432 BUG-3605 CHUIBUG-197 + OPEN-187 Nicky Perian OPEN-1 STORM-1087 diff --git a/indra/newview/llsechandler_basic.cpp b/indra/newview/llsechandler_basic.cpp index 928d26646b..c4d5450e2b 100755 --- a/indra/newview/llsechandler_basic.cpp +++ b/indra/newview/llsechandler_basic.cpp @@ -207,6 +207,7 @@ LLSD _basic_constraints_ext(X509* cert) } } + BASIC_CONSTRAINTS_free( bs ); } return result; } @@ -268,6 +269,8 @@ LLSD _ext_key_usage_ext(X509* cert) ASN1_OBJECT_free(usage); } } + + EXTENDED_KEY_USAGE_free( eku ); } return result; } @@ -280,6 +283,8 @@ LLSD _subject_key_identifier_ext(X509 *cert) if(skeyid) { result = cert_string_from_octet_string(skeyid); + + ASN1_OCTET_STRING_free( skeyid ); } return result; } @@ -300,6 +305,9 @@ LLSD _authority_key_identifier_ext(X509* cert) { result[CERT_AUTHORITY_KEY_IDENTIFIER_SERIAL] = cert_string_from_asn1_integer(akeyid->serial); } + + + AUTHORITY_KEYID_free( akeyid ); } // we ignore the issuer name in the authority key identifier, we check the issue name via @@ -1049,6 +1057,8 @@ void LLBasicCertificateStore::validate(int validation_policy, throw LLInvalidCertificate((*current_cert)); } std::string sha1_hash((const char *)cert_x509->sha1_hash, SHA_DIGEST_LENGTH); + X509_free( cert_x509 ); + cert_x509 = NULL; t_cert_cache::iterator cache_entry = mTrustedCertCache.find(sha1_hash); if(cache_entry != mTrustedCertCache.end()) { -- cgit v1.2.3 From edf2b52cb2476e8d7dada9529354e8f1755d141b Mon Sep 17 00:00:00 2001 From: simon_linden Date: Tue, 3 Sep 2013 17:18:59 -0700 Subject: MAINT-3082 : Remove unused viewer LLParcel code --- indra/llinventory/llparcel.cpp | 116 ----------------------------------------- indra/llinventory/llparcel.h | 17 ------ 2 files changed, 133 deletions(-) diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp index fdb056b4a1..5eb5fb442d 100755 --- a/indra/llinventory/llparcel.cpp +++ b/indra/llinventory/llparcel.cpp @@ -414,122 +414,6 @@ BOOL LLParcel::allowTerraformBy(const LLUUID &agent_id) const } -bool LLParcel::isAgentBlockedFromParcel(LLParcel* parcelp, - const LLUUID& agent_id, - const uuid_vec_t& group_ids, - const BOOL is_agent_identified, - const BOOL is_agent_transacted, - const BOOL is_agent_ageverified) -{ - S32 current_group_access = parcelp->blockAccess(agent_id, LLUUID::null, is_agent_identified, is_agent_transacted, is_agent_ageverified); - S32 count; - bool is_allowed = (current_group_access == BA_ALLOWED) ? true: false; - LLUUID group_id; - - count = group_ids.size(); - for (int i = 0; i < count && !is_allowed; i++) - { - group_id = group_ids[i]; - current_group_access = parcelp->blockAccess(agent_id, group_id, is_agent_identified, is_agent_transacted, is_agent_ageverified); - - if (current_group_access == BA_ALLOWED) is_allowed = true; - } - - return !is_allowed; -} - -BOOL LLParcel::isAgentBanned(const LLUUID& agent_id) const -{ - // Test ban list - if (mBanList.find(agent_id) != mBanList.end()) - { - return TRUE; - } - - return FALSE; -} - -S32 LLParcel::blockAccess(const LLUUID& agent_id, const LLUUID& group_id, - const BOOL is_agent_identified, - const BOOL is_agent_transacted, - const BOOL is_agent_ageverified) const -{ - // Test ban list - if (isAgentBanned(agent_id)) - { - return BA_BANNED; - } - - // Always allow owner on (unless he banned himself, useful for - // testing). We will also allow estate owners/managers in if they - // are not explicitly banned. - if (agent_id == mOwnerID) - { - return BA_ALLOWED; - } - - // Special case when using pass list where group access is being restricted but not - // using access list. In this case group members are allowed only if they buy a pass. - // We return BA_NOT_IN_LIST if not in list - BOOL passWithGroup = getParcelFlag(PF_USE_PASS_LIST) && !getParcelFlag(PF_USE_ACCESS_LIST) - && getParcelFlag(PF_USE_ACCESS_GROUP) && !mGroupID.isNull() && group_id == mGroupID; - - - // Test group list - if (getParcelFlag(PF_USE_ACCESS_GROUP) - && !mGroupID.isNull() - && group_id == mGroupID - && !passWithGroup) - { - return BA_ALLOWED; - } - - // Test access list - if (getParcelFlag(PF_USE_ACCESS_LIST) || passWithGroup ) - { - if (mAccessList.find(agent_id) != mAccessList.end()) - { - return BA_ALLOWED; - } - - return BA_NOT_ON_LIST; - } - - // If we're not doing any other limitations, all users - // can enter, unless - if ( !getParcelFlag(PF_USE_ACCESS_GROUP) - && !getParcelFlag(PF_USE_ACCESS_LIST)) - { - //If the land is group owned, and you are in the group, bypass these checks - if(getIsGroupOwned() && group_id == mGroupID) - { - return BA_ALLOWED; - } - - // Test for "payment" access levels - // Anonymous - No Payment Info on File - if(getParcelFlag(PF_DENY_ANONYMOUS) && !is_agent_identified && !is_agent_transacted) - { - return BA_NO_ACCESS_LEVEL; - } - // AgeUnverified - Not Age Verified - if(getParcelFlag(PF_DENY_AGEUNVERIFIED) && !is_agent_ageverified) - { - return BA_NOT_AGE_VERIFIED; - } - - return BA_ALLOWED; - } - - if(getParcelFlag(PF_DENY_ANONYMOUS) && is_agent_identified && is_agent_transacted) - { - return BA_ALLOWED; - } - - return BA_NOT_IN_GROUP; - -} - void LLParcel::setArea(S32 area, S32 sim_object_limit) { diff --git a/indra/llinventory/llparcel.h b/indra/llinventory/llparcel.h index 0279e8bef9..c4363a48df 100755 --- a/indra/llinventory/llparcel.h +++ b/indra/llinventory/llparcel.h @@ -527,23 +527,6 @@ public: // Can this agent change the shape of the land? BOOL allowTerraformBy(const LLUUID &agent_id) const; - // Returns 0 if access is OK, otherwise a BA_ return code above. - S32 blockAccess(const LLUUID& agent_id, - const LLUUID& group_id, - const BOOL is_agent_identified, - const BOOL is_agent_transacted, - const BOOL is_agent_ageverified) const; - - // Only checks if the agent is explicitly banned from this parcel - BOOL isAgentBanned(const LLUUID& agent_id) const; - - static bool isAgentBlockedFromParcel(LLParcel* parcelp, - const LLUUID& agent_id, - const uuid_vec_t& group_ids, - const BOOL is_agent_identified, - const BOOL is_agent_transacted, - const BOOL is_agent_ageverified); - bool operator==(const LLParcel &rhs) const; // Calculate rent - area * rent * discount rate -- cgit v1.2.3 From 3ba9cf20486ac80276f262c57a9280dc875504eb Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Tue, 3 Sep 2013 19:11:20 -0700 Subject: ACME-789: Remove SLShareHost setting from settings.xml --- indra/newview/app_settings/settings.xml | 11 ----------- indra/newview/llfacebookconnect.cpp | 15 --------------- 2 files changed, 26 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 098693eb98..b199929d91 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -3533,17 +3533,6 @@ Value 0 - SLShareHost - - Comment - Host for contacting SL FB services - Persist - 1 - Type - String - Value - - FastCacheFetchEnabled Comment diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp index 451c0f5767..9c70757278 100644 --- a/indra/newview/llfacebookconnect.cpp +++ b/indra/newview/llfacebookconnect.cpp @@ -32,7 +32,6 @@ #include "llagent.h" #include "llcallingcard.h" // for LLAvatarTracker #include "llcommandhandler.h" -#include "llcontrol.h" #include "llhttpclient.h" #include "llnotificationsutil.h" #include "llurlaction.h" @@ -49,8 +48,6 @@ boost::scoped_ptr LLFacebookConnect::sStateWatcher(new LLEventStrea boost::scoped_ptr LLFacebookConnect::sInfoWatcher(new LLEventStream("FacebookConnectInfo")); boost::scoped_ptr LLFacebookConnect::sContentWatcher(new LLEventStream("FacebookConnectContent")); -extern LLControlGroup gSavedSettings; - // Local functions void log_facebook_connect_error(const std::string& request, U32 status, const std::string& reason, const std::string& code, const std::string& description) { @@ -360,18 +357,6 @@ void LLFacebookConnect::openFacebookWeb(std::string url) std::string LLFacebookConnect::getFacebookConnectURL(const std::string& route, bool include_read_from_master) { static std::string sFacebookConnectUrl = gAgent.getRegion()->getCapability("FacebookConnect"); - - //*TODO : Remove this code along with extern and llcontrol.h header - std::string host = gSavedSettings.getString("SLShareHost"); - if (!host.empty()) - { - sFacebookConnectUrl = host + "/fbc/agent/" + gAgentID.asString(); // TEMPORARY HACK FOR FB DEMO - Cho - } - else - { - sFacebookConnectUrl = gAgent.getRegion()->getCapability("FacebookConnect"); - } - //End removable part std::string url = sFacebookConnectUrl + route; if (include_read_from_master && mReadFromMaster) -- cgit v1.2.3 From 90b85d1c1d3e7da49e16f78f19a20108fb839e7d Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Wed, 4 Sep 2013 17:19:40 +0300 Subject: MAINT-3086 FIXED Groups count in groups list does not display if floater is resized --- indra/newview/skins/default/xui/en/panel_people.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index 20b20f722b..d22cddb601 100755 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -484,7 +484,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M Date: Wed, 4 Sep 2013 16:37:33 -0400 Subject: OPEN-149: fix documentation of LLColor4 constructor for F32 vector --- doc/contributions.txt | 1 + indra/llmath/v4color.h | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/contributions.txt b/doc/contributions.txt index c377de8513..b2df058614 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -688,6 +688,7 @@ Kagehi Kohn Kaimen Takahe Katharine Berry STORM-1900 + OPEN-149 Keklily Longfall Ken Lavender Ken March diff --git a/indra/llmath/v4color.h b/indra/llmath/v4color.h index b047f86e6e..8c8c315808 100755 --- a/indra/llmath/v4color.h +++ b/indra/llmath/v4color.h @@ -50,7 +50,7 @@ class LLColor4 LLColor4(F32 r, F32 g, F32 b); // Initializes LLColor4 to (r, g, b, 1) LLColor4(F32 r, F32 g, F32 b, F32 a); // Initializes LLColor4 to (r. g, b, a) LLColor4(U32 clr); // Initializes LLColor4 to (r=clr>>24, etc)) - LLColor4(const F32 *vec); // Initializes LLColor4 to (vec[0]. vec[1], vec[2], 1) + LLColor4(const F32 *vec); // Initializes LLColor4 to (vec[0]. vec[1], vec[2], vec[3]) LLColor4(const LLColor3 &vec, F32 a = 1.f); // Initializes LLColor4 to (vec, a) explicit LLColor4(const LLSD& sd); explicit LLColor4(const LLColor4U& color4u); // "explicit" to avoid automatic conversion -- cgit v1.2.3 From 035ab9f3747dc555148b17b87888fcf60ccc0114 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Thu, 5 Sep 2013 11:41:19 -0400 Subject: open-183: improve local build number generation to account for multiple heads --- indra/cmake/BuildVersion.cmake | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/indra/cmake/BuildVersion.cmake b/indra/cmake/BuildVersion.cmake index af2063ce6d..e4b63dc7cb 100755 --- a/indra/cmake/BuildVersion.cmake +++ b/indra/cmake/BuildVersion.cmake @@ -16,22 +16,26 @@ if (NOT DEFINED VIEWER_SHORT_VERSION) # will be true in indra/, false in indra/n else (DEFINED ENV{revision}) find_program(MERCURIAL hg) - if (DEFINED MERCURIAL) + find_program(WORDCOUNT wc) + find_program(SED sed) + if (DEFINED MERCURIAL AND DEFINED WORDCOUNT AND DEFINED SED) execute_process( - COMMAND ${MERCURIAL} log -r tip --template "{rev}" + COMMAND ${MERCURIAL} log -r tip:0 --template '\\n' + COMMAND ${WORDCOUNT} -l + COMMAND ${SED} "s/ //g" OUTPUT_VARIABLE VIEWER_VERSION_REVISION OUTPUT_STRIP_TRAILING_WHITESPACE ) if ("${VIEWER_VERSION_REVISION}" MATCHES "^[0-9]+$") message("Revision (from hg) ${VIEWER_VERSION_REVISION}") else ("${VIEWER_VERSION_REVISION}" MATCHES "^[0-9]+$") + message("Revision not set (repository not found?); using 0") set(VIEWER_VERSION_REVISION 0 ) - message("Revision not set, repository not found, using ${VIEWER_VERSION_REVISION}") endif ("${VIEWER_VERSION_REVISION}" MATCHES "^[0-9]+$") - else (DEFINED MERCURIAL) + else (DEFINED MERCURIAL AND DEFINED WORDCOUNT AND DEFINED SED) + message("Revision not set: 'hg', 'wc' or 'sed' not found; using 0") set(VIEWER_VERSION_REVISION 0) - message("Revision not set, 'hg' not found (${MERCURIAL}), using ${VIEWER_VERSION_REVISION}") - endif (DEFINED MERCURIAL) + endif (DEFINED MERCURIAL AND DEFINED WORDCOUNT AND DEFINED SED) endif (DEFINED ENV{revision}) message("Building '${VIEWER_CHANNEL}' Version ${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}") else ( EXISTS ${VIEWER_VERSION_BASE_FILE} ) -- cgit v1.2.3 From 8dc273b942ca3bae7469dcbaf7bab171b889eea1 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Thu, 5 Sep 2013 15:18:58 -0400 Subject: correct some doc strings in the autobuild config file --- autobuild.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/autobuild.xml b/autobuild.xml index e047d4d686..3ffe77451f 100755 --- a/autobuild.xml +++ b/autobuild.xml @@ -1965,11 +1965,11 @@ package_description description - Spell checking dictionaries + Second Life Viewer license - various open + LGPL name - dictionaries + Second Life Viewer platforms common -- cgit v1.2.3 From 38b1975b09c642682bfeb8d6d575ccfbf47ce7e4 Mon Sep 17 00:00:00 2001 From: Graham Linden Date: Fri, 6 Sep 2013 07:09:12 -0700 Subject: STORM-1950 tweaked gpu_table again to address issues found by merged gpu_table_tester script --- NORSPEC-207.patch | 164 ----------------------------------- indra/newview/gpu_table.txt | 95 ++++++++++---------- indra/newview/tests/gpus_results.txt | 52 +++++------ 3 files changed, 75 insertions(+), 236 deletions(-) delete mode 100644 NORSPEC-207.patch diff --git a/NORSPEC-207.patch b/NORSPEC-207.patch deleted file mode 100644 index a1c1447bda..0000000000 --- a/NORSPEC-207.patch +++ /dev/null @@ -1,164 +0,0 @@ -diff -r fe4bab01522e indra/llprimitive/llrendermaterialtable.cpp ---- a/indra/llprimitive/llrendermaterialtable.cpp Wed May 15 17:57:21 2013 +0000 -+++ b/indra/llprimitive/llrendermaterialtable.cpp Wed May 22 14:23:04 2013 -0700 -@@ -184,6 +184,44 @@ - } - } - -+// 'v' is an integer value for 100ths of radians (don't ask...) -+// -+void LLRenderMaterialEntry::LLRenderMaterial::setSpecularMapRotation(S32 v) const -+{ -+ // Store the fact that we're using the new rotation rep -+ // -+ m_flags |= kNewSpecularMapRotation; -+ -+ // Store 'sign bit' in our m_flags -+ // -+ m_flags &= ~kSpecularMapRotationNegative; -+ m_flags |= (specularMapRotation < 0) ? kSpecularMapRotationNegative : 0; -+ -+ specularRotation = abs(specularRotation); -+ specularRotation = llmin(specularRotation, MAX_MATERIAL_MAP_ROTATION); -+ -+ m_specularRotation = (U16)(abs(specularMapRotation)); -+} -+ -+// 'v' is an integer value for 100ths of radians (don't ask...) -+// -+void LLRenderMaterialEntry::LLRenderMaterial::setNormalMapRotation(S32 v) const -+{ -+ -+ // Store the fact that we're using the new rep for this material -+ // -+ m_flags |= kNewNormalMapRotation; -+ -+ // Store 'sign bit' in our m_flags -+ // -+ m_flags &= ~kNormalMapRotationNegative; -+ m_flags |= (normalMapRotation < 0) ? kNormalMapRotationNegative : 0; -+ -+ normalRotation = abs(normalRotation); -+ normalRotation = llmin(normalRotation, MAX_MATERIAL_MAP_ROTATION); -+ -+ m_normalRotation = (U16)(abs(normalMapRotation)); -+} - - void LLRenderMaterialEntry::LLRenderMaterial::asLLSD( LLSD& dest ) const - { -@@ -193,20 +231,45 @@ - dest["NormOffsetY"] = (S32)m_normalOffsetY; - dest["NormRepeatX"] = m_normalRepeatX; - dest["NormRepeatY"] = m_normalRepeatY; -- dest["NormRotation"] = (S32)m_normalRotation; -+ -+ S32 value = (S32)m_normalMapRotation; -+ -+ // If we don't have the flag for new rotations set, -+ // then we need to convert it now -+ if (!(m_flags & kNewNormalMapRotation)) -+ { -+ F32 old_radians = ((F32)m_normalMapRotation / 10000.0f) -+ S32 new_val = (S32)(old_radians * 100.0f); -+ setNormalMapRotation(new_Val); -+ } -+ -+ dest["NormRotation"] = (m_flags & kNormalMapRotationNegative) ? -(S32)m_normalRotation : (S32)m_normalRotation; - - dest["SpecOffsetX"] = (S32)m_specularOffsetX; - dest["SpecOffsetY"] = (S32)m_specularOffsetY; - dest["SpecRepeatX"] = m_specularRepeatX; - dest["SpecRepeatY"] = m_specularRepeatY; -- dest["SpecRotation"] = (S32)m_specularRotation; -+ -+ -+ value = (S32)m_specularRotation; -+ -+ // If we don't have the flag for new rotations set, -+ // then we need to convert it now -+ if (!(m_flags & kNewSpecularMapRotation)) -+ { -+ F32 old_radians = ((F32)m_specularMapRotation / 10000.0f) -+ S32 new_val = (S32)(old_radians * 100.0f); -+ setSpecularMapRotation(new_Val); -+ } -+ -+ dest["SpecRotation"] = (m_flags & kSpecularMapRotationNegative) ? -(S32)m_specularRotation : (S32)m_specularRotation; - - dest["SpecMap"] = m_specularMap; - dest["SpecColor"] = m_specularLightColor.getValue(); - dest["SpecExp"] = (S32)m_specularLightExponent; - dest["EnvIntensity"] = (S32)m_environmentIntensity; - dest["AlphaMaskCutoff"] = (S32)m_alphaMaskCutoff; -- dest["DiffuseAlphaMode"] = (S32)m_diffuseAlphaMode; -+ dest["DiffuseAlphaMode"] = (S32)(m_diffuseAlphaMode & 0xF); - - } - -@@ -217,7 +280,10 @@ - m_normalOffsetY = (U16)materialDefinition["NormOffsetY"].asInteger(); - m_normalRepeatX = materialDefinition["NormRepeatX"].asInteger(); - m_normalRepeatY = materialDefinition["NormRepeatY"].asInteger(); -- m_normalRotation = (U16)materialDefinition["NormRotation"].asInteger(); -+ -+ S32 normalRotation = materialDefinition["NormRotation"].asInteger(); -+ -+ setNormalMapRotation(normalRotation); - - m_specularMap = materialDefinition["SpecMap"].asUUID(); - -@@ -225,7 +291,10 @@ - m_specularOffsetY = (U16)materialDefinition["SpecOffsetY"].asInteger(); - m_specularRepeatX = materialDefinition["SpecRepeatX"].asInteger(); - m_specularRepeatY = materialDefinition["SpecRepeatY"].asInteger(); -- m_specularRotation = (U16)materialDefinition["SpecRotation"].asInteger(); -+ -+ S32 specularRotation = materialDefinition["SpecRotation"].asInteger(); -+ -+ setSpecularMapRotation(specularRotation); - - m_specularLightColor.setValue( materialDefinition["SpecColor"] ); - m_specularLightExponent = (U8)materialDefinition["SpecExp"].asInteger(); -diff -r fe4bab01522e indra/llprimitive/llrendermaterialtable.h ---- a/indra/llprimitive/llrendermaterialtable.h Wed May 15 17:57:21 2013 +0000 -+++ b/indra/llprimitive/llrendermaterialtable.h Wed May 22 14:23:04 2013 -0700 -@@ -89,11 +89,17 @@ - - void computeID(); - -+ - struct LLRenderMaterial - { - void asLLSD( LLSD& dest ) const; - void setFromLLSD( const LLSD& materialDefinition ); - -+ void setNormalMapRotation(S32 v); -+ void setSpecularMapRotation(S32 v); -+ -+ const S32 MAX_MATERIAL_MAP_ROTATION = 62800; -+ - // 36 bytes - LLUUID m_normalMap; - LLUUID m_specularMap; -@@ -119,7 +125,20 @@ - U8 m_specularLightExponent; - U8 m_environmentIntensity; - U8 m_alphaMaskCutoff; -- U8 m_diffuseAlphaMode; -+ U8 m_diffuseAlphaMode : 4; -+ U8 m_flags : 4; -+ }; -+ -+ // Flags stored in LLRenderMaterial::m_flags to differentiate 'old' rotation format -+ // which doesn't handle negative or large rotations correctly from new format. -+ // All ancient materials will have these flags unset as the values for diffuseAlphaMode -+ // from which the bits were stolen never used more than the bottom 2 bits. -+ // -+ enum RenderMaterialFlags { -+ kNewNormalMapRotation = 0x1, -+ kNewSpecularMapRotation = 0x2, -+ kNormalMapRotationNegative = 0x4, -+ kSpecularMapRotationNegative = 0x8 - }; - - friend struct eastl::hash; diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt index 8e64dbdaac..291d89d77a 100755 --- a/indra/newview/gpu_table.txt +++ b/indra/newview/gpu_table.txt @@ -344,6 +344,46 @@ Gallium .*Gallium.* 1 1 1 2.1 NVIDIA GeForce Pre-Release .*NVIDIA .*GeForce[ ]Pre-Release.* 2 1 1 3.3 NVIDIA D1xP1 .*NVIDIA .*D1[0-4]P1.* 0 0 0 0 NVIDIA Mystery PCI Card .*NVIDIA .Corporation [/]PCI]/]SSE2.* 0 0 0 0 +NVIDIA Quadro FX 770M .*Quadro.*FX 77[0-9]M.* 2 1 0 3.3 +NVIDIA Quadro FX 1500M .*Quadro.*FX 150[0-9]M.* 1 1 0 2.1 +NVIDIA Quadro FX 1600M .*Quadro.*FX 160[0-9]M.* 2 1 0 3.3 +NVIDIA Quadro FX 2500M .*Quadro.*FX 250[0-9]M.* 2 1 0 2.1 +NVIDIA Quadro FX 2700M .*Quadro.*FX 270[0-9]M.* 3 1 0 3.3 +NVIDIA Quadro FX 2800M .*Quadro.*FX 280[0-9]M.* 3 1 0 3.3 +NVIDIA Quadro FX 3500 .*Quadro.*FX 3500.* 2 1 0 2.1 +NVIDIA Quadro FX 3600 .*Quadro.*FX 3600.* 3 1 0 3.3 +NVIDIA Quadro FX 3700 .*Quadro.*FX 3700.* 3 1 0 3.3 +NVIDIA Quadro FX 3800 .*Quadro.*FX 3800.* 3 1 0 3.3 +NVIDIA Quadro FX 4500 .*Quadro.*FX 45.* 3 1 0 2.1 +NVIDIA Quadro FX 880M .*Quadro.*FX 88[0-9]M.* 3 1 0 3.3 +NVIDIA Quadro FX 4800 .*NVIDIA .*Quadro FX 4800.* 3 1 0 3.1 +NVIDIA Quadro FX .*NVIDIA .*Quadro FX.* 1 1 0 3.3 +NVIDIA Quadro NVS 1xxM .*NVIDIA .*(Quadro)* NVS *1.[05]M.* 0 1 1 3.3 +NVIDIA Quadro NVS 300M .*NVIDIA .*(Quadro)*[ ]+NVS *30[0-9]M.* 2 1 0 0 +NVIDIA Quadro NVS 320M .*NVIDIA .*(Quadro)*[ ]+NVS *32[0-9]M.* 2 1 0 0 +NVIDIA Quadro NVS 2100M .*NVIDIA .*(Quadro)*[ ]+NVS *210[0-9]M.* 2 1 0 3.3 +NVIDIA Quadro NVS 3100M .*NVIDIA .*(Quadro)*[ ]+NVS *310[0-9]M.* 2 1 0 3.3 +NVIDIA Quadro NVS 4200M .*NVIDIA .*(Quadro)*[ ]+NVS *420[0-9]M.* 2 1 0 4.2 +NVIDIA Quadro NVS 5100M .*NVIDIA .*(Quadro)*[ ]+NVS *510[0-9]M.* 2 1 0 0 +NVIDIA Quadro NVS 5200M .*NVIDIA .*(Quadro)*[ ]+NVS *520[0-9]M.* 2 1 0 0 +NVIDIA Quadro NVS 5400M .*NVIDIA .*(Quadro)*[ ]+NVS *540[0-9]M.* 2 1 0 0 +NVIDIA Quadro NVS .*NVIDIA .*(Quadro)*[ ]+NVS 0 1 0 4.2 +NVIDIA Quadro2 .*Quadro2.* 0 1 0 1.5 +NVIDIA Quadro 1000M .*Quadro.* (K1|1)00[0-9]M.* 2 1 0 4.2 +NVIDIA Quadro 1100M .*Quadro.* *110[0-9]M.* 2 1 0 3.3 +NVIDIA Quadro K600 .*Quadro.* (K6|6)0[0-9][^0].* 2 1 0 4.2 +NVIDIA Quadro K1000 .*Quadro.* (K1|1)00[0-9].* 2 1 0 4.2 +NVIDIA Quadro 2000 M/D .*Quadro.* (K2|2)000.* 3 1 0 4.2 +NVIDIA Quadro 3000M .*Quadro.* (K3|3)00[0-9]M.* 3 1 0 4.2 +NVIDIA Quadro 4000M .*Quadro.* (K4|4)00[0-9]M.* 3 1 0 4.2 +NVIDIA Quadro 4000 .*Quadro.* (K4|4)000.* 3 1 0 4.2 +NVIDIA Quadro 50x0 M .*Quadro.* (K5|5)0.0.* 3 1 0 4.2 +NVIDIA Quadro 6000 .*Quadro.* (K6|6)000.* 3 1 0 0 +NVIDIA Quadro 400 .*Quadro.* 400.* 2 1 0 3.3 +NVIDIA Quadro 600 .*Quadro.* 600.* 2 1 0 4.2 +NVIDIA Quadro4 .*Quadro4.* 0 1 0 1.5 +NVIDIA Quadro DCC .*Quadro DCC.* 0 1 0 0 +NVIDIA Quadro CX .*Quadro.*CX.* 3 1 0 0 NVIDIA G 100M .*NVIDIA .*G *10[0-9]M.* 1 1 1 3.3 NVIDIA G 110M .*NVIDIA .*G *11[0-9]M.* 1 1 1 3.3 NVIDIA G 120M .*NVIDIA .*G *12[0-9]M.* 1 1 1 3.3 @@ -364,12 +404,14 @@ NVIDIA GTX 260M .*NVIDIA .*GTX 26[0-9]M.* 3 1 0 3.3 NVIDIA GTX 270M .*NVIDIA .*GTX 27[0-9]M.* 3 1 0 0 NVIDIA GTX 280M .*NVIDIA .*GTX 28[0-9]M.* 3 1 0 3.3 NVIDIA 300M .*NVIDIA .*GT 30[0-9]M.* 3 1 1 4.2 -NVIDIA G 310M .*NVIDIA .* 31[0-9]M.* 2 1 0 3.3 -NVIDIA GT 320M .*NVIDIA .* 32[0-9]M.* 3 1 0 3.3 -NVIDIA GT 330M .*NVIDIA .*GT 33[0-9]M.* 3 1 1 3.3 -NVIDIA GT 340M .*NVIDIA .*GT 34[0-9]M.* 4 1 1 3.3 +NVIDIA G 310M .*NVIDIA .*G[T]* 31[0-9]M.* 2 1 0 3.3 +NVIDIA GT 320M .*NVIDIA .*G[T]* 32[0-9]M.* 3 1 0 3.3 +NVIDIA GT 330M .*NVIDIA .*G[T]* 33[0-9]M.* 3 1 1 3.3 +NVIDIA GT 340M .*NVIDIA .*G[T]* 34[0-9]M.* 4 1 1 3.3 NVIDIA GTS 350M .*NVIDIA .*GTS 35[0-9]M.* 4 1 1 3.3 NVIDIA GTS 360M .*NVIDIA .*GTS 36[0-9]M.* 5 1 1 3.3 +NVIDIA 310M .*NVIDIA .*31[0-9]M.* 2 1 0 3.3 +NVIDIA 320M .*NVIDIA .*320M.* 2 1 0 3.3 NVIDIA 400M .*NVIDIA .*[ ]+40[0-9]M.* 2 1 0 0 NVIDIA 410M .*NVIDIA .*[ ]+41[0-9]M.* 3 1 0 0 NVIDIA GT 420M .*NVIDIA .*GT *42[0-9]M.* 3 1 1 4.2 @@ -425,11 +467,12 @@ NVIDIA GTX 260 .*NVIDIA .*GTX *26.* 4 1 1 3.3 NVIDIA GTX 270 .*NVIDIA .*GTX *27.* 4 1 0 3.3 NVIDIA GTX 280 .*NVIDIA .*GTX *28.* 4 1 1 3.3 NVIDIA GTX 290 .*NVIDIA .*GTX *29.* 5 1 0 3.3 -NVIDIA 310 .*NVIDIA .*310[^0]*.* 3 1 1 3.3 -NVIDIA 315 .*NVIDIA .*315[^0]*.* 3 1 1 3.3 NVIDIA GT 320 .*NVIDIA .*GT *32.* 3 1 0 3.3 NVIDIA GT 330 .*NVIDIA .*GT *33.* 3 1 0 3.3 NVIDIA GT 340 .*NVIDIA .*GT *34.* 3 1 0 0 +NVIDIA 310 .*NVIDIA .*310[^0M]*.* 3 1 1 3.3 +NVIDIA 315 .*NVIDIA .*315[^0M]*.* 3 1 1 3.3 +NVIDIA 320 .*NVIDIA .*320[^0M]*.* 3 1 1 3.3 NVIDIA 405 .*NVIDIA .*405[^0]*.* 3 1 0 3.3 NVIDIA 410 .*NVIDIA .*410[^0]*.* 3 1 0 3.3 NVIDIA GT 415 .*NVIDIA .*GT *415.* 3 1 1 4.2 @@ -593,46 +636,6 @@ NVIDIA MCP77 .*NVIDIA .*MCP77.* 1 1 0 0 NVIDIA MCP78 .*NVIDIA .*MCP78.* 1 1 0 0 NVIDIA MCP79 .*NVIDIA .*MCP79.* 1 1 0 0 NVIDIA MCP7A .*NVIDIA .*MCP7A.* 1 1 0 0 -NVIDIA Quadro FX 770M .*Quadro.*FX 77[0-9]M.* 2 1 0 3.3 -NVIDIA Quadro FX 1500M .*Quadro.*FX 150[0-9]M.* 1 1 0 2.1 -NVIDIA Quadro FX 1600M .*Quadro.*FX 160[0-9]M.* 2 1 0 3.3 -NVIDIA Quadro FX 2500M .*Quadro.*FX 250[0-9]M.* 2 1 0 2.1 -NVIDIA Quadro FX 2700M .*Quadro.*FX 270[0-9]M.* 3 1 0 3.3 -NVIDIA Quadro FX 2800M .*Quadro.*FX 280[0-9]M.* 3 1 0 3.3 -NVIDIA Quadro FX 3500 .*Quadro.*FX 3500.* 2 1 0 2.1 -NVIDIA Quadro FX 3600 .*Quadro.*FX 3600.* 3 1 0 3.3 -NVIDIA Quadro FX 3700 .*Quadro.*FX 3700.* 3 1 0 3.3 -NVIDIA Quadro FX 3800 .*Quadro.*FX 3800.* 3 1 0 3.3 -NVIDIA Quadro FX 4500 .*Quadro.*FX 45.* 3 1 0 2.1 -NVIDIA Quadro FX 880M .*Quadro.*FX 88[0-9]M.* 3 1 0 3.3 -NVIDIA Quadro FX 4800 .*NVIDIA .*Quadro FX 4800.* 3 1 0 3.1 -NVIDIA Quadro FX .*NVIDIA .*Quadro FX.* 1 1 0 3.3 -NVIDIA Quadro NVS 1xxM .*NVIDIA .*(Quadro)* NVS *1.[05]M.* 0 1 1 3.3 -NVIDIA Quadro NVS 300M .*NVIDIA .*(Quadro)*[ ]+NVS *30[0-9]M.* 2 1 0 0 -NVIDIA Quadro NVS 320M .*NVIDIA .*(Quadro)*[ ]+NVS *32[0-9]M.* 2 1 0 0 -NVIDIA Quadro NVS 2100M .*NVIDIA .*(Quadro)*[ ]+NVS *210[0-9]M.* 2 1 0 3.3 -NVIDIA Quadro NVS 3100M .*NVIDIA .*(Quadro)*[ ]+NVS *310[0-9]M.* 2 1 0 3.3 -NVIDIA Quadro NVS 4200M .*NVIDIA .*(Quadro)*[ ]+NVS *420[0-9]M.* 2 1 0 4.2 -NVIDIA Quadro NVS 5100M .*NVIDIA .*(Quadro)*[ ]+NVS *510[0-9]M.* 2 1 0 0 -NVIDIA Quadro NVS 5200M .*NVIDIA .*(Quadro)*[ ]+NVS *520[0-9]M.* 2 1 0 0 -NVIDIA Quadro NVS 5400M .*NVIDIA .*(Quadro)*[ ]+NVS *540[0-9]M.* 2 1 0 0 -NVIDIA Quadro NVS .*NVIDIA .*(Quadro)*[ ]+NVS 0 1 0 4.2 -NVIDIA Quadro2 .*Quadro2.* 0 1 0 1.5 -NVIDIA Quadro 1000M .*Quadro.* (K1|1)00[0-9]M.* 2 1 0 4.2 -NVIDIA Quadro 1100M .*Quadro.* *110[0-9]M.* 2 1 0 3.3 -NVIDIA Quadro K600 .*Quadro.* (K6|6)0[0-9][^0].* 2 1 0 4.2 -NVIDIA Quadro K1000 .*Quadro.* (K1|1)00[0-9].* 2 1 0 4.2 -NVIDIA Quadro 2000 M/D .*Quadro.* (K2|2)000.* 3 1 0 4.2 -NVIDIA Quadro 3000M .*Quadro.* (K3|3)00[0-9]M.* 3 1 0 4.2 -NVIDIA Quadro 4000M .*Quadro.* (K4|4)00[0-9]M.* 3 1 0 4.2 -NVIDIA Quadro 4000 .*Quadro.* (K4|4)000.* 3 1 0 4.2 -NVIDIA Quadro 50x0 M .*Quadro.* (K5|5)0.0.* 3 1 0 4.2 -NVIDIA Quadro 6000 .*Quadro.* (K6|6)000.* 3 1 0 0 -NVIDIA Quadro 400 .*Quadro.* 400.* 2 1 0 3.3 -NVIDIA Quadro 600 .*Quadro.* 600.* 2 1 0 4.2 -NVIDIA Quadro4 .*Quadro4.* 0 1 0 1.5 -NVIDIA Quadro DCC .*Quadro DCC.* 0 1 0 0 -NVIDIA Quadro CX .*Quadro.*CX.* 3 1 0 0 NVIDIA Corporation N12P .*NVIDIA .*N12P.* 1 1 1 4.1 NVIDIA Corporation N11M .*NVIDIA .*N11M.* 2 1 0 3.1 NVIDIA RIVA TNT .*RIVA TNT.* 0 0 0 1.5 diff --git a/indra/newview/tests/gpus_results.txt b/indra/newview/tests/gpus_results.txt index cd242f4d19..1cd3654446 100755 --- a/indra/newview/tests/gpus_results.txt +++ b/indra/newview/tests/gpus_results.txt @@ -1502,10 +1502,10 @@ Mesa project: www.mesa3d.org Mesa GLX Indirect NVIDIA 205 supported 3 1 3.3 NVIDIA 205 NVIDIA 210 supported 3 1 3.3 NVIDIA 210 NVIDIA 310 supported 3 1 3.3 NVIDIA 310 -NVIDIA 310M supported 2 0 3.3 NVIDIA G 310M +NVIDIA 310M supported 2 0 3.3 NVIDIA 310M NVIDIA 315 supported 3 1 3.3 NVIDIA 315 -NVIDIA 315M supported 2 0 3.3 NVIDIA G 310M -NVIDIA 320M supported 3 0 3.3 NVIDIA GT 320M +NVIDIA 315M supported 2 0 3.3 NVIDIA 310M +NVIDIA 320M supported 2 0 3.3 NVIDIA 320M NVIDIA 405 supported 3 0 3.3 NVIDIA 405 NVIDIA 410 supported 3 0 3.3 NVIDIA 410 NVIDIA 510 supported 3 0 0 NVIDIA 510 @@ -1536,16 +1536,16 @@ NVIDIA Corporation GeForce 310/PCI/SSE2 NVIDIA Corporation GeForce 310/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA 310 NVIDIA Corporation GeForce 310/PCIe/SSE2 supported 3 1 3.3 NVIDIA 310 NVIDIA Corporation GeForce 310/PCIe/SSE2/3DNOW! supported 3 1 3.3 NVIDIA 310 -NVIDIA Corporation GeForce 310M/PCI/SSE2 supported 2 0 3.3 NVIDIA G 310M -NVIDIA Corporation GeForce 310M/PCIe/SSE2 supported 2 0 3.3 NVIDIA G 310M +NVIDIA Corporation GeForce 310M/PCI/SSE2 supported 2 0 3.3 NVIDIA 310M +NVIDIA Corporation GeForce 310M/PCIe/SSE2 supported 2 0 3.3 NVIDIA 310M NVIDIA Corporation GeForce 315/PCI/SSE2 supported 3 1 3.3 NVIDIA 315 NVIDIA Corporation GeForce 315/PCI/SSE2/3DNOW! supported 3 1 3.3 NVIDIA 315 NVIDIA Corporation GeForce 315/PCIe/SSE2 supported 3 1 3.3 NVIDIA 315 NVIDIA Corporation GeForce 315/PCIe/SSE2/3DNOW! supported 3 1 3.3 NVIDIA 315 -NVIDIA Corporation GeForce 315M/PCI/SSE2 supported 2 0 3.3 NVIDIA G 310M -NVIDIA Corporation GeForce 315M/PCIe/SSE2 supported 2 0 3.3 NVIDIA G 310M -NVIDIA Corporation GeForce 320M/PCI/SSE2 supported 3 0 3.3 NVIDIA GT 320M -NVIDIA Corporation GeForce 320M/integrated/SSE2 supported 3 0 3.3 NVIDIA GT 320M +NVIDIA Corporation GeForce 315M/PCI/SSE2 supported 2 0 3.3 NVIDIA 310M +NVIDIA Corporation GeForce 315M/PCIe/SSE2 supported 2 0 3.3 NVIDIA 310M +NVIDIA Corporation GeForce 320M/PCI/SSE2 supported 2 0 3.3 NVIDIA 320M +NVIDIA Corporation GeForce 320M/integrated/SSE2 supported 2 0 3.3 NVIDIA 320M NVIDIA Corporation GeForce 405/PCI/SSE2 supported 3 0 3.3 NVIDIA 405 NVIDIA Corporation GeForce 405/PCI/SSE2/3DNOW! supported 3 0 3.3 NVIDIA 405 NVIDIA Corporation GeForce 405/PCIe/SSE2 supported 3 0 3.3 NVIDIA 405 @@ -2401,8 +2401,8 @@ NVIDIA Corporation NB9M-GE1/PCI/SSE2 NVIDIA Corporation NB9M-GS/PCI/SSE2 supported 1 0 0 NVIDIA NB9M NVIDIA Corporation NV17/AGP/SSE2 supported 0 0 0 NVIDIA NV17 NVIDIA Corporation NVIDIA GeForce 210 OpenGL Engine supported 3 1 3.3 NVIDIA GeForce 210 -NVIDIA Corporation NVIDIA GeForce 310M OpenGL Engine supported 2 0 3.3 NVIDIA G 310M -NVIDIA Corporation NVIDIA GeForce 320M OpenGL Engine supported 3 0 3.3 NVIDIA GT 320M +NVIDIA Corporation NVIDIA GeForce 310M OpenGL Engine supported 2 0 3.3 NVIDIA 310M +NVIDIA Corporation NVIDIA GeForce 320M OpenGL Engine supported 2 0 3.3 NVIDIA 320M NVIDIA Corporation NVIDIA GeForce 6600 GT OpenGL Engine supported 2 1 2.1 NVIDIA GeForce 6600 NVIDIA Corporation NVIDIA GeForce 7300 GT OpenGL Engine supported 1 1 2.1 NVIDIA GeForce 7300 NVIDIA Corporation NVIDIA GeForce 7600 GT OpenGL Engine supported 2 1 2.1 NVIDIA GeForce 7600 @@ -2481,15 +2481,15 @@ NVIDIA Corporation NVS 2100M/PCIe/SSE2 NVIDIA Corporation NVS 300/PCI/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS NVIDIA Corporation NVS 300/PCI/SSE2/3DNOW! supported 0 0 4.2 NVIDIA Quadro NVS NVIDIA Corporation NVS 300/PCIe/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS -NVIDIA Corporation NVS 310/PCIe/SSE2 supported 3 1 3.3 NVIDIA 310 -NVIDIA Corporation NVS 3100M/PCI/SSE2 supported 3 1 3.3 NVIDIA 310 -NVIDIA Corporation NVS 3100M/PCIe/SSE2 supported 3 1 3.3 NVIDIA 310 -NVIDIA Corporation NVS 315/PCIe/SSE2 supported 3 1 3.3 NVIDIA 315 +NVIDIA Corporation NVS 310/PCIe/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation NVS 3100M/PCI/SSE2 supported 2 0 3.3 NVIDIA Quadro NVS 3100M +NVIDIA Corporation NVS 3100M/PCIe/SSE2 supported 2 0 3.3 NVIDIA Quadro NVS 3100M +NVIDIA Corporation NVS 315/PCIe/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS NVIDIA Corporation NVS 4200M/PCI/SSE2 supported 2 0 4.2 NVIDIA Quadro NVS 4200M NVIDIA Corporation NVS 4200M/PCIe/SSE2 supported 2 0 4.2 NVIDIA Quadro NVS 4200M -NVIDIA Corporation NVS 510/PCIe/SSE2 supported 3 0 0 NVIDIA 510 -NVIDIA Corporation NVS 5100M/PCI/SSE2 supported 3 0 0 NVIDIA 510 -NVIDIA Corporation NVS 5100M/PCIe/SSE2 supported 3 0 0 NVIDIA 510 +NVIDIA Corporation NVS 510/PCIe/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation NVS 5100M/PCI/SSE2 supported 2 0 0 NVIDIA Quadro NVS 5100M +NVIDIA Corporation NVS 5100M/PCIe/SSE2 supported 2 0 0 NVIDIA Quadro NVS 5100M NVIDIA Corporation NVS 5200M/PCI/SSE2 supported 2 0 0 NVIDIA Quadro NVS 5200M NVIDIA Corporation NVS 5200M/PCIe/SSE2 supported 2 0 0 NVIDIA Quadro NVS 5200M NVIDIA Corporation NVS 5400M/PCIe/SSE2 supported 2 0 0 NVIDIA Quadro NVS 5400M @@ -2636,10 +2636,10 @@ NVIDIA Corporation Quadro NVS 150M/PCI/SSE2 NVIDIA Corporation Quadro NVS 150M/PCIe/SSE2 supported 0 1 3.3 NVIDIA Quadro NVS 1xxM NVIDIA Corporation Quadro NVS 160M/PCI/SSE2 supported 0 1 3.3 NVIDIA Quadro NVS 1xxM NVIDIA Corporation Quadro NVS 160M/PCIe/SSE2 supported 0 1 3.3 NVIDIA Quadro NVS 1xxM -NVIDIA Corporation Quadro NVS 210S / GeForce 6150LE/PCI/SSE2 supported 3 1 4.2 NVIDIA GeForce 6100 -NVIDIA Corporation Quadro NVS 210S / GeForce 6150LE/PCI/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 -NVIDIA Corporation Quadro NVS 210S / GeForce 6150LE/integrated/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 -NVIDIA Corporation Quadro NVS 210S / NVIDIA GeForce 6150LE/PCI/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 +NVIDIA Corporation Quadro NVS 210S / GeForce 6150LE/PCI/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation Quadro NVS 210S / GeForce 6150LE/PCI/SSE2/3DNOW! supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation Quadro NVS 210S / GeForce 6150LE/integrated/SSE2/3DNOW! supported 0 0 4.2 NVIDIA Quadro NVS +NVIDIA Corporation Quadro NVS 210S / NVIDIA GeForce 6150LE/PCI/SSE2/3DNOW! supported 0 0 4.2 NVIDIA Quadro NVS NVIDIA Corporation Quadro NVS 210S/PCI/SSE2/3DNOW! supported 0 0 4.2 NVIDIA Quadro NVS NVIDIA Corporation Quadro NVS 280 PCI-E/PCI/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS NVIDIA Corporation Quadro NVS 280 SD/AGP/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS @@ -2651,13 +2651,13 @@ NVIDIA Corporation Quadro NVS 290/PCIe/SSE2/3DNOW! NVIDIA Corporation Quadro NVS 295/PCI/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS NVIDIA Corporation Quadro NVS 295/PCIe/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS NVIDIA Corporation Quadro NVS 300M/PCI/SSE2 supported 2 0 0 NVIDIA Quadro NVS 300M -NVIDIA Corporation Quadro NVS 320M/PCI/SSE2 supported 3 0 3.3 NVIDIA GT 320M -NVIDIA Corporation Quadro NVS 320M/PCIe/SSE2 supported 3 0 3.3 NVIDIA GT 320M +NVIDIA Corporation Quadro NVS 320M/PCI/SSE2 supported 2 0 0 NVIDIA Quadro NVS 320M +NVIDIA Corporation Quadro NVS 320M/PCIe/SSE2 supported 2 0 0 NVIDIA Quadro NVS 320M NVIDIA Corporation Quadro NVS 420/PCI/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS NVIDIA Corporation Quadro NVS 420/PCIe/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS NVIDIA Corporation Quadro NVS 420/PCIe/SSE2/3DNOW! supported 0 0 4.2 NVIDIA Quadro NVS NVIDIA Corporation Quadro NVS 450/PCIe/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS -NVIDIA Corporation Quadro NVS 510M/PCI/SSE2 supported 3 0 0 NVIDIA 510 +NVIDIA Corporation Quadro NVS 510M/PCI/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS NVIDIA Corporation Quadro NVS 55/280 PCI/PCI/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS NVIDIA Corporation Quadro NVS with AGP8X/AGP/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS NVIDIA Corporation Quadro NVS/AGP/SSE2 supported 0 0 4.2 NVIDIA Quadro NVS @@ -2915,7 +2915,7 @@ Parallels and ATI Technologies Inc. Parallels using ATI Radeon X1600 OpenGL Engi Parallels and Intel Inc. Parallels using Intel GMA X3100 OpenGL Engine supported 1 1 2.1 Intel X3100 Parallels and Intel Inc. Parallels using Intel HD Graphics 3000 OpenGL Engine supported 3 1 3.1 Intel HD Graphics 3000 Parallels and Intel Inc. Parallels using Intel HD Graphics 4000 OpenGL Engine supported 3 1 4 Intel HD Graphics 4000 -Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce 320M OpenGL Engine supported 3 0 3.3 NVIDIA GT 320M +Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce 320M OpenGL Engine supported 2 0 3.3 NVIDIA 320M Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce 8800 GS OpenGL Engine supported 3 1 3.3 NVIDIA GeForce 8800 Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce 9400 OpenGL Engine supported 3 1 3.3 NVIDIA GeForce 9400 Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce 9400M OpenGL Engine supported 2 1 3.3 NVIDIA GeForce 9400M -- cgit v1.2.3 From fcdd0e578ca1ac7b025c5583df1c42bd286b07af Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Fri, 6 Sep 2013 10:04:41 -0700 Subject: ACME-903: Link the 'Learn about posting to Facebook' text to the proper KB article --- indra/newview/skins/default/xui/en/panel_social_account.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/skins/default/xui/en/panel_social_account.xml b/indra/newview/skins/default/xui/en/panel_social_account.xml index 882e410bdb..d7235396fe 100644 --- a/indra/newview/skins/default/xui/en/panel_social_account.xml +++ b/indra/newview/skins/default/xui/en/panel_social_account.xml @@ -69,7 +69,7 @@ name="account_learn_more_label" top_pad="20" type="string"> - [https://support.secondlife.com/ Learn about posting to Facebook] + [http://community.secondlife.com/t5/English-Knowledge-Base/Second-Life-Share/ta-p/2149711 Learn about posting to Facebook] -- cgit v1.2.3 From 6dd7e0c9ef587c6c05726d407bef8b51018a7a4b Mon Sep 17 00:00:00 2001 From: simon_linden Date: Fri, 6 Sep 2013 11:31:11 -0700 Subject: MAINT-3109 - Add "can't attach" notification to the viewer --- indra/newview/skins/default/xui/en/notifications.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 9894136808..6fd64596ad 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -9511,6 +9511,14 @@ Cannot attach object because you do not have permission to move it. Not enough script resources available to attach object! + + fail + Cannot attach object because it is already being removed. + + Date: Fri, 6 Sep 2013 18:26:21 -0700 Subject: ACME-905 : Get the FacebookConnect cap each time we need it (it's not that much) --- indra/newview/llfacebookconnect.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp index 9c70757278..611d18d6d6 100644 --- a/indra/newview/llfacebookconnect.cpp +++ b/indra/newview/llfacebookconnect.cpp @@ -356,9 +356,9 @@ void LLFacebookConnect::openFacebookWeb(std::string url) std::string LLFacebookConnect::getFacebookConnectURL(const std::string& route, bool include_read_from_master) { - static std::string sFacebookConnectUrl = gAgent.getRegion()->getCapability("FacebookConnect"); - - std::string url = sFacebookConnectUrl + route; + std::string url = gAgent.getRegion()->getCapability("FacebookConnect"); + url += route; + if (include_read_from_master && mReadFromMaster) { url += "?read_from_master=true"; -- cgit v1.2.3 From 6198219d9da6e069804d57ca9a3e711341a4c2e0 Mon Sep 17 00:00:00 2001 From: dmitrykproductengine Date: Mon, 9 Sep 2013 21:19:44 +0300 Subject: MAINT-3117 FIXED crash in LLFloaterConversationPreview::showHistory() --- indra/newview/llfloaterconversationpreview.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/indra/newview/llfloaterconversationpreview.cpp b/indra/newview/llfloaterconversationpreview.cpp index b570de14aa..7cb313af33 100755 --- a/indra/newview/llfloaterconversationpreview.cpp +++ b/indra/newview/llfloaterconversationpreview.cpp @@ -126,7 +126,10 @@ void LLFloaterConversationPreview::draw() void LLFloaterConversationPreview::onOpen(const LLSD& key) { - showHistory(); + if(mChatHistoryLoaded) + { + showHistory(); + } } void LLFloaterConversationPreview::showHistory() -- cgit v1.2.3 From 79836e32d575248642cfd6af837548aac054988f Mon Sep 17 00:00:00 2001 From: Graham Linden Date: Mon, 9 Sep 2013 13:26:13 -0700 Subject: MAINT-140 revert to simplified cleanDeadObjects to avoid accidental refcounting crashes --- indra/newview/llviewerobjectlist.cpp | 28 +++++----------------------- 1 file changed, 5 insertions(+), 23 deletions(-) diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index 66615657d8..8a013a6d91 100755 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -1324,45 +1324,27 @@ void LLViewerObjectList::cleanDeadObjects(BOOL use_timer) return; } + LLViewerObject *objectp = NULL; S32 num_removed = 0; - LLViewerObject *objectp; - - vobj_list_t::reverse_iterator target = mObjects.rbegin(); - vobj_list_t::iterator iter = mObjects.begin(); - for ( ; iter != mObjects.end(); ) + vobj_list_t::iterator iter; + for (iter = mObjects.begin(); iter != mObjects.end();) { // Scan for all of the dead objects and put them all on the end of the list with no ref count ops objectp = *iter; - if (objectp == NULL) - { //we caught up to the dead tail - break; - } - if (objectp->isDead()) + if (objectp && objectp->isDead()) { - LLPointer::swap(*iter, *target); - *target = NULL; - ++target; + iter = mObjects.erase(iter); num_removed++; - - if (num_removed == mNumDeadObjects || iter->isNull()) - { - // We've cleaned up all of the dead objects or caught up to the dead tail - break; - } } else { ++iter; } } - llassert(num_removed == mNumDeadObjects); - //erase as a block - mObjects.erase(mObjects.begin()+(mObjects.size()-mNumDeadObjects), mObjects.end()); - // We've cleaned the global object list, now let's do some paranoia testing on objects // before blowing away the dead list. mDeadObjects.clear(); -- cgit v1.2.3 From eaf287cc20efbad97fba17a65efd57eeba0f7278 Mon Sep 17 00:00:00 2001 From: Merov Linden Date: Mon, 9 Sep 2013 13:36:34 -0700 Subject: ACME-906 : Clean up xml from overzealous background color and opacity settings --- indra/newview/skins/default/xui/en/floater_social.xml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/indra/newview/skins/default/xui/en/floater_social.xml b/indra/newview/skins/default/xui/en/floater_social.xml index 39df777d1b..426c5507e4 100644 --- a/indra/newview/skins/default/xui/en/floater_social.xml +++ b/indra/newview/skins/default/xui/en/floater_social.xml @@ -1,5 +1,4 @@ - @@ -30,9 +26,6 @@ tab_min_width="70" tab_height="30" tab_position="top" - background_visible="true" - bg_opaque_color="DkGray" - bg_alpha_color="DkGray_66" top="7" height="437" halign="center"> @@ -68,9 +61,6 @@ Date: Tue, 10 Sep 2013 10:34:20 +0300 Subject: MAINT-3117 FIXED crash in LLFloaterConversationPreview::showHistory() Updated fix with a more complex and stable version. Integrated solution from the CHUI-836. --- indra/newview/llfloaterconversationpreview.cpp | 43 ++++++++++++-------------- indra/newview/llfloaterconversationpreview.h | 3 +- 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/indra/newview/llfloaterconversationpreview.cpp b/indra/newview/llfloaterconversationpreview.cpp index 7cb313af33..39630320a9 100755 --- a/indra/newview/llfloaterconversationpreview.cpp +++ b/indra/newview/llfloaterconversationpreview.cpp @@ -43,14 +43,15 @@ LLFloaterConversationPreview::LLFloaterConversationPreview(const LLSD& session_i mCurrentPage(0), mPageSize(gSavedSettings.getS32("ConversationHistoryPageSize")), mAccountName(session_id[LL_FCP_ACCOUNT_NAME]), - mCompleteName(session_id[LL_FCP_COMPLETE_NAME]) + mCompleteName(session_id[LL_FCP_COMPLETE_NAME]), + mMutex(NULL) { } BOOL LLFloaterConversationPreview::postBuild() { mChatHistory = getChild("chat_history"); - LLLoadHistoryThread::setLoadEndSignal(boost::bind(&LLFloaterConversationPreview::SetPages, this, _1, _2)); + LLLoadHistoryThread::setLoadEndSignal(boost::bind(&LLFloaterConversationPreview::setPages, this, _1, _2)); const LLConversation* conv = LLConversationLog::instance().getConversation(mSessionID); std::string name; @@ -90,19 +91,19 @@ BOOL LLFloaterConversationPreview::postBuild() mPageSpinner->setMinValue(1); mPageSpinner->set(1); mPageSpinner->setEnabled(false); - mChatHistoryLoaded = false; LLLogChat::startChatHistoryThread(file, load_params); return LLFloater::postBuild(); } -void LLFloaterConversationPreview::SetPages(std::list& messages, const std::string& file_name) +void LLFloaterConversationPreview::setPages(std::list& messages, const std::string& file_name) { if(file_name == mChatHistoryFileName) { + // additional protection to avoid changes of mMessages in setPages + LLMutexLock lock(&mMutex); mMessages = messages; + mCurrentPage = (mMessages.size() ? (mMessages.size() - 1) / mPageSize : 0); - - mCurrentPage = mMessages.size() / mPageSize; mPageSpinner->setEnabled(true); mPageSpinner->setMaxValue(mCurrentPage+1); mPageSpinner->set(mCurrentPage+1); @@ -119,7 +120,6 @@ void LLFloaterConversationPreview::draw() if(mChatHistoryLoaded) { showHistory(); - mChatHistoryLoaded = false; } LLFloater::draw(); } @@ -134,32 +134,27 @@ void LLFloaterConversationPreview::onOpen(const LLSD& key) void LLFloaterConversationPreview::showHistory() { - if (!mMessages.size()) + if (!mChatHistoryLoaded) { return; } + mChatHistoryLoaded = false; - mChatHistory->clear(); - - std::ostringstream message; - std::list::const_iterator iter = mMessages.begin(); - - int delta = 0; - if (mCurrentPage) + // additional protection to avoid changes of mMessages in setPages + LLMutexLock lock(&mMutex); + if(!mMessages.size() || mCurrentPage * mPageSize >= mMessages.size()) { - int remainder = mMessages.size() % mPageSize; - delta = (remainder == 0) ? 0 : (mPageSize - remainder); + return; } - std::advance(iter, (mCurrentPage * mPageSize) - delta); + mChatHistory->clear(); - for (int msg_num = 0; (iter != mMessages.end() && msg_num < mPageSize); ++iter, ++msg_num) + std::ostringstream message; + std::list::const_iterator iter = mMessages.begin(); + std::advance(iter, mCurrentPage * mPageSize); + + for (int msg_num = 0; iter != mMessages.end() && msg_num < mPageSize; ++iter, ++msg_num) { - if (iter->size() == 0) - { - continue; - } - LLSD msg = *iter; LLUUID from_id = LLUUID::null; diff --git a/indra/newview/llfloaterconversationpreview.h b/indra/newview/llfloaterconversationpreview.h index 389f3dfd09..f8796127ba 100755 --- a/indra/newview/llfloaterconversationpreview.h +++ b/indra/newview/llfloaterconversationpreview.h @@ -42,7 +42,7 @@ public: virtual ~LLFloaterConversationPreview(){}; virtual BOOL postBuild(); - void SetPages(std::list& messages,const std::string& file_name); + void setPages(std::list& messages,const std::string& file_name); virtual void draw(); virtual void onOpen(const LLSD& key); @@ -51,6 +51,7 @@ private: void onMoreHistoryBtnClick(); void showHistory(); + LLMutex mMutex; LLSpinCtrl* mPageSpinner; LLChatHistory* mChatHistory; LLUUID mSessionID; -- cgit v1.2.3 From 242266890fdee3fa4b82cb50e33a88967ccf27dc Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Tue, 10 Sep 2013 14:35:53 -0400 Subject: remove llversionviewer.h (incorrectly re-created in a merge) --- indra/llcommon/llversionviewer.h | 41 ---------------------------------------- 1 file changed, 41 deletions(-) delete mode 100644 indra/llcommon/llversionviewer.h diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h deleted file mode 100644 index 6a5ff314e4..0000000000 --- a/indra/llcommon/llversionviewer.h +++ /dev/null @@ -1,41 +0,0 @@ -/** - * @file llversionviewer.h - * @brief - * - * $LicenseInfo:firstyear=2002&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA - * $/LicenseInfo$ - */ - -#ifndef LL_LLVERSIONVIEWER_H -#define LL_LLVERSIONVIEWER_H - -const S32 LL_VERSION_MAJOR = 3; -const S32 LL_VERSION_MINOR = 4; -const S32 LL_VERSION_PATCH = 6; -const S32 LL_VERSION_BUILD = 0; - -const char * const LL_CHANNEL = "Second Life Developer"; - -#if LL_DARWIN -const char * const LL_VERSION_BUNDLE_ID = "com.secondlife.indra.viewer"; -#endif - -#endif -- cgit v1.2.3 From 60b20e3bd899198771b3c1b255be042864618cad Mon Sep 17 00:00:00 2001 From: maksymsproductengine Date: Tue, 10 Sep 2013 22:12:11 +0300 Subject: MAINT-3117 FIXED crash in LLFloaterConversationPreview::showHistory() - optimization --- indra/newview/llfloaterconversationpreview.cpp | 24 +++++++++--------------- indra/newview/llfloaterconversationpreview.h | 2 +- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/indra/newview/llfloaterconversationpreview.cpp b/indra/newview/llfloaterconversationpreview.cpp index dd8bea01b4..5041f4689d 100755 --- a/indra/newview/llfloaterconversationpreview.cpp +++ b/indra/newview/llfloaterconversationpreview.cpp @@ -44,7 +44,8 @@ LLFloaterConversationPreview::LLFloaterConversationPreview(const LLSD& session_i mPageSize(gSavedSettings.getS32("ConversationHistoryPageSize")), mAccountName(session_id[LL_FCP_ACCOUNT_NAME]), mCompleteName(session_id[LL_FCP_COMPLETE_NAME]), - mMutex(NULL) + mMutex(NULL), + mShowHistory(false) { } @@ -110,35 +111,27 @@ void LLFloaterConversationPreview::setPages(std::list& messages, const std std::string total_page_num = llformat("/ %d", mCurrentPage+1); getChild("page_num_label")->setValue(total_page_num); - mChatHistoryLoaded = true; + mShowHistory = true; } } void LLFloaterConversationPreview::draw() { - if(mChatHistoryLoaded) + if(mShowHistory) { showHistory(); + mShowHistory = false; } LLFloater::draw(); } void LLFloaterConversationPreview::onOpen(const LLSD& key) { - if(mChatHistoryLoaded) - { - showHistory(); - } + mShowHistory = true; } void LLFloaterConversationPreview::showHistory() { - if (!mChatHistoryLoaded) - { - return; - } - mChatHistoryLoaded = false; - // additional protection to avoid changes of mMessages in setPages LLMutexLock lock(&mMutex); if(!mMessages.size() || mCurrentPage * mPageSize >= mMessages.size()) @@ -201,10 +194,11 @@ void LLFloaterConversationPreview::showHistory() void LLFloaterConversationPreview::onMoreHistoryBtnClick() { mCurrentPage = (int)(mPageSpinner->getValueF32()); - if (--mCurrentPage < 0) + if (!mCurrentPage) { return; } - showHistory(); + mCurrentPage--; + mShowHistory = true; } diff --git a/indra/newview/llfloaterconversationpreview.h b/indra/newview/llfloaterconversationpreview.h index f8796127ba..b0488f4ff1 100755 --- a/indra/newview/llfloaterconversationpreview.h +++ b/indra/newview/llfloaterconversationpreview.h @@ -62,7 +62,7 @@ private: std::string mAccountName; std::string mCompleteName; std::string mChatHistoryFileName; - bool mChatHistoryLoaded; + bool mShowHistory; }; #endif /* LLFLOATERCONVERSATIONPREVIEW_H_ */ -- cgit v1.2.3 From 9e451513d95691d073519bea12b3899807784d21 Mon Sep 17 00:00:00 2001 From: dmitrykproductengine Date: Wed, 11 Sep 2013 11:21:27 +0300 Subject: MAINT-3069 FIXED Adding/removing item from blocklist blocks viewer up to a disconnect --- indra/newview/llblocklist.cpp | 110 ++++++++++++++++++++++++++++++++++++------ indra/newview/llblocklist.h | 21 +++++++- indra/newview/llmutelist.cpp | 17 +++++++ indra/newview/llmutelist.h | 2 + 4 files changed, 132 insertions(+), 18 deletions(-) diff --git a/indra/newview/llblocklist.cpp b/indra/newview/llblocklist.cpp index 066cb71677..ac41b26a34 100755 --- a/indra/newview/llblocklist.cpp +++ b/indra/newview/llblocklist.cpp @@ -41,10 +41,14 @@ static const LLBlockListNameTypeComparator NAME_TYPE_COMPARATOR; LLBlockList::LLBlockList(const Params& p) : LLFlatListViewEx(p), mSelectedItem(NULL), - mDirty(true) + mDirty(true), + mShouldAddAll(true), + mActionType(NONE), + mMuteListSize(0) { LLMuteList::getInstance()->addObserver(this); + mMuteListSize = LLMuteList::getInstance()->getMutes().size(); // Set up context menu. LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; @@ -73,6 +77,41 @@ LLBlockList::~LLBlockList() LLMuteList::getInstance()->removeObserver(this); } +void LLBlockList::createList() +{ + std::vector mutes = LLMuteList::instance().getMutes(); + std::vector::const_iterator mute_it = mutes.begin(); + + for (; mute_it != mutes.end(); ++mute_it) + { + addNewItem(&*mute_it); + } +} + +BlockListActionType LLBlockList::getCurrentMuteListActionType() +{ + BlockListActionType type = NONE; + U32 curSize = LLMuteList::getInstance()->getMutes().size(); + if( curSize > mMuteListSize) + type = ADD; + else if(curSize < mMuteListSize) + type = REMOVE; + + return type; +} + +void LLBlockList::onChangeDetailed(const LLMute &mute) +{ + mActionType = getCurrentMuteListActionType(); + + mCurItemId = mute.mID; + mCurItemName = mute.mName; + mCurItemType = mute.mType; + mCurItemFlags = mute.mFlags; + + refresh(); +} + BOOL LLBlockList::handleRightMouseDown(S32 x, S32 y, MASK mask) { BOOL handled = LLUICtrl::handleRightMouseDown(x, y, mask); @@ -88,6 +127,16 @@ BOOL LLBlockList::handleRightMouseDown(S32 x, S32 y, MASK mask) return handled; } +void LLBlockList::removeListItem(const LLMute* mute) +{ + removeItemByUUID(mute->mID); +} + +void LLBlockList::hideListItem(LLBlockedListItem* item, bool show) +{ + item->setVisible(show); +} + void LLBlockList::setNameFilter(const std::string& filter) { std::string filter_upper = filter; @@ -136,28 +185,56 @@ void LLBlockList::refresh() bool have_filter = !mNameFilter.empty(); // save selection to restore it after list rebuilt - LLUUID selected = getSelectedUUID(); + LLUUID selected = getSelectedUUID(), next_selected; - // calling refresh may be initiated by removing currently selected item - // so select next item and save the selection to restore it after list rebuilt - if (!selectNextItemPair(false, true)) + if(mShouldAddAll) // creating list of blockers { - selectNextItemPair(true, true); + clear(); + createList(); + mShouldAddAll = false; + } + else + { + // handle remove/add functionality + LLMute mute(mCurItemId, mCurItemName, mCurItemType, mCurItemFlags); + if(mActionType == ADD) + { + addNewItem(&mute); + } + else if(mActionType == REMOVE) + { + if(selected == mute.mID) + { + // we are going to remove currently selected item, so select next item and save the selection to restore it + if (!selectNextItemPair(false, true)) + { + selectNextItemPair(true, true); + } + next_selected = getSelectedUUID(); + } + removeListItem(&mute); + } + mActionType = NONE; } - LLUUID next_selected = getSelectedUUID(); - - clear(); - - std::vector mutes = LLMuteList::instance().getMutes(); - std::vector::const_iterator mute_it = mutes.begin(); - for (; mute_it != mutes.end(); ++mute_it) + // handle filter functionality + if(have_filter || (!have_filter && !mPrevNameFilter.empty())) { - if (have_filter && !findInsensitive(mute_it->mName, mNameFilter)) - continue; + // we should update visibility of our items if previous filter was not empty + std::vector < LLPanel* > allItems; + getItems(allItems); + std::vector < LLPanel* >::iterator it = allItems.begin(); - addNewItem(&*mute_it); + for(; it != allItems.end() ; ++it) + { + LLBlockedListItem * curItem = dynamic_cast (*it); + if(curItem) + { + hideListItem(curItem, findInsensitive(curItem->getName(), mNameFilter)); + } + } } + mPrevNameFilter = mNameFilter; if (getItemPair(selected)) { @@ -169,6 +246,7 @@ void LLBlockList::refresh() // previously selected item was removed, so select next item selectItemPair(getItemPair(next_selected), true); } + mMuteListSize = LLMuteList::getInstance()->getMutes().size(); // Sort the list. sort(); diff --git a/indra/newview/llblocklist.h b/indra/newview/llblocklist.h index 1a215710f4..b1ea7e98e5 100755 --- a/indra/newview/llblocklist.h +++ b/indra/newview/llblocklist.h @@ -34,6 +34,8 @@ class LLBlockedListItem; class LLMute; +enum BlockListActionType {NONE, ADD, REMOVE}; + /** * List of blocked avatars and objects. * This list represents contents of the LLMuteList. @@ -56,7 +58,8 @@ public: LLToggleableMenu* getContextMenu() const { return mContextMenu.get(); } LLBlockedListItem* getBlockedItem() const; - virtual void onChange() { refresh(); } + virtual void onChange() { } + virtual void onChangeDetailed(const LLMute& ); virtual void draw(); void setNameFilter(const std::string& filter); @@ -67,18 +70,32 @@ public: private: void addNewItem(const LLMute* mute); + void removeListItem(const LLMute* mute); + void hideListItem(LLBlockedListItem* item, bool show); void setDirty(bool dirty = true) { mDirty = dirty; } bool findInsensitive(std::string haystack, const std::string& needle_upper); bool isActionEnabled(const LLSD& userdata); void onCustomAction (const LLSD& userdata); + void createList(); - + BlockListActionType getCurrentMuteListActionType(); + LLHandle mContextMenu; LLBlockedListItem* mSelectedItem; std::string mNameFilter; bool mDirty; + bool mShouldAddAll; + BlockListActionType mActionType; + U32 mMuteListSize; + + // This data is used to save information about item that currently changed(added or removed) + LLUUID mCurItemId; + std::string mCurItemName; + LLMute::EType mCurItemType; + U32 mCurItemFlags; + std::string mPrevNameFilter; }; diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp index 54522bb7f6..0720d443f8 100755 --- a/indra/newview/llmutelist.cpp +++ b/indra/newview/llmutelist.cpp @@ -251,6 +251,7 @@ BOOL LLMuteList::add(const LLMute& mute, U32 flags) llinfos << "Muting by name " << mute.mName << llendl; updateAdd(mute); notifyObservers(); + notifyObserversDetailed(mute); return TRUE; } else @@ -299,6 +300,7 @@ BOOL LLMuteList::add(const LLMute& mute, U32 flags) llinfos << "Muting " << localmute.mName << " id " << localmute.mID << " flags " << localmute.mFlags << llendl; updateAdd(localmute); notifyObservers(); + notifyObserversDetailed(localmute); if(!(localmute.mFlags & LLMute::flagParticles)) { //Kill all particle systems owned by muted task @@ -396,6 +398,7 @@ BOOL LLMuteList::remove(const LLMute& mute, U32 flags) } // Must be after erase. + notifyObserversDetailed(localmute); setLoaded(); // why is this here? -MG } else @@ -409,6 +412,7 @@ BOOL LLMuteList::remove(const LLMute& mute, U32 flags) updateRemove(mute); mLegacyMutes.erase(legacy_it); // Must be after erase. + notifyObserversDetailed(mute); setLoaded(); // why is this here? -MG } } @@ -762,3 +766,16 @@ void LLMuteList::notifyObservers() it = mObservers.upper_bound(observer); } } + +void LLMuteList::notifyObserversDetailed(const LLMute& mute) +{ + for (observer_set_t::iterator it = mObservers.begin(); + it != mObservers.end(); + ) + { + LLMuteListObserver* observer = *it; + observer->onChangeDetailed(mute); + // In case onChange() deleted an entry. + it = mObservers.upper_bound(observer); + } +} diff --git a/indra/newview/llmutelist.h b/indra/newview/llmutelist.h index 7a70370fe3..3e998b4f0e 100755 --- a/indra/newview/llmutelist.h +++ b/indra/newview/llmutelist.h @@ -123,6 +123,7 @@ private: void setLoaded(); void notifyObservers(); + void notifyObserversDetailed(const LLMute &mute); void updateAdd(const LLMute& mute); void updateRemove(const LLMute& mute); @@ -173,6 +174,7 @@ class LLMuteListObserver public: virtual ~LLMuteListObserver() { } virtual void onChange() = 0; + virtual void onChangeDetailed(const LLMute& ) { } }; -- cgit v1.2.3 From 186113144e950adf78eaf452d76d3a59b6af2974 Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Wed, 11 Sep 2013 14:17:56 +0300 Subject: MAINT-2894 FIXED Handle mouse events for popup menus in modal dialogs. --- indra/llui/llmodaldialog.cpp | 37 ++++++++++++++++++++++++++++++++++--- indra/newview/lltoast.cpp | 2 +- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/indra/llui/llmodaldialog.cpp b/indra/llui/llmodaldialog.cpp index 8c2be44904..ff85b0ad09 100755 --- a/indra/llui/llmodaldialog.cpp +++ b/indra/llui/llmodaldialog.cpp @@ -34,7 +34,7 @@ #include "llui.h" #include "llwindow.h" #include "llkeyboard.h" - +#include "llmenugl.h" // static std::list LLModalDialog::sModalStack; @@ -161,6 +161,18 @@ void LLModalDialog::setVisible( BOOL visible ) BOOL LLModalDialog::handleMouseDown(S32 x, S32 y, MASK mask) { + LLView* popup_menu = LLMenuGL::sMenuContainer->getVisibleMenu(); + if (popup_menu != NULL) + { + S32 mx, my; + LLUI::getMousePositionScreen(&mx, &my); + LLRect menu_screen_rc = popup_menu->calcScreenRect(); + if(!menu_screen_rc.pointInRect(mx, my)) + { + LLMenuGL::sMenuContainer->hideMenus(); + } + } + if (mModal) { if (!LLFloater::handleMouseDown(x, y, mask)) @@ -173,16 +185,34 @@ BOOL LLModalDialog::handleMouseDown(S32 x, S32 y, MASK mask) { LLFloater::handleMouseDown(x, y, mask); } + + return TRUE; } BOOL LLModalDialog::handleHover(S32 x, S32 y, MASK mask) -{ +{ if( childrenHandleHover(x, y, mask) == NULL ) { getWindow()->setCursor(UI_CURSOR_ARROW); - lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << llendl; + lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << llendl; } + + LLView* popup_menu = LLMenuGL::sMenuContainer->getVisibleMenu(); + if (popup_menu != NULL) + { + S32 mx, my; + LLUI::getMousePositionScreen(&mx, &my); + LLRect menu_screen_rc = popup_menu->calcScreenRect(); + if(menu_screen_rc.pointInRect(mx, my)) + { + S32 local_x = mx - popup_menu->getRect().mLeft; + S32 local_y = my - popup_menu->getRect().mBottom; + popup_menu->handleHover(local_x, local_y, mask); + gFocusMgr.setMouseCapture(NULL); + } + } + return TRUE; } @@ -210,6 +240,7 @@ BOOL LLModalDialog::handleDoubleClick(S32 x, S32 y, MASK mask) BOOL LLModalDialog::handleRightMouseDown(S32 x, S32 y, MASK mask) { + LLMenuGL::sMenuContainer->hideMenus(); childrenHandleRightMouseDown(x, y, mask); return TRUE; } diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp index d876c9a3f4..448fae48de 100755 --- a/indra/newview/lltoast.cpp +++ b/indra/newview/lltoast.cpp @@ -555,7 +555,7 @@ BOOL LLToast::handleMouseDown(S32 x, S32 y, MASK mask) mHideBtnPressed = mHideBtn->getRect().pointInRect(x, y); } - return LLFloater::handleMouseDown(x, y, mask); + return LLModalDialog::handleMouseDown(x, y, mask); } //-------------------------------------------------------------------------- -- cgit v1.2.3 From f4d2e21f4fdf6953cfa375bd716b1458e3de14e8 Mon Sep 17 00:00:00 2001 From: ZaiLynch Date: Wed, 11 Sep 2013 12:17:22 -0400 Subject: Changing shortcut to toggle preference floater --- doc/contributions.txt | 1 + indra/newview/skins/default/xui/en/menu_viewer.xml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/contributions.txt b/doc/contributions.txt index f33cf36ec2..404103cf91 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -1365,6 +1365,7 @@ YongYong Francois Zak Westminster Zai Lynch VWR-19505 + STORM-1902 Zana Kohime Zaren Alexander Zarkonnen Decosta diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index dabfc4eebd..0e95a9d9a9 100755 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -180,7 +180,7 @@ name="Preferences" shortcut="control|P"> Date: Wed, 11 Sep 2013 19:02:36 -0400 Subject: OPEN-189 Add missing header guard --- doc/contributions.txt | 1 + indra/llwindow/llwindowmacosx-objc.h | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/doc/contributions.txt b/doc/contributions.txt index 0035d4f597..4e3ce70e0b 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -1122,6 +1122,7 @@ Slee Mayo snowy Sidran Sovereign Engineer MAINT-2334 + OPEN-189 SpacedOut Frye VWR-34 VWR-45 diff --git a/indra/llwindow/llwindowmacosx-objc.h b/indra/llwindow/llwindowmacosx-objc.h index 32b3bfb078..3b6295fba8 100755 --- a/indra/llwindow/llwindowmacosx-objc.h +++ b/indra/llwindow/llwindowmacosx-objc.h @@ -25,6 +25,9 @@ * $/LicenseInfo$ */ +#ifndef LL_LLWINDOWMACOSX_OBJC_H +#define LL_LLWINDOWMACOSX_OBJC_H + #include #include @@ -143,3 +146,5 @@ NSWindowRef getMainAppWindow(); GLViewRef getGLView(); unsigned int getModifiers(); + +#endif // LL_LLWINDOWMACOSX_OBJC_H -- cgit v1.2.3 From 2a93275a2b73c0710fc21923212766d26509ea28 Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Thu, 12 Sep 2013 17:26:13 +0300 Subject: MAINT-3137 FIXED We should handle condition when viewer is quitting --- indra/newview/llfloaterimcontainer.cpp | 6 +++--- indra/newview/llfloaterimcontainer.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp index 836a455a67..2b4585cc47 100755 --- a/indra/newview/llfloaterimcontainer.cpp +++ b/indra/newview/llfloaterimcontainer.cpp @@ -2098,7 +2098,7 @@ BOOL LLFloaterIMContainer::isFrontmost() // For conversations, closeFloater() (linked to Ctrl-W) does not actually close the floater but the active conversation. // This is intentional so it doesn't confuse the user. onClickCloseBtn() closes the whole floater. -void LLFloaterIMContainer::onClickCloseBtn() +void LLFloaterIMContainer::onClickCloseBtn(bool app_quitting/* = false*/) { // Always unminimize before trying to close. // Most of the time the user will never see this state. @@ -2107,7 +2107,7 @@ void LLFloaterIMContainer::onClickCloseBtn() LLMultiFloater::setMinimized(FALSE); } - LLFloater::closeFloater(); + LLFloater::closeFloater(app_quitting); } void LLFloaterIMContainer::closeHostedFloater() @@ -2154,7 +2154,7 @@ void LLFloaterIMContainer::closeFloater(bool app_quitting/* = false*/) if(app_quitting) { closeAllConversations(); - onClickCloseBtn(); + onClickCloseBtn(app_quitting); } else { diff --git a/indra/newview/llfloaterimcontainer.h b/indra/newview/llfloaterimcontainer.h index 36da457cac..a118ab51d2 100755 --- a/indra/newview/llfloaterimcontainer.h +++ b/indra/newview/llfloaterimcontainer.h @@ -134,7 +134,7 @@ private: void onStubCollapseButtonClicked(); void processParticipantsStyleUpdate(); void onSpeakButtonClicked(); - /*virtual*/ void onClickCloseBtn(); + /*virtual*/ void onClickCloseBtn(bool app_quitting = false); /*virtual*/ void closeHostedFloater(); void collapseConversationsPane(bool collapse, bool save_is_allowed=true); -- cgit v1.2.3 From a6c4863a6a14123d59955ad8fb0df82a8ac74faf Mon Sep 17 00:00:00 2001 From: dmitrykproductengine Date: Fri, 13 Sep 2013 13:11:41 +0300 Subject: Build fix after patch for MAINT-3137 --- indra/llui/llfloater.cpp | 2 +- indra/llui/llfloater.h | 2 +- indra/newview/llfasttimerview.cpp | 2 +- indra/newview/llfasttimerview.h | 2 +- indra/newview/llfloaterimnearbychat.cpp | 3 ++- indra/newview/llfloaterimnearbychat.h | 2 +- indra/newview/llfloaterimsession.cpp | 2 +- indra/newview/llfloaterimsession.h | 2 +- indra/newview/llfloatersidepanelcontainer.cpp | 2 +- indra/newview/llfloatersidepanelcontainer.h | 2 +- indra/newview/llsceneview.cpp | 2 +- indra/newview/llsceneview.h | 2 +- 12 files changed, 13 insertions(+), 12 deletions(-) diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 273ceb4038..03ad664928 100755 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -1802,7 +1802,7 @@ void LLFloater::onClickClose( LLFloater* self ) self->onClickCloseBtn(); } -void LLFloater::onClickCloseBtn() +void LLFloater::onClickCloseBtn(bool app_quitting) { closeFloater(false); } diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index 59448530d9..1693af318d 100755 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -389,7 +389,7 @@ protected: void destroy(); // Don't call this directly. You probably want to call closeFloater() - virtual void onClickCloseBtn(); + virtual void onClickCloseBtn(bool app_quitting = false); virtual void updateTitleButtons(); diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp index 8e1a1df211..06119620de 100755 --- a/indra/newview/llfasttimerview.cpp +++ b/indra/newview/llfasttimerview.cpp @@ -1545,7 +1545,7 @@ void LLFastTimerView::doAnalysis(std::string baseline, std::string target, std:: return ; } } -void LLFastTimerView::onClickCloseBtn() +void LLFastTimerView::onClickCloseBtn(bool) { setVisible(false); } diff --git a/indra/newview/llfasttimerview.h b/indra/newview/llfasttimerview.h index 5766cfa0b0..1349b1e99c 100755 --- a/indra/newview/llfasttimerview.h +++ b/indra/newview/llfasttimerview.h @@ -63,7 +63,7 @@ public: F64 getTime(const std::string& name); protected: - virtual void onClickCloseBtn(); + virtual void onClickCloseBtn(bool app_quitting = false); private: typedef std::vector > bar_positions_t; bar_positions_t mBarStart; diff --git a/indra/newview/llfloaterimnearbychat.cpp b/indra/newview/llfloaterimnearbychat.cpp index 3d77ea4f0b..86e64c25e3 100755 --- a/indra/newview/llfloaterimnearbychat.cpp +++ b/indra/newview/llfloaterimnearbychat.cpp @@ -308,7 +308,8 @@ void LLFloaterIMNearbyChat::onClose(bool app_quitting) } // virtual -void LLFloaterIMNearbyChat::onClickCloseBtn() +void LLFloaterIMNearbyChat::onClickCloseBtn(bool) + { if (!isTornOff()) { diff --git a/indra/newview/llfloaterimnearbychat.h b/indra/newview/llfloaterimnearbychat.h index 05b48cccb0..f0daacd6a9 100755 --- a/indra/newview/llfloaterimnearbychat.h +++ b/indra/newview/llfloaterimnearbychat.h @@ -95,7 +95,7 @@ protected: void onChatFontChange(LLFontGL* fontp); /*virtual*/ void onTearOffClicked(); - /*virtual*/ void onClickCloseBtn(); + /*virtual*/ void onClickCloseBtn(bool app_qutting = false); static LLWString stripChannelNumber(const LLWString &mesg, S32* channel); EChatType processChatTypeTriggers(EChatType type, std::string &str); diff --git a/indra/newview/llfloaterimsession.cpp b/indra/newview/llfloaterimsession.cpp index 5cb9df5625..14e1a486d3 100755 --- a/indra/newview/llfloaterimsession.cpp +++ b/indra/newview/llfloaterimsession.cpp @@ -112,7 +112,7 @@ void LLFloaterIMSession::onTearOffClicked() } // virtual -void LLFloaterIMSession::onClickCloseBtn() +void LLFloaterIMSession::onClickCloseBtn(bool) { LLIMModel::LLIMSession* session = LLIMModel::instance().findIMSession(mSessionID); diff --git a/indra/newview/llfloaterimsession.h b/indra/newview/llfloaterimsession.h index a0e0171b34..d6718843ca 100755 --- a/indra/newview/llfloaterimsession.h +++ b/indra/newview/llfloaterimsession.h @@ -141,7 +141,7 @@ private: /*virtual*/ void refresh(); /*virtual*/ void onTearOffClicked(); - /*virtual*/ void onClickCloseBtn(); + /*virtual*/ void onClickCloseBtn(bool app_qutting); // Update the window title and input field help text /*virtual*/ void updateSessionName(const std::string& name); diff --git a/indra/newview/llfloatersidepanelcontainer.cpp b/indra/newview/llfloatersidepanelcontainer.cpp index 5f9556a870..c5248719e9 100755 --- a/indra/newview/llfloatersidepanelcontainer.cpp +++ b/indra/newview/llfloatersidepanelcontainer.cpp @@ -57,7 +57,7 @@ void LLFloaterSidePanelContainer::onOpen(const LLSD& key) getChild(sMainPanelName)->onOpen(key); } -void LLFloaterSidePanelContainer::onClickCloseBtn() +void LLFloaterSidePanelContainer::onClickCloseBtn(bool) { LLPanelOutfitEdit* panel_outfit_edit = dynamic_cast(LLFloaterSidePanelContainer::getPanel("appearance", "panel_outfit_edit")); diff --git a/indra/newview/llfloatersidepanelcontainer.h b/indra/newview/llfloatersidepanelcontainer.h index 491723471f..65ec8f604e 100755 --- a/indra/newview/llfloatersidepanelcontainer.h +++ b/indra/newview/llfloatersidepanelcontainer.h @@ -51,7 +51,7 @@ public: /*virtual*/ void onOpen(const LLSD& key); - /*virtual*/ void onClickCloseBtn(); + /*virtual*/ void onClickCloseBtn(bool app_quitting = false); LLPanel* openChildPanel(const std::string& panel_name, const LLSD& params); diff --git a/indra/newview/llsceneview.cpp b/indra/newview/llsceneview.cpp index 09e799e4f7..cbd8bee9d5 100755 --- a/indra/newview/llsceneview.cpp +++ b/indra/newview/llsceneview.cpp @@ -51,7 +51,7 @@ LLSceneView::LLSceneView(const LLRect& rect) setCanClose(true); } -void LLSceneView::onClickCloseBtn() +void LLSceneView::onClickCloseBtn(bool) { setVisible(false); } diff --git a/indra/newview/llsceneview.h b/indra/newview/llsceneview.h index 2a3a14bbee..1fceecb9e1 100755 --- a/indra/newview/llsceneview.h +++ b/indra/newview/llsceneview.h @@ -38,7 +38,7 @@ public: virtual void draw(); protected: - virtual void onClickCloseBtn(); + virtual void onClickCloseBtn(bool app_qutting = false); }; -- cgit v1.2.3 From e3963666fd54f5cb1b43bc70b77660079bad5ab5 Mon Sep 17 00:00:00 2001 From: dmitrykproductengine Date: Fri, 13 Sep 2013 14:40:22 +0300 Subject: MAINT-3133 FIXED Expand Nearby Chat participant list on first open of Conversations floater, per login session --- indra/newview/app_settings/settings_per_account.xml | 11 +++++++++++ indra/newview/llfloaterimcontainer.cpp | 19 +++++++++++++++++++ indra/newview/llfloaterimcontainer.h | 1 + 3 files changed, 31 insertions(+) diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml index 636caf5ef3..500151c935 100755 --- a/indra/newview/app_settings/settings_per_account.xml +++ b/indra/newview/app_settings/settings_per_account.xml @@ -77,6 +77,17 @@ Value 412 + ConversationsParticipantListCollapsed + + Comment + Stores the expanded/collapsed state of Nearby chat participant list + Persist + 1 + Type + Boolean + Value + true + InstantMessageLogPath Comment diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp index 2b4585cc47..3ef0cc63b1 100755 --- a/indra/newview/llfloaterimcontainer.cpp +++ b/indra/newview/llfloaterimcontainer.cpp @@ -101,6 +101,7 @@ LLFloaterIMContainer::~LLFloaterIMContainer() gSavedPerAccountSettings.setBOOL("ConversationsListPaneCollapsed", mConversationsPane->isCollapsed()); gSavedPerAccountSettings.setBOOL("ConversationsMessagePaneCollapsed", mMessagesPane->isCollapsed()); + gSavedPerAccountSettings.setBOOL("ConversationsParticipantListCollapsed", !isParticipantListExpanded()); if (!LLSingleton::destroyed()) { @@ -250,6 +251,11 @@ BOOL LLFloaterIMContainer::postBuild() // Init the sort order now that the root had been created setSortOrder(LLConversationSort(gSavedSettings.getU32("ConversationSortOrder"))); + //We should expand nearby chat participants list for the new user + if(gAgent.isFirstLogin() || !gSavedPerAccountSettings.getBOOL("ConversationsParticipantListCollapsed")) + { + expandConversation(); + } // Keep the xml set title around for when we have to overwrite it mGeneralTitle = getTitle(); @@ -2082,6 +2088,19 @@ void LLFloaterIMContainer::expandConversation() } } } +bool LLFloaterIMContainer::isParticipantListExpanded() +{ + bool is_expanded = false; + if(!mConversationsPane->isCollapsed()) + { + LLConversationViewSession* widget = dynamic_cast(get_ptr_in_map(mConversationsWidgets,getSelectedSession())); + if (widget) + { + is_expanded = widget->isOpen(); + } + } + return is_expanded; +} // By default, if torn off session is currently frontmost, LLFloater::isFrontmost() will return FALSE, which can lead to some bugs // So LLFloater::isFrontmost() is overriden here to check both selected session and the IM floater itself diff --git a/indra/newview/llfloaterimcontainer.h b/indra/newview/llfloaterimcontainer.h index a118ab51d2..5d88b7881a 100755 --- a/indra/newview/llfloaterimcontainer.h +++ b/indra/newview/llfloaterimcontainer.h @@ -172,6 +172,7 @@ private: void toggleAllowTextChat(const LLUUID& participant_uuid); void toggleMute(const LLUUID& participant_id, U32 flags); void openNearbyChat(); + bool isParticipantListExpanded(); LLButton* mExpandCollapseBtn; LLButton* mStubCollapseBtn; -- cgit v1.2.3 From 433b90c44d4ea85d87a47c23aa1736b932b972c2 Mon Sep 17 00:00:00 2001 From: MaximB ProductEngine Date: Mon, 16 Sep 2013 18:08:29 +0300 Subject: MAINT-3018 (Remove long distracting messages appearing in nearby chat) --- indra/newview/llviewermessage.cpp | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 1e63977ceb..6bc480f0ed 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -3822,19 +3822,6 @@ public: LLInventoryModel::EXCLUDE_TRASH, is_card); } - LLSD args; - if ( land_items.count() > 0 ) - { // Show notification that they can now teleport to landmarks. Use a random landmark from the inventory - S32 random_land = ll_rand( land_items.count() - 1 ); - args["NAME"] = land_items[random_land]->getName(); - LLNotificationsUtil::add("TeleportToLandmark",args); - } - if ( card_items.count() > 0 ) - { // Show notification that they can now contact people. Use a random calling card from the inventory - S32 random_card = ll_rand( card_items.count() - 1 ); - args["NAME"] = card_items[random_card]->getName(); - LLNotificationsUtil::add("TeleportToPerson",args); - } gInventory.removeObserver(this); delete this; @@ -4111,18 +4098,6 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**) if (isAgentAvatarValid()) { - // Chat the "back" SLURL. (DEV-4907) - - LLSLURL slurl; - gAgent.getTeleportSourceSLURL(slurl); - LLSD substitution = LLSD().with("[T_SLURL]", slurl.getSLURLString()); - std::string completed_from = LLAgent::sTeleportProgressMessages["completed_from"]; - LLStringUtil::format(completed_from, substitution); - - LLSD args; - args["MESSAGE"] = completed_from; - LLNotificationsUtil::add("SystemMessageTip", args); - // Set the new position gAgentAvatarp->setPositionAgent(agent_pos); gAgentAvatarp->clearChat(); -- cgit v1.2.3 From 6184ad34e44968e27c987e16247b5d4663eb06fa Mon Sep 17 00:00:00 2001 From: Graham Linden Date: Mon, 16 Sep 2013 12:23:46 -0700 Subject: MAINT-3107 speculative changes to try to ameliorate rigged crasher on Intel HD with crappy default driver --- .../shaders/class1/avatar/avatarSkinV.glsl | 8 ++++--- .../shaders/class1/avatar/objectSkinV.glsl | 15 ++++++++----- indra/newview/llvoavatar.cpp | 26 +++++++++++++++++++--- 3 files changed, 37 insertions(+), 12 deletions(-) diff --git a/indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl b/indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl index bc63d07d72..3df4d333ce 100755 --- a/indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl @@ -31,10 +31,12 @@ uniform vec4 matrixPalette[45]; mat4 getSkinnedTransform() { mat4 ret; - int i = int(floor(weight.x)); + float x = fract(weight.x); - - ret[0] = mix(matrixPalette[i+0], matrixPalette[i+1], x); + int i = int(floor(weight.x)); + i = min(i, 15); + i = max(i, 0); + ret[0] = mix(matrixPalette[i+0], matrixPalette[i+1], x); ret[1] = mix(matrixPalette[i+15],matrixPalette[i+16], x); ret[2] = mix(matrixPalette[i+30],matrixPalette[i+31], x); ret[3] = vec4(0,0,0,1); diff --git a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl index efd0d03965..12996cf0d6 100755 --- a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl @@ -34,14 +34,17 @@ mat4 getObjectSkinnedTransform() vec4 w = fract(weight4); vec4 index = floor(weight4); - + + index = min(index, vec4(31.0)); + index = max(index, vec4( 0.0)); + float scale = 1.0/(w.x+w.y+w.z+w.w); w *= scale; - - mat4 mat = matrixPalette[int(index.x)]*w.x; - mat += matrixPalette[int(index.y)]*w.y; - mat += matrixPalette[int(index.z)]*w.z; - mat += matrixPalette[int(index.w)]*w.w; + + mat4 mat = matrixPalette[int(index.x)]*w.x; + mat += matrixPalette[int(index.y)]*w.y; + mat += matrixPalette[int(index.z)]*w.z; + mat += matrixPalette[int(index.w)]*w.w; return mat; } diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 6a504e10c4..076b2524bf 100755 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -5512,7 +5512,10 @@ void LLVOAvatar::addChild(LLViewerObject *childp) LLViewerObject::addChild(childp); if (childp->mDrawable) { - attachObject(childp); + if (!attachObject(childp)) + { + mPendingAttachment.push_back(childp); + } } else { @@ -5546,7 +5549,21 @@ LLViewerJointAttachment* LLVOAvatar::getTargetAttachmentPoint(LLViewerObject* vi if (!attachment) { llwarns << "Object attachment point invalid: " << attachmentID << llendl; - attachment = get_if_there(mAttachmentPoints, 1, (LLViewerJointAttachment*)NULL); // Arbitrary using 1 (chest) + + for (int i = 0; i < 15 && !attachment; i++) + { + attachment = get_if_there(mAttachmentPoints, i, (LLViewerJointAttachment*)NULL); // Arbitrary using 1 (chest) + + if (attachment) + { + llwarns << "Object attachment point falling back to : " << i << llendl; + } + } + + if (!attachment) + { + llerrs << "Could not find any object attachment point for: " << attachmentID << llendl; + } } return attachment; @@ -5619,7 +5636,10 @@ void LLVOAvatar::lazyAttach() { if (mPendingAttachment[i]->mDrawable) { - attachObject(mPendingAttachment[i]); + if (!attachObject(mPendingAttachment[i])) + { + still_pending.push_back(mPendingAttachment[i]); + } } else { -- cgit v1.2.3 From bcff609fb839dc576c7e4f7529e1c751847ffd32 Mon Sep 17 00:00:00 2001 From: JJ Linden Date: Mon, 16 Sep 2013 12:58:40 -0700 Subject: changes for additional packages to be packaged from the same build. see BuildParams for example environment variables used to specify the packages and their channels and sourceids. also updated mac packages to use a larger virtual drive and auto-open on download --- BuildParams | 7 ++- build.sh | 28 ++++++++-- indra/lib/python/indra/util/llmanifest.py | 87 ++++++++++++++++++++++++++++++- indra/newview/viewer_manifest.py | 41 ++++++++------- 4 files changed, 135 insertions(+), 28 deletions(-) diff --git a/BuildParams b/BuildParams index 327530934d..63812d33c1 100755 --- a/BuildParams +++ b/BuildParams @@ -26,8 +26,13 @@ codeticket_since = 3.3.0-release Linux.gcc_version = /usr/bin/gcc-4.6 Linux.cxx_version = /usr/bin/g++-4.6 -# Setup default sourceid so Windows can pick up the TeamCity override +# Setup default packaging parameters. sourceid = "" +additional_packages = "Amazon Desura" +Amazon_sourceid = "1207v_Amazon" +Amazon_viewer_channel_suffix = " Amazon" +Desura_sourceid = "1208_desura" +Desura_viewer_channel_suffix = " Desura" ################################################################ #### Examples of how to set the viewer_channel #### diff --git a/build.sh b/build.sh index a78f368e47..4875ef39f7 100755 --- a/build.sh +++ b/build.sh @@ -38,22 +38,22 @@ build_dir_CYGWIN() installer_Darwin() { - ls -1td "$(build_dir_Darwin ${last_built_variant:-Release})/newview/"*.dmg 2>/dev/null | sed 1q + ls -1tr "$(build_dir_Darwin ${last_built_variant:-Release})/newview/"*"$additional_package_name"*.dmg 2>/dev/null | sed 1q } installer_Linux() { - ls -1td "$(build_dir_Linux ${last_built_variant:-Release})/newview/"*.tar.bz2 2>/dev/null | sed 1q + ls -1tr "$(build_dir_Linux ${last_built_variant:-Release})/newview/"*"$additional_package_name"*.tar.bz2 2>/dev/null | grep -v symbols | sed 1q } installer_CYGWIN() { v=${last_built_variant:-Release} d=$(build_dir_CYGWIN $v) - if [ -r "$d/newview/$v/touched.bat" ] + if [ -r "$d/newview/$additional_package_name$v/touched.bat" ] then - p=$(sed 's:.*=::' "$d/newview/$v/touched.bat") - echo "$d/newview/$v/$p" + p=$(sed 's:.*=::' "$d/newview/$additional_package_name$v/touched.bat") + echo "$d/newview/$additional_package_name$v/$p" fi } @@ -355,10 +355,28 @@ then # Coverity doesn't package, so it's ok, anything else is fail succeeded=$build_coverity else + # Upload base package. upload_item installer "$package" binary/octet-stream upload_item quicklink "$package" binary/octet-stream [ -f $build_dir/summary.json ] && upload_item installer $build_dir/summary.json text/plain + # Upload additional packages. + for package_id in $additional_packages + do + case $arch in + CYGWIN) export additional_package_name="$package_id/" ;; + *) export additional_package_name=$package_id ;; + esac + package=$(installer_$arch) + if [ x"$package" != x ] + then + upload_item installer "$package" binary/octet-stream + else + record_failure "Failed to upload $package_id package." + fi + done + export additional_package_name="" + case "$last_built_variant" in Release) # Upload crash reporter files diff --git a/indra/lib/python/indra/util/llmanifest.py b/indra/lib/python/indra/util/llmanifest.py index 54049b5545..52b4acbc94 100755 --- a/indra/lib/python/indra/util/llmanifest.py +++ b/indra/lib/python/indra/util/llmanifest.py @@ -224,15 +224,98 @@ def main(): for opt in args: print "Option:", opt, "=", args[opt] + # pass in sourceid as an argument now instead of an environment variable + try: + args['sourceid'] = os.environ["sourceid"] + except KeyError: + args['sourceid'] = "" + + # Build base package. + touch = args.get('touch') + if touch: + print 'Creating base package' + args['package_id'] = "" # base package has no package ID wm = LLManifest.for_platform(args['platform'], args.get('arch'))(args) wm.do(*args['actions']) - + # Store package file for later if making touched file. + base_package_file = "" + if touch: + print 'Created base package ', wm.package_file + base_package_file = "" + wm.package_file + + # handle multiple packages if set + try: + additional_packages = os.environ["additional_packages"] + except KeyError: + additional_packages = "" + if additional_packages: + # Determine destination prefix / suffix for additional packages. + base_dest_postfix = args['dest'] + base_dest_prefix = "" + base_dest_parts = args['dest'].split(os.sep) + if len(base_dest_parts) > 1: + base_dest_postfix = base_dest_parts[len(base_dest_parts) - 1] + base_dest_prefix = base_dest_parts[0] + i = 1 + while i < len(base_dest_parts) - 1: + base_dest_prefix = base_dest_prefix + os.sep + base_dest_parts[i] + i = i + 1 + # Determine touched prefix / suffix for additional packages. + base_touch_postfix = "" + base_touch_prefix = "" + if touch: + base_touch_postfix = touch + base_touch_parts = touch.split('/') + if "arwin" in args['platform']: + if len(base_touch_parts) > 1: + base_touch_postfix = base_touch_parts[len(base_touch_parts) - 1] + base_touch_prefix = base_touch_parts[0] + i = 1 + while i < len(base_touch_parts) - 1: + base_touch_prefix = base_touch_prefix + '/' + base_touch_parts[i] + i = i + 1 + else: + if len(base_touch_parts) > 2: + base_touch_postfix = base_touch_parts[len(base_touch_parts) - 2] + '/' + base_touch_parts[len(base_touch_parts) - 1] + base_touch_prefix = base_touch_parts[0] + i = 1 + while i < len(base_touch_parts) - 2: + base_touch_prefix = base_touch_prefix + '/' + base_touch_parts[i] + i = i + 1 + # Store base channel name. + base_channel_name = args['channel'] + # Build each additional package. + package_id_list = additional_packages.split(" ") + for package_id in package_id_list: + try: + args['package_id'] = package_id + args['channel'] = base_channel_name + os.environ[package_id + "_viewer_channel_suffix"] + if package_id + "_sourceid" in os.environ: + args['sourceid'] = os.environ[package_id + "_sourceid"] + else: + args['sourceid'] = "" + args['dest'] = base_dest_prefix + os.sep + package_id + os.sep + base_dest_postfix + except KeyError: + sys.stderr.write("Failed to create package for package_id: %s" % package_id) + sys.stderr.flush() + continue + if touch: + print 'Creating additional package for ', package_id, ' in ', args['dest'] + wm = LLManifest.for_platform(args['platform'], args.get('arch'))(args) + wm.do(*args['actions']) + if touch: + print 'Created additional package ', wm.package_file, ' for ', package_id + faketouch = base_touch_prefix + '/' + package_id + '/' + base_touch_postfix + fp = open(faketouch, 'w') + fp.write('set package_file=%s\n' % wm.package_file) + fp.close() + # Write out the package file in this format, so that it can easily be called # and used in a .bat file - yeah, it sucks, but this is the simplest... touch = args.get('touch') if touch: fp = open(touch, 'w') - fp.write('set package_file=%s\n' % wm.package_file) + fp.write('set package_file=%s\n' % base_package_file) fp.close() print 'touched', touch return 0 diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 19863dd845..effe3994a3 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -106,24 +106,18 @@ class ViewerManifest(LLManifest): # CHOP-955: If we have "sourceid" in the build process # environment, generate it into settings_install.xml. - try: - sourceid = os.environ["sourceid"] - except KeyError: - # no sourceid, no settings_install.xml file - pass - else: - if sourceid: - # Single-entry subset of the LLSD content of settings.xml - content = dict(sourceid=dict(Comment='Identify referring agency to Linden web servers', - Persist=1, - Type='String', - Value=sourceid)) - # put_in_file(src=) need not be an actual pathname; it - # only needs to be non-empty - settings_install = self.put_in_file(llsd.format_pretty_xml(content), - "settings_install.xml", - src="environment") - print "Put sourceid '%s' in %s" % (sourceid, settings_install) + if self.args['sourceid']: + # Single-entry subset of the LLSD content of settings.xml + content = dict(sourceid=dict(Comment='Identify referring agency to Linden web servers', + Persist=1, + Type='String', + Value=self.args['sourceid'])) + # put_in_file(src=) need not be an actual pathname; it + # only needs to be non-empty + settings_install = self.put_in_file(llsd.format_pretty_xml(content), + "settings_install.xml", + src="environment") + print "Put sourceid '%s' in %s" % (self.args['sourceid'], settings_install) self.end_prefix("app_settings") @@ -611,6 +605,9 @@ class WindowsManifest(ViewerManifest): installer_file = self.args['installer_name'] else: installer_file = installer_file % substitution_strings + if len(self.args['package_id']) > 0: + installer_file = installer_file.replace(self.args['package_id'], "") + installer_file = installer_file.replace(".exe", self.args['package_id'] + ".exe") substitution_strings['installer_file'] = installer_file tempfile = "secondlife_setup_tmp.nsi" @@ -838,7 +835,9 @@ class DarwinManifest(ViewerManifest): volname="Second Life Installer" # DO NOT CHANGE without understanding comment above - if self.default_channel(): + if len(self.args['package_id']) > 0: + imagename = imagename + self.args['package_id'] + elif self.default_channel(): if not self.default_grid(): # beta case imagename = imagename + '_' + self.args['grid'].upper() @@ -851,7 +850,7 @@ class DarwinManifest(ViewerManifest): # make sure we don't have stale files laying about self.remove(sparsename, finalname) - self.run_command('hdiutil create %(sparse)r -volname %(vol)r -fs HFS+ -type SPARSE -megabytes 700 -layout SPUD' % { + self.run_command('hdiutil create %(sparse)r -volname %(vol)r -fs HFS+ -type SPARSE -megabytes 1000 -layout SPUD' % { 'sparse':sparsename, 'vol':volname}) @@ -926,6 +925,7 @@ class DarwinManifest(ViewerManifest): print "Converting temp disk image to final disk image" self.run_command('hdiutil convert %(sparse)r -format UDZO -imagekey zlib-level=9 -o %(final)r' % {'sparse':sparsename, 'final':finalname}) + self.run_command('hdiutil internet-enable -yes %(final)r' % {'final':finalname}) # get rid of the temp file self.package_file = finalname self.remove(sparsename) @@ -998,6 +998,7 @@ class LinuxManifest(ViewerManifest): installer_name += '_' + self.args['grid'].upper() else: installer_name += '_' + self.channel_oneword().upper() + installer_name = installer_name + self.args['package_id'] self.strip_binaries() -- cgit v1.2.3 From ea9af8b873c9c088ff640a556f14f3a5989f9547 Mon Sep 17 00:00:00 2001 From: dmitrykproductengine Date: Tue, 17 Sep 2013 11:33:17 +0300 Subject: MAINT-3142 Hover over highlighting broken in Second Life 3.6.6 (280797) FIXED --- indra/newview/skins/default/xui/en/panel_navigation_bar.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml index 3edeb9aa36..c7edba21f8 100755 --- a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml @@ -87,6 +87,7 @@ direction="down" height="23" image_overlay="Arrow_Left_Off" + image_hover_unselected="PushButton_Over" image_bottom_pad="1" layout="topleft" left="10" @@ -99,6 +100,7 @@ direction="down" height="23" image_overlay="Arrow_Right_Off" + image_hover_unselected="PushButton_Over" image_bottom_pad="1" layout="topleft" left_pad="0" @@ -111,6 +113,7 @@ height="23" image_bottom_pad="1" image_overlay="Home_Off" + image_hover_unselected="PushButton_Over" layout="topleft" left_pad="7" name="home_btn" -- cgit v1.2.3 From 8fa463113c19682a64988d2f8c527ef5e5dd156c Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Tue, 17 Sep 2013 12:20:28 +0300 Subject: MAINT-3119 FIXED Select auto-completed part using cursor position --- indra/llui/lltexteditor.cpp | 8 ++++++++ indra/llui/lltexteditor.h | 2 ++ indra/newview/llfloaterimnearbychat.cpp | 4 ++-- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index 0c16e06109..764f0b8b36 100755 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -666,6 +666,14 @@ void LLTextEditor::selectAll() updatePrimary(); } +void LLTextEditor::selectByCursorPosition(S32 prev_cursor_pos, S32 next_cursor_pos) +{ + setCursorPos(prev_cursor_pos); + startSelection(); + setCursorPos(next_cursor_pos); + endSelection(); +} + BOOL LLTextEditor::handleMouseDown(S32 x, S32 y, MASK mask) { BOOL handled = FALSE; diff --git a/indra/llui/lltexteditor.h b/indra/llui/lltexteditor.h index 32b543ec0e..d3b7bc0eb7 100755 --- a/indra/llui/lltexteditor.h +++ b/indra/llui/lltexteditor.h @@ -144,6 +144,8 @@ public: virtual void selectAll(); virtual BOOL canSelectAll() const; + void selectByCursorPosition(S32 prev_cursor_pos, S32 next_cursor_pos); + virtual bool canLoadOrSaveToFile(); void selectNext(const std::string& search_text_in, BOOL case_insensitive, BOOL wrap = TRUE); diff --git a/indra/newview/llfloaterimnearbychat.cpp b/indra/newview/llfloaterimnearbychat.cpp index 86e64c25e3..323e84751f 100755 --- a/indra/newview/llfloaterimnearbychat.cpp +++ b/indra/newview/llfloaterimnearbychat.cpp @@ -494,11 +494,11 @@ void LLFloaterIMNearbyChat::onChatBoxKeystroke() if (!rest_of_match.empty()) { mInputEditor->setText(utf8_trigger + rest_of_match); // keep original capitalization for user-entered part - // Select to end of line, starting from the character // after the last one the user typed. - mInputEditor->selectNext(rest_of_match, false); + mInputEditor->selectByCursorPosition(utf8_out_str.size()-rest_of_match.size(),utf8_out_str.size()); } + } else if (matchChatTypeTrigger(utf8_trigger, &utf8_out_str)) { -- cgit v1.2.3 From be84aefc40719dacb9ab2c0ace9a2a706d768ffc Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Wed, 18 Sep 2013 10:42:43 -0700 Subject: add experimental packaging --- BuildParams | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/BuildParams b/BuildParams index 63812d33c1..0d7a0b5a51 100755 --- a/BuildParams +++ b/BuildParams @@ -26,14 +26,6 @@ codeticket_since = 3.3.0-release Linux.gcc_version = /usr/bin/gcc-4.6 Linux.cxx_version = /usr/bin/g++-4.6 -# Setup default packaging parameters. -sourceid = "" -additional_packages = "Amazon Desura" -Amazon_sourceid = "1207v_Amazon" -Amazon_viewer_channel_suffix = " Amazon" -Desura_sourceid = "1208_desura" -Desura_viewer_channel_suffix = " Desura" - ################################################################ #### Examples of how to set the viewer_channel #### # @@ -54,6 +46,18 @@ Desura_viewer_channel_suffix = " Desura" ################################################################ viewer_channel = "Second Life Test" +# Setup default packaging parameters. +sourceid = "" +additional_packages = "Amazon Desura B C" +Amazon_sourceid = "1207v_Amazon" +Amazon_viewer_channel_suffix = " Amazon" +Desura_sourceid = "1208_desura" +Desura_viewer_channel_suffix = " Desura" +B_sourceid = "1301_B" +B_viewer_channel_suffix = " B" +C_sourceid = "1302_C" +C_viewer_channel_suffix = " C" + # Report changes since... viewer-development.show_changes_since = last_sprint -- cgit v1.2.3 From dd4beb695a9c800b37b7c9a19d3ac3f4456012f5 Mon Sep 17 00:00:00 2001 From: Graham Linden Date: Fri, 20 Sep 2013 13:09:31 -0700 Subject: STORM-1950 more suggestions from TankMasker Finesmith about not including SandyBridge Intel GPUs in driver nagging and updating the expected GL version for 500 series or better nV to get 327.23 driver nagging --- indra/newview/gpu_table.txt | 88 ++++----- indra/newview/tests/gpus_results.txt | 348 +++++++++++++++++------------------ 2 files changed, 218 insertions(+), 218 deletions(-) diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt index 0513c60ba8..68cf20aac2 100755 --- a/indra/newview/gpu_table.txt +++ b/indra/newview/gpu_table.txt @@ -316,9 +316,9 @@ Intel Brookdale .*Intel.*Brookdale.* 0 0 1 1.3 Intel Cantiga .*Intel.*Cantiga.* 0 0 1 2 Intel Eaglelake .*Intel.*Eaglelake.* 1 1 1 2 Intel Graphics Media HD .*Intel.*Graphics Media.*HD.* 1 1 1 2.1 -Intel HD Graphics 2500 .*Intel.*HD Graphics 25.* 2 1 0 4.2 -Intel HD Graphics 2000 .*Intel.*HD Graphics 2.* 2 1 0 4.2 -Intel HD Graphics 3000 .*Intel.*HD Graphics 3.* 3 1 1 4.2 +Intel HD Graphics 2500 .*Intel.*HD Graphics 25.* 2 1 0 3.1 +Intel HD Graphics 2000 .*Intel.*HD Graphics 2.* 2 1 0 3.1 +Intel HD Graphics 3000 .*Intel.*HD Graphics 3.* 3 1 1 3.1 Intel HD Graphics 4200 .*Intel.*HD Graphics 42.* 3 1 0 4.2 Intel HD Graphics 4400 .*Intel.*HD Graphics 44.* 3 1 0 4.2 Intel HD Graphics 4600 .*Intel.*HD Graphics 46.* 3 1 0 4.2 @@ -421,30 +421,30 @@ NVIDIA GT 450M .*NVIDIA .*GT *45[0-9]M.* 3 1 0 0 NVIDIA GTX 460M .*NVIDIA .*GTX *46[0-9]M.* 4 1 1 4.2 NVIDIA GTX 470M .*NVIDIA .*GTX *47[0-9]M.* 3 1 0 4.2 NVIDIA GTX 480M .*NVIDIA .*GTX *48[0-9]M.* 3 1 1 4.2 -NVIDIA GT 520M .*NVIDIA .*GT *52[0-9]M.* 3 1 1 4.2 -NVIDIA GT 530M .*NVIDIA .*GT *53[0-9]M.* 3 1 1 4.2 -NVIDIA GT 540M .*NVIDIA .*GT *54[0-9]M.* 3 1 1 4.2 -NVIDIA GT 550M .*NVIDIA .*GT *55[0-9]M.* 3 1 1 4.2 -NVIDIA GTX 560M .*NVIDIA .*GTX *56[0-9]M.* 3 1 0 4.2 -NVIDIA GTX 570M .*NVIDIA .*GTX *57[0-9]M.* 5 1 0 4.2 -NVIDIA GTX 580M .*NVIDIA .*GTX *58[0-9]M.* 5 1 1 4.2 -NVIDIA 610M .*NVIDIA.* 61[0-9]M.* 3 1 1 4.2 -NVIDIA GT 620M .*NVIDIA .*GT *62[0-9]M.* 3 1 0 4.2 -NVIDIA GT 630M .*NVIDIA .*GT *63[0-9]M.* 3 1 0 4.2 -NVIDIA GT 640M .*NVIDIA .*GT *64[0-9]M.* 3 1 0 4.2 -NVIDIA GT 650M .*NVIDIA .*GT *65[0-9]M.* 3 1 0 4.2 -NVIDIA GTX 660M .*NVIDIA .*GTX *66[0-9]M.* 5 1 0 4.2 -NVIDIA GTX 670M .*NVIDIA .*GTX *67[0-9]M.* 5 1 1 4.2 -NVIDIA GTX 680M .*NVIDIA .*GTX *68[0-9]M.* 5 1 0 4.2 -NVIDIA GTX 690M .*NVIDIA .*GTX *69[0-9]M.* 5 1 0 4.2 -NVIDIA 710M .*NVIDIA.* 71[0-9]M.* 3 1 0 4.2 -NVIDIA GT 720M .*NVIDIA .*GT *72[0-9]M.* 3 1 0 4.2 -NVIDIA GT 730M .*NVIDIA .*GT *73[0-9]M.* 3 1 0 4.2 -NVIDIA GT 740M .*NVIDIA .*GT *74[0-9]M.* 3 1 0 4.2 -NVIDIA GT 750M .*NVIDIA .*GT *75[0-9]M.* 3 1 0 4.2 -NVIDIA GTX 760M .*NVIDIA .*GTX *76[0-9]M.* 5 1 0 4.2 -NVIDIA GTX 770M .*NVIDIA .*GTX *77[0-9]M.* 5 1 0 4.2 -NVIDIA GTX 780M .*NVIDIA .*GTX *78[0-9]M.* 5 1 0 4.2 +NVIDIA GT 520M .*NVIDIA .*GT *52[0-9]M.* 3 1 1 4.3 +NVIDIA GT 530M .*NVIDIA .*GT *53[0-9]M.* 3 1 1 4.3 +NVIDIA GT 540M .*NVIDIA .*GT *54[0-9]M.* 3 1 1 4.3 +NVIDIA GT 550M .*NVIDIA .*GT *55[0-9]M.* 3 1 1 4.3 +NVIDIA GTX 560M .*NVIDIA .*GTX *56[0-9]M.* 3 1 0 4.3 +NVIDIA GTX 570M .*NVIDIA .*GTX *57[0-9]M.* 5 1 0 4.3 +NVIDIA GTX 580M .*NVIDIA .*GTX *58[0-9]M.* 5 1 1 4.3 +NVIDIA 610M .*NVIDIA.* 61[0-9]M.* 3 1 1 4.3 +NVIDIA GT 620M .*NVIDIA .*GT *62[0-9]M.* 3 1 0 4.3 +NVIDIA GT 630M .*NVIDIA .*GT *63[0-9]M.* 3 1 0 4.3 +NVIDIA GT 640M .*NVIDIA .*GT *64[0-9]M.* 3 1 0 4.3 +NVIDIA GT 650M .*NVIDIA .*GT *65[0-9]M.* 3 1 0 4.3 +NVIDIA GTX 660M .*NVIDIA .*GTX *66[0-9]M.* 5 1 0 4.3 +NVIDIA GTX 670M .*NVIDIA .*GTX *67[0-9]M.* 5 1 1 4.3 +NVIDIA GTX 680M .*NVIDIA .*GTX *68[0-9]M.* 5 1 0 4.3 +NVIDIA GTX 690M .*NVIDIA .*GTX *69[0-9]M.* 5 1 0 4.3 +NVIDIA 710M .*NVIDIA.* 71[0-9]M.* 3 1 0 4.3 +NVIDIA GT 720M .*NVIDIA .*GT *72[0-9]M.* 3 1 0 4.3 +NVIDIA GT 730M .*NVIDIA .*GT *73[0-9]M.* 3 1 0 4.3 +NVIDIA GT 740M .*NVIDIA .*GT *74[0-9]M.* 3 1 0 4.3 +NVIDIA GT 750M .*NVIDIA .*GT *75[0-9]M.* 3 1 0 4.3 +NVIDIA GTX 760M .*NVIDIA .*GTX *76[0-9]M.* 5 1 0 4.3 +NVIDIA GTX 770M .*NVIDIA .*GTX *77[0-9]M.* 5 1 0 4.3 +NVIDIA GTX 780M .*NVIDIA .*GTX *78[0-9]M.* 5 1 0 4.3 NVIDIA G100 .*NVIDIA .*G10.* 3 1 1 4.2 NVIDIA GT 120 .*NVIDIA .*GT 12.* 2 1 0 3.3 NVIDIA GT 130 .*NVIDIA .*GT 13.* 2 1 0 3.3 @@ -486,25 +486,25 @@ NVIDIA GTX 470 .*NVIDIA .*GTX *47.* 5 1 1 4.2 NVIDIA GTX 480 .*NVIDIA .*GTX *48.* 5 1 1 4.2 NVIDIA 505 .*NVIDIA .*505[^0]*.* 3 1 0 0 NVIDIA 510 .*NVIDIA .*510[^0]*.* 3 1 0 0 -NVIDIA GT 520 .*NVIDIA .*GT *52.* 3 1 1 4.2 -NVIDIA GT 530 .*NVIDIA .*GT *53.* 3 1 1 4.2 -NVIDIA GT 540 .*NVIDIA .*GT *54.* 3 1 1 4.2 -NVIDIA GT 550 .*NVIDIA .*GT *55.* 3 1 1 4.2 +NVIDIA GT 520 .*NVIDIA .*GT *52.* 3 1 1 4.3 +NVIDIA GT 530 .*NVIDIA .*GT *53.* 3 1 1 4.3 +NVIDIA GT 540 .*NVIDIA .*GT *54.* 3 1 1 4.3 +NVIDIA GT 550 .*NVIDIA .*GT *55.* 3 1 1 4.3 NVIDIA GTX 550 .*NVIDIA .*GTX *55.* 5 1 1 4.3 -NVIDIA GTX 560 .*NVIDIA .*GTX *56.* 5 1 1 4.2 -NVIDIA GTX 570 .*NVIDIA .*GTX *57.* 5 1 1 4.2 +NVIDIA GTX 560 .*NVIDIA .*GTX *56.* 5 1 1 4.3 +NVIDIA GTX 570 .*NVIDIA .*GTX *57.* 5 1 1 4.3 NVIDIA GTX 580 .*NVIDIA .*GTX *58.* 5 1 1 4.3 -NVIDIA GTX 590 .*NVIDIA .*GTX *59.* 5 1 1 4.2 -NVIDIA 605 .*NVIDIA .*605[^0]*.* 3 1 1 4.2 -NVIDIA GT 61x .*NVIDIA .*GT 61.* 3 1 1 4.2 -NVIDIA GT 62x .*NVIDIA .*GT 62.* 3 1 0 4.2 -NVIDIA GT 63x .*NVIDIA .*GT 63.* 3 1 0 4.2 -NVIDIA GT 64x .*NVIDIA .*GT 64.* 3 1 0 4.2 -NVIDIA GT 65x .*NVIDIA .*GT 65.* 3 1 1 4.2 -NVIDIA GTX 64x .*NVIDIA .*GTX 64.* 3 1 1 4.2 -NVIDIA GTX 65x .*NVIDIA .*GTX 65.* 3 1 1 4.2 -NVIDIA GTX 66x .*NVIDIA .*GTX 66.* 5 1 0 4.2 -NVIDIA GTX 67x .*NVIDIA .*GTX 67.* 5 1 1 4.2 +NVIDIA GTX 590 .*NVIDIA .*GTX *59.* 5 1 1 4.3 +NVIDIA 605 .*NVIDIA .*605[^0]*.* 3 1 1 4.3 +NVIDIA GT 61x .*NVIDIA .*GT 61.* 3 1 1 4.3 +NVIDIA GT 62x .*NVIDIA .*GT 62.* 3 1 0 4.3 +NVIDIA GT 63x .*NVIDIA .*GT 63.* 3 1 0 4.3 +NVIDIA GT 64x .*NVIDIA .*GT 64.* 3 1 0 4.3 +NVIDIA GT 65x .*NVIDIA .*GT 65.* 3 1 1 4.3 +NVIDIA GTX 64x .*NVIDIA .*GTX 64.* 3 1 1 4.3 +NVIDIA GTX 65x .*NVIDIA .*GTX 65.* 3 1 1 4.3 +NVIDIA GTX 66x .*NVIDIA .*GTX 66.* 5 1 0 4.3 +NVIDIA GTX 67x .*NVIDIA .*GTX 67.* 5 1 1 4.3 NVIDIA GTX 68x .*NVIDIA .*GTX 68.* 5 1 1 4.3 NVIDIA GTX 69x .*NVIDIA .*GTX 69.* 5 1 1 4.3 NVIDIA GT 71x .*NVIDIA .*GT *71.* 3 1 0 4.3 diff --git a/indra/newview/tests/gpus_results.txt b/indra/newview/tests/gpus_results.txt index 0d126191f3..6d84e50e19 100755 --- a/indra/newview/tests/gpus_results.txt +++ b/indra/newview/tests/gpus_results.txt @@ -1394,12 +1394,12 @@ Intel G41 Intel G45 supported 1 1 2.1 Intel G45 Intel Graphics Media HD supported 1 1 2.1 Intel Graphics Media HD Intel HD Graphics supported 2 1 4 Intel HD Graphics -Intel HD Graphics 2000 supported 2 0 4.2 Intel HD Graphics 2000 -Intel HD Graphics 3000 supported 3 1 4.2 Intel HD Graphics 3000 +Intel HD Graphics 2000 supported 2 0 3.1 Intel HD Graphics 2000 +Intel HD Graphics 3000 supported 3 1 3.1 Intel HD Graphics 3000 Intel HD Graphics 4000 supported 3 1 4.2 Intel HD Graphics 4000 Intel Inc. Intel GMA 950 OpenGL Engine supported 0 1 1.4 Intel 950 Intel Inc. Intel GMA X3100 OpenGL Engine supported 1 1 2.1 Intel X3100 -Intel Inc. Intel HD Graphics 3000 OpenGL Engine supported 3 1 4.2 Intel HD Graphics 3000 +Intel Inc. Intel HD Graphics 3000 OpenGL Engine supported 3 1 3.1 Intel HD Graphics 3000 Intel Inc. Intel HD Graphics 4000 OpenGL Engine supported 3 1 4.2 Intel HD Graphics 4000 Intel Inc. Intel HD Graphics 5000 OpenGL Engine supported 4 0 4 Intel HD Graphics 5000 Intel Inc. Intel HD Graphics OpenGL Engine supported 2 1 4 Intel HD Graphics @@ -1432,9 +1432,9 @@ Intel Intel(R) G45/G43/G41 Express Chipset Intel Intel(R) Graphics Media Accelerator HD supported 1 1 2.1 Intel Graphics Media HD Intel Intel(R) HD Graphics supported 2 1 4 Intel HD Graphics Intel Intel(R) HD Graphics 100 supported 2 1 4 Intel HD Graphics -Intel Intel(R) HD Graphics 2000 supported 2 0 4.2 Intel HD Graphics 2000 -Intel Intel(R) HD Graphics 2500 supported 2 0 4.2 Intel HD Graphics 2500 -Intel Intel(R) HD Graphics 3000 supported 3 1 4.2 Intel HD Graphics 3000 +Intel Intel(R) HD Graphics 2000 supported 2 0 3.1 Intel HD Graphics 2000 +Intel Intel(R) HD Graphics 2500 supported 2 0 3.1 Intel HD Graphics 2500 +Intel Intel(R) HD Graphics 3000 supported 3 1 3.1 Intel HD Graphics 3000 Intel Intel(R) HD Graphics 4000 supported 3 1 4.2 Intel HD Graphics 4000 Intel Intel(R) HD Graphics 4400 supported 3 0 4.2 Intel HD Graphics 4400 Intel Intel(R) HD Graphics 4600 supported 3 0 4.2 Intel HD Graphics 4600 @@ -1509,7 +1509,7 @@ NVIDIA 320M NVIDIA 405 supported 3 0 3.3 NVIDIA 405 NVIDIA 410 supported 3 0 3.3 NVIDIA 410 NVIDIA 510 supported 3 0 0 NVIDIA 510 -NVIDIA 610M supported 3 1 4.2 NVIDIA 610M +NVIDIA 610M supported 3 1 4.3 NVIDIA 610M NVIDIA Corporation /PCI/SSE2 NO MATCH NVIDIA Corporation 3D-Analyze v2.3 - http://www.tommti-systems.com unsupported 0 0 0 ATI 3D-Analyze NVIDIA Corporation C51/PCI/SSE2/3DNOW! supported 0 1 2 NVIDIA C51 @@ -1555,9 +1555,9 @@ NVIDIA Corporation GeForce 410M/PCIe/SSE2 NVIDIA Corporation GeForce 505/PCIe/SSE2 supported 3 0 0 NVIDIA 505 NVIDIA Corporation GeForce 510/PCI/SSE2 supported 3 0 0 NVIDIA 510 NVIDIA Corporation GeForce 510/PCIe/SSE2 supported 3 0 0 NVIDIA 510 -NVIDIA Corporation GeForce 605/PCI/SSE2 supported 3 1 4.2 NVIDIA 605 -NVIDIA Corporation GeForce 605/PCIe/SSE2 supported 3 1 4.2 NVIDIA 605 -NVIDIA Corporation GeForce 605/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA 605 +NVIDIA Corporation GeForce 605/PCI/SSE2 supported 3 1 4.3 NVIDIA 605 +NVIDIA Corporation GeForce 605/PCIe/SSE2 supported 3 1 4.3 NVIDIA 605 +NVIDIA Corporation GeForce 605/PCIe/SSE2/3DNOW! supported 3 1 4.3 NVIDIA 605 NVIDIA Corporation GeForce 610/PCIe/SSE2 supported 3 1 4.2 NVIDIA GeForce 6100 NVIDIA Corporation GeForce 6100 nForce 400/PCI/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 NVIDIA Corporation GeForce 6100 nForce 400/integrated/SSE2 supported 3 1 4.2 NVIDIA GeForce 6100 @@ -1572,8 +1572,8 @@ NVIDIA Corporation GeForce 6100/PCI/SSE2 NVIDIA Corporation GeForce 6100/PCI/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 NVIDIA Corporation GeForce 6100/integrated/SSE2 supported 3 1 4.2 NVIDIA GeForce 6100 NVIDIA Corporation GeForce 6100/integrated/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 -NVIDIA Corporation GeForce 610M/PCI/SSE2 supported 3 1 4.2 NVIDIA 610M -NVIDIA Corporation GeForce 610M/PCIe/SSE2 supported 3 1 4.2 NVIDIA 610M +NVIDIA Corporation GeForce 610M/PCI/SSE2 supported 3 1 4.3 NVIDIA 610M +NVIDIA Corporation GeForce 610M/PCIe/SSE2 supported 3 1 4.3 NVIDIA 610M NVIDIA Corporation GeForce 615/PCIe/SSE2 supported 3 1 4.2 NVIDIA GeForce 6100 NVIDIA Corporation GeForce 6150 LE/PCI/SSE2 supported 3 1 4.2 NVIDIA GeForce 6100 NVIDIA Corporation GeForce 6150 LE/PCI/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GeForce 6100 @@ -1662,8 +1662,8 @@ NVIDIA Corporation GeForce 6800/AGP/SSE2/3DNOW! NVIDIA Corporation GeForce 6800/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 6800 NVIDIA Corporation GeForce 6800/PCIe/SSE2 supported 1 1 2.1 NVIDIA GeForce 6800 NVIDIA Corporation GeForce 6800/PCIe/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 6800 -NVIDIA Corporation GeForce 7000M / nForce 610M/PCI/SSE2 supported 3 1 4.2 NVIDIA 610M -NVIDIA Corporation GeForce 7000M / nForce 610M/PCI/SSE2/3DNOW! supported 3 1 4.2 NVIDIA 610M +NVIDIA Corporation GeForce 7000M / nForce 610M/PCI/SSE2 supported 3 1 4.3 NVIDIA 610M +NVIDIA Corporation GeForce 7000M / nForce 610M/PCI/SSE2/3DNOW! supported 3 1 4.3 NVIDIA 610M NVIDIA Corporation GeForce 7025 / NVIDIA nForce 630a/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 7000 NVIDIA Corporation GeForce 7025 / NVIDIA nForce 630a/PCI/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 7000 NVIDIA Corporation GeForce 7025 / nForce 630a/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 7000 @@ -1693,7 +1693,7 @@ NVIDIA Corporation GeForce 7100 GS/PCI/SSE2/3DNOW! NVIDIA Corporation GeForce 7100 GS/PCIe/SSE2 supported 1 1 2.1 NVIDIA GeForce 7100 NVIDIA Corporation GeForce 7100 GS/PCIe/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 7100 NVIDIA Corporation GeForce 710A/PCIe/SSE2 supported 1 1 2.1 NVIDIA GeForce 7100 -NVIDIA Corporation GeForce 710M/PCIe/SSE2 supported 3 0 4.2 NVIDIA 710M +NVIDIA Corporation GeForce 710M/PCIe/SSE2 supported 3 0 4.3 NVIDIA 710M NVIDIA Corporation GeForce 7150 / nForce 630i/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 7100 NVIDIA Corporation GeForce 7150M / nForce 630M/PCI/SSE2 supported 1 1 2.1 NVIDIA GeForce 7100 NVIDIA Corporation GeForce 7150M / nForce 630M/PCI/SSE2/3DNOW! supported 1 1 2.1 NVIDIA GeForce 7100 @@ -2120,58 +2120,58 @@ NVIDIA Corporation GeForce GT 440/PCIe/SSE2 NVIDIA Corporation GeForce GT 440/PCIe/SSE2/3DNOW! supported 4 1 4.2 NVIDIA GT 440 NVIDIA Corporation GeForce GT 445M/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 440M NVIDIA Corporation GeForce GT 445M/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 440M -NVIDIA Corporation GeForce GT 520/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 520 -NVIDIA Corporation GeForce GT 520/PCI/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GT 520 -NVIDIA Corporation GeForce GT 520/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 520 -NVIDIA Corporation GeForce GT 520/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GT 520 -NVIDIA Corporation GeForce GT 520M/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 520M -NVIDIA Corporation GeForce GT 520M/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 520M -NVIDIA Corporation GeForce GT 520MX/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 520M -NVIDIA Corporation GeForce GT 520MX/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 520M -NVIDIA Corporation GeForce GT 525M/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 520M -NVIDIA Corporation GeForce GT 525M/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 520M -NVIDIA Corporation GeForce GT 530/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 530 -NVIDIA Corporation GeForce GT 530/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 530 -NVIDIA Corporation GeForce GT 530/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GT 530 -NVIDIA Corporation GeForce GT 540M/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 540M -NVIDIA Corporation GeForce GT 540M/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 540M -NVIDIA Corporation GeForce GT 545/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 540 -NVIDIA Corporation GeForce GT 545/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 540 -NVIDIA Corporation GeForce GT 545/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GT 540 -NVIDIA Corporation GeForce GT 550M/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 550M -NVIDIA Corporation GeForce GT 550M/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 550M -NVIDIA Corporation GeForce GT 555M/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 550M -NVIDIA Corporation GeForce GT 555M/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 550M -NVIDIA Corporation GeForce GT 610/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 61x -NVIDIA Corporation GeForce GT 610/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GT 61x -NVIDIA Corporation GeForce GT 620/PCI/SSE2 supported 3 0 4.2 NVIDIA GT 62x -NVIDIA Corporation GeForce GT 620/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 62x -NVIDIA Corporation GeForce GT 620/PCIe/SSE2/3DNOW! supported 3 0 4.2 NVIDIA GT 62x -NVIDIA Corporation GeForce GT 620M/PCI/SSE2 supported 3 0 4.2 NVIDIA GT 620M -NVIDIA Corporation GeForce GT 620M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 620M -NVIDIA Corporation GeForce GT 625/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 62x -NVIDIA Corporation GeForce GT 625M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 620M -NVIDIA Corporation GeForce GT 630/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 63x -NVIDIA Corporation GeForce GT 630/PCIe/SSE2/3DNOW! supported 3 0 4.2 NVIDIA GT 63x -NVIDIA Corporation GeForce GT 630M/PCI/SSE2 supported 3 0 4.2 NVIDIA GT 630M -NVIDIA Corporation GeForce GT 630M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 630M -NVIDIA Corporation GeForce GT 635M/PCI/SSE2 supported 3 0 4.2 NVIDIA GT 630M -NVIDIA Corporation GeForce GT 635M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 630M -NVIDIA Corporation GeForce GT 640/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 64x -NVIDIA Corporation GeForce GT 640/PCIe/SSE2/3DNOW! supported 3 0 4.2 NVIDIA GT 64x -NVIDIA Corporation GeForce GT 640M LE/PCI/SSE2 supported 3 0 4.2 NVIDIA GT 640M -NVIDIA Corporation GeForce GT 640M LE/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 640M -NVIDIA Corporation GeForce GT 640M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 640M -NVIDIA Corporation GeForce GT 645/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 64x -NVIDIA Corporation GeForce GT 645M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 640M -NVIDIA Corporation GeForce GT 650M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 650M -NVIDIA Corporation GeForce GT 720M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 720M -NVIDIA Corporation GeForce GT 730M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 730M -NVIDIA Corporation GeForce GT 735M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 730M -NVIDIA Corporation GeForce GT 740M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 740M -NVIDIA Corporation GeForce GT 750M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 750M -NVIDIA Corporation GeForce GT620M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 620M -NVIDIA Corporation GeForce GT625M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GT 620M +NVIDIA Corporation GeForce GT 520/PCI/SSE2 supported 3 1 4.3 NVIDIA GT 520 +NVIDIA Corporation GeForce GT 520/PCI/SSE2/3DNOW! supported 3 1 4.3 NVIDIA GT 520 +NVIDIA Corporation GeForce GT 520/PCIe/SSE2 supported 3 1 4.3 NVIDIA GT 520 +NVIDIA Corporation GeForce GT 520/PCIe/SSE2/3DNOW! supported 3 1 4.3 NVIDIA GT 520 +NVIDIA Corporation GeForce GT 520M/PCI/SSE2 supported 3 1 4.3 NVIDIA GT 520M +NVIDIA Corporation GeForce GT 520M/PCIe/SSE2 supported 3 1 4.3 NVIDIA GT 520M +NVIDIA Corporation GeForce GT 520MX/PCI/SSE2 supported 3 1 4.3 NVIDIA GT 520M +NVIDIA Corporation GeForce GT 520MX/PCIe/SSE2 supported 3 1 4.3 NVIDIA GT 520M +NVIDIA Corporation GeForce GT 525M/PCI/SSE2 supported 3 1 4.3 NVIDIA GT 520M +NVIDIA Corporation GeForce GT 525M/PCIe/SSE2 supported 3 1 4.3 NVIDIA GT 520M +NVIDIA Corporation GeForce GT 530/PCI/SSE2 supported 3 1 4.3 NVIDIA GT 530 +NVIDIA Corporation GeForce GT 530/PCIe/SSE2 supported 3 1 4.3 NVIDIA GT 530 +NVIDIA Corporation GeForce GT 530/PCIe/SSE2/3DNOW! supported 3 1 4.3 NVIDIA GT 530 +NVIDIA Corporation GeForce GT 540M/PCI/SSE2 supported 3 1 4.3 NVIDIA GT 540M +NVIDIA Corporation GeForce GT 540M/PCIe/SSE2 supported 3 1 4.3 NVIDIA GT 540M +NVIDIA Corporation GeForce GT 545/PCI/SSE2 supported 3 1 4.3 NVIDIA GT 540 +NVIDIA Corporation GeForce GT 545/PCIe/SSE2 supported 3 1 4.3 NVIDIA GT 540 +NVIDIA Corporation GeForce GT 545/PCIe/SSE2/3DNOW! supported 3 1 4.3 NVIDIA GT 540 +NVIDIA Corporation GeForce GT 550M/PCI/SSE2 supported 3 1 4.3 NVIDIA GT 550M +NVIDIA Corporation GeForce GT 550M/PCIe/SSE2 supported 3 1 4.3 NVIDIA GT 550M +NVIDIA Corporation GeForce GT 555M/PCI/SSE2 supported 3 1 4.3 NVIDIA GT 550M +NVIDIA Corporation GeForce GT 555M/PCIe/SSE2 supported 3 1 4.3 NVIDIA GT 550M +NVIDIA Corporation GeForce GT 610/PCIe/SSE2 supported 3 1 4.3 NVIDIA GT 61x +NVIDIA Corporation GeForce GT 610/PCIe/SSE2/3DNOW! supported 3 1 4.3 NVIDIA GT 61x +NVIDIA Corporation GeForce GT 620/PCI/SSE2 supported 3 0 4.3 NVIDIA GT 62x +NVIDIA Corporation GeForce GT 620/PCIe/SSE2 supported 3 0 4.3 NVIDIA GT 62x +NVIDIA Corporation GeForce GT 620/PCIe/SSE2/3DNOW! supported 3 0 4.3 NVIDIA GT 62x +NVIDIA Corporation GeForce GT 620M/PCI/SSE2 supported 3 0 4.3 NVIDIA GT 620M +NVIDIA Corporation GeForce GT 620M/PCIe/SSE2 supported 3 0 4.3 NVIDIA GT 620M +NVIDIA Corporation GeForce GT 625/PCIe/SSE2 supported 3 0 4.3 NVIDIA GT 62x +NVIDIA Corporation GeForce GT 625M/PCIe/SSE2 supported 3 0 4.3 NVIDIA GT 620M +NVIDIA Corporation GeForce GT 630/PCIe/SSE2 supported 3 0 4.3 NVIDIA GT 63x +NVIDIA Corporation GeForce GT 630/PCIe/SSE2/3DNOW! supported 3 0 4.3 NVIDIA GT 63x +NVIDIA Corporation GeForce GT 630M/PCI/SSE2 supported 3 0 4.3 NVIDIA GT 630M +NVIDIA Corporation GeForce GT 630M/PCIe/SSE2 supported 3 0 4.3 NVIDIA GT 630M +NVIDIA Corporation GeForce GT 635M/PCI/SSE2 supported 3 0 4.3 NVIDIA GT 630M +NVIDIA Corporation GeForce GT 635M/PCIe/SSE2 supported 3 0 4.3 NVIDIA GT 630M +NVIDIA Corporation GeForce GT 640/PCIe/SSE2 supported 3 0 4.3 NVIDIA GT 64x +NVIDIA Corporation GeForce GT 640/PCIe/SSE2/3DNOW! supported 3 0 4.3 NVIDIA GT 64x +NVIDIA Corporation GeForce GT 640M LE/PCI/SSE2 supported 3 0 4.3 NVIDIA GT 640M +NVIDIA Corporation GeForce GT 640M LE/PCIe/SSE2 supported 3 0 4.3 NVIDIA GT 640M +NVIDIA Corporation GeForce GT 640M/PCIe/SSE2 supported 3 0 4.3 NVIDIA GT 640M +NVIDIA Corporation GeForce GT 645/PCIe/SSE2 supported 3 0 4.3 NVIDIA GT 64x +NVIDIA Corporation GeForce GT 645M/PCIe/SSE2 supported 3 0 4.3 NVIDIA GT 640M +NVIDIA Corporation GeForce GT 650M/PCIe/SSE2 supported 3 0 4.3 NVIDIA GT 650M +NVIDIA Corporation GeForce GT 720M/PCIe/SSE2 supported 3 0 4.3 NVIDIA GT 720M +NVIDIA Corporation GeForce GT 730M/PCIe/SSE2 supported 3 0 4.3 NVIDIA GT 730M +NVIDIA Corporation GeForce GT 735M/PCIe/SSE2 supported 3 0 4.3 NVIDIA GT 730M +NVIDIA Corporation GeForce GT 740M/PCIe/SSE2 supported 3 0 4.3 NVIDIA GT 740M +NVIDIA Corporation GeForce GT 750M/PCIe/SSE2 supported 3 0 4.3 NVIDIA GT 750M +NVIDIA Corporation GeForce GT620M/PCIe/SSE2 supported 3 0 4.3 NVIDIA GT 620M +NVIDIA Corporation GeForce GT625M/PCIe/SSE2 supported 3 0 4.3 NVIDIA GT 620M NVIDIA Corporation GeForce GTS 150/PCI/SSE2 supported 2 0 0 NVIDIA GTS 150 NVIDIA Corporation GeForce GTS 160M/PCI/SSE2 supported 2 0 0 NVIDIA GTS 160M NVIDIA Corporation GeForce GTS 160M/PCIe/SSE2 supported 2 0 0 NVIDIA GTS 160M @@ -2246,66 +2246,66 @@ NVIDIA Corporation GeForce GTX 550 Ti/PCI/SSE2 NVIDIA Corporation GeForce GTX 550 Ti/PCI/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 550 NVIDIA Corporation GeForce GTX 550 Ti/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 550 NVIDIA Corporation GeForce GTX 550 Ti/PCIe/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 550 -NVIDIA Corporation GeForce GTX 560 SE/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 560 -NVIDIA Corporation GeForce GTX 560 Ti/PCI/SSE2 supported 5 1 4.2 NVIDIA GTX 560 -NVIDIA Corporation GeForce GTX 560 Ti/PCI/SSE2/3DNOW! supported 5 1 4.2 NVIDIA GTX 560 -NVIDIA Corporation GeForce GTX 560 Ti/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 560 -NVIDIA Corporation GeForce GTX 560 Ti/PCIe/SSE2/3DNOW! supported 5 1 4.2 NVIDIA GTX 560 -NVIDIA Corporation GeForce GTX 560/PCI/SSE2 supported 5 1 4.2 NVIDIA GTX 560 -NVIDIA Corporation GeForce GTX 560/PCI/SSE2/3DNOW! supported 5 1 4.2 NVIDIA GTX 560 -NVIDIA Corporation GeForce GTX 560/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 560 -NVIDIA Corporation GeForce GTX 560/PCIe/SSE2/3DNOW! supported 5 1 4.2 NVIDIA GTX 560 -NVIDIA Corporation GeForce GTX 560M/PCI/SSE2 supported 3 0 4.2 NVIDIA GTX 560M -NVIDIA Corporation GeForce GTX 560M/PCIe/SSE2 supported 3 0 4.2 NVIDIA GTX 560M -NVIDIA Corporation GeForce GTX 570/PCI/SSE2 supported 5 1 4.2 NVIDIA GTX 570 -NVIDIA Corporation GeForce GTX 570/PCI/SSE2/3DNOW! supported 5 1 4.2 NVIDIA GTX 570 -NVIDIA Corporation GeForce GTX 570/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 570 -NVIDIA Corporation GeForce GTX 570/PCIe/SSE2/3DNOW! supported 5 1 4.2 NVIDIA GTX 570 -NVIDIA Corporation GeForce GTX 570M/PCI/SSE2 supported 5 0 4.2 NVIDIA GTX 570M -NVIDIA Corporation GeForce GTX 570M/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 570M +NVIDIA Corporation GeForce GTX 560 SE/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 560 +NVIDIA Corporation GeForce GTX 560 Ti/PCI/SSE2 supported 5 1 4.3 NVIDIA GTX 560 +NVIDIA Corporation GeForce GTX 560 Ti/PCI/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 560 +NVIDIA Corporation GeForce GTX 560 Ti/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 560 +NVIDIA Corporation GeForce GTX 560 Ti/PCIe/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 560 +NVIDIA Corporation GeForce GTX 560/PCI/SSE2 supported 5 1 4.3 NVIDIA GTX 560 +NVIDIA Corporation GeForce GTX 560/PCI/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 560 +NVIDIA Corporation GeForce GTX 560/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 560 +NVIDIA Corporation GeForce GTX 560/PCIe/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 560 +NVIDIA Corporation GeForce GTX 560M/PCI/SSE2 supported 3 0 4.3 NVIDIA GTX 560M +NVIDIA Corporation GeForce GTX 560M/PCIe/SSE2 supported 3 0 4.3 NVIDIA GTX 560M +NVIDIA Corporation GeForce GTX 570/PCI/SSE2 supported 5 1 4.3 NVIDIA GTX 570 +NVIDIA Corporation GeForce GTX 570/PCI/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 570 +NVIDIA Corporation GeForce GTX 570/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 570 +NVIDIA Corporation GeForce GTX 570/PCIe/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 570 +NVIDIA Corporation GeForce GTX 570M/PCI/SSE2 supported 5 0 4.3 NVIDIA GTX 570M +NVIDIA Corporation GeForce GTX 570M/PCIe/SSE2 supported 5 0 4.3 NVIDIA GTX 570M NVIDIA Corporation GeForce GTX 580/PCI/SSE2 supported 5 1 4.3 NVIDIA GTX 580 NVIDIA Corporation GeForce GTX 580/PCI/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 580 NVIDIA Corporation GeForce GTX 580/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 580 NVIDIA Corporation GeForce GTX 580/PCIe/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 580 -NVIDIA Corporation GeForce GTX 580M/PCI/SSE2 supported 5 1 4.2 NVIDIA GTX 580M -NVIDIA Corporation GeForce GTX 580M/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 580M -NVIDIA Corporation GeForce GTX 590/PCI/SSE2 supported 5 1 4.2 NVIDIA GTX 590 -NVIDIA Corporation GeForce GTX 590/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 590 -NVIDIA Corporation GeForce GTX 590/PCIe/SSE2/3DNOW! supported 5 1 4.2 NVIDIA GTX 590 -NVIDIA Corporation GeForce GTX 645/PCIe/SSE2 supported 3 1 4.2 NVIDIA GTX 64x -NVIDIA Corporation GeForce GTX 650 Ti BOOST/PCIe/SSE2 supported 3 1 4.2 NVIDIA GTX 65x -NVIDIA Corporation GeForce GTX 650 Ti BOOST/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GTX 65x -NVIDIA Corporation GeForce GTX 650 Ti Boost/PCIe/SSE2 supported 3 1 4.2 NVIDIA GTX 65x -NVIDIA Corporation GeForce GTX 650 Ti Boost/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GTX 65x -NVIDIA Corporation GeForce GTX 650 Ti/PCIe/SSE2 supported 3 1 4.2 NVIDIA GTX 65x -NVIDIA Corporation GeForce GTX 650 Ti/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GTX 65x -NVIDIA Corporation GeForce GTX 650/PCIe/SSE2 supported 3 1 4.2 NVIDIA GTX 65x -NVIDIA Corporation GeForce GTX 650/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GTX 65x -NVIDIA Corporation GeForce GTX 660 Ti/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 66x -NVIDIA Corporation GeForce GTX 660 Ti/PCIe/SSE2/3DNOW! supported 5 0 4.2 NVIDIA GTX 66x -NVIDIA Corporation GeForce GTX 660/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 66x -NVIDIA Corporation GeForce GTX 660/PCIe/SSE2/3DNOW! supported 5 0 4.2 NVIDIA GTX 66x -NVIDIA Corporation GeForce GTX 660M/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 660M -NVIDIA Corporation GeForce GTX 670/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 67x -NVIDIA Corporation GeForce GTX 670/PCIe/SSE2/3DNOW! supported 5 1 4.2 NVIDIA GTX 67x -NVIDIA Corporation GeForce GTX 670M/PCI/SSE2 supported 5 1 4.2 NVIDIA GTX 670M -NVIDIA Corporation GeForce GTX 670M/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 670M -NVIDIA Corporation GeForce GTX 670MX/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 670M -NVIDIA Corporation GeForce GTX 675M/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 670M -NVIDIA Corporation GeForce GTX 675MX/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 670M +NVIDIA Corporation GeForce GTX 580M/PCI/SSE2 supported 5 1 4.3 NVIDIA GTX 580M +NVIDIA Corporation GeForce GTX 580M/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 580M +NVIDIA Corporation GeForce GTX 590/PCI/SSE2 supported 5 1 4.3 NVIDIA GTX 590 +NVIDIA Corporation GeForce GTX 590/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 590 +NVIDIA Corporation GeForce GTX 590/PCIe/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 590 +NVIDIA Corporation GeForce GTX 645/PCIe/SSE2 supported 3 1 4.3 NVIDIA GTX 64x +NVIDIA Corporation GeForce GTX 650 Ti BOOST/PCIe/SSE2 supported 3 1 4.3 NVIDIA GTX 65x +NVIDIA Corporation GeForce GTX 650 Ti BOOST/PCIe/SSE2/3DNOW! supported 3 1 4.3 NVIDIA GTX 65x +NVIDIA Corporation GeForce GTX 650 Ti Boost/PCIe/SSE2 supported 3 1 4.3 NVIDIA GTX 65x +NVIDIA Corporation GeForce GTX 650 Ti Boost/PCIe/SSE2/3DNOW! supported 3 1 4.3 NVIDIA GTX 65x +NVIDIA Corporation GeForce GTX 650 Ti/PCIe/SSE2 supported 3 1 4.3 NVIDIA GTX 65x +NVIDIA Corporation GeForce GTX 650 Ti/PCIe/SSE2/3DNOW! supported 3 1 4.3 NVIDIA GTX 65x +NVIDIA Corporation GeForce GTX 650/PCIe/SSE2 supported 3 1 4.3 NVIDIA GTX 65x +NVIDIA Corporation GeForce GTX 650/PCIe/SSE2/3DNOW! supported 3 1 4.3 NVIDIA GTX 65x +NVIDIA Corporation GeForce GTX 660 Ti/PCIe/SSE2 supported 5 0 4.3 NVIDIA GTX 66x +NVIDIA Corporation GeForce GTX 660 Ti/PCIe/SSE2/3DNOW! supported 5 0 4.3 NVIDIA GTX 66x +NVIDIA Corporation GeForce GTX 660/PCIe/SSE2 supported 5 0 4.3 NVIDIA GTX 66x +NVIDIA Corporation GeForce GTX 660/PCIe/SSE2/3DNOW! supported 5 0 4.3 NVIDIA GTX 66x +NVIDIA Corporation GeForce GTX 660M/PCIe/SSE2 supported 5 0 4.3 NVIDIA GTX 660M +NVIDIA Corporation GeForce GTX 670/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 67x +NVIDIA Corporation GeForce GTX 670/PCIe/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 67x +NVIDIA Corporation GeForce GTX 670M/PCI/SSE2 supported 5 1 4.3 NVIDIA GTX 670M +NVIDIA Corporation GeForce GTX 670M/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 670M +NVIDIA Corporation GeForce GTX 670MX/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 670M +NVIDIA Corporation GeForce GTX 675M/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 670M +NVIDIA Corporation GeForce GTX 675MX/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 670M NVIDIA Corporation GeForce GTX 680/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 68x NVIDIA Corporation GeForce GTX 680/PCIe/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 68x -NVIDIA Corporation GeForce GTX 680M/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 680M -NVIDIA Corporation GeForce GTX 680MX/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 680M +NVIDIA Corporation GeForce GTX 680M/PCIe/SSE2 supported 5 0 4.3 NVIDIA GTX 680M +NVIDIA Corporation GeForce GTX 680MX/PCIe/SSE2 supported 5 0 4.3 NVIDIA GTX 680M NVIDIA Corporation GeForce GTX 690/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 69x NVIDIA Corporation GeForce GTX 760/PCIe/SSE2 supported 5 0 4.3 NVIDIA GTX 76x -NVIDIA Corporation GeForce GTX 760M/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 760M -NVIDIA Corporation GeForce GTX 765M/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 760M +NVIDIA Corporation GeForce GTX 760M/PCIe/SSE2 supported 5 0 4.3 NVIDIA GTX 760M +NVIDIA Corporation GeForce GTX 765M/PCIe/SSE2 supported 5 0 4.3 NVIDIA GTX 760M NVIDIA Corporation GeForce GTX 770/PCIe/SSE2 supported 5 0 4.3 NVIDIA GTX 77x NVIDIA Corporation GeForce GTX 770/PCIe/SSE2/3DNOW! supported 5 0 4.3 NVIDIA GTX 77x -NVIDIA Corporation GeForce GTX 770M/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 770M +NVIDIA Corporation GeForce GTX 770M/PCIe/SSE2 supported 5 0 4.3 NVIDIA GTX 770M NVIDIA Corporation GeForce GTX 780/PCIe/SSE2 supported 5 0 4.3 NVIDIA GTX 78x -NVIDIA Corporation GeForce GTX 780M/PCIe/SSE2 supported 5 0 4.2 NVIDIA GTX 780M +NVIDIA Corporation GeForce GTX 780M/PCIe/SSE2 supported 5 0 4.3 NVIDIA GTX 780M NVIDIA Corporation GeForce GTX TITAN/PCIe/SSE2 supported 5 0 4.3 NVIDIA GTX TITAN NVIDIA Corporation GeForce GTX TITAN/PCIe/SSE2/3DNOW! supported 5 0 4.3 NVIDIA GTX TITAN NVIDIA Corporation GeForce GTX Titan/PCIe/SSE2 supported 5 0 4.3 NVIDIA GTX TITAN @@ -2435,11 +2435,11 @@ NVIDIA Corporation NVIDIA GeForce GT 320M OpenGL Engine NVIDIA Corporation NVIDIA GeForce GT 330M OpenGL Engine supported 3 1 3.3 NVIDIA GT 330M NVIDIA Corporation NVIDIA GeForce GT 430 OpenGL Engine supported 3 1 4.2 NVIDIA GT 430 NVIDIA Corporation NVIDIA GeForce GT 440 OpenGL Engine supported 4 1 4.2 NVIDIA GT 440 -NVIDIA Corporation NVIDIA GeForce GT 520 OpenGL Engine supported 3 1 4.2 NVIDIA GT 520 -NVIDIA Corporation NVIDIA GeForce GT 630 OpenGL Engine supported 3 0 4.2 NVIDIA GT 63x -NVIDIA Corporation NVIDIA GeForce GT 640 OpenGL Engine supported 3 0 4.2 NVIDIA GT 64x -NVIDIA Corporation NVIDIA GeForce GT 640M OpenGL Engine supported 3 0 4.2 NVIDIA GT 640M -NVIDIA Corporation NVIDIA GeForce GT 650M OpenGL Engine supported 3 0 4.2 NVIDIA GT 650M +NVIDIA Corporation NVIDIA GeForce GT 520 OpenGL Engine supported 3 1 4.3 NVIDIA GT 520 +NVIDIA Corporation NVIDIA GeForce GT 630 OpenGL Engine supported 3 0 4.3 NVIDIA GT 63x +NVIDIA Corporation NVIDIA GeForce GT 640 OpenGL Engine supported 3 0 4.3 NVIDIA GT 64x +NVIDIA Corporation NVIDIA GeForce GT 640M OpenGL Engine supported 3 0 4.3 NVIDIA GT 640M +NVIDIA Corporation NVIDIA GeForce GT 650M OpenGL Engine supported 3 0 4.3 NVIDIA GT 650M NVIDIA Corporation NVIDIA GeForce GTS 250 OpenGL Engine supported 4 1 3.3 NVIDIA GTS 250 NVIDIA Corporation NVIDIA GeForce GTS 450 OpenGL Engine supported 4 1 4.2 NVIDIA GTS 450 NVIDIA Corporation NVIDIA GeForce GTX 260 OpenGL Engine supported 4 1 3.3 NVIDIA GTX 260 @@ -2449,21 +2449,21 @@ NVIDIA Corporation NVIDIA GeForce GTX 460 OpenGL Engine NVIDIA Corporation NVIDIA GeForce GTX 470 OpenGL Engine supported 5 1 4.2 NVIDIA GTX 470 NVIDIA Corporation NVIDIA GeForce GTX 480 OpenGL Engine supported 5 1 4.2 NVIDIA GTX 480 NVIDIA Corporation NVIDIA GeForce GTX 550 Ti OpenGL Engine supported 5 1 4.3 NVIDIA GTX 550 -NVIDIA Corporation NVIDIA GeForce GTX 560 OpenGL Engine supported 5 1 4.2 NVIDIA GTX 560 -NVIDIA Corporation NVIDIA GeForce GTX 560 Ti OpenGL Engine supported 5 1 4.2 NVIDIA GTX 560 -NVIDIA Corporation NVIDIA GeForce GTX 570 OpenGL Engine supported 5 1 4.2 NVIDIA GTX 570 +NVIDIA Corporation NVIDIA GeForce GTX 560 OpenGL Engine supported 5 1 4.3 NVIDIA GTX 560 +NVIDIA Corporation NVIDIA GeForce GTX 560 Ti OpenGL Engine supported 5 1 4.3 NVIDIA GTX 560 +NVIDIA Corporation NVIDIA GeForce GTX 570 OpenGL Engine supported 5 1 4.3 NVIDIA GTX 570 NVIDIA Corporation NVIDIA GeForce GTX 580 OpenGL Engine supported 5 1 4.3 NVIDIA GTX 580 -NVIDIA Corporation NVIDIA GeForce GTX 650 OpenGL Engine supported 3 1 4.2 NVIDIA GTX 65x -NVIDIA Corporation NVIDIA GeForce GTX 650 Ti OpenGL Engine supported 3 1 4.2 NVIDIA GTX 65x -NVIDIA Corporation NVIDIA GeForce GTX 660 OpenGL Engine supported 5 0 4.2 NVIDIA GTX 66x -NVIDIA Corporation NVIDIA GeForce GTX 660 Ti OpenGL Engine supported 5 0 4.2 NVIDIA GTX 66x -NVIDIA Corporation NVIDIA GeForce GTX 660M OpenGL Engine supported 5 0 4.2 NVIDIA GTX 660M -NVIDIA Corporation NVIDIA GeForce GTX 670 OpenGL Engine supported 5 1 4.2 NVIDIA GTX 67x -NVIDIA Corporation NVIDIA GeForce GTX 675MX OpenGL Engine supported 5 1 4.2 NVIDIA GTX 670M +NVIDIA Corporation NVIDIA GeForce GTX 650 OpenGL Engine supported 3 1 4.3 NVIDIA GTX 65x +NVIDIA Corporation NVIDIA GeForce GTX 650 Ti OpenGL Engine supported 3 1 4.3 NVIDIA GTX 65x +NVIDIA Corporation NVIDIA GeForce GTX 660 OpenGL Engine supported 5 0 4.3 NVIDIA GTX 66x +NVIDIA Corporation NVIDIA GeForce GTX 660 Ti OpenGL Engine supported 5 0 4.3 NVIDIA GTX 66x +NVIDIA Corporation NVIDIA GeForce GTX 660M OpenGL Engine supported 5 0 4.3 NVIDIA GTX 660M +NVIDIA Corporation NVIDIA GeForce GTX 670 OpenGL Engine supported 5 1 4.3 NVIDIA GTX 67x +NVIDIA Corporation NVIDIA GeForce GTX 675MX OpenGL Engine supported 5 1 4.3 NVIDIA GTX 670M NVIDIA Corporation NVIDIA GeForce GTX 680 OpenGL Engine supported 5 1 4.3 NVIDIA GTX 68x -NVIDIA Corporation NVIDIA GeForce GTX 680MX OpenGL Engine supported 5 0 4.2 NVIDIA GTX 680M -NVIDIA Corporation NVIDIA GeForce GTX 775M OpenGL Engine supported 5 0 4.2 NVIDIA GTX 770M -NVIDIA Corporation NVIDIA GeForce GTX 780M OpenGL Engine supported 5 0 4.2 NVIDIA GTX 780M +NVIDIA Corporation NVIDIA GeForce GTX 680MX OpenGL Engine supported 5 0 4.3 NVIDIA GTX 680M +NVIDIA Corporation NVIDIA GeForce GTX 775M OpenGL Engine supported 5 0 4.3 NVIDIA GTX 770M +NVIDIA Corporation NVIDIA GeForce GTX 780M OpenGL Engine supported 5 0 4.3 NVIDIA GTX 780M NVIDIA Corporation NVIDIA GeForce Go 7600 OpenGL Engine supported 1 1 2.1 NVIDIA GeForce Go 7600 NVIDIA Corporation NVIDIA GeForce Pre-Release D14P2-30 OpenGL Engine supported 2 1 3.3 NVIDIA GeForce Pre-Release NVIDIA Corporation NVIDIA GeForce Pre-Release GK104 OpenGL Engine supported 2 1 3.3 NVIDIA GeForce Pre-Release @@ -2690,7 +2690,7 @@ NVIDIA G 310M NVIDIA G 320M supported 3 0 3.3 NVIDIA GT 320M NVIDIA G 405 supported 3 0 3.3 NVIDIA 405 NVIDIA G 410M supported 3 1 4.2 NVIDIA G 410M -NVIDIA G 610M supported 3 1 4.2 NVIDIA 610M +NVIDIA G 610M supported 3 1 4.3 NVIDIA 610M NVIDIA G100 supported 3 1 4.2 NVIDIA G100 NVIDIA G100M supported 1 1 3.3 NVIDIA G 100M NVIDIA G102M supported 1 1 3.3 NVIDIA G 100M @@ -2736,25 +2736,25 @@ NVIDIA GT 440 NVIDIA GT 440M supported 3 1 4.2 NVIDIA GT 440M NVIDIA GT 445M supported 3 1 4.2 NVIDIA GT 440M NVIDIA GT 450 supported 4 1 4.2 NVIDIA GT 450 -NVIDIA GT 520 supported 3 1 4.2 NVIDIA GT 520 -NVIDIA GT 520M supported 3 1 4.2 NVIDIA GT 520M -NVIDIA GT 525M supported 3 1 4.2 NVIDIA GT 520M -NVIDIA GT 530M supported 3 1 4.2 NVIDIA GT 530M -NVIDIA GT 540 supported 3 1 4.2 NVIDIA GT 540 -NVIDIA GT 540M supported 3 1 4.2 NVIDIA GT 540M -NVIDIA GT 550 supported 3 1 4.2 NVIDIA GT 550 -NVIDIA GT 550M supported 3 1 4.2 NVIDIA GT 550M -NVIDIA GT 555M supported 3 1 4.2 NVIDIA GT 550M -NVIDIA GT 610 supported 3 1 4.2 NVIDIA GT 61x -NVIDIA GT 620 supported 3 0 4.2 NVIDIA GT 62x -NVIDIA GT 620M supported 3 0 4.2 NVIDIA GT 620M -NVIDIA GT 630 supported 3 0 4.2 NVIDIA GT 63x -NVIDIA GT 630M supported 3 0 4.2 NVIDIA GT 630M -NVIDIA GT 635M supported 3 0 4.2 NVIDIA GT 630M -NVIDIA GT 640 supported 3 0 4.2 NVIDIA GT 64x -NVIDIA GT 640M supported 3 0 4.2 NVIDIA GT 640M -NVIDIA GT 650 supported 3 1 4.2 NVIDIA GT 65x -NVIDIA GT 650M supported 3 0 4.2 NVIDIA GT 650M +NVIDIA GT 520 supported 3 1 4.3 NVIDIA GT 520 +NVIDIA GT 520M supported 3 1 4.3 NVIDIA GT 520M +NVIDIA GT 525M supported 3 1 4.3 NVIDIA GT 520M +NVIDIA GT 530M supported 3 1 4.3 NVIDIA GT 530M +NVIDIA GT 540 supported 3 1 4.3 NVIDIA GT 540 +NVIDIA GT 540M supported 3 1 4.3 NVIDIA GT 540M +NVIDIA GT 550 supported 3 1 4.3 NVIDIA GT 550 +NVIDIA GT 550M supported 3 1 4.3 NVIDIA GT 550M +NVIDIA GT 555M supported 3 1 4.3 NVIDIA GT 550M +NVIDIA GT 610 supported 3 1 4.3 NVIDIA GT 61x +NVIDIA GT 620 supported 3 0 4.3 NVIDIA GT 62x +NVIDIA GT 620M supported 3 0 4.3 NVIDIA GT 620M +NVIDIA GT 630 supported 3 0 4.3 NVIDIA GT 63x +NVIDIA GT 630M supported 3 0 4.3 NVIDIA GT 630M +NVIDIA GT 635M supported 3 0 4.3 NVIDIA GT 630M +NVIDIA GT 640 supported 3 0 4.3 NVIDIA GT 64x +NVIDIA GT 640M supported 3 0 4.3 NVIDIA GT 640M +NVIDIA GT 650 supported 3 1 4.3 NVIDIA GT 65x +NVIDIA GT 650M supported 3 0 4.3 NVIDIA GT 650M NVIDIA GTS 160M supported 2 0 0 NVIDIA GTS 160M NVIDIA GTS 240 supported 4 1 3.3 NVIDIA GTS 240 NVIDIA GTS 250 supported 4 1 3.3 NVIDIA GTS 250 @@ -2778,19 +2778,19 @@ NVIDIA GTX 480 NVIDIA GTX 480M supported 3 1 4.2 NVIDIA GTX 480M NVIDIA GTX 485M supported 3 1 4.2 NVIDIA GTX 480M NVIDIA GTX 550 supported 5 1 4.3 NVIDIA GTX 550 -NVIDIA GTX 560 supported 5 1 4.2 NVIDIA GTX 560 -NVIDIA GTX 560 Ti supported 5 1 4.2 NVIDIA GTX 560 -NVIDIA GTX 570 supported 5 1 4.2 NVIDIA GTX 570 +NVIDIA GTX 560 supported 5 1 4.3 NVIDIA GTX 560 +NVIDIA GTX 560 Ti supported 5 1 4.3 NVIDIA GTX 560 +NVIDIA GTX 570 supported 5 1 4.3 NVIDIA GTX 570 NVIDIA GTX 580 supported 5 1 4.3 NVIDIA GTX 580 -NVIDIA GTX 580M supported 5 1 4.2 NVIDIA GTX 580M -NVIDIA GTX 590 supported 5 1 4.2 NVIDIA GTX 590 -NVIDIA GTX 650 supported 3 1 4.2 NVIDIA GTX 65x -NVIDIA GTX 660 supported 5 0 4.2 NVIDIA GTX 66x -NVIDIA GTX 670 supported 5 1 4.2 NVIDIA GTX 67x -NVIDIA GTX 670M supported 5 1 4.2 NVIDIA GTX 670M -NVIDIA GTX 675M supported 5 1 4.2 NVIDIA GTX 670M +NVIDIA GTX 580M supported 5 1 4.3 NVIDIA GTX 580M +NVIDIA GTX 590 supported 5 1 4.3 NVIDIA GTX 590 +NVIDIA GTX 650 supported 3 1 4.3 NVIDIA GTX 65x +NVIDIA GTX 660 supported 5 0 4.3 NVIDIA GTX 66x +NVIDIA GTX 670 supported 5 1 4.3 NVIDIA GTX 67x +NVIDIA GTX 670M supported 5 1 4.3 NVIDIA GTX 670M +NVIDIA GTX 675M supported 5 1 4.3 NVIDIA GTX 670M NVIDIA GTX 680 supported 5 1 4.3 NVIDIA GTX 68x -NVIDIA GTX 680M supported 5 0 4.2 NVIDIA GTX 680M +NVIDIA GTX 680M supported 5 0 4.3 NVIDIA GTX 680M NVIDIA GTX 690 supported 5 1 4.3 NVIDIA GTX 69x NVIDIA GTX 770 supported 5 0 4.3 NVIDIA GTX 77x NVIDIA GTX TITAN supported 5 0 4.3 NVIDIA GTX TITAN @@ -2913,7 +2913,7 @@ Parallels and ATI Technologies Inc. Parallels using ATI Radeon HD 6770M OpenGL E Parallels and ATI Technologies Inc. Parallels using ATI Radeon HD 6970M OpenGL Engine supported 5 1 4.2 ATI Radeon HD 6900 Parallels and ATI Technologies Inc. Parallels using ATI Radeon X1600 OpenGL Engine supported 2 1 2.1 ATI Radeon X1600 Parallels and Intel Inc. Parallels using Intel GMA X3100 OpenGL Engine supported 1 1 2.1 Intel X3100 -Parallels and Intel Inc. Parallels using Intel HD Graphics 3000 OpenGL Engine supported 3 1 4.2 Intel HD Graphics 3000 +Parallels and Intel Inc. Parallels using Intel HD Graphics 3000 OpenGL Engine supported 3 1 3.1 Intel HD Graphics 3000 Parallels and Intel Inc. Parallels using Intel HD Graphics 4000 OpenGL Engine supported 3 1 4.2 Intel HD Graphics 4000 Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce 320M OpenGL Engine supported 2 0 3.3 NVIDIA 320M Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce 8800 GS OpenGL Engine supported 3 1 3.3 NVIDIA GeForce 8800 @@ -2922,14 +2922,14 @@ Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce 9400M OpenGL Eng Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce 9600M GT OpenGL Engine supported 2 1 3.3 NVIDIA GeForce 9600M Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GT 130 OpenGL Engine supported 2 0 3.3 NVIDIA GT 130 Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GT 330M OpenGL Engine supported 3 1 3.3 NVIDIA GT 330M -Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GT 640 OpenGL Engine supported 3 0 4.2 NVIDIA GT 64x -Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GT 640M OpenGL Engine supported 3 0 4.2 NVIDIA GT 640M -Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GT 650M OpenGL Engine supported 3 0 4.2 NVIDIA GT 650M -Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GTX 570 OpenGL Engine supported 5 1 4.2 NVIDIA GTX 570 -Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GTX 660 OpenGL Engine supported 5 0 4.2 NVIDIA GTX 66x -Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GTX 660 Ti OpenGL Engine supported 5 0 4.2 NVIDIA GTX 66x -Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GTX 670 OpenGL Engine supported 5 1 4.2 NVIDIA GTX 67x -Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GTX 680MX OpenGL Engine supported 5 0 4.2 NVIDIA GTX 680M +Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GT 640 OpenGL Engine supported 3 0 4.3 NVIDIA GT 64x +Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GT 640M OpenGL Engine supported 3 0 4.3 NVIDIA GT 640M +Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GT 650M OpenGL Engine supported 3 0 4.3 NVIDIA GT 650M +Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GTX 570 OpenGL Engine supported 5 1 4.3 NVIDIA GTX 570 +Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GTX 660 OpenGL Engine supported 5 0 4.3 NVIDIA GTX 66x +Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GTX 660 Ti OpenGL Engine supported 5 0 4.3 NVIDIA GTX 66x +Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GTX 670 OpenGL Engine supported 5 1 4.3 NVIDIA GTX 67x +Parallels and NVIDIA Corporation Parallels using NVIDIA GeForce GTX 680MX OpenGL Engine supported 5 0 4.3 NVIDIA GTX 680M PowerVR SGX545 supported 1 1 3 PowerVR SGX545 S3 unsupported 0 1 1.4 S3 S3 Graphics K8M800/MMX/K3D unsupported 0 1 1.4 S3 -- cgit v1.2.3 From f53b2bd880875b5194b6d298e1aad7d8951db9f3 Mon Sep 17 00:00:00 2001 From: Gilbert Gonzales Date: Fri, 20 Sep 2013 14:11:07 -0700 Subject: ACME-902: Link the '?' button to the proper viewer-help article or articles --- indra/newview/skins/default/xui/en/floater_social.xml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/indra/newview/skins/default/xui/en/floater_social.xml b/indra/newview/skins/default/xui/en/floater_social.xml index 426c5507e4..b7ff374d5f 100644 --- a/indra/newview/skins/default/xui/en/floater_social.xml +++ b/indra/newview/skins/default/xui/en/floater_social.xml @@ -3,7 +3,7 @@ positioning="cascading" can_close="true" can_resize="false" - help_topic="social floater" + help_topic="floater_social" layout="topleft" name="floater_social" save_rect="true" @@ -34,28 +34,24 @@ class="llsocialstatuspanel" follows="all" label="STATUS" - help_topic="panel_social_status" name="panel_social_status"/> Date: Mon, 23 Sep 2013 09:14:53 +0300 Subject: MAINT-3151 (Issue with urls being autoclicked when holding left click into an unfocused textbox then dragging pointer over a url and releasing.) --- indra/llui/lltextbase.cpp | 2 +- indra/llui/lltexteditor.cpp | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index cc171661ce..5ec4cf4fe5 100755 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -1029,7 +1029,7 @@ BOOL LLTextBase::handleMouseDown(S32 x, S32 y, MASK mask) BOOL LLTextBase::handleMouseUp(S32 x, S32 y, MASK mask) { LLTextSegmentPtr cur_segment = getSegmentAtLocalPos(x, y); - if (cur_segment && cur_segment->handleMouseUp(x, y, mask)) + if (hasMouseCapture() && cur_segment && cur_segment->handleMouseUp(x, y, mask)) { // Did we just click on a link? if (mURLClickSignal diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index 764f0b8b36..7f309a5ff6 100755 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -721,7 +721,6 @@ BOOL LLTextEditor::handleMouseDown(S32 x, S32 y, MASK mask) setCursorAtLocalPos( x, y, true ); startSelection(); } - gFocusMgr.setMouseCapture( this ); } handled = TRUE; @@ -730,6 +729,10 @@ BOOL LLTextEditor::handleMouseDown(S32 x, S32 y, MASK mask) // Delay cursor flashing resetCursorBlink(); + if (handled) + { + gFocusMgr.setMouseCapture( this ); + } return handled; } -- cgit v1.2.3 From 3bfac42f07b1896bea3fd1ece762c56e3f1fc819 Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Mon, 23 Sep 2013 13:07:56 +0300 Subject: MAINT-3159 FIXED Disable buttons when refreshing ui. --- indra/newview/llfloaterland.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 22f42875fb..abe094d748 100755 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -2544,7 +2544,11 @@ void LLPanelLandAccess::refresh_ui() getChildView("HoursSpin")->setEnabled(FALSE); getChildView("AccessList")->setEnabled(FALSE); getChildView("BannedList")->setEnabled(FALSE); - + getChildView("add_allowed")->setEnabled(FALSE); + getChildView("remove_allowed")->setEnabled(FALSE); + getChildView("add_banned")->setEnabled(FALSE); + getChildView("remove_banned")->setEnabled(FALSE); + LLParcel *parcel = mParcel->getParcel(); if (parcel) { -- cgit v1.2.3 From 6c13c4dd552a05cf055a90bdd90937de9f3903a5 Mon Sep 17 00:00:00 2001 From: JJ Linden Date: Mon, 23 Sep 2013 13:26:24 -0700 Subject: made change to include channel name in the settings_install.xml file generated. changed so that sourceid is not part of a list of options pulled into that file, along with the channel --- indra/newview/viewer_manifest.py | 41 ++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index effe3994a3..894e368427 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -104,20 +104,37 @@ class ViewerManifest(LLManifest): self.path("dictionaries") self.end_prefix(pkgdir) - # CHOP-955: If we have "sourceid" in the build process - # environment, generate it into settings_install.xml. - if self.args['sourceid']: - # Single-entry subset of the LLSD content of settings.xml - content = dict(sourceid=dict(Comment='Identify referring agency to Linden web servers', - Persist=1, - Type='String', - Value=self.args['sourceid'])) + # CHOP-955: If we have "sourceid" or "viewer_channel" in the + # build process environment, generate it into + # settings_install.xml. + settings_template = dict( + sourceid=dict(Comment='Identify referring agency to Linden web servers', + Persist=1, + Type='String', + Value=''), + CmdLineChannel=dict(Comment='Command line specified channel name', + Persist=0, + Type='String', + Value='')) + settings_install = {} + for key, setting in (("sourceid", "sourceid"), + ("channel", "CmdLineChannel")): + if key in self.args: + # only set if value is non-empty + if self.args[key]: + # copy corresponding setting from settings_template + settings_install[setting] = settings_template[setting].copy() + # then fill in Value + settings_install[setting]["Value"] = self.args[key] + print "Put %s '%s' in settings_install.xml" % (setting, self.args[key]) + + # did we actually copy anything into settings_install dict? + if settings_install: # put_in_file(src=) need not be an actual pathname; it # only needs to be non-empty - settings_install = self.put_in_file(llsd.format_pretty_xml(content), - "settings_install.xml", - src="environment") - print "Put sourceid '%s' in %s" % (self.args['sourceid'], settings_install) + self.put_in_file(llsd.format_pretty_xml(settings_install), + "settings_install.xml", + src="environment") self.end_prefix("app_settings") -- cgit v1.2.3 From f48581b62523670558f6a9fb01fa012d3dc9d61e Mon Sep 17 00:00:00 2001 From: Graham Linden Date: Wed, 25 Sep 2013 13:52:10 -0700 Subject: Fix decl of merged genBBoxes func to match merge impl --- indra/newview/llface.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llface.h b/indra/newview/llface.h index fe16920aa4..c9037ce1eb 100755 --- a/indra/newview/llface.h +++ b/indra/newview/llface.h @@ -195,7 +195,7 @@ public: void setSize(S32 numVertices, S32 num_indices = 0, bool align = false); BOOL genVolumeBBoxes(const LLVolume &volume, S32 f, - const LLMatrix4& mat_vert_in, const LLMatrix3& mat_normal_in, BOOL global_volume = FALSE); + const LLMatrix4& mat_vert_in, BOOL global_volume = FALSE); void init(LLDrawable* drawablep, LLViewerObject* objp); void destroy(); -- cgit v1.2.3 From 05c6d59faa3f604a97df4125b6905c4138763dec Mon Sep 17 00:00:00 2001 From: Graham Linden Date: Wed, 25 Sep 2013 14:08:58 -0700 Subject: BUG-3984 fix broken rendering of particles using blend funcs --- indra/newview/lldrawpoolalpha.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp index 7741dd66e5..6c5d229dba 100755 --- a/indra/newview/lldrawpoolalpha.cpp +++ b/indra/newview/lldrawpoolalpha.cpp @@ -578,10 +578,15 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask, S32 pass) } } + static LLFastTimer::DeclareTimer FTM_RENDER_ALPHA_PUSH("Alpha Push Verts"); + { + LLFastTimer t(FTM_RENDER_ALPHA_PUSH); + gGL.blendFunc((LLRender::eBlendFactor) params.mBlendFuncSrc, (LLRender::eBlendFactor) params.mBlendFuncDst, mAlphaSFactor, mAlphaDFactor); params.mVertexBuffer->setBuffer(mask & ~(params.mFullbright ? (LLVertexBuffer::MAP_TANGENT | LLVertexBuffer::MAP_TEXCOORD1 | LLVertexBuffer::MAP_TEXCOORD2) : 0)); params.mVertexBuffer->drawRange(params.mDrawMode, params.mStart, params.mEnd, params.mCount, params.mOffset); gPipeline.addTrianglesDrawn(params.mCount, params.mDrawMode); + } // If this alpha mesh has glow, then draw it a second time to add the destination-alpha (=glow). Interleaving these state-changing calls could be expensive, but glow must be drawn Z-sorted with alpha. if (current_shader && @@ -616,6 +621,8 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask, S32 pass) } } + gGL.setSceneBlendType(LLRender::BT_ALPHA); + LLVertexBuffer::unbind(); if (!light_enabled) -- cgit v1.2.3 From 4709ca96975e24e49eba00760dd840a5b026fcb9 Mon Sep 17 00:00:00 2001 From: Graham Linden Date: Thu, 26 Sep 2013 09:23:47 -0700 Subject: NORSPEC-259 revive fix stomped with materials->bear merge --- indra/llrender/llrendertarget.cpp | 4 +++- indra/newview/llviewershadermgr.cpp | 1 - 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp index d7f141bd92..353e61105a 100755 --- a/indra/llrender/llrendertarget.cpp +++ b/indra/llrender/llrendertarget.cpp @@ -583,8 +583,10 @@ void LLRenderTarget::copyContentsToFramebuffer(LLRenderTarget& source, S32 srcX0 { if (!source.mFBO) { - llerrs << "Cannot copy framebuffer contents for non FBO render targets." << llendl; + llwarns << "Cannot copy framebuffer contents for non FBO render targets." << llendl; + return; } + { GLboolean write_depth = mask & GL_DEPTH_BUFFER_BIT ? TRUE : FALSE; diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index 0e099b8299..50f0a5f1af 100755 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -314,7 +314,6 @@ LLViewerShaderMgr::LLViewerShaderMgr() : mShaderList.push_back(&gDeferredMaterialWaterProgram[9+LLMaterial::SHADER_COUNT]); mShaderList.push_back(&gDeferredMaterialWaterProgram[13+LLMaterial::SHADER_COUNT]); mShaderList.push_back(&gDeferredAlphaProgram); - mShaderList.push_back(&gDeferredAlphaProgram); mShaderList.push_back(&gDeferredAlphaImpostorProgram); mShaderList.push_back(&gDeferredAlphaWaterProgram); mShaderList.push_back(&gDeferredSkinnedAlphaProgram); -- cgit v1.2.3 From b8a1fd33f5e5d438eaa708ff4687215d9f1a79c8 Mon Sep 17 00:00:00 2001 From: "Graham Madarasz (Graham Linden)" Date: Thu, 26 Sep 2013 10:12:33 -0700 Subject: Try all you want multichar constant, but you'll never be a string to me! (fix mac build errors from 'curious' filepicker literals) --- indra/newview/llfilepicker.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indra/newview/llfilepicker.cpp b/indra/newview/llfilepicker.cpp index 3fec81b627..9da8e82c49 100755 --- a/indra/newview/llfilepicker.cpp +++ b/indra/newview/llfilepicker.cpp @@ -659,9 +659,9 @@ bool LLFilePicker::doNavSaveDialog(ESaveFilter filter, const std::string& filena extension = "tga"; break; case FFSAVE_TGAPNG: - type = 'PNG'; - creator = 'prvw'; - extension = CFSTR(".png"); + type = "PNG"; + creator = "prvw"; + extension = "png"; break; case FFSAVE_BMP: type = "BMPf"; -- cgit v1.2.3 From e285d515d5b94acce280edf586a16272931749d9 Mon Sep 17 00:00:00 2001 From: Graham Linden Date: Thu, 26 Sep 2013 11:32:57 -0700 Subject: NORSPEC-281 bring back a classic normal generation fix from runitai's personal collection --- indra/llmath/llvolume.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 2b865b4a8e..f74c934b21 100755 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -166,7 +166,8 @@ void calc_tangent_from_triangle( F32 rd = s1*t2-s2*t1; - float r = ((rd*rd) > FLT_EPSILON) ? 1.0F / rd : 1024.f; //some made up large ratio for division by zero + float r = ((rd*rd) > FLT_EPSILON) ? (1.0f / rd) + : ((rd > 0.0f) ? 1024.f : -1024.f); //some made up large ratio for division by zero llassert(llfinite(r)); llassert(!llisnan(r)); @@ -6789,7 +6790,8 @@ void CalculateTangentArray(U32 vertexCount, const LLVector4a *vertex, const LLVe F32 rd = s1*t2-s2*t1; - float r = ((rd*rd) > FLT_EPSILON) ? 1.0F / rd : 1024.f; //some made up large ratio for division by zero + float r = ((rd*rd) > FLT_EPSILON) ? (1.0f / rd) + : ((rd > 0.0f) ? 1024.f : -1024.f); //some made up large ratio for division by zero llassert(llfinite(r)); llassert(!llisnan(r)); -- cgit v1.2.3 From fb6da3bcae4795022c464ed769a7c477b3f50365 Mon Sep 17 00:00:00 2001 From: Graham Linden Date: Thu, 26 Sep 2013 11:49:16 -0700 Subject: Last minute suggestions for IvyBridge Intel 2500 and nVidia 400 series expected GL settings from TankMaster Finesmith --- indra/newview/gpu_table.txt | 30 ++++----- indra/newview/tests/gpus_results.txt | 122 +++++++++++++++++------------------ 2 files changed, 76 insertions(+), 76 deletions(-) diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt index 68cf20aac2..0acdf9661a 100755 --- a/indra/newview/gpu_table.txt +++ b/indra/newview/gpu_table.txt @@ -316,7 +316,7 @@ Intel Brookdale .*Intel.*Brookdale.* 0 0 1 1.3 Intel Cantiga .*Intel.*Cantiga.* 0 0 1 2 Intel Eaglelake .*Intel.*Eaglelake.* 1 1 1 2 Intel Graphics Media HD .*Intel.*Graphics Media.*HD.* 1 1 1 2.1 -Intel HD Graphics 2500 .*Intel.*HD Graphics 25.* 2 1 0 3.1 +Intel HD Graphics 2500 .*Intel.*HD Graphics 25.* 2 1 0 4.2 Intel HD Graphics 2000 .*Intel.*HD Graphics 2.* 2 1 0 3.1 Intel HD Graphics 3000 .*Intel.*HD Graphics 3.* 3 1 1 3.1 Intel HD Graphics 4200 .*Intel.*HD Graphics 42.* 3 1 0 4.2 @@ -414,13 +414,13 @@ NVIDIA 310M .*NVIDIA .*31[0-9]M.* 2 1 0 3.3 NVIDIA 320M .*NVIDIA .*320M.* 2 1 0 3.3 NVIDIA 400M .*NVIDIA .*[ ]+40[0-9]M.* 2 1 0 0 NVIDIA 410M .*NVIDIA .*[ ]+41[0-9]M.* 3 1 0 0 -NVIDIA GT 420M .*NVIDIA .*GT *42[0-9]M.* 3 1 1 4.2 -NVIDIA GT 430M .*NVIDIA .*GT *43[0-9]M.* 3 1 1 4.2 -NVIDIA GT 440M .*NVIDIA .*GT *44[0-9]M.* 3 1 1 4.2 +NVIDIA GT 420M .*NVIDIA .*GT *42[0-9]M.* 3 1 1 4.3 +NVIDIA GT 430M .*NVIDIA .*GT *43[0-9]M.* 3 1 1 4.3 +NVIDIA GT 440M .*NVIDIA .*GT *44[0-9]M.* 3 1 1 4.3 NVIDIA GT 450M .*NVIDIA .*GT *45[0-9]M.* 3 1 0 0 -NVIDIA GTX 460M .*NVIDIA .*GTX *46[0-9]M.* 4 1 1 4.2 -NVIDIA GTX 470M .*NVIDIA .*GTX *47[0-9]M.* 3 1 0 4.2 -NVIDIA GTX 480M .*NVIDIA .*GTX *48[0-9]M.* 3 1 1 4.2 +NVIDIA GTX 460M .*NVIDIA .*GTX *46[0-9]M.* 4 1 1 4.3 +NVIDIA GTX 470M .*NVIDIA .*GTX *47[0-9]M.* 3 1 0 4.3 +NVIDIA GTX 480M .*NVIDIA .*GTX *48[0-9]M.* 3 1 1 4.3 NVIDIA GT 520M .*NVIDIA .*GT *52[0-9]M.* 3 1 1 4.3 NVIDIA GT 530M .*NVIDIA .*GT *53[0-9]M.* 3 1 1 4.3 NVIDIA GT 540M .*NVIDIA .*GT *54[0-9]M.* 3 1 1 4.3 @@ -475,15 +475,15 @@ NVIDIA 315 .*NVIDIA .*315[^0M]*.* 3 1 1 3.3 NVIDIA 320 .*NVIDIA .*320[^0M]*.* 3 1 1 3.3 NVIDIA 405 .*NVIDIA .*405[^0]*.* 3 1 0 3.3 NVIDIA 410 .*NVIDIA .*410[^0]*.* 3 1 0 3.3 -NVIDIA GT 415 .*NVIDIA .*GT *415.* 3 1 1 4.2 -NVIDIA GT 420 .*NVIDIA .*GT *42.* 3 1 1 4.2 -NVIDIA GT 430 .*NVIDIA .*GT *43.* 3 1 1 4.2 -NVIDIA GT 440 .*NVIDIA .*GT *44.* 4 1 1 4.2 -NVIDIA GT 450 .*NVIDIA .*GT *45.* 4 1 1 4.2 -NVIDIA GTS 450 .*NVIDIA .*GTS *45.* 4 1 1 4.2 +NVIDIA GT 415 .*NVIDIA .*GT *415.* 3 1 1 4.3 +NVIDIA GT 420 .*NVIDIA .*GT *42.* 3 1 1 4.3 +NVIDIA GT 430 .*NVIDIA .*GT *43.* 3 1 1 4.3 +NVIDIA GT 440 .*NVIDIA .*GT *44.* 4 1 1 4.3 +NVIDIA GT 450 .*NVIDIA .*GT *45.* 4 1 1 4.3 +NVIDIA GTS 450 .*NVIDIA .*GTS *45.* 4 1 1 4.3 NVIDIA GTX 460 .*NVIDIA .*GTX *46.* 5 1 1 4.3 -NVIDIA GTX 470 .*NVIDIA .*GTX *47.* 5 1 1 4.2 -NVIDIA GTX 480 .*NVIDIA .*GTX *48.* 5 1 1 4.2 +NVIDIA GTX 470 .*NVIDIA .*GTX *47.* 5 1 1 4.3 +NVIDIA GTX 480 .*NVIDIA .*GTX *48.* 5 1 1 4.3 NVIDIA 505 .*NVIDIA .*505[^0]*.* 3 1 0 0 NVIDIA 510 .*NVIDIA .*510[^0]*.* 3 1 0 0 NVIDIA GT 520 .*NVIDIA .*GT *52.* 3 1 1 4.3 diff --git a/indra/newview/tests/gpus_results.txt b/indra/newview/tests/gpus_results.txt index 6d84e50e19..5ffbc0a9e5 100755 --- a/indra/newview/tests/gpus_results.txt +++ b/indra/newview/tests/gpus_results.txt @@ -1433,7 +1433,7 @@ Intel Intel(R) Graphics Media Accelerator HD Intel Intel(R) HD Graphics supported 2 1 4 Intel HD Graphics Intel Intel(R) HD Graphics 100 supported 2 1 4 Intel HD Graphics Intel Intel(R) HD Graphics 2000 supported 2 0 3.1 Intel HD Graphics 2000 -Intel Intel(R) HD Graphics 2500 supported 2 0 3.1 Intel HD Graphics 2500 +Intel Intel(R) HD Graphics 2500 supported 2 0 4.2 Intel HD Graphics 2500 Intel Intel(R) HD Graphics 3000 supported 3 1 3.1 Intel HD Graphics 3000 Intel Intel(R) HD Graphics 4000 supported 3 1 4.2 Intel HD Graphics 4000 Intel Intel(R) HD Graphics 4400 supported 3 0 4.2 Intel HD Graphics 4400 @@ -2097,29 +2097,29 @@ NVIDIA Corporation GeForce GT 335M/PCI/SSE2 NVIDIA Corporation GeForce GT 335M/PCIe/SSE2 supported 3 1 3.3 NVIDIA GT 330M NVIDIA Corporation GeForce GT 340/PCI/SSE2 supported 3 0 0 NVIDIA GT 340 NVIDIA Corporation GeForce GT 340/PCIe/SSE2 supported 3 0 0 NVIDIA GT 340 -NVIDIA Corporation GeForce GT 415/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 415 -NVIDIA Corporation GeForce GT 415/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GT 415 +NVIDIA Corporation GeForce GT 415/PCIe/SSE2 supported 3 1 4.3 NVIDIA GT 415 +NVIDIA Corporation GeForce GT 415/PCIe/SSE2/3DNOW! supported 3 1 4.3 NVIDIA GT 415 NVIDIA Corporation GeForce GT 415M/PCI/SSE2 supported 3 0 0 NVIDIA 410M NVIDIA Corporation GeForce GT 415M/PCIe/SSE2 supported 3 0 0 NVIDIA 410M -NVIDIA Corporation GeForce GT 420/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 420 -NVIDIA Corporation GeForce GT 420/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 420 -NVIDIA Corporation GeForce GT 420/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GT 420 -NVIDIA Corporation GeForce GT 420M/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 420M -NVIDIA Corporation GeForce GT 420M/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 420M -NVIDIA Corporation GeForce GT 425M/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 420M -NVIDIA Corporation GeForce GT 425M/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 420M -NVIDIA Corporation GeForce GT 430/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 430 -NVIDIA Corporation GeForce GT 430/PCI/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GT 430 -NVIDIA Corporation GeForce GT 430/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 430 -NVIDIA Corporation GeForce GT 430/PCIe/SSE2/3DNOW! supported 3 1 4.2 NVIDIA GT 430 -NVIDIA Corporation GeForce GT 435M/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 430M -NVIDIA Corporation GeForce GT 435M/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 430M -NVIDIA Corporation GeForce GT 440/PCI/SSE2 supported 4 1 4.2 NVIDIA GT 440 -NVIDIA Corporation GeForce GT 440/PCI/SSE2/3DNOW! supported 4 1 4.2 NVIDIA GT 440 -NVIDIA Corporation GeForce GT 440/PCIe/SSE2 supported 4 1 4.2 NVIDIA GT 440 -NVIDIA Corporation GeForce GT 440/PCIe/SSE2/3DNOW! supported 4 1 4.2 NVIDIA GT 440 -NVIDIA Corporation GeForce GT 445M/PCI/SSE2 supported 3 1 4.2 NVIDIA GT 440M -NVIDIA Corporation GeForce GT 445M/PCIe/SSE2 supported 3 1 4.2 NVIDIA GT 440M +NVIDIA Corporation GeForce GT 420/PCI/SSE2 supported 3 1 4.3 NVIDIA GT 420 +NVIDIA Corporation GeForce GT 420/PCIe/SSE2 supported 3 1 4.3 NVIDIA GT 420 +NVIDIA Corporation GeForce GT 420/PCIe/SSE2/3DNOW! supported 3 1 4.3 NVIDIA GT 420 +NVIDIA Corporation GeForce GT 420M/PCI/SSE2 supported 3 1 4.3 NVIDIA GT 420M +NVIDIA Corporation GeForce GT 420M/PCIe/SSE2 supported 3 1 4.3 NVIDIA GT 420M +NVIDIA Corporation GeForce GT 425M/PCI/SSE2 supported 3 1 4.3 NVIDIA GT 420M +NVIDIA Corporation GeForce GT 425M/PCIe/SSE2 supported 3 1 4.3 NVIDIA GT 420M +NVIDIA Corporation GeForce GT 430/PCI/SSE2 supported 3 1 4.3 NVIDIA GT 430 +NVIDIA Corporation GeForce GT 430/PCI/SSE2/3DNOW! supported 3 1 4.3 NVIDIA GT 430 +NVIDIA Corporation GeForce GT 430/PCIe/SSE2 supported 3 1 4.3 NVIDIA GT 430 +NVIDIA Corporation GeForce GT 430/PCIe/SSE2/3DNOW! supported 3 1 4.3 NVIDIA GT 430 +NVIDIA Corporation GeForce GT 435M/PCI/SSE2 supported 3 1 4.3 NVIDIA GT 430M +NVIDIA Corporation GeForce GT 435M/PCIe/SSE2 supported 3 1 4.3 NVIDIA GT 430M +NVIDIA Corporation GeForce GT 440/PCI/SSE2 supported 4 1 4.3 NVIDIA GT 440 +NVIDIA Corporation GeForce GT 440/PCI/SSE2/3DNOW! supported 4 1 4.3 NVIDIA GT 440 +NVIDIA Corporation GeForce GT 440/PCIe/SSE2 supported 4 1 4.3 NVIDIA GT 440 +NVIDIA Corporation GeForce GT 440/PCIe/SSE2/3DNOW! supported 4 1 4.3 NVIDIA GT 440 +NVIDIA Corporation GeForce GT 445M/PCI/SSE2 supported 3 1 4.3 NVIDIA GT 440M +NVIDIA Corporation GeForce GT 445M/PCIe/SSE2 supported 3 1 4.3 NVIDIA GT 440M NVIDIA Corporation GeForce GT 520/PCI/SSE2 supported 3 1 4.3 NVIDIA GT 520 NVIDIA Corporation GeForce GT 520/PCI/SSE2/3DNOW! supported 3 1 4.3 NVIDIA GT 520 NVIDIA Corporation GeForce GT 520/PCIe/SSE2 supported 3 1 4.3 NVIDIA GT 520 @@ -2188,10 +2188,10 @@ NVIDIA Corporation GeForce GTS 350M/PCI/SSE2 NVIDIA Corporation GeForce GTS 350M/PCIe/SSE2 supported 4 1 3.3 NVIDIA GTS 350M NVIDIA Corporation GeForce GTS 360M/PCI/SSE2 supported 5 1 3.3 NVIDIA GTS 360M NVIDIA Corporation GeForce GTS 360M/PCIe/SSE2 supported 5 1 3.3 NVIDIA GTS 360M -NVIDIA Corporation GeForce GTS 450/PCI/SSE2 supported 4 1 4.2 NVIDIA GTS 450 -NVIDIA Corporation GeForce GTS 450/PCI/SSE2/3DNOW! supported 4 1 4.2 NVIDIA GTS 450 -NVIDIA Corporation GeForce GTS 450/PCIe/SSE2 supported 4 1 4.2 NVIDIA GTS 450 -NVIDIA Corporation GeForce GTS 450/PCIe/SSE2/3DNOW! supported 4 1 4.2 NVIDIA GTS 450 +NVIDIA Corporation GeForce GTS 450/PCI/SSE2 supported 4 1 4.3 NVIDIA GTS 450 +NVIDIA Corporation GeForce GTS 450/PCI/SSE2/3DNOW! supported 4 1 4.3 NVIDIA GTS 450 +NVIDIA Corporation GeForce GTS 450/PCIe/SSE2 supported 4 1 4.3 NVIDIA GTS 450 +NVIDIA Corporation GeForce GTS 450/PCIe/SSE2/3DNOW! supported 4 1 4.3 NVIDIA GTS 450 NVIDIA Corporation GeForce GTX 260/PCI/SSE2 supported 4 1 3.3 NVIDIA GTX 260 NVIDIA Corporation GeForce GTX 260/PCI/SSE2/3DNOW! supported 4 1 3.3 NVIDIA GTX 260 NVIDIA Corporation GeForce GTX 260/PCIe/SSE2 supported 4 1 3.3 NVIDIA GTX 260 @@ -2226,22 +2226,22 @@ NVIDIA Corporation GeForce GTX 460/PCI/SSE2 NVIDIA Corporation GeForce GTX 460/PCI/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 460 NVIDIA Corporation GeForce GTX 460/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 460 NVIDIA Corporation GeForce GTX 460/PCIe/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 460 -NVIDIA Corporation GeForce GTX 460M/PCI/SSE2 supported 4 1 4.2 NVIDIA GTX 460M -NVIDIA Corporation GeForce GTX 460M/PCIe/SSE2 supported 4 1 4.2 NVIDIA GTX 460M +NVIDIA Corporation GeForce GTX 460M/PCI/SSE2 supported 4 1 4.3 NVIDIA GTX 460M +NVIDIA Corporation GeForce GTX 460M/PCIe/SSE2 supported 4 1 4.3 NVIDIA GTX 460M NVIDIA Corporation GeForce GTX 465/PCI/SSE2 supported 5 1 4.3 NVIDIA GTX 460 NVIDIA Corporation GeForce GTX 465/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 460 NVIDIA Corporation GeForce GTX 465/PCIe/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 460 -NVIDIA Corporation GeForce GTX 470/PCI/SSE2 supported 5 1 4.2 NVIDIA GTX 470 -NVIDIA Corporation GeForce GTX 470/PCI/SSE2/3DNOW! supported 5 1 4.2 NVIDIA GTX 470 -NVIDIA Corporation GeForce GTX 470/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 470 -NVIDIA Corporation GeForce GTX 470/PCIe/SSE2/3DNOW! supported 5 1 4.2 NVIDIA GTX 470 -NVIDIA Corporation GeForce GTX 470M/PCI/SSE2 supported 3 0 4.2 NVIDIA GTX 470M -NVIDIA Corporation GeForce GTX 480/PCI/SSE2 supported 5 1 4.2 NVIDIA GTX 480 -NVIDIA Corporation GeForce GTX 480/PCIe/SSE2 supported 5 1 4.2 NVIDIA GTX 480 -NVIDIA Corporation GeForce GTX 480/PCIe/SSE2/3DNOW! supported 5 1 4.2 NVIDIA GTX 480 -NVIDIA Corporation GeForce GTX 480M/PCIe/SSE2 supported 3 1 4.2 NVIDIA GTX 480M -NVIDIA Corporation GeForce GTX 485M/PCI/SSE2 supported 3 1 4.2 NVIDIA GTX 480M -NVIDIA Corporation GeForce GTX 485M/PCIe/SSE2 supported 3 1 4.2 NVIDIA GTX 480M +NVIDIA Corporation GeForce GTX 470/PCI/SSE2 supported 5 1 4.3 NVIDIA GTX 470 +NVIDIA Corporation GeForce GTX 470/PCI/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 470 +NVIDIA Corporation GeForce GTX 470/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 470 +NVIDIA Corporation GeForce GTX 470/PCIe/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 470 +NVIDIA Corporation GeForce GTX 470M/PCI/SSE2 supported 3 0 4.3 NVIDIA GTX 470M +NVIDIA Corporation GeForce GTX 480/PCI/SSE2 supported 5 1 4.3 NVIDIA GTX 480 +NVIDIA Corporation GeForce GTX 480/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 480 +NVIDIA Corporation GeForce GTX 480/PCIe/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 480 +NVIDIA Corporation GeForce GTX 480M/PCIe/SSE2 supported 3 1 4.3 NVIDIA GTX 480M +NVIDIA Corporation GeForce GTX 485M/PCI/SSE2 supported 3 1 4.3 NVIDIA GTX 480M +NVIDIA Corporation GeForce GTX 485M/PCIe/SSE2 supported 3 1 4.3 NVIDIA GTX 480M NVIDIA Corporation GeForce GTX 550 Ti/PCI/SSE2 supported 5 1 4.3 NVIDIA GTX 550 NVIDIA Corporation GeForce GTX 550 Ti/PCI/SSE2/3DNOW! supported 5 1 4.3 NVIDIA GTX 550 NVIDIA Corporation GeForce GTX 550 Ti/PCIe/SSE2 supported 5 1 4.3 NVIDIA GTX 550 @@ -2433,21 +2433,21 @@ NVIDIA Corporation NVIDIA GeForce GT 220 OpenGL Engine NVIDIA Corporation NVIDIA GeForce GT 240 OpenGL Engine supported 4 1 3.3 NVIDIA GT 240 NVIDIA Corporation NVIDIA GeForce GT 320M OpenGL Engine supported 3 0 3.3 NVIDIA GT 320M NVIDIA Corporation NVIDIA GeForce GT 330M OpenGL Engine supported 3 1 3.3 NVIDIA GT 330M -NVIDIA Corporation NVIDIA GeForce GT 430 OpenGL Engine supported 3 1 4.2 NVIDIA GT 430 -NVIDIA Corporation NVIDIA GeForce GT 440 OpenGL Engine supported 4 1 4.2 NVIDIA GT 440 +NVIDIA Corporation NVIDIA GeForce GT 430 OpenGL Engine supported 3 1 4.3 NVIDIA GT 430 +NVIDIA Corporation NVIDIA GeForce GT 440 OpenGL Engine supported 4 1 4.3 NVIDIA GT 440 NVIDIA Corporation NVIDIA GeForce GT 520 OpenGL Engine supported 3 1 4.3 NVIDIA GT 520 NVIDIA Corporation NVIDIA GeForce GT 630 OpenGL Engine supported 3 0 4.3 NVIDIA GT 63x NVIDIA Corporation NVIDIA GeForce GT 640 OpenGL Engine supported 3 0 4.3 NVIDIA GT 64x NVIDIA Corporation NVIDIA GeForce GT 640M OpenGL Engine supported 3 0 4.3 NVIDIA GT 640M NVIDIA Corporation NVIDIA GeForce GT 650M OpenGL Engine supported 3 0 4.3 NVIDIA GT 650M NVIDIA Corporation NVIDIA GeForce GTS 250 OpenGL Engine supported 4 1 3.3 NVIDIA GTS 250 -NVIDIA Corporation NVIDIA GeForce GTS 450 OpenGL Engine supported 4 1 4.2 NVIDIA GTS 450 +NVIDIA Corporation NVIDIA GeForce GTS 450 OpenGL Engine supported 4 1 4.3 NVIDIA GTS 450 NVIDIA Corporation NVIDIA GeForce GTX 260 OpenGL Engine supported 4 1 3.3 NVIDIA GTX 260 NVIDIA Corporation NVIDIA GeForce GTX 280 OpenGL Engine supported 4 1 3.3 NVIDIA GTX 280 NVIDIA Corporation NVIDIA GeForce GTX 285 OpenGL Engine supported 4 1 3.3 NVIDIA GTX 280 NVIDIA Corporation NVIDIA GeForce GTX 460 OpenGL Engine supported 5 1 4.3 NVIDIA GTX 460 -NVIDIA Corporation NVIDIA GeForce GTX 470 OpenGL Engine supported 5 1 4.2 NVIDIA GTX 470 -NVIDIA Corporation NVIDIA GeForce GTX 480 OpenGL Engine supported 5 1 4.2 NVIDIA GTX 480 +NVIDIA Corporation NVIDIA GeForce GTX 470 OpenGL Engine supported 5 1 4.3 NVIDIA GTX 470 +NVIDIA Corporation NVIDIA GeForce GTX 480 OpenGL Engine supported 5 1 4.3 NVIDIA GTX 480 NVIDIA Corporation NVIDIA GeForce GTX 550 Ti OpenGL Engine supported 5 1 4.3 NVIDIA GTX 550 NVIDIA Corporation NVIDIA GeForce GTX 560 OpenGL Engine supported 5 1 4.3 NVIDIA GTX 560 NVIDIA Corporation NVIDIA GeForce GTX 560 Ti OpenGL Engine supported 5 1 4.3 NVIDIA GTX 560 @@ -2726,16 +2726,16 @@ NVIDIA GT 335M NVIDIA GT 340 supported 3 0 0 NVIDIA GT 340 NVIDIA GT 340M supported 4 1 3.3 NVIDIA GT 340M NVIDIA GT 415M supported 3 0 0 NVIDIA 410M -NVIDIA GT 420 supported 3 1 4.2 NVIDIA GT 420 -NVIDIA GT 420M supported 3 1 4.2 NVIDIA GT 420M -NVIDIA GT 425M supported 3 1 4.2 NVIDIA GT 420M -NVIDIA GT 430 supported 3 1 4.2 NVIDIA GT 430 -NVIDIA GT 430M supported 3 1 4.2 NVIDIA GT 430M -NVIDIA GT 435M supported 3 1 4.2 NVIDIA GT 430M -NVIDIA GT 440 supported 4 1 4.2 NVIDIA GT 440 -NVIDIA GT 440M supported 3 1 4.2 NVIDIA GT 440M -NVIDIA GT 445M supported 3 1 4.2 NVIDIA GT 440M -NVIDIA GT 450 supported 4 1 4.2 NVIDIA GT 450 +NVIDIA GT 420 supported 3 1 4.3 NVIDIA GT 420 +NVIDIA GT 420M supported 3 1 4.3 NVIDIA GT 420M +NVIDIA GT 425M supported 3 1 4.3 NVIDIA GT 420M +NVIDIA GT 430 supported 3 1 4.3 NVIDIA GT 430 +NVIDIA GT 430M supported 3 1 4.3 NVIDIA GT 430M +NVIDIA GT 435M supported 3 1 4.3 NVIDIA GT 430M +NVIDIA GT 440 supported 4 1 4.3 NVIDIA GT 440 +NVIDIA GT 440M supported 3 1 4.3 NVIDIA GT 440M +NVIDIA GT 445M supported 3 1 4.3 NVIDIA GT 440M +NVIDIA GT 450 supported 4 1 4.3 NVIDIA GT 450 NVIDIA GT 520 supported 3 1 4.3 NVIDIA GT 520 NVIDIA GT 520M supported 3 1 4.3 NVIDIA GT 520M NVIDIA GT 525M supported 3 1 4.3 NVIDIA GT 520M @@ -2761,7 +2761,7 @@ NVIDIA GTS 250 NVIDIA GTS 350M supported 4 1 3.3 NVIDIA GTS 350M NVIDIA GTS 360 supported 4 1 3.3 NVIDIA GTS 360 NVIDIA GTS 360M supported 5 1 3.3 NVIDIA GTS 360M -NVIDIA GTS 450 supported 4 1 4.2 NVIDIA GTS 450 +NVIDIA GTS 450 supported 4 1 4.3 NVIDIA GTS 450 NVIDIA GTX 260 supported 4 1 3.3 NVIDIA GTX 260 NVIDIA GTX 270 supported 4 0 3.3 NVIDIA GTX 270 NVIDIA GTX 275 supported 4 0 3.3 NVIDIA GTX 270 @@ -2770,13 +2770,13 @@ NVIDIA GTX 285 NVIDIA GTX 290 supported 5 0 3.3 NVIDIA GTX 290 NVIDIA GTX 295 supported 5 0 3.3 NVIDIA GTX 290 NVIDIA GTX 460 supported 5 1 4.3 NVIDIA GTX 460 -NVIDIA GTX 460M supported 4 1 4.2 NVIDIA GTX 460M +NVIDIA GTX 460M supported 4 1 4.3 NVIDIA GTX 460M NVIDIA GTX 465 supported 5 1 4.3 NVIDIA GTX 460 -NVIDIA GTX 470 supported 5 1 4.2 NVIDIA GTX 470 -NVIDIA GTX 470M supported 3 0 4.2 NVIDIA GTX 470M -NVIDIA GTX 480 supported 5 1 4.2 NVIDIA GTX 480 -NVIDIA GTX 480M supported 3 1 4.2 NVIDIA GTX 480M -NVIDIA GTX 485M supported 3 1 4.2 NVIDIA GTX 480M +NVIDIA GTX 470 supported 5 1 4.3 NVIDIA GTX 470 +NVIDIA GTX 470M supported 3 0 4.3 NVIDIA GTX 470M +NVIDIA GTX 480 supported 5 1 4.3 NVIDIA GTX 480 +NVIDIA GTX 480M supported 3 1 4.3 NVIDIA GTX 480M +NVIDIA GTX 485M supported 3 1 4.3 NVIDIA GTX 480M NVIDIA GTX 550 supported 5 1 4.3 NVIDIA GTX 550 NVIDIA GTX 560 supported 5 1 4.3 NVIDIA GTX 560 NVIDIA GTX 560 Ti supported 5 1 4.3 NVIDIA GTX 560 -- cgit v1.2.3 From ba7a564700ba20c6ece7ab16197c2415ebec42cb Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Thu, 3 Oct 2013 18:21:19 -0400 Subject: improve preference label for fly/jump --- indra/newview/skins/default/xui/en/panel_preferences_move.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/skins/default/xui/en/panel_preferences_move.xml b/indra/newview/skins/default/xui/en/panel_preferences_move.xml index 198fcf9355..8794e3bf95 100755 --- a/indra/newview/skins/default/xui/en/panel_preferences_move.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_move.xml @@ -133,7 +133,7 @@ control_name="AutomaticFly" follows="left|top" height="20" - label="Fly/land on holding up/down" + label="Hold jump or crouch key to start or stop flying" layout="topleft" left_delta="0" name="automatic_fly" @@ -270,4 +270,4 @@ function="Floater.Show" parameter="pref_joystick" /> - \ No newline at end of file + -- cgit v1.2.3 From ff8b002c3b2bc68bdf4b88c1687a711d2d7c0ca6 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Thu, 10 Oct 2013 13:56:06 -0500 Subject: Quite down log spam from loading shaders. Up bone cap to 64 for rigged meshes. --- indra/llrender/llglslshader.cpp | 9 +- indra/llrender/llshadermgr.cpp | 30 +++++-- indra/llrender/llshadermgr.h | 3 +- .../shaders/class1/avatar/objectSkinV.glsl | 38 +++++++-- .../shaders/class1/deferred/alphaF.glsl | 1 + indra/newview/lldrawpoolavatar.cpp | 40 ++++++++- indra/newview/llviewermenu.cpp | 4 + indra/newview/llvoavatar.cpp | 96 +++++++++++++++++++++- indra/newview/llvoavatar.h | 1 + indra/newview/pipeline.h | 19 +++-- indra/newview/skins/default/xui/en/menu_viewer.xml | 10 +++ 11 files changed, 216 insertions(+), 35 deletions(-) diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp index 35620bb656..1c50a51d02 100755 --- a/indra/llrender/llglslshader.cpp +++ b/indra/llrender/llglslshader.cpp @@ -717,7 +717,14 @@ BOOL LLGLSLShader::mapUniforms(const vector * uniforms) BOOL LLGLSLShader::link(BOOL suppress_errors) { - return LLShaderMgr::instance()->linkProgramObject(mProgramObject, suppress_errors); + BOOL success = LLShaderMgr::instance()->linkProgramObject(mProgramObject, suppress_errors); + + if (!suppress_errors) + { + LLShaderMgr::instance()->dumpObjectLog(mProgramObject, !success, mName); + } + + return success; } void LLGLSLShader::bind() diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp index d230574752..6e04fc82df 100755 --- a/indra/llrender/llshadermgr.cpp +++ b/indra/llrender/llshadermgr.cpp @@ -505,9 +505,25 @@ static std::string get_object_log(GLhandleARB ret) return res; } -void LLShaderMgr::dumpObjectLog(GLhandleARB ret, BOOL warns) +void LLShaderMgr::dumpObjectLog(GLhandleARB ret, BOOL warns, const std::string& filename) { std::string log = get_object_log(ret); + + if (log.length() > 0 || warns) + { + if (!filename.empty()) + { + if (warns) + { + LL_WARNS("ShaderLoading") << "From " << filename << ":" << LL_ENDL; + } + else + { + LL_INFOS("ShaderLoading") << "From " << filename << ":" << LL_ENDL; + } + } + } + if ( log.length() > 0 ) { if (warns) @@ -558,7 +574,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade file = LLFile::fopen(fname.str(), "r"); /* Flawfinder: ignore */ if (file) { - LL_INFOS("ShaderLoading") << "Loading file: shaders/class" << gpu_class << "/" << filename << " (Want class " << gpu_class << ")" << LL_ENDL; + LL_DEBUGS("ShaderLoading") << "Loading file: shaders/class" << gpu_class << "/" << filename << " (Want class " << gpu_class << ")" << LL_ENDL; break; // done } } @@ -812,8 +828,8 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade if (error != GL_NO_ERROR || success == GL_FALSE) { //an error occured, print log - LL_WARNS("ShaderLoading") << "GLSL Compilation Error: (" << error << ") in " << filename << LL_ENDL; - dumpObjectLog(ret); + LL_WARNS("ShaderLoading") << "GLSL Compilation Error:" << LL_ENDL; + dumpObjectLog(ret, TRUE, filename); #if LL_WINDOWS std::stringstream ostr; //dump shader source for debugging @@ -938,11 +954,6 @@ BOOL LLShaderMgr::linkProgramObject(GLhandleARB obj, BOOL suppress_errors) suppress_errors = FALSE; } #endif - if (!suppress_errors) - { - dumpObjectLog(obj, !success); - } - return success; } @@ -1146,6 +1157,7 @@ void LLShaderMgr::initAttribsAndUniforms() mReservedUniforms.push_back("env_intensity"); mReservedUniforms.push_back("matrixPalette"); + mReservedUniforms.push_back("translationPalette"); mReservedUniforms.push_back("screenTex"); mReservedUniforms.push_back("screenDepth"); diff --git a/indra/llrender/llshadermgr.h b/indra/llrender/llshadermgr.h index 51c27fc8b6..394b38f832 100755 --- a/indra/llrender/llshadermgr.h +++ b/indra/llrender/llshadermgr.h @@ -176,6 +176,7 @@ public: ENVIRONMENT_INTENSITY, AVATAR_MATRIX, + AVATAR_TRANSLATION, WATER_SCREENTEX, WATER_SCREENDEPTH, @@ -224,7 +225,7 @@ DISPLAY_GAMMA, virtual void initAttribsAndUniforms(void); BOOL attachShaderFeatures(LLGLSLShader * shader); - void dumpObjectLog(GLhandleARB ret, BOOL warns = TRUE); + void dumpObjectLog(GLhandleARB ret, BOOL warns = TRUE, const std::string& filename = ""); BOOL linkProgramObject(GLhandleARB obj, BOOL suppress_errors = FALSE); BOOL validateProgramObject(GLhandleARB obj); GLhandleARB loadShaderFile(const std::string& filename, S32 & shader_level, GLenum type, boost::unordered_map* defines = NULL, S32 texture_index_channels = -1); diff --git a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl index efd0d03965..3bbcf32482 100755 --- a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl @@ -26,7 +26,9 @@ ATTRIBUTE vec4 weight4; -uniform mat4 matrixPalette[32]; +uniform mat3 matrixPalette[64]; +uniform vec3 translationPalette[64]; + mat4 getObjectSkinnedTransform() { @@ -34,15 +36,35 @@ mat4 getObjectSkinnedTransform() vec4 w = fract(weight4); vec4 index = floor(weight4); - + + index = min(index, vec4(63.0)); + index = max(index, vec4( 0.0)); + float scale = 1.0/(w.x+w.y+w.z+w.w); w *= scale; - - mat4 mat = matrixPalette[int(index.x)]*w.x; - mat += matrixPalette[int(index.y)]*w.y; - mat += matrixPalette[int(index.z)]*w.z; - mat += matrixPalette[int(index.w)]*w.w; + + int i1 = int(index.x); + int i2 = int(index.y); + int i3 = int(index.z); + int i4 = int(index.w); - return mat; + mat3 mat = matrixPalette[i1]*w.x; + mat += matrixPalette[i2]*w.y; + mat += matrixPalette[i3]*w.z; + mat += matrixPalette[i4]*w.w; + + vec3 trans = translationPalette[i1]*w.x; + trans += translationPalette[i2]*w.y; + trans += translationPalette[i3]*w.z; + trans += translationPalette[i4]*w.w; + + mat4 ret; + + ret[0] = vec4(mat[0], 0); + ret[1] = vec4(mat[1], 0); + ret[2] = vec4(mat[2], 0); + ret[3] = vec4(trans, 1.0); + + return ret; } diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl index e5f7366b70..2b5f001873 100755 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl @@ -534,6 +534,7 @@ void main() #ifdef FOR_IMPOSTOR vec4 color; color.rgb = diff.rgb; + color.a = 1.0; #ifdef USE_VERTEX_COLOR float final_alpha = diff.a * vertex_color.a; diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index f622d5a63a..e77ed27fa2 100755 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -1708,9 +1708,9 @@ void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow) { if (sShaderLevel > 0) { //upload matrix palette to shader - LLMatrix4 mat[32]; + LLMatrix4 mat[64]; - U32 count = llmin((U32) skin->mJointNames.size(), (U32) 32); + U32 count = llmin((U32) skin->mJointNames.size(), (U32) 64); for (U32 i = 0; i < count; ++i) { @@ -1724,10 +1724,42 @@ void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow) stop_glerror(); - LLDrawPoolAvatar::sVertexProgram->uniformMatrix4fv(LLViewerShaderMgr::AVATAR_MATRIX, + F32 mp[64*9]; + + F32 transp[64*3]; + + for (U32 i = 0; i < count; ++i) + { + F32* m = (F32*) mat[i].mMatrix; + + U32 idx = i*9; + + mp[idx+0] = m[0]; + mp[idx+1] = m[1]; + mp[idx+2] = m[2]; + + mp[idx+3] = m[4]; + mp[idx+4] = m[5]; + mp[idx+5] = m[6]; + + mp[idx+6] = m[8]; + mp[idx+7] = m[9]; + mp[idx+8] = m[10]; + + idx = i*3; + + transp[idx+0] = m[12]; + transp[idx+1] = m[13]; + transp[idx+2] = m[14]; + } + + LLDrawPoolAvatar::sVertexProgram->uniformMatrix3fv(LLViewerShaderMgr::AVATAR_MATRIX, count, FALSE, - (GLfloat*) mat[0].mMatrix); + (GLfloat*) mp); + + LLDrawPoolAvatar::sVertexProgram->uniform3fv(LLShaderMgr::AVATAR_TRANSLATION, count, transp); + stop_glerror(); } diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index ac2940fcfc..fb07ab8fbe 100755 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -1025,6 +1025,10 @@ U32 info_display_from_string(std::string info_display) { return LLPipeline::RENDER_DEBUG_AVATAR_VOLUME; } + else if ("joints" == info_display) + { + return LLPipeline::RENDER_DEBUG_AVATAR_JOINTS; + } else if ("raycast" == info_display) { return LLPipeline::RENDER_DEBUG_RAYCAST; diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index fe035a0a7f..bd33ddf1a5 100755 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -1392,9 +1392,11 @@ void LLVOAvatar::getSpatialExtents(LLVector4a& newMin, LLVector4a& newMax) //----------------------------------------------------------------------------- void LLVOAvatar::renderCollisionVolumes() { + std::ostringstream ostr; for (S32 i = 0; i < mNumCollisionVolumes; i++) { mCollisionVolumes[i].renderCollision(); + ostr << mCollisionVolumes[i].getName() << ", "; } if (mNameText.notNull()) @@ -1403,6 +1405,96 @@ void LLVOAvatar::renderCollisionVolumes() mNameText->lineSegmentIntersect(unused, unused, unused, TRUE); } + + mDebugText.clear(); + addDebugText(ostr.str()); +} + +void LLVOAvatar::renderJoints() +{ + std::ostringstream ostr; + std::ostringstream nullstr; + + for (joint_map_t::iterator iter = mJointMap.begin(); iter != mJointMap.end(); ++iter) + { + LLJoint* jointp = iter->second; + if (!jointp) + { + nullstr << iter->first << " is NULL" << std::endl; + continue; + } + + ostr << jointp->getName() << ", "; + + jointp->updateWorldMatrix(); + + gGL.pushMatrix(); + gGL.multMatrix( &jointp->getXform()->getWorldMatrix().mMatrix[0][0] ); + + gGL.diffuseColor3f( 1.f, 0.f, 1.f ); + + gGL.begin(LLRender::LINES); + + LLVector3 v[] = + { + LLVector3(1,0,0), + LLVector3(-1,0,0), + LLVector3(0,1,0), + LLVector3(0,-1,0), + + LLVector3(0,0,-1), + LLVector3(0,0,1), + }; + + //sides + gGL.vertex3fv(v[0].mV); + gGL.vertex3fv(v[2].mV); + + gGL.vertex3fv(v[0].mV); + gGL.vertex3fv(v[3].mV); + + gGL.vertex3fv(v[1].mV); + gGL.vertex3fv(v[2].mV); + + gGL.vertex3fv(v[1].mV); + gGL.vertex3fv(v[3].mV); + + + //top + gGL.vertex3fv(v[0].mV); + gGL.vertex3fv(v[4].mV); + + gGL.vertex3fv(v[1].mV); + gGL.vertex3fv(v[4].mV); + + gGL.vertex3fv(v[2].mV); + gGL.vertex3fv(v[4].mV); + + gGL.vertex3fv(v[3].mV); + gGL.vertex3fv(v[4].mV); + + + //bottom + gGL.vertex3fv(v[0].mV); + gGL.vertex3fv(v[5].mV); + + gGL.vertex3fv(v[1].mV); + gGL.vertex3fv(v[5].mV); + + gGL.vertex3fv(v[2].mV); + gGL.vertex3fv(v[5].mV); + + gGL.vertex3fv(v[3].mV); + gGL.vertex3fv(v[5].mV); + + gGL.end(); + + gGL.popMatrix(); + } + + mDebugText.clear(); + addDebugText(ostr.str()); + addDebugText(nullstr.str()); } BOOL LLVOAvatar::lineSegmentIntersect(const LLVector4a& start, const LLVector4a& end, @@ -3077,9 +3169,6 @@ void LLVOAvatar::forceUpdateVisualMuteSettings() //------------------------------------------------------------------------ BOOL LLVOAvatar::updateCharacter(LLAgent &agent) { - // clear debug text - mDebugText.clear(); - if (gSavedSettings.getBOOL("DebugAvatarAppearanceMessage")) { S32 central_bake_version = -1; @@ -3588,6 +3677,7 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent) { setDebugText(mDebugText); } + mDebugText.clear(); //mesh vertices need to be reskinned mNeedsSkin = TRUE; diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 931e65b3ea..5d897ee44e 100755 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -406,6 +406,7 @@ public: F32 getLastSkinTime() { return mLastSkinTime; } U32 renderTransparent(BOOL first_pass); void renderCollisionVolumes(); + void renderJoints(); static void deleteCachedImages(bool clearAll=true); static void destroyGL(); static void restoreGL(); diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index 9aeb2d4978..1c7154d413 100755 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -535,15 +535,16 @@ public: RENDER_DEBUG_SHADOW_FRUSTA = 0x00040000, RENDER_DEBUG_SCULPTED = 0x00080000, RENDER_DEBUG_AVATAR_VOLUME = 0x00100000, - RENDER_DEBUG_BUILD_QUEUE = 0x00200000, - RENDER_DEBUG_AGENT_TARGET = 0x00400000, - RENDER_DEBUG_UPDATE_TYPE = 0x00800000, - RENDER_DEBUG_PHYSICS_SHAPES = 0x01000000, - RENDER_DEBUG_NORMALS = 0x02000000, - RENDER_DEBUG_LOD_INFO = 0x04000000, - RENDER_DEBUG_RENDER_COMPLEXITY = 0x08000000, - RENDER_DEBUG_ATTACHMENT_BYTES = 0x10000000, - RENDER_DEBUG_TEXEL_DENSITY = 0x20000000 + RENDER_DEBUG_AVATAR_JOINTS = 0x00200000, + RENDER_DEBUG_BUILD_QUEUE = 0x00400000, + RENDER_DEBUG_AGENT_TARGET = 0x00800000, + RENDER_DEBUG_UPDATE_TYPE = 0x01000000, + RENDER_DEBUG_PHYSICS_SHAPES = 0x02000000, + RENDER_DEBUG_NORMALS = 0x04000000, + RENDER_DEBUG_LOD_INFO = 0x08000000, + RENDER_DEBUG_RENDER_COMPLEXITY = 0x10000000, + RENDER_DEBUG_ATTACHMENT_BYTES = 0x20000000, + RENDER_DEBUG_TEXEL_DENSITY = 0x40000000 }; public: diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index d635b8ee93..7d28d87f63 100755 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -2571,6 +2571,16 @@ function="Advanced.ToggleInfoDisplay" parameter="collision skeleton" /> + + + + -- cgit v1.2.3 From 3aea5a5a6ab0e6d96fe581a9bab9896956129ba3 Mon Sep 17 00:00:00 2001 From: JJ Linden Date: Thu, 10 Oct 2013 16:44:05 -0700 Subject: adding quicklinks for extra packages:w --- build.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/build.sh b/build.sh index 4875ef39f7..784b4b674d 100755 --- a/build.sh +++ b/build.sh @@ -371,6 +371,7 @@ then if [ x"$package" != x ] then upload_item installer "$package" binary/octet-stream + upload_item quicklink "$package" binary/octet-stream else record_failure "Failed to upload $package_id package." fi -- cgit v1.2.3 From 2f0d9b78d28deba58988012a9940cb4f232ec2f9 Mon Sep 17 00:00:00 2001 From: Graham Linden Date: Wed, 16 Oct 2013 15:49:14 -0700 Subject: Fix merge error in llvoavatar --- indra/newview/llvoavatar.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index e343481b32..fe035a0a7f 100755 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -7272,7 +7272,7 @@ void LLVOAvatar::onBakedTextureMasksLoaded( BOOL success, LLViewerFetchedTexture } U32 gl_name; - LLImageGL::generateTextures(LLTexUnit::TT_TEXTURE, GL_ALPHA8, 1, &gl_name ); + LLImageGL::generateTextures(1, &gl_name ); stop_glerror(); gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, gl_name); @@ -7309,7 +7309,7 @@ void LLVOAvatar::onBakedTextureMasksLoaded( BOOL success, LLViewerFetchedTexture maskData->mLastDiscardLevel = discard_level; if (self->mBakedTextureDatas[baked_index].mMaskTexName) { - LLImageGL::deleteTextures(LLTexUnit::TT_TEXTURE, 0, -1, 1, &(self->mBakedTextureDatas[baked_index].mMaskTexName)); + LLImageGL::deleteTextures(1, &(self->mBakedTextureDatas[baked_index].mMaskTexName)); } self->mBakedTextureDatas[baked_index].mMaskTexName = gl_name; found_texture_id = true; -- cgit v1.2.3 From 356db2b9b9e2c04d50cc37d0101f559b190f3578 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Mon, 21 Oct 2013 12:55:51 -0500 Subject: MAINT-3311 Add avatar_lad and avatar_skeleton changes from Jeremiah --- indra/newview/character/avatar_lad.xml | 148 +++++++++++++++++++++++++--- indra/newview/character/avatar_skeleton.xml | 10 +- 2 files changed, 144 insertions(+), 14 deletions(-) diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml index e5b385f4aa..b615d8d469 100755 --- a/indra/newview/character/avatar_lad.xml +++ b/indra/newview/character/avatar_lad.xml @@ -3826,6 +3826,10 @@ name="BELLY" scale="0.075 0.04 0.03" pos="0.07 0 -0.07"/> + @@ -3844,7 +3848,16 @@ camera_elevation=".1" camera_distance="1" camera_angle="15"> - + + + + - + + + + - + + + + + + + - + + + + + + @@ -4162,7 +4220,16 @@ value_max="1.3" camera_elevation=".3" camera_distance=".8"> - + + + + - + + + + This resident has turned on 'Do Not Disturb' and will see your message later. + + [hour12, datetime, slt]:[min, datetime, slt] [ampm, datetime, slt] [timezone,datetime, slt] + (By name) (Resident) -- cgit v1.2.3 From 976ad95977ab752231abf7f774e28ca167a6db39 Mon Sep 17 00:00:00 2001 From: Aura Linden Date: Tue, 5 Nov 2013 13:01:25 -0800 Subject: Shot in the dark patch for MAINT-3353 backported from viewer-tiger --- indra/llwindow/llwindowcallbacks.cpp | 1 + indra/llwindow/llwindowmacosx.cpp | 11 ++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/indra/llwindow/llwindowcallbacks.cpp b/indra/llwindow/llwindowcallbacks.cpp index 9712ae1d91..eadff8a6b4 100755 --- a/indra/llwindow/llwindowcallbacks.cpp +++ b/indra/llwindow/llwindowcallbacks.cpp @@ -122,6 +122,7 @@ void LLWindowCallbacks::handleResize(LLWindow *window, const S32 width, const S3 void LLWindowCallbacks::handleFocus(LLWindow *window) { + LL_WARNS("COCOA") << "Called handleFocus proto" << LL_ENDL; } void LLWindowCallbacks::handleFocusLost(LLWindow *window) diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp index d5b62bd3a7..11c0b51086 100755 --- a/indra/llwindow/llwindowmacosx.cpp +++ b/indra/llwindow/llwindowmacosx.cpp @@ -331,7 +331,16 @@ void callMouseExit() void callWindowFocus() { - gWindowImplementation->getCallbacks()->handleFocus(gWindowImplementation); + if ( gWindowImplementation && gWindowImplementation->getCallbacks() ) + { + gWindowImplementation->getCallbacks()->handleFocus (gWindowImplementation); + } + else + { + LL_WARNS("COCOA") << "Window Implementation or callbacks not yet initialized." << LL_ENDL; + } + + } void callWindowUnfocus() -- cgit v1.2.3 From 7d4deed8bef62cee1fc782a9676505136b231412 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Tue, 5 Nov 2013 17:47:00 -0500 Subject: STORM-1980/1983 Attempt to test alert message with a new uploaded sound --- indra/newview/llviewermessage.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index bcd535bb90..51260c98cd 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -5960,21 +5960,21 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem) gViewerWindow->saveSnapshot(snap_filename, gViewerWindow->getWindowWidthRaw(), gViewerWindow->getWindowHeightRaw(), FALSE, FALSE); } - if (notificationID == "RegionRestartMinutes" || - notificationID == "RegionRestartSeconds") - { - // Get current UTC time, adjusted for the user's clock - // being off. - time_t utc_time; - utc_time = time_corrected(); - std::string timeStr = LLTrans::getString("ViewerMessageTime"); - LLSD substitution; - substitution["datetime"] = (S32) utc_time; - LLStringUtil::format(timeStr, substitution); - llsdBlock["TIME"] = timeStr; + if (notificationID == "RegionRestartMinutes" || + notificationID == "RegionRestartSeconds") + { + // Get current UTC time, adjusted for the user's clock + // being off. + time_t utc_time; + utc_time = time_corrected(); + std::string timeStr = LLTrans::getString("ViewerMessageTime"); + LLSD substitution; + substitution["datetime"] = (S32) utc_time; + LLStringUtil::format(timeStr, substitution); + llsdBlock["TIME"] = timeStr; - send_sound_trigger(LLUUID(gSavedSettings.getString("UISndAlert")), 1.0f); - } + send_sound_trigger(LLUUID("4b315701-1972-9e23-cdd8-23cbc8cb0f42"), 1.0f); + } LLNotificationsUtil::add(notificationID, llsdBlock); return true; -- cgit v1.2.3 From 21ff4de02669f04ca9afec8d3f5aa0b68864fd13 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Tue, 5 Nov 2013 17:57:56 -0500 Subject: STORM-1980/1983 Revert previous change --- indra/newview/llviewermessage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 51260c98cd..f66b3ba805 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -5973,7 +5973,7 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem) LLStringUtil::format(timeStr, substitution); llsdBlock["TIME"] = timeStr; - send_sound_trigger(LLUUID("4b315701-1972-9e23-cdd8-23cbc8cb0f42"), 1.0f); + send_sound_trigger(LLUUID(gSavedSettings.getString("UISndAlert")), 1.0f); } LLNotificationsUtil::add(notificationID, llsdBlock); -- cgit v1.2.3 From aaf6c7954d83917d2c461bf606cac6b446a5a0ba Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Wed, 6 Nov 2013 11:42:48 +0200 Subject: MAINT-3374 FIXED Don't show username after display name if this setting is disabled. --- indra/llcommon/llavatarname.cpp | 17 ++++++++++++++++- indra/llcommon/llavatarname.h | 6 ++++++ indra/llmessage/llavatarnamecache.cpp | 9 +++++++++ indra/llmessage/llavatarnamecache.h | 2 ++ indra/newview/llfloaterpreference.cpp | 1 + 5 files changed, 34 insertions(+), 1 deletion(-) diff --git a/indra/llcommon/llavatarname.cpp b/indra/llcommon/llavatarname.cpp index 642bd82e90..d12f157910 100755 --- a/indra/llcommon/llavatarname.cpp +++ b/indra/llcommon/llavatarname.cpp @@ -44,6 +44,7 @@ static const std::string DISPLAY_NAME_EXPIRES("display_name_expires"); static const std::string DISPLAY_NAME_NEXT_UPDATE("display_name_next_update"); bool LLAvatarName::sUseDisplayNames = true; +bool LLAvatarName::sUseUsernames = true; // Minimum time-to-live (in seconds) for a name entry. // Avatar name should always guarantee to expire reasonably soon by default @@ -81,6 +82,16 @@ bool LLAvatarName::useDisplayNames() return sUseDisplayNames; } +void LLAvatarName::setUseUsernames(bool use) +{ + sUseUsernames = use; +} + +bool LLAvatarName::useUsernames() +{ + return sUseUsernames; +} + LLSD LLAvatarName::asLLSD() const { LLSD sd; @@ -168,7 +179,11 @@ std::string LLAvatarName::getCompleteName() const } else { - name = mDisplayName + " (" + mUsername + ")"; + name = mDisplayName; + if(sUseUsernames) + { + name += " (" + mUsername + ")"; + } } } else diff --git a/indra/llcommon/llavatarname.h b/indra/llcommon/llavatarname.h index 5d2fccc5ba..1cb3ae421f 100755 --- a/indra/llcommon/llavatarname.h +++ b/indra/llcommon/llavatarname.h @@ -54,6 +54,9 @@ public: static void setUseDisplayNames(bool use); static bool useDisplayNames(); + static void setUseUsernames(bool use); + static bool useUsernames(); + // A name object is valid if not temporary and not yet expired (default is expiration not checked) bool isValidName(F64 max_unrefreshed = 0.0f) const { return !mIsTemporaryName && (mExpires >= max_unrefreshed); } @@ -128,6 +131,9 @@ private: // Global flag indicating if display name should be used or not // This will affect the output of the high level "get" methods static bool sUseDisplayNames; + + // Flag indicating if username should be shown after display name or not + static bool sUseUsernames; }; #endif diff --git a/indra/llmessage/llavatarnamecache.cpp b/indra/llmessage/llavatarnamecache.cpp index 9a68093427..31dd264021 100755 --- a/indra/llmessage/llavatarnamecache.cpp +++ b/indra/llmessage/llavatarnamecache.cpp @@ -680,6 +680,15 @@ void LLAvatarNameCache::setUseDisplayNames(bool use) } } +void LLAvatarNameCache::setUseUsernames(bool use) +{ + if (use != LLAvatarName::useUsernames()) + { + LLAvatarName::setUseUsernames(use); + mUseDisplayNamesSignal(); + } +} + void LLAvatarNameCache::erase(const LLUUID& agent_id) { sCache.erase(agent_id); diff --git a/indra/llmessage/llavatarnamecache.h b/indra/llmessage/llavatarnamecache.h index 2a8eb46187..3a19cee3ed 100755 --- a/indra/llmessage/llavatarnamecache.h +++ b/indra/llmessage/llavatarnamecache.h @@ -80,6 +80,8 @@ namespace LLAvatarNameCache // Set display name: flips the switch and triggers the callbacks. void setUseDisplayNames(bool use); + void setUseUsernames(bool use); + void insert(const LLUUID& agent_id, const LLAvatarName& av_name); void erase(const LLUUID& agent_id); diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 87ae36716d..c339ee3beb 100755 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -238,6 +238,7 @@ bool callback_clear_browser_cache(const LLSD& notification, const LLSD& response void handleNameTagOptionChanged(const LLSD& newvalue) { + LLAvatarNameCache::setUseUsernames(gSavedSettings.getBOOL("NameTagShowUsernames")); LLVOAvatar::invalidateNameTags(); } -- cgit v1.2.3 From b8f1e2a7704bdac5ef270be21918317a17f77b2a Mon Sep 17 00:00:00 2001 From: "jeremiah@lindenlab.com" Date: Wed, 6 Nov 2013 11:30:39 -0500 Subject: updated avatar files --- indra/newview/character/avatar_lad.xml | 24 ++++++++++-------------- indra/newview/character/avatar_skeleton.xml | 7 +++---- 2 files changed, 13 insertions(+), 18 deletions(-) mode change 100755 => 100644 indra/newview/character/avatar_lad.xml mode change 100755 => 100644 indra/newview/character/avatar_skeleton.xml diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml old mode 100755 new mode 100644 index b615d8d469..884d16b94b --- a/indra/newview/character/avatar_lad.xml +++ b/indra/newview/character/avatar_lad.xml @@ -3826,10 +3826,6 @@ name="BELLY" scale="0.075 0.04 0.03" pos="0.07 0 -0.07"/> - @@ -4080,10 +4076,6 @@ name="RIGHT_PEC" scale="0.0367 0.0367 0.016" pos="0.031 0.005 -0.013"/> - @@ -4252,11 +4244,11 @@ + pos="-0.01 -0.024 -0.05"/> + pos="-0.01 0.024 -0.05"/> @@ -4275,8 +4267,8 @@ + scale="0 0 0" + pos="0 0 0"/> @@ -4634,6 +4626,10 @@ name="PELVIS" scale="-0.01 0.0 0.0" pos="0.01 0 0.0"/> + diff --git a/indra/newview/character/avatar_skeleton.xml b/indra/newview/character/avatar_skeleton.xml old mode 100755 new mode 100644 index 48cf419246..7ab20f8c6b --- a/indra/newview/character/avatar_skeleton.xml +++ b/indra/newview/character/avatar_skeleton.xml @@ -1,13 +1,12 @@ - + - - - + + -- cgit v1.2.3 From 662efccfb821c2bf61c286aeec97563d7f95a9f8 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Wed, 6 Nov 2013 15:11:11 -0500 Subject: STORM-1980/1983 Add debug setting UISndRestart and value. This UUID will need to be replaced with an official UUID once one has been established. --- indra/newview/app_settings/settings.xml | 11 +++++++++++ indra/newview/llviewermessage.cpp | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 41aac583d7..be5f81e7e7 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -12621,6 +12621,17 @@ Value 00000000-0000-0000-0000-000000000000 + UISndRestart + + Comment + Sound file for region restarting (uuid for sound asset) + Persist + 1 + Type + String + Value + 4b315701-1972-9e23-cdd8-23cbc8cb0f42 + UISndSnapshot Comment diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index f66b3ba805..48bfdc03ac 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -5973,7 +5973,7 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem) LLStringUtil::format(timeStr, substitution); llsdBlock["TIME"] = timeStr; - send_sound_trigger(LLUUID(gSavedSettings.getString("UISndAlert")), 1.0f); + send_sound_trigger(LLUUID(gSavedSettings.getString("UISndRestart")), 1.0f); } LLNotificationsUtil::add(notificationID, llsdBlock); -- cgit v1.2.3 From 9ad67587b776fc9e8727ad6b79ed328cccbfbf93 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Thu, 7 Nov 2013 16:18:17 -0600 Subject: DRTVWR-338 Make an inocuous change to get a new build number out of TeamCity --- indra/newview/app_settings/settings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 1c532e957e..d9093c2a6d 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -9861,7 +9861,7 @@ RenderUseVAO Comment - [EXPERIMENTAL] Use GL Vertex Array Objects + [EXPERIMENTAL] Use GL Vertex Array Objects. Persist 1 Type -- cgit v1.2.3 From a8e74f20bac8c1cb708e645e460d9435a2fff1db Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Fri, 8 Nov 2013 12:32:36 +0200 Subject: MAINT-3400 FIXED Reshape IMSession floater after expanding participant list. --- indra/newview/llfloaterimsessiontab.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/indra/newview/llfloaterimsessiontab.cpp b/indra/newview/llfloaterimsessiontab.cpp index 0ccfdb9a7b..29511f56ff 100755 --- a/indra/newview/llfloaterimsessiontab.cpp +++ b/indra/newview/llfloaterimsessiontab.cpp @@ -825,6 +825,7 @@ void LLFloaterIMSessionTab::updateCallBtnState(bool callIsActive) void LLFloaterIMSessionTab::onSlide(LLFloaterIMSessionTab* self) { LLFloaterIMContainer* host_floater = dynamic_cast(self->getHost()); + bool should_be_expanded = false; if (host_floater) { // Hide the messages pane if a floater is hosted in the Conversations @@ -835,7 +836,7 @@ void LLFloaterIMSessionTab::onSlide(LLFloaterIMSessionTab* self) if (!self->mIsP2PChat) { // The state must toggle the collapsed state of the panel - bool should_be_expanded = self->mParticipantListPanel->isCollapsed(); + should_be_expanded = self->mParticipantListPanel->isCollapsed(); // Update the expand/collapse flag of the participant list panel and save it gSavedSettings.setBOOL("IMShowControlPanel", should_be_expanded); @@ -847,6 +848,10 @@ void LLFloaterIMSessionTab::onSlide(LLFloaterIMSessionTab* self) } self->assignResizeLimits(); + if (should_be_expanded) + { + self->forceReshape(); + } } void LLFloaterIMSessionTab::onCollapseToLine(LLFloaterIMSessionTab* self) -- cgit v1.2.3 From 66b6bffca92261d418f9888be4c3542554ddb4af Mon Sep 17 00:00:00 2001 From: Graham Linden Date: Fri, 8 Nov 2013 09:39:24 -0800 Subject: MAINT-3412 Fix Intel Iris recognizer to include optional Pro as is reported with integrated-only graphics on new MBP --- indra/newview/gpu_table.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt index e3dde3b092..8efc4ee87d 100755 --- a/indra/newview/gpu_table.txt +++ b/indra/newview/gpu_table.txt @@ -327,7 +327,7 @@ Intel HD Graphics 4600 .*Intel.*HD Graphics 46.* 3 1 0 4.2 Intel HD Graphics 4000 .*Intel.*HD Graphics 4.* 3 1 1 4.2 Intel Intel Iris Pro Graphics 5200 .*Intel.*Iris Pro Graphics 52.* 4 1 0 4 Intel Intel Iris Graphics 5100 .*Intel.*Iris Graphics 51.* 4 1 0 4 -Intel Intel Iris OpenGL Engine .*Intel.*Iris OpenGL.* 4 1 0 4 +Intel Intel Iris OpenGL Engine .*Intel.*Iris (Pro )*OpenGL.* 4 1 0 4 Intel HD Graphics 5000 .*Intel.*HD Graphics 5.* 4 1 0 4 Intel HD Graphics .*Intel.*HD Graphics.* 2 1 1 4 Intel Mobile 4 Series .*Intel.*Mobile.* 4 Series.* 0 1 1 2.1 -- cgit v1.2.3 From 19b2655a48696103fbccecbb0a672a9864980459 Mon Sep 17 00:00:00 2001 From: "Graham Madarasz (Graham Linden)" Date: Fri, 8 Nov 2013 10:11:22 -0800 Subject: MAINT-3155 redux moved reg for URL event handling to WillFinishLaunching instead of DidFinishLaunching while laughing at Apple --- indra/newview/llappdelegate-objc.mm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/indra/newview/llappdelegate-objc.mm b/indra/newview/llappdelegate-objc.mm index 91251ed7c0..988058aad3 100644 --- a/indra/newview/llappdelegate-objc.mm +++ b/indra/newview/llappdelegate-objc.mm @@ -40,6 +40,11 @@ [super dealloc]; } +- (void) applicationWillFinishLaunching:(NSNotification *)notification +{ + [[NSAppleEventManager sharedAppleEventManager] setEventHandler:self andSelector:@selector(handleGetURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL]; +} + - (void) applicationDidFinishLaunching:(NSNotification *)notification { frameTimer = nil; @@ -55,7 +60,7 @@ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(languageUpdated) name:@"NSTextInputContextKeyboardSelectionDidChangeNotification" object:nil]; - [[NSAppleEventManager sharedAppleEventManager] setEventHandler:self andSelector:@selector(handleGetURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL]; + // [[NSAppleEventManager sharedAppleEventManager] setEventHandler:self andSelector:@selector(handleGetURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL]; } - (void) handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent { -- cgit v1.2.3 From 3e429c1e11ab5d9a3279598fd671cee230d40afd Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Fri, 8 Nov 2013 16:15:36 -0500 Subject: STORM-1980/1983 Small XML cleanup. Changed notification type to Alert. Addes seconds field to notification message. --- indra/newview/llviewermessage.cpp | 2 +- indra/newview/skins/default/xui/en/notifications.xml | 6 ++---- indra/newview/skins/default/xui/en/strings.xml | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 48bfdc03ac..805b3aab18 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -5967,7 +5967,7 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem) // being off. time_t utc_time; utc_time = time_corrected(); - std::string timeStr = LLTrans::getString("ViewerMessageTime"); + std::string timeStr = LLTrans::getString("HMSTime"); LLSD substitution; substitution["datetime"] = (S32) utc_time; LLStringUtil::format(timeStr, substitution); diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index a0a5a0395a..083ff46ebb 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -6885,8 +6885,7 @@ This will add a bookmark in your inventory so you can quickly IM this Resident. icon="notify.tga" name="RegionRestartMinutes" priority="high" - sound="UISndAlert" - type="notify"> + type="alert"> [TIME] This region will restart in [MINUTES] minutes. If you stay in this region you will be logged out. @@ -6895,8 +6894,7 @@ If you stay in this region you will be logged out. icon="notify.tga" name="RegionRestartSeconds" priority="high" - sound="UISndAlert" - type="notify"> + type="alert"> [TIME] This region will restart in [SECONDS] seconds. If you stay in this region you will be logged out. diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 3fc1609cd4..4534434c46 100755 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -2552,7 +2552,7 @@ Drag folders to this area and click "Send to Marketplace" to list them for sale This resident has turned on 'Do Not Disturb' and will see your message later. - [hour12, datetime, slt]:[min, datetime, slt] [ampm, datetime, slt] [timezone,datetime, slt] + [hour12, datetime, slt]:[min, datetime, slt]:[second, datetime, slt] [ampm, datetime, slt] [timezone,datetime, slt] (By name) -- cgit v1.2.3 From 424e8687e443aad1b76be5ec54fee0ba9f22ef65 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Mon, 11 Nov 2013 15:25:46 -0500 Subject: Added tag 3.6.10-release for changeset 5b54b36862ff --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index c81c919d1a..d598ff1f62 100755 --- a/.hgtags +++ b/.hgtags @@ -468,3 +468,4 @@ bf6d453046011a11de2643fac610cc5258650f82 3.6.5-release ae457ece77001767ae9613148c495e7b98cc0f4a 3.6.7-release d40c66e410741de7e90b1ed6dac28dd8a2d7e1f6 3.6.8-release 70eda3721d36df3e00730629c42a1304e5bc65b8 3.6.9-release +5b54b36862ff8bc3b6935673c9d1c1f22ee8d521 3.6.10-release -- cgit v1.2.3 From b8cafb8e850c9bc65f61202d6caba5725a33aef7 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Mon, 11 Nov 2013 15:26:19 -0500 Subject: increment viewer version to 3.6.11 --- indra/newview/VIEWER_VERSION.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index c47e8b5872..e8b6c77dc9 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -3.6.10 +3.6.11 -- cgit v1.2.3 From ebc9bcbf69f7a519677a6522979a6bf6cbb04bb8 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Mon, 11 Nov 2013 15:26:55 -0500 Subject: convert dos line endings --- indra/newview/llvovolume.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 8677c02829..dfac77857c 100755 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -335,13 +335,13 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys, { mTextureAnimp = new LLViewerTextureAnim(this); } - else - { - if (!(mTextureAnimp->mMode & LLTextureAnim::SMOOTH)) - { - mTextureAnimp->reset(); - } - } + else + { + if (!(mTextureAnimp->mMode & LLTextureAnim::SMOOTH)) + { + mTextureAnimp->reset(); + } + } mTexAnimMode = 0; mTextureAnimp->unpackTAMessage(mesgsys, block_num); -- cgit v1.2.3 From 4be5d07acb3c62383de092d1df3f0a5e239ca607 Mon Sep 17 00:00:00 2001 From: "Graham Madarasz (Graham Linden)" Date: Mon, 11 Nov 2013 14:06:33 -0800 Subject: MAINT-3429 remove GeForce hack which is causing issues with auto-alpha masks in deferred --- indra/newview/lldrawpoolsimple.cpp | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/indra/newview/lldrawpoolsimple.cpp b/indra/newview/lldrawpoolsimple.cpp index 8926f64c64..0bc7ae766c 100755 --- a/indra/newview/lldrawpoolsimple.cpp +++ b/indra/newview/lldrawpoolsimple.cpp @@ -37,8 +37,6 @@ #include "llviewershadermgr.h" #include "llrender.h" -#define GE_FORCE_WORKAROUND LL_DARWIN - static LLGLSLShader* simple_shader = NULL; static LLGLSLShader* fullbright_shader = NULL; @@ -660,14 +658,6 @@ void LLDrawPoolFullbrightAlphaMask::beginPostDeferredPass(S32 pass) } else { - -// Work-around until we can figure out why the right shader causes -// the GeForce driver to go tango uniform on OS X 10.6.8 only -// -#if GE_FORCE_WORKAROUND - gObjectFullbrightAlphaMaskProgram.bind(); - gObjectFullbrightAlphaMaskProgram.uniform1f(LLShaderMgr::TEXTURE_GAMMA, 2.2f); -#else if (LLPipeline::sUnderWaterRender) { gDeferredFullbrightAlphaMaskWaterProgram.bind(); @@ -678,9 +668,7 @@ void LLDrawPoolFullbrightAlphaMask::beginPostDeferredPass(S32 pass) gDeferredFullbrightAlphaMaskProgram.bind(); gDeferredFullbrightAlphaMaskProgram.uniform1f(LLShaderMgr::TEXTURE_GAMMA, 2.2f); } -#endif } - } void LLDrawPoolFullbrightAlphaMask::renderPostDeferred(S32 pass) @@ -699,13 +687,6 @@ void LLDrawPoolFullbrightAlphaMask::endPostDeferredPass(S32 pass) } else { - -// Work-around until we can figure out why the right shader causes -// the GeForce driver to go tango uniform on OS X 10.6.8 only -// -#if GE_FORCE_WORKAROUND - gObjectFullbrightAlphaMaskProgram.unbind(); -#else if (LLPipeline::sUnderWaterRender) { gDeferredFullbrightAlphaMaskWaterProgram.unbind(); @@ -714,8 +695,6 @@ void LLDrawPoolFullbrightAlphaMask::endPostDeferredPass(S32 pass) { gDeferredFullbrightAlphaMaskProgram.unbind(); } -#endif - } LLRenderPass::endRenderPass(pass); } -- cgit v1.2.3 From 542aa66a0c99b4f678105dde5e1d6fefd8dbe562 Mon Sep 17 00:00:00 2001 From: maksymsproductengine Date: Tue, 12 Nov 2013 01:08:04 +0200 Subject: convert dos line endings --- indra/newview/llvovolume.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 8677c02829..dfac77857c 100755 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -335,13 +335,13 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys, { mTextureAnimp = new LLViewerTextureAnim(this); } - else - { - if (!(mTextureAnimp->mMode & LLTextureAnim::SMOOTH)) - { - mTextureAnimp->reset(); - } - } + else + { + if (!(mTextureAnimp->mMode & LLTextureAnim::SMOOTH)) + { + mTextureAnimp->reset(); + } + } mTexAnimMode = 0; mTextureAnimp->unpackTAMessage(mesgsys, block_num); -- cgit v1.2.3 From 742d866265a99b1cf916de7acb58e0f8314b950f Mon Sep 17 00:00:00 2001 From: maksymsproductengine Date: Tue, 12 Nov 2013 01:16:30 +0200 Subject: convert dos line endings --- indra/newview/llvovolume.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 8677c02829..dfac77857c 100755 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -335,13 +335,13 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys, { mTextureAnimp = new LLViewerTextureAnim(this); } - else - { - if (!(mTextureAnimp->mMode & LLTextureAnim::SMOOTH)) - { - mTextureAnimp->reset(); - } - } + else + { + if (!(mTextureAnimp->mMode & LLTextureAnim::SMOOTH)) + { + mTextureAnimp->reset(); + } + } mTexAnimMode = 0; mTextureAnimp->unpackTAMessage(mesgsys, block_num); -- cgit v1.2.3 From 89d5d01c412a8e0a3b4f2f2c9a504f0e3f609349 Mon Sep 17 00:00:00 2001 From: Richard Linden Date: Mon, 11 Nov 2013 18:41:25 -0800 Subject: MAINT-3432 FIX Help -> Report Bug should open jira with pre-populated fields moved viewer information strings into LLAppViewer replaced Help>Report a Bug with direct use of Jira link --- indra/newview/app_settings/settings.xml | 21 ++- indra/newview/llappviewer.cpp | 181 ++++++++++++++++++++- indra/newview/llappviewer.h | 6 + indra/newview/llfloaterabout.cpp | 179 +------------------- indra/newview/llviewermenu.cpp | 17 ++ .../newview/skins/default/xui/en/floater_about.xml | 58 +------ indra/newview/skins/default/xui/en/menu_viewer.xml | 3 +- indra/newview/skins/default/xui/en/strings.xml | 36 ++++ 8 files changed, 260 insertions(+), 241 deletions(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index db9edd1e86..e08eed83ec 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -3569,13 +3569,13 @@ FPSLogFrequency Comment - Seconds between display of FPS in log (0 for never) + Seconds between display of FPS in log (0 for never) Persist - 1 + 1 Type - F32 + F32 Value - 10.0 + 10.0 FilterItemsMaxTimePerFrameVisible @@ -9991,7 +9991,18 @@ Value 0 - RevokePermsOnStopAnimation + ReportBugURL + + Comment + URL used for filing bugs from viewer + Persist + 1 + Type + String + Value + https://jira.secondlife.com/secure/CreateIssueDetails!init.jspa?pid=10610&issuetype=1&environment=[ENVIRONMENT]&customfield_10253=[LOCATION] + + RevokePermsOnStopAnimation Comment Clear animation permssions when choosing "Stop Animating Me" diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 9a1a74bc0c..e3c89f1a5f 100755 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -40,6 +40,7 @@ #include "llagent.h" #include "llagentcamera.h" #include "llagentlanguage.h" +#include "llagentui.h" #include "llagentwearables.h" #include "llfloaterimcontainer.h" #include "llwindow.h" @@ -60,6 +61,7 @@ #include "llcurl.h" #include "llcalc.h" #include "llconversationlog.h" +#include "lldxhardware.h" #include "lltexturestats.h" #include "lltexturestats.h" #include "llviewerwindow.h" @@ -75,10 +77,10 @@ #include "lluicolortable.h" #include "llurldispatcher.h" #include "llurlhistory.h" -//#include "llfirstuse.h" #include "llrender.h" #include "llteleporthistory.h" #include "lltoast.h" +#include "llsdutil_math.h" #include "lllocationhistory.h" #include "llfasttimerview.h" #include "llvector4a.h" @@ -3261,6 +3263,183 @@ void LLAppViewer::writeDebugInfo() out_file.close(); } +LLSD LLAppViewer::getViewerInfo() const +{ + // The point of having one method build an LLSD info block and the other + // construct the user-visible About string is to ensure that the same info + // is available to a getInfo() caller as to the user opening + // LLFloaterAbout. + LLSD info; + LLSD version; + version.append(LLVersionInfo::getMajor()); + version.append(LLVersionInfo::getMinor()); + version.append(LLVersionInfo::getPatch()); + version.append(LLVersionInfo::getBuild()); + info["VIEWER_VERSION"] = version; + info["VIEWER_VERSION_STR"] = LLVersionInfo::getVersion(); + info["BUILD_DATE"] = __DATE__; + info["BUILD_TIME"] = __TIME__; + info["CHANNEL"] = LLVersionInfo::getChannel(); + + // return a URL to the release notes for this viewer, such as: + // http://wiki.secondlife.com/wiki/Release_Notes/Second Life Beta Viewer/2.1.0.123456 + std::string url = LLTrans::getString("RELEASE_NOTES_BASE_URL"); + if (! LLStringUtil::endsWith(url, "/")) + url += "/"; + url += LLURI::escape(LLVersionInfo::getChannel()) + "/"; + url += LLURI::escape(LLVersionInfo::getVersion()); + + info["VIEWER_RELEASE_NOTES_URL"] = url; + +#if LL_MSVC + info["COMPILER"] = "MSVC"; + info["COMPILER_VERSION"] = _MSC_VER; +#elif LL_GNUC + info["COMPILER"] = "GCC"; + info["COMPILER_VERSION"] = GCC_VERSION; +#endif + + // Position + LLViewerRegion* region = gAgent.getRegion(); + if (region) + { + LLVector3d pos = gAgent.getPositionGlobal(); + info["POSITION"] = ll_sd_from_vector3d(pos); + info["POSITION_LOCAL"] = ll_sd_from_vector3(gAgent.getPosAgentFromGlobal(pos)); + info["REGION"] = gAgent.getRegion()->getName(); + info["HOSTNAME"] = gAgent.getRegion()->getHost().getHostName(); + info["HOSTIP"] = gAgent.getRegion()->getHost().getString(); + info["SERVER_VERSION"] = gLastVersionChannel; + LLSLURL slurl; + LLAgentUI::buildSLURL(slurl); + info["SLURL"] = slurl.getSLURLString(); + } + + // CPU + info["CPU"] = gSysCPU.getCPUString(); + info["MEMORY_MB"] = LLSD::Integer(gSysMemory.getPhysicalMemoryKB() / 1024); + // Moved hack adjustment to Windows memory size into llsys.cpp + info["OS_VERSION"] = LLAppViewer::instance()->getOSInfo().getOSString(); + info["GRAPHICS_CARD_VENDOR"] = (const char*)(glGetString(GL_VENDOR)); + info["GRAPHICS_CARD"] = (const char*)(glGetString(GL_RENDERER)); + +#if LL_WINDOWS + LLSD driver_info = gDXHardware.getDisplayInfo(); + if (driver_info.has("DriverVersion")) + { + info["GRAPHICS_DRIVER_VERSION"] = driver_info["DriverVersion"]; + } +#endif + + info["OPENGL_VERSION"] = (const char*)(glGetString(GL_VERSION)); + info["LIBCURL_VERSION"] = LLCurl::getVersionString(); + info["J2C_VERSION"] = LLImageJ2C::getEngineInfo(); + bool want_fullname = true; + info["AUDIO_DRIVER_VERSION"] = gAudiop ? LLSD(gAudiop->getDriverName(want_fullname)) : LLSD(); + if(LLVoiceClient::getInstance()->voiceEnabled()) + { + LLVoiceVersionInfo version = LLVoiceClient::getInstance()->getVersion(); + std::ostringstream version_string; + version_string << version.serverType << " " << version.serverVersion << std::endl; + info["VOICE_VERSION"] = version_string.str(); + } + else + { + info["VOICE_VERSION"] = LLTrans::getString("NotConnected"); + } + + // TODO: Implement media plugin version query + info["QT_WEBKIT_VERSION"] = "4.7.1 (version number hard-coded)"; + + if (gPacketsIn > 0) + { + info["PACKETS_LOST"] = LLViewerStats::getInstance()->mPacketsLostStat.getCurrent(); + info["PACKETS_IN"] = F32(gPacketsIn); + info["PACKETS_PCT"] = 100.f*info["PACKETS_LOST"].asReal() / info["PACKETS_IN"].asReal(); + } + + if (mServerReleaseNotesURL.empty()) + { + if (gAgent.getRegion()) + { + info["SERVER_RELEASE_NOTES_URL"] = LLTrans::getString("RetrievingData"); + } + } + else if (LLStringUtil::startsWith(mServerReleaseNotesURL, "http")) // it's an URL + { + info["SERVER_RELEASE_NOTES_URL"] = "[" + LLWeb::escapeURL(mServerReleaseNotesURL) + " " + LLTrans::getString("ReleaseNotes") + "]"; + } + else + { + info["SERVER_RELEASE_NOTES_URL"] = mServerReleaseNotesURL; + } + + return info; +} + +std::string LLAppViewer::getViewerInfoString() const +{ + std::ostringstream support; + + LLSD info(getViewerInfo()); + + // Render the LLSD from getInfo() as a format_map_t + LLStringUtil::format_map_t args; + + // allow the "Release Notes" URL label to be localized + args["ReleaseNotes"] = LLTrans::getString("ReleaseNotes"); + + for (LLSD::map_const_iterator ii(info.beginMap()), iend(info.endMap()); + ii != iend; ++ii) + { + if (! ii->second.isArray()) + { + // Scalar value + if (ii->second.isUndefined()) + { + args[ii->first] = LLTrans::getString("none_text"); + } + else + { + // don't forget to render value asString() + args[ii->first] = ii->second.asString(); + } + } + else + { + // array value: build KEY_0, KEY_1 etc. entries + for (LLSD::Integer n(0), size(ii->second.size()); n < size; ++n) + { + args[STRINGIZE(ii->first << '_' << n)] = ii->second[n].asString(); + } + } + } + + // Now build the various pieces + support << LLTrans::getString("AboutHeader", args); + if (info.has("REGION")) + { + support << "\n\n" << LLTrans::getString("AboutPosition", args); + } + support << "\n\n" << LLTrans::getString("AboutSystem", args); + support << "\n"; + if (info.has("GRAPHICS_DRIVER_VERSION")) + { + support << "\n" << LLTrans::getString("AboutDriver", args); + } + support << "\n" << LLTrans::getString("AboutLibs", args); + if (info.has("COMPILER")) + { + support << "\n" << LLTrans::getString("AboutCompiler", args); + } + if (info.has("PACKETS_IN")) + { + support << '\n' << LLTrans::getString("AboutTraffic", args); + } + return support.str(); +} + + void LLAppViewer::cleanupSavedSettings() { gSavedSettings.setBOOL("MouseSun", FALSE); diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h index 3ae8a78845..05326c2baf 100755 --- a/indra/newview/llappviewer.h +++ b/indra/newview/llappviewer.h @@ -86,6 +86,10 @@ public: const LLOSInfo& getOSInfo() const { return mSysOSInfo; } + void setServerReleaseNotesURL(const std::string& url) { mServerReleaseNotesURL = url; } + LLSD getViewerInfo() const; + std::string getViewerInfoString() const; + // Report true if under the control of a debugger. A null-op default. virtual bool beingDebugged() { return false; } @@ -246,6 +250,8 @@ private: LLOSInfo mSysOSInfo; bool mReportedCrash; + std::string mServerReleaseNotesURL; + // Thread objects. static LLTextureCache* sTextureCache; static LLImageDecodeThread* sImageDecodeThread; diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp index fea8e34729..06a97c9214 100755 --- a/indra/newview/llfloaterabout.cpp +++ b/indra/newview/llfloaterabout.cpp @@ -70,8 +70,6 @@ extern LLMemoryInfo gSysMemory; extern U32 gPacketsIn; -static std::string get_viewer_release_notes_url(); - ///---------------------------------------------------------------------------- /// Class LLServerReleaseNotesURLFetcher ///---------------------------------------------------------------------------- @@ -108,8 +106,6 @@ public: static LLSD getInfo(); void onClickCopyToClipboard(); - void updateServerReleaseNotesURL(const std::string& url); - private: void setSupportText(const std::string& server_release_notes_url); }; @@ -219,107 +215,9 @@ BOOL LLFloaterAbout::postBuild() return TRUE; } -// static LLSD LLFloaterAbout::getInfo() { - // The point of having one method build an LLSD info block and the other - // construct the user-visible About string is to ensure that the same info - // is available to a getInfo() caller as to the user opening - // LLFloaterAbout. - LLSD info; - LLSD version; - version.append(LLVersionInfo::getMajor()); - version.append(LLVersionInfo::getMinor()); - version.append(LLVersionInfo::getPatch()); - version.append(LLVersionInfo::getBuild()); - info["VIEWER_VERSION"] = version; - info["VIEWER_VERSION_STR"] = LLVersionInfo::getVersion(); - info["BUILD_DATE"] = __DATE__; - info["BUILD_TIME"] = __TIME__; - info["CHANNEL"] = LLVersionInfo::getChannel(); - - info["VIEWER_RELEASE_NOTES_URL"] = get_viewer_release_notes_url(); - -#if LL_MSVC - info["COMPILER"] = "MSVC"; - info["COMPILER_VERSION"] = _MSC_VER; -#elif LL_GNUC - info["COMPILER"] = "GCC"; - info["COMPILER_VERSION"] = GCC_VERSION; -#endif - - // Position - LLViewerRegion* region = gAgent.getRegion(); - if (region) - { - LLVector3d pos = gAgent.getPositionGlobal(); - info["POSITION"] = ll_sd_from_vector3d(pos); - info["POSITION_LOCAL"] = ll_sd_from_vector3(gAgent.getPosAgentFromGlobal(pos)); - info["REGION"] = gAgent.getRegion()->getName(); - info["HOSTNAME"] = gAgent.getRegion()->getHost().getHostName(); - info["HOSTIP"] = gAgent.getRegion()->getHost().getString(); - info["SERVER_VERSION"] = gLastVersionChannel; - LLSLURL slurl; - LLAgentUI::buildSLURL(slurl); - info["SLURL"] = slurl.getSLURLString(); - } - - // CPU - info["CPU"] = gSysCPU.getCPUString(); - info["MEMORY_MB"] = LLSD::Integer(gSysMemory.getPhysicalMemoryKB() / 1024); - // Moved hack adjustment to Windows memory size into llsys.cpp - info["OS_VERSION"] = LLAppViewer::instance()->getOSInfo().getOSString(); - info["GRAPHICS_CARD_VENDOR"] = (const char*)(glGetString(GL_VENDOR)); - info["GRAPHICS_CARD"] = (const char*)(glGetString(GL_RENDERER)); - -#if LL_WINDOWS - LLSD driver_info = gDXHardware.getDisplayInfo(); - if (driver_info.has("DriverVersion")) - { - info["GRAPHICS_DRIVER_VERSION"] = driver_info["DriverVersion"]; - } -#endif - - info["OPENGL_VERSION"] = (const char*)(glGetString(GL_VERSION)); - info["LIBCURL_VERSION"] = LLCurl::getVersionString(); - info["J2C_VERSION"] = LLImageJ2C::getEngineInfo(); - bool want_fullname = true; - info["AUDIO_DRIVER_VERSION"] = gAudiop ? LLSD(gAudiop->getDriverName(want_fullname)) : LLSD(); - if(LLVoiceClient::getInstance()->voiceEnabled()) - { - LLVoiceVersionInfo version = LLVoiceClient::getInstance()->getVersion(); - std::ostringstream version_string; - version_string << version.serverType << " " << version.serverVersion << std::endl; - info["VOICE_VERSION"] = version_string.str(); - } - else - { - info["VOICE_VERSION"] = LLTrans::getString("NotConnected"); - } - - // TODO: Implement media plugin version query - info["QT_WEBKIT_VERSION"] = "4.7.1 (version number hard-coded)"; - - if (gPacketsIn > 0) - { - info["PACKETS_LOST"] = LLViewerStats::getInstance()->mPacketsLostStat.getCurrent(); - info["PACKETS_IN"] = F32(gPacketsIn); - info["PACKETS_PCT"] = 100.f*info["PACKETS_LOST"].asReal() / info["PACKETS_IN"].asReal(); - } - - return info; -} - -static std::string get_viewer_release_notes_url() -{ - // return a URL to the release notes for this viewer, such as: - // http://wiki.secondlife.com/wiki/Release_Notes/Second Life Beta Viewer/2.1.0.123456 - std::string url = LLTrans::getString("RELEASE_NOTES_BASE_URL"); - if (! LLStringUtil::endsWith(url, "/")) - url += "/"; - url += LLVersionInfo::getChannel() + "/"; - url += LLVersionInfo::getVersion(); - return LLWeb::escapeURL(url); + return LLAppViewer::instance()->getViewerInfo(); } class LLFloaterAboutListener: public LLEventAPI @@ -356,93 +254,22 @@ void LLFloaterAbout::onClickCopyToClipboard() support_widget->deselect(); } -void LLFloaterAbout::updateServerReleaseNotesURL(const std::string& url) -{ - setSupportText(url); -} - void LLFloaterAbout::setSupportText(const std::string& server_release_notes_url) { #if LL_WINDOWS getWindow()->incBusyCount(); getWindow()->setCursor(UI_CURSOR_ARROW); #endif - LLSD info(getInfo()); #if LL_WINDOWS getWindow()->decBusyCount(); getWindow()->setCursor(UI_CURSOR_ARROW); #endif - if (LLStringUtil::startsWith(server_release_notes_url, "http")) // it's an URL - { - info["SERVER_RELEASE_NOTES_URL"] = "[" + LLWeb::escapeURL(server_release_notes_url) + " " + LLTrans::getString("ReleaseNotes") + "]"; - } - else - { - info["SERVER_RELEASE_NOTES_URL"] = server_release_notes_url; - } - LLViewerTextEditor *support_widget = getChild("support_editor", true); - std::ostringstream support; - - // Render the LLSD from getInfo() as a format_map_t - LLStringUtil::format_map_t args; - - // allow the "Release Notes" URL label to be localized - args["ReleaseNotes"] = LLTrans::getString("ReleaseNotes"); - - for (LLSD::map_const_iterator ii(info.beginMap()), iend(info.endMap()); - ii != iend; ++ii) - { - if (! ii->second.isArray()) - { - // Scalar value - if (ii->second.isUndefined()) - { - args[ii->first] = getString("none"); - } - else - { - // don't forget to render value asString() - args[ii->first] = ii->second.asString(); - } - } - else - { - // array value: build KEY_0, KEY_1 etc. entries - for (LLSD::Integer n(0), size(ii->second.size()); n < size; ++n) - { - args[STRINGIZE(ii->first << '_' << n)] = ii->second[n].asString(); - } - } - } - - // Now build the various pieces - support << getString("AboutHeader", args); - if (info.has("REGION")) - { - support << "\n\n" << getString("AboutPosition", args); - } - support << "\n\n" << getString("AboutSystem", args); - support << "\n"; - if (info.has("GRAPHICS_DRIVER_VERSION")) - { - support << "\n" << getString("AboutDriver", args); - } - support << "\n" << getString("AboutLibs", args); - if (info.has("COMPILER")) - { - support << "\n" << getString("AboutCompiler", args); - } - if (info.has("PACKETS_IN")) - { - support << '\n' << getString("AboutTraffic", args); - } - support_widget->clear(); - support_widget->appendText(support.str(), + support_widget->appendText(LLAppViewer::instance()->getViewerInfoString(), FALSE, LLStyle::Params() .color(LLUIColorTable::instance().getColor("TextFgReadOnlyColor"))); @@ -491,7 +318,7 @@ void LLServerReleaseNotesURLFetcher::completedHeader(U32 status, const std::stri { location = floater_about->getString("ErrorFetchingServerReleaseNotesURL"); } - floater_about->updateServerReleaseNotesURL(location); + LLAppViewer::instance()->setServerReleaseNotesURL(location); } } diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 3710522fdd..8a238379f6 100755 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -7813,6 +7813,22 @@ void handle_show_url(const LLSD& param) } +void handle_report_bug(const LLSD& param) +{ + LLUIString url(param.asString()); + + LLStringUtil::format_map_t replace; + replace["[ENVIRONMENT]"] = LLURI::escape(LLAppViewer::instance()->getViewerInfoString()); + LLSLURL location_url; + LLAgentUI::buildSLURL(location_url); + replace["[LOCATION]"] = location_url.getSLURLString(); + + LLUIString file_bug_url = gSavedSettings.getString("ReportBugURL"); + file_bug_url.setArgs(replace); + + LLWeb::loadURLExternal(file_bug_url.getString()); +} + void handle_buy_currency_test(void*) { std::string url = @@ -8660,6 +8676,7 @@ void initialize_menus() commit.add("Advanced.WebBrowserTest", boost::bind(&handle_web_browser_test, _2)); // sigh! this one opens the MEDIA browser commit.add("Advanced.WebContentTest", boost::bind(&handle_web_content_test, _2)); // this one opens the Web Content floater commit.add("Advanced.ShowURL", boost::bind(&handle_show_url, _2)); + commit.add("Advanced.ReportBug", boost::bind(&handle_report_bug, _2)); view_listener_t::addMenu(new LLAdvancedBuyCurrencyTest(), "Advanced.BuyCurrencyTest"); view_listener_t::addMenu(new LLAdvancedDumpSelectMgr(), "Advanced.DumpSelectMgr"); view_listener_t::addMenu(new LLAdvancedDumpInventory(), "Advanced.DumpInventory"); diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml index 703015af20..9668cfa526 100755 --- a/indra/newview/skins/default/xui/en/floater_about.xml +++ b/indra/newview/skins/default/xui/en/floater_about.xml @@ -9,63 +9,7 @@ save_rect="true" title="ABOUT [CAPITALIZED_APP_NAME]" width="470"> - -[APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2] ([VIEWER_VERSION_3]) [BUILD_DATE] [BUILD_TIME] ([CHANNEL]) -[[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]] - - - -Built with [COMPILER] version [COMPILER_VERSION] - - - -You are at [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] in [REGION] located at <nolink>[HOSTNAME]</nolink> ([HOSTIP]) -SLURL: <nolink>[SLURL]</nolink> -(global coordinates [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1]) -[SERVER_VERSION] -[SERVER_RELEASE_NOTES_URL] - - - - -CPU: [CPU] -Memory: [MEMORY_MB] MB -OS Version: [OS_VERSION] -Graphics Card Vendor: [GRAPHICS_CARD_VENDOR] -Graphics Card: [GRAPHICS_CARD] - - -Windows Graphics Driver Version: [GRAPHICS_DRIVER_VERSION] - - -OpenGL Version: [OPENGL_VERSION] - -libcurl Version: [LIBCURL_VERSION] -J2C Decoder Version: [J2C_VERSION] -Audio Driver Version: [AUDIO_DRIVER_VERSION] -Qt Webkit Version: [QT_WEBKIT_VERSION] -Voice Server Version: [VOICE_VERSION] - - - (none) - - -Packets Lost: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%) - - -Error fetching server release notes URL. - + + function="Advanced.ReportBug"/> diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index 7e79d297ef..9ac313cb68 100755 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -20,6 +20,42 @@ Initializing VFS... Graphics initialization failed. Please update your graphics driver! + + +[APP_NAME] [VIEWER_VERSION_0].[VIEWER_VERSION_1].[VIEWER_VERSION_2] ([VIEWER_VERSION_3]) [BUILD_DATE] [BUILD_TIME] ([CHANNEL]) +[[VIEWER_RELEASE_NOTES_URL] [ReleaseNotes]] + + Built with [COMPILER] version [COMPILER_VERSION] + +You are at [POSITION_LOCAL_0,number,1], [POSITION_LOCAL_1,number,1], [POSITION_LOCAL_2,number,1] in [REGION] located at <nolink>[HOSTNAME]</nolink> ([HOSTIP]) +SLURL: <nolink>[SLURL]</nolink> +(global coordinates [POSITION_0,number,1], [POSITION_1,number,1], [POSITION_2,number,1]) +[SERVER_VERSION] +[SERVER_RELEASE_NOTES_URL] + + + +CPU: [CPU] +Memory: [MEMORY_MB] MB +OS Version: [OS_VERSION] +Graphics Card Vendor: [GRAPHICS_CARD_VENDOR] +Graphics Card: [GRAPHICS_CARD] + + Windows Graphics Driver Version: [GRAPHICS_DRIVER_VERSION] + +OpenGL Version: [OPENGL_VERSION] + +libcurl Version: [LIBCURL_VERSION] +J2C Decoder Version: [J2C_VERSION] +Audio Driver Version: [AUDIO_DRIVER_VERSION] +Qt Webkit Version: [QT_WEBKIT_VERSION] +Voice Server Version: [VOICE_VERSION] + + Packets Lost: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%) + Error fetching server release notes URL. + Restoring... Changing resolution... -- cgit v1.2.3 From 44eaa10b80bfe46b0fdab147f3addb45f4720cfc Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Tue, 12 Nov 2013 14:51:43 +0200 Subject: MAINT-3068 FIXED "Request Teleport" menu item is added to context menu. --- indra/newview/llchathistory.cpp | 6 ++++++ indra/newview/skins/default/xui/en/menu_avatar_icon.xml | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 69aeec3975..a145527368 100755 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -187,6 +187,10 @@ public: { LLAvatarActions::offerTeleport(getAvatarId()); } + else if (level == "request_teleport") + { + LLAvatarActions::teleportRequest(getAvatarId()); + } else if (level == "voice_call") { LLAvatarActions::startCall(getAvatarId()); @@ -547,6 +551,7 @@ protected: menu->setItemEnabled("Send IM", false); menu->setItemEnabled("Remove Friend", false); menu->setItemEnabled("Offer Teleport",false); + menu->setItemEnabled("Request Teleport",false); menu->setItemEnabled("Voice Call", false); menu->setItemEnabled("Chat History", false); menu->setItemEnabled("Invite Group", false); @@ -564,6 +569,7 @@ protected: menu->setItemVisible("Send IM", false); } menu->setItemEnabled("Offer Teleport", LLAvatarActions::canOfferTeleport(mAvatarID)); + menu->setItemEnabled("Request Teleport", LLAvatarActions::canOfferTeleport(mAvatarID)); menu->setItemEnabled("Voice Call", LLAvatarActions::canCall()); // We should only show 'Zoom in' item in a nearby chat diff --git a/indra/newview/skins/default/xui/en/menu_avatar_icon.xml b/indra/newview/skins/default/xui/en/menu_avatar_icon.xml index 77b9095f7c..410caa7290 100755 --- a/indra/newview/skins/default/xui/en/menu_avatar_icon.xml +++ b/indra/newview/skins/default/xui/en/menu_avatar_icon.xml @@ -30,6 +30,12 @@ name="Offer Teleport"> + + + Date: Tue, 12 Nov 2013 20:05:45 +0200 Subject: MAINT-3269 FIXED crash in LLMessageSystem::callExceptionFunc --- indra/llmessage/message.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/indra/llmessage/message.cpp b/indra/llmessage/message.cpp index ae95087377..c3642ccbe8 100755 --- a/indra/llmessage/message.cpp +++ b/indra/llmessage/message.cpp @@ -3032,12 +3032,23 @@ void LLMessageSystem::setExceptionFunc(EMessageException e, BOOL LLMessageSystem::callExceptionFunc(EMessageException exception) { callbacks_t::iterator it = mExceptionCallbacks.find(exception); - if(it != mExceptionCallbacks.end()) + if(it == mExceptionCallbacks.end()) { - ((*it).second.first)(this, (*it).second.second,exception); - return TRUE; + return FALSE; } - return FALSE; + + exception_t& ex = it->second; + msg_exception_callback ex_cb = ex.first; + + if (!ex_cb) + { + LL_WARNS("Messaging") << "LLMessageSystem::callExceptionFunc: bad message exception callback." << llendl; + return FALSE; + } + + (ex_cb)(this, ex.second, exception); + + return TRUE; } void LLMessageSystem::setTimingFunc(msg_timing_callback func, void* data) -- cgit v1.2.3 From 8298e5e558fb6236fc32feb60fe097cee1751d7c Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Tue, 12 Nov 2013 16:20:41 -0500 Subject: STORM-1980/1983 Merge changes to region restart message format made by Simon to include region name. --- indra/newview/skins/default/xui/en/notifications.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 083ff46ebb..f3917f66d9 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -6886,7 +6886,7 @@ This will add a bookmark in your inventory so you can quickly IM this Resident. name="RegionRestartMinutes" priority="high" type="alert"> -[TIME] This region will restart in [MINUTES] minutes. +[TIME] The region [NAME] will restart in [MINUTES] minutes. If you stay in this region you will be logged out. @@ -6895,7 +6895,7 @@ If you stay in this region you will be logged out. name="RegionRestartSeconds" priority="high" type="alert"> -[TIME] This region will restart in [SECONDS] seconds. +[TIME] The region [NAME] will restart in [SECONDS] seconds. If you stay in this region you will be logged out. -- cgit v1.2.3 From 7833b2864291a0168da8a9f200ee644c34500954 Mon Sep 17 00:00:00 2001 From: simon Date: Tue, 12 Nov 2013 15:41:59 -0800 Subject: MAINT-3397 : add localization handler for EstateManagerFailedllTeleportHome message --- indra/newview/skins/default/xui/en/notifications.xml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 964deb35a7..5fb83b91ce 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -9291,10 +9291,19 @@ Link failed -- insufficient land resources Object uses too many physics resources -- its dynamics have been disabled. + + fail +The object '[OBJECT_NAME]' at [OBJECT_POS] cannot teleport estate managers home. + + fail You have been teleported home by the object '[OBJECT_NAME]' on the parcel '[PARCEL_NAME]' @@ -9303,7 +9312,7 @@ You have been teleported home by the object '[OBJECT_NAME]' on the parcel '[PARC fail You have been teleported home by the object '[OBJECT_NAME]' -- cgit v1.2.3 From cbb2daf879497dc25b8e34bc4d9522b195baa62a Mon Sep 17 00:00:00 2001 From: simon Date: Tue, 12 Nov 2013 15:54:09 -0800 Subject: MAINT-3394 : add localization handler for ProblemAddingEstateBanManager message --- indra/newview/skins/default/xui/en/notifications.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 5fb83b91ce..6c1f4321e4 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -4756,6 +4756,14 @@ Problems adding a new estate manager. One or more estates may have a full manag fail + +Unable to add estate owner or manager to ban list. + fail + + Date: Wed, 13 Nov 2013 14:56:14 +0200 Subject: MAINT-3364 (Texture picker highlights the wrong texture when no texture is found since CHUI.) --- indra/newview/lltexturectrl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp index 4300cafb6b..ea837c9127 100755 --- a/indra/newview/lltexturectrl.cpp +++ b/indra/newview/lltexturectrl.cpp @@ -820,7 +820,7 @@ void LLFloaterTexturePicker::onSelectionChange(const std::dequegetAssetUUID(); + setImageID(itemp->getAssetUUID()); mViewModel->setDirty(); // *TODO: shouldn't we be using setValue() here? if (user_action && mCanPreview) { -- cgit v1.2.3 From dd7b0f96157bdfbdd8892cc8aa209182ae777380 Mon Sep 17 00:00:00 2001 From: "jeremiah@lindenlab.com" Date: Wed, 13 Nov 2013 14:44:46 -0500 Subject: correct some male/female shape differences --- indra/newview/character/avatar_lad.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml index 884d16b94b..4631e012fd 100644 --- a/indra/newview/character/avatar_lad.xml +++ b/indra/newview/character/avatar_lad.xml @@ -4267,8 +4267,8 @@ + scale="0.03 0.04 0.02" + pos="-0.03 0 -0.01"/> Date: Wed, 13 Nov 2013 19:27:17 -0500 Subject: OPEN-195 Cleaned non-UTF8 safe characters --- indra/llmath/llvolume.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index f74c934b21..cc5742ff7a 100755 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -6747,7 +6747,7 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) return TRUE; } -//adapted from Lengyel, Eric. Computing Tangent Space Basis Vectors for an Arbitrary Mesh. Terathon Software 3D Graphics Library, 2001. http://www.terathon.com/code/tangent.html +//adapted from Lengyel, Eric. "Computing Tangent Space Basis Vectors for an Arbitrary Mesh". Terathon Software 3D Graphics Library, 2001. http://www.terathon.com/code/tangent.html void CalculateTangentArray(U32 vertexCount, const LLVector4a *vertex, const LLVector4a *normal, const LLVector2 *texcoord, U32 triangleCount, const U16* index_array, LLVector4a *tangent) { -- cgit v1.2.3 From f8846713cefbc4519cf1c332a650dad2cc67f4d2 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Thu, 14 Nov 2013 09:16:34 -0500 Subject: add open-195 to doc/contributions.txt --- doc/contributions.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/contributions.txt b/doc/contributions.txt index 95133570c5..5f963ac7df 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -350,6 +350,8 @@ Dimitrio Lewis Dirk Draconis Neurocam STORM-1259 +Drake Arconis + OPEN-195 Drew Dri VWR-19683 Drew Dwi -- cgit v1.2.3 From 335810246253c04ac3c2ab4f5db556991ed717d6 Mon Sep 17 00:00:00 2001 From: Ansariel Date: Thu, 14 Nov 2013 22:13:15 +0100 Subject: STORM-1984: Mousing over UI elements does not make them light up --- doc/contributions.txt | 1 + indra/llui/llbutton.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/contributions.txt b/doc/contributions.txt index 99527c0587..759c715970 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -180,6 +180,7 @@ Ansariel Hiller MAINT-2368 STORM-1931 MAINT-2773 + STORM-1984 Aralara Rajal Arare Chantilly CHUIBUG-191 diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp index 50ac511d18..3cfe5ac57f 100755 --- a/indra/llui/llbutton.cpp +++ b/indra/llui/llbutton.cpp @@ -641,7 +641,7 @@ void LLButton::draw() bool use_glow_effect = FALSE; LLColor4 highlighting_color = LLColor4::white; - LLColor4 glow_color; + LLColor4 glow_color = LLColor4::white; LLRender::eBlendType glow_type = LLRender::BT_ADD_WITH_ALPHA; LLUIImage* imagep = NULL; -- cgit v1.2.3 From 1e9cfd39c8441fad71ed7171ac93bdeb1d02e54b Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Fri, 15 Nov 2013 11:49:35 -0500 Subject: STORM-1980 Added a floater displaying a countdown timer. Removed most of the previous changes. --- indra/newview/CMakeLists.txt | 2 + indra/newview/llfloaterregioninfo.cpp | 1 + indra/newview/llfloaterregionrestarting.cpp | 119 +++++++++++++++++++++ indra/newview/llfloaterregionrestarting.h | 55 ++++++++++ indra/newview/llviewerfloaterreg.cpp | 2 + indra/newview/llviewermessage.cpp | 41 +++++-- indra/newview/skins/default/colors.xml | 3 + .../default/xui/en/floater_region_restarting.xml | 62 +++++++++++ .../newview/skins/default/xui/en/notifications.xml | 6 +- indra/newview/skins/default/xui/en/strings.xml | 3 - 10 files changed, 280 insertions(+), 14 deletions(-) create mode 100644 indra/newview/llfloaterregionrestarting.cpp create mode 100644 indra/newview/llfloaterregionrestarting.h create mode 100644 indra/newview/skins/default/xui/en/floater_region_restarting.xml diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 1fea6dea9f..34c3489f9f 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -267,6 +267,7 @@ set(viewer_SOURCE_FILES llfloaterregiondebugconsole.cpp llfloaterregioninfo.cpp llfloaterreporter.cpp + llfloaterregionrestarting.cpp llfloaterscriptdebug.cpp llfloaterscriptlimits.cpp llfloatersearch.cpp @@ -855,6 +856,7 @@ set(viewer_HEADER_FILES llfloaterregiondebugconsole.h llfloaterregioninfo.h llfloaterreporter.h + llfloaterregionrestarting.h llfloaterscriptdebug.h llfloaterscriptlimits.h llfloatersearch.h diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 66bf49331b..cc0053cb99 100755 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -91,6 +91,7 @@ #include "lltrans.h" #include "llagentui.h" #include "llmeshrepository.h" +#include "llfloaterregionrestarting.h" const S32 TERRAIN_TEXTURE_COUNT = 4; const S32 CORNER_COUNT = 4; diff --git a/indra/newview/llfloaterregionrestarting.cpp b/indra/newview/llfloaterregionrestarting.cpp new file mode 100644 index 0000000000..62bce27d09 --- /dev/null +++ b/indra/newview/llfloaterregionrestarting.cpp @@ -0,0 +1,119 @@ +/** + * @file llfloaterregionrestarting.cpp + * @brief Shows countdown timer during region restart + * + * $LicenseInfo:firstyear=2006&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llfloaterregionrestarting.h" + +#include "llfloaterreg.h" +#include "lluictrl.h" +#include "llenvmanager.h" + + +static S32 mSeconds; + +LLFloaterRegionRestarting::LLFloaterRegionRestarting(const LLSD& key) : + LLFloater(key), + LLEventTimer(1) +{ + mName = key["NAME"]; + mSeconds = (LLSD::Integer)key["SECONDS"]; +} + +LLFloaterRegionRestarting::~LLFloaterRegionRestarting() +{ +} + +BOOL LLFloaterRegionRestarting::postBuild() +{ + LLStringUtil::format_map_t args; + std::string text; + + args["[NAME]"] = mName; + text = getString("RegionName", args); + LLTextBox* textbox = getChild("region_name"); + textbox->setValue(text); + + refresh(); + + LLEnvManagerNew::instance().setRegionChangeCallback(boost::bind(&LLFloaterRegionRestarting::regionChange, this)); + + LLFloaterRegionRestarting* floaterp = LLFloaterReg::findTypedInstance("region_restarting"); + + if (floaterp) + { +llwarns << "DBG setting color" << llendl; + LLColor4 bg_color; + bg_color = LLUIColorTable::instance().getColor("LtOrange"); + floaterp->setBackgroundColor(bg_color); + } + + return TRUE; +} + +void LLFloaterRegionRestarting::regionChange() +{ + close(); +} + +BOOL LLFloaterRegionRestarting::tick() +{ + refresh(); + + return FALSE; +} + +void LLFloaterRegionRestarting::refresh() +{ + LLStringUtil::format_map_t args; + std::string text; + + args["[SECONDS]"] = llformat("%d", mSeconds); + text = getString("RestartSeconds", args); + LLTextBox* textbox = getChild("restart_seconds"); + textbox->setValue(text); + + mSeconds = mSeconds - 1; + if(mSeconds < 0.0) + { + mSeconds = 0; + } +} + +void LLFloaterRegionRestarting::close() +{ + LLFloaterRegionRestarting* floaterp = LLFloaterReg::findTypedInstance("region_restarting"); + + if (floaterp) + { + floaterp->closeFloater(); + } +} + +void LLFloaterRegionRestarting::updateTime(U32 time) +{ + mSeconds = time; +} diff --git a/indra/newview/llfloaterregionrestarting.h b/indra/newview/llfloaterregionrestarting.h new file mode 100644 index 0000000000..84f1bc65fb --- /dev/null +++ b/indra/newview/llfloaterregionrestarting.h @@ -0,0 +1,55 @@ +/** + * @file llfloaterregionrestarting.h + * @brief Shows countdown timer during region restart + * + * $LicenseInfo:firstyear=2006&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLFLOATERREGIONRESTARTING_H +#define LL_LLFLOATERREGIONRESTARTING_H + +#include "llfloater.h" +#include "lltextbox.h" +#include "lleventtimer.h" + +class LLFloaterRegionRestarting : public LLFloater, public LLEventTimer +{ + friend class LLFloaterReg; + +public: + static void close(); + static void updateTime(U32 time); + +private: + LLFloaterRegionRestarting(const LLSD& key); + virtual ~LLFloaterRegionRestarting(); + virtual BOOL postBuild(); + virtual BOOL tick(); + virtual void refresh(); + virtual void regionChange(); + + LLTextBox* mRestartSeconds; + + std::string mName; +}; + +#endif // LL_LLFLOATERREGIONRESTARTING_H diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 4ce049df03..a8eeddb798 100755 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -95,6 +95,7 @@ #include "llfloaterproperties.h" #include "llfloaterregiondebugconsole.h" #include "llfloaterregioninfo.h" +#include "llfloaterregionrestarting.h" #include "llfloaterreporter.h" #include "llfloaterscriptdebug.h" #include "llfloaterscriptlimits.h" @@ -296,6 +297,7 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("reset_queue", "floater_script_queue.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("region_debug_console", "floater_region_debug_console.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("region_info", "floater_region_info.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); + LLFloaterReg::add("region_restarting", "floater_region_restarting.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("script_debug", "floater_script_debug.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("script_debug_output", "floater_script_debug_panel.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 805b3aab18..ac652ef329 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -110,6 +110,7 @@ #include "llpanelblockedlist.h" #include "llpanelplaceprofile.h" #include "llviewerregion.h" +#include "llfloaterregionrestarting.h" #include // #include @@ -5963,15 +5964,30 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem) if (notificationID == "RegionRestartMinutes" || notificationID == "RegionRestartSeconds") { - // Get current UTC time, adjusted for the user's clock - // being off. - time_t utc_time; - utc_time = time_corrected(); - std::string timeStr = LLTrans::getString("HMSTime"); - LLSD substitution; - substitution["datetime"] = (S32) utc_time; - LLStringUtil::format(timeStr, substitution); - llsdBlock["TIME"] = timeStr; + U32 seconds; + if (notificationID == "RegionRestartMinutes") + { + seconds = 60 * static_cast(llsdBlock["MINUTES"].asInteger()); + } + else + { + seconds = static_cast(llsdBlock["SECONDS"].asInteger()); + } + + LLSD params; + params["NAME"] = llsdBlock["NAME"]; + params["SECONDS"] = (LLSD::Integer)seconds; + + LLFloaterRegionRestarting* floaterp = LLFloaterReg::findTypedInstance("region_restarting"); + + if (floaterp) + { + LLFloaterRegionRestarting::updateTime(seconds); + } + else + { + LLFloaterReg::showInstance("region_restarting", params); + } send_sound_trigger(LLUUID(gSavedSettings.getString("UISndRestart")), 1.0f); } @@ -6094,6 +6110,13 @@ void process_alert_core(const std::string& message, BOOL modal) std::string text(message.substr(1)); LLSD args; + // *NOTE: If the text from the server ever changes this line will need to be adjusted. + std::string restart_cancelled = "Region restart cancelled."; + if (text.substr(0, restart_cancelled.length()) == restart_cancelled) + { + LLFloaterRegionRestarting::close(); + } + std::string new_msg =LLNotifications::instance().getGlobalString(text); args["MESSAGE"] = new_msg; LLNotificationsUtil::add("SystemMessage", args); diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index f53995732f..1587e6124d 100755 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -122,6 +122,9 @@ + This resident has turned on 'Do Not Disturb' and will see your message later. - - [hour12, datetime, slt]:[min, datetime, slt]:[second, datetime, slt] [ampm, datetime, slt] [timezone,datetime, slt] - (By name) (Resident) -- cgit v1.2.3 From 590630a32fee3205861e61438a88de0944d9c996 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Sat, 16 Nov 2013 10:54:30 -0500 Subject: STORM-1980 Code cleanup and an attempt to fix a mac/linux compile error --- indra/newview/llfloaterregionrestarting.cpp | 18 +++--------------- indra/newview/llfloaterregionrestarting.h | 4 +--- indra/newview/llviewermessage.cpp | 6 +++--- 3 files changed, 7 insertions(+), 21 deletions(-) diff --git a/indra/newview/llfloaterregionrestarting.cpp b/indra/newview/llfloaterregionrestarting.cpp index 62bce27d09..09518fff2d 100644 --- a/indra/newview/llfloaterregionrestarting.cpp +++ b/indra/newview/llfloaterregionrestarting.cpp @@ -39,7 +39,7 @@ LLFloaterRegionRestarting::LLFloaterRegionRestarting(const LLSD& key) : LLFloater(key), LLEventTimer(1) { - mName = key["NAME"]; + mName = (std::string)key["NAME"]; mSeconds = (LLSD::Integer)key["SECONDS"]; } @@ -61,16 +61,6 @@ BOOL LLFloaterRegionRestarting::postBuild() LLEnvManagerNew::instance().setRegionChangeCallback(boost::bind(&LLFloaterRegionRestarting::regionChange, this)); - LLFloaterRegionRestarting* floaterp = LLFloaterReg::findTypedInstance("region_restarting"); - - if (floaterp) - { -llwarns << "DBG setting color" << llendl; - LLColor4 bg_color; - bg_color = LLUIColorTable::instance().getColor("LtOrange"); - floaterp->setBackgroundColor(bg_color); - } - return TRUE; } @@ -92,9 +82,7 @@ void LLFloaterRegionRestarting::refresh() std::string text; args["[SECONDS]"] = llformat("%d", mSeconds); - text = getString("RestartSeconds", args); - LLTextBox* textbox = getChild("restart_seconds"); - textbox->setValue(text); + getChild("restart_seconds")->setValue(getString("RestartSeconds", args)); mSeconds = mSeconds - 1; if(mSeconds < 0.0) @@ -113,7 +101,7 @@ void LLFloaterRegionRestarting::close() } } -void LLFloaterRegionRestarting::updateTime(U32 time) +void LLFloaterRegionRestarting::updateTime(S32 time) { mSeconds = time; } diff --git a/indra/newview/llfloaterregionrestarting.h b/indra/newview/llfloaterregionrestarting.h index 84f1bc65fb..fef0dcddfe 100644 --- a/indra/newview/llfloaterregionrestarting.h +++ b/indra/newview/llfloaterregionrestarting.h @@ -37,7 +37,7 @@ class LLFloaterRegionRestarting : public LLFloater, public LLEventTimer public: static void close(); - static void updateTime(U32 time); + static void updateTime(S32 time); private: LLFloaterRegionRestarting(const LLSD& key); @@ -47,8 +47,6 @@ private: virtual void refresh(); virtual void regionChange(); - LLTextBox* mRestartSeconds; - std::string mName; }; diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index ac652ef329..0ce8585c15 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -5964,14 +5964,14 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem) if (notificationID == "RegionRestartMinutes" || notificationID == "RegionRestartSeconds") { - U32 seconds; + S32 seconds; if (notificationID == "RegionRestartMinutes") { - seconds = 60 * static_cast(llsdBlock["MINUTES"].asInteger()); + seconds = 60 * static_cast(llsdBlock["MINUTES"].asInteger()); } else { - seconds = static_cast(llsdBlock["SECONDS"].asInteger()); + seconds = static_cast(llsdBlock["SECONDS"].asInteger()); } LLSD params; -- cgit v1.2.3 From 84a96cdf0f4e27089dedd151df55e7916b33abb8 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Mon, 18 Nov 2013 11:33:58 -0500 Subject: correct attribution for open-195 --- doc/contributions.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/doc/contributions.txt b/doc/contributions.txt index 5f963ac7df..4ffe6490d5 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -350,8 +350,6 @@ Dimitrio Lewis Dirk Draconis Neurocam STORM-1259 -Drake Arconis - OPEN-195 Drew Dri VWR-19683 Drew Dwi @@ -1147,6 +1145,7 @@ snowy Sidran Sovereign Engineer MAINT-2334 OPEN-189 + OPEN-195 SpacedOut Frye VWR-34 VWR-45 -- cgit v1.2.3 From ecb2220afd68e1d13c9af476265d008c2d92354b Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Mon, 18 Nov 2013 12:12:31 -0500 Subject: add handler for socket.error to fix OPEN-196 --- indra/lib/python/indra/base/lluuid.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/lib/python/indra/base/lluuid.py b/indra/lib/python/indra/base/lluuid.py index 369ae4e92f..7413ffe10d 100755 --- a/indra/lib/python/indra/base/lluuid.py +++ b/indra/lib/python/indra/base/lluuid.py @@ -72,7 +72,7 @@ class UUID(object): ip = '' try: ip = socket.gethostbyname(socket.gethostname()) - except(socket.gaierror): + except(socket.gaierror, socket.error): # no ip address, so just default to somewhere in 10.x.x.x ip = '10' for i in range(3): -- cgit v1.2.3 From b2d769534c82de2ac7b36f11ce6fab61f3e0d378 Mon Sep 17 00:00:00 2001 From: Monty Brandenberg Date: Mon, 18 Nov 2013 13:33:19 -0500 Subject: Code review updates. All comments so far. --- indra/llcommon/lldeadmantimer.h | 10 ++++------ indra/llmessage/llcurl.cpp | 2 +- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/indra/llcommon/lldeadmantimer.h b/indra/llcommon/lldeadmantimer.h index 0dde16b717..980976e176 100644 --- a/indra/llcommon/lldeadmantimer.h +++ b/indra/llcommon/lldeadmantimer.h @@ -155,11 +155,9 @@ public: /// void ringBell(time_type now, unsigned int count); - /// Checks on the status of the timer Declare that something interesting happened. This has two - /// effects on an unexpired-timer. 1) The expiration time - /// is extended for 'horizon' seconds after the 'now' value. - /// 2) An internal counter associated with the event is incremented. - /// This count is returned via the @see isExpired() method. + /// Checks the status of the timer. If the timer has expired, + /// also returns various timer-related stats. Unlike ringBell(), + /// does not extend the horizon, it only checks for expiration. /// /// @param now Current time as returned by @see /// LLTimer::getCurrentClockCount(). If zero, @@ -192,7 +190,7 @@ public: bool isExpired(time_type now, F64 & started, F64 & stopped, U64 & count, U64 & user_cpu, U64 & sys_cpu); - /// Identical to the six-arugment form except is does without the + /// Identical to the six-arugment form except it does without the /// CPU time return if the caller isn't interested in it. bool isExpired(time_type now, F64 & started, F64 & stopped, U64 & count); diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp index efbc804cbc..25e175f2cc 100755 --- a/indra/llmessage/llcurl.cpp +++ b/indra/llmessage/llcurl.cpp @@ -296,7 +296,7 @@ LLCurl::Easy* LLCurl::Easy::getEasy() // Enable a brief cache period for now. This was zero for the longest time // which caused some routers grief and generated unneeded traffic. For the - // threded resolver, we're using system resolution libraries and non-zero values + // threaded resolver, we're using system resolution libraries and non-zero values // are preferred. The c-ares resolver is another matter and it might not // track server changes as well. CURLcode result = curl_easy_setopt(easy->mCurlEasyHandle, CURLOPT_DNS_CACHE_TIMEOUT, 15); -- cgit v1.2.3 From 6bd777214c535b91048533c792cb2dd499ec6ebf Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Mon, 18 Nov 2013 19:05:34 -0500 Subject: add callbacks to LLAgent for Region and Parcel changes --- indra/newview/llagent.cpp | 48 +++++++++++++++++++++++++++-------- indra/newview/llagent.h | 28 +++++++++++++++++--- indra/newview/lllocationinputctrl.cpp | 4 +-- indra/newview/llmoveview.cpp | 2 +- indra/newview/llpanelplaces.cpp | 2 +- indra/newview/llpaneltopinfobar.cpp | 2 +- indra/newview/llviewerparcelmgr.cpp | 9 +++---- indra/newview/llviewerparcelmgr.h | 10 +++----- 8 files changed, 75 insertions(+), 30 deletions(-) diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 325707bbf1..da29aaff50 100755 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -259,9 +259,9 @@ bool handleSlowMotionAnimation(const LLSD& newvalue) return true; } -// static -void LLAgent::parcelChangedCallback() +void LLAgent::setCanEditParcel() // called via mParcelChangedSignal { + LL_DEBUGS("AgentLocation") << LL_ENDL; bool can_edit = LLToolMgr::getInstance()->canEdit(); gAgent.mCanEditParcel = can_edit; @@ -425,6 +425,8 @@ LLAgent::LLAgent() : mListener.reset(new LLAgentListener(*this)); + addParcelChangedCallback(&setCanEditParcel); + mMoveTimer.stop(); } @@ -451,8 +453,6 @@ void LLAgent::init() mLastKnownRequestMaturity = mLastKnownResponseMaturity; mIsDoSendMaturityPreferenceToServer = true; - LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(boost::bind(&LLAgent::parcelChangedCallback)); - if (!mTeleportFinishedSlot.connected()) { mTeleportFinishedSlot = LLViewerParcelMgr::getInstance()->setTeleportFinishedCallback(boost::bind(&LLAgent::handleTeleportFinished, this)); @@ -835,22 +835,34 @@ void LLAgent::handleServerBakeRegionTransition(const LLUUID& region_id) } } +void LLAgent::changeParcels() +{ + LL_DEBUGS("AgentLocation") << LL_ENDL; + // Notify anything that wants to know about parcel changes + mParcelChangedSignal(); +} + +boost::signals2::connection LLAgent::addParcelChangedCallback(parcel_changed_callback_t cb) +{ + return mParcelChangedSignal.connect(cb); +} + //----------------------------------------------------------------------------- // setRegion() //----------------------------------------------------------------------------- void LLAgent::setRegion(LLViewerRegion *regionp) { bool teleport = true; - + bool notifyRegionChange; + llassert(regionp); if (mRegionp != regionp) { - // std::string host_name; - // host_name = regionp->getHost().getHostName(); - + notifyRegionChange = true; + std::string ip = regionp->getHost().getString(); - llinfos << "Moving agent into region: " << regionp->getName() - << " located at " << ip << llendl; + LL_INFOS("AgentLocation") << "Moving agent into region: " << regionp->getName() + << " located at " << ip << LL_ENDL; if (mRegionp) { // We've changed regions, we're now going to change our agent coordinate frame. @@ -902,6 +914,10 @@ void LLAgent::setRegion(LLViewerRegion *regionp) // Pass new region along to metrics components that care about this level of detail. LLAppViewer::metricsUpdateRegion(regionp->getHandle()); } + else + { + notifyRegionChange = false; + } mRegionp = regionp; // Pass the region host to LLUrlEntryParcel to resolve parcel name @@ -943,6 +959,12 @@ void LLAgent::setRegion(LLViewerRegion *regionp) // Need to handle via callback after caps arrive. mRegionp->setCapabilitiesReceivedCallback(boost::bind(&LLAgent::handleServerBakeRegionTransition,this,_1)); } + + if (notifyRegionChange) + { + LL_DEBUGS("AgentLocation") << "Calling RegionChanged callbacks" << LL_ENDL; + mRegionChangedSignal(); + } } @@ -967,6 +989,12 @@ LLHost LLAgent::getRegionHost() const } } +boost::signals2::connection LLAgent::addRegionChangedCallback(region_changed_callback_t cb) +{ + return mRegionChangedSignal.connect(cb); +} + + //----------------------------------------------------------------------------- // inPrelude() //----------------------------------------------------------------------------- diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index 7fac17d098..fafa166efd 100755 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -231,15 +231,36 @@ private: LLVector3 mHomePosRegion; //-------------------------------------------------------------------- - // Region + // Parcel //-------------------------------------------------------------------- public: + void changeParcels(); // called by LLViewerParcelMgr when we cross a parcel boundary + + // Register a boost callback to be called when the agent changes parcels + typedef boost::function parcel_changed_callback_t; + boost::signals2::connection addParcelChangedCallback(parcel_changed_callback_t); + +private: + typedef boost::signals2::signal parcel_changed_signal_t; + parcel_changed_signal_t mParcelChangedSignal; + + //-------------------------------------------------------------------- + // Region + //-------------------------------------------------------------------- + public: void setRegion(LLViewerRegion *regionp); LLViewerRegion *getRegion() const; LLHost getRegionHost() const; BOOL inPrelude(); -private: + + // Register a boost callback to be called when the agent changes regions + typedef boost::function region_changed_callback_t; + boost::signals2::connection addRegionChangedCallback(region_changed_callback_t); + + private: LLViewerRegion *mRegionp; + typedef boost::signals2::signal region_changed_signal_t; + region_changed_signal_t mRegionChangedSignal; //-------------------------------------------------------------------- // History @@ -640,9 +661,10 @@ private: public: bool canEditParcel() const { return mCanEditParcel; } private: + static void setCanEditParcel(); bool mCanEditParcel; - static void parcelChangedCallback(); + /******************************************************************************** ** ** diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp index 5022dba934..dbdff11f11 100755 --- a/indra/newview/lllocationinputctrl.cpp +++ b/indra/newview/lllocationinputctrl.cpp @@ -407,14 +407,14 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p) // - Make the "Add landmark" button updated when either current parcel gets changed // or a landmark gets created or removed from the inventory. // - Update the location string on parcel change. - mParcelMgrConnection = LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback( + mParcelMgrConnection = gAgent.addParcelChangedCallback( boost::bind(&LLLocationInputCtrl::onAgentParcelChange, this)); // LLLocationHistory instance is being created before the location input control, so we have to update initial state of button manually. mButton->setEnabled(LLLocationHistory::instance().getItemCount() > 0); mLocationHistoryConnection = LLLocationHistory::getInstance()->setChangedCallback( boost::bind(&LLLocationInputCtrl::onLocationHistoryChanged, this,_1)); - mRegionCrossingSlot = LLEnvManagerNew::getInstance()->setRegionChangeCallback(boost::bind(&LLLocationInputCtrl::onRegionBoundaryCrossed, this)); + mRegionCrossingSlot = gAgent.addRegionChangedCallback(boost::bind(&LLLocationInputCtrl::onRegionBoundaryCrossed, this)); createNavMeshStatusListenerForCurrentRegion(); mRemoveLandmarkObserver = new LLRemoveLandmarkObserver(this); diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp index eb6591eb39..32b168b8c5 100755 --- a/indra/newview/llmoveview.cpp +++ b/indra/newview/llmoveview.cpp @@ -140,7 +140,7 @@ BOOL LLFloaterMove::postBuild() initMovementMode(); - LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(LLFloaterMove::sUpdateFlyingStatus); + gAgent.addParcelChangedCallback(LLFloaterMove::sUpdateFlyingStatus); return TRUE; } diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp index 6c2a01fc82..8bb3ace2d9 100755 --- a/indra/newview/llpanelplaces.cpp +++ b/indra/newview/llpanelplaces.cpp @@ -251,7 +251,7 @@ LLPanelPlaces::LLPanelPlaces() gInventory.addObserver(mInventoryObserver); - mAgentParcelChangedConnection = LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback( + mAgentParcelChangedConnection = gAgent.addParcelChangedCallback( boost::bind(&LLPanelPlaces::updateVerbs, this)); //buildFromFile( "panel_places.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder() diff --git a/indra/newview/llpaneltopinfobar.cpp b/indra/newview/llpaneltopinfobar.cpp index 9dd665198f..0d09f0bbfc 100755 --- a/indra/newview/llpaneltopinfobar.cpp +++ b/indra/newview/llpaneltopinfobar.cpp @@ -166,7 +166,7 @@ BOOL LLPanelTopInfoBar::postBuild() mShowCoordsCtrlConnection = ctrl->getSignal()->connect(boost::bind(&LLPanelTopInfoBar::onNavBarShowParcelPropertiesCtrlChanged, this)); } - mParcelMgrConnection = LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback( + mParcelMgrConnection = gAgent.addParcelChangedCallback( boost::bind(&LLPanelTopInfoBar::onAgentParcelChange, this)); setVisibleCallback(boost::bind(&LLPanelTopInfoBar::onVisibilityChange, this, _2)); diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp index 4cdb568d17..e361fad9de 100755 --- a/indra/newview/llviewerparcelmgr.cpp +++ b/indra/newview/llviewerparcelmgr.cpp @@ -1580,7 +1580,8 @@ void LLViewerParcelMgr::processParcelProperties(LLMessageSystem *msg, void **use // Let interesting parties know about agent parcel change. LLViewerParcelMgr* instance = LLViewerParcelMgr::getInstance(); - instance->mAgentParcelChangedSignal(); + // Notify anything that wants to know when the agent changes parcels + gAgent.changeParcels(); if (instance->mTeleportInProgress) { @@ -2458,10 +2459,6 @@ LLViewerTexture* LLViewerParcelMgr::getPassImage() const return sPassImage; } -boost::signals2::connection LLViewerParcelMgr::addAgentParcelChangedCallback(parcel_changed_callback_t cb) -{ - return mAgentParcelChangedSignal.connect(cb); -} /* * Set finish teleport callback. You can use it to observe all teleport events. * NOTE: @@ -2475,7 +2472,7 @@ boost::signals2::connection LLViewerParcelMgr::setTeleportFinishedCallback(telep return mTeleportFinishedSignal.connect(cb); } -boost::signals2::connection LLViewerParcelMgr::setTeleportFailedCallback(parcel_changed_callback_t cb) +boost::signals2::connection LLViewerParcelMgr::setTeleportFailedCallback(teleport_failed_callback_t cb) { return mTeleportFailedSignal.connect(cb); } diff --git a/indra/newview/llviewerparcelmgr.h b/indra/newview/llviewerparcelmgr.h index 6183b7e90e..9da49bb3f3 100755 --- a/indra/newview/llviewerparcelmgr.h +++ b/indra/newview/llviewerparcelmgr.h @@ -80,8 +80,8 @@ class LLViewerParcelMgr : public LLSingleton public: typedef boost::function teleport_finished_callback_t; typedef boost::signals2::signal teleport_finished_signal_t; - typedef boost::function parcel_changed_callback_t; - typedef boost::signals2::signal parcel_changed_signal_t; + typedef boost::function teleport_failed_callback_t; + typedef boost::signals2::signal teleport_failed_signal_t; LLViewerParcelMgr(); ~LLViewerParcelMgr(); @@ -283,9 +283,8 @@ public: // the agent is banned or not in the allowed group BOOL isCollisionBanned(); - boost::signals2::connection addAgentParcelChangedCallback(parcel_changed_callback_t cb); boost::signals2::connection setTeleportFinishedCallback(teleport_finished_callback_t cb); - boost::signals2::connection setTeleportFailedCallback(parcel_changed_callback_t cb); + boost::signals2::connection setTeleportFailedCallback(teleport_failed_callback_t cb); void onTeleportFinished(bool local, const LLVector3d& new_pos); void onTeleportFailed(); @@ -338,8 +337,7 @@ private: BOOL mTeleportInProgress; teleport_finished_signal_t mTeleportFinishedSignal; - parcel_changed_signal_t mTeleportFailedSignal; - parcel_changed_signal_t mAgentParcelChangedSignal; + teleport_failed_signal_t mTeleportFailedSignal; // Array of pieces of parcel edges to potentially draw // Has (parcels_per_edge + 1) * (parcels_per_edge + 1) elements so -- cgit v1.2.3 From a873a575dd0e5034313df09c89141e8be581c24e Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Tue, 19 Nov 2013 13:36:59 +0200 Subject: MAINT-3375 FIXED Do not record visibility change if event logging is off(because it kills fps). --- indra/llui/llview.cpp | 20 +++++++++++++------- indra/llui/llviewereventrecorder.cpp | 2 +- indra/llui/llviewereventrecorder.h | 2 +- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index 20015dca1a..9cc8c951d5 100755 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -645,14 +645,18 @@ void LLView::setVisible(BOOL visible) void LLView::handleVisibilityChange ( BOOL new_visibility ) { BOOL old_visibility; + BOOL log_visibility_change = LLViewerEventRecorder::instance().getLoggingStatus(); BOOST_FOREACH(LLView* viewp, mChildList) { // only views that are themselves visible will have their overall visibility affected by their ancestors old_visibility=viewp->getVisible(); - if (old_visibility!=new_visibility) + if(log_visibility_change) { - LLViewerEventRecorder::instance().logVisibilityChange( viewp->getPathname(), viewp->getName(), new_visibility,"widget"); + if (old_visibility!=new_visibility) + { + LLViewerEventRecorder::instance().logVisibilityChange( viewp->getPathname(), viewp->getName(), new_visibility,"widget"); + } } if (old_visibility) @@ -660,11 +664,13 @@ void LLView::handleVisibilityChange ( BOOL new_visibility ) viewp->handleVisibilityChange ( new_visibility ); } - // Consider changing returns to confirm success and know which widget grabbed it - // For now assume success and log at highest xui possible - // NOTE we log actual state - which may differ if it somehow failed to set visibility - lldebugs << "LLView::handleVisibilityChange - now: " << getVisible() << " xui: " << viewp->getPathname() << " name: " << viewp->getName() << llendl; - + if(log_visibility_change) + { + // Consider changing returns to confirm success and know which widget grabbed it + // For now assume success and log at highest xui possible + // NOTE we log actual state - which may differ if it somehow failed to set visibility + lldebugs << "LLView::handleVisibilityChange - now: " << getVisible() << " xui: " << viewp->getPathname() << " name: " << viewp->getName() << llendl; + } } } diff --git a/indra/llui/llviewereventrecorder.cpp b/indra/llui/llviewereventrecorder.cpp index a352f621eb..546a0f5866 100644 --- a/indra/llui/llviewereventrecorder.cpp +++ b/indra/llui/llviewereventrecorder.cpp @@ -31,7 +31,7 @@ LLViewerEventRecorder::LLViewerEventRecorder() { clear(UNDEFINED); - + logEvents = false; // Remove any previous event log file std::string old_log_ui_events_to_llsd_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "SecondLife_Events_log.old"); LLFile::remove(old_log_ui_events_to_llsd_file); diff --git a/indra/llui/llviewereventrecorder.h b/indra/llui/llviewereventrecorder.h index 72ca643ced..375efcc3de 100644 --- a/indra/llui/llviewereventrecorder.h +++ b/indra/llui/llviewereventrecorder.h @@ -65,7 +65,7 @@ class LLViewerEventRecorder : public LLSingleton std::string get_xui(); void update_xui(std::string xui); - bool getLoggingStatus(); + bool getLoggingStatus(){return logEvents;}; void setEventLoggingOn(); void setEventLoggingOff(); -- cgit v1.2.3 From a5db4f6c3d1f6804c20b3095b39203887728d3a6 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Tue, 19 Nov 2013 09:28:58 -0500 Subject: add documentation to LLAgent::addRegionChangedCallback and improve logging --- indra/newview/llagent.cpp | 6 +++--- indra/newview/llagent.h | 19 ++++++++++++++++++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index da29aaff50..5302ae2636 100755 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -261,9 +261,7 @@ bool handleSlowMotionAnimation(const LLSD& newvalue) void LLAgent::setCanEditParcel() // called via mParcelChangedSignal { - LL_DEBUGS("AgentLocation") << LL_ENDL; bool can_edit = LLToolMgr::getInstance()->canEdit(); - gAgent.mCanEditParcel = can_edit; } @@ -837,7 +835,7 @@ void LLAgent::handleServerBakeRegionTransition(const LLUUID& region_id) void LLAgent::changeParcels() { - LL_DEBUGS("AgentLocation") << LL_ENDL; + LL_DEBUGS("AgentLocation") << "Calling ParcelChanged callbacks" << LL_ENDL; // Notify anything that wants to know about parcel changes mParcelChangedSignal(); } @@ -920,6 +918,8 @@ void LLAgent::setRegion(LLViewerRegion *regionp) } mRegionp = regionp; + // TODO - most of what follows probably should be moved into callbacks + // Pass the region host to LLUrlEntryParcel to resolve parcel name // with a server request. LLUrlEntryParcel::setRegionHost(getRegionHost()); diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index fafa166efd..0662be897a 100755 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -253,7 +253,24 @@ private: LLHost getRegionHost() const; BOOL inPrelude(); - // Register a boost callback to be called when the agent changes regions + /** + * Register a boost callback to be called when the agent changes regions + * Note that if you need to access a capability for the region, you may need to wait + * for the capabilities to be received, since in some cases your region changed + * callback will be called before the capabilities have been received. Your callback + * may need to look something like: + * + * LLViewerRegion* region = gAgent.getRegion(); + * if (region->capabilitiesReceived()) + * { + * useCapability(region); + * } + * else // Need to handle via callback after caps arrive. + * { + * region->setCapabilitiesReceivedCallback(boost::bind(&useCapability,region,_1)); + * // you may or may not want to remove that callback + * } + */ typedef boost::function region_changed_callback_t; boost::signals2::connection addRegionChangedCallback(region_changed_callback_t); -- cgit v1.2.3 From cf0112d4c65e71ba4794174a1fe1ee9108ca75c9 Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Tue, 19 Nov 2013 17:37:21 +0200 Subject: MAINT-3469 FIXED '\n' is shown in 'Can't divide land' notification instead of new string --- indra/newview/skins/default/xui/en/notifications.xml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 6c1f4321e4..4866151d18 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -9835,7 +9835,9 @@ Not enough leased parcels in selection to join. name="CantDivideLandMultipleParcelsSelected" type="notify"> fail -Can't divide land.\nThere is more than one parcel selected.\nTry selecting a smaller piece of land. +Can't divide land. +There is more than one parcel selected. +Try selecting a smaller piece of land. fail -Can't divide land.\nCan't find the parcel.\nPlease report with Help -> Reprt Bug... +Can't divide land. +Can't find the parcel. +Please report with Help -> Report Bug... Reprt Bug name="CantDivideLandWholeParcelSelected" type="notify"> fail -Can't divide land. Whole parcel is selected.\nTry selecting a smaller piece of land. +Can't divide land. Whole parcel is selected. +Try selecting a smaller piece of land. Date: Tue, 19 Nov 2013 15:51:27 -0500 Subject: replace uses of LLEnvManagerNew::setRegionChangeCallback with LLAgent::addRegionChangedCallback --- indra/newview/llagent.cpp | 13 ---- indra/newview/llenvmanager.cpp | 76 +++++++++++----------- indra/newview/llenvmanager.h | 9 +-- indra/newview/llfloatereditdaycycle.cpp | 2 +- indra/newview/llfloaterpathfindingconsole.cpp | 4 +- indra/newview/llfloaterpathfindingobjects.cpp | 3 +- indra/newview/llfloaterregioninfo.cpp | 2 +- .../llmenuoptionpathfindingrebakenavmesh.cpp | 2 +- 8 files changed, 46 insertions(+), 65 deletions(-) diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 5302ae2636..6ee8f26b9f 100755 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -850,7 +850,6 @@ boost::signals2::connection LLAgent::addParcelChangedCallback(parcel_changed_cal //----------------------------------------------------------------------------- void LLAgent::setRegion(LLViewerRegion *regionp) { - bool teleport = true; bool notifyRegionChange; llassert(regionp); @@ -888,9 +887,6 @@ void LLAgent::setRegion(LLViewerRegion *regionp) { gSky.mVOGroundp->setRegion(regionp); } - - // Notify windlight managers - teleport = (gAgent.getTeleportState() != LLAgent::TELEPORT_NONE); } else { @@ -938,15 +934,6 @@ void LLAgent::setRegion(LLViewerRegion *regionp) LLFloaterMove::sUpdateFlyingStatus(); - if (teleport) - { - LLEnvManagerNew::instance().onTeleport(); - } - else - { - LLEnvManagerNew::instance().onRegionCrossing(); - } - // If the newly entered region is using server bakes, and our // current appearance is non-baked, request appearance update from // server. diff --git a/indra/newview/llenvmanager.cpp b/indra/newview/llenvmanager.cpp index 86fe6754dc..589cf28615 100755 --- a/indra/newview/llenvmanager.cpp +++ b/indra/newview/llenvmanager.cpp @@ -92,9 +92,11 @@ void LLEnvPrefs::setUseDayCycle(const std::string& name) } //============================================================================= -LLEnvManagerNew::LLEnvManagerNew() +LLEnvManagerNew::LLEnvManagerNew(): + mInterpNextChangeMessage(true), + mCurRegionUUID(LLUUID::null), + mLastReceivedID(LLUUID::null) { - mInterpNextChangeMessage = true; // Set default environment settings. mUserPrefs.mUseRegionSettings = true; @@ -102,6 +104,9 @@ LLEnvManagerNew::LLEnvManagerNew() mUserPrefs.mWaterPresetName = "Default"; mUserPrefs.mSkyPresetName = "Default"; mUserPrefs.mDayCycleName = "Default"; + + LL_DEBUGS("Windlight")<getRegionID() : LLUUID::null; - if (region_uuid == mCurRegionUUID) + if (region_uuid != mCurRegionUUID) { - return; + // Clear locally modified region settings. + mNewRegionPrefs.clear(); + + // *TODO: clear environment settings of the previous region? + + // Request environment settings of the new region. + mCurRegionUUID = region_uuid; + // for region crossings, interpolate the change; for teleports, don't + mInterpNextChangeMessage = (gAgent.getTeleportState() == LLAgent::TELEPORT_NONE); + LL_DEBUGS("Windlight") << (mInterpNextChangeMessage ? "Crossed" : "Teleported") + << " to new region: " << region_uuid + << LL_ENDL; + requestRegionSettings(); + } + else + { + LL_DEBUGS("Windlight") << "disregarding region change; interp: " + << (mInterpNextChangeMessage ? "true" : "false") + << " regionp: " << regionp + << " old: " << mCurRegionUUID + << " new: " << region_uuid + << LL_ENDL; } - - // Clear locally modified region settings. - mNewRegionPrefs.clear(); - - // *TODO: clear environment settings of the previous region? - - // Request environment settings of the new region. - LL_DEBUGS("Windlight") << "New viewer region: " << region_uuid << LL_ENDL; - mCurRegionUUID = region_uuid; - mInterpNextChangeMessage = interpolate; - requestRegionSettings(); - - // Let interested parties know agent region has been changed. - mRegionChangeSignal(); } diff --git a/indra/newview/llenvmanager.h b/indra/newview/llenvmanager.h index ad56761bc7..c7877303fc 100755 --- a/indra/newview/llenvmanager.h +++ b/indra/newview/llenvmanager.h @@ -166,7 +166,6 @@ class LLEnvManagerNew : public LLSingleton public: typedef boost::signals2::signal prefs_change_signal_t; typedef boost::signals2::signal region_settings_change_signal_t; - typedef boost::signals2::signal region_change_signal_t; typedef boost::signals2::signal region_settings_applied_signal_t; LLEnvManagerNew(); @@ -222,15 +221,12 @@ public: bool sendRegionSettings(const LLEnvironmentSettings& new_settings); boost::signals2::connection setPreferencesChangeCallback(const prefs_change_signal_t::slot_type& cb); boost::signals2::connection setRegionSettingsChangeCallback(const region_settings_change_signal_t::slot_type& cb); - boost::signals2::connection setRegionChangeCallback(const region_change_signal_t::slot_type& cb); boost::signals2::connection setRegionSettingsAppliedCallback(const region_settings_applied_signal_t::slot_type& cb); static bool canEditRegionSettings(); /// @return true if we have access to editing region environment static const std::string getScopeString(LLEnvKey::EScope scope); // Public callbacks. - void onRegionCrossing(); - void onTeleport(); void onRegionSettingsResponse(const LLSD& content); void onRegionSettingsApplyResponse(bool ok); @@ -251,7 +247,7 @@ private: bool useDefaultSky(); bool useDefaultWater(); - void onRegionChange(bool interpolate); + void onRegionChange(); /// Emitted when user environment preferences change. prefs_change_signal_t mUsePrefsChangeSignal; @@ -259,9 +255,6 @@ private: /// Emitted when region environment settings update comes. region_settings_change_signal_t mRegionSettingsChangeSignal; - /// Emitted when agent region changes. Move to LLAgent? - region_change_signal_t mRegionChangeSignal; - /// Emitted when agent region changes. Move to LLAgent? region_settings_applied_signal_t mRegionSettingsAppliedSignal; diff --git a/indra/newview/llfloatereditdaycycle.cpp b/indra/newview/llfloatereditdaycycle.cpp index b63677b258..78e20e3bf0 100755 --- a/indra/newview/llfloatereditdaycycle.cpp +++ b/indra/newview/llfloatereditdaycycle.cpp @@ -145,7 +145,7 @@ void LLFloaterEditDayCycle::initCallbacks(void) // Connect to env manager events. LLEnvManagerNew& env_mgr = LLEnvManagerNew::instance(); env_mgr.setRegionSettingsChangeCallback(boost::bind(&LLFloaterEditDayCycle::onRegionSettingsChange, this)); - env_mgr.setRegionChangeCallback(boost::bind(&LLFloaterEditDayCycle::onRegionChange, this)); + gAgent.addRegionChangedCallback(boost::bind(&LLFloaterEditDayCycle::onRegionChange, this)); env_mgr.setRegionSettingsAppliedCallback(boost::bind(&LLFloaterEditDayCycle::onRegionSettingsApplied, this, _1)); // Connect to day cycle manager events. diff --git a/indra/newview/llfloaterpathfindingconsole.cpp b/indra/newview/llfloaterpathfindingconsole.cpp index 298454724b..161259d049 100755 --- a/indra/newview/llfloaterpathfindingconsole.cpp +++ b/indra/newview/llfloaterpathfindingconsole.cpp @@ -34,11 +34,11 @@ #include +#include "llagent.h" #include "llbutton.h" #include "llcheckboxctrl.h" #include "llcombobox.h" #include "llcontrol.h" -#include "llenvmanager.h" #include "llfloaterpathfindingcharacters.h" #include "llfloaterpathfindinglinksets.h" #include "llfloaterreg.h" @@ -224,7 +224,7 @@ void LLFloaterPathfindingConsole::onOpen(const LLSD& pKey) if (!mRegionBoundarySlot.connected()) { - mRegionBoundarySlot = LLEnvManagerNew::instance().setRegionChangeCallback(boost::bind(&LLFloaterPathfindingConsole::onRegionBoundaryCross, this)); + mRegionBoundarySlot = gAgent.addRegionChangedCallback(boost::bind(&LLFloaterPathfindingConsole::onRegionBoundaryCross, this)); } if (!mTeleportFailedSlot.connected()) diff --git a/indra/newview/llfloaterpathfindingobjects.cpp b/indra/newview/llfloaterpathfindingobjects.cpp index 20c1215bcb..d72ee073e1 100755 --- a/indra/newview/llfloaterpathfindingobjects.cpp +++ b/indra/newview/llfloaterpathfindingobjects.cpp @@ -41,7 +41,6 @@ #include "llavatarnamecache.h" #include "llbutton.h" #include "llcheckboxctrl.h" -#include "llenvmanager.h" #include "llfloater.h" #include "llfontgl.h" #include "llnotifications.h" @@ -85,7 +84,7 @@ void LLFloaterPathfindingObjects::onOpen(const LLSD &pKey) if (!mRegionBoundaryCrossingSlot.connected()) { - mRegionBoundaryCrossingSlot = LLEnvManagerNew::getInstance()->setRegionChangeCallback(boost::bind(&LLFloaterPathfindingObjects::onRegionBoundaryCrossed, this)); + mRegionBoundaryCrossingSlot = gAgent.addRegionChangedCallback(boost::bind(&LLFloaterPathfindingObjects::onRegionBoundaryCrossed, this)); } if (!mGodLevelChangeSlot.connected()) diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 66bf49331b..ed0209f90b 100755 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -219,7 +219,7 @@ BOOL LLFloaterRegionInfo::postBuild() &processEstateOwnerRequest); // Request region info when agent region changes. - LLEnvManagerNew::instance().setRegionChangeCallback(boost::bind(&LLFloaterRegionInfo::requestRegionInfo, this)); + gAgent.addRegionChangedCallback(boost::bind(&LLFloaterRegionInfo::requestRegionInfo, this)); return TRUE; } diff --git a/indra/newview/llmenuoptionpathfindingrebakenavmesh.cpp b/indra/newview/llmenuoptionpathfindingrebakenavmesh.cpp index a567d1217a..8879cfd7fb 100755 --- a/indra/newview/llmenuoptionpathfindingrebakenavmesh.cpp +++ b/indra/newview/llmenuoptionpathfindingrebakenavmesh.cpp @@ -79,7 +79,7 @@ void LLMenuOptionPathfindingRebakeNavmesh::initialize() if ( !mRegionCrossingSlot.connected() ) { - mRegionCrossingSlot = LLEnvManagerNew::getInstance()->setRegionChangeCallback(boost::bind(&LLMenuOptionPathfindingRebakeNavmesh::handleRegionBoundaryCrossed, this)); + mRegionCrossingSlot = gAgent.addRegionChangedCallback(boost::bind(&LLMenuOptionPathfindingRebakeNavmesh::handleRegionBoundaryCrossed, this)); } if (!mAgentStateSlot.connected()) -- cgit v1.2.3 From dad992ea31b6b823c316400e61d50d1aa9e52330 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Tue, 19 Nov 2013 16:17:58 -0500 Subject: STORM-1980 Minor xml change --- indra/newview/skins/default/xui/en/floater_region_restarting.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/indra/newview/skins/default/xui/en/floater_region_restarting.xml b/indra/newview/skins/default/xui/en/floater_region_restarting.xml index 1bf5884653..dcb5fcc41d 100644 --- a/indra/newview/skins/default/xui/en/floater_region_restarting.xml +++ b/indra/newview/skins/default/xui/en/floater_region_restarting.xml @@ -25,6 +25,7 @@ If you stay in this region you will be logged out. top="0" left="0" background_visible="true" + bg_opaque_color="Orange" bg_alpha_color="Orange"> Date: Thu, 21 Nov 2013 12:37:26 +0200 Subject: MAINT-3471 FIXED Set USER_LOCALE when updating item count. --- indra/newview/llpanelmaininventory.cpp | 13 ++++++++----- indra/newview/llpanelmaininventory.h | 2 ++ 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 1ff0bfd091..bd173fadc7 100755 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -574,13 +574,16 @@ void LLPanelMainInventory::draw() void LLPanelMainInventory::updateItemcountText() { - // *TODO: Calling setlocale() on each frame may be inefficient. - //LLLocale locale(LLStringUtil::getLocale()); - std::string item_count_string; - LLResMgr::getInstance()->getIntegerString(item_count_string, gInventory.getItemCount()); + if(mItemCount != gInventory.getItemCount()) + { + mItemCount = gInventory.getItemCount(); + mItemCountString = ""; + LLLocale locale(LLLocale::USER_LOCALE); + LLResMgr::getInstance()->getIntegerString(mItemCountString, mItemCount); + } LLStringUtil::format_map_t string_args; - string_args["[ITEM_COUNT]"] = item_count_string; + string_args["[ITEM_COUNT]"] = mItemCountString; string_args["[FILTER]"] = getFilterText(); std::string text = ""; diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h index fc8cc67c33..21f0ca0cae 100755 --- a/indra/newview/llpanelmaininventory.h +++ b/indra/newview/llpanelmaininventory.h @@ -131,6 +131,8 @@ private: LLSaveFolderState* mSavedFolderState; std::string mFilterText; std::string mFilterSubString; + S32 mItemCount; + std::string mItemCountString; ////////////////////////////////////////////////////////////////////////////////// -- cgit v1.2.3 From 1ae4d45337b380213112183f153a631d4c3f3289 Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Thu, 21 Nov 2013 15:51:37 +0200 Subject: MAINT-3480 FIXED Duplicated strings are deleted --- indra/newview/skins/default/xui/en/notifications.xml | 10 +--------- indra/newview/skins/default/xui/en/strings.xml | 3 +-- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 4866151d18..b3fd1fa818 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -9764,15 +9764,7 @@ Only the first 10 selected objects have been disabled. Refresh and make addition type="notify"> fail You need to update your viewer to buy this parcel. - - - - fail -You can't buy this land due to your maturity Rating. You may need to validate your age and/or install the latest Viewer. Please go to the Knowledge Base for details on accessing areas with this maturity Rating. - + Merchant Outbox - Friends - Received Items + Friends All No attachments worn -- cgit v1.2.3 From bcf26112797e97d1b0f512605235c0faf115f277 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Thu, 21 Nov 2013 14:05:28 -0500 Subject: Added tag 3.6.11-release for changeset 2feb70a4cfde --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index d598ff1f62..85c17be67d 100755 --- a/.hgtags +++ b/.hgtags @@ -469,3 +469,4 @@ ae457ece77001767ae9613148c495e7b98cc0f4a 3.6.7-release d40c66e410741de7e90b1ed6dac28dd8a2d7e1f6 3.6.8-release 70eda3721d36df3e00730629c42a1304e5bc65b8 3.6.9-release 5b54b36862ff8bc3b6935673c9d1c1f22ee8d521 3.6.10-release +2feb70a4cfde43f2898d95ff8fcae3e67805c7c2 3.6.11-release -- cgit v1.2.3 From 787ccaf297e81291469aaf269f563d862fb150a3 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Thu, 21 Nov 2013 14:05:30 -0500 Subject: increment viewer version to 3.6.12 --- indra/newview/VIEWER_VERSION.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index e8b6c77dc9..8b7b0b52e5 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -3.6.11 +3.6.12 -- cgit v1.2.3 From 2c5e306e14c0cedb57a19bf7f165d57510c5f62e Mon Sep 17 00:00:00 2001 From: maksymsproductengine Date: Fri, 22 Nov 2013 20:16:37 +0200 Subject: MAINT-3474 FIXED crash on startup in LLTextureCache::purgeAllTextures(bool) attempting to delete texture cache --- indra/llvfs/lldiriterator.cpp | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/indra/llvfs/lldiriterator.cpp b/indra/llvfs/lldiriterator.cpp index 460d2a8b4f..229608231c 100755 --- a/indra/llvfs/lldiriterator.cpp +++ b/indra/llvfs/lldiriterator.cpp @@ -119,16 +119,25 @@ bool LLDirIterator::Impl::next(std::string &fname) fs::directory_iterator end_itr; // default construction yields past-the-end bool found = false; - while (mIter != end_itr && !found) + + // Check if path is a directory. + try { - boost::smatch match; - std::string name = mIter->path().filename().string(); - if (found = boost::regex_match(name, match, mFilterExp)) + while (mIter != end_itr && !found) { - fname = name; + boost::smatch match; + std::string name = mIter->path().filename().string(); + if (found = boost::regex_match(name, match, mFilterExp)) + { + fname = name; + } + + ++mIter; } - - ++mIter; + } + catch (const fs::filesystem_error& e) + { + llwarns << e.what() << llendl; } return found; -- cgit v1.2.3 From 6d6b0edfe2aea7890cb33614723b9842e700cfa8 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Sun, 24 Nov 2013 13:16:36 -0500 Subject: normalize format of and add arch to all installer names --- BuildParams | 8 +- build.sh | 5 +- indra/lib/python/indra/util/llmanifest.py | 19 ++- indra/newview/CMakeLists.txt | 5 +- indra/newview/viewer_manifest.py | 221 ++++++++++++++---------------- 5 files changed, 124 insertions(+), 134 deletions(-) diff --git a/BuildParams b/BuildParams index 31e7e841ad..6b63448c52 100755 --- a/BuildParams +++ b/BuildParams @@ -51,13 +51,13 @@ viewer_channel = "Second Life Test" sourceid = "" additional_packages = "Amazon Desura B C" Amazon_sourceid = "1207v_Amazon" -Amazon_viewer_channel_suffix = " Amazon" +Amazon_viewer_channel_suffix = "Amazon" Desura_sourceid = "1208_desura" -Desura_viewer_channel_suffix = " Desura" +Desura_viewer_channel_suffix = "Desura" B_sourceid = "1301_B" -B_viewer_channel_suffix = " B" +B_viewer_channel_suffix = "B" C_sourceid = "1302_C" -C_viewer_channel_suffix = " C" +C_viewer_channel_suffix = "C" # Report changes since... viewer-development.show_changes_since = last_sprint diff --git a/build.sh b/build.sh index 4875ef39f7..ccc8476cea 100755 --- a/build.sh +++ b/build.sh @@ -347,8 +347,7 @@ then if $build_viewer then begin_section Upload Installer - # Upload installer - note that ONLY THE FIRST ITEM uploaded as "installer" - # will appear in the version manager. + # Upload installer package=$(installer_$arch) if [ x"$package" = x ] || test -d "$package" then @@ -372,7 +371,7 @@ then then upload_item installer "$package" binary/octet-stream else - record_failure "Failed to upload $package_id package." + record_failure "Failed to upload $package_id package ($package::$additional_package_name)." fi done export additional_package_name="" diff --git a/indra/lib/python/indra/util/llmanifest.py b/indra/lib/python/indra/util/llmanifest.py index 52b4acbc94..d9f877e07f 100755 --- a/indra/lib/python/indra/util/llmanifest.py +++ b/indra/lib/python/indra/util/llmanifest.py @@ -85,7 +85,8 @@ def get_default_platform(dummy): }[sys.platform] DEFAULT_SRCTREE = os.path.dirname(sys.argv[0]) -RELEASE_CHANNEL = 'Second Life Release' +CHANNEL_VENDOR_BASE = 'Second Life' +RELEASE_CHANNEL = CHANNEL_VENDOR_BASE + ' Release' ARGUMENTS=[ dict(name='actions', @@ -119,6 +120,9 @@ ARGUMENTS=[ dict(name='channel', description="""The channel to use for updates, packaging, settings name, etc.""", default='CHANNEL UNSET'), + dict(name='channel_suffix', + description="""Addition to the channel for packaging and channel value, but not application name (used internally)""", + default=None), dict(name='installer_name', description=""" The name of the file that the installer should be packaged up into. Only used on Linux at the moment.""", @@ -286,21 +290,24 @@ def main(): base_channel_name = args['channel'] # Build each additional package. package_id_list = additional_packages.split(" ") + args['channel'] = base_channel_name for package_id in package_id_list: try: - args['package_id'] = package_id - args['channel'] = base_channel_name + os.environ[package_id + "_viewer_channel_suffix"] + if package_id + "_viewer_channel_suffix" in os.environ: + args['channel_suffix'] = os.environ[package_id + "_viewer_channel_suffix"] + else: + args['channel_suffix'] = None if package_id + "_sourceid" in os.environ: args['sourceid'] = os.environ[package_id + "_sourceid"] else: - args['sourceid'] = "" + args['sourceid'] = None args['dest'] = base_dest_prefix + os.sep + package_id + os.sep + base_dest_postfix except KeyError: sys.stderr.write("Failed to create package for package_id: %s" % package_id) sys.stderr.flush() continue if touch: - print 'Creating additional package for ', package_id, ' in ', args['dest'] + print 'Creating additional package for "', package_id, '" in ', args['dest'] wm = LLManifest.for_platform(args['platform'], args.get('arch'))(args) wm.do(*args['actions']) if touch: @@ -332,7 +339,7 @@ class LLManifest(object): manifests = {} def for_platform(self, platform, arch = None): if arch: - platform = platform + '_' + arch + platform = platform + '_' + arch + '_' return self.manifests[platform.lower()] for_platform = classmethod(for_platform) diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 1fea6dea9f..c5e1cde4e6 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1748,6 +1748,7 @@ if (WINDOWS) ARGS ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py --actions=copy + --arch=${ARCH} --artwork=${ARTWORK_DIR} --build=${CMAKE_CURRENT_BINARY_DIR} --buildtype=${CMAKE_BUILD_TYPE} @@ -1815,6 +1816,7 @@ if (WINDOWS) COMMAND ${PYTHON_EXECUTABLE} ARGS ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py + --arch=${ARCH} --artwork=${ARTWORK_DIR} --build=${CMAKE_CURRENT_BINARY_DIR} --buildtype=${CMAKE_BUILD_TYPE} @@ -1939,7 +1941,6 @@ if (LINUX) --configuration=${CMAKE_CFG_INTDIR} --dest=${CMAKE_CURRENT_BINARY_DIR}/packaged --grid=${GRID} - --installer_name=${product} --source=${CMAKE_CURRENT_SOURCE_DIR} --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched DEPENDS @@ -2017,6 +2018,7 @@ if (DARWIN) ARGS ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py --actions=copy + --arch=${ARCH} --artwork=${ARTWORK_DIR} --build=${CMAKE_CURRENT_BINARY_DIR} --buildtype=${CMAKE_BUILD_TYPE} @@ -2049,6 +2051,7 @@ if (DARWIN) COMMAND ${PYTHON_EXECUTABLE} ARGS ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py + --arch=${ARCH} --artwork=${ARTWORK_DIR} --build=${CMAKE_CURRENT_BINARY_DIR} --buildtype=${CMAKE_BUILD_TYPE} diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 894e368427..a657c4738c 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -38,7 +38,7 @@ viewer_dir = os.path.dirname(__file__) # Put it FIRST because some of our build hosts have an ancient install of # indra.util.llmanifest under their system Python! sys.path.insert(0, os.path.join(viewer_dir, os.pardir, "lib", "python")) -from indra.util.llmanifest import LLManifest, main, proper_windows_path, path_ancestors +from indra.util.llmanifest import LLManifest, main, proper_windows_path, path_ancestors, CHANNEL_VENDOR_BASE, RELEASE_CHANNEL try: from llbase import llsd except ImportError: @@ -117,16 +117,16 @@ class ViewerManifest(LLManifest): Type='String', Value='')) settings_install = {} - for key, setting in (("sourceid", "sourceid"), - ("channel", "CmdLineChannel")): - if key in self.args: - # only set if value is non-empty - if self.args[key]: - # copy corresponding setting from settings_template - settings_install[setting] = settings_template[setting].copy() - # then fill in Value - settings_install[setting]["Value"] = self.args[key] - print "Put %s '%s' in settings_install.xml" % (setting, self.args[key]) + if 'sourceid' in self.args and self.args['sourceid']: + settings_install['sourceid'] = settings_template['sourceid'].copy() + settings_install['sourceid']['Value'] = self.args['sourceid'] + print "Set sourceid in settings_install.xml to '%s'" % self.args['sourceid'] + + if 'channel_suffix' in self.args and self.args['channel_suffix']: + print "DEBUG CmdLineChannel channel_suffix '%s'" % self.args['channel_suffix'] + settings_install['CmdLineChannel'] = settings_template['CmdLineChannel'].copy() + settings_install['CmdLineChannel']['Value'] = self.channel_with_pkg_suffix() + print "Set CmdLineChannel in settings_install.xml to '%s'" % self.channel_with_pkg_suffix() # did we actually copy anything into settings_install dict? if settings_install: @@ -197,37 +197,72 @@ class ViewerManifest(LLManifest): def grid(self): return self.args['grid'] + def channel(self): return self.args['channel'] - def channel_unique(self): - return self.channel().replace("Second Life", "").strip() - def channel_oneword(self): - return "".join(self.channel_unique().split()) - def channel_lowerword(self): - return self.channel_oneword().lower() + + def channel_with_pkg_suffix(self): + fullchannel=self.channel() + if 'channel_suffix' in self.args and self.args['channel_suffix']: + fullchannel+=' '+self.args['channel_suffix'] + return fullchannel + + def channel_variant(self): + global CHANNEL_VENDOR_BASE + return self.channel().replace(CHANNEL_VENDOR_BASE, "").strip() + + def channel_type(self): # returns 'release', 'beta', 'project', or 'test' + global CHANNEL_VENDOR_BASE + channel_qualifier=self.channel().replace(CHANNEL_VENDOR_BASE, "").lower().strip() + if channel_qualifier.startswith('release'): + channel_type='release' + elif channel_qualifier.startswith('beta'): + channel_type='beta' + elif channel_qualifier.startswith('project'): + channel_type='project' + else: + channel_type='test' + return channel_type + + def channel_variant_app_suffix(self): + # get any part of the compiled channel name after the CHANNEL_VENDOR_BASE + suffix=self.channel_variant() + # by ancient convention, we don't use Release in the app name + if self.channel_type() == 'release': + suffix=suffix.replace('Release', '').strip() + # for the base release viewer, suffix will now be null - for any other, append what remains + if len(suffix) > 0: + suffix = "_"+ ("_".join(suffix.split())) + # the additional_packages mechanism adds more to the installer name (but not to the app name itself) + if 'channel_suffix' in self.args and self.args['channel_suffix']: + suffix+='_'+("_".join(self.args['channel_suffix'].split())) + return suffix + + def installer_base_name(self): + global CHANNEL_VENDOR_BASE + # a standard map of strings for replacing in the templates + substitution_strings = { + 'channel_vendor_base' : '_'.join(CHANNEL_VENDOR_BASE.split()), + 'channel_variant_underscores':self.channel_variant_app_suffix(), + 'version_underscores' : '_'.join(self.args['version']), + 'arch':self.args['arch'] + } + return "%(channel_vendor_base)s%(channel_variant_underscores)s_%(version_underscores)s_%(arch)s" % substitution_strings def app_name(self): - app_suffix='Test' - channel_type=self.channel_lowerword() - if channel_type.startswith('release') : + global CHANNEL_VENDOR_BASE + channel_type=self.channel_type() + if channel_type == 'release': app_suffix='Viewer' - elif re.match('^(beta|project).*',channel_type) : - app_suffix=self.channel_unique() - return "Second Life "+app_suffix - + else: + app_suffix=self.channel_variant() + return CHANNEL_VENDOR_BASE + ' ' + app_suffix + + def app_name_oneword(self): + return ''.join(self.app_name().split()) + def icon_path(self): - icon_path="icons/" - channel_type=self.channel_lowerword() - print "Icon channel type '%s'" % channel_type - if channel_type.startswith('release') : - icon_path += 'release' - elif re.match('^beta.*',channel_type) : - icon_path += 'beta' - elif re.match('^project.*',channel_type) : - icon_path += 'project' - else : - icon_path += 'test' - return icon_path + return "icons/" + self.channel_type() def flags_list(self): """ Convenience function that returns the command-line flags @@ -277,15 +312,9 @@ class ViewerManifest(LLManifest): random.shuffle(names) return ', '.join(names) -class WindowsManifest(ViewerManifest): +class Windows_i686_Manifest(ViewerManifest): def final_exe(self): - app_suffix="Test" - channel_type=self.channel_lowerword() - if channel_type.startswith('release') : - app_suffix='' - elif re.match('^(beta|project).*',channel_type) : - app_suffix=''.join(self.channel_unique().split()) - return "SecondLife"+app_suffix+".exe" + return self.app_name_oneword()+".exe" def test_msvcrt_and_copy_action(self, src, dst): # This is used to test a dll manifest. @@ -334,7 +363,7 @@ class WindowsManifest(ViewerManifest): print "Doesn't exist:", src def construct(self): - super(WindowsManifest, self).construct() + super(Windows_i686_Manifest, self).construct() if self.is_packaging_viewer(): # Find secondlife-bin.exe in the 'configuration' dir, then rename it to the result of final_exe. @@ -567,65 +596,34 @@ class WindowsManifest(ViewerManifest): 'version_short' : '.'.join(self.args['version'][:-1]), 'version_dashes' : '-'.join(self.args['version']), 'final_exe' : self.final_exe(), - 'grid':self.args['grid'], - 'grid_caps':self.args['grid'].upper(), 'flags':'', - 'channel':self.channel(), - 'channel_oneword':self.channel_oneword(), - 'channel_unique':self.channel_unique(), - 'subchannel_underscores':'_'.join(self.channel_unique().split()) + 'app_name':self.app_name(), + 'app_name_oneword':self.app_name_oneword() } + installer_file = self.installer_base_name() + '_Setup.exe' + substitution_strings['installer_file'] = installer_file + version_vars = """ !define INSTEXE "%(final_exe)s" !define VERSION "%(version_short)s" !define VERSION_LONG "%(version)s" !define VERSION_DASHES "%(version_dashes)s" """ % substitution_strings - if self.default_channel(): - if self.default_grid(): - # release viewer - installer_file = "Second_Life_%(version_dashes)s_Setup.exe" - grid_vars_template = """ - OutFile "%(installer_file)s" - !define INSTFLAGS "%(flags)s" - !define INSTNAME "SecondLifeViewer" - !define SHORTCUT "Second Life Viewer" - !define URLNAME "secondlife" - Caption "Second Life" - """ - else: - # alternate grid viewer - installer_file = "Second_Life_%(version_dashes)s_(%(grid_caps)s)_Setup.exe" - grid_vars_template = """ - OutFile "%(installer_file)s" - !define INSTFLAGS "%(flags)s" - !define INSTNAME "SecondLife%(grid_caps)s" - !define SHORTCUT "Second Life (%(grid_caps)s)" - !define URLNAME "secondlife%(grid)s" - !define UNINSTALL_SETTINGS 1 - Caption "Second Life %(grid)s ${VERSION}" - """ + + if self.channel_type() == 'release': + substitution_strings['caption'] = CHANNEL_VENDOR_BASE else: - # some other channel (grid name not used) - installer_file = "Second_Life_%(version_dashes)s_%(subchannel_underscores)s_Setup.exe" - grid_vars_template = """ + substitution_strings['caption'] = self.app_name() + ' ${VERSION}' + + grid_vars_template = """ OutFile "%(installer_file)s" !define INSTFLAGS "%(flags)s" - !define INSTNAME "SecondLife%(channel_oneword)s" - !define SHORTCUT "%(channel)s" + !define INSTNAME "%(app_name_oneword)s" + !define SHORTCUT "%(app_name)s" !define URLNAME "secondlife" - !define UNINSTALL_SETTINGS 1 - Caption "%(channel)s ${VERSION}" + Caption "%(caption)s" """ - if 'installer_name' in self.args: - installer_file = self.args['installer_name'] - else: - installer_file = installer_file % substitution_strings - if len(self.args['package_id']) > 0: - installer_file = installer_file.replace(self.args['package_id'], "") - installer_file = installer_file.replace(".exe", self.args['package_id'] + ".exe") - substitution_strings['installer_file'] = installer_file tempfile = "secondlife_setup_tmp.nsi" # the following replaces strings in the nsi template @@ -663,7 +661,7 @@ class WindowsManifest(ViewerManifest): self.package_file = installer_file -class DarwinManifest(ViewerManifest): +class Darwin_i386_Manifest(ViewerManifest): def is_packaging_viewer(self): # darwin requires full app bundle packaging even for debugging. return True @@ -685,7 +683,7 @@ class DarwinManifest(ViewerManifest): # most everything goes in the Resources directory if self.prefix(src="", dst="Resources"): - super(DarwinManifest, self).construct() + super(Darwin_i386_Manifest, self).construct() if self.prefix("cursors_mac"): self.path("*.tif") @@ -821,6 +819,7 @@ class DarwinManifest(ViewerManifest): self.run_command("chmod +x %r" % os.path.join(self.get_dst_prefix(), script)) def package_finish(self): + global CHANNEL_VENDOR_BASE # Sign the app if requested. if 'signature' in self.args: identity = self.args['signature'] @@ -850,17 +849,9 @@ class DarwinManifest(ViewerManifest): # MBW -- If the mounted volume name changes, it breaks the .DS_Store's background image and icon positioning. # If we really need differently named volumes, we'll need to create multiple DS_Store file images, or use some other trick. - volname="Second Life Installer" # DO NOT CHANGE without understanding comment above + volname=CHANNEL_VENDOR_BASE+" Installer" # DO NOT CHANGE without understanding comment above - if len(self.args['package_id']) > 0: - imagename = imagename + self.args['package_id'] - elif self.default_channel(): - if not self.default_grid(): - # beta case - imagename = imagename + '_' + self.args['grid'].upper() - else: - # first look, etc - imagename = imagename + '_' + self.channel_oneword().upper() + imagename = self.installer_base_name() sparsename = imagename + ".sparseimage" finalname = imagename + ".dmg" @@ -894,7 +885,7 @@ class DarwinManifest(ViewerManifest): # will use the release .DS_Store, and will look broken. # - Ambroff 2008-08-20 dmg_template = os.path.join( - 'installers', 'darwin', '%s-dmg' % self.channel_lowerword()) + 'installers', 'darwin', '%s-dmg' % self.channel_type()) if not os.path.exists (self.src_path_of(dmg_template)): dmg_template = os.path.join ('installers', 'darwin', 'release-dmg') @@ -977,8 +968,9 @@ class LinuxManifest(ViewerManifest): # recurse self.end_prefix("res-sdl") - # Get the icons based on the channel + # Get the icons based on the channel type icon_path = self.icon_path() + print "DEBUG: icon_path '%s'" % icon_path if self.prefix(src=icon_path, dst="") : self.path("secondlife_256.png","secondlife_icon.png") if self.prefix(src="",dst="res-sdl") : @@ -1004,18 +996,7 @@ class LinuxManifest(ViewerManifest): self.run_command("chmod +x %r" % os.path.join(self.get_dst_prefix(), script)) def package_finish(self): - if 'installer_name' in self.args: - installer_name = self.args['installer_name'] - else: - installer_name_components = ['SecondLife_', self.args.get('arch')] - installer_name_components.extend(self.args['version']) - installer_name = "_".join(installer_name_components) - if self.default_channel(): - if not self.default_grid(): - installer_name += '_' + self.args['grid'].upper() - else: - installer_name += '_' + self.channel_oneword().upper() - installer_name = installer_name + self.args['package_id'] + installer_name = self.installer_base_name() self.strip_binaries() @@ -1057,9 +1038,9 @@ class LinuxManifest(ViewerManifest): print "* Going strip-crazy on the packaged binaries, since this is a RELEASE build" self.run_command(r"find %(d)r/bin %(d)r/lib -type f \! -name update_install | xargs --no-run-if-empty strip -S" % {'d': self.get_dst_prefix()} ) # makes some small assumptions about our packaged dir structure -class Linux_i686Manifest(LinuxManifest): +class Linux_i686_Manifest(LinuxManifest): def construct(self): - super(Linux_i686Manifest, self).construct() + super(Linux_i686_Manifest, self).construct() if self.prefix("../packages/lib/release", dst="lib"): self.path("libapr-1.so") @@ -1145,9 +1126,9 @@ class Linux_i686Manifest(LinuxManifest): self.strip_binaries() -class Linux_x86_64Manifest(LinuxManifest): +class Linux_x86_64_Manifest(LinuxManifest): def construct(self): - super(Linux_x86_64Manifest, self).construct() + super(Linux_x86_64_Manifest, self).construct() # support file for valgrind debug tool self.path("secondlife-i686.supp") -- cgit v1.2.3 From 79919ef9b6b9e9ede1580ae69231affee3f42ff8 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Sun, 24 Nov 2013 13:18:12 -0500 Subject: move setting default grid to settings_install.xml so that it works on all platforms --- indra/lib/python/indra/util/llmanifest.py | 14 +++----- .../installers/windows/installer_template.nsi | 12 ++----- indra/newview/viewer_manifest.py | 40 ++++++---------------- 3 files changed, 18 insertions(+), 48 deletions(-) diff --git a/indra/lib/python/indra/util/llmanifest.py b/indra/lib/python/indra/util/llmanifest.py index d9f877e07f..1d85aa2978 100755 --- a/indra/lib/python/indra/util/llmanifest.py +++ b/indra/lib/python/indra/util/llmanifest.py @@ -113,10 +113,8 @@ ARGUMENTS=[ default="Release"), dict(name='dest', description='Destination directory.', default=DEFAULT_SRCTREE), dict(name='grid', - description="""Which grid the client will try to connect to. Even - though it's not strictly a grid, 'firstlook' is also an acceptable - value for this parameter.""", - default=""), + description="""Which grid the client will try to connect to.""", + default=None), dict(name='channel', description="""The channel to use for updates, packaging, settings name, etc.""", default='CHANNEL UNSET'), @@ -217,9 +215,9 @@ def main(): print "Unable to read versionfile '%s'" % args['versionfile'] raise - # default and agni are default - if args['grid'] in ['default', 'agni']: - args['grid'] = '' + # unspecified, default, and agni are default + if args['grid'] in ['', 'default', 'agni']: + args['grid'] = None if 'actions' in args: args['actions'] = args['actions'].split() @@ -356,8 +354,6 @@ class LLManifest(object): self.created_paths = [] self.package_name = "Unknown" - def default_grid(self): - return self.args.get('grid', None) == '' def default_channel(self): return self.args.get('channel', None) == RELEASE_CHANNEL diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi index 8a6114f0d5..4742d7e178 100755 --- a/indra/newview/installers/windows/installer_template.nsi +++ b/indra/newview/installers/windows/installer_template.nsi @@ -72,16 +72,8 @@ LangString LanguageCode ${LANG_RUSSIAN} "ru" LangString LanguageCode ${LANG_TURKISH} "tr" LangString LanguageCode ${LANG_TRADCHINESE} "zh" -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Tweak for different servers/builds (this placeholder is replaced by viewer_manifest.py) -;; For example: -;; !define INSTFLAGS "%(flags)s" -;; !define INSTNAME "SecondLife%(grid_caps)s" -;; !define SHORTCUT "Second Life (%(grid_caps)s)" -;; !define URLNAME "secondlife%(grid)s" -;; !define UNINSTALL_SETTINGS 1 - -%%GRID_VARS%% +;; this placeholder is replaced by viewer_manifest.py +%%INST_VARS%% Name ${INSTNAME} diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index a657c4738c..9e8623c1f9 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -112,6 +112,10 @@ class ViewerManifest(LLManifest): Persist=1, Type='String', Value=''), + CmdLineGridChoice=dict(Comment='Default grid', + Persist=0, + Type='String', + Value=''), CmdLineChannel=dict(Comment='Command line specified channel name', Persist=0, Type='String', @@ -123,11 +127,15 @@ class ViewerManifest(LLManifest): print "Set sourceid in settings_install.xml to '%s'" % self.args['sourceid'] if 'channel_suffix' in self.args and self.args['channel_suffix']: - print "DEBUG CmdLineChannel channel_suffix '%s'" % self.args['channel_suffix'] settings_install['CmdLineChannel'] = settings_template['CmdLineChannel'].copy() settings_install['CmdLineChannel']['Value'] = self.channel_with_pkg_suffix() print "Set CmdLineChannel in settings_install.xml to '%s'" % self.channel_with_pkg_suffix() + if 'grid' in self.args and self.args['grid']: + settings_install['CmdLineGridChoice'] = settings_template['CmdLineGridChoice'].copy() + settings_install['CmdLineGridChoice']['Value'] = self.grid() + print "Set CmdLineGridChoice in settings_install.xml to '%s'" % self.grid() + # did we actually copy anything into settings_install dict? if settings_install: # put_in_file(src=) need not be an actual pathname; it @@ -264,31 +272,6 @@ class ViewerManifest(LLManifest): def icon_path(self): return "icons/" + self.channel_type() - def flags_list(self): - """ Convenience function that returns the command-line flags - for the grid""" - - # The original role of this method seems to have been to build a - # grid-specific viewer: one that would, on launch, preselect a - # particular grid. (Apparently that dates back to when the protocol - # between viewer and simulator required them to be updated in - # lockstep, so that "the beta grid" required "a beta viewer.") But - # those viewer command-line switches no longer work without tweaking - # user_settings/grids.xml. In fact, going forward, it's unclear what - # use case that would address. - - # This method also set a channel-specific (or grid-and-channel- - # specific) user_settings/settings_something.xml file. It has become - # clear that saving user settings in a channel-specific file causes - # more problems (confusion) than it solves, so we've discontinued that. - - # In fact we now avoid forcing viewer command-line switches at all, - # instead introducing a settings_install.xml file. Command-line - # switches don't aggregate well; for instance the generated --channel - # switch actually prevented the user specifying --channel on the - # command line. Settings files have well-defined override semantics. - return None - def extract_names(self,src): try: contrib_file = open(src,'r') @@ -616,9 +599,8 @@ class Windows_i686_Manifest(ViewerManifest): else: substitution_strings['caption'] = self.app_name() + ' ${VERSION}' - grid_vars_template = """ + inst_vars_template = """ OutFile "%(installer_file)s" - !define INSTFLAGS "%(flags)s" !define INSTNAME "%(app_name_oneword)s" !define SHORTCUT "%(app_name)s" !define URLNAME "secondlife" @@ -631,7 +613,7 @@ class Windows_i686_Manifest(ViewerManifest): self.replace_in("installers/windows/installer_template.nsi", tempfile, { "%%VERSION%%":version_vars, "%%SOURCE%%":self.get_src_prefix(), - "%%GRID_VARS%%":grid_vars_template % substitution_strings, + "%%INST_VARS%%":inst_vars_template % substitution_strings, "%%INSTALL_FILES%%":self.nsi_file_commands(True), "%%DELETE_FILES%%":self.nsi_file_commands(False)}) -- cgit v1.2.3 From 6b1d835f95c66f09caaafd073780dcbd5eb07907 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Sun, 24 Nov 2013 15:46:21 -0500 Subject: STORM-1981 Rough initial changes for evaluation purposes. --- doc/contributions.txt | 1 + indra/newview/lltracker.cpp | 87 +++++++++++++++++++++++++++++++++++++++------ 2 files changed, 77 insertions(+), 11 deletions(-) diff --git a/doc/contributions.txt b/doc/contributions.txt index 99527c0587..2a279e1c58 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -674,6 +674,7 @@ Jonathan Yap OPEN-161 STORM-1953 STORM-1957 + STORM-1981 Kadah Coba STORM-1060 STORM-1843 diff --git a/indra/newview/lltracker.cpp b/indra/newview/lltracker.cpp index cbd16e873d..1aa61cf50e 100755 --- a/indra/newview/lltracker.cpp +++ b/indra/newview/lltracker.cpp @@ -412,7 +412,7 @@ const std::string& LLTracker::getTrackedLocationName() return instance()->mTrackedLocationName; } -F32 pulse_func(F32 t, F32 z) +F32 pulse_func(F32 t, F32 z, bool tracking_avatar) { if (!LLTracker::sCheesyBeacon) { @@ -420,8 +420,15 @@ F32 pulse_func(F32 t, F32 z) } t *= F_PI; - z -= t*64.f - 256.f; - + if (tracking_avatar) + { + z += t*64.f - 256.f; + } + else + { + z -= t*64.f - 256.f; + } + F32 a = cosf(z*F_PI/512.f)*10.0f; a = llmax(a, 9.9f); a -= 9.9f; @@ -497,9 +504,11 @@ void LLTracker::renderBeacon(LLVector3d pos_global, } LLColor4 fogged_color = color_frac * color + (1 - color_frac)*gSky.getFogColor(); + LLColor4 under_color = color_frac * LLColor4::blue + (1 - color_frac) * gSky.getFogColor(); F32 FADE_DIST = 3.f; fogged_color.mV[3] = llmax(0.2f, llmin(0.5f,(dist-FADE_DIST)/FADE_DIST)); + under_color.mV[3] = llmax(0.2f, llmin(0.5f,(dist-FADE_DIST)/FADE_DIST)); LLVector3 pos_agent = gAgent.getPosAgentFromGlobal(pos_global); @@ -508,22 +517,21 @@ void LLTracker::renderBeacon(LLVector3d pos_global, LLGLDisable cull_face(GL_CULL_FACE); LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); - gGL.matrixMode(LLRender::MM_MODELVIEW); gGL.pushMatrix(); { gGL.translatef(pos_agent.mV[0], pos_agent.mV[1], pos_agent.mV[2]); - + draw_shockwave(1024.f, gRenderStartTime.getElapsedTimeF32(), 32, fogged_color); gGL.color4fv(fogged_color.mV); const U32 BEACON_VERTS = 256; - const F32 step = 1024.0f/BEACON_VERTS; - + const F32 step = (5020.0f - pos_agent.mV[2]) / BEACON_VERTS; + LLVector3 x_axis = LLViewerCamera::getInstance()->getLeftAxis(); F32 t = gRenderStartTime.getElapsedTimeF32(); F32 dr = dist/LLViewerCamera::getInstance()->getFar(); - + for (U32 i = 0; i < BEACON_VERTS; i++) { F32 x = x_axis.mV[0]; @@ -531,9 +539,10 @@ void LLTracker::renderBeacon(LLVector3d pos_global, F32 z = i * step; F32 z_next = (i+1)*step; - - F32 a = pulse_func(t, z); - F32 an = pulse_func(t, z_next); + + bool tracking_avatar = getTrackingStatus() == TRACKING_AVATAR; + F32 a = pulse_func(t, z, tracking_avatar); + F32 an = pulse_func(t, z_next, tracking_avatar); LLColor4 c_col = fogged_color + LLColor4(a,a,a,a); LLColor4 col_next = fogged_color + LLColor4(an,an,an,an); @@ -561,7 +570,63 @@ void LLTracker::renderBeacon(LLVector3d pos_global, gGL.vertex3f(x*a,y*a,z); gGL.color4fv(col_edge_next.mV); gGL.vertex3f(x*an,y*an,z_next); + gGL.end(); + } + } + gGL.popMatrix(); + + gGL.pushMatrix(); + { + gGL.translatef(pos_agent.mV[0], pos_agent.mV[1], 0); + +// draw_shockwave(1024.f, gRenderStartTime.getElapsedTimeF32(), 32, under_color); + + gGL.color4fv(under_color.mV); + const U32 BEACON_VERTS = 256; + const F32 step = pos_agent.mV[2] / BEACON_VERTS; + + LLVector3 x_axis = LLViewerCamera::getInstance()->getLeftAxis(); + F32 t = gRenderStartTime.getElapsedTimeF32(); + F32 dr = dist/LLViewerCamera::getInstance()->getFar(); + + for (U32 i = 0; i < BEACON_VERTS; i++) + { + F32 x = x_axis.mV[0]; + F32 y = x_axis.mV[1]; + + F32 z = i * step; + F32 z_next = (i+1)*step; + + bool tracking_avatar = getTrackingStatus() == TRACKING_AVATAR; + F32 a = pulse_func(t, z, tracking_avatar); + F32 an = pulse_func(t, z_next, tracking_avatar); + + LLColor4 c_col = under_color + LLColor4(a,a,a,a); + LLColor4 col_next = under_color + LLColor4(an,an,an,an); + LLColor4 col_edge = under_color * LLColor4(a,a,a,0.0f); + LLColor4 col_edge_next = under_color * LLColor4(an,an,an,0.0f); + + a *= 2.f; + a += 1.0f+dr; + + an *= 2.f; + an += 1.0f+dr; + + gGL.begin(LLRender::TRIANGLE_STRIP); + gGL.color4fv(col_edge.mV); + gGL.vertex3f(-x*a, -y*a, z); + gGL.color4fv(col_edge_next.mV); + gGL.vertex3f(-x*an, -y*an, z_next); + gGL.color4fv(c_col.mV); + gGL.vertex3f(0, 0, z); + gGL.color4fv(col_next.mV); + gGL.vertex3f(0, 0, z_next); + + gGL.color4fv(col_edge.mV); + gGL.vertex3f(x*a,y*a,z); + gGL.color4fv(col_edge_next.mV); + gGL.vertex3f(x*an,y*an,z_next); gGL.end(); } } -- cgit v1.2.3 From bae67dee23f399b0618c37332665210fddbf8f1b Mon Sep 17 00:00:00 2001 From: maksymsproductengine Date: Mon, 25 Nov 2013 19:37:57 +0200 Subject: MAINT-3499 FIXED Region Debug Console is broken after resize --- .../xui/en/floater_region_debug_console.xml | 55 +++++++++++----------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/indra/newview/skins/default/xui/en/floater_region_debug_console.xml b/indra/newview/skins/default/xui/en/floater_region_debug_console.xml index 7c7ee2df4c..99b812a880 100755 --- a/indra/newview/skins/default/xui/en/floater_region_debug_console.xml +++ b/indra/newview/skins/default/xui/en/floater_region_debug_console.xml @@ -10,33 +10,34 @@ width="600" default_tab_group="1"> + left="10" + type="string" + length="1" + follows="all" + font="Monospace" + height="366" + width="576" + ignore_tab="false" + layout="topleft" + max_length="65536" + name="region_debug_console_output" + show_line_numbers="false" + word_wrap="true" + track_end="true" + read_only="true"> + border_style="line" + border_thickness="1" + tab_group="1" + follows="left|right|bottom" + font="SansSerif" + height="19" + layout="topleft" + bottom_delta="20" + max_length="127" + name="region_debug_console_input" + top_delta="0" + width="576"> + -- cgit v1.2.3 From f04c2a781ce1ff65f17bee24187a1ea1fc667787 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Mon, 25 Nov 2013 13:54:43 -0500 Subject: STORM-1981 Make pulse operate properly in both directions. Move duplicated common code into its own function. --- indra/newview/lltracker.cpp | 202 +++++++++++++-------------------- indra/newview/lltracker.h | 2 + indra/newview/skins/default/colors.xml | 3 + 3 files changed, 85 insertions(+), 122 deletions(-) diff --git a/indra/newview/lltracker.cpp b/indra/newview/lltracker.cpp index 1aa61cf50e..e242cd6f5e 100755 --- a/indra/newview/lltracker.cpp +++ b/indra/newview/lltracker.cpp @@ -167,6 +167,7 @@ void LLTracker::render3D() } static LLUIColor map_track_color = LLUIColorTable::instance().getColor("MapTrackColor", LLColor4::white); + static LLUIColor map_track_color_under = LLUIColorTable::instance().getColor("MapTrackColorUnder", LLColor4::white); // Arbitary location beacon if( instance()->mIsTrackingLocation ) @@ -187,7 +188,7 @@ void LLTracker::render3D() } else { - renderBeacon( instance()->mTrackedPositionGlobal, map_track_color, + renderBeacon( instance()->mTrackedPositionGlobal, map_track_color, map_track_color_under, instance()->mBeaconText, instance()->mTrackedLocationName ); } } @@ -229,7 +230,7 @@ void LLTracker::render3D() // and back again instance()->mHasReachedLandmark = FALSE; } - renderBeacon( instance()->mTrackedPositionGlobal, map_track_color, + renderBeacon( instance()->mTrackedPositionGlobal, map_track_color, map_track_color_under, instance()->mBeaconText, instance()->mTrackedLandmarkName ); } } @@ -258,7 +259,7 @@ void LLTracker::render3D() } else { - renderBeacon( av_tracker.getGlobalPos(), map_track_color, + renderBeacon( av_tracker.getGlobalPos(), map_track_color, map_track_color_under, instance()->mBeaconText, av_tracker.getName() ); } } @@ -412,7 +413,7 @@ const std::string& LLTracker::getTrackedLocationName() return instance()->mTrackedLocationName; } -F32 pulse_func(F32 t, F32 z, bool tracking_avatar) +F32 pulse_func(F32 t, F32 z, bool tracking_avatar, std::string direction) { if (!LLTracker::sCheesyBeacon) { @@ -420,7 +421,7 @@ F32 pulse_func(F32 t, F32 z, bool tracking_avatar) } t *= F_PI; - if (tracking_avatar) + if ("DOWN" == direction) { z += t*64.f - 256.f; } @@ -481,10 +482,79 @@ void draw_shockwave(F32 center_z, F32 t, S32 steps, LLColor4 color) gGL.end(); } +void LLTracker::drawBeacon(LLVector3 pos_agent, std::string direction, LLColor4 fogged_color, F32 dist) +{ + const U32 BEACON_VERTS = 256; + F32 step; + + gGL.matrixMode(LLRender::MM_MODELVIEW); + gGL.pushMatrix(); + + if ("DOWN" == direction) + { + gGL.translatef(pos_agent.mV[0], pos_agent.mV[1], pos_agent.mV[2]); + draw_shockwave(1024.f, gRenderStartTime.getElapsedTimeF32(), 32, fogged_color); + step = (5020.0f - pos_agent.mV[2]) / BEACON_VERTS; + } + else + { + gGL.translatef(pos_agent.mV[0], pos_agent.mV[1], 0); + step = pos_agent.mV[2] / BEACON_VERTS; + } + + gGL.color4fv(fogged_color.mV); + + LLVector3 x_axis = LLViewerCamera::getInstance()->getLeftAxis(); + F32 t = gRenderStartTime.getElapsedTimeF32(); + F32 dr = dist/LLViewerCamera::getInstance()->getFar(); + + for (U32 i = 0; i < BEACON_VERTS; i++) + { + F32 x = x_axis.mV[0]; + F32 y = x_axis.mV[1]; + + F32 z = i * step; + F32 z_next = (i+1)*step; + + bool tracking_avatar = getTrackingStatus() == TRACKING_AVATAR; + F32 a = pulse_func(t, z, tracking_avatar, direction); + F32 an = pulse_func(t, z_next, tracking_avatar, direction); + + LLColor4 c_col = fogged_color + LLColor4(a,a,a,a); + LLColor4 col_next = fogged_color + LLColor4(an,an,an,an); + LLColor4 col_edge = fogged_color * LLColor4(a,a,a,0.0f); + LLColor4 col_edge_next = fogged_color * LLColor4(an,an,an,0.0f); + + a *= 2.f; + a += 1.0f+dr; + + an *= 2.f; + an += 1.0f+dr; + + gGL.begin(LLRender::TRIANGLE_STRIP); + gGL.color4fv(col_edge.mV); + gGL.vertex3f(-x*a, -y*a, z); + gGL.color4fv(col_edge_next.mV); + gGL.vertex3f(-x*an, -y*an, z_next); + + gGL.color4fv(c_col.mV); + gGL.vertex3f(0, 0, z); + gGL.color4fv(col_next.mV); + gGL.vertex3f(0, 0, z_next); + + gGL.color4fv(col_edge.mV); + gGL.vertex3f(x*a,y*a,z); + gGL.color4fv(col_edge_next.mV); + gGL.vertex3f(x*an,y*an,z_next); + gGL.end(); + } + gGL.popMatrix(); +} // static void LLTracker::renderBeacon(LLVector3d pos_global, - const LLColor4& color, + const LLColor4& color, + const LLColor4& color_under, LLHUDText* hud_textp, const std::string& label ) { @@ -504,11 +574,11 @@ void LLTracker::renderBeacon(LLVector3d pos_global, } LLColor4 fogged_color = color_frac * color + (1 - color_frac)*gSky.getFogColor(); - LLColor4 under_color = color_frac * LLColor4::blue + (1 - color_frac) * gSky.getFogColor(); + LLColor4 fogged_color_under = color_frac * color_under + (1 - color_frac) * gSky.getFogColor(); F32 FADE_DIST = 3.f; fogged_color.mV[3] = llmax(0.2f, llmin(0.5f,(dist-FADE_DIST)/FADE_DIST)); - under_color.mV[3] = llmax(0.2f, llmin(0.5f,(dist-FADE_DIST)/FADE_DIST)); + fogged_color_under.mV[3] = llmax(0.2f, llmin(0.5f,(dist-FADE_DIST)/FADE_DIST)); LLVector3 pos_agent = gAgent.getPosAgentFromGlobal(pos_global); @@ -517,120 +587,8 @@ void LLTracker::renderBeacon(LLVector3d pos_global, LLGLDisable cull_face(GL_CULL_FACE); LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); - gGL.matrixMode(LLRender::MM_MODELVIEW); - gGL.pushMatrix(); - { - gGL.translatef(pos_agent.mV[0], pos_agent.mV[1], pos_agent.mV[2]); - - draw_shockwave(1024.f, gRenderStartTime.getElapsedTimeF32(), 32, fogged_color); - - gGL.color4fv(fogged_color.mV); - const U32 BEACON_VERTS = 256; - const F32 step = (5020.0f - pos_agent.mV[2]) / BEACON_VERTS; - - LLVector3 x_axis = LLViewerCamera::getInstance()->getLeftAxis(); - F32 t = gRenderStartTime.getElapsedTimeF32(); - F32 dr = dist/LLViewerCamera::getInstance()->getFar(); - - for (U32 i = 0; i < BEACON_VERTS; i++) - { - F32 x = x_axis.mV[0]; - F32 y = x_axis.mV[1]; - - F32 z = i * step; - F32 z_next = (i+1)*step; - - bool tracking_avatar = getTrackingStatus() == TRACKING_AVATAR; - F32 a = pulse_func(t, z, tracking_avatar); - F32 an = pulse_func(t, z_next, tracking_avatar); - - LLColor4 c_col = fogged_color + LLColor4(a,a,a,a); - LLColor4 col_next = fogged_color + LLColor4(an,an,an,an); - LLColor4 col_edge = fogged_color * LLColor4(a,a,a,0.0f); - LLColor4 col_edge_next = fogged_color * LLColor4(an,an,an,0.0f); - - a *= 2.f; - a += 1.0f+dr; - - an *= 2.f; - an += 1.0f+dr; - - gGL.begin(LLRender::TRIANGLE_STRIP); - gGL.color4fv(col_edge.mV); - gGL.vertex3f(-x*a, -y*a, z); - gGL.color4fv(col_edge_next.mV); - gGL.vertex3f(-x*an, -y*an, z_next); - - gGL.color4fv(c_col.mV); - gGL.vertex3f(0, 0, z); - gGL.color4fv(col_next.mV); - gGL.vertex3f(0, 0, z_next); - - gGL.color4fv(col_edge.mV); - gGL.vertex3f(x*a,y*a,z); - gGL.color4fv(col_edge_next.mV); - gGL.vertex3f(x*an,y*an,z_next); - gGL.end(); - } - } - gGL.popMatrix(); - - gGL.pushMatrix(); - { - gGL.translatef(pos_agent.mV[0], pos_agent.mV[1], 0); - -// draw_shockwave(1024.f, gRenderStartTime.getElapsedTimeF32(), 32, under_color); - - gGL.color4fv(under_color.mV); - const U32 BEACON_VERTS = 256; - const F32 step = pos_agent.mV[2] / BEACON_VERTS; - - LLVector3 x_axis = LLViewerCamera::getInstance()->getLeftAxis(); - F32 t = gRenderStartTime.getElapsedTimeF32(); - F32 dr = dist/LLViewerCamera::getInstance()->getFar(); - - for (U32 i = 0; i < BEACON_VERTS; i++) - { - F32 x = x_axis.mV[0]; - F32 y = x_axis.mV[1]; - - F32 z = i * step; - F32 z_next = (i+1)*step; - - bool tracking_avatar = getTrackingStatus() == TRACKING_AVATAR; - F32 a = pulse_func(t, z, tracking_avatar); - F32 an = pulse_func(t, z_next, tracking_avatar); - - LLColor4 c_col = under_color + LLColor4(a,a,a,a); - LLColor4 col_next = under_color + LLColor4(an,an,an,an); - LLColor4 col_edge = under_color * LLColor4(a,a,a,0.0f); - LLColor4 col_edge_next = under_color * LLColor4(an,an,an,0.0f); - - a *= 2.f; - a += 1.0f+dr; - - an *= 2.f; - an += 1.0f+dr; - - gGL.begin(LLRender::TRIANGLE_STRIP); - gGL.color4fv(col_edge.mV); - gGL.vertex3f(-x*a, -y*a, z); - gGL.color4fv(col_edge_next.mV); - gGL.vertex3f(-x*an, -y*an, z_next); - - gGL.color4fv(c_col.mV); - gGL.vertex3f(0, 0, z); - gGL.color4fv(col_next.mV); - gGL.vertex3f(0, 0, z_next); - - gGL.color4fv(col_edge.mV); - gGL.vertex3f(x*a,y*a,z); - gGL.color4fv(col_edge_next.mV); - gGL.vertex3f(x*an,y*an,z_next); - gGL.end(); - } - } - gGL.popMatrix(); + LLTracker::drawBeacon(pos_agent, "DOWN", fogged_color, dist); + LLTracker::drawBeacon(pos_agent, "UP", fogged_color_under, dist); std::string text; text = llformat( "%.0f m", to_vec.magVec()); diff --git a/indra/newview/lltracker.h b/indra/newview/lltracker.h index 8e916af315..d8d5803787 100755 --- a/indra/newview/lltracker.h +++ b/indra/newview/lltracker.h @@ -108,8 +108,10 @@ protected: LLTracker(); ~LLTracker(); + static void drawBeacon(LLVector3 pos_agent, std::string direction, LLColor4 fogged_color, F32 dist); static void renderBeacon( LLVector3d pos_global, const LLColor4& color, + const LLColor4& color_under, LLHUDText* hud_textp, const std::string& label ); diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index f53995732f..6f1a24d7f8 100755 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -510,6 +510,9 @@ + -- cgit v1.2.3 From 6c44fe90f226efcf992ddb1d4380eff618633f76 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Mon, 25 Nov 2013 15:52:59 -0500 Subject: remove obsolete INSTFLAGS references from installer --- indra/newview/installers/windows/installer_template.nsi | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi index 4742d7e178..dd316cdbdf 100755 --- a/indra/newview/installers/windows/installer_template.nsi +++ b/indra/newview/installers/windows/installer_template.nsi @@ -101,7 +101,6 @@ Page instfiles ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Var INSTPROG Var INSTEXE -Var INSTFLAGS Var INSTSHORTCUT Var COMMANDLINE ; command line passed to this installer, set in .onInit Var SHORTCUT_LANG_PARAM ; "--set InstallLanguage de", passes language to viewer @@ -139,7 +138,7 @@ label_ask_launch: label_launch: # Assumes SetOutPath $INSTDIR - Exec '"$INSTDIR\$INSTEXE" $INSTFLAGS $SHORTCUT_LANG_PARAM' + Exec '"$INSTDIR\$INSTEXE" $SHORTCUT_LANG_PARAM' label_no_launch: Pop $R0 FunctionEnd @@ -712,7 +711,6 @@ ShowUninstDetails show Section Uninstall ; Start with some default values. -StrCpy $INSTFLAGS "" StrCpy $INSTPROG "${INSTNAME}" StrCpy $INSTEXE "${INSTEXE}" StrCpy $INSTSHORTCUT "${SHORTCUT}" @@ -911,7 +909,6 @@ 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 $INSTPROG "${INSTNAME}" StrCpy $INSTEXE "${INSTEXE}" StrCpy $INSTSHORTCUT "${SHORTCUT}" @@ -958,7 +955,7 @@ StrCpy $SHORTCUT_LANG_PARAM "--set InstallLanguage $(LanguageCode)" CreateDirectory "$SMPROGRAMS\$INSTSHORTCUT" SetOutPath "$INSTDIR" CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT.lnk" \ - "$INSTDIR\$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM" + "$INSTDIR\$INSTEXE" "$SHORTCUT_LANG_PARAM" WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Create Account.url" \ @@ -977,9 +974,9 @@ CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\Uninstall $INSTSHORTCUT.lnk" \ ; Other shortcuts SetOutPath "$INSTDIR" CreateShortCut "$DESKTOP\$INSTSHORTCUT.lnk" \ - "$INSTDIR\$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM" + "$INSTDIR\$INSTEXE" "$SHORTCUT_LANG_PARAM" CreateShortCut "$INSTDIR\$INSTSHORTCUT.lnk" \ - "$INSTDIR\$INSTEXE" "$INSTFLAGS $SHORTCUT_LANG_PARAM" + "$INSTDIR\$INSTEXE" "$SHORTCUT_LANG_PARAM" CreateShortCut "$INSTDIR\Uninstall $INSTSHORTCUT.lnk" \ '"$INSTDIR\uninst.exe"' '' @@ -988,7 +985,6 @@ CreateShortCut "$INSTDIR\Uninstall $INSTSHORTCUT.lnk" \ ; Write registry WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "" "$INSTDIR" WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Version" "${VERSION_LONG}" -WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Flags" "$INSTFLAGS" WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Shortcut" "$INSTSHORTCUT" WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\$INSTPROG" "Exe" "$INSTEXE" WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\$INSTPROG" "DisplayName" "$INSTPROG (remove only)" @@ -1001,13 +997,13 @@ WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "URL Protocol" "" WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}\DefaultIcon" "" '"$INSTDIR\$INSTEXE"' ;; URL param must be last item passed to viewer, it ignores subsequent params ;; to avoid parameter injection attacks. -WriteRegExpandStr HKEY_CLASSES_ROOT "${URLNAME}\shell\open\command" "" '"$INSTDIR\$INSTEXE" $INSTFLAGS -url "%1"' +WriteRegExpandStr HKEY_CLASSES_ROOT "${URLNAME}\shell\open\command" "" '"$INSTDIR\$INSTEXE" -url "%1"' WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info"(default)" "URL:Second Life" WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info" "URL Protocol" "" WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info\DefaultIcon" "" '"$INSTDIR\$INSTEXE"' ;; URL param must be last item passed to viewer, it ignores subsequent params ;; to avoid parameter injection attacks. -WriteRegExpandStr HKEY_CLASSES_ROOT "x-grid-location-info\shell\open\command" "" '"$INSTDIR\$INSTEXE" $INSTFLAGS -url "%1"' +WriteRegExpandStr HKEY_CLASSES_ROOT "x-grid-location-info\shell\open\command" "" '"$INSTDIR\$INSTEXE" -url "%1"' ; write out uninstaller WriteUninstaller "$INSTDIR\uninst.exe" -- cgit v1.2.3 From 9e986201ba342836260c6db6e532db04d31153d9 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Tue, 26 Nov 2013 09:25:10 -0500 Subject: MAINT-3489: Make Mac updater script detect prematurely deleted .dmg. Also, delete it when done. --- .../updater/scripts/darwin/update_install.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/indra/viewer_components/updater/scripts/darwin/update_install.py b/indra/viewer_components/updater/scripts/darwin/update_install.py index 10d507c9ef..08f4f0ebb9 100755 --- a/indra/viewer_components/updater/scripts/darwin/update_install.py +++ b/indra/viewer_components/updater/scripts/darwin/update_install.py @@ -199,6 +199,11 @@ def main(dmgfile, markerfile, markertext): # prepare for other cleanup with Janitor(LOGF) as janitor: + # Under some circumstances, this script seems to be invoked with a + # nonexistent pathname. Check for that. + if not os.path.isfile(dmgfile): + fail(dmgfile + " has been deleted") + # Try to derive the name of the running viewer app bundle from our # own pathname. (Hopefully the old viewer won't copy this script # to a temp dir before running!) @@ -376,6 +381,13 @@ def main(dmgfile, markerfile, markertext): log(' '.join(command)) subprocess.check_call(command, stdout=LOGF, stderr=subprocess.STDOUT) + # If all the above succeeded, delete the .dmg file. We don't do this + # as a janitor.later() operation because we only want to do it if we + # get this far successfully. Note that this is out of the scope of the + # Janitor: we must detach the .dmg before removing it! + log("rm " + dmgfile) + os.remove(dmgfile) + except Exception, err: # Because we carefully set sys.excepthook -- and even modify it to log # the problem once we have our log file open -- you might think we -- cgit v1.2.3 From 44ea72848fd64201ceef344e4136b9323c258615 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Tue, 26 Nov 2013 09:30:53 -0500 Subject: STORM-1981 Eliminate beam spreading --- indra/newview/lltracker.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/indra/newview/lltracker.cpp b/indra/newview/lltracker.cpp index e242cd6f5e..73ceb783b5 100755 --- a/indra/newview/lltracker.cpp +++ b/indra/newview/lltracker.cpp @@ -506,7 +506,6 @@ void LLTracker::drawBeacon(LLVector3 pos_agent, std::string direction, LLColor4 LLVector3 x_axis = LLViewerCamera::getInstance()->getLeftAxis(); F32 t = gRenderStartTime.getElapsedTimeF32(); - F32 dr = dist/LLViewerCamera::getInstance()->getFar(); for (U32 i = 0; i < BEACON_VERTS; i++) { @@ -526,10 +525,10 @@ void LLTracker::drawBeacon(LLVector3 pos_agent, std::string direction, LLColor4 LLColor4 col_edge_next = fogged_color * LLColor4(an,an,an,0.0f); a *= 2.f; - a += 1.0f+dr; + a += 1.0f; an *= 2.f; - an += 1.0f+dr; + an += 1.0f; gGL.begin(LLRender::TRIANGLE_STRIP); gGL.color4fv(col_edge.mV); -- cgit v1.2.3 From 52ec6f9af029797615a80e5a889572c18914d56e Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Tue, 26 Nov 2013 15:09:55 -0500 Subject: remove excessively complex fixes for MAINT-2914 and MAINT-3142 --- indra/llui/llcommandmanager.cpp | 4 -- indra/llui/llcommandmanager.h | 7 ---- indra/llui/lltabcontainer.cpp | 23 ++--------- indra/llui/lltabcontainer.h | 11 +---- indra/llui/lltoolbar.cpp | 2 - indra/newview/app_settings/commands.xml | 48 ---------------------- indra/newview/skins/default/textures/textures.xml | 3 -- .../newview/skins/default/xui/en/panel_people.xml | 3 +- .../default/xui/en/widgets/location_input.xml | 1 - .../skins/default/xui/en/widgets/tab_container.xml | 15 ++----- 10 files changed, 8 insertions(+), 109 deletions(-) diff --git a/indra/llui/llcommandmanager.cpp b/indra/llui/llcommandmanager.cpp index 49cfb2255e..625fb8e870 100755 --- a/indra/llui/llcommandmanager.cpp +++ b/indra/llui/llcommandmanager.cpp @@ -50,8 +50,6 @@ const LLCommandId LLCommandId::null = LLCommandId("null command"); LLCommand::Params::Params() : available_in_toybox("available_in_toybox", false) , icon("icon") - , hover_icon_unselected("hover_icon_unselected") - , hover_icon_selected("hover_icon_selected") , label_ref("label_ref") , name("name") , tooltip_ref("tooltip_ref") @@ -73,8 +71,6 @@ LLCommand::LLCommand(const LLCommand::Params& p) : mIdentifier(p.name) , mAvailableInToybox(p.available_in_toybox) , mIcon(p.icon) - , mHoverIconUnselected(p.hover_icon_unselected) - , mHoverIconSelected(p.hover_icon_selected) , mLabelRef(p.label_ref) , mName(p.name) , mTooltipRef(p.tooltip_ref) diff --git a/indra/llui/llcommandmanager.h b/indra/llui/llcommandmanager.h index 9f276f712d..ff5a8a3257 100755 --- a/indra/llui/llcommandmanager.h +++ b/indra/llui/llcommandmanager.h @@ -96,9 +96,6 @@ public: Mandatory name; Mandatory tooltip_ref; - Optional hover_icon_selected; - Optional hover_icon_unselected; - Mandatory execute_function; Optional execute_parameters; @@ -127,8 +124,6 @@ public: const std::string& labelRef() const { return mLabelRef; } const std::string& name() const { return mName; } const std::string& tooltipRef() const { return mTooltipRef; } - const std::string& hoverIconUnselected() const {return mHoverIconUnselected; } - const std::string& hoverIconSelected() const {return mHoverIconSelected; } const std::string& executeFunctionName() const { return mExecuteFunction; } const LLSD& executeParameters() const { return mExecuteParameters; } @@ -155,8 +150,6 @@ private: std::string mLabelRef; std::string mName; std::string mTooltipRef; - std::string mHoverIconUnselected; - std::string mHoverIconSelected; std::string mExecuteFunction; LLSD mExecuteParameters; diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp index 6fd2bb1b36..76ba53ec32 100755 --- a/indra/llui/lltabcontainer.cpp +++ b/indra/llui/lltabcontainer.cpp @@ -193,15 +193,12 @@ LLTabContainer::TabParams::TabParams() : tab_top_image_unselected("tab_top_image_unselected"), tab_top_image_selected("tab_top_image_selected"), tab_top_image_flash("tab_top_image_flash"), - tab_top_image_hovered("tab_top_image_hovered"), tab_bottom_image_unselected("tab_bottom_image_unselected"), tab_bottom_image_selected("tab_bottom_image_selected"), tab_bottom_image_flash("tab_bottom_image_flash"), - tab_bottom_image_hovered("tab_bottom_image_hovered"), tab_left_image_unselected("tab_left_image_unselected"), tab_left_image_selected("tab_left_image_selected"), - tab_left_image_flash("tab_left_image_flash"), - tab_left_image_hovered("tab_left_image_hovered") + tab_left_image_flash("tab_left_image_flash") {} LLTabContainer::Params::Params() @@ -221,8 +218,7 @@ LLTabContainer::Params::Params() open_tabs_on_drag_and_drop("open_tabs_on_drag_and_drop", false), tab_icon_ctrl_pad("tab_icon_ctrl_pad", 0), use_ellipses("use_ellipses"), - font_halign("halign"), - use_highlighting_on_hover("use_highlighting_on_hover",false) + font_halign("halign") {} LLTabContainer::LLTabContainer(const LLTabContainer::Params& p) @@ -258,8 +254,7 @@ LLTabContainer::LLTabContainer(const LLTabContainer::Params& p) mCustomIconCtrlUsed(p.use_custom_icon_ctrl), mOpenTabsOnDragAndDrop(p.open_tabs_on_drag_and_drop), mTabIconCtrlPad(p.tab_icon_ctrl_pad), - mUseTabEllipses(p.use_ellipses), - mUseHighlightingOnHover(p.use_highlighting_on_hover) + mUseTabEllipses(p.use_ellipses) { static LLUICachedControl tabcntr_vert_tab_min_width ("UITabCntrVertTabMinWidth", 0); @@ -908,30 +903,18 @@ void LLTabContainer::update_images(LLTabTuple* tuple, TabParams params, LLTabCon tuple->mButton->setImageUnselected(static_cast(params.tab_top_image_unselected)); tuple->mButton->setImageSelected(static_cast(params.tab_top_image_selected)); tuple->mButton->setImageFlash(static_cast(params.tab_top_image_flash)); - if(mUseHighlightingOnHover) - { - tuple->mButton->setImageHoverUnselected(static_cast(params.tab_top_image_hovered)); - } } else if (pos == LLTabContainer::BOTTOM) { tuple->mButton->setImageUnselected(static_cast(params.tab_bottom_image_unselected)); tuple->mButton->setImageSelected(static_cast(params.tab_bottom_image_selected)); tuple->mButton->setImageFlash(static_cast(params.tab_bottom_image_flash)); - if(mUseHighlightingOnHover) - { - tuple->mButton->setImageHoverUnselected(static_cast(params.tab_bottom_image_hovered)); - } } else if (pos == LLTabContainer::LEFT) { tuple->mButton->setImageUnselected(static_cast(params.tab_left_image_unselected)); tuple->mButton->setImageSelected(static_cast(params.tab_left_image_selected)); tuple->mButton->setImageFlash(static_cast(params.tab_left_image_flash)); - if(mUseHighlightingOnHover) - { - tuple->mButton->setImageHoverUnselected(static_cast(params.tab_left_image_hovered)); - } } } } diff --git a/indra/llui/lltabcontainer.h b/indra/llui/lltabcontainer.h index 7e7d4ac6e6..57862fc626 100755 --- a/indra/llui/lltabcontainer.h +++ b/indra/llui/lltabcontainer.h @@ -62,15 +62,12 @@ public: Optional tab_top_image_unselected, tab_top_image_selected, tab_top_image_flash, - tab_top_image_hovered, tab_bottom_image_unselected, tab_bottom_image_selected, tab_bottom_image_flash, - tab_bottom_image_hovered, tab_left_image_unselected, tab_left_image_selected, - tab_left_image_flash, - tab_left_image_hovered; + tab_left_image_flash; TabParams(); }; @@ -117,11 +114,6 @@ public: */ Optional tab_icon_ctrl_pad; - /** - * This variable is used to found out should we highlight tab button on hover - */ - Optional use_highlighting_on_hover; - Params(); }; @@ -315,7 +307,6 @@ private: bool mOpenTabsOnDragAndDrop; S32 mTabIconCtrlPad; bool mUseTabEllipses; - bool mUseHighlightingOnHover; }; #endif // LL_TABCONTAINER_H diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp index 6bfe113933..928e82cb8c 100755 --- a/indra/llui/lltoolbar.cpp +++ b/indra/llui/lltoolbar.cpp @@ -928,8 +928,6 @@ LLToolBarButton* LLToolBar::createButton(const LLCommandId& id) button_p.label = LLTrans::getString(commandp->labelRef()); button_p.tool_tip = LLTrans::getString(commandp->tooltipRef()); button_p.image_overlay = LLUI::getUIImage(commandp->icon()); - button_p.image_hover_unselected = LLUI::getUIImage(commandp->hoverIconUnselected()); - button_p.image_hover_selected = LLUI::getUIImage(commandp->hoverIconSelected()); button_p.button_flash_enable = commandp->isFlashingAllowed(); button_p.overwriteFrom(mButtonParams[mButtonType]); LLToolBarButton* button = LLUICtrlFactory::create(button_p); diff --git a/indra/newview/app_settings/commands.xml b/indra/newview/app_settings/commands.xml index ce878f156b..60c942094a 100755 --- a/indra/newview/app_settings/commands.xml +++ b/indra/newview/app_settings/commands.xml @@ -3,8 +3,6 @@ - - @@ -165,7 +163,6 @@ with the same filename but different name - diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index 3caf2b3d7e..05013f6b1e 100755 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -66,8 +66,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M tab_position="top" top="0" halign="center" - right="-5" - use_highlighting_on_hover="true"> + right="-5"> diff --git a/indra/newview/skins/default/xui/en/widgets/location_input.xml b/indra/newview/skins/default/xui/en/widgets/location_input.xml index 4ea1aa6efb..61ec046649 100755 --- a/indra/newview/skins/default/xui/en/widgets/location_input.xml +++ b/indra/newview/skins/default/xui/en/widgets/location_input.xml @@ -150,7 +150,6 @@ + tab_left_image_selected="SegmentedBtn_Left_Selected_Over"/> + tab_left_image_selected="SegmentedBtn_Left_Selected_Over"/> + tab_left_image_selected="SegmentedBtn_Left_Selected_Over"/> -- cgit v1.2.3 From a55f88109fc39061922b518e0d6b309764f72428 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Tue, 26 Nov 2013 17:18:28 -0500 Subject: MAINT-3489: Gracefully handle missing downloaded installer file. If a marker file indicates that an installer has been downloaded and verified and is ready to install, but that installer file does not exist, log it and revert to checking for update. Also add logging to every code path that can remove the installer explicitly, in case the missing installer is actually being killed off by some weird sequence of state-machine transitions. --- .../updater/llupdatedownloader.cpp | 52 ++++++++++++-------- .../viewer_components/updater/llupdaterservice.cpp | 56 ++++++++++++++-------- 2 files changed, 69 insertions(+), 39 deletions(-) diff --git a/indra/viewer_components/updater/llupdatedownloader.cpp b/indra/viewer_components/updater/llupdatedownloader.cpp index c28ad76c77..c42112af80 100755 --- a/indra/viewer_components/updater/llupdatedownloader.cpp +++ b/indra/viewer_components/updater/llupdatedownloader.cpp @@ -77,7 +77,8 @@ private: void run(void); void startDownloading(LLURI const & uri, std::string const & hash); void throwOnCurlError(CURLcode code); - bool validateDownload(void); + bool validateDownload(const std::string& filePath); + bool validateOrRemove(const std::string& filePath); LOG_CLASS(LLUpdateDownloader::Implementation); }; @@ -295,9 +296,8 @@ void LLUpdateDownloader::Implementation::resume(void) { resumeDownloading(fileStatus.st_size); } - else if(!validateDownload()) + else if(!validateOrRemove(filePath)) { - LLFile::remove(filePath); download(LLURI(mDownloadData["url"].asString()), mDownloadData["hash"].asString(), mDownloadData["update_channel"].asString(), @@ -421,19 +421,13 @@ void LLUpdateDownloader::Implementation::run(void) if(code == CURLE_OK) { LLFile::remove(mDownloadRecordPath); - if(validateDownload()) + if(validateOrRemove(mDownloadData["path"])) { LL_INFOS("UpdaterService") << "download successful" << LL_ENDL; mClient.downloadComplete(mDownloadData); } else { - LL_INFOS("UpdaterService") << "download failed hash check" << LL_ENDL; - std::string filePath = mDownloadData["path"].asString(); - if(filePath.size() != 0) - { - LLFile::remove(filePath); - } mClient.downloadError("failed hash check"); } } @@ -449,7 +443,9 @@ void LLUpdateDownloader::Implementation::run(void) LLFile::remove(mDownloadRecordPath); if(mDownloadData.has("path")) { - LLFile::remove(mDownloadData["path"].asString()); + std::string filePath = mDownloadData["path"].asString(); + LL_INFOS("UpdaterService") << "removing " << filePath << LL_ENDL; + LLFile::remove(filePath); } mClient.downloadError("curl error"); } @@ -561,31 +557,49 @@ void LLUpdateDownloader::Implementation::throwOnCurlError(CURLcode code) } } +bool LLUpdateDownloader::Implementation::validateOrRemove(const std::string& filePath) +{ + bool valid = validateDownload(filePath); + if (! valid) + { + LL_INFOS("UpdaterService") << "removing " << filePath << LL_ENDL; + LLFile::remove(filePath); + } + return valid; +} -bool LLUpdateDownloader::Implementation::validateDownload(void) +bool LLUpdateDownloader::Implementation::validateDownload(const std::string& filePath) { - std::string filePath = mDownloadData["path"].asString(); llifstream fileStream(filePath, std::ios_base::in | std::ios_base::binary); if(!fileStream) { + LL_INFOS("UpdaterService") << "can't open " << filePath << ", invalid" << LL_ENDL; return false; } std::string hash = mDownloadData["hash"].asString(); - if(hash.size() != 0) + if (! hash.empty()) { - LL_INFOS("UpdaterService") << "checking hash..." << LL_ENDL; char digest[33]; LLMD5(fileStream).hex_digest(digest); - if(hash != digest) + if (hash == digest) + { + LL_INFOS("UpdaterService") << "verified hash " << hash + << " for downloaded " << filePath << LL_ENDL; + return true; + } + else { - LL_WARNS("UpdaterService") << "download hash mismatch; expected " << hash << - " but download is " << digest << LL_ENDL; + LL_WARNS("UpdaterService") << "download hash mismatch for " + << filePath << ": expected " << hash + << " but computed " << digest << LL_ENDL; + return false; } - return hash == digest; } else { + LL_INFOS("UpdaterService") << "no hash specified for " << filePath + << ", unverified" << LL_ENDL; return true; // No hash check provided. } } diff --git a/indra/viewer_components/updater/llupdaterservice.cpp b/indra/viewer_components/updater/llupdaterservice.cpp index 16950e1d62..cb3be5bbdc 100755 --- a/indra/viewer_components/updater/llupdaterservice.cpp +++ b/indra/viewer_components/updater/llupdaterservice.cpp @@ -296,37 +296,49 @@ bool LLUpdaterServiceImpl::checkForInstall(bool launchInstaller) update_marker.close(); // Get the path to the installer file. - LLSD path = update_info.get("path"); - if(update_info["current_version"].asString() != ll_get_version()) + std::string path(update_info.get("path")); + std::string downloader_version(update_info["current_version"]); + if (downloader_version != ll_get_version()) { // This viewer is not the same version as the one that downloaded - // the update. Do not install this update. - if(!path.asString().empty()) + // the update. Do not install this update. + LL_INFOS("UpdaterService") << "ignoring update downloaded by " + << "different viewer version " + << downloader_version << LL_ENDL; + if (! path.empty()) { - LL_INFOS("UpdaterService") << "ignoring update dowloaded by different client version" << LL_ENDL;; - LLFile::remove(path.asString()); + LL_INFOS("UpdaterService") << "removing " << path << LL_ENDL; + LLFile::remove(path); LLFile::remove(update_marker_path()); } - else - { - ; // Nothing to clean up. - } - + foundInstall = false; } - else if(path.isDefined() && !path.asString().empty()) + else if (path.empty()) + { + LL_WARNS("UpdaterService") << "Marker file " << update_marker_path() + << " 'path' entry empty, ignoring" << LL_ENDL; + foundInstall = false; + } + else if (! LLFile::isfile(path)) + { + LL_WARNS("UpdaterService") << "Nonexistent installer " << path + << ", ignoring" << LL_ENDL; + foundInstall = false; + } + else { if(launchInstaller) { setState(LLUpdaterService::INSTALLING); - + LLFile::remove(update_marker_path()); int result = ll_install_update(install_script_path(), - update_info["path"].asString(), + path, update_info["required"].asBoolean(), install_script_mode()); - + if((result == 0) && mAppExitCallback) { mAppExitCallback(); @@ -360,7 +372,8 @@ bool LLUpdaterServiceImpl::checkForResume() LLSD download_info; LLSDSerialize::fromXMLDocument(download_info, download_marker_stream); download_marker_stream.close(); - if(download_info["current_version"].asString() == ll_get_version()) + std::string downloader_version(download_info["current_version"]); + if (downloader_version == ll_get_version()) { mIsDownloading = true; mNewVersion = download_info["update_version"].asString(); @@ -371,10 +384,13 @@ bool LLUpdaterServiceImpl::checkForResume() else { // The viewer that started this download is not the same as this viewer; ignore. - LL_INFOS("UpdaterService") << "ignoring partial download from different viewer version" << LL_ENDL;; + LL_INFOS("UpdaterService") << "ignoring partial download " + << "from different viewer version " + << downloader_version << LL_ENDL; std::string path = download_info["path"].asString(); if(!path.empty()) { + LL_INFOS("UpdaterService") << "removing " << path << LL_ENDL; LLFile::remove(path); } LLFile::remove(download_marker_path); @@ -539,7 +555,7 @@ bool LLUpdaterServiceImpl::onMainLoop(LLSD const & event) // Check for failed install. if(LLFile::isfile(ll_install_failed_marker_path())) { - LL_DEBUGS("UpdaterService") << "found marker " << ll_install_failed_marker_path() << LL_ENDL;; + LL_DEBUGS("UpdaterService") << "found marker " << ll_install_failed_marker_path() << LL_ENDL; int requiredValue = 0; { llifstream stream(ll_install_failed_marker_path()); @@ -552,12 +568,12 @@ bool LLUpdaterServiceImpl::onMainLoop(LLSD const & event) // TODO: notify the user. LL_WARNS("UpdaterService") << "last install attempt failed" << LL_ENDL;; LLFile::remove(ll_install_failed_marker_path()); - + LLSD event; event["type"] = LLSD(LLUpdaterService::INSTALL_ERROR); event["required"] = LLSD(requiredValue); LLEventPumps::instance().obtain(LLUpdaterService::pumpName()).post(event); - + setState(LLUpdaterService::TERMINAL); } else -- cgit v1.2.3 From db8e4824e7f00516142461fa25616e3527007d66 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Tue, 26 Nov 2013 19:43:15 -0500 Subject: STORM-1986 Added right click Show on Map context menu for Inventory floater landmarks Possible fix for BUG-4593 --- doc/contributions.txt | 1 + indra/newview/llfloaterworldmap.cpp | 6 ++-- indra/newview/llinventorybridge.cpp | 36 ++++++++++++++++++++++ indra/newview/llinventorybridge.h | 4 +++ .../skins/default/xui/en/menu_inventory.xml | 8 +++++ 5 files changed, 52 insertions(+), 3 deletions(-) diff --git a/doc/contributions.txt b/doc/contributions.txt index 2f9d0c2c86..898efcfbce 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -674,6 +674,7 @@ Jonathan Yap OPEN-161 STORM-1953 STORM-1957 + STORM-1986 Kadah Coba STORM-1060 STORM-1843 diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp index 137b5446cf..cb637c7162 100755 --- a/indra/newview/llfloaterworldmap.cpp +++ b/indra/newview/llfloaterworldmap.cpp @@ -627,8 +627,8 @@ void LLFloaterWorldMap::trackLocation(const LLVector3d& pos_global) if (!sim_info) { // We haven't found a region for that point yet, leave the tracking to the world map - LLWorldMap::getInstance()->setTracking(pos_global); LLTracker::stopTracking(NULL); + LLWorldMap::getInstance()->setTracking(pos_global); S32 world_x = S32(pos_global.mdV[0] / 256); S32 world_y = S32(pos_global.mdV[1] / 256); LLWorldMapMessage::getInstance()->sendMapBlockRequest(world_x, world_y, world_x, world_y, true); @@ -643,9 +643,9 @@ void LLFloaterWorldMap::trackLocation(const LLVector3d& pos_global) { // Down region. Show the blue circle of death! // i.e. let the world map that this and tell it it's invalid + LLTracker::stopTracking(NULL); LLWorldMap::getInstance()->setTracking(pos_global); LLWorldMap::getInstance()->setTrackingInvalid(); - LLTracker::stopTracking(NULL); setDefaultBtn(""); // clicked on a down region - turn off coord display @@ -665,8 +665,8 @@ void LLFloaterWorldMap::trackLocation(const LLVector3d& pos_global) std::string tooltip(""); mTrackedStatus = LLTracker::TRACKING_LOCATION; - LLTracker::trackLocation(pos_global, full_name, tooltip); LLWorldMap::getInstance()->cancelTracking(); // The floater is taking over the tracking + LLTracker::trackLocation(pos_global, full_name, tooltip); LLVector3d coord_pos = LLTracker::getTrackedPositionGlobal(); updateTeleportCoordsDisplay( coord_pos ); diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 80ef506272..f65e28a165 100755 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -74,6 +74,7 @@ #include "llvoavatarself.h" #include "llwearablelist.h" #include "lllandmarkactions.h" +#include "llpanellandmarks.h" void copy_slurl_to_clipboard_callback_inv(const std::string& slurl); @@ -1449,6 +1450,40 @@ void LLItemBridge::performAction(LLInventoryModel* model, std::string action) } } } + else if ("show_on_map" == action) + { + doActionOnCurSelectedLandmark(boost::bind(&LLItemBridge::doShowOnMap, this, _1)); + } +} + +void LLItemBridge::doActionOnCurSelectedLandmark(LLLandmarkList::loaded_callback_t cb) +{ + LLViewerInventoryItem* cur_item = getItem(); + if(cur_item && cur_item->getInventoryType() == LLInventoryType::IT_LANDMARK) + { + LLLandmark* landmark = LLLandmarkActions::getLandmark(cur_item->getUUID(), cb); + if (landmark) + { + cb(landmark); + } + } +} + +void LLItemBridge::doShowOnMap(LLLandmark* landmark) +{ + LLVector3d landmark_global_pos; + // landmark has already been tested for NULL by calling routine + if (!landmark->getGlobalPos(landmark_global_pos)) + { + return; + } + + LLFloaterWorldMap* worldmap_instance = LLFloaterWorldMap::getInstance(); + if (!landmark_global_pos.isExactlyZero() && worldmap_instance) + { + worldmap_instance->trackLocation(landmark_global_pos); + LLFloaterReg::showInstance("world_map", "center"); + } } void copy_slurl_to_clipboard_callback_inv(const std::string& slurl) @@ -4580,6 +4615,7 @@ void LLLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags) items.push_back(std::string("Landmark Separator")); items.push_back(std::string("url_copy")); items.push_back(std::string("About Landmark")); + items.push_back(std::string("show_on_map")); } // Disable "About Landmark" menu item for diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index 517153e171..bc875e8f37 100755 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -36,6 +36,7 @@ #include "llviewercontrol.h" #include "llviewerwearable.h" #include "lltooldraganddrop.h" +#include "lllandmarklist.h" class LLInventoryFilter; class LLInventoryPanel; @@ -239,7 +240,10 @@ protected: BOOL confirmRemoveItem(const LLSD& notification, const LLSD& response); virtual BOOL isItemPermissive() const; virtual void buildDisplayName() const; + void doActionOnCurSelectedLandmark(LLLandmarkList::loaded_callback_t cb); +private: + void doShowOnMap(LLLandmark* landmark); }; class LLFolderBridge : public LLInvFVBridge diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml index 512205ba43..6fa45d7d66 100755 --- a/indra/newview/skins/default/xui/en/menu_inventory.xml +++ b/indra/newview/skins/default/xui/en/menu_inventory.xml @@ -552,6 +552,14 @@ function="Inventory.DoToSelected" parameter="about" /> + + + -- cgit v1.2.3 From d533dcebf77aa5d62c15488b3e6bed97ecffec02 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Wed, 27 Nov 2013 10:26:27 -0500 Subject: STORM-1987 Inconsistent menu naming and behavior in Places floater --- doc/contributions.txt | 1 + indra/newview/llpanelteleporthistory.cpp | 5 +++++ indra/newview/skins/default/xui/en/menu_teleport_history_item.xml | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/doc/contributions.txt b/doc/contributions.txt index 2f9d0c2c86..b5f8572d9f 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -674,6 +674,7 @@ Jonathan Yap OPEN-161 STORM-1953 STORM-1957 + STORM-1987 Kadah Coba STORM-1060 STORM-1843 diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp index 0756faf5c0..9c380f63bd 100755 --- a/indra/newview/llpanelteleporthistory.cpp +++ b/indra/newview/llpanelteleporthistory.cpp @@ -359,6 +359,11 @@ void LLTeleportHistoryPanel::ContextMenu::onInfo() void LLTeleportHistoryPanel::ContextMenu::gotSLURLCallback(const std::string& slurl) { LLClipboard::instance().copyToClipboard(utf8str_to_wstring(slurl),0,slurl.size()); + + LLSD args; + args["SLURL"] = slurl; + + LLNotificationsUtil::add("CopySLURL", args); } void LLTeleportHistoryPanel::ContextMenu::onCopyToClipboard() diff --git a/indra/newview/skins/default/xui/en/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/en/menu_teleport_history_item.xml index 0160d52b17..f939c3996d 100755 --- a/indra/newview/skins/default/xui/en/menu_teleport_history_item.xml +++ b/indra/newview/skins/default/xui/en/menu_teleport_history_item.xml @@ -17,7 +17,7 @@ function="TeleportHistory.MoreInformation" /> Date: Wed, 27 Nov 2013 10:43:02 -0500 Subject: STORM-1986 Eliminated early return per code review --- indra/newview/llinventorybridge.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index f65e28a165..44943d8722 100755 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -1473,16 +1473,14 @@ void LLItemBridge::doShowOnMap(LLLandmark* landmark) { LLVector3d landmark_global_pos; // landmark has already been tested for NULL by calling routine - if (!landmark->getGlobalPos(landmark_global_pos)) + if (landmark->getGlobalPos(landmark_global_pos)) { - return; - } - - LLFloaterWorldMap* worldmap_instance = LLFloaterWorldMap::getInstance(); - if (!landmark_global_pos.isExactlyZero() && worldmap_instance) - { - worldmap_instance->trackLocation(landmark_global_pos); - LLFloaterReg::showInstance("world_map", "center"); + LLFloaterWorldMap* worldmap_instance = LLFloaterWorldMap::getInstance(); + if (!landmark_global_pos.isExactlyZero() && worldmap_instance) + { + worldmap_instance->trackLocation(landmark_global_pos); + LLFloaterReg::showInstance("world_map", "center"); + } } } -- cgit v1.2.3 From 56f9b9c04868de2dbf106736ce7ee6f454e3ec38 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Tue, 3 Dec 2013 04:19:23 -0500 Subject: STORM-1989 Overlapping UI elements in Upload Model floater --- doc/contributions.txt | 1 + .../skins/default/xui/en/floater_model_preview.xml | 24 +++++++++++----------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/doc/contributions.txt b/doc/contributions.txt index 2f9d0c2c86..6efaf49e17 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -674,6 +674,7 @@ Jonathan Yap OPEN-161 STORM-1953 STORM-1957 + STORM-1989 Kadah Coba STORM-1060 STORM-1843 diff --git a/indra/newview/skins/default/xui/en/floater_model_preview.xml b/indra/newview/skins/default/xui/en/floater_model_preview.xml index 5e92a12251..9fa416012c 100755 --- a/indra/newview/skins/default/xui/en/floater_model_preview.xml +++ b/indra/newview/skins/default/xui/en/floater_model_preview.xml @@ -212,11 +212,11 @@ follows="top|left" height="20" layout="topleft" - left="215" + left="222" name="lod_mode_high" top_delta="0" visible="false" - width="135"> + width="130"> @@ -230,7 +230,7 @@ height="20" increment="10" layout="topleft" - left_pad="5" + left_pad="3" name="lod_triangle_limit_high" visible="false" width="55" /> @@ -342,10 +342,10 @@ follows="top|left" height="20" layout="topleft" - left="215" + left="222" name="lod_mode_medium" top_delta="0" - width="135"> + width="130"> @@ -359,7 +359,7 @@ height="20" increment="10" layout="topleft" - left_pad="5" + left_pad="3" name="lod_triangle_limit_medium" width="55" /> + width="130"> @@ -487,7 +487,7 @@ height="20" increment="10" layout="topleft" - left_pad="5" + left_pad="3" name="lod_triangle_limit_low" width="55" /> + width="130"> @@ -615,7 +615,7 @@ height="20" increment="10" layout="topleft" - left_pad="5" + left_pad="3" name="lod_triangle_limit_lowest" width="55" /> Date: Tue, 3 Dec 2013 09:25:30 -0500 Subject: Update based on first project viewer tests. Two more bones to better address back deformation: UPPER_BACK and LOWER_BACK Better deformation for breasts, belly, upper and lower back (seen using the Body Fat and Belly Size sliders) Minor tweaks in the avatar_lad.xml file for a few other minor shapes. Small typo bug (FITMESH-2) Updated rigs and corrected female mesh Removed skeleton-only files so that people all start from the same base meshes with example skinning These updates specifically address the following bugs: FITMESH-2, FITMESH-4, FITMESH-5, FITMESH-7, FITMESH-10 (.ma formats, not .dae) --- indra/newview/character/avatar_lad.xml | 59 ++++++++++++++++++++++------- indra/newview/character/avatar_skeleton.xml | 6 ++- 2 files changed, 50 insertions(+), 15 deletions(-) mode change 100644 => 100755 indra/newview/character/avatar_lad.xml mode change 100644 => 100755 indra/newview/character/avatar_skeleton.xml diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml old mode 100644 new mode 100755 index 4631e012fd..5268498d56 --- a/indra/newview/character/avatar_lad.xml +++ b/indra/newview/character/avatar_lad.xml @@ -3825,7 +3825,11 @@ + pos="0.07 0 -0.02"/> + @@ -3873,12 +3877,12 @@ + scale="-0.05 0.0 0.0" + pos="-0.01 -0.01 -0.02"/> + scale="-0.05 0.0 0.0" + pos="-0.01 -0.01 -0.02"/> @@ -3899,12 +3903,12 @@ + scale="-0.051 0.0 0.0" + pos="-0.02 -0.01 -0.03"/> + scale="-0.051 0.0 0.0" + pos="-0.02 -0.01 -0.03"/> @@ -3970,6 +3974,10 @@ name="BELLY" scale="0.0 -0.01 0.0" pos="0.0 0.0 0"/> + + + + + + + + pos="0.00 -0.005 -0.013"/> + pos="0.00 0.005 -0.013"/> + @@ -4244,11 +4277,11 @@ + pos="-0.03 -0.024 -0.01"/> + pos="-0.03 0.024 -0.01"/> diff --git a/indra/newview/character/avatar_skeleton.xml b/indra/newview/character/avatar_skeleton.xml old mode 100644 new mode 100755 index 7ab20f8c6b..6b07bbc1d3 --- a/indra/newview/character/avatar_skeleton.xml +++ b/indra/newview/character/avatar_skeleton.xml @@ -1,14 +1,16 @@ - + - + + + -- cgit v1.2.3 From e390255de640827f3f4f1c39c7ebb443142e490f Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Wed, 4 Dec 2013 19:33:10 -0500 Subject: STORM-1992 'Open voice connection' and 'Expand participant list' buttons are overlapping each other in IM conversation after resizing. --- doc/contributions.txt | 1 + indra/newview/skins/default/xui/en/floater_im_session.xml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/contributions.txt b/doc/contributions.txt index 2f9d0c2c86..87493f27d7 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -674,6 +674,7 @@ Jonathan Yap OPEN-161 STORM-1953 STORM-1957 + STORM-1992 Kadah Coba STORM-1060 STORM-1843 diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml index 43d0f2fb18..7076de55e3 100755 --- a/indra/newview/skins/default/xui/en/floater_im_session.xml +++ b/indra/newview/skins/default/xui/en/floater_im_session.xml @@ -210,7 +210,7 @@ default_tab_group="3" tab_group="2" name="right_part_holder" - min_width="172"> + min_width="230"> Date: Wed, 4 Dec 2013 19:38:52 -0500 Subject: STORM-1993 In the About Land floater only send object return time to server when it has been changed --- doc/contributions.txt | 1 + indra/newview/llfloaterland.cpp | 11 ++++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/doc/contributions.txt b/doc/contributions.txt index 2f9d0c2c86..563f2e789c 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -674,6 +674,7 @@ Jonathan Yap OPEN-161 STORM-1953 STORM-1957 + STORM-1993 Kadah Coba STORM-1060 STORM-1843 diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 6c8e81e563..b16ef6dd79 100755 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -1791,10 +1791,15 @@ void LLPanelLandObjects::onCommitClean(LLUICtrl *caller, void* user_data) LLParcel* parcel = lop->mParcel->getParcel(); if (parcel) { - lop->mOtherTime = atoi(lop->mCleanOtherObjectsTime->getText().c_str()); + S32 return_time = atoi(lop->mCleanOtherObjectsTime->getText().c_str()); + // Only send return time if it has changed + if (return_time != lop->mOtherTime) + { + lop->mOtherTime = return_time; - parcel->setCleanOtherTime(lop->mOtherTime); - send_other_clean_time_message(parcel->getLocalID(), lop->mOtherTime); + parcel->setCleanOtherTime(lop->mOtherTime); + send_other_clean_time_message(parcel->getLocalID(), lop->mOtherTime); + } } } -- cgit v1.2.3 From ea1f6a6343fe83f1352a8a839265c471640acdce Mon Sep 17 00:00:00 2001 From: Monty Brandenberg Date: Fri, 6 Dec 2013 16:02:53 -0500 Subject: SH-4645 Viewer hangs on exit after cancelling a mesh upload. Problem involved a 3-way livelock between the main, upload and decomposition threads. Viewer is shutting down but an upload is in the 'generate hulls' state. Main thread asks upload request to discard and spins waiting for it to finish. Upload thread is in generateHulls spinning waiting for the decomposition thread to process a mesh request. Decomposition thread is sleeping waiting for main thread to deliver work that upload thread has asked the decomposition thread to do. --- indra/newview/llmeshrepository.cpp | 39 ++++++++++++++++++++++++++++++-------- indra/newview/llmeshrepository.h | 4 ++-- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index ebfb22a360..4296abb2cc 100755 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -257,6 +257,11 @@ // mGetMeshVersion mMutex rw.main.mMutex, ro.repo.mMutex // mHttp* none rw.repo.none // +// LLMeshUploadThread: +// +// mDiscarded mMutex rw.main.mMutex, ro.uploadN.none [1] +// ... more ... +// // QA/Development Testing // // Debug variable 'MeshUploadFakeErrors' takes a mask of bits that will @@ -1852,7 +1857,7 @@ LLMeshUploadThread::LLMeshUploadThread(LLMeshUploadThread::instance_list& data, LLHandle upload_observer) : LLThread("mesh upload"), LLCore::HttpHandler(), - mDiscarded(FALSE), + mDiscarded(false), mDoUpload(do_upload), mWholeModelUploadURL(upload_url), mFeeObserverHandle(fee_observer), @@ -1940,10 +1945,10 @@ void LLMeshUploadThread::preStart() void LLMeshUploadThread::discard() { LLMutexLock lock(mMutex); - mDiscarded = TRUE; + mDiscarded = true; } -BOOL LLMeshUploadThread::isDiscarded() const +bool LLMeshUploadThread::isDiscarded() const { LLMutexLock lock(mMutex); return mDiscarded; @@ -2199,7 +2204,13 @@ void LLMeshUploadThread::generateHulls() if (has_valid_requests) { - while (!mPhysicsComplete) + // *NOTE: Interesting livelock condition on shutdown. If there + // is an upload request in generateHulls() when shutdown starts, + // the main thread isn't available to manage communication between + // the decomposition thread and the upload thread and this loop + // wouldn't complete in turn stalling the main thread. The check + // on isDiscarded() prevents that. + while (! mPhysicsComplete && ! isDiscarded()) { apr_sleep(100); } @@ -2253,13 +2264,21 @@ void LLMeshUploadThread::doWholeModelUpload() LL_DEBUGS(LOG_MESH) << "POST request issued." << LL_ENDL; mHttpRequest->update(0); - while (! LLApp::isQuitting() && ! mFinished) + while (! LLApp::isQuitting() && ! finished() && ! isDiscarded()) { ms_sleep(sleep_time); sleep_time = llmin(250U, sleep_time + sleep_time); mHttpRequest->update(0); } - LL_DEBUGS(LOG_MESH) << "Mesh upload operation completed." << LL_ENDL; + + if (isDiscarded()) + { + LL_DEBUGS(LOG_MESH) << "Mesh upload operation discarded." << LL_ENDL; + } + else + { + LL_DEBUGS(LOG_MESH) << "Mesh upload operation completed." << LL_ENDL; + } } } } @@ -2299,12 +2318,16 @@ void LLMeshUploadThread::requestWholeModelFee() U32 sleep_time(10); mHttpRequest->update(0); - while (! LLApp::isQuitting() && ! mFinished) + while (! LLApp::isQuitting() && ! finished() && ! isDiscarded()) { ms_sleep(sleep_time); sleep_time = llmin(250U, sleep_time + sleep_time); mHttpRequest->update(0); } + if (isDiscarded()) + { + LL_DEBUGS(LOG_MESH) << "Mesh fee query operation discarded." << LL_ENDL; + } } } @@ -3020,7 +3043,7 @@ void LLMeshRepository::shutdown() for (U32 i = 0; i < mUploads.size(); ++i) { - LL_INFOS(LOG_MESH) << "Waiting for pending mesh upload " << i << "/" << mUploads.size() << LL_ENDL; + LL_INFOS(LOG_MESH) << "Waiting for pending mesh upload " << (i + 1) << "/" << mUploads.size() << LL_ENDL; while (!mUploads[i]->isStopped()) { apr_sleep(10); diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h index 9d8b102110..39280bea3a 100755 --- a/indra/newview/llmeshrepository.h +++ b/indra/newview/llmeshrepository.h @@ -447,7 +447,7 @@ public: bool mUploadTextures; bool mUploadSkin; bool mUploadJoints; - BOOL mDiscarded; + volatile bool mDiscarded; LLHost mHost; std::string mWholeModelFeeCapability; @@ -463,7 +463,7 @@ public: virtual void run(); void preStart(); void discard() ; - BOOL isDiscarded() const; + bool isDiscarded() const; void generateHulls(); -- cgit v1.2.3 From bde3be7b5d9d30e16331ec13acafa23ab0bc7c9a Mon Sep 17 00:00:00 2001 From: simon Date: Fri, 6 Dec 2013 17:13:30 -0800 Subject: MAINT-3552: crash in LLPanel::getString: Failed to find string ErrorFetchingServerReleaseNotesURL in panel floater_about --- indra/newview/llfloaterabout.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp index 06a97c9214..4331a63346 100755 --- a/indra/newview/llfloaterabout.cpp +++ b/indra/newview/llfloaterabout.cpp @@ -316,7 +316,7 @@ void LLServerReleaseNotesURLFetcher::completedHeader(U32 status, const std::stri std::string location = content["location"].asString(); if (location.empty()) { - location = floater_about->getString("ErrorFetchingServerReleaseNotesURL"); + location = LLTrans::getString("ErrorFetchingServerReleaseNotesURL"); } LLAppViewer::instance()->setServerReleaseNotesURL(location); } -- cgit v1.2.3 From 4a09065691b6a3461ff2f4541abb3accade207fe Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Mon, 9 Dec 2013 13:02:06 +0200 Subject: MAINT-3539 Additional checking was added to avoid possible crash. --- indra/llui/llview.cpp | 89 ++++++++++++++++++++++++++------------------------- 1 file changed, 46 insertions(+), 43 deletions(-) diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index 9cc8c951d5..5ee2169b66 100755 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -1314,52 +1314,55 @@ void LLView::reshape(S32 width, S32 height, BOOL called_from_parent) // move child views according to reshape flags BOOST_FOREACH(LLView* viewp, mChildList) { - LLRect child_rect( viewp->mRect ); - - if (viewp->followsRight() && viewp->followsLeft()) - { - child_rect.mRight += delta_width; - } - else if (viewp->followsRight()) - { - child_rect.mLeft += delta_width; - child_rect.mRight += delta_width; - } - else if (viewp->followsLeft()) + if (viewp != NULL) { - // left is 0, don't need to adjust coords - } - else - { - // BUG what to do when we don't follow anyone? - // for now, same as followsLeft - } + LLRect child_rect( viewp->mRect ); - if (viewp->followsTop() && viewp->followsBottom()) - { - child_rect.mTop += delta_height; - } - else if (viewp->followsTop()) - { - child_rect.mTop += delta_height; - child_rect.mBottom += delta_height; - } - else if (viewp->followsBottom()) - { - // bottom is 0, so don't need to adjust coords - } - else - { - // BUG what to do when we don't follow? - // for now, same as bottom - } + if (viewp->followsRight() && viewp->followsLeft()) + { + child_rect.mRight += delta_width; + } + else if (viewp->followsRight()) + { + child_rect.mLeft += delta_width; + child_rect.mRight += delta_width; + } + else if (viewp->followsLeft()) + { + // left is 0, don't need to adjust coords + } + else + { + // BUG what to do when we don't follow anyone? + // for now, same as followsLeft + } - S32 delta_x = child_rect.mLeft - viewp->getRect().mLeft; - S32 delta_y = child_rect.mBottom - viewp->getRect().mBottom; - viewp->translate( delta_x, delta_y ); - if (child_rect.getWidth() != viewp->getRect().getWidth() || child_rect.getHeight() != viewp->getRect().getHeight()) - { - viewp->reshape(child_rect.getWidth(), child_rect.getHeight()); + if (viewp->followsTop() && viewp->followsBottom()) + { + child_rect.mTop += delta_height; + } + else if (viewp->followsTop()) + { + child_rect.mTop += delta_height; + child_rect.mBottom += delta_height; + } + else if (viewp->followsBottom()) + { + // bottom is 0, so don't need to adjust coords + } + else + { + // BUG what to do when we don't follow? + // for now, same as bottom + } + + S32 delta_x = child_rect.mLeft - viewp->getRect().mLeft; + S32 delta_y = child_rect.mBottom - viewp->getRect().mBottom; + viewp->translate( delta_x, delta_y ); + if (child_rect.getWidth() != viewp->getRect().getWidth() || child_rect.getHeight() != viewp->getRect().getHeight()) + { + viewp->reshape(child_rect.getWidth(), child_rect.getHeight()); + } } } } -- cgit v1.2.3 From 65123c4029ef8ac3276eafb8679eda5ab98e51bd Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Mon, 9 Dec 2013 14:52:45 -0500 Subject: Added tag 3.6.12-release for changeset 88bbfd7a6971 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 85c17be67d..07ddf93c11 100755 --- a/.hgtags +++ b/.hgtags @@ -470,3 +470,4 @@ d40c66e410741de7e90b1ed6dac28dd8a2d7e1f6 3.6.8-release 70eda3721d36df3e00730629c42a1304e5bc65b8 3.6.9-release 5b54b36862ff8bc3b6935673c9d1c1f22ee8d521 3.6.10-release 2feb70a4cfde43f2898d95ff8fcae3e67805c7c2 3.6.11-release +88bbfd7a6971033f3aa103f3a3500ceb4c73521b 3.6.12-release -- cgit v1.2.3 From 1a9b9f1bd1b5f64b35b9ce6eff458cdb7a79fe6e Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Mon, 9 Dec 2013 14:52:47 -0500 Subject: increment viewer version to 3.6.13 --- indra/newview/VIEWER_VERSION.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index 8b7b0b52e5..3609cf7707 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -3.6.12 +3.6.13 -- cgit v1.2.3 From c017694d391e56b532b311505100d9b1ebcd9636 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Tue, 10 Dec 2013 15:42:21 -0500 Subject: MAINT-3571: include settings_install.xml whether it contains settings or not --- indra/newview/viewer_manifest.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 9e8623c1f9..9a617c2a13 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -136,13 +136,11 @@ class ViewerManifest(LLManifest): settings_install['CmdLineGridChoice']['Value'] = self.grid() print "Set CmdLineGridChoice in settings_install.xml to '%s'" % self.grid() - # did we actually copy anything into settings_install dict? - if settings_install: - # put_in_file(src=) need not be an actual pathname; it - # only needs to be non-empty - self.put_in_file(llsd.format_pretty_xml(settings_install), - "settings_install.xml", - src="environment") + # put_in_file(src=) need not be an actual pathname; it + # only needs to be non-empty + self.put_in_file(llsd.format_pretty_xml(settings_install), + "settings_install.xml", + src="environment") self.end_prefix("app_settings") -- cgit v1.2.3 From 321a81e37175ef675c119f0dfd8f60576960f5ce Mon Sep 17 00:00:00 2001 From: simon Date: Tue, 10 Dec 2013 13:24:10 -0800 Subject: Re-fix merge issue that removed "AvatarRenderInfo" cap usage --- indra/newview/llavatarrenderinfoaccountant.cpp | 2 +- indra/newview/llviewerregion.cpp | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/indra/newview/llavatarrenderinfoaccountant.cpp b/indra/newview/llavatarrenderinfoaccountant.cpp index 77d734cbfe..d6a72b0c05 100644 --- a/indra/newview/llavatarrenderinfoaccountant.cpp +++ b/indra/newview/llavatarrenderinfoaccountant.cpp @@ -256,7 +256,7 @@ void LLAvatarRenderInfoAccountant::sendRenderInfoToRegion(LLViewerRegion * regio { llinfos << "LRI: Sending avatar render info for " << avatar->getID() << ": " << info << llendl; - llinfos << "LRI: geometry " << avatar->getAttachmentGeometryBytes() + llinfos << "LRI: other info geometry " << avatar->getAttachmentGeometryBytes() << ", area " << avatar->getAttachmentSurfaceArea() << llendl; } diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 6018c2d250..0b01177789 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -302,9 +302,14 @@ public: if ( regionp->getRegionImpl()->mCapabilities.size() != regionp->getRegionImpl()->mSecondCapabilitiesTracker.size() ) { - llinfos<<"BaseCapabilitiesCompleteTracker "<<"Sim sent duplicate seed caps that differs in size - most likely content."<getName() + << " sent duplicate seed caps that differs in size - most likely content. " + << (S32) regionp->getRegionImpl()->mCapabilities.size() << " vs " << regionp->getRegionImpl()->mSecondCapabilitiesTracker.size() + << llendl; + //todo#add cap debug versus original check? - /*CapabilityMap::const_iterator iter = regionp->getRegionImpl()->mCapabilities.begin(); + /* + CapabilityMap::const_iterator iter = regionp->getRegionImpl()->mCapabilities.begin(); while (iter!=regionp->getRegionImpl()->mCapabilities.end() ) { llinfos << "BaseCapabilitiesCompleteTracker Original " << iter->first << " " << iter->second<mObjectPartition.push_back(new LLBridgePartition()); //PARTITION_BRIDGE mImpl->mObjectPartition.push_back(new LLHUDParticlePartition());//PARTITION_HUD_PARTICLE mImpl->mObjectPartition.push_back(NULL); //PARTITION_NONE + + mRenderInfoRequestTimer.resetWithExpiry(0.f); // Set timer to be expired + setCapabilitiesReceivedCallback(boost::bind(&LLAvatarRenderInfoAccountant::expireRenderInfoReportTimer, _1)); } @@ -1579,6 +1587,7 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames) capabilityNames.append("AgentState"); capabilityNames.append("AttachmentResources"); capabilityNames.append("AvatarPickerSearch"); + capabilityNames.append("AvatarRenderInfo"); capabilityNames.append("CharacterProperties"); capabilityNames.append("ChatSessionRequest"); capabilityNames.append("CopyInventoryFromNotecard"); -- cgit v1.2.3 From 065bbf7d383c36b8026a923a3837d1e7ea075b76 Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Wed, 11 Dec 2013 14:42:02 +0200 Subject: MAINT-3553 Another checking is added to avoid possible crash. --- indra/llui/llfloater.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index c1f8a077b5..acf38afe32 100755 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -1951,6 +1951,7 @@ void LLFloater::drawShadow(LLPanel* panel) void LLFloater::updateTransparency(LLView* view, ETypeTransparency transparency_type) { + if (!view) return; child_list_t children = *view->getChildList(); child_list_t::iterator it = children.begin(); -- cgit v1.2.3 From 93994489877d3ff4e78a5a5ac56122620c6a608e Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Wed, 11 Dec 2013 09:53:48 -0500 Subject: BUG-4685: remove any SecondLife.exe file left in the SecondLifeViewer folder by an install prior to 3.12 --- indra/newview/installers/windows/installer_template.nsi | 1 + 1 file changed, 1 insertion(+) diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi index dd316cdbdf..6f0b57e648 100755 --- a/indra/newview/installers/windows/installer_template.nsi +++ b/indra/newview/installers/windows/installer_template.nsi @@ -673,6 +673,7 @@ Delete "$INSTDIR\*.glsl" Delete "$INSTDIR\motions\*.lla" Delete "$INSTDIR\trial\*.html" Delete "$INSTDIR\newview.exe" +Delete "$INSTDIR\SecondLife.exe" ;; Remove entire help directory Delete "$INSTDIR\help\Advanced\*" RMDir "$INSTDIR\help\Advanced" -- cgit v1.2.3 From 81d1d427f194c969031c334151df0dda231331b8 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Wed, 11 Dec 2013 10:41:28 -0500 Subject: OPEN-113 Build > Upload > Model > Calculate weights & fee is not disabled in OS built viewers --- doc/contributions.txt | 1 + indra/newview/llfloatermodelpreview.cpp | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/doc/contributions.txt b/doc/contributions.txt index 2f9d0c2c86..ccc62f890e 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -674,6 +674,7 @@ Jonathan Yap OPEN-161 STORM-1953 STORM-1957 + OPEN-113 Kadah Coba STORM-1060 STORM-1843 diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index 19cec55837..1699fb4e8d 100755 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -535,9 +535,16 @@ BOOL LLFloaterModelPreview::postBuild() mUploadBtn = getChild("ok_btn"); mCalculateBtn = getChild("calculate_btn"); - mCalculateBtn->setClickedCallback(boost::bind(&LLFloaterModelPreview::onClickCalculateBtn, this)); + if (LLConvexDecomposition::isFunctional()) + { + mCalculateBtn->setClickedCallback(boost::bind(&LLFloaterModelPreview::onClickCalculateBtn, this)); - toggleCalculateButton(true); + toggleCalculateButton(true); + } + else + { + mCalculateBtn->setEnabled(false); + } return TRUE; } -- cgit v1.2.3 From 69dfa3507aace6449542d1ef5e29e88269871d79 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Wed, 11 Dec 2013 11:17:31 -0500 Subject: Workaround for MAINT 3099: remove any Vivox log file left in the program folder --- indra/newview/installers/windows/installer_template.nsi | 2 ++ 1 file changed, 2 insertions(+) diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi index 6f0b57e648..9c404197f9 100755 --- a/indra/newview/installers/windows/installer_template.nsi +++ b/indra/newview/installers/windows/installer_template.nsi @@ -674,6 +674,8 @@ Delete "$INSTDIR\motions\*.lla" Delete "$INSTDIR\trial\*.html" Delete "$INSTDIR\newview.exe" Delete "$INSTDIR\SecondLife.exe" +;; MAINT-3099 workaround - prevent these log files, if present, from causing a user alert +Delete "$INSTDIR\VivoxVoiceService-*.log" ;; Remove entire help directory Delete "$INSTDIR\help\Advanced\*" RMDir "$INSTDIR\help\Advanced" -- cgit v1.2.3 From 97d9eee4ffc56123656abfe46db140bd1acca685 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Wed, 11 Dec 2013 14:29:52 -0500 Subject: OPEN-113 Use better way of testing for stub that will not impact TPVs. --- indra/newview/llfloatermodelpreview.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index 1699fb4e8d..855836af7a 100755 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -535,7 +535,7 @@ BOOL LLFloaterModelPreview::postBuild() mUploadBtn = getChild("ok_btn"); mCalculateBtn = getChild("calculate_btn"); - if (LLConvexDecomposition::isFunctional()) + if (LLConvexDecomposition::getInstance() != NULL) { mCalculateBtn->setClickedCallback(boost::bind(&LLFloaterModelPreview::onClickCalculateBtn, this)); -- cgit v1.2.3 From 06d66598459d0b362bdba663af09af0a893c2abe Mon Sep 17 00:00:00 2001 From: maksymsproductengine Date: Wed, 11 Dec 2013 22:01:24 +0200 Subject: removing of dos line ending --- indra/newview/llviewerregion.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 0b01177789..c10782bb0f 100755 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -302,9 +302,9 @@ public: if ( regionp->getRegionImpl()->mCapabilities.size() != regionp->getRegionImpl()->mSecondCapabilitiesTracker.size() ) { - llinfos << "BaseCapabilitiesCompleteTracker " << "sim " << regionp->getName() - << " sent duplicate seed caps that differs in size - most likely content. " - << (S32) regionp->getRegionImpl()->mCapabilities.size() << " vs " << regionp->getRegionImpl()->mSecondCapabilitiesTracker.size() + llinfos << "BaseCapabilitiesCompleteTracker " << "sim " << regionp->getName() + << " sent duplicate seed caps that differs in size - most likely content. " + << (S32) regionp->getRegionImpl()->mCapabilities.size() << " vs " << regionp->getRegionImpl()->mSecondCapabilitiesTracker.size() << llendl; //todo#add cap debug versus original check? @@ -401,7 +401,7 @@ LLViewerRegion::LLViewerRegion(const U64 &handle, mImpl->mObjectPartition.push_back(new LLHUDParticlePartition());//PARTITION_HUD_PARTICLE mImpl->mObjectPartition.push_back(NULL); //PARTITION_NONE - mRenderInfoRequestTimer.resetWithExpiry(0.f); // Set timer to be expired + mRenderInfoRequestTimer.resetWithExpiry(0.f); // Set timer to be expired setCapabilitiesReceivedCallback(boost::bind(&LLAvatarRenderInfoAccountant::expireRenderInfoReportTimer, _1)); } -- cgit v1.2.3 From 35add2252b0a3ad7830c0a6f9db6ba189a7f517f Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Wed, 11 Dec 2013 17:43:55 -0500 Subject: MAINT-3575: remove old exe if found in current install directory --- .../newview/installers/windows/installer_template.nsi | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi index 9c404197f9..c4f503ef4e 100755 --- a/indra/newview/installers/windows/installer_template.nsi +++ b/indra/newview/installers/windows/installer_template.nsi @@ -301,6 +301,23 @@ Function CheckNetworkConnection Return FunctionEnd +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Function CheckOldExeName +; Viewer versions < 3.6.12 used the name 'SecondLife.exe' +; If that name is found in the install folder, delete it to invalidate any +; old shortcuts to it that may be in non-standard locations, so that the user +; does not end up running the old version (potentially getting caught in an +; infinite update loop). See MAINT-3575 +; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +Function CheckOldExeName + IfFileExists "$INSTDIR\SecondLife.exe" CHECKOLDEXE_FOUND CHECKOLDEXE_DONE + +CHECKOLDEXE_FOUND: + Delete "$INSTDIR\SecondLife.exe" +CHECKOLDEXE_DONE: +FunctionEnd + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Function CheckWillUninstallV2 @@ -923,6 +940,7 @@ Call CheckIfAlreadyCurrent ; Make sure that we haven't already installed this v Call CloseSecondLife ; Make sure we're not running Call CheckNetworkConnection ; ping secondlife.com Call CheckWillUninstallV2 ; See if a V2 install exists and will be removed. +Call CheckOldExeName ; Clean up a previous version of the exe ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; StrCmp $DO_UNINSTALL_V2 "" PRESERVE_DONE -- cgit v1.2.3 From 2a1098552e071c625a8c1614a331e9557212d380 Mon Sep 17 00:00:00 2001 From: MaximB ProductEngine Date: Thu, 12 Dec 2013 07:24:13 +0200 Subject: MAINT-3541 (crash in std::vector >::reserve) --- indra/llmessage/lltemplatemessagereader.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/indra/llmessage/lltemplatemessagereader.cpp b/indra/llmessage/lltemplatemessagereader.cpp index ab91f74abe..94bc7cb045 100755 --- a/indra/llmessage/lltemplatemessagereader.cpp +++ b/indra/llmessage/lltemplatemessagereader.cpp @@ -91,15 +91,17 @@ void LLTemplateMessageReader::getData(const char *blockname, const char *varname } LLMsgBlkData *msg_block_data = iter->second; - LLMsgVarData& vardata = msg_block_data->mMemberVarData[vnamep]; + LLMsgBlkData::msg_var_data_map_t &var_data_map = msg_block_data->mMemberVarData; - if (!vardata.getName()) + if (var_data_map.find(vnamep) == var_data_map.end()) { llerrs << "Variable "<< vnamep << " not in message " << mCurrentRMessageData->mName<< " block " << bnamep << llendl; return; } + LLMsgVarData& vardata = msg_block_data->mMemberVarData[vnamep]; + if (size && size != vardata.getSize()) { llerrs << "Msg " << mCurrentRMessageData->mName -- cgit v1.2.3 From 0e346960bb45900cf1d9472834687c9b7b928e1f Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Tue, 17 Dec 2013 13:05:12 -0500 Subject: add LLAgent::removeRegionChangedCallback --- indra/newview/llagent.cpp | 4 ++++ indra/newview/llagent.h | 1 + 2 files changed, 5 insertions(+) diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 6ee8f26b9f..b1cd68140e 100755 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -981,6 +981,10 @@ boost::signals2::connection LLAgent::addRegionChangedCallback(region_changed_cal return mRegionChangedSignal.connect(cb); } +void LLAgent::removeRegionChangedCallback(boost::signals2::connection callback) +{ + mRegionChangedSignal.disconnect(callback); +} //----------------------------------------------------------------------------- // inPrelude() diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index 0662be897a..bc003387de 100755 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -273,6 +273,7 @@ private: */ typedef boost::function region_changed_callback_t; boost::signals2::connection addRegionChangedCallback(region_changed_callback_t); + void removeRegionChangedCallback(boost::signals2::connection callback); private: LLViewerRegion *mRegionp; -- cgit v1.2.3 From ba39f6e14fa46708bead3eff31a83c2ec2fbe2a2 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Tue, 17 Dec 2013 16:42:01 -0500 Subject: add "A" test channel package --- BuildParams | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/BuildParams b/BuildParams index 6b63448c52..ede2595cd3 100755 --- a/BuildParams +++ b/BuildParams @@ -49,11 +49,13 @@ viewer_channel = "Second Life Test" # Setup default packaging parameters. sourceid = "" -additional_packages = "Amazon Desura B C" +additional_packages = "Amazon Desura A B C" Amazon_sourceid = "1207v_Amazon" Amazon_viewer_channel_suffix = "Amazon" Desura_sourceid = "1208_desura" Desura_viewer_channel_suffix = "Desura" +A_sourceid = "1300_A" +A_viewer_channel_suffix = "A" B_sourceid = "1301_B" B_viewer_channel_suffix = "B" C_sourceid = "1302_C" -- cgit v1.2.3 From 1886428638c2cb1e82db9f97ad311c2a506677a6 Mon Sep 17 00:00:00 2001 From: Ima Mechanique Date: Wed, 18 Dec 2013 06:26:22 +0000 Subject: STORM-1831 Changing addRegionChangedCallback to more closely resemble the feature it replaces. This fixes the crashes reported by Whirly ;-) --- indra/newview/llagent.cpp | 2 +- indra/newview/llagent.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index b1cd68140e..14a2508697 100755 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -976,7 +976,7 @@ LLHost LLAgent::getRegionHost() const } } -boost::signals2::connection LLAgent::addRegionChangedCallback(region_changed_callback_t cb) +boost::signals2::connection LLAgent::addRegionChangedCallback(const region_changed_signal_t::slot_type& cb) { return mRegionChangedSignal.connect(cb); } diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index bc003387de..0766407494 100755 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -271,13 +271,13 @@ private: * // you may or may not want to remove that callback * } */ - typedef boost::function region_changed_callback_t; - boost::signals2::connection addRegionChangedCallback(region_changed_callback_t); + typedef boost::signals2::signal region_changed_signal_t; + + boost::signals2::connection addRegionChangedCallback(const region_changed_signal_t::slot_type& cb); void removeRegionChangedCallback(boost::signals2::connection callback); private: LLViewerRegion *mRegionp; - typedef boost::signals2::signal region_changed_signal_t; region_changed_signal_t mRegionChangedSignal; //-------------------------------------------------------------------- -- cgit v1.2.3 From 02afa9cfb050fbc23f5de89bd0adcdc0fb832dea Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Wed, 18 Dec 2013 13:39:18 -0500 Subject: STORM-1980: set new region restart sound uuid --- indra/newview/app_settings/settings.xml | 2 +- indra/newview/llvieweraudio.cpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index abe7b95266..b6b9f40db7 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -12641,7 +12641,7 @@ Type String Value - 4b315701-1972-9e23-cdd8-23cbc8cb0f42 + b92a0f64-7709-8811-40c5-16afd624a45f UISndSnapshot diff --git a/indra/newview/llvieweraudio.cpp b/indra/newview/llvieweraudio.cpp index 3da934b148..826d296117 100755 --- a/indra/newview/llvieweraudio.cpp +++ b/indra/newview/llvieweraudio.cpp @@ -368,6 +368,7 @@ void init_audio() gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndTyping"))); gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndWindowClose"))); gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndWindowOpen"))); + gAudiop->preloadSound(LLUUID(gSavedSettings.getString("UISndRestart"))); } audio_update_volume(true); -- cgit v1.2.3 From 05fa5e525b879f063b803198d4a7f555847d4134 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Wed, 18 Dec 2013 14:53:27 -0500 Subject: improve build.sh searches for additional package installers --- build.sh | 60 +++++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 45 insertions(+), 15 deletions(-) diff --git a/build.sh b/build.sh index ccc8476cea..1fd2cd802b 100755 --- a/build.sh +++ b/build.sh @@ -36,24 +36,59 @@ build_dir_CYGWIN() echo build-vc100 } +viewer_channel_suffix() +{ + local package_name="$1" + local suffix_var="${package_name}_viewer_channel_suffix" + local suffix=$(eval "echo \$${suffix_var}") + if [ "$suffix"x = ""x ] + then + echo "" + else + echo "_$suffix" + fi +} + installer_Darwin() { - ls -1tr "$(build_dir_Darwin ${last_built_variant:-Release})/newview/"*"$additional_package_name"*.dmg 2>/dev/null | sed 1q + local package_name="$1" + local package_dir="$(build_dir_Darwin ${last_built_variant:-Release})/newview/" + local pattern=".*$(viewer_channel_suffix ${package_name})_[0-9]+_[0-9]+_[0-9]+_[0-9]+_i386\\.dmg\$" + # since the additional packages are built after the base package, + # sorting oldest first ensures that the unqualified package is returned + # even if someone makes a qualified name that duplicates the last word of the base name + local package=$(ls -1tr "$package_dir" 2>/dev/null | grep -E "$pattern" | head -n 1) + test "$package"x != ""x && echo "$package_dir/$package" } installer_Linux() { - ls -1tr "$(build_dir_Linux ${last_built_variant:-Release})/newview/"*"$additional_package_name"*.tar.bz2 2>/dev/null | grep -v symbols | sed 1q + local package_name="$1" + local package_dir="$(build_dir_Linux ${last_built_variant:-Release})/newview/" + local pattern=".*$(viewer_channel_suffix ${package_name})_[0-9]+_[0-9]+_[0-9]+_[0-9]+_i686\\.tar\\.bz2\$" + # since the additional packages are built after the base package, + # sorting oldest first ensures that the unqualified package is returned + # even if someone makes a qualified name that duplicates the last word of the base name + package=$(ls -1tr "$package_dir" 2>/dev/null | grep -E "$pattern" | head -n 1) + test "$package"x != ""x && echo "$package_dir/$package" } installer_CYGWIN() { - v=${last_built_variant:-Release} - d=$(build_dir_CYGWIN $v) - if [ -r "$d/newview/$additional_package_name$v/touched.bat" ] + local package_name="$1" + local variant=${last_built_variant:-Release} + local build_dir=$(build_dir_CYGWIN ${variant}) + local package_dir + if [ "$package_name"x = ""x ] + then + package_dir="${build_dir}/newview/${variant}" + else + package_dir="${build_dir}/newview/${package_name}/${variant}" + fi + if [ -r "${package_dir}/touched.bat" ] then - p=$(sed 's:.*=::' "$d/newview/$additional_package_name$v/touched.bat") - echo "$d/newview/$additional_package_name$v/$p" + local package_file=$(sed 's:.*=::' "${package_dir}/touched.bat") + echo "${package_dir}/${package_file}" fi } @@ -275,7 +310,7 @@ then if $build_viewer_deb && [ "$last_built_variant" == "Release" ] then begin_section "Build Viewer Debian Package" - local have_private_repo=false + have_private_repo=false # mangle the changelog dch --force-bad-version \ --distribution unstable \ @@ -362,19 +397,14 @@ then # Upload additional packages. for package_id in $additional_packages do - case $arch in - CYGWIN) export additional_package_name="$package_id/" ;; - *) export additional_package_name=$package_id ;; - esac - package=$(installer_$arch) + package=$(installer_$arch "$package_id") if [ x"$package" != x ] then upload_item installer "$package" binary/octet-stream else - record_failure "Failed to upload $package_id package ($package::$additional_package_name)." + record_failure "Failed to find additional package for '$package_id'." fi done - export additional_package_name="" case "$last_built_variant" in Release) -- cgit v1.2.3 From e10c32b30aca20258c8356fdab33058d64781198 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Thu, 19 Dec 2013 12:10:26 -0500 Subject: clean up audio engine logging --- indra/llaudio/llaudiodecodemgr.cpp | 56 ++++++++++++------------- indra/llaudio/llaudioengine.cpp | 84 ++++++++++++++++++++------------------ 2 files changed, 73 insertions(+), 67 deletions(-) diff --git a/indra/llaudio/llaudiodecodemgr.cpp b/indra/llaudio/llaudiodecodemgr.cpp index 6c97a64ed7..8c31f8b4de 100755 --- a/indra/llaudio/llaudiodecodemgr.cpp +++ b/indra/llaudio/llaudiodecodemgr.cpp @@ -135,7 +135,7 @@ int vfs_seek(void *datasource, ogg_int64_t offset, int whence) origin = -1; break; default: - llerrs << "Invalid whence argument to vfs_seek" << llendl; + LL_ERRS("AudioEngine") << "Invalid whence argument to vfs_seek" << LL_ENDL; return -1; } @@ -197,12 +197,12 @@ BOOL LLVorbisDecodeState::initDecode() vfs_callbacks.close_func = vfs_close; vfs_callbacks.tell_func = vfs_tell; - //llinfos << "Initing decode from vfile: " << mUUID << llendl; + LL_DEBUGS("AudioEngine") << "Initing decode from vfile: " << mUUID << LL_ENDL; mInFilep = new LLVFile(gVFS, mUUID, LLAssetType::AT_SOUND); if (!mInFilep || !mInFilep->getSize()) { - llwarns << "unable to open vorbis source vfile for reading" << llendl; + LL_WARNS("AudioEngine") << "unable to open vorbis source vfile for reading" << LL_ENDL; delete mInFilep; mInFilep = NULL; return FALSE; @@ -211,7 +211,7 @@ BOOL LLVorbisDecodeState::initDecode() int r = ov_open_callbacks(mInFilep, &mVF, NULL, 0, vfs_callbacks); if(r < 0) { - llwarns << r << " Input to vorbis decode does not appear to be an Ogg bitstream: " << mUUID << llendl; + LL_WARNS("AudioEngine") << r << " Input to vorbis decode does not appear to be an Ogg bitstream: " << mUUID << LL_ENDL; return(FALSE); } @@ -229,36 +229,36 @@ BOOL LLVorbisDecodeState::initDecode() if( vi->channels < 1 || vi->channels > LLVORBIS_CLIP_MAX_CHANNELS ) { abort_decode = true; - llwarns << "Bad channel count: " << vi->channels << llendl; + LL_WARNS("AudioEngine") << "Bad channel count: " << vi->channels << LL_ENDL; } } else // !vi { abort_decode = true; - llwarns << "No default bitstream found" << llendl; + LL_WARNS("AudioEngine") << "No default bitstream found" << LL_ENDL; } if( (size_t)sample_count > LLVORBIS_CLIP_REJECT_SAMPLES || (size_t)sample_count <= 0) { abort_decode = true; - llwarns << "Illegal sample count: " << sample_count << llendl; + LL_WARNS("AudioEngine") << "Illegal sample count: " << sample_count << LL_ENDL; } if( size_guess > LLVORBIS_CLIP_REJECT_SIZE || size_guess < 0) { abort_decode = true; - llwarns << "Illegal sample size: " << size_guess << llendl; + LL_WARNS("AudioEngine") << "Illegal sample size: " << size_guess << LL_ENDL; } if( abort_decode ) { - llwarns << "Canceling initDecode. Bad asset: " << mUUID << llendl; + LL_WARNS("AudioEngine") << "Canceling initDecode. Bad asset: " << mUUID << LL_ENDL; vorbis_comment* comment = ov_comment(&mVF,-1); if (comment && comment->vendor) { - llwarns << "Bad asset encoded by: " << comment->vendor << llendl; + LL_WARNS("AudioEngine") << "Bad asset encoded by: " << comment->vendor << LL_ENDL; } delete mInFilep; mInFilep = NULL; @@ -359,12 +359,12 @@ BOOL LLVorbisDecodeState::decodeSection() { if (!mInFilep) { - llwarns << "No VFS file to decode in vorbis!" << llendl; + LL_WARNS("AudioEngine") << "No VFS file to decode in vorbis!" << LL_ENDL; return TRUE; } if (mDone) { -// llwarns << "Already done with decode, aborting!" << llendl; +// LL_WARNS("AudioEngine") << "Already done with decode, aborting!" << LL_ENDL; return TRUE; } char pcmout[4096]; /*Flawfinder: ignore*/ @@ -377,14 +377,14 @@ BOOL LLVorbisDecodeState::decodeSection() eof = TRUE; mDone = TRUE; mValid = TRUE; -// llinfos << "Vorbis EOF" << llendl; +// LL_INFOS("AudioEngine") << "Vorbis EOF" << LL_ENDL; } else if (ret < 0) { /* error in the stream. Not a problem, just reporting it in case we (the app) cares. In this case, we don't. */ - llwarns << "BAD vorbis decode in decodeSection." << llendl; + LL_WARNS("AudioEngine") << "BAD vorbis decode in decodeSection." << LL_ENDL; mValid = FALSE; mDone = TRUE; @@ -393,7 +393,7 @@ BOOL LLVorbisDecodeState::decodeSection() } else { -// llinfos << "Vorbis read " << ret << "bytes" << llendl; +// LL_INFOS("AudioEngine") << "Vorbis read " << ret << "bytes" << LL_ENDL; /* we don't bother dealing with sample rate changes, etc, but. you'll have to*/ std::copy(pcmout, pcmout+ret, std::back_inserter(mWAVBuffer)); @@ -405,7 +405,7 @@ BOOL LLVorbisDecodeState::finishDecode() { if (!isValid()) { - llwarns << "Bogus vorbis decode state for " << getUUID() << ", aborting!" << llendl; + LL_WARNS("AudioEngine") << "Bogus vorbis decode state for " << getUUID() << ", aborting!" << LL_ENDL; return TRUE; // We've finished } @@ -480,7 +480,7 @@ BOOL LLVorbisDecodeState::finishDecode() if (36 == data_length) { - llwarns << "BAD Vorbis decode in finishDecode!" << llendl; + LL_WARNS("AudioEngine") << "BAD Vorbis decode in finishDecode!" << LL_ENDL; mValid = FALSE; return TRUE; // we've finished } @@ -497,7 +497,7 @@ BOOL LLVorbisDecodeState::finishDecode() { if (mBytesRead == 0) { - llwarns << "Unable to write file in LLVorbisDecodeState::finishDecode" << llendl; + LL_WARNS("AudioEngine") << "Unable to write file in LLVorbisDecodeState::finishDecode" << LL_ENDL; mValid = FALSE; return TRUE; // we've finished } @@ -515,7 +515,7 @@ BOOL LLVorbisDecodeState::finishDecode() LLVFile output(gVFS, mUUID, LLAssetType::AT_SOUND_WAV); output.write(&mWAVBuffer[0], mWAVBuffer.size()); #endif - //llinfos << "Finished decode for " << getUUID() << llendl; + LL_DEBUGS("AudioEngine") << "Finished decode for " << getUUID() << LL_ENDL; return TRUE; } @@ -524,7 +524,7 @@ void LLVorbisDecodeState::flushBadFile() { if (mInFilep) { - llwarns << "Flushing bad vorbis file from VFS for " << mUUID << llendl; + LL_WARNS("AudioEngine") << "Flushing bad vorbis file from VFS for " << mUUID << LL_ENDL; mInFilep->remove(); } } @@ -568,7 +568,7 @@ void LLAudioDecodeMgr::Impl::processQueue(const F32 num_secs) if (mCurrentDecodep->isDone() && !mCurrentDecodep->isValid()) { // We had an error when decoding, abort. - llwarns << mCurrentDecodep->getUUID() << " has invalid vorbis data, aborting decode" << llendl; + LL_WARNS("AudioEngine") << mCurrentDecodep->getUUID() << " has invalid vorbis data, aborting decode" << LL_ENDL; mCurrentDecodep->flushBadFile(); LLAudioData *adp = gAudiop->getAudioData(mCurrentDecodep->getUUID()); adp->setHasValidData(false); @@ -590,7 +590,7 @@ void LLAudioDecodeMgr::Impl::processQueue(const F32 num_secs) LLAudioData *adp = gAudiop->getAudioData(mCurrentDecodep->getUUID()); if (!adp) { - llwarns << "Missing LLAudioData for decode of " << mCurrentDecodep->getUUID() << llendl; + LL_WARNS("AudioEngine") << "Missing LLAudioData for decode of " << mCurrentDecodep->getUUID() << LL_ENDL; } else if (mCurrentDecodep->isValid() && mCurrentDecodep->isDone()) { @@ -601,12 +601,12 @@ void LLAudioDecodeMgr::Impl::processQueue(const F32 num_secs) // At this point, we could see if anyone needs this sound immediately, but // I'm not sure that there's a reason to - we need to poll all of the playing // sounds anyway. - //llinfos << "Finished the vorbis decode, now what?" << llendl; + //LL_INFOS("AudioEngine") << "Finished the vorbis decode, now what?" << LL_ENDL; } else { adp->setHasCompletedDecode(true); - llinfos << "Vorbis decode failed for " << mCurrentDecodep->getUUID() << llendl; + LL_INFOS("AudioEngine") << "Vorbis decode failed for " << mCurrentDecodep->getUUID() << LL_ENDL; } mCurrentDecodep = NULL; } @@ -631,7 +631,7 @@ void LLAudioDecodeMgr::Impl::processQueue(const F32 num_secs) continue; } - lldebugs << "Decoding " << uuid << " from audio queue!" << llendl; + lldebugs << "Decoding " << uuid << " from audio queue!" << LL_ENDL; std::string uuid_str; std::string d_path; @@ -674,19 +674,19 @@ BOOL LLAudioDecodeMgr::addDecodeRequest(const LLUUID &uuid) if (gAudiop->hasDecodedFile(uuid)) { // Already have a decoded version, don't need to decode it. - //llinfos << "addDecodeRequest for " << uuid << " has decoded file already" << llendl; + LL_DEBUGS("AudioEngine") << "addDecodeRequest for " << uuid << " has decoded file already" << LL_ENDL; return TRUE; } if (gAssetStorage->hasLocalAsset(uuid, LLAssetType::AT_SOUND)) { // Just put it on the decode queue. - //llinfos << "addDecodeRequest for " << uuid << " has local asset file already" << llendl; + LL_DEBUGS("AudioEngine") << "addDecodeRequest for " << uuid << " has local asset file already" << LL_ENDL; mImpl->mDecodeQueue.push(uuid); return TRUE; } - //llinfos << "addDecodeRequest for " << uuid << " no file available" << llendl; + LL_DEBUGS("AudioEngine") << "addDecodeRequest for " << uuid << " no file available" << LL_ENDL; return FALSE; } diff --git a/indra/llaudio/llaudioengine.cpp b/indra/llaudio/llaudioengine.cpp index 06e752cf34..ca614f5395 100755 --- a/indra/llaudio/llaudioengine.cpp +++ b/indra/llaudio/llaudioengine.cpp @@ -123,7 +123,7 @@ bool LLAudioEngine::init(const S32 num_channels, void* userdata) // Initialize the decode manager gAudioDecodeMgrp = new LLAudioDecodeMgr; - llinfos << "LLAudioEngine::init() AudioEngine successfully initialized" << llendl; + LL_INFOS("AudioEngine") << "LLAudioEngine::init() AudioEngine successfully initialized" << LL_ENDL; return true; } @@ -308,7 +308,7 @@ void LLAudioEngine::idle(F32 max_decode_time) LLAudioChannel *channelp = getFreeChannel(max_priority); if (channelp) { - //llinfos << "Replacing source in channel due to priority!" << llendl; + LL_DEBUGS("AudioEngine") << "Replacing source in channel due to priority!" << LL_ENDL; max_sourcep->setChannel(channelp); channelp->setSource(max_sourcep); if (max_sourcep->isSyncSlave()) @@ -479,7 +479,7 @@ void LLAudioEngine::idle(F32 max_decode_time) { if (!mBuffers[i]->mInUse && mBuffers[i]->mLastUseTimer.getElapsedTimeF32() > 30.f) { - //llinfos << "Flushing unused buffer!" << llendl; + LL_DEBUGS("AudioEngine") << "Flushing unused buffer!" << LL_ENDL; mBuffers[i]->mAudioDatap->mBufferp = NULL; delete mBuffers[i]; mBuffers[i] = NULL; @@ -591,8 +591,8 @@ LLAudioBuffer * LLAudioEngine::getFreeBuffer() if (buffer_id >= 0) { - lldebugs << "Taking over unused buffer " << buffer_id << llendl; - //llinfos << "Flushing unused buffer!" << llendl; + lldebugs << "Taking over unused buffer " << buffer_id << LL_ENDL; + LL_DEBUGS("AudioEngine") << "Flushing unused buffer!" << LL_ENDL; mBuffers[buffer_id]->mAudioDatap->mBufferp = NULL; delete mBuffers[buffer_id]; mBuffers[buffer_id] = createBuffer(); @@ -673,6 +673,8 @@ void LLAudioEngine::cleanupBuffer(LLAudioBuffer *bufferp) bool LLAudioEngine::preloadSound(const LLUUID &uuid) { + LL_DEBUGS("AudioEngine")<<"( "<getAudioData(uuid); // We don't care about the return value, this is just to make sure // that we have an entry, which will mean that the audio engine knows about this @@ -684,7 +686,7 @@ bool LLAudioEngine::preloadSound(const LLUUID &uuid) // At some point we need to have the audio/asset system check the static VFS // before it goes off and fetches stuff from the server. - //llwarns << "Used internal preload for non-local sound" << llendl; + LL_DEBUGS("AudioEngine") << "Used internal preload for non-local sound "<< uuid << LL_ENDL; return false; } @@ -815,7 +817,7 @@ void LLAudioEngine::triggerSound(const LLUUID &audio_uuid, const LLUUID& owner_i const S32 type, const LLVector3d &pos_global) { // Create a new source (since this can't be associated with an existing source. - //llinfos << "Localized: " << audio_uuid << llendl; + LL_DEBUGS("AudioEngine") << "Localized: " << audio_uuid << LL_ENDL; if (mMuted) { @@ -982,11 +984,14 @@ void LLAudioEngine::cleanupAudioSource(LLAudioSource *asp) iter = mAllSources.find(asp->getID()); if (iter == mAllSources.end()) { - llwarns << "Cleaning up unknown audio source!" << llendl; - return; + LL_WARNS("AudioEngine") << "Cleaning up unknown audio source!" << LL_ENDL; + } + else + { + LL_DEBUGS("AudioEngine") << "Cleaning up audio sources for "<< asp->getID() <getExists(uuid, LLAssetType::AT_SOUND); + bool have_local = gVFS->getExists(uuid, LLAssetType::AT_SOUND); + LL_DEBUGS("AudioEngine") << "sound uuid "<mCurrentTransfer = asset_id; gAudiop->mCurrentTransferTimer.reset(); gAssetStorage->getAssetData(asset_id, LLAssetType::AT_SOUND, @@ -1211,7 +1218,7 @@ void LLAudioEngine::startNextTransfer() } else { - //llinfos << "No pending transfers?" << llendl; + //LL_DEBUGS("AudioEngine") << "No pending transfers?" << LL_ENDL; } } @@ -1221,7 +1228,7 @@ void LLAudioEngine::assetCallback(LLVFS *vfs, const LLUUID &uuid, LLAssetType::E { if (result_code) { - llinfos << "Boom, error in audio file transfer: " << LLAssetStorage::getErrorString( result_code ) << " (" << result_code << ")" << llendl; + LL_INFOS("AudioEngine") << "Boom, error in audio file transfer: " << LLAssetStorage::getErrorString( result_code ) << " (" << result_code << ")" << LL_ENDL; // Need to mark data as bad to avoid constant rerequests. LLAudioData *adp = gAudiop->getAudioData(uuid); if (adp) @@ -1238,11 +1245,11 @@ void LLAudioEngine::assetCallback(LLVFS *vfs, const LLUUID &uuid, LLAssetType::E if (!adp) { // Should never happen - llwarns << "Got asset callback without audio data for " << uuid << llendl; + LL_WARNS("AudioEngine") << "Got asset callback without audio data for " << uuid << LL_ENDL; } else { - // llinfos << "Got asset callback with good audio data for " << uuid << ", making decode request" << llendl; + LL_DEBUGS("AudioEngine") << "Got asset callback with good audio data for " << uuid << ", making decode request" << LL_ENDL; adp->setHasValidData(true); adp->setHasLocalData(true); gAudioDecodeMgrp->addDecodeRequest(uuid); @@ -1321,7 +1328,7 @@ void LLAudioSource::update() } else if (adp->hasCompletedDecode()) // Only mark corrupted after decode is done { - llwarns << "Marking LLAudioSource corrupted for " << adp->getID() << llendl; + LL_WARNS("AudioEngine") << "Marking LLAudioSource corrupted for " << adp->getID() << LL_ENDL; mCorrupted = true ; } } @@ -1357,7 +1364,6 @@ bool LLAudioSource::setupChannel() if (!adp->getBuffer()) { // We're not ready to play back the sound yet, so don't try and allocate a channel for it. - //llwarns << "Aborting, no buffer" << llendl; return false; } @@ -1375,7 +1381,7 @@ bool LLAudioSource::setupChannel() // Ugh, we don't have any free channels. // Now we have to reprioritize. // For now, just don't play the sound. - //llwarns << "Aborting, no free channels" << llendl; + //llwarns << "Aborting, no free channels" << LL_ENDL; return false; } @@ -1474,7 +1480,7 @@ bool LLAudioSource::isDone() const { // We don't have a channel assigned, and it's been // over 15 seconds since we tried to play it. Don't bother. - //llinfos << "No channel assigned, source is done" << llendl; + LL_DEBUGS("AudioEngine") << "No channel assigned, source is done" << LL_ENDL; return true; } else @@ -1640,7 +1646,7 @@ LLAudioChannel::LLAudioChannel() : LLAudioChannel::~LLAudioChannel() { // Need to disconnect any sources which are using this channel. - //llinfos << "Cleaning up audio channel" << llendl; + LL_DEBUGS("AudioEngine") << "Cleaning up audio channel" << LL_ENDL; if (mCurrentSourcep) { mCurrentSourcep->setChannel(NULL); @@ -1651,29 +1657,29 @@ LLAudioChannel::~LLAudioChannel() void LLAudioChannel::setSource(LLAudioSource *sourcep) { - //llinfos << this << ": setSource(" << sourcep << ")" << llendl; - if (!sourcep) { // Clearing the source for this channel, don't need to do anything. - //llinfos << "Clearing source for channel" << llendl; + LL_DEBUGS("AudioEngine") << "Clearing source" << ( mCurrentSourcep ? mCurrentSourcep->getID() : LLUUID::null ) << LL_ENDL; cleanup(); mCurrentSourcep = NULL; mWaiting = false; - return; } - - if (sourcep == mCurrentSourcep) + else { - // Don't reallocate the channel, this will make FMOD goofy. - //llinfos << "Calling setSource with same source!" << llendl; - } - - mCurrentSourcep = sourcep; + LL_DEBUGS("AudioEngine") << "( id: " << sourcep->getID() << ")" << LL_ENDL; + if (sourcep == mCurrentSourcep) + { + // Don't reallocate the channel, this will make FMOD goofy. + //LL_DEBUGS("AudioEngine") << "Calling setSource with same source!" << LL_ENDL; + } - updateBuffer(); - update3DPosition(); + mCurrentSourcep = sourcep; + + updateBuffer(); + update3DPosition(); + } } @@ -1768,7 +1774,7 @@ bool LLAudioData::load() if (mBufferp) { // We already have this sound in a buffer, don't do anything. - llinfos << "Already have a buffer for this sound, don't bother loading!" << llendl; + LL_INFOS("AudioEngine") << "Already have a buffer for this sound, don't bother loading!" << LL_ENDL; return true; } @@ -1776,7 +1782,7 @@ bool LLAudioData::load() if (!mBufferp) { // No free buffers, abort. - llinfos << "Not able to allocate a new audio buffer, aborting." << llendl; + LL_INFOS("AudioEngine") << "Not able to allocate a new audio buffer, aborting." << LL_ENDL; return true; } -- cgit v1.2.3 From 5f635f7942130ab25f74f5c6aaeb5b135d0cb43e Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Thu, 2 Jan 2014 13:40:16 -0500 Subject: STORM-1980 Remove callback in destructor. Shrink floater and add a "!" icon in the top left corner. --- indra/newview/llfloaterregionrestarting.cpp | 3 +- indra/newview/llfloaterregionrestarting.h | 2 ++ .../default/xui/en/floater_region_restarting.xml | 36 ++++++++++++++-------- 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/indra/newview/llfloaterregionrestarting.cpp b/indra/newview/llfloaterregionrestarting.cpp index 899216b966..003ed488c6 100644 --- a/indra/newview/llfloaterregionrestarting.cpp +++ b/indra/newview/llfloaterregionrestarting.cpp @@ -44,6 +44,7 @@ LLFloaterRegionRestarting::LLFloaterRegionRestarting(const LLSD& key) : LLFloaterRegionRestarting::~LLFloaterRegionRestarting() { + mRegionChangedConnection.disconnect(); } BOOL LLFloaterRegionRestarting::postBuild() @@ -58,7 +59,7 @@ BOOL LLFloaterRegionRestarting::postBuild() refresh(); - gAgent.addRegionChangedCallback(boost::bind(&LLFloaterRegionRestarting::regionChange, this)); + mRegionChangedConnection = gAgent.addRegionChangedCallback(boost::bind(&LLFloaterRegionRestarting::regionChange, this)); return TRUE; } diff --git a/indra/newview/llfloaterregionrestarting.h b/indra/newview/llfloaterregionrestarting.h index fef0dcddfe..6ff067e0a8 100644 --- a/indra/newview/llfloaterregionrestarting.h +++ b/indra/newview/llfloaterregionrestarting.h @@ -48,6 +48,8 @@ private: virtual void regionChange(); std::string mName; + + boost::signals2::connection mRegionChangedConnection; }; #endif // LL_LLFLOATERREGIONRESTARTING_H diff --git a/indra/newview/skins/default/xui/en/floater_region_restarting.xml b/indra/newview/skins/default/xui/en/floater_region_restarting.xml index dcb5fcc41d..2fe4d0190a 100644 --- a/indra/newview/skins/default/xui/en/floater_region_restarting.xml +++ b/indra/newview/skins/default/xui/en/floater_region_restarting.xml @@ -1,7 +1,7 @@ - + + + + + top="5" + left="40" + width="230"> The region you are in now (-The longest region name-) is about to restart. If you stay in this region you will be logged out. @@ -51,11 +62,12 @@ If you stay in this region you will be logged out. layout="topleft" name="restart_seconds" text_color="Black" - font="SansSerifHuge" - height="100" + font="SansSerifLargeBold" + height="40" + top="110" left="0" halign="center" - width="500"> + width="290"> Seconds until restart 32767 -- cgit v1.2.3 From 4e4cf8b528701275d2c095c1b10c6cd27cead62e Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Thu, 2 Jan 2014 18:09:29 -0500 Subject: increment version to 3.7.0 --- indra/newview/VIEWER_VERSION.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index 3609cf7707..7c69a55dbb 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -3.6.13 +3.7.0 -- cgit v1.2.3 From d15cc2dadc34c757d1ac6aef66d5baa38fb80968 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Fri, 3 Jan 2014 13:31:51 -0500 Subject: STORM-1980 Add shake effect --- indra/newview/llfloaterregionrestarting.cpp | 83 +++++++++++++++++++++++++---- indra/newview/llfloaterregionrestarting.h | 13 +++++ indra/newview/llviewermessage.cpp | 7 ++- 3 files changed, 90 insertions(+), 13 deletions(-) diff --git a/indra/newview/llfloaterregionrestarting.cpp b/indra/newview/llfloaterregionrestarting.cpp index 003ed488c6..111daf93eb 100644 --- a/indra/newview/llfloaterregionrestarting.cpp +++ b/indra/newview/llfloaterregionrestarting.cpp @@ -31,15 +31,18 @@ #include "llfloaterreg.h" #include "lluictrl.h" #include "llagent.h" +#include "llagentcamera.h" +#include "llviewerwindow.h" -static S32 mSeconds; +static S32 sSeconds; +static U32 sShakeState; LLFloaterRegionRestarting::LLFloaterRegionRestarting(const LLSD& key) : LLFloater(key), LLEventTimer(1) { mName = (std::string)key["NAME"]; - mSeconds = (LLSD::Integer)key["SECONDS"]; + sSeconds = (LLSD::Integer)key["SECONDS"]; } LLFloaterRegionRestarting::~LLFloaterRegionRestarting() @@ -49,6 +52,8 @@ LLFloaterRegionRestarting::~LLFloaterRegionRestarting() BOOL LLFloaterRegionRestarting::postBuild() { + mRegionChangedConnection = gAgent.addRegionChangedCallback(boost::bind(&LLFloaterRegionRestarting::regionChange, this)); + LLStringUtil::format_map_t args; std::string text; @@ -57,9 +62,9 @@ BOOL LLFloaterRegionRestarting::postBuild() LLTextBox* textbox = getChild("region_name"); textbox->setValue(text); - refresh(); + sShakeState = SHAKE_START; - mRegionChangedConnection = gAgent.addRegionChangedCallback(boost::bind(&LLFloaterRegionRestarting::regionChange, this)); + refresh(); return TRUE; } @@ -81,13 +86,72 @@ void LLFloaterRegionRestarting::refresh() LLStringUtil::format_map_t args; std::string text; - args["[SECONDS]"] = llformat("%d", mSeconds); + args["[SECONDS]"] = llformat("%d", sSeconds); getChild("restart_seconds")->setValue(getString("RestartSeconds", args)); - mSeconds = mSeconds - 1; - if(mSeconds < 0.0) + sSeconds = sSeconds - 1; + if(sSeconds < 0.0) + { + sSeconds = 0; + } +} + +void LLFloaterRegionRestarting::draw() +{ + LLFloater::draw(); + + const F32 SHAKE_INTERVAL = 0.05; + const U32 SHAKE_ITERATIONS = 4; + + if(SHAKE_START == sShakeState) + { + mShakeTimer.setTimerExpirySec(SHAKE_INTERVAL); + sShakeState = SHAKE_LEFT; + mIterations = 0; + } + + if(SHAKE_DONE != sShakeState && mShakeTimer.hasExpired()) { - mSeconds = 0; + gAgentCamera.unlockView(); + + switch(sShakeState) + { + case SHAKE_LEFT: + gAgentCamera.setPanLeftKey(1.0); + gAgentCamera.setPanLeftKey(1.0); + sShakeState = SHAKE_UP; + break; + + case SHAKE_UP: + gAgentCamera.setPanUpKey(1.0); + gAgentCamera.setPanUpKey(1.0); + sShakeState = SHAKE_RIGHT; + break; + + case SHAKE_RIGHT: + gAgentCamera.setPanRightKey(1.0); + gAgentCamera.setPanRightKey(1.0); + sShakeState = SHAKE_DOWN; + break; + + case SHAKE_DOWN: + gAgentCamera.setPanDownKey(1.0); + gAgentCamera.setPanDownKey(1.0); + mIterations = mIterations + 1; + if(SHAKE_ITERATIONS == mIterations) + { + sShakeState = SHAKE_DONE; + } + else + { + sShakeState = SHAKE_LEFT; + } + break; + + default: + break; + } + mShakeTimer.setTimerExpirySec(SHAKE_INTERVAL); } } @@ -103,5 +167,6 @@ void LLFloaterRegionRestarting::close() void LLFloaterRegionRestarting::updateTime(S32 time) { - mSeconds = time; + sSeconds = time; + sShakeState = SHAKE_START; } diff --git a/indra/newview/llfloaterregionrestarting.h b/indra/newview/llfloaterregionrestarting.h index 6ff067e0a8..95fe772a28 100644 --- a/indra/newview/llfloaterregionrestarting.h +++ b/indra/newview/llfloaterregionrestarting.h @@ -45,11 +45,24 @@ private: virtual BOOL postBuild(); virtual BOOL tick(); virtual void refresh(); + virtual void draw(); virtual void regionChange(); std::string mName; + U32 mIterations; + LLTimer mShakeTimer; boost::signals2::connection mRegionChangedConnection; + + enum + { + SHAKE_START, + SHAKE_LEFT, + SHAKE_UP, + SHAKE_RIGHT, + SHAKE_DOWN, + SHAKE_DONE + }; }; #endif // LL_LLFLOATERREGIONRESTARTING_H diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index e81de844d1..076419e96a 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -5967,10 +5967,6 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem) seconds = static_cast(llsdBlock["SECONDS"].asInteger()); } - LLSD params; - params["NAME"] = llsdBlock["NAME"]; - params["SECONDS"] = (LLSD::Integer)seconds; - LLFloaterRegionRestarting* floaterp = LLFloaterReg::findTypedInstance("region_restarting"); if (floaterp) @@ -5979,6 +5975,9 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem) } else { + LLSD params; + params["NAME"] = llsdBlock["NAME"]; + params["SECONDS"] = (LLSD::Integer)seconds; LLFloaterReg::showInstance("region_restarting", params); } -- cgit v1.2.3 From 6051a865578f08e65e058478a6cc7fedb5aefb7b Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Fri, 3 Jan 2014 14:08:55 -0500 Subject: STORM-1980 Small optimization and tweaks of shaking constants --- indra/newview/llfloaterregionrestarting.cpp | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/indra/newview/llfloaterregionrestarting.cpp b/indra/newview/llfloaterregionrestarting.cpp index 111daf93eb..b793d259cd 100644 --- a/indra/newview/llfloaterregionrestarting.cpp +++ b/indra/newview/llfloaterregionrestarting.cpp @@ -100,8 +100,9 @@ void LLFloaterRegionRestarting::draw() { LLFloater::draw(); - const F32 SHAKE_INTERVAL = 0.05; + const F32 SHAKE_INTERVAL = 0.03; const U32 SHAKE_ITERATIONS = 4; + const F32 SHAKE_AMOUNT = 1.5; if(SHAKE_START == sShakeState) { @@ -117,26 +118,22 @@ void LLFloaterRegionRestarting::draw() switch(sShakeState) { case SHAKE_LEFT: - gAgentCamera.setPanLeftKey(1.0); - gAgentCamera.setPanLeftKey(1.0); + gAgentCamera.setPanLeftKey(SHAKE_AMOUNT); sShakeState = SHAKE_UP; break; case SHAKE_UP: - gAgentCamera.setPanUpKey(1.0); - gAgentCamera.setPanUpKey(1.0); + gAgentCamera.setPanUpKey(SHAKE_AMOUNT); sShakeState = SHAKE_RIGHT; break; case SHAKE_RIGHT: - gAgentCamera.setPanRightKey(1.0); - gAgentCamera.setPanRightKey(1.0); + gAgentCamera.setPanRightKey(SHAKE_AMOUNT); sShakeState = SHAKE_DOWN; break; case SHAKE_DOWN: - gAgentCamera.setPanDownKey(1.0); - gAgentCamera.setPanDownKey(1.0); + gAgentCamera.setPanDownKey(SHAKE_AMOUNT); mIterations = mIterations + 1; if(SHAKE_ITERATIONS == mIterations) { -- cgit v1.2.3 From 05a313f546c4f943a74ec2214cabf4df747eda5a Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Fri, 3 Jan 2014 18:19:25 -0500 Subject: change shaking to decay exponentially --- indra/newview/llfloaterregionrestarting.cpp | 28 +++++++++++++++++----------- indra/newview/llfloaterregionrestarting.h | 3 ++- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/indra/newview/llfloaterregionrestarting.cpp b/indra/newview/llfloaterregionrestarting.cpp index b793d259cd..94c805205a 100644 --- a/indra/newview/llfloaterregionrestarting.cpp +++ b/indra/newview/llfloaterregionrestarting.cpp @@ -100,15 +100,17 @@ void LLFloaterRegionRestarting::draw() { LLFloater::draw(); - const F32 SHAKE_INTERVAL = 0.03; - const U32 SHAKE_ITERATIONS = 4; - const F32 SHAKE_AMOUNT = 1.5; - + const F32 SHAKE_INTERVAL = 0.04; + const F32 SHAKE_TOTAL_DURATION = 1.8; // the length of the default alert tone for this + const F32 SHAKE_INITIAL_MAGNITUDE = 1.5; + F32 time_shaking; + if(SHAKE_START == sShakeState) { mShakeTimer.setTimerExpirySec(SHAKE_INTERVAL); sShakeState = SHAKE_LEFT; - mIterations = 0; + mShakeIterations = 0; + mShakeMagnitude = SHAKE_INITIAL_MAGNITUDE; } if(SHAKE_DONE != sShakeState && mShakeTimer.hasExpired()) @@ -118,30 +120,34 @@ void LLFloaterRegionRestarting::draw() switch(sShakeState) { case SHAKE_LEFT: - gAgentCamera.setPanLeftKey(SHAKE_AMOUNT); + gAgentCamera.setPanLeftKey(mShakeMagnitude); sShakeState = SHAKE_UP; break; case SHAKE_UP: - gAgentCamera.setPanUpKey(SHAKE_AMOUNT); + gAgentCamera.setPanUpKey(mShakeMagnitude); sShakeState = SHAKE_RIGHT; break; case SHAKE_RIGHT: - gAgentCamera.setPanRightKey(SHAKE_AMOUNT); + gAgentCamera.setPanRightKey(mShakeMagnitude); sShakeState = SHAKE_DOWN; break; case SHAKE_DOWN: - gAgentCamera.setPanDownKey(SHAKE_AMOUNT); - mIterations = mIterations + 1; - if(SHAKE_ITERATIONS == mIterations) + gAgentCamera.setPanDownKey(mShakeMagnitude); + mShakeIterations++; + time_shaking = SHAKE_INTERVAL * (mShakeIterations * 4 /* left, up, right, down */); + if(SHAKE_TOTAL_DURATION <= time_shaking) { sShakeState = SHAKE_DONE; + mShakeMagnitude = 0.0; } else { sShakeState = SHAKE_LEFT; + F32 percent_done_shaking = (SHAKE_TOTAL_DURATION - time_shaking) / SHAKE_TOTAL_DURATION; + mShakeMagnitude = SHAKE_INITIAL_MAGNITUDE * (percent_done_shaking * percent_done_shaking); // exponential decay } break; diff --git a/indra/newview/llfloaterregionrestarting.h b/indra/newview/llfloaterregionrestarting.h index 95fe772a28..46416db2c8 100644 --- a/indra/newview/llfloaterregionrestarting.h +++ b/indra/newview/llfloaterregionrestarting.h @@ -49,7 +49,8 @@ private: virtual void regionChange(); std::string mName; - U32 mIterations; + U32 mShakeIterations; + F32 mShakeMagnitude; LLTimer mShakeTimer; boost::signals2::connection mRegionChangedConnection; -- cgit v1.2.3 From 24c5ac7417f8b32c39dd5defec21845bd03786c4 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Sat, 4 Jan 2014 10:40:20 -0500 Subject: STORM-1980 Center floater on screen. Tweak shaking parameters. --- indra/newview/llfloaterregionrestarting.cpp | 7 ++++--- indra/newview/llviewermessage.cpp | 6 +++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/indra/newview/llfloaterregionrestarting.cpp b/indra/newview/llfloaterregionrestarting.cpp index 94c805205a..95d4265bb4 100644 --- a/indra/newview/llfloaterregionrestarting.cpp +++ b/indra/newview/llfloaterregionrestarting.cpp @@ -100,9 +100,10 @@ void LLFloaterRegionRestarting::draw() { LLFloater::draw(); - const F32 SHAKE_INTERVAL = 0.04; + const F32 SHAKE_INTERVAL = 0.025; const F32 SHAKE_TOTAL_DURATION = 1.8; // the length of the default alert tone for this const F32 SHAKE_INITIAL_MAGNITUDE = 1.5; + const F32 SHAKE_HORIZONTAL_BIAS = 0.25; F32 time_shaking; if(SHAKE_START == sShakeState) @@ -120,7 +121,7 @@ void LLFloaterRegionRestarting::draw() switch(sShakeState) { case SHAKE_LEFT: - gAgentCamera.setPanLeftKey(mShakeMagnitude); + gAgentCamera.setPanLeftKey(mShakeMagnitude * SHAKE_HORIZONTAL_BIAS); sShakeState = SHAKE_UP; break; @@ -130,7 +131,7 @@ void LLFloaterRegionRestarting::draw() break; case SHAKE_RIGHT: - gAgentCamera.setPanRightKey(mShakeMagnitude); + gAgentCamera.setPanRightKey(mShakeMagnitude * SHAKE_HORIZONTAL_BIAS); sShakeState = SHAKE_DOWN; break; diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 076419e96a..267aa9532c 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -5978,7 +5978,11 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem) LLSD params; params["NAME"] = llsdBlock["NAME"]; params["SECONDS"] = (LLSD::Integer)seconds; - LLFloaterReg::showInstance("region_restarting", params); + LLFloaterRegionRestarting* restarting_floater = dynamic_cast(LLFloaterReg::showInstance("region_restarting", params)); + if(restarting_floater) + { + restarting_floater->center(); + } } send_sound_trigger(LLUUID(gSavedSettings.getString("UISndRestart")), 1.0f); -- cgit v1.2.3 From f291995dac53c2aba9d79aef8b6cd91a5c836e9f Mon Sep 17 00:00:00 2001 From: simon Date: Tue, 7 Jan 2014 15:18:29 -0800 Subject: Revert changes made for MAINT-535 to test in a release cohort. --- indra/llui/llscrolllistctrl.cpp | 4 +++- indra/llui/lltextbase.cpp | 10 +++++++--- indra/llui/lltextbase.h | 14 +++++++++----- indra/llui/llurlaction.cpp | 12 +++++++++--- indra/llui/llurlaction.h | 8 ++++++-- indra/llui/llurlentry.cpp | 6 ++++-- indra/newview/llchathistory.cpp | 3 ++- indra/newview/llurldispatcher.cpp | 10 ++++++++-- indra/newview/llurldispatcher.h | 4 +++- indra/newview/llurldispatcherlistener.cpp | 4 +++- 10 files changed, 54 insertions(+), 21 deletions(-) diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp index 594e1e150b..d290413f7a 100755 --- a/indra/llui/llscrolllistctrl.cpp +++ b/indra/llui/llscrolllistctrl.cpp @@ -1855,7 +1855,9 @@ void LLScrollListCtrl::showNameDetails(std::string id, bool is_group) // open the resident's details or the group details std::string sltype = is_group ? "group" : "agent"; std::string slurl = "secondlife:///app/" + sltype + "/" + id + "/about"; - LLUrlAction::clickAction(slurl, true); + LLUrlAction::clickAction(slurl); + // MAINT-535 reversion test + //LLUrlAction::clickAction(slurl, true); } void LLScrollListCtrl::copyNameToClipboard(std::string id, bool is_group) diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 4144a42fd6..b51053ca4c 100755 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -167,7 +167,8 @@ LLTextBase::Params::Params() max_text_length("max_length", 255), font_shadow("font_shadow"), wrap("wrap"), - trusted_content("trusted_content", true), + // MAINT-535 reversion test + // trusted_content("trusted_content", true), use_ellipses("use_ellipses", false), parse_urls("parse_urls", false), parse_highlights("parse_highlights", false) @@ -212,7 +213,8 @@ LLTextBase::LLTextBase(const LLTextBase::Params &p) mLineSpacingPixels(p.line_spacing.pixels), mClip(p.clip), mClipPartial(p.clip_partial && !p.allow_scroll), - mTrustedContent(p.trusted_content), + // MAINT-535 reversion test + // mTrustedContent(p.trusted_content), mTrackEnd( p.track_end ), mScrollIndex(-1), mSelectionStart( 0 ), @@ -3166,7 +3168,9 @@ BOOL LLNormalTextSegment::handleMouseUp(S32 x, S32 y, MASK mask) // Only process the click if it's actually in this segment, not to the right of the end-of-line. if(mEditor.getSegmentAtLocalPos(x, y, false) == this) { - LLUrlAction::clickAction(getStyle()->getLinkHREF(), mEditor.isContentTrusted()); + LLUrlAction::clickAction(getStyle()->getLinkHREF()); + // MAINT-535 reversion test + // LLUrlAction::clickAction(getStyle()->getLinkHREF(), mEditor.isContentTrusted()); return TRUE; } } diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h index 3603f55c3f..515e4d4257 100755 --- a/indra/llui/lltextbase.h +++ b/indra/llui/lltextbase.h @@ -291,9 +291,11 @@ public: parse_urls, parse_highlights, clip, - clip_partial, - trusted_content; - + clip_partial; + // MAINT-535 reversion test + // clip_partial, + // trusted_content; + Optional v_pad, h_pad; @@ -362,7 +364,8 @@ public: bool getWordWrap() { return mWordWrap; } bool getUseEllipses() { return mUseEllipses; } bool truncate(); // returns true of truncation occurred - bool isContentTrusted() {return mTrustedContent;} + // MAINT-535 reversion test + //bool isContentTrusted() {return mTrustedContent;} // TODO: move into LLTextSegment? void createUrlContextMenu(S32 x, S32 y, const std::string &url); // create a popup context menu for the given Url @@ -636,7 +639,8 @@ protected: bool mBGVisible; // render background? bool mClip; // clip text to widget rect bool mClipPartial; // false if we show lines that are partially inside bounding rect - bool mTrustedContent; // if false, does not allow to execute SURL links from this editor + // MAINT-535 reversion test + //bool mTrustedContent; // if false, does not allow to execute SURL links from this editor bool mPlainText; // didn't use Image or Icon segments bool mAutoIndent; S32 mMaxTextByteLength; // Maximum length mText is allowed to be in bytes diff --git a/indra/llui/llurlaction.cpp b/indra/llui/llurlaction.cpp index 12537d9dd1..e392a88b6a 100755 --- a/indra/llui/llurlaction.cpp +++ b/indra/llui/llurlaction.cpp @@ -87,14 +87,20 @@ void LLUrlAction::executeSLURL(std::string url) { if (sExecuteSLURLCallback) { - sExecuteSLURLCallback(url ,true); + sExecuteSLURLCallback(url); + // MAINT-535 reversion test + //sExecuteSLURLCallback(url ,true); } } -void LLUrlAction::clickAction(std::string url, bool trusted_content) +// MAINT-535 reversion test +//void LLUrlAction::clickAction(std::string url, bool trusted_content) +void LLUrlAction::clickAction(std::string url) { // Try to handle as SLURL first, then http Url - if ( (sExecuteSLURLCallback) && !sExecuteSLURLCallback(url, trusted_content) ) + // MAINT-535 reversion test + // if ( (sExecuteSLURLCallback) && !sExecuteSLURLCallback(url, trusted_content) ) + if ( (sExecuteSLURLCallback) && !sExecuteSLURLCallback(url) ) { if (sOpenURLCallback) { diff --git a/indra/llui/llurlaction.h b/indra/llui/llurlaction.h index 5f3626490c..407be9a756 100755 --- a/indra/llui/llurlaction.h +++ b/indra/llui/llurlaction.h @@ -66,7 +66,9 @@ public: static void showLocationOnMap(std::string url); /// perform the appropriate action for left-clicking on a Url - static void clickAction(std::string url, bool trusted_content); + static void clickAction(std::string url); + // MAINT-535 reversion test + //static void clickAction(std::string url, bool trusted_content); /// copy the label for a Url to the clipboard static void copyLabelToClipboard(std::string url); @@ -86,7 +88,9 @@ public: /// specify the callbacks to enable this class's functionality typedef boost::function url_callback_t; - typedef boost::function execute_url_callback_t; + typedef boost::function execute_url_callback_t; + // MAINT-535 reversion test + //typedef boost::function execute_url_callback_t; static void setOpenURLCallback(url_callback_t cb); static void setOpenURLInternalCallback(url_callback_t cb); diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp index 840f67968d..2d28ac41b2 100755 --- a/indra/llui/llurlentry.cpp +++ b/indra/llui/llurlentry.cpp @@ -1067,8 +1067,10 @@ LLUrlEntrySLLabel::LLUrlEntrySLLabel() std::string LLUrlEntrySLLabel::getLabel(const std::string &url, const LLUrlLabelCallback &cb) { - std::string label = getLabelFromWikiLink(url); - return (!LLUrlRegistry::instance().hasUrl(label)) ? label : getUrl(url); + // MAINT-535 reversion test + // std::string label = getLabelFromWikiLink(url); + // return (!LLUrlRegistry::instance().hasUrl(label)) ? label : getUrl(url); + return getLabelFromWikiLink(url); } std::string LLUrlEntrySLLabel::getUrl(const std::string &string) const diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index abeaf958eb..1574c9f613 100755 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -731,7 +731,8 @@ LLChatHistory::LLChatHistory(const LLChatHistory::Params& p) editor_params.follows.flags = FOLLOWS_ALL; editor_params.enabled = false; // read only editor_params.show_context_menu = "true"; - editor_params.trusted_content = false; + // MAINT-535 reversion test + //editor_params.trusted_content = false; mEditor = LLUICtrlFactory::create(editor_params, this); mEditor->setIsFriendCallback(LLAvatarActions::isFriend); } diff --git a/indra/newview/llurldispatcher.cpp b/indra/newview/llurldispatcher.cpp index 0c34db39b5..6e8ee38a2f 100755 --- a/indra/newview/llurldispatcher.cpp +++ b/indra/newview/llurldispatcher.cpp @@ -307,7 +307,9 @@ bool LLURLDispatcher::dispatchRightClick(const std::string& slurl) } // static -bool LLURLDispatcher::dispatchFromTextEditor(const std::string& slurl, bool trusted_content) +// MAINT-535 reversion test +// bool LLURLDispatcher::dispatchFromTextEditor(const std::string& slurl, bool trusted_content) +bool LLURLDispatcher::dispatchFromTextEditor(const std::string& slurl) { // *NOTE: Text editors are considered sources of trusted URLs // in order to make avatar profile links in chat history work. @@ -315,9 +317,13 @@ bool LLURLDispatcher::dispatchFromTextEditor(const std::string& slurl, bool trus // receiving resident will see it and must affirmatively // click on it. // *TODO: Make this trust model more refined. JC + const bool trusted_browser = true; LLMediaCtrl* web = NULL; - return LLURLDispatcherImpl::dispatch(LLSLURL(slurl), "clicked", web, trusted_content); + return LLURLDispatcherImpl::dispatch(LLSLURL(slurl), "clicked", web, trusted_browser); + + // MAINT-535 reversion test + //return LLURLDispatcherImpl::dispatch(LLSLURL(slurl), "clicked", web, trusted_content); } diff --git a/indra/newview/llurldispatcher.h b/indra/newview/llurldispatcher.h index 9b05260af1..1e38fb2a73 100755 --- a/indra/newview/llurldispatcher.h +++ b/indra/newview/llurldispatcher.h @@ -53,7 +53,9 @@ public: static bool dispatchRightClick(const std::string& slurl); - static bool dispatchFromTextEditor(const std::string& slurl, bool trusted_content); + static bool dispatchFromTextEditor(const std::string& slurl); + // MAINT-535 reversion test + //static bool dispatchFromTextEditor(const std::string& slurl, bool trusted_content); }; #endif diff --git a/indra/newview/llurldispatcherlistener.cpp b/indra/newview/llurldispatcherlistener.cpp index 7545f3a9b3..03a3eb26a0 100755 --- a/indra/newview/llurldispatcherlistener.cpp +++ b/indra/newview/llurldispatcherlistener.cpp @@ -71,5 +71,7 @@ void LLURLDispatcherListener::dispatchRightClick(const LLSD& params) const void LLURLDispatcherListener::dispatchFromTextEditor(const LLSD& params) const { - LLURLDispatcher::dispatchFromTextEditor(params["url"], false); + LLURLDispatcher::dispatchFromTextEditor(params["url"]); + // MAINT-535 reversion test + // LLURLDispatcher::dispatchFromTextEditor(params["url"], false); } -- cgit v1.2.3 From 19a41cc24372f70436ced4a80c758a8acd62ce58 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Wed, 8 Jan 2014 18:45:48 -0500 Subject: Added tag 3.6.13-release for changeset 0d9b9e50f1a8 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 07ddf93c11..0f67e5c3d3 100755 --- a/.hgtags +++ b/.hgtags @@ -471,3 +471,4 @@ d40c66e410741de7e90b1ed6dac28dd8a2d7e1f6 3.6.8-release 5b54b36862ff8bc3b6935673c9d1c1f22ee8d521 3.6.10-release 2feb70a4cfde43f2898d95ff8fcae3e67805c7c2 3.6.11-release 88bbfd7a6971033f3aa103f3a3500ceb4c73521b 3.6.12-release +0d9b9e50f1a8880e05f15688a9ec7d09e0e81013 3.6.13-release -- cgit v1.2.3 From d8a81b240e828a8ab27709fb11038a4b5c4d5428 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Wed, 8 Jan 2014 18:46:23 -0500 Subject: increment viewer version to 3.6.14 --- indra/newview/VIEWER_VERSION.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt index 3609cf7707..f5c2a4050b 100644 --- a/indra/newview/VIEWER_VERSION.txt +++ b/indra/newview/VIEWER_VERSION.txt @@ -1 +1 @@ -3.6.13 +3.6.14 -- cgit v1.2.3 From b2fe32e5725e13930437ae8939d7213de69b35ca Mon Sep 17 00:00:00 2001 From: Monty Brandenberg Date: Thu, 9 Jan 2014 15:18:54 -0500 Subject: SH-4667 HTTP Viewer reports network error instead of a misnamed joint on mesh upload Tried to add consistent mesh upload retries in the HTTP work but a combination of bad status choices in the upload service and the one-shot nature of the upload capabilities means that status information can be lost. For now, retain the wonderful manual retry logic. At some future point, we might fix the services or add application-level retry. --- indra/newview/llmeshrepository.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index 4296abb2cc..5afd2cb329 100755 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -5,7 +5,7 @@ * * $LicenseInfo:firstyear=2005&license=viewerlgpl$ * Second Life Viewer Source Code - * Copyright (C) 2010-2013, Linden Research, Inc. + * Copyright (C) 2010-2014, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -359,6 +359,16 @@ const U32 LARGE_MESH_FETCH_THRESHOLD = 1U << 21; // Size at which requests goes const long SMALL_MESH_XFER_TIMEOUT = 120L; // Seconds to complete xfer, small mesh downloads const long LARGE_MESH_XFER_TIMEOUT = 600L; // Seconds to complete xfer, large downloads +// Would normally like to retry on uploads as some +// retryable failures would be recoverable. Unfortunately, +// the mesh service is using 500 (retryable) rather than +// 400/bad request (permanent) for a bad payload and +// retrying that just leads to revocation of the one-shot +// cap which then produces a 404 on retry destroying some +// (occasionally) useful error information. We'll leave +// upload retries to the user as in the past. SH-4667. +const long UPLOAD_RETRY_LIMIT = 0L; + // Maximum mesh version to support. Three least significant digits are reserved for the minor version, // with major version changes indicating a format change that is not backwards compatible and should not // be parsed by viewers that don't specifically support that version. For example, if the integer "1" is @@ -1883,6 +1893,7 @@ LLMeshUploadThread::LLMeshUploadThread(LLMeshUploadThread::instance_list& data, mHttpOptions = new LLCore::HttpOptions; mHttpOptions->setTransferTimeout(mMeshUploadTimeOut); mHttpOptions->setUseRetryAfter(gSavedSettings.getBOOL("MeshUseHttpRetryAfter")); + mHttpOptions->setRetries(UPLOAD_RETRY_LIMIT); mHttpHeaders = new LLCore::HttpHeaders; mHttpHeaders->append("Content-Type", "application/llsd+xml"); mHttpPolicyClass = LLAppViewer::instance()->getAppCoreHttp().getPolicy(LLAppCoreHttp::AP_UPLOADS); -- cgit v1.2.3 From cfadbe631fbf845db8e26793613dea37ef08d11c Mon Sep 17 00:00:00 2001 From: simon Date: Fri, 10 Jan 2014 13:15:19 -0800 Subject: Revert earlier back-out for MAINT-535 ... it's back in --- indra/llui/llscrolllistctrl.cpp | 4 +--- indra/llui/lltextbase.cpp | 10 +++------- indra/llui/lltextbase.h | 14 +++++--------- indra/llui/llurlaction.cpp | 12 +++--------- indra/llui/llurlaction.h | 8 ++------ indra/llui/llurlentry.cpp | 6 ++---- indra/newview/llchathistory.cpp | 3 +-- indra/newview/llurldispatcher.cpp | 10 ++-------- indra/newview/llurldispatcher.h | 4 +--- indra/newview/llurldispatcherlistener.cpp | 4 +--- 10 files changed, 21 insertions(+), 54 deletions(-) diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp index d290413f7a..594e1e150b 100755 --- a/indra/llui/llscrolllistctrl.cpp +++ b/indra/llui/llscrolllistctrl.cpp @@ -1855,9 +1855,7 @@ void LLScrollListCtrl::showNameDetails(std::string id, bool is_group) // open the resident's details or the group details std::string sltype = is_group ? "group" : "agent"; std::string slurl = "secondlife:///app/" + sltype + "/" + id + "/about"; - LLUrlAction::clickAction(slurl); - // MAINT-535 reversion test - //LLUrlAction::clickAction(slurl, true); + LLUrlAction::clickAction(slurl, true); } void LLScrollListCtrl::copyNameToClipboard(std::string id, bool is_group) diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index b51053ca4c..4144a42fd6 100755 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -167,8 +167,7 @@ LLTextBase::Params::Params() max_text_length("max_length", 255), font_shadow("font_shadow"), wrap("wrap"), - // MAINT-535 reversion test - // trusted_content("trusted_content", true), + trusted_content("trusted_content", true), use_ellipses("use_ellipses", false), parse_urls("parse_urls", false), parse_highlights("parse_highlights", false) @@ -213,8 +212,7 @@ LLTextBase::LLTextBase(const LLTextBase::Params &p) mLineSpacingPixels(p.line_spacing.pixels), mClip(p.clip), mClipPartial(p.clip_partial && !p.allow_scroll), - // MAINT-535 reversion test - // mTrustedContent(p.trusted_content), + mTrustedContent(p.trusted_content), mTrackEnd( p.track_end ), mScrollIndex(-1), mSelectionStart( 0 ), @@ -3168,9 +3166,7 @@ BOOL LLNormalTextSegment::handleMouseUp(S32 x, S32 y, MASK mask) // Only process the click if it's actually in this segment, not to the right of the end-of-line. if(mEditor.getSegmentAtLocalPos(x, y, false) == this) { - LLUrlAction::clickAction(getStyle()->getLinkHREF()); - // MAINT-535 reversion test - // LLUrlAction::clickAction(getStyle()->getLinkHREF(), mEditor.isContentTrusted()); + LLUrlAction::clickAction(getStyle()->getLinkHREF(), mEditor.isContentTrusted()); return TRUE; } } diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h index 515e4d4257..3603f55c3f 100755 --- a/indra/llui/lltextbase.h +++ b/indra/llui/lltextbase.h @@ -291,11 +291,9 @@ public: parse_urls, parse_highlights, clip, - clip_partial; - // MAINT-535 reversion test - // clip_partial, - // trusted_content; - + clip_partial, + trusted_content; + Optional v_pad, h_pad; @@ -364,8 +362,7 @@ public: bool getWordWrap() { return mWordWrap; } bool getUseEllipses() { return mUseEllipses; } bool truncate(); // returns true of truncation occurred - // MAINT-535 reversion test - //bool isContentTrusted() {return mTrustedContent;} + bool isContentTrusted() {return mTrustedContent;} // TODO: move into LLTextSegment? void createUrlContextMenu(S32 x, S32 y, const std::string &url); // create a popup context menu for the given Url @@ -639,8 +636,7 @@ protected: bool mBGVisible; // render background? bool mClip; // clip text to widget rect bool mClipPartial; // false if we show lines that are partially inside bounding rect - // MAINT-535 reversion test - //bool mTrustedContent; // if false, does not allow to execute SURL links from this editor + bool mTrustedContent; // if false, does not allow to execute SURL links from this editor bool mPlainText; // didn't use Image or Icon segments bool mAutoIndent; S32 mMaxTextByteLength; // Maximum length mText is allowed to be in bytes diff --git a/indra/llui/llurlaction.cpp b/indra/llui/llurlaction.cpp index e392a88b6a..12537d9dd1 100755 --- a/indra/llui/llurlaction.cpp +++ b/indra/llui/llurlaction.cpp @@ -87,20 +87,14 @@ void LLUrlAction::executeSLURL(std::string url) { if (sExecuteSLURLCallback) { - sExecuteSLURLCallback(url); - // MAINT-535 reversion test - //sExecuteSLURLCallback(url ,true); + sExecuteSLURLCallback(url ,true); } } -// MAINT-535 reversion test -//void LLUrlAction::clickAction(std::string url, bool trusted_content) -void LLUrlAction::clickAction(std::string url) +void LLUrlAction::clickAction(std::string url, bool trusted_content) { // Try to handle as SLURL first, then http Url - // MAINT-535 reversion test - // if ( (sExecuteSLURLCallback) && !sExecuteSLURLCallback(url, trusted_content) ) - if ( (sExecuteSLURLCallback) && !sExecuteSLURLCallback(url) ) + if ( (sExecuteSLURLCallback) && !sExecuteSLURLCallback(url, trusted_content) ) { if (sOpenURLCallback) { diff --git a/indra/llui/llurlaction.h b/indra/llui/llurlaction.h index 407be9a756..5f3626490c 100755 --- a/indra/llui/llurlaction.h +++ b/indra/llui/llurlaction.h @@ -66,9 +66,7 @@ public: static void showLocationOnMap(std::string url); /// perform the appropriate action for left-clicking on a Url - static void clickAction(std::string url); - // MAINT-535 reversion test - //static void clickAction(std::string url, bool trusted_content); + static void clickAction(std::string url, bool trusted_content); /// copy the label for a Url to the clipboard static void copyLabelToClipboard(std::string url); @@ -88,9 +86,7 @@ public: /// specify the callbacks to enable this class's functionality typedef boost::function url_callback_t; - typedef boost::function execute_url_callback_t; - // MAINT-535 reversion test - //typedef boost::function execute_url_callback_t; + typedef boost::function execute_url_callback_t; static void setOpenURLCallback(url_callback_t cb); static void setOpenURLInternalCallback(url_callback_t cb); diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp index 2d28ac41b2..840f67968d 100755 --- a/indra/llui/llurlentry.cpp +++ b/indra/llui/llurlentry.cpp @@ -1067,10 +1067,8 @@ LLUrlEntrySLLabel::LLUrlEntrySLLabel() std::string LLUrlEntrySLLabel::getLabel(const std::string &url, const LLUrlLabelCallback &cb) { - // MAINT-535 reversion test - // std::string label = getLabelFromWikiLink(url); - // return (!LLUrlRegistry::instance().hasUrl(label)) ? label : getUrl(url); - return getLabelFromWikiLink(url); + std::string label = getLabelFromWikiLink(url); + return (!LLUrlRegistry::instance().hasUrl(label)) ? label : getUrl(url); } std::string LLUrlEntrySLLabel::getUrl(const std::string &string) const diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 1574c9f613..abeaf958eb 100755 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -731,8 +731,7 @@ LLChatHistory::LLChatHistory(const LLChatHistory::Params& p) editor_params.follows.flags = FOLLOWS_ALL; editor_params.enabled = false; // read only editor_params.show_context_menu = "true"; - // MAINT-535 reversion test - //editor_params.trusted_content = false; + editor_params.trusted_content = false; mEditor = LLUICtrlFactory::create(editor_params, this); mEditor->setIsFriendCallback(LLAvatarActions::isFriend); } diff --git a/indra/newview/llurldispatcher.cpp b/indra/newview/llurldispatcher.cpp index 6e8ee38a2f..0c34db39b5 100755 --- a/indra/newview/llurldispatcher.cpp +++ b/indra/newview/llurldispatcher.cpp @@ -307,9 +307,7 @@ bool LLURLDispatcher::dispatchRightClick(const std::string& slurl) } // static -// MAINT-535 reversion test -// bool LLURLDispatcher::dispatchFromTextEditor(const std::string& slurl, bool trusted_content) -bool LLURLDispatcher::dispatchFromTextEditor(const std::string& slurl) +bool LLURLDispatcher::dispatchFromTextEditor(const std::string& slurl, bool trusted_content) { // *NOTE: Text editors are considered sources of trusted URLs // in order to make avatar profile links in chat history work. @@ -317,13 +315,9 @@ bool LLURLDispatcher::dispatchFromTextEditor(const std::string& slurl) // receiving resident will see it and must affirmatively // click on it. // *TODO: Make this trust model more refined. JC - const bool trusted_browser = true; LLMediaCtrl* web = NULL; - return LLURLDispatcherImpl::dispatch(LLSLURL(slurl), "clicked", web, trusted_browser); - - // MAINT-535 reversion test - //return LLURLDispatcherImpl::dispatch(LLSLURL(slurl), "clicked", web, trusted_content); + return LLURLDispatcherImpl::dispatch(LLSLURL(slurl), "clicked", web, trusted_content); } diff --git a/indra/newview/llurldispatcher.h b/indra/newview/llurldispatcher.h index 1e38fb2a73..9b05260af1 100755 --- a/indra/newview/llurldispatcher.h +++ b/indra/newview/llurldispatcher.h @@ -53,9 +53,7 @@ public: static bool dispatchRightClick(const std::string& slurl); - static bool dispatchFromTextEditor(const std::string& slurl); - // MAINT-535 reversion test - //static bool dispatchFromTextEditor(const std::string& slurl, bool trusted_content); + static bool dispatchFromTextEditor(const std::string& slurl, bool trusted_content); }; #endif diff --git a/indra/newview/llurldispatcherlistener.cpp b/indra/newview/llurldispatcherlistener.cpp index 03a3eb26a0..7545f3a9b3 100755 --- a/indra/newview/llurldispatcherlistener.cpp +++ b/indra/newview/llurldispatcherlistener.cpp @@ -71,7 +71,5 @@ void LLURLDispatcherListener::dispatchRightClick(const LLSD& params) const void LLURLDispatcherListener::dispatchFromTextEditor(const LLSD& params) const { - LLURLDispatcher::dispatchFromTextEditor(params["url"]); - // MAINT-535 reversion test - // LLURLDispatcher::dispatchFromTextEditor(params["url"], false); + LLURLDispatcher::dispatchFromTextEditor(params["url"], false); } -- cgit v1.2.3 From da23625ba70affbb23498e57e430469172ed0d3c Mon Sep 17 00:00:00 2001 From: simon Date: Wed, 15 Jan 2014 10:12:51 -0800 Subject: MAINT-3397 : fix to use slurl for localization handler for EstateManagerFailedllTeleportHome message --- indra/newview/skins/default/xui/en/notifications.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 5c75aa2059..a18dbd44d1 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -9305,7 +9305,7 @@ Object uses too many physics resources -- its dynamics have been disabled. persist="false" type="notify"> fail -The object '[OBJECT_NAME]' at [OBJECT_POS] cannot teleport estate managers home. +The object '[OBJECT_NAME]' at [SLURL] cannot teleport estate managers home. Date: Fri, 17 Jan 2014 20:32:30 +0200 Subject: MAINT-3536 FIXED new crash in XML_ParserFree: temporary solution --- indra/newview/llchannelmanager.cpp | 50 ++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/indra/newview/llchannelmanager.cpp b/indra/newview/llchannelmanager.cpp index 8b2d9e639f..fa23251d95 100755 --- a/indra/newview/llchannelmanager.cpp +++ b/indra/newview/llchannelmanager.cpp @@ -113,29 +113,33 @@ void LLChannelManager::onLoginCompleted() } else { - // create a channel for the StartUp Toast - LLScreenChannelBase::Params p; - p.id = LLUUID(gSavedSettings.getString("StartUpChannelUUID")); - p.channel_align = CA_RIGHT; - mStartUpChannel = createChannel(p); - - if(!mStartUpChannel) - { - onStartUpToastClose(); - } - else - { - gViewerWindow->getRootView()->addChild(mStartUpChannel); - - // init channel's position and size - S32 channel_right_bound = gViewerWindow->getWorldViewRectScaled().mRight - gSavedSettings.getS32("NotificationChannelRightMargin"); - S32 channel_width = gSavedSettings.getS32("NotifyBoxWidth"); - mStartUpChannel->init(channel_right_bound - channel_width, channel_right_bound); - mStartUpChannel->setMouseDownCallback(boost::bind(&LLNotificationWellWindow::onStartUpToastClick, LLNotificationWellWindow::getInstance(), _2, _3, _4)); - - mStartUpChannel->setCommitCallback(boost::bind(&LLChannelManager::onStartUpToastClose, this)); - mStartUpChannel->createStartUpToast(away_notifications, gSavedSettings.getS32("StartUpToastLifeTime")); - } + // TODO: Seems this code leads to MAINT-3536 new crash in XML_ParserFree. + // Need to investigate this and fix possible problems with notifications in startup time + // Viewer can normally receive and show of postponed notifications about purchasing in marketplace on startup time. + // Other types of postponed notifications did not tested. + //// create a channel for the StartUp Toast + //LLScreenChannelBase::Params p; + //p.id = LLUUID(gSavedSettings.getString("StartUpChannelUUID")); + //p.channel_align = CA_RIGHT; + //mStartUpChannel = createChannel(p); + + //if(!mStartUpChannel) + //{ + // onStartUpToastClose(); + //} + //else + //{ + // gViewerWindow->getRootView()->addChild(mStartUpChannel); + + // // init channel's position and size + // S32 channel_right_bound = gViewerWindow->getWorldViewRectScaled().mRight - gSavedSettings.getS32("NotificationChannelRightMargin"); + // S32 channel_width = gSavedSettings.getS32("NotifyBoxWidth"); + // mStartUpChannel->init(channel_right_bound - channel_width, channel_right_bound); + // mStartUpChannel->setMouseDownCallback(boost::bind(&LLNotificationWellWindow::onStartUpToastClick, LLNotificationWellWindow::getInstance(), _2, _3, _4)); + + // mStartUpChannel->setCommitCallback(boost::bind(&LLChannelManager::onStartUpToastClose, this)); + // mStartUpChannel->createStartUpToast(away_notifications, gSavedSettings.getS32("StartUpToastLifeTime")); + //} } LLPersistentNotificationStorage::getInstance()->loadNotifications(); -- cgit v1.2.3 From 6c28e65b128468d4dd14b27cc18bf4f5a5f70b7e Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Wed, 22 Jan 2014 11:12:22 -0500 Subject: record installed packages for each build --- build.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/build.sh b/build.sh index 1fd2cd802b..0060b83f3f 100755 --- a/build.sh +++ b/build.sh @@ -414,6 +414,12 @@ then upload_item symbolfile "$build_dir/$symbolfile" binary/octet-stream done + # Upload the actual dependencies used + if [ -r "$build_dir/packages/installed-packages.xml" ] + then + upload_item installer "$build_dir/packages/installed-packages.xml" text/xml + fi + # Upload the llphysicsextensions_tpv package, if one was produced # *TODO: Make this an upload-extension if [ -r "$build_dir/llphysicsextensions_package" ] -- cgit v1.2.3 From cdec438683bedb4d9cabc95abf711125694a8138 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Wed, 22 Jan 2014 16:44:34 -0500 Subject: add retries around OSX codesign to try to work around frequent build farm failures --- indra/newview/viewer_manifest.py | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 9a617c2a13..bf19722a82 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -38,7 +38,7 @@ viewer_dir = os.path.dirname(__file__) # Put it FIRST because some of our build hosts have an ancient install of # indra.util.llmanifest under their system Python! sys.path.insert(0, os.path.join(viewer_dir, os.pardir, "lib", "python")) -from indra.util.llmanifest import LLManifest, main, proper_windows_path, path_ancestors, CHANNEL_VENDOR_BASE, RELEASE_CHANNEL +from indra.util.llmanifest import LLManifest, main, proper_windows_path, path_ancestors, CHANNEL_VENDOR_BASE, RELEASE_CHANNEL, ManifestError try: from llbase import llsd except ImportError: @@ -818,11 +818,27 @@ class Darwin_i386_Manifest(ViewerManifest): keychain_pwd = open(keychain_pwd_path).read().rstrip() self.run_command('security unlock-keychain -p "%s" "%s/Library/Keychains/viewer.keychain"' % ( keychain_pwd, home_path ) ) - self.run_command('codesign --verbose --force --keychain "%(home_path)s/Library/Keychains/viewer.keychain" --sign %(identity)r %(bundle)r' % { - 'home_path' : home_path, - 'identity': identity, - 'bundle': self.get_dst_prefix() - }) + signed=False + sign_attempts=3 + sign_retry_wait=15 + while (not signed) and (sign_attempts > 0): + try: + sign_attempts-=1; + self.run_command( + 'codesign --verbose --force --keychain "%(home_path)s/Library/Keychains/viewer.keychain" --sign %(identity)r %(bundle)r' % { + 'home_path' : home_path, + 'identity': identity, + 'bundle': self.get_dst_prefix() + }) + signed=True # if no exception was raised, the codesign worked + except ManifestError, err: + if sign_attempts: + print >> sys.stderr, "codesign failed, waiting %d seconds before retrying" + time.sleep(sign_retry_wait) + sign_retry_wait*=2 + else: + print >> sys.stderr, "Maximum codesign attempts exceeded; giving up" + raise imagename="SecondLife_" + '_'.join(self.args['version']) -- cgit v1.2.3 From 476e317c8b4803926e1775ec206d013bd717ad98 Mon Sep 17 00:00:00 2001 From: Dave Parks Date: Thu, 23 Jan 2014 17:55:03 -0600 Subject: FITMESH-6, FITMESH-20 Fix for some objects disappearing when hardware skinning enabled and ALM disabled. --- .../app_settings/shaders/class1/avatar/objectSkinV.glsl | 9 +++------ indra/newview/lldrawpoolavatar.cpp | 12 +++++++----- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl index 972d10b325..8eb5a977bc 100755 --- a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl @@ -22,17 +22,14 @@ * $/LicenseInfo$ */ - - ATTRIBUTE vec4 weight4; -uniform mat3 matrixPalette[64]; -uniform vec3 translationPalette[64]; - +uniform mat3 matrixPalette[52]; +uniform vec3 translationPalette[52]; mat4 getObjectSkinnedTransform() { - int i; + int i; vec4 w = fract(weight4); vec4 index = floor(weight4); diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index e77ed27fa2..4578d3d0cd 100755 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -55,6 +55,7 @@ static U32 sDataMask = LLDrawPoolAvatar::VERTEX_DATA_MASK; static U32 sBufferUsage = GL_STREAM_DRAW_ARB; static U32 sShaderLevel = 0; +#define JOINT_COUNT 52 LLGLSLShader* LLDrawPoolAvatar::sVertexProgram = NULL; BOOL LLDrawPoolAvatar::sSkipOpaque = FALSE; @@ -1582,7 +1583,7 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLVOAvatar* avatar, LLFace* LLVector4a* norm = has_normal ? (LLVector4a*) normal.get() : NULL; //build matrix palette - LLMatrix4a mp[64]; + LLMatrix4a mp[JOINT_COUNT]; LLMatrix4* mat = (LLMatrix4*) mp; for (U32 j = 0; j < skin->mJointNames.size(); ++j) @@ -1642,6 +1643,7 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLVOAvatar* avatar, LLFace* LLVector4a& n = vol_face.mNormals[j]; bind_shape_matrix.rotate(n, t); final_mat.rotate(t, dst); + dst.normalize3fast(); norm[j] = dst; } } @@ -1708,9 +1710,9 @@ void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow) { if (sShaderLevel > 0) { //upload matrix palette to shader - LLMatrix4 mat[64]; + LLMatrix4 mat[JOINT_COUNT]; - U32 count = llmin((U32) skin->mJointNames.size(), (U32) 64); + U32 count = llmin((U32) skin->mJointNames.size(), (U32) JOINT_COUNT); for (U32 i = 0; i < count; ++i) { @@ -1724,9 +1726,9 @@ void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow) stop_glerror(); - F32 mp[64*9]; + F32 mp[JOINT_COUNT*9]; - F32 transp[64*3]; + F32 transp[JOINT_COUNT*3]; for (U32 i = 0; i < count; ++i) { -- cgit v1.2.3 From cec62b7872db7a9ca52e3872b96bf36f6e271f77 Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Fri, 24 Jan 2014 16:39:00 -0500 Subject: fix error message python boo-boo --- indra/newview/viewer_manifest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index bf19722a82..96b4c7268c 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -833,7 +833,7 @@ class Darwin_i386_Manifest(ViewerManifest): signed=True # if no exception was raised, the codesign worked except ManifestError, err: if sign_attempts: - print >> sys.stderr, "codesign failed, waiting %d seconds before retrying" + print >> sys.stderr, "codesign failed, waiting %d seconds before retrying" % sign_retry_wait time.sleep(sign_retry_wait) sign_retry_wait*=2 else: -- cgit v1.2.3 From b4448cf2eb8f9e5c6305152190a8ef5957978710 Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Mon, 27 Jan 2014 11:21:34 +0200 Subject: MAINT-3657 FIXED Don't change state when other user declines call. --- indra/newview/llvoicechannel.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp index 665892a615..ac2a34ba1e 100755 --- a/indra/newview/llvoicechannel.cpp +++ b/indra/newview/llvoicechannel.cpp @@ -790,7 +790,6 @@ void LLVoiceChannelP2P::handleStatusChange(EStatusType type) { // other user declined call LLNotificationsUtil::add("P2PCallDeclined", mNotifyArgs); - setState(STATE_ERROR); } else { -- cgit v1.2.3 From dae8c4158aa028be026700d5c7d03d601c40c58a Mon Sep 17 00:00:00 2001 From: Monty Brandenberg Date: Mon, 27 Jan 2014 16:21:56 -0500 Subject: Trivial edit to stimulate a new build. --- indra/edit-me-to-trigger-new-build.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/indra/edit-me-to-trigger-new-build.txt b/indra/edit-me-to-trigger-new-build.txt index 774e8c0676..beeb570496 100755 --- a/indra/edit-me-to-trigger-new-build.txt +++ b/indra/edit-me-to-trigger-new-build.txt @@ -4,3 +4,4 @@ Wed Nov 7 00:25:19 UTC 2012 + -- cgit v1.2.3 From 636953b7d74f79c5ada56719f90245f686df4604 Mon Sep 17 00:00:00 2001 From: Monty Brandenberg Date: Wed, 29 Jan 2014 16:27:59 -0500 Subject: another trigger edit --- indra/edit-me-to-trigger-new-build.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/indra/edit-me-to-trigger-new-build.txt b/indra/edit-me-to-trigger-new-build.txt index beeb570496..774e8c0676 100755 --- a/indra/edit-me-to-trigger-new-build.txt +++ b/indra/edit-me-to-trigger-new-build.txt @@ -4,4 +4,3 @@ Wed Nov 7 00:25:19 UTC 2012 - -- cgit v1.2.3 From 7b1e1e4e35351936f2ab0305a91691f78f69519d Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Wed, 29 Jan 2014 18:25:03 -0500 Subject: FITMESH-6: correct bounds checking --- indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl | 2 +- indra/newview/lldrawpoolavatar.cpp | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl index 8eb5a977bc..57129c3bd1 100755 --- a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl @@ -34,7 +34,7 @@ mat4 getObjectSkinnedTransform() vec4 w = fract(weight4); vec4 index = floor(weight4); - index = min(index, vec4(63.0)); + index = min(index, vec4(51.0)); index = max(index, vec4( 0.0)); float scale = 1.0/(w.x+w.y+w.z+w.w); diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index 4578d3d0cd..906b7b2809 100755 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -698,7 +698,7 @@ void LLDrawPoolAvatar::beginDeferredImpostor() specular_channel = sVertexProgram->enableTexture(LLViewerShaderMgr::SPECULAR_MAP); normal_channel = sVertexProgram->enableTexture(LLViewerShaderMgr::DEFERRED_NORMAL); sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP); - sVertexProgram->bind(); + U1573sVertexProgram->bind(); sVertexProgram->setMinimumAlpha(0.01f); } @@ -1586,7 +1586,8 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLVOAvatar* avatar, LLFace* LLMatrix4a mp[JOINT_COUNT]; LLMatrix4* mat = (LLMatrix4*) mp; - for (U32 j = 0; j < skin->mJointNames.size(); ++j) + U32 count = llmin((U32) skin->mJointNames.size(), (U32) JOINT_COUNT); + for (U32 j = 0; j < count; ++j) { LLJoint* joint = avatar->getJoint(skin->mJointNames[j]); if (joint) -- cgit v1.2.3 From 80ee8a8ca3725265636f8052a2442a74a742338f Mon Sep 17 00:00:00 2001 From: Monty Brandenberg Date: Thu, 30 Jan 2014 13:17:17 -0500 Subject: Another build trigger --- indra/edit-me-to-trigger-new-build.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/indra/edit-me-to-trigger-new-build.txt b/indra/edit-me-to-trigger-new-build.txt index 774e8c0676..beeb570496 100755 --- a/indra/edit-me-to-trigger-new-build.txt +++ b/indra/edit-me-to-trigger-new-build.txt @@ -4,3 +4,4 @@ Wed Nov 7 00:25:19 UTC 2012 + -- cgit v1.2.3 From 9bb2bc6099c37a1d3efb4f1400a1a42750f85bac Mon Sep 17 00:00:00 2001 From: Oz Linden Date: Thu, 30 Jan 2014 14:18:58 -0500 Subject: fix odd editor artifact --- indra/newview/lldrawpoolavatar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index 906b7b2809..24f467f954 100755 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -698,7 +698,7 @@ void LLDrawPoolAvatar::beginDeferredImpostor() specular_channel = sVertexProgram->enableTexture(LLViewerShaderMgr::SPECULAR_MAP); normal_channel = sVertexProgram->enableTexture(LLViewerShaderMgr::DEFERRED_NORMAL); sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP); - U1573sVertexProgram->bind(); + sVertexProgram->bind(); sVertexProgram->setMinimumAlpha(0.01f); } -- cgit v1.2.3 From 1be85e1a0a2a2d607c74acb684412b6c3b307e6f Mon Sep 17 00:00:00 2001 From: Mnikolenko ProductEngine Date: Mon, 10 Feb 2014 12:09:32 +0200 Subject: MAINT-3710 FIXED List of members is removed from General tab. Title column is added to the list in Members tab. Roles tab is renamed to Roles & Members and Roles sub-tab is default now. --- indra/newview/llpanelgroupgeneral.cpp | 192 +-------------------- indra/newview/llpanelgroupgeneral.h | 13 -- indra/newview/llpanelgrouproles.cpp | 5 +- .../skins/default/xui/en/panel_group_general.xml | 28 +-- .../default/xui/en/panel_group_info_sidetray.xml | 2 +- .../skins/default/xui/en/panel_group_roles.xml | 8 +- 6 files changed, 14 insertions(+), 234 deletions(-) diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp index 0cd93b330a..68835ec5b8 100755 --- a/indra/newview/llpanelgroupgeneral.cpp +++ b/indra/newview/llpanelgroupgeneral.cpp @@ -63,14 +63,12 @@ const S32 DECLINE_TO_STATE = 0; LLPanelGroupGeneral::LLPanelGroupGeneral() : LLPanelGroupTab(), - mPendingMemberUpdate(FALSE), mChanged(FALSE), mFirstUse(TRUE), mGroupNameEditor(NULL), mFounderName(NULL), mInsignia(NULL), mEditCharter(NULL), - mListVisibleMembers(NULL), mCtrlShowInGroupList(NULL), mComboMature(NULL), mCtrlOpenEnrollment(NULL), @@ -79,18 +77,13 @@ LLPanelGroupGeneral::LLPanelGroupGeneral() mCtrlReceiveNotices(NULL), mCtrlListGroup(NULL), mActiveTitleLabel(NULL), - mComboActiveTitle(NULL), - mAvatarNameCacheConnection() + mComboActiveTitle(NULL) { } LLPanelGroupGeneral::~LLPanelGroupGeneral() { - if (mAvatarNameCacheConnection.connected()) - { - mAvatarNameCacheConnection.disconnect(); - } } BOOL LLPanelGroupGeneral::postBuild() @@ -105,17 +98,6 @@ BOOL LLPanelGroupGeneral::postBuild() mEditCharter->setFocusChangedCallback(boost::bind(onFocusEdit, _1, this)); } - - - mListVisibleMembers = getChild("visible_members", recurse); - if (mListVisibleMembers) - { - mListVisibleMembers->setDoubleClickCallback(openProfile, this); - mListVisibleMembers->setContextMenu(LLScrollListCtrl::MENU_AVATAR); - - mListVisibleMembers->setSortCallback(boost::bind(&LLPanelGroupGeneral::sortMembersList,this,_1,_2,_3)); - } - // Options mCtrlShowInGroupList = getChild("show_in_group_list", recurse); if (mCtrlShowInGroupList) @@ -290,21 +272,6 @@ void LLPanelGroupGeneral::onClickInfo(void *userdata) } -// static -void LLPanelGroupGeneral::openProfile(void* data) -{ - LLPanelGroupGeneral* self = (LLPanelGroupGeneral*)data; - - if (self && self->mListVisibleMembers) - { - LLScrollListItem* selected = self->mListVisibleMembers->getFirstSelected(); - if (selected) - { - LLAvatarActions::showProfile(selected->getUUID()); - } - } -} - bool LLPanelGroupGeneral::needsApply(std::string& mesg) { updateChanged(); @@ -336,11 +303,6 @@ void LLPanelGroupGeneral::activate() void LLPanelGroupGeneral::draw() { LLPanelGroupTab::draw(); - - if (mPendingMemberUpdate) - { - updateMembers(); - } } bool LLPanelGroupGeneral::apply(std::string& mesg) @@ -522,10 +484,6 @@ bool LLPanelGroupGeneral::createGroupCallback(const LLSD& notification, const LL return false; } -static F32 sSDTime = 0.0f; -static F32 sElementTime = 0.0f; -static F32 sAllTime = 0.0f; - // virtual void LLPanelGroupGeneral::update(LLGroupChange gc) { @@ -666,132 +624,10 @@ void LLPanelGroupGeneral::update(LLGroupChange gc) { mEditCharter->setText(gdatap->mCharter); } - - if (mListVisibleMembers) - { - mListVisibleMembers->deleteAllItems(); - - if (gdatap->isMemberDataComplete()) - { - mMemberProgress = gdatap->mMembers.begin(); - mPendingMemberUpdate = TRUE; - - sSDTime = 0.0f; - sElementTime = 0.0f; - sAllTime = 0.0f; - } - else - { - std::stringstream pending; - pending << "Retrieving member list (" << gdatap->mMembers.size() << "\\" << gdatap->mMemberCount << ")"; - - LLSD row; - row["columns"][0]["value"] = pending.str(); - row["columns"][0]["column"] = "name"; - - mListVisibleMembers->setEnabled(FALSE); - mListVisibleMembers->addElement(row); - } - } resetDirty(); } -void LLPanelGroupGeneral::updateMembers() -{ - mPendingMemberUpdate = FALSE; - - LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID); - - if (!mListVisibleMembers - || !gdatap - || !gdatap->isMemberDataComplete() - || gdatap->mMembers.empty()) - { - return; - } - - LLTimer update_time; - update_time.setTimerExpirySec(UPDATE_MEMBERS_SECONDS_PER_FRAME); - - LLAvatarName av_name; - - for( ; mMemberProgress != gdatap->mMembers.end() && !update_time.hasExpired(); - ++mMemberProgress) - { - LLGroupMemberData* member = mMemberProgress->second; - if (!member) - { - continue; - } - - if (LLAvatarNameCache::get(mMemberProgress->first, &av_name)) - { - addMember(mMemberProgress->second); - } - else - { - // If name is not cached, onNameCache() should be called when it is cached and add this member to list. - // *TODO : Use a callback per member, not for the panel group. - if (mAvatarNameCacheConnection.connected()) - { - mAvatarNameCacheConnection.disconnect(); - } - mAvatarNameCacheConnection = LLAvatarNameCache::get(mMemberProgress->first, boost::bind(&LLPanelGroupGeneral::onNameCache, this, gdatap->getMemberVersion(), member, _2)); - } - } - - if (mMemberProgress == gdatap->mMembers.end()) - { - lldebugs << " member list completed." << llendl; - mListVisibleMembers->setEnabled(TRUE); - } - else - { - mPendingMemberUpdate = TRUE; - mListVisibleMembers->setEnabled(FALSE); - } -} - -void LLPanelGroupGeneral::addMember(LLGroupMemberData* member) -{ - LLNameListCtrl::NameItem item_params; - item_params.value = member->getID(); - - LLScrollListCell::Params column; - item_params.columns.add().column("name").font.name("SANSSERIF_SMALL"); - - item_params.columns.add().column("title").value(member->getTitle()).font.name("SANSSERIF_SMALL"); - - item_params.columns.add().column("status").value(member->getOnlineStatus()).font.name("SANSSERIF_SMALL"); - - LLScrollListItem* member_row = mListVisibleMembers->addNameItemRow(item_params); - - if ( member->isOwner() ) - { - LLScrollListText* name_textp = dynamic_cast(member_row->getColumn(0)); - if (name_textp) - name_textp->setFontStyle(LLFontGL::BOLD); - } -} - -void LLPanelGroupGeneral::onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLAvatarName& av_name) -{ - mAvatarNameCacheConnection.disconnect(); - - LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID); - - if (!gdatap - || !gdatap->isMemberDataComplete() - || gdatap->getMemberVersion() != update_id) - { - // Stale data - return; - } - - addMember(member); -} - void LLPanelGroupGeneral::updateChanged() { // List all the controls we want to check for changes... @@ -867,17 +703,6 @@ void LLPanelGroupGeneral::reset() mEditCharter->setText(empty_str); mGroupNameEditor->setText(empty_str); } - - { - LLSD row; - row["columns"][0]["value"] = "no members yet"; - row["columns"][0]["column"] = "name"; - - mListVisibleMembers->deleteAllItems(); - mListVisibleMembers->setEnabled(FALSE); - mListVisibleMembers->addElement(row); - } - { mComboMature->setEnabled(true); @@ -964,18 +789,3 @@ void LLPanelGroupGeneral::setGroupID(const LLUUID& id) activate(); } -S32 LLPanelGroupGeneral::sortMembersList(S32 col_idx,const LLScrollListItem* i1,const LLScrollListItem* i2) -{ - const LLScrollListCell *cell1 = i1->getColumn(col_idx); - const LLScrollListCell *cell2 = i2->getColumn(col_idx); - - if(col_idx == 2) - { - if(LLStringUtil::compareDict(cell1->getValue().asString(),"Online") == 0 ) - return 1; - if(LLStringUtil::compareDict(cell2->getValue().asString(),"Online") == 0 ) - return -1; - } - - return LLStringUtil::compareDict(cell1->getValue().asString(), cell2->getValue().asString()); -} diff --git a/indra/newview/llpanelgroupgeneral.h b/indra/newview/llpanelgroupgeneral.h index b7f4a01139..11972bafa9 100755 --- a/indra/newview/llpanelgroupgeneral.h +++ b/indra/newview/llpanelgroupgeneral.h @@ -62,8 +62,6 @@ public: virtual void setGroupID(const LLUUID& id); virtual void setupCtrls (LLPanel* parent); - - void onNameCache(const LLUUID& update_id, LLGroupMemberData* member, const LLAvatarName& av_name); private: void reset(); @@ -75,18 +73,12 @@ private: static void onCommitEnrollment(LLUICtrl* ctrl, void* data); static void onClickInfo(void* userdata); static void onReceiveNotices(LLUICtrl* ctrl, void* data); - static void openProfile(void* data); - - S32 sortMembersList(S32,const LLScrollListItem*,const LLScrollListItem*); - void addMember(LLGroupMemberData* member); static bool joinDlgCB(const LLSD& notification, const LLSD& response); - void updateMembers(); void updateChanged(); bool confirmMatureApply(const LLSD& notification, const LLSD& response); - BOOL mPendingMemberUpdate; BOOL mChanged; BOOL mFirstUse; std::string mIncompleteMemberDataStr; @@ -97,8 +89,6 @@ private: LLTextureCtrl *mInsignia; LLTextEditor *mEditCharter; - LLNameListCtrl *mListVisibleMembers; - // Options (include any updates in updateChanged) LLCheckBoxCtrl *mCtrlShowInGroupList; LLCheckBoxCtrl *mCtrlOpenEnrollment; @@ -109,9 +99,6 @@ private: LLTextBox *mActiveTitleLabel; LLComboBox *mComboActiveTitle; LLComboBox *mComboMature; - - LLGroupMgrGroupData::member_list_t::iterator mMemberProgress; - boost::signals2::connection mAvatarNameCacheConnection; }; #endif diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp index fdcd1f5ebb..b89e7b8b73 100755 --- a/indra/newview/llpanelgrouproles.cpp +++ b/indra/newview/llpanelgrouproles.cpp @@ -1636,6 +1636,9 @@ void LLPanelGroupMembersSubTab::addMemberToList(LLGroupMemberData* data) item_params.columns.add().column("online").value(data->getOnlineStatus()) .font.name("SANSSERIF_SMALL").style("NORMAL"); + + item_params.columns.add().column("title").value(data->getTitle()).font.name("SANSSERIF_SMALL").style("NORMAL");; + mMembersList->addNameItemRow(item_params); mHasMatch = TRUE; @@ -2658,7 +2661,7 @@ void LLPanelGroupRoles::setGroupID(const LLUUID& id) button->setEnabled(gAgent.hasPowerInGroup(mGroupID, GP_MEMBER_INVITE)); if(mSubTabContainer) - mSubTabContainer->selectTab(0); + mSubTabContainer->selectTab(1); activate(); } diff --git a/indra/newview/skins/default/xui/en/panel_group_general.xml b/indra/newview/skins/default/xui/en/panel_group_general.xml index 38b680ba86..26f54bacbc 100755 --- a/indra/newview/skins/default/xui/en/panel_group_general.xml +++ b/indra/newview/skins/default/xui/en/panel_group_general.xml @@ -1,7 +1,7 @@ @@ -101,31 +101,7 @@ Hover your mouse over the options for more help. text_readonly_color="White" word_wrap="true"> Group Charter - - - - - - + + relative_width="0.2" /> + relative_width="0.18" /> +