diff options
Diffstat (limited to 'indra')
-rw-r--r-- | indra/linux_crash_logger/CMakeLists.txt | 11 | ||||
-rw-r--r-- | indra/linux_updater/CMakeLists.txt | 11 | ||||
-rw-r--r-- | indra/llui/llfloater.cpp | 39 | ||||
-rw-r--r-- | indra/llui/llfloater.h | 1 | ||||
-rw-r--r-- | indra/newview/CMakeLists.txt | 13 | ||||
-rw-r--r-- | indra/newview/llcallfloater.h | 4 | ||||
-rw-r--r-- | indra/newview/llchathistory.cpp | 28 | ||||
-rw-r--r-- | indra/newview/llimfloatercontainer.cpp | 7 | ||||
-rw-r--r-- | indra/newview/lllogchat.cpp | 28 | ||||
-rw-r--r-- | indra/newview/llnearbychathandler.cpp | 2 | ||||
-rw-r--r-- | indra/newview/llnotificationhandlerutil.cpp | 1 | ||||
-rw-r--r-- | indra/newview/llscreenchannel.cpp | 25 | ||||
-rw-r--r-- | indra/newview/llsidetray.cpp | 5 | ||||
-rw-r--r-- | indra/newview/lltoast.cpp | 159 | ||||
-rw-r--r-- | indra/newview/lltoast.h | 26 | ||||
-rwxr-xr-x | indra/newview/viewer_manifest.py | 29 |
16 files changed, 257 insertions, 132 deletions
diff --git a/indra/linux_crash_logger/CMakeLists.txt b/indra/linux_crash_logger/CMakeLists.txt index 4b19e28066..ab62a0d0af 100644 --- a/indra/linux_crash_logger/CMakeLists.txt +++ b/indra/linux_crash_logger/CMakeLists.txt @@ -54,12 +54,5 @@ target_link_libraries(linux-crash-logger ${DB_LIBRARIES} ) -add_custom_command( - OUTPUT linux-crash-logger-stripped - COMMAND strip - ARGS --strip-debug -o linux-crash-logger-stripped linux-crash-logger - DEPENDS linux-crash-logger - ) - -add_custom_target(linux-crash-logger-strip-target ALL - DEPENDS linux-crash-logger-stripped) +add_custom_target(linux-crash-logger-target ALL + DEPENDS linux-crash-logger) diff --git a/indra/linux_updater/CMakeLists.txt b/indra/linux_updater/CMakeLists.txt index 9fe32ecb46..00a78b2a8f 100644 --- a/indra/linux_updater/CMakeLists.txt +++ b/indra/linux_updater/CMakeLists.txt @@ -47,12 +47,5 @@ target_link_libraries(linux-updater ${LLCOMMON_LIBRARIES} ) -add_custom_command( - OUTPUT linux-updater-stripped - COMMAND strip - ARGS --strip-debug -o linux-updater-stripped linux-updater - DEPENDS linux-updater - ) - -add_custom_target(linux-updater-strip-target ALL - DEPENDS linux-updater-stripped) +add_custom_target(linux-updater-target ALL + DEPENDS linux-updater) diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index a55915af35..0199fe3f57 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -1565,25 +1565,13 @@ void LLFloater::draw() // draw background if( isBackgroundVisible() ) { + drawShadow(this); + S32 left = LLPANEL_BORDER_WIDTH; S32 top = getRect().getHeight() - LLPANEL_BORDER_WIDTH; S32 right = getRect().getWidth() - LLPANEL_BORDER_WIDTH; S32 bottom = LLPANEL_BORDER_WIDTH; - static LLUICachedControl<S32> shadow_offset_S32 ("DropShadowFloater", 0); - static LLUIColor shadow_color_cached = LLUIColorTable::instance().getColor("ColorDropShadow"); - LLColor4 shadow_color = shadow_color_cached; - F32 shadow_offset = (F32)shadow_offset_S32; - - if (!isBackgroundOpaque()) - { - shadow_offset *= 0.2f; - shadow_color.mV[VALPHA] *= 0.5f; - } - gl_drop_shadow(left, top, right, bottom, - shadow_color % alpha, - llround(shadow_offset)); - LLUIImage* image = NULL; LLColor4 color; if (isBackgroundOpaque()) @@ -1666,6 +1654,29 @@ void LLFloater::draw() } } +void LLFloater::drawShadow(LLPanel* panel) +{ + F32 alpha = panel->getDrawContext().mAlpha; + S32 left = LLPANEL_BORDER_WIDTH; + S32 top = panel->getRect().getHeight() - LLPANEL_BORDER_WIDTH; + S32 right = panel->getRect().getWidth() - LLPANEL_BORDER_WIDTH; + S32 bottom = LLPANEL_BORDER_WIDTH; + + static LLUICachedControl<S32> shadow_offset_S32 ("DropShadowFloater", 0); + static LLUIColor shadow_color_cached = LLUIColorTable::instance().getColor("ColorDropShadow"); + LLColor4 shadow_color = shadow_color_cached; + F32 shadow_offset = (F32)shadow_offset_S32; + + if (!panel->isBackgroundOpaque()) + { + shadow_offset *= 0.2f; + shadow_color.mV[VALPHA] *= 0.5f; + } + gl_drop_shadow(left, top, right, bottom, + shadow_color % alpha, + llround(shadow_offset)); +} + void LLFloater::setCanMinimize(BOOL can_minimize) { // if removing minimize/restore button programmatically, diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index 2166d8db8a..19e8288807 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -222,6 +222,7 @@ public: virtual BOOL handleScrollWheel(S32 x, S32 y, S32 mask); virtual void draw(); + virtual void drawShadow(LLPanel* panel); virtual void onOpen(const LLSD& key) {} virtual void onClose(bool app_quitting) {} diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index ffb8e6bc6f..ea1ec80ae7 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1624,13 +1624,6 @@ set(ARTWORK_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE PATH if (LINUX) - add_custom_command( - OUTPUT secondlife-stripped - COMMAND strip - ARGS --strip-debug -o secondlife-stripped ${VIEWER_BINARY_NAME} - DEPENDS ${VIEWER_BINARY_NAME} - ) - set(product SecondLife-${ARCH}-${viewer_VERSION}) add_custom_command( @@ -1650,15 +1643,15 @@ if (LINUX) --login_channel=${VIEWER_LOGIN_CHANNEL} --source=${CMAKE_CURRENT_SOURCE_DIR} --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched - DEPENDS secondlife-stripped ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py + DEPENDS ${VIEWER_BINARY_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py ) add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_gstreamer010 media_plugin_webkit) if (NOT INSTALL) add_custom_target(package ALL DEPENDS ${product}.tar.bz2) - add_dependencies(package linux-crash-logger-strip-target) - add_dependencies(package linux-updater-strip-target) + add_dependencies(package linux-crash-logger-target) + add_dependencies(package linux-updater-target) check_message_template(package) endif (NOT INSTALL) endif (LINUX) diff --git a/indra/newview/llcallfloater.h b/indra/newview/llcallfloater.h index dac4390fa7..0a8ea7de39 100644 --- a/indra/newview/llcallfloater.h +++ b/indra/newview/llcallfloater.h @@ -260,6 +260,10 @@ private: * @see sOnCurrentChannelChanged() */ static LLVoiceChannel* sCurrentVoiceCanel; + + /* virtual */ + LLTransientFloaterMgr::ETransientGroup getGroup() { return LLTransientFloaterMgr::IM; } + boost::signals2::connection mVoiceChannelStateChangeConnection; }; diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index 81cc52528c..cf5ac6b2e6 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -122,7 +122,7 @@ public: BOOL handleToolTip(S32 x, S32 y, MASK mask) { LLTextBase* name = getChild<LLTextBase>("user_name"); - if (name && name->parentPointInView(x, y) && mAvatarID.notNull() && SYSTEM_FROM != mFrom) + if (name && name->parentPointInView(x, y) && mAvatarID.notNull() && mFrom.size() && SYSTEM_FROM != mFrom) { // Spawn at right side of the name textbox. @@ -179,12 +179,7 @@ public: } else if (level == "add") { - std::string name; - name.assign(getFirstName()); - name.append(" "); - name.append(getLastName()); - - LLAvatarActions::requestFriendshipDialog(getAvatarId(), name); + LLAvatarActions::requestFriendshipDialog(getAvatarId(), mFrom); } else if (level == "remove") { @@ -253,8 +248,6 @@ public: } const LLUUID& getAvatarId () const { return mAvatarID;} - const std::string& getFirstName() const { return mFirstName; } - const std::string& getLastName () const { return mLastName; } void setup(const LLChat& chat,const LLStyle::Params& style_params) { @@ -264,7 +257,7 @@ public: gCacheName->get(mAvatarID, FALSE, boost::bind(&LLChatHistoryHeader::nameUpdatedCallback, this, _1, _2, _3, _4)); //*TODO overly defensive thing, source type should be maintained out there - if(chat.mFromID.isNull() || chat.mFromName == SYSTEM_FROM) + if((chat.mFromID.isNull() && chat.mFromName.empty()) || chat.mFromName == SYSTEM_FROM) { mSourceType = CHAT_SOURCE_SYSTEM; } @@ -275,9 +268,11 @@ public: userName->setColor(style_params.color()); userName->setValue(chat.mFromName); + mFrom = chat.mFromName; if (chat.mFromName.empty() || CHAT_SOURCE_SYSTEM == mSourceType) { - userName->setValue(LLTrans::getString("SECOND_LIFE")); + mFrom = LLTrans::getString("SECOND_LIFE"); + userName->setValue(mFrom); } @@ -337,8 +332,7 @@ public: { if (id != mAvatarID) return; - mFirstName = first; - mLastName = last; + mFrom = first + " " + last; } protected: static const S32 PADDING = 20; @@ -423,8 +417,6 @@ protected: LLUUID mAvatarID; EChatSourceType mSourceType; - std::string mFirstName; - std::string mLastName; std::string mFrom; LLUUID mSessionID; @@ -796,6 +788,12 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL } } + if (irc_me && !use_plain_text_chat_history) + { + message = chat.mFromName + message; + } + + mEditor->appendText(message, FALSE, style_params); } mEditor->blockUndo(); diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp index 2f248f3596..db7998fe6e 100644 --- a/indra/newview/llimfloatercontainer.cpp +++ b/indra/newview/llimfloatercontainer.cpp @@ -39,6 +39,7 @@ #include "llavatariconctrl.h" #include "llgroupiconctrl.h" #include "llagent.h" +#include "lltransientfloatermgr.h" // // LLIMFloaterContainer @@ -47,9 +48,13 @@ LLIMFloaterContainer::LLIMFloaterContainer(const LLSD& seed) : LLMultiFloater(seed) { mAutoResize = FALSE; + LLTransientFloaterMgr::getInstance()->addControlView(LLTransientFloaterMgr::IM, this); } -LLIMFloaterContainer::~LLIMFloaterContainer(){} +LLIMFloaterContainer::~LLIMFloaterContainer() +{ + LLTransientFloaterMgr::getInstance()->removeControlView(LLTransientFloaterMgr::IM, this); +} BOOL LLIMFloaterContainer::postBuild() { diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp index 96ce01c05f..f13445fa5d 100644 --- a/indra/newview/lllogchat.cpp +++ b/indra/newview/lllogchat.cpp @@ -69,6 +69,8 @@ const static std::string MULTI_LINE_PREFIX(" "); * Katar Ivercourt is Offline * [3:00] Katar Ivercourt is Offline * [2009/11/20 3:01] Corba ProductEngine is Offline + * + * Note: "You" was used as an avatar names in viewers of previous versions */ const static boost::regex TIMESTAMP_AND_STUFF("^(\\[\\d{4}/\\d{1,2}/\\d{1,2}\\s+\\d{1,2}:\\d{2}\\]\\s+|\\[\\d{1,2}:\\d{2}\\]\\s+)?(.*)$"); @@ -78,6 +80,9 @@ const static boost::regex TIMESTAMP_AND_STUFF("^(\\[\\d{4}/\\d{1,2}/\\d{1,2}\\s+ */ const static boost::regex NAME_AND_TEXT("(You:|Second Life:|[^\\s:]+\\s*[:]{1}|\\S+\\s+[^\\s:]+[:]{1})?(\\s*)(.*)"); +//is used to parse complex object names like "Xstreet SL Terminal v2.2.5 st" +const static std::string NAME_TEXT_DIVIDER(": "); + const static int IDX_TIMESTAMP = 1; const static int IDX_STUFF = 2; const static int IDX_NAME = 1; @@ -160,10 +165,19 @@ void LLLogChat::saveHistory(const std::string& filename, if (gSavedPerAccountSettings.getBOOL("LogTimestamp")) item["time"] = LLLogChat::timestamp(gSavedPerAccountSettings.getBOOL("LogTimestampDate")); - item["from"] = from; item["from_id"] = from_id; item["message"] = line; + //adding "Second Life:" for all system messages to make chat log history parsing more reliable + if (from.empty() && from_id.isNull()) + { + item["from"] = SYSTEM_FROM; + } + else + { + item["from"] = from; + } + file << LLChatLogFormatter(item) << std::endl; file.close(); @@ -398,6 +412,18 @@ bool LLChatLogParser::parse(std::string& raw, LLSD& im) im[IM_FROM_ID] = LLUUID::null; } + //possibly a case of complex object names consisting of 3+ words + if (!has_name) + { + U32 divider_pos = stuff.find(NAME_TEXT_DIVIDER); + if (divider_pos != std::string::npos && divider_pos < (stuff.length() - NAME_TEXT_DIVIDER.length())) + { + im[IM_FROM] = stuff.substr(0, divider_pos); + im[IM_TEXT] = stuff.substr(divider_pos + NAME_TEXT_DIVIDER.length()); + return true; + } + } + if (!has_name) { //text is mandatory diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp index 29e3c66684..3c390c0281 100644 --- a/indra/newview/llnearbychathandler.cpp +++ b/indra/newview/llnearbychathandler.cpp @@ -282,7 +282,7 @@ void LLNearbyChatScreenChannel::showToastsBottom() gFloaterView->sendChildToBack(toast); } - bottom = toast->getRect().mTop; + bottom = toast->getRect().mTop - toast->getTopPad(); } } } diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp index b8e0892b02..35569cffac 100644 --- a/indra/newview/llnotificationhandlerutil.cpp +++ b/indra/newview/llnotificationhandlerutil.cpp @@ -220,6 +220,7 @@ void LLHandlerUtil::logToNearbyChat(const LLNotificationPtr& notification, EChat { LLChat chat_msg(notification->getMessage()); chat_msg.mSourceType = type; + chat_msg.mFromName = SYSTEM_FROM; nearby_chat->addMessage(chat_msg); } } diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp index 7c2e7e3319..c75d90be6f 100644 --- a/indra/newview/llscreenchannel.cpp +++ b/indra/newview/llscreenchannel.cpp @@ -79,17 +79,12 @@ LLScreenChannelBase::~LLScreenChannelBase() bool LLScreenChannelBase::isHovering() { - bool res = mHoveredToast != NULL; - if (!res) + if (!mHoveredToast) { - return res; + return false; } - S32 x, y; - mHoveredToast->screenPointToLocal(gViewerWindow->getCurrentMouseX(), - gViewerWindow->getCurrentMouseY(), &x, &y); - res = mHoveredToast->pointInView(x, y) == TRUE; - return res; + return mHoveredToast->isHovered(); } void LLScreenChannelBase::updatePositionAndSize(LLRect old_world_rect, LLRect new_world_rect) @@ -479,7 +474,8 @@ void LLScreenChannel::showToastsBottom() { if(it != mToastList.rbegin()) { - bottom = (*(it-1)).toast->getRect().mTop; + LLToast* toast = (*(it-1)).toast; + bottom = toast->getRect().mTop - toast->getTopPad(); toast_margin = gSavedSettings.getS32("ToastGap"); } @@ -777,23 +773,16 @@ void LLScreenChannel::onToastHover(LLToast* toast, bool mouse_enter) { // because of LLViewerWindow::updateUI() that NOT ALWAYS calls onMouseEnter BEFORE onMouseLeave // we must check hovering directly to prevent incorrect setting for hovering in a channel - S32 x,y; if (mouse_enter) { - toast->screenPointToLocal(gViewerWindow->getCurrentMouseX(), - gViewerWindow->getCurrentMouseY(), &x, &y); - bool hover = toast->pointInView(x, y) == TRUE; - if (hover) + if (toast->isHovered()) { mHoveredToast = toast; } } else if (mHoveredToast != NULL) { - mHoveredToast->screenPointToLocal(gViewerWindow->getCurrentMouseX(), - gViewerWindow->getCurrentMouseY(), &x, &y); - bool hover = mHoveredToast->pointInView(x, y) == TRUE; - if (!hover) + if (!mHoveredToast->isHovered()) { mHoveredToast = NULL; } diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp index 50c47e293e..fba1503b4a 100644 --- a/indra/newview/llsidetray.cpp +++ b/indra/newview/llsidetray.cpp @@ -248,6 +248,11 @@ LLSideTray::LLSideTray(Params& params) // panel_name should be specified via "parameter" attribute. commit.add("SideTray.ShowPanel", boost::bind(&LLSideTray::showPanel, this, _2, LLUUID::null)); LLTransientFloaterMgr::getInstance()->addControlView(this); + LLView* side_bar_tabs = gViewerWindow->getRootView()->getChildView("side_bar_tabs"); + if (side_bar_tabs != NULL) + { + LLTransientFloaterMgr::getInstance()->addControlView(side_bar_tabs); + } LLPanel::Params p; p.name = "buttons_panel"; diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp index 110d158e2d..60a89c02e4 100644 --- a/indra/newview/lltoast.cpp +++ b/indra/newview/lltoast.cpp @@ -68,12 +68,17 @@ LLToast::LLToast(const LLToast::Params& p) mNotification(p.notification), mIsHidden(false), mHideBtnPressed(false), - mIsTip(p.is_tip) + mIsTip(p.is_tip), + mWrapperPanel(NULL) { LLUICtrlFactory::getInstance()->buildFloater(this, "panel_toast.xml", NULL); setCanDrag(FALSE); + mWrapperPanel = getChild<LLPanel>("wrapper_panel"); + mWrapperPanel->setMouseEnterCallback(boost::bind(&LLToast::onToastMouseEnter, this)); + mWrapperPanel->setMouseLeaveCallback(boost::bind(&LLToast::onToastMouseLeave, this)); + if(mPanel) { insertPanel(mPanel); @@ -83,6 +88,8 @@ LLToast::LLToast(const LLToast::Params& p) { mHideBtn = getChild<LLButton>("hide_btn"); mHideBtn->setClickedCallback(boost::bind(&LLToast::hide,this)); + mHideBtn->setMouseEnterCallback(boost::bind(&LLToast::onToastMouseEnter, this)); + mHideBtn->setMouseLeaveCallback(boost::bind(&LLToast::onToastMouseLeave, this)); } // init callbacks if present @@ -174,6 +181,42 @@ void LLToast::hide() mOnFadeSignal(this); } +void LLToast::onFocusLost() +{ + if(mWrapperPanel && !isBackgroundVisible()) + { + // Lets make wrapper panel behave like a floater + setBackgroundOpaque(FALSE); + } +} + +void LLToast::onFocusReceived() +{ + if(mWrapperPanel && !isBackgroundVisible()) + { + // Lets make wrapper panel behave like a floater + setBackgroundOpaque(TRUE); + } +} + +S32 LLToast::getTopPad() +{ + if(mWrapperPanel) + { + return getRect().getHeight() - mWrapperPanel->getRect().getHeight(); + } + return 0; +} + +S32 LLToast::getRightPad() +{ + if(mWrapperPanel) + { + return getRect().getWidth() - mWrapperPanel->getRect().getWidth(); + } + return 0; +} + //-------------------------------------------------------------------------- void LLToast::setCanFade(bool can_fade) { @@ -199,22 +242,21 @@ void LLToast::reshapeToPanel() if(!panel) return; - LLRect panel_rect; + LLRect panel_rect = panel->getRect(); - panel_rect = panel->getRect(); - reshape(panel_rect.getWidth(), panel_rect.getHeight()); panel_rect.setLeftTopAndSize(0, panel_rect.getHeight(), panel_rect.getWidth(), panel_rect.getHeight()); - panel->setRect(panel_rect); + panel->setShape(panel_rect); LLRect toast_rect = getRect(); - toast_rect.setLeftTopAndSize(toast_rect.mLeft,toast_rect.mTop,panel_rect.getWidth(), panel_rect.getHeight()); - setRect(toast_rect); + toast_rect.setLeftTopAndSize(toast_rect.mLeft, toast_rect.mTop, + panel_rect.getWidth() + getRightPad(), panel_rect.getHeight() + getTopPad()); + setShape(toast_rect); } void LLToast::insertPanel(LLPanel* panel) { - addChild(panel); + mWrapperPanel->addChild(panel); reshapeToPanel(); } @@ -227,6 +269,19 @@ void LLToast::draw() } LLFloater::draw(); + + if(!isBackgroundVisible()) + { + // Floater background is invisible, lets make wrapper panel look like a + // floater - draw shadow. + drawShadow(mWrapperPanel); + + // Shadow will probably overlap close button, lets redraw the button + if(mHideBtn) + { + drawChild(mHideBtn); + } + } } //-------------------------------------------------------------------------- @@ -261,43 +316,78 @@ void LLToast::setVisible(BOOL show) } } -//-------------------------------------------------------------------------- -void LLToast::onMouseEnter(S32 x, S32 y, MASK mask) +void LLToast::onToastMouseEnter() { - mOnToastHoverSignal(this, MOUSE_ENTER); + LLRect panel_rc = mWrapperPanel->calcScreenRect(); + LLRect button_rc; + if(mHideBtn) + { + button_rc = mHideBtn->calcScreenRect(); + } - setBackgroundOpaque(TRUE); + S32 x, y; + LLUI::getMousePositionScreen(&x, &y); - //toasts fading is management by Screen Channel - - sendChildToFront(mHideBtn); - if(mHideBtn && mHideBtn->getEnabled()) - mHideBtn->setVisible(TRUE); - mOnMouseEnterSignal(this); + if(panel_rc.pointInRect(x, y) || button_rc.pointInRect(x, y)) + { + mOnToastHoverSignal(this, MOUSE_ENTER); + + setBackgroundOpaque(TRUE); + + //toasts fading is management by Screen Channel - LLModalDialog::onMouseEnter(x, y, mask); + sendChildToFront(mHideBtn); + if(mHideBtn && mHideBtn->getEnabled()) + { + mHideBtn->setVisible(TRUE); + } + mOnMouseEnterSignal(this); + mToastMouseEnterSignal(this, getValue()); + } } -//-------------------------------------------------------------------------- -void LLToast::onMouseLeave(S32 x, S32 y, MASK mask) -{ - mOnToastHoverSignal(this, MOUSE_LEAVE); +void LLToast::onToastMouseLeave() +{ + LLRect panel_rc = mWrapperPanel->calcScreenRect(); + LLRect button_rc; + if(mHideBtn) + { + button_rc = mHideBtn->calcScreenRect(); + } - //toasts fading is management by Screen Channel + S32 x, y; + LLUI::getMousePositionScreen(&x, &y); - if(mHideBtn && mHideBtn->getEnabled()) + if( !panel_rc.pointInRect(x, y) && !button_rc.pointInRect(x, y)) { - if( mHideBtnPressed ) + mOnToastHoverSignal(this, MOUSE_LEAVE); + + //toasts fading is management by Screen Channel + + if(mHideBtn && mHideBtn->getEnabled()) { - mHideBtnPressed = false; - return; + if( mHideBtnPressed ) + { + mHideBtnPressed = false; + return; + } + mHideBtn->setVisible(FALSE); } - mHideBtn->setVisible(FALSE); + mToastMouseLeaveSignal(this, getValue()); } - - LLModalDialog::onMouseLeave(x, y, mask); } +void LLToast::setBackgroundOpaque(BOOL b) +{ + if(mWrapperPanel && !isBackgroundVisible()) + { + mWrapperPanel->setBackgroundOpaque(b); + } + else + { + LLModalDialog::setBackgroundOpaque(b); + } +} void LLNotificationsUI::LLToast::stopFading() { @@ -315,6 +405,13 @@ void LLNotificationsUI::LLToast::startFading() } } +bool LLToast::isHovered() +{ + S32 x, y; + LLUI::getMousePositionScreen(&x, &y); + return mWrapperPanel->calcScreenRect().pointInRect(x, y); +} + //-------------------------------------------------------------------------- BOOL LLToast::handleMouseDown(S32 x, S32 y, MASK mask) diff --git a/indra/newview/lltoast.h b/indra/newview/lltoast.h index 3d25fd4f02..64855020a9 100644 --- a/indra/newview/lltoast.h +++ b/indra/newview/lltoast.h @@ -86,8 +86,6 @@ public: // Toast handlers virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); - virtual void onMouseEnter(S32 x, S32 y, MASK mask); - virtual void onMouseLeave(S32 x, S32 y, MASK mask); //Fading @@ -97,6 +95,7 @@ public: /** Start fading timer */ virtual void startFading(); + bool isHovered(); // Operating with toasts // insert a panel to a toast @@ -118,10 +117,22 @@ public: virtual void draw(); // virtual void setVisible(BOOL show); + + /*virtual*/ void setBackgroundOpaque(BOOL b); // virtual void hide(); + /*virtual*/ void onFocusLost(); + + /*virtual*/ void onFocusReceived(); + /** + * Returns padding between floater top and wrapper_panel top. + * This padding should be taken into account when positioning or reshaping toasts + */ + S32 getTopPad(); + + S32 getRightPad(); // get/set Toast's flags or states // get information whether the notification corresponding to the toast is valid or not @@ -154,9 +165,15 @@ public: toast_hover_check_signal_t mOnToastHoverSignal; boost::signals2::connection setOnToastHoverCallback(toast_hover_check_callback_t cb) { return mOnToastHoverSignal.connect(cb); } + boost::signals2::connection setMouseEnterCallback( const commit_signal_t::slot_type& cb ) { return mToastMouseEnterSignal.connect(cb); }; + boost::signals2::connection setMouseLeaveCallback( const commit_signal_t::slot_type& cb ) { return mToastMouseLeaveSignal.connect(cb); }; private: + void onToastMouseEnter(); + + void onToastMouseLeave(); + void handleTipToastClick(S32 x, S32 y, MASK mask); // check timer @@ -168,6 +185,8 @@ private: LLUUID mSessionID; LLNotificationPtr mNotification; + LLPanel* mWrapperPanel; + // timer counts a lifetime of a toast LLTimer mTimer; F32 mToastLifetime; // in seconds @@ -184,6 +203,9 @@ private: bool mHideBtnPressed; bool mIsHidden; // this flag is TRUE when a toast has faded or was hidden with (x) button (EXT-1849) bool mIsTip; + + commit_signal_t mToastMouseEnterSignal; + commit_signal_t mToastMouseLeaveSignal; }; } diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 15a51bbe14..3f379fcf75 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -854,16 +854,10 @@ class Linux_i686Manifest(LinuxManifest): print "Skipping %s - not found" % libfile pass - - if(self.args['buildtype'].lower() == 'release'): - print "* packaging stripped viewer binary." - self.path("secondlife-stripped","bin/do-not-directly-run-secondlife-bin") - else: - print "* packaging un-stripped viewer binary." - self.path("secondlife-bin","bin/do-not-directly-run-secondlife-bin") + self.path("secondlife-bin","bin/do-not-directly-run-secondlife-bin") - self.path("../linux_crash_logger/linux-crash-logger-stripped","bin/linux-crash-logger.bin") - self.path("../linux_updater/linux-updater-stripped", "bin/linux-updater.bin") + self.path("../linux_crash_logger/linux-crash-logger","bin/linux-crash-logger.bin") + self.path("../linux_updater/linux-updater", "bin/linux-updater.bin") self.path("../llplugin/slplugin/SLPlugin", "bin/SLPlugin") if self.prefix("res-sdl"): self.path("*") @@ -914,23 +908,16 @@ class Linux_i686Manifest(LinuxManifest): if self.prefix(src="vivox-runtime/i686-linux", dst="lib"): self.path("libortp.so") self.path("libsndfile.so.1") - #self.path("libvivoxoal.so.1") # no - we'll re-use the viewer's own OAL lib + #self.path("libvivoxoal.so.1") # no - we'll re-use the viewer's own OpenAL lib self.path("libvivoxsdk.so") self.path("libvivoxplatform.so") self.end_prefix("lib") -class Linux_x86_64Manifest(LinuxManifest): - def construct(self): - super(Linux_x86_64Manifest, self).construct() - self.path("secondlife-stripped","bin/do-not-directly-run-secondlife-bin") - self.path("../linux_crash_logger/linux-crash-logger-stripped","linux-crash-logger.bin") - if self.prefix("res-sdl"): - self.path("*") - # recurse - self.end_prefix("res-sdl") + if self.args['buildtype'].lower() == 'release': + print "* Going strip-crazy on the packaged binaries, since this is a RELEASE build" + self.run_command("find %(d)r/bin %(d)r/lib -type f | xargs --no-run-if-empty strip -S" % {'d': self.get_dst_prefix()} ) # makes some small assumptions about our packaged dir structure - self.path("featuretable_linux.txt") - self.path("secondlife-i686.supp") +################################################################ if __name__ == "__main__": main() |