diff options
author | Gilbert Gonzales <gilbert@lindenlab.com> | 2012-09-14 18:48:46 -0700 |
---|---|---|
committer | Gilbert Gonzales <gilbert@lindenlab.com> | 2012-09-14 18:48:46 -0700 |
commit | 0f86aa86f1780f70f125254d2108a33fcd9a7514 (patch) | |
tree | 3e31eeee14b6bc03401ced16d6c12606ebe38136 | |
parent | 399ba09c08d8ccaf9b34daa8b743f837639b2f35 (diff) | |
parent | 72f6bebe59f5f900af02a4d234a4091a3e034529 (diff) |
merging in latest changes
-rw-r--r-- | indra/llui/llfloaterreg.cpp | 2 | ||||
-rw-r--r-- | indra/llui/llfloaterreg.h | 24 | ||||
-rwxr-xr-x | indra/newview/llconversationview.cpp | 3 | ||||
-rw-r--r-- | indra/newview/llimconversation.cpp | 13 | ||||
-rw-r--r-- | indra/newview/llimconversation.h | 3 | ||||
-rwxr-xr-x | indra/newview/llimfloatercontainer.cpp | 26 | ||||
-rw-r--r-- | indra/newview/llimfloatercontainer.h | 4 | ||||
-rw-r--r-- | indra/newview/llnearbychat.cpp | 4 | ||||
-rw-r--r-- | indra/newview/skins/default/xui/en/floater_conversation_log.xml | 2 |
9 files changed, 58 insertions, 23 deletions
diff --git a/indra/llui/llfloaterreg.cpp b/indra/llui/llfloaterreg.cpp index 9115eb7174..920525448c 100644 --- a/indra/llui/llfloaterreg.cpp +++ b/indra/llui/llfloaterreg.cpp @@ -318,7 +318,7 @@ void LLFloaterReg::showInitialVisibleInstances() BOOL isvis = LLFloater::getControlGroup()->getBOOL(controlname); if (isvis) { - showInstance(name, LLSD()); // keyed floaters shouldn't set save_vis to true + showInstance(name, LLSD(LLUUID())); // keyed floaters shouldn't set save_vis to true } } } diff --git a/indra/llui/llfloaterreg.h b/indra/llui/llfloaterreg.h index a1e1f8a988..7924b2a7b8 100644 --- a/indra/llui/llfloaterreg.h +++ b/indra/llui/llfloaterreg.h @@ -90,23 +90,23 @@ public: static LLFloater* getLastFloaterCascading(); // Find / get (create) / remove / destroy - static LLFloater* findInstance(const std::string& name, const LLSD& key = LLSD()); - static LLFloater* getInstance(const std::string& name, const LLSD& key = LLSD()); - static LLFloater* removeInstance(const std::string& name, const LLSD& key = LLSD()); - static bool destroyInstance(const std::string& name, const LLSD& key = LLSD()); + static LLFloater* findInstance(const std::string& name, const LLSD& key = LLSD(LLUUID())); + static LLFloater* getInstance(const std::string& name, const LLSD& key = LLSD(LLUUID())); + static LLFloater* removeInstance(const std::string& name, const LLSD& key = LLSD(LLUUID())); + static bool destroyInstance(const std::string& name, const LLSD& key = LLSD(LLUUID())); // Iterators static const_instance_list_t& getFloaterList(const std::string& name); // Visibility Management // return NULL if instance not found or can't create instance (no builder) - static LLFloater* showInstance(const std::string& name, const LLSD& key = LLSD(), BOOL focus = FALSE); + static LLFloater* showInstance(const std::string& name, const LLSD& key = LLSD(LLUUID()), BOOL focus = FALSE); // Close a floater (may destroy or set invisible) // return false if can't find instance - static bool hideInstance(const std::string& name, const LLSD& key = LLSD()); + static bool hideInstance(const std::string& name, const LLSD& key = LLSD(LLUUID())); // return true if instance is visible: - static bool toggleInstance(const std::string& name, const LLSD& key = LLSD()); - static bool instanceVisible(const std::string& name, const LLSD& key = LLSD()); + static bool toggleInstance(const std::string& name, const LLSD& key = LLSD(LLUUID())); + static bool instanceVisible(const std::string& name, const LLSD& key = LLSD(LLUUID())); static void showInitialVisibleInstances(); static void hideVisibleInstances(const std::set<std::string>& exceptions = std::set<std::string>()); @@ -126,23 +126,23 @@ public: static void registerControlVariables(); // Callback wrappers - static void toggleInstanceOrBringToFront(const LLSD& sdname, const LLSD& key = LLSD()); + static void toggleInstanceOrBringToFront(const LLSD& sdname, const LLSD& key = LLSD(LLUUID())); // Typed find / get / show template <class T> - static T* findTypedInstance(const std::string& name, const LLSD& key = LLSD()) + static T* findTypedInstance(const std::string& name, const LLSD& key = LLSD(LLUUID())) { return dynamic_cast<T*>(findInstance(name, key)); } template <class T> - static T* getTypedInstance(const std::string& name, const LLSD& key = LLSD()) + static T* getTypedInstance(const std::string& name, const LLSD& key = LLSD(LLUUID())) { return dynamic_cast<T*>(getInstance(name, key)); } template <class T> - static T* showTypedInstance(const std::string& name, const LLSD& key = LLSD(), BOOL focus = FALSE) + static T* showTypedInstance(const std::string& name, const LLSD& key = LLSD(LLUUID()), BOOL focus = FALSE) { return dynamic_cast<T*>(showInstance(name, key, focus)); } diff --git a/indra/newview/llconversationview.cpp b/indra/newview/llconversationview.cpp index 208a89cc8d..d5d4fc13da 100755 --- a/indra/newview/llconversationview.cpp +++ b/indra/newview/llconversationview.cpp @@ -239,7 +239,6 @@ S32 LLConversationViewSession::arrange(S32* width, S32* height) void LLConversationViewSession::selectItem() { - LLFolderViewItem::selectItem(); LLConversationItem* item = dynamic_cast<LLConversationItem*>(mViewModelItem); LLFloater* session_floater = LLIMConversation::getConversation(item->getUUID()); @@ -255,6 +254,8 @@ void LLConversationViewSession::selectItem() // Set the focus on the selected floater session_floater->setFocus(TRUE); + + LLFolderViewItem::selectItem(); } void LLConversationViewSession::setVisibleIfDetached(BOOL visible) diff --git a/indra/newview/llimconversation.cpp b/indra/newview/llimconversation.cpp index 216c5bbd70..a2efe63546 100644 --- a/indra/newview/llimconversation.cpp +++ b/indra/newview/llimconversation.cpp @@ -215,11 +215,21 @@ void LLIMConversation::onFocusReceived() } LLTransientDockableFloater::onFocusReceived(); + + mHasFocus = mHaveFocus; + mHaveFocus = true; + + if (! mHasFocus) + { + LLIMFloaterContainer* container = LLIMFloaterContainer::getInstance(); + container->setConvItemSelect(mSessionID); + } } void LLIMConversation::onFocusLost() { setBackgroundOpaque(false); + mHaveFocus = false; LLTransientDockableFloater::onFocusLost(); } @@ -371,6 +381,9 @@ void LLIMConversation::hideAllStandardButtons() void LLIMConversation::updateHeaderAndToolbar() { + // prevent start conversation before its container + LLIMFloaterContainer::getInstance(); + bool is_torn_off = !getHost(); if (!is_torn_off) { diff --git a/indra/newview/llimconversation.h b/indra/newview/llimconversation.h index 41a76c206e..e09ba79a6a 100644 --- a/indra/newview/llimconversation.h +++ b/indra/newview/llimconversation.h @@ -139,6 +139,9 @@ private: void reshapeChatHistory(); LLTimer* mRefreshTimer; ///< Defines the rate at which refresh() is called. + + bool mHasFocus; + bool mHaveFocus; }; diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp index e039702683..5aaf176aca 100755 --- a/indra/newview/llimfloatercontainer.cpp +++ b/indra/newview/llimfloatercontainer.cpp @@ -183,9 +183,9 @@ void LLIMFloaterContainer::onOpen(const LLSD& key) } // virtual -void LLIMFloaterContainer::addFloater(LLFloater* floaterp, - BOOL select_added_floater, - LLTabContainer::eInsertionPoint insertion_point) +void LLIMFloaterContainer::addFloater(LLFloater* floaterp, + BOOL select_added_floater, + LLTabContainer::eInsertionPoint insertion_point) { if(!floaterp) return; @@ -427,7 +427,10 @@ void LLIMFloaterContainer::setVisible(BOOL visible) for (;widget_it != mConversationsWidgets.end(); ++widget_it) { LLConversationViewSession* widget = dynamic_cast<LLConversationViewSession*>(widget_it->second); - widget->setVisibleIfDetached(visible); + if (widget) + { + widget->setVisibleIfDetached(visible); + } } // Now, do the normal multifloater show/hide @@ -608,6 +611,16 @@ void LLIMFloaterContainer::repositioningWidgets() } } +void LLIMFloaterContainer::setConvItemSelect(LLUUID& session_id) +{ + LLFolderViewItem* widget = mConversationsWidgets[session_id]; + if (widget && mSelectedSession != session_id) + { + mSelectedSession = session_id; + (widget->getRoot())->setSelection(widget, FALSE, FALSE); + } +} + void LLIMFloaterContainer::addConversationListItem(const LLUUID& uuid) { bool is_nearby_chat = uuid.isNull(); @@ -675,7 +688,10 @@ void LLIMFloaterContainer::removeConversationListItem(const LLUUID& uuid, bool c if (widget_it != mConversationsWidgets.end()) { LLFolderViewItem* widget = widget_it->second; - widget->destroyView(); + if (widget) + { + widget->destroyView(); + } } // Suppress the conversation items and widgets from their respective maps diff --git a/indra/newview/llimfloatercontainer.h b/indra/newview/llimfloatercontainer.h index 324adfcc11..f6048bed37 100644 --- a/indra/newview/llimfloatercontainer.h +++ b/indra/newview/llimfloatercontainer.h @@ -62,7 +62,7 @@ public: /*virtual*/ void addFloater(LLFloater* floaterp, BOOL select_added_floater, LLTabContainer::eInsertionPoint insertion_point = LLTabContainer::END); - + void setConvItemSelect(LLUUID& session_id); /*virtual*/ void tabClose(); static LLFloater* getCurrentVoiceFloater(); @@ -114,6 +114,8 @@ private: bool mInitialized; + LLUUID mSelectedSession; + // Conversation list implementation public: void removeConversationListItem(const LLUUID& uuid, bool change_focus = true); diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp index ddd271e23f..a803b35aa8 100644 --- a/indra/newview/llnearbychat.cpp +++ b/indra/newview/llnearbychat.cpp @@ -108,7 +108,7 @@ static LLChatTypeTrigger sChatTypeTriggers[] = { LLNearbyChat::LLNearbyChat(const LLSD& llsd) -: LLIMConversation(LLSD()), +: LLIMConversation(llsd.asUUID()), //mOutputMonitor(NULL), mSpeakerMgr(NULL), mExpandedHeight(COLLAPSED_HEIGHT + EXPANDED_HEIGHT) @@ -116,7 +116,7 @@ LLNearbyChat::LLNearbyChat(const LLSD& llsd) mIsP2PChat = false; mIsNearbyChat = true; setIsChrome(TRUE); - mKey = LLSD(); + mKey = LLSD(LLUUID()); mSpeakerMgr = LLLocalSpeakerMgr::getInstance(); mSessionID = LLUUID(); setName("nearby_chat"); diff --git a/indra/newview/skins/default/xui/en/floater_conversation_log.xml b/indra/newview/skins/default/xui/en/floater_conversation_log.xml index df78bbccec..12d17e6b37 100644 --- a/indra/newview/skins/default/xui/en/floater_conversation_log.xml +++ b/indra/newview/skins/default/xui/en/floater_conversation_log.xml @@ -15,7 +15,7 @@ width="450"> <string name="logging_calls_disabled"> - Conversations are not being logged. To log conversations in the future, select "Save IM logs in my computer" under Preferences > Privacy. + Conversations are not being logged. To log conversations in the future, select "Save IM logs on my computer" under Preferences > Privacy. </string> <panel |