From 3081f89744ab527af4c843bdf898654d4ba87b57 Mon Sep 17 00:00:00 2001 From: Richard Nelson Date: Mon, 4 Oct 2010 19:07:28 -0700 Subject: EXP-138 FIXED Chat and IM notices not aligned with Bottom bar in Skylight Viewer --- indra/newview/llscreenchannel.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'indra/newview/llscreenchannel.cpp') diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp index 5c923a0409..b90ff80294 100644 --- a/indra/newview/llscreenchannel.cpp +++ b/indra/newview/llscreenchannel.cpp @@ -136,12 +136,22 @@ void LLScreenChannelBase::init(S32 channel_left, S32 channel_right) side_bar->getCollapseSignal().connect(boost::bind(&LLScreenChannelBase::resetPositionAndSize, this, _2)); } + // top and bottom set by updateBottom() + setRect(LLRect(channel_left, 0, channel_right, 0)); + updateBottom(); + setVisible(TRUE); +} + +void LLScreenChannelBase::updateBottom() +{ S32 channel_top = gViewerWindow->getWorldViewRectScaled().getHeight(); S32 channel_bottom = gViewerWindow->getWorldViewRectScaled().mBottom + gSavedSettings.getS32("ChannelBottomPanelMargin"); + S32 channel_left = getRect().mLeft; + S32 channel_right = getRect().mRight; setRect(LLRect(channel_left, channel_top, channel_right, channel_bottom)); - setVisible(TRUE); } + //-------------------------------------------------------------------------- ////////////////////// // LLScreenChannel @@ -512,6 +522,8 @@ void LLScreenChannel::showToastsBottom() S32 toast_margin = 0; std::vector::reverse_iterator it; + updateBottom(); + LLDockableFloater* floater = dynamic_cast(LLDockableFloater::getInstanceHandle().get()); for(it = mToastList.rbegin(); it != mToastList.rend(); ++it) @@ -866,13 +878,7 @@ void LLScreenChannel::updateShowToastsState() return; } - S32 channel_bottom = gViewerWindow->getWorldViewRectScaled().mBottom + gSavedSettings.getS32("ChannelBottomPanelMargin");; - LLRect this_rect = getRect(); - - if(channel_bottom != this_rect.mBottom) - { - setRect(LLRect(this_rect.mLeft, this_rect.mTop, this_rect.mRight, channel_bottom)); - } + updateBottom(); } //-------------------------------------------------------------------------- -- cgit v1.3 From 38a182f62fcdd3c8e684459bf29a434bf36dbce2 Mon Sep 17 00:00:00 2001 From: Richard Linden Date: Mon, 1 Nov 2010 13:45:55 -0700 Subject: EXP-371 Chat/IM bubble notifications not aligned with bottom bar --- indra/newview/llscreenchannel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview/llscreenchannel.cpp') diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp index b90ff80294..5a36393f28 100644 --- a/indra/newview/llscreenchannel.cpp +++ b/indra/newview/llscreenchannel.cpp @@ -145,7 +145,7 @@ void LLScreenChannelBase::init(S32 channel_left, S32 channel_right) void LLScreenChannelBase::updateBottom() { S32 channel_top = gViewerWindow->getWorldViewRectScaled().getHeight(); - S32 channel_bottom = gViewerWindow->getWorldViewRectScaled().mBottom + gSavedSettings.getS32("ChannelBottomPanelMargin"); + S32 channel_bottom = gSavedSettings.getS32("ChannelBottomPanelMargin"); S32 channel_left = getRect().mLeft; S32 channel_right = getRect().mRight; setRect(LLRect(channel_left, channel_top, channel_right, channel_bottom)); -- cgit v1.3 From 106134b6950b55a8462fc3444db781104eb6bf5e Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Fri, 3 Dec 2010 03:37:37 -0500 Subject: Fix for OK notification being overlaid by Keep/Discard/Block notification --- doc/contributions.txt | 1 + indra/newview/llscreenchannel.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'indra/newview/llscreenchannel.cpp') diff --git a/doc/contributions.txt b/doc/contributions.txt index d4e459039d..f25656da9a 100644 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -356,6 +356,7 @@ Joghert LeSabre Jonathan Yap VWR-17801 STORM-616 + STORM-523 Kage Pixel VWR-11 Ken March diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp index 61f4897ed0..92a06b763f 100644 --- a/indra/newview/llscreenchannel.cpp +++ b/indra/newview/llscreenchannel.cpp @@ -485,7 +485,7 @@ void LLScreenChannel::modifyToastByNotificationID(LLUUID id, LLPanel* panel) //-------------------------------------------------------------------------- void LLScreenChannel::redrawToasts() { - if(mToastList.size() == 0 || isHovering()) + if(mToastList.size() == 0) return; switch(mToastAlignment) -- cgit v1.3 From 7305adab32f88be2d610234cc32a5781803316fd Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Fri, 3 Dec 2010 17:57:46 -0500 Subject: Found and disabled another place where hovered notifications were being handled --- indra/newview/llscreenchannel.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'indra/newview/llscreenchannel.cpp') diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp index 92a06b763f..8dd5f068b6 100644 --- a/indra/newview/llscreenchannel.cpp +++ b/indra/newview/llscreenchannel.cpp @@ -835,7 +835,6 @@ void LLScreenChannel::onToastHover(LLToast* toast, bool mouse_enter) } } - if(!isHovering()) redrawToasts(); } -- cgit v1.3 From 6730aacbfa8e1d6c778f514e489b96b29a247153 Mon Sep 17 00:00:00 2001 From: Jonathan Yap Date: Wed, 8 Dec 2010 15:41:00 -0500 Subject: Adjusted whitespace in llscreenchannel.cpp --- indra/newview/llscreenchannel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'indra/newview/llscreenchannel.cpp') diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp index 8dd5f068b6..7254e1b6ca 100644 --- a/indra/newview/llscreenchannel.cpp +++ b/indra/newview/llscreenchannel.cpp @@ -835,7 +835,7 @@ void LLScreenChannel::onToastHover(LLToast* toast, bool mouse_enter) } } - redrawToasts(); + redrawToasts(); } //-------------------------------------------------------------------------- -- cgit v1.3 From c78db88d060df662ee3590232ef0b9becdcf9d81 Mon Sep 17 00:00:00 2001 From: Vadim ProductEngine Date: Thu, 9 Dec 2010 17:30:31 +0200 Subject: STORM-774 WIP Misc renames to improve readability. --- indra/newview/llnearbychathandler.cpp | 6 +++--- indra/newview/llscreenchannel.cpp | 20 ++++++++++---------- indra/newview/llscreenchannel.h | 4 ++-- indra/newview/lltoast.cpp | 24 +++++++++++++----------- indra/newview/lltoast.h | 12 ++++++------ 5 files changed, 34 insertions(+), 32 deletions(-) (limited to 'indra/newview/llscreenchannel.cpp') diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp index d2ad78f140..6f92dd6445 100644 --- a/indra/newview/llnearbychathandler.cpp +++ b/indra/newview/llnearbychathandler.cpp @@ -121,7 +121,7 @@ protected: if (!toast) return; LL_DEBUGS("NearbyChat") << "Pooling toast" << llendl; toast->setVisible(FALSE); - toast->stopFading(); + toast->stopTimer(); toast->setIsHidden(true); // Nearby chat toasts that are hidden, not destroyed. They are collected to the toast pool, so that @@ -296,7 +296,7 @@ void LLNearbyChatScreenChannel::addNotification(LLSD& notification) { panel->addMessage(notification); toast->reshapeToPanel(); - toast->startFading(); + toast->startTimer(); arrangeToasts(); return; @@ -341,7 +341,7 @@ void LLNearbyChatScreenChannel::addNotification(LLSD& notification) panel->init(notification); toast->reshapeToPanel(); - toast->startFading(); + toast->startTimer(); m_active_toasts.push_back(toast->getHandle()); diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp index 61f4897ed0..1645334b38 100644 --- a/indra/newview/llscreenchannel.cpp +++ b/indra/newview/llscreenchannel.cpp @@ -253,8 +253,8 @@ void LLScreenChannel::addToast(const LLToast::Params& p) if(mControlHovering) { new_toast_elem.toast->setOnToastHoverCallback(boost::bind(&LLScreenChannel::onToastHover, this, _1, _2)); - new_toast_elem.toast->setMouseEnterCallback(boost::bind(&LLScreenChannel::stopFadingToast, this, new_toast_elem.toast)); - new_toast_elem.toast->setMouseLeaveCallback(boost::bind(&LLScreenChannel::startFadingToast, this, new_toast_elem.toast)); + new_toast_elem.toast->setMouseEnterCallback(boost::bind(&LLScreenChannel::stopToastTimer, this, new_toast_elem.toast)); + new_toast_elem.toast->setMouseLeaveCallback(boost::bind(&LLScreenChannel::startToastTimer, this, new_toast_elem.toast)); } if(show_toast) @@ -369,7 +369,7 @@ void LLScreenChannel::loadStoredToastsToChannel() for(it = mStoredToastList.begin(); it != mStoredToastList.end(); ++it) { (*it).toast->setIsHidden(false); - (*it).toast->startFading(); + (*it).toast->startTimer(); mToastList.push_back((*it)); } @@ -394,7 +394,7 @@ void LLScreenChannel::loadStoredToastByNotificationIDToChannel(LLUUID id) } toast->setIsHidden(false); - toast->startFading(); + toast->startTimer(); mToastList.push_back((*it)); redrawToasts(); @@ -477,7 +477,7 @@ void LLScreenChannel::modifyToastByNotificationID(LLUUID id, LLPanel* panel) toast->removeChild(old_panel); delete old_panel; toast->insertPanel(panel); - toast->startFading(); + toast->startTimer(); redrawToasts(); } } @@ -588,7 +588,7 @@ void LLScreenChannel::showToastsBottom() mHiddenToastsNum = 0; for(; it != mToastList.rend(); it++) { - (*it).toast->stopFading(); + (*it).toast->stopTimer(); (*it).toast->setVisible(FALSE); mHiddenToastsNum++; } @@ -697,15 +697,15 @@ void LLScreenChannel::closeStartUpToast() } } -void LLNotificationsUI::LLScreenChannel::stopFadingToast(LLToast* toast) +void LLNotificationsUI::LLScreenChannel::stopToastTimer(LLToast* toast) { if (!toast || toast != mHoveredToast) return; // Pause fade timer of the hovered toast. - toast->stopFading(); + toast->stopTimer(); } -void LLNotificationsUI::LLScreenChannel::startFadingToast(LLToast* toast) +void LLNotificationsUI::LLScreenChannel::startToastTimer(LLToast* toast) { if (!toast || toast == mHoveredToast) { @@ -713,7 +713,7 @@ void LLNotificationsUI::LLScreenChannel::startFadingToast(LLToast* toast) } // Reset its fade timer. - toast->startFading(); + toast->startTimer(); } //-------------------------------------------------------------------------- diff --git a/indra/newview/llscreenchannel.h b/indra/newview/llscreenchannel.h index a1fdd6e32c..c9e511fb09 100644 --- a/indra/newview/llscreenchannel.h +++ b/indra/newview/llscreenchannel.h @@ -194,10 +194,10 @@ public: /** Stop fading given toast */ - virtual void stopFadingToast(LLToast* toast); + virtual void stopToastTimer(LLToast* toast); /** Start fading given toast */ - virtual void startFadingToast(LLToast* toast); + virtual void startToastTimer(LLToast* toast); // get StartUp Toast's state static bool getStartUpToastShown() { return mWasStartUpToastShown; } diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp index 8916469e67..54ce95322c 100644 --- a/indra/newview/lltoast.cpp +++ b/indra/newview/lltoast.cpp @@ -113,7 +113,7 @@ LLToast::LLToast(const LLToast::Params& p) mHideBtnPressed(false), mIsTip(p.is_tip), mWrapperPanel(NULL), - mIsTransparent(false) + mIsFading(false) { mTimer.reset(new LLToastLifeTimer(this, p.lifetime_secs)); @@ -179,7 +179,7 @@ LLToast::~LLToast() void LLToast::hide() { setVisible(FALSE); - setTransparentState(false); + setFading(false); mTimer->stop(); mIsHidden = true; mOnFadeSignal(this); @@ -244,22 +244,24 @@ void LLToast::expire() { if (mCanFade) { - if (mIsTransparent) + if (mIsFading) { + // Fade timer expired. Time to hide. hide(); } else { - setTransparentState(true); + // "Life" time has ended. Time to fade. + setFading(true); mTimer->restart(); } } } -void LLToast::setTransparentState(bool transparent) +void LLToast::setFading(bool transparent) { setBackgroundOpaque(!transparent); - mIsTransparent = transparent; + mIsFading = transparent; if (transparent) { @@ -275,7 +277,7 @@ F32 LLToast::getTimeLeftToLive() { F32 time_to_live = mTimer->getRemainingTimeF32(); - if (!mIsTransparent) + if (!mIsFading) { time_to_live += mToastFadingTime; } @@ -445,20 +447,20 @@ void LLToast::setBackgroundOpaque(BOOL b) } } -void LLNotificationsUI::LLToast::stopFading() +void LLNotificationsUI::LLToast::stopTimer() { if(mCanFade) { - setTransparentState(false); + setFading(false); mTimer->stop(); } } -void LLNotificationsUI::LLToast::startFading() +void LLNotificationsUI::LLToast::startTimer() { if(mCanFade) { - setTransparentState(false); + setFading(false); mTimer->start(); } } diff --git a/indra/newview/lltoast.h b/indra/newview/lltoast.h index f88c628631..20aa5888b7 100644 --- a/indra/newview/lltoast.h +++ b/indra/newview/lltoast.h @@ -114,11 +114,11 @@ public: //Fading - /** Stop fading timer */ - virtual void stopFading(); + /** Stop lifetime/fading timer */ + virtual void stopTimer(); - /** Start fading timer */ - virtual void startFading(); + /** Start lifetime/fading timer */ + virtual void startTimer(); bool isHovered(); @@ -206,7 +206,7 @@ private: void expire(); - void setTransparentState(bool transparent); + void setFading(bool fading); LLUUID mNotificationID; LLUUID mSessionID; @@ -232,7 +232,7 @@ private: bool mHideBtnPressed; bool mIsHidden; // this flag is TRUE when a toast has faded or was hidden with (x) button (EXT-1849) bool mIsTip; - bool mIsTransparent; + bool mIsFading; commit_signal_t mToastMouseEnterSignal; commit_signal_t mToastMouseLeaveSignal; -- cgit v1.3 From 1d686283a467808eda2d7bd8a2c109d4924151f2 Mon Sep 17 00:00:00 2001 From: Vadim ProductEngine Date: Sat, 11 Dec 2010 17:24:39 +0200 Subject: STORM-391 WIP Removed unused methods. --- indra/newview/llscreenchannel.cpp | 5 ----- indra/newview/llscreenchannel.h | 3 --- 2 files changed, 8 deletions(-) (limited to 'indra/newview/llscreenchannel.cpp') diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp index 9e0e10d66f..64e75a6cb2 100644 --- a/indra/newview/llscreenchannel.cpp +++ b/indra/newview/llscreenchannel.cpp @@ -605,10 +605,6 @@ void LLScreenChannel::showToastsBottom() mHiddenToastsNum++; } } - else - { - closeOverflowToastPanel(); - } } //-------------------------------------------------------------------------- @@ -731,7 +727,6 @@ void LLNotificationsUI::LLScreenChannel::startToastTimer(LLToast* toast) //-------------------------------------------------------------------------- void LLScreenChannel::hideToastsFromScreen() { - closeOverflowToastPanel(); for(std::vector::iterator it = mToastList.begin(); it != mToastList.end(); it++) (*it).toast->setVisible(FALSE); } diff --git a/indra/newview/llscreenchannel.h b/indra/newview/llscreenchannel.h index 023a65d872..c536a21779 100644 --- a/indra/newview/llscreenchannel.h +++ b/indra/newview/llscreenchannel.h @@ -81,9 +81,6 @@ public: // show all toasts in a channel virtual void redrawToasts() {}; - virtual void closeOverflowToastPanel() {}; - virtual void hideOverflowToastPanel() {}; - // Channel's behavior-functions // set whether a channel will control hovering inside itself or not -- cgit v1.3 From 0d764afb9c0ba5dd3aeed67370f8d5c7d9b7cf45 Mon Sep 17 00:00:00 2001 From: Vadim ProductEngine Date: Sat, 11 Dec 2010 18:02:59 +0200 Subject: STORM-391 FIXED Dismiss toasts that don't fit on screen. Make sure older toasts don't appear after newer ones fade out. --- indra/newview/llscreenchannel.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'indra/newview/llscreenchannel.cpp') diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp index 64e75a6cb2..0eeb89792b 100644 --- a/indra/newview/llscreenchannel.cpp +++ b/indra/newview/llscreenchannel.cpp @@ -595,14 +595,13 @@ void LLScreenChannel::showToastsBottom() } } + // Dismiss toasts we don't have space for (STORM-391). if(it != mToastList.rend()) { mHiddenToastsNum = 0; for(; it != mToastList.rend(); it++) { - (*it).toast->stopTimer(); - (*it).toast->setVisible(FALSE); - mHiddenToastsNum++; + (*it).toast->hide(); } } } -- cgit v1.3 From f644ef0fb00aa622cb132553bc33d38f8b454ecd Mon Sep 17 00:00:00 2001 From: Vadim ProductEngine Date: Fri, 24 Dec 2010 20:20:26 +0200 Subject: STORM-682 FIXED Fixed positioning notification toasts in mouse-look mode. Toasts were positioned as if side tray was expanded. The fix is to reshape the so-called toasts screen channel (an area where toasts are drawn) on entering/leaving mouse-look mode, so that the screen channel can notice that side tray get in/visible. --- indra/newview/llimfloater.cpp | 11 ++++------- indra/newview/llimfloater.h | 2 +- indra/newview/llscreenchannel.cpp | 15 ++++----------- indra/newview/llscreenchannel.h | 2 +- indra/newview/llsidetray.cpp | 29 +++++++++++++++++++++++------ indra/newview/llsidetray.h | 15 ++++++++++++--- 6 files changed, 45 insertions(+), 29 deletions(-) (limited to 'indra/newview/llscreenchannel.cpp') diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index bdc0dfa7e2..f74ae92a7b 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -470,7 +470,7 @@ LLIMFloater* LLIMFloater::show(const LLUUID& session_id) } //static -bool LLIMFloater::resetAllowedRectPadding(const LLSD& newvalue) +bool LLIMFloater::resetAllowedRectPadding() { //reset allowed rect right padding if "SidebarCameraMovement" option //or sidebar state changed @@ -482,10 +482,10 @@ void LLIMFloater::getAllowedRect(LLRect& rect) { if (sAllowedRectRightPadding == RECT_PADDING_NOT_INIT) //wasn't initialized { - gSavedSettings.getControl("SidebarCameraMovement")->getSignal()->connect(boost::bind(&LLIMFloater::resetAllowedRectPadding, _2)); + gSavedSettings.getControl("SidebarCameraMovement")->getSignal()->connect(boost::bind(&LLIMFloater::resetAllowedRectPadding)); LLSideTray* side_bar = LLSideTray::getInstance(); - side_bar->getCollapseSignal().connect(boost::bind(&LLIMFloater::resetAllowedRectPadding, _2)); + side_bar->setVisibleWidthChangeCallback(boost::bind(&LLIMFloater::resetAllowedRectPadding)); sAllowedRectRightPadding = RECT_PADDING_NEED_RECALC; } @@ -500,10 +500,7 @@ void LLIMFloater::getAllowedRect(LLRect& rect) if (gSavedSettings.getBOOL("SidebarCameraMovement") == FALSE) { - LLSideTray* side_bar = LLSideTray::getInstance(); - - if (side_bar->getVisible() && !side_bar->getCollapsed()) - sAllowedRectRightPadding += side_bar->getRect().getWidth(); + sAllowedRectRightPadding += LLSideTray::getInstance()->getVisibleWidth(); } } rect.mRight -= sAllowedRectRightPadding; diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h index e80e45e64a..5158f6c1f7 100644 --- a/indra/newview/llimfloater.h +++ b/indra/newview/llimfloater.h @@ -156,7 +156,7 @@ private: static void closeHiddenIMToasts(); - static bool resetAllowedRectPadding(const LLSD& newvalue); + static bool resetAllowedRectPadding(); //need to keep this static for performance issues static S32 sAllowedRectRightPadding; diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp index 0eeb89792b..22b65e3120 100644 --- a/indra/newview/llscreenchannel.cpp +++ b/indra/newview/llscreenchannel.cpp @@ -83,11 +83,10 @@ bool LLScreenChannelBase::isHovering() return mHoveredToast->isHovered(); } -bool LLScreenChannelBase::resetPositionAndSize(const LLSD& newvalue) +void LLScreenChannelBase::resetPositionAndSize() { LLRect rc = gViewerWindow->getWorldViewRectScaled(); updatePositionAndSize(rc, rc); - return true; } void LLScreenChannelBase::updatePositionAndSize(LLRect old_world_rect, LLRect new_world_rect) @@ -99,10 +98,7 @@ void LLScreenChannelBase::updatePositionAndSize(LLRect old_world_rect, LLRect ne if (gSavedSettings.getBOOL("SidebarCameraMovement") == FALSE && LLSideTray::instanceCreated ()) { - LLSideTray* side_bar = LLSideTray::getInstance(); - - if (side_bar->getVisible() && !side_bar->getCollapsed()) - world_rect_padding += side_bar->getRect().getWidth(); + world_rect_padding += LLSideTray::getInstance()->getVisibleWidth(); } @@ -133,7 +129,7 @@ void LLScreenChannelBase::init(S32 channel_left, S32 channel_right) if(LLSideTray::instanceCreated()) { LLSideTray* side_bar = LLSideTray::getInstance(); - side_bar->getCollapseSignal().connect(boost::bind(&LLScreenChannelBase::resetPositionAndSize, this, _2)); + side_bar->setVisibleWidthChangeCallback(boost::bind(&LLScreenChannelBase::resetPositionAndSize, this)); } // top and bottom set by updateBottom() @@ -214,10 +210,7 @@ void LLScreenChannel::updatePositionAndSize(LLRect old_world_rect, LLRect new_wo if (gSavedSettings.getBOOL("SidebarCameraMovement") == FALSE && LLSideTray::instanceCreated ()) { - LLSideTray* side_bar = LLSideTray::getInstance(); - - if (side_bar->getVisible() && !side_bar->getCollapsed()) - world_rect_padding += side_bar->getRect().getWidth(); + world_rect_padding += LLSideTray::getInstance()->getVisibleWidth(); } diff --git a/indra/newview/llscreenchannel.h b/indra/newview/llscreenchannel.h index c536a21779..d207d13981 100644 --- a/indra/newview/llscreenchannel.h +++ b/indra/newview/llscreenchannel.h @@ -59,8 +59,8 @@ public: // Channel's outfit-functions // update channel's size and position in the World View virtual void updatePositionAndSize(LLRect old_world_rect, LLRect new_world_rect); + void resetPositionAndSize(); - bool resetPositionAndSize(const LLSD& newvalue); // initialization of channel's shape and position virtual void init(S32 channel_left, S32 channel_right); diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp index 3bc3959e0b..aef665a35c 100644 --- a/indra/newview/llsidetray.cpp +++ b/indra/newview/llsidetray.cpp @@ -561,7 +561,7 @@ BOOL LLSideTray::postBuild() { if ((*it).channel) { - getCollapseSignal().connect(boost::bind(&LLScreenChannelBase::resetPositionAndSize, (*it).channel, _2)); + setVisibleWidthChangeCallback(boost::bind(&LLScreenChannelBase::resetPositionAndSize, (*it).channel)); } } @@ -980,9 +980,6 @@ void LLSideTray::reflectCollapseChange() } gFloaterView->refresh(); - - LLSD new_value = mCollapsed; - mCollapseSignal(this,new_value); } void LLSideTray::arrange() @@ -1262,9 +1259,29 @@ bool LLSideTray::isPanelActive(const std::string& panel_name) void LLSideTray::updateSidetrayVisibility() { // set visibility of parent container based on collapsed state - if (getParent()) + LLView* parent = getParent(); + if (parent) { - getParent()->setVisible(!mCollapsed && !gAgentCamera.cameraMouselook()); + bool old_visibility = parent->getVisible(); + bool new_visibility = !mCollapsed && !gAgentCamera.cameraMouselook(); + + if (old_visibility != new_visibility) + { + parent->setVisible(new_visibility); + + // Signal change of visible width. + llinfos << "Visible: " << new_visibility << llendl; + mVisibleWidthChangeSignal(this, new_visibility); + } } } +S32 LLSideTray::getVisibleWidth() +{ + return (isInVisibleChain() && !mCollapsed) ? getRect().getWidth() : 0; +} + +void LLSideTray::setVisibleWidthChangeCallback(const commit_signal_t::slot_type& cb) +{ + mVisibleWidthChangeSignal.connect(cb); +} diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h index 3c572dde95..184d78845f 100644 --- a/indra/newview/llsidetray.h +++ b/indra/newview/llsidetray.h @@ -165,9 +165,18 @@ public: void reshape (S32 width, S32 height, BOOL called_from_parent = TRUE); - void updateSidetrayVisibility(); + /** + * @return side tray width if it's visible and expanded, 0 otherwise. + * + * Not that width of the tab buttons is not included. + * + * @see setVisibleWidthChangeCallback() + */ + S32 getVisibleWidth(); + + void setVisibleWidthChangeCallback(const commit_signal_t::slot_type& cb); - commit_signal_t& getCollapseSignal() { return mCollapseSignal; } + void updateSidetrayVisibility(); void handleLoginComplete(); @@ -216,7 +225,7 @@ private: tab_order_vector_t mOriginalTabOrder; LLSideTrayTab* mActiveTab; - commit_signal_t mCollapseSignal; + commit_signal_t mVisibleWidthChangeSignal; LLButton* mCollapseButton; bool mCollapsed; -- cgit v1.3