master
mberezhnoy 2013-04-19 17:50:48 +03:00
commit cfd132a0de
23 changed files with 421 additions and 188 deletions

View File

@ -507,22 +507,11 @@ LLFloater::~LLFloater()
{
LLFloaterReg::removeInstance(mInstanceName, mKey);
// delete mNotificationContext;
// mNotificationContext = NULL;
//// am I not hosted by another floater?
//if (mHostHandle.isDead())
//{
// LLFloaterView* parent = (LLFloaterView*) getParent();
// if( parent )
// {
// parent->removeChild( this );
// }
//}
// Just in case we might still have focus here, release it.
releaseFocus();
if( gFocusMgr.childHasKeyboardFocus(this))
{
// Just in case we might still have focus here, release it.
releaseFocus();
}
// This is important so that floaters with persistent rects (i.e., those
// created with rect control rather than an LLRect) are restored in their
@ -2788,7 +2777,7 @@ void LLFloaterView::adjustToFitScreen(LLFloater* floater, BOOL allow_partial_out
}
// move window fully onscreen
if (floater->translateIntoRect( getSnapRect(), allow_partial_outside ? FLOATER_MIN_VISIBLE_PIXELS : S32_MAX ))
if (floater->translateIntoRect( gFloaterView->getRect(), allow_partial_outside ? FLOATER_MIN_VISIBLE_PIXELS : S32_MAX ))
{
floater->clearSnapTarget();
}
@ -3258,6 +3247,11 @@ bool LLFloater::isShown() const
return ! isMinimized() && isInVisibleChain();
}
bool LLFloater::isDetachedAndNotMinimized()
{
return !getHost() && !isMinimized();
}
/* static */
bool LLFloater::isShown(const LLFloater* floater)
{

View File

@ -238,6 +238,7 @@ public:
void center();
LLMultiFloater* getHost();
bool isDetachedAndNotMinimized();
void applyTitle();
std::string getCurrentTitle() const;

View File

@ -214,8 +214,15 @@ LLLayoutStack::Params::Params()
open_time_constant("open_time_constant", 0.02f),
close_time_constant("close_time_constant", 0.03f),
resize_bar_overlap("resize_bar_overlap", 1),
border_size("border_size", LLCachedControl<S32>(*LLUI::sSettingGroups["config"], "UIResizeBarHeight", 0))
{}
border_size("border_size", LLCachedControl<S32>(*LLUI::sSettingGroups["config"], "UIResizeBarHeight", 0)),
show_drag_handle("show_drag_handle", false),
drag_handle_first_indent("drag_handle_first_indent", 0),
drag_handle_second_indent("drag_handle_second_indent", 0),
drag_handle_thickness("drag_handle_thickness", 5),
drag_handle_shift("drag_handle_shift", 2)
{
addSynonym(border_size, "drag_handle_gap");
}
LLLayoutStack::LLLayoutStack(const LLLayoutStack::Params& p)
: LLView(p),
@ -227,8 +234,14 @@ LLLayoutStack::LLLayoutStack(const LLLayoutStack::Params& p)
mClip(p.clip),
mOpenTimeConstant(p.open_time_constant),
mCloseTimeConstant(p.close_time_constant),
mResizeBarOverlap(p.resize_bar_overlap)
{}
mResizeBarOverlap(p.resize_bar_overlap),
mShowDragHandle(p.show_drag_handle),
mDragHandleFirstIndent(p.drag_handle_first_indent),
mDragHandleSecondIndent(p.drag_handle_second_indent),
mDragHandleThickness(p.drag_handle_thickness),
mDragHandleShift(p.drag_handle_shift)
{
}
LLLayoutStack::~LLLayoutStack()
{
@ -262,6 +275,26 @@ void LLLayoutStack::draw()
drawChild(panelp, 0, 0, !clip_rect.isEmpty());
}
}
const LLView::child_list_t * child_listp = getChildList();
BOOST_FOREACH(LLView * childp, * child_listp)
{
LLResizeBar * resize_barp = dynamic_cast<LLResizeBar*>(childp);
if (resize_barp && resize_barp->isShowDragHandle() && resize_barp->getVisible() && resize_barp->getRect().isValid())
{
LLRect screen_rect = resize_barp->calcScreenRect();
if (LLUI::getRootView()->getLocalRect().overlaps(screen_rect) && LLUI::sDirtyRect.overlaps(screen_rect))
{
LLUI::pushMatrix();
{
const LLRect& rb_rect(resize_barp->getRect());
LLUI::translate(rb_rect.mLeft, rb_rect.mBottom);
resize_barp->draw();
}
LLUI::popMatrix();
}
}
}
}
void LLLayoutStack::removeChild(LLView* view)
@ -390,7 +423,6 @@ void LLLayoutStack::updateLayout()
BOOST_FOREACH(LLLayoutPanel* panelp, mPanels)
{
F32 panel_dim = llmax(panelp->getExpandedMinDim(), panelp->mTargetDim);
F32 panel_visible_dim = panelp->getVisibleDim();
LLRect panel_rect;
if (mOrientation == HORIZONTAL)
@ -407,27 +439,61 @@ void LLLayoutStack::updateLayout()
getRect().getWidth(),
llround(panel_dim));
}
panelp->setIgnoreReshape(true);
panelp->setShape(panel_rect);
panelp->setIgnoreReshape(false);
LLRect resize_bar_rect(panel_rect);
LLResizeBar * resize_barp = panelp->getResizeBar();
bool show_drag_handle = resize_barp->isShowDragHandle();
F32 panel_spacing = (F32)mPanelSpacing * panelp->getVisibleAmount();
F32 panel_visible_dim = panelp->getVisibleDim();
S32 panel_spacing_round = (S32)(llround(panel_spacing));
if (mOrientation == HORIZONTAL)
{
resize_bar_rect.mLeft = panel_rect.mRight - mResizeBarOverlap;
resize_bar_rect.mRight = panel_rect.mRight + (S32)(llround(panel_spacing)) + mResizeBarOverlap;
cur_pos += panel_visible_dim + panel_spacing;
if (show_drag_handle && panel_spacing_round > mDragHandleThickness)
{
resize_bar_rect.mLeft = panel_rect.mRight + mDragHandleShift;
resize_bar_rect.mRight = resize_bar_rect.mLeft + mDragHandleThickness;
}
else
{
resize_bar_rect.mLeft = panel_rect.mRight - mResizeBarOverlap;
resize_bar_rect.mRight = panel_rect.mRight + panel_spacing_round + mResizeBarOverlap;
}
if (show_drag_handle)
{
resize_bar_rect.mBottom += mDragHandleSecondIndent;
resize_bar_rect.mTop -= mDragHandleFirstIndent;
}
}
else //VERTICAL
{
resize_bar_rect.mTop = panel_rect.mBottom + mResizeBarOverlap;
resize_bar_rect.mBottom = panel_rect.mBottom - (S32)(llround(panel_spacing)) - mResizeBarOverlap;
cur_pos -= panel_visible_dim + panel_spacing;
if (show_drag_handle && panel_spacing_round > mDragHandleThickness)
{
resize_bar_rect.mTop = panel_rect.mBottom - mDragHandleShift;
resize_bar_rect.mBottom = resize_bar_rect.mTop - mDragHandleThickness;
}
else
{
resize_bar_rect.mTop = panel_rect.mBottom + mResizeBarOverlap;
resize_bar_rect.mBottom = panel_rect.mBottom - panel_spacing_round - mResizeBarOverlap;
}
if (show_drag_handle)
{
resize_bar_rect.mLeft += mDragHandleFirstIndent;
resize_bar_rect.mRight -= mDragHandleSecondIndent;
}
}
panelp->setIgnoreReshape(true);
panelp->setShape(panel_rect);
panelp->setIgnoreReshape(false);
panelp->mResizeBar->setShape(resize_bar_rect);
}
@ -475,15 +541,13 @@ void LLLayoutStack::createResizeBar(LLLayoutPanel* panelp)
{
if (lp->mResizeBar == NULL)
{
LLResizeBar::Side side = (mOrientation == HORIZONTAL) ? LLResizeBar::RIGHT : LLResizeBar::BOTTOM;
LLRect resize_bar_rect = getRect();
LLResizeBar::Params resize_params;
resize_params.name("resize");
resize_params.resizing_view(lp);
resize_params.min_size(lp->getRelevantMinDim());
resize_params.side(side);
resize_params.side((mOrientation == HORIZONTAL) ? LLResizeBar::RIGHT : LLResizeBar::BOTTOM);
resize_params.snapping_enabled(false);
resize_params.show_drag_handle(mShowDragHandle);
LLResizeBar* resize_bar = LLUICtrlFactory::create<LLResizeBar>(resize_params);
lp->mResizeBar = resize_bar;
LLView::addChild(resize_bar, 0);
@ -865,3 +929,4 @@ void LLLayoutStack::updateResizeBarLimits()
previous_visible_panelp = visible_panelp;
}
}

View File

@ -62,6 +62,11 @@ public:
Optional<F32> open_time_constant,
close_time_constant;
Optional<S32> resize_bar_overlap;
Optional<bool> show_drag_handle;
Optional<S32> drag_handle_first_indent;
Optional<S32> drag_handle_second_indent;
Optional<S32> drag_handle_thickness;
Optional<S32> drag_handle_shift;
Params();
};
@ -126,6 +131,11 @@ private:
F32 mCloseTimeConstant;
bool mNeedsLayout;
S32 mResizeBarOverlap;
bool mShowDragHandle;
S32 mDragHandleFirstIndent;
S32 mDragHandleSecondIndent;
S32 mDragHandleThickness;
S32 mDragHandleShift;
}; // end class LLLayoutStack

View File

@ -28,14 +28,53 @@
#include "llresizebar.h"
#include "lllocalcliprect.h"
#include "llmath.h"
#include "llui.h"
#include "llmenugl.h"
#include "llfocusmgr.h"
#include "llwindow.h"
class LLImagePanel : public LLPanel
{
public:
struct Params : public LLInitParam::Block<Params, LLPanel::Params>
{
Optional<bool> horizontal;
Params() : horizontal("horizontal", false) {}
};
LLImagePanel(const Params& p) : LLPanel(p), mHorizontal(p.horizontal) {}
virtual ~LLImagePanel() {}
void draw()
{
const LLRect& parent_rect = getParent()->getRect();
const LLRect& rect = getRect();
LLRect clip_rect( -rect.mLeft, parent_rect.getHeight() - rect.mBottom - 2
, parent_rect.getWidth() - rect.mLeft - (mHorizontal ? 2 : 0), -rect.mBottom);
LLLocalClipRect clip(clip_rect);
LLPanel::draw();
}
private:
bool mHorizontal;
};
static LLDefaultChildRegistry::Register<LLImagePanel> t1("resize_bar_image_panel");
LLResizeBar::Params::Params()
: max_size("max_size", S32_MAX),
snapping_enabled("snapping_enabled", true),
resizing_view("resizing_view"),
side("side"),
allow_double_click_snapping("allow_double_click_snapping", true),
show_drag_handle("show_drag_handle", false)
{
name = "resize_bar";
}
LLResizeBar::LLResizeBar(const LLResizeBar::Params& p)
: LLView(p),
: LLPanel(p),
mDragLastScreenX( 0 ),
mDragLastScreenY( 0 ),
mLastMouseScreenX( 0 ),
@ -46,7 +85,9 @@ LLResizeBar::LLResizeBar(const LLResizeBar::Params& p)
mSnappingEnabled(p.snapping_enabled),
mAllowDoubleClickSnapping(p.allow_double_click_snapping),
mResizingView(p.resizing_view),
mResizeListener(NULL)
mResizeListener(NULL),
mShowDragHandle(p.show_drag_handle),
mImagePanel(NULL)
{
setFollowsNone();
// set up some generically good follow code.
@ -75,8 +116,37 @@ LLResizeBar::LLResizeBar(const LLResizeBar::Params& p)
default:
break;
}
if (mShowDragHandle)
{
LLViewBorder::Params border_params;
border_params.border_thickness = 1;
border_params.highlight_light_color = LLUIColorTable::instance().getColor("ResizebarBorderLight");
border_params.shadow_dark_color = LLUIColorTable::instance().getColor("ResizebarBorderDark");
addBorder(border_params);
setBorderVisible(TRUE);
LLImagePanel::Params image_panel;
mDragHandleImage = LLUI::getUIImage(LLResizeBar::RIGHT == mSide ? "Vertical Drag Handle" : "Horizontal Drag Handle");
image_panel.bg_alpha_image = mDragHandleImage;
image_panel.background_visible = true;
image_panel.horizontal = (LLResizeBar::BOTTOM == mSide);
mImagePanel = LLUICtrlFactory::create<LLImagePanel>(image_panel);
setImagePanel(mImagePanel);
}
}
BOOL LLResizeBar::postBuild()
{
if (mShowDragHandle)
{
setBackgroundVisible(TRUE);
setTransparentColor(LLUIColorTable::instance().getColor("ResizebarBody"));
}
return LLPanel::postBuild();
}
BOOL LLResizeBar::handleMouseDown(S32 x, S32 y, MASK mask)
{
@ -342,3 +412,39 @@ BOOL LLResizeBar::handleDoubleClick(S32 x, S32 y, MASK mask)
return TRUE;
}
void LLResizeBar::setImagePanel(LLPanel * panelp)
{
const LLView::child_list_t * children = getChildList();
if (getChildCount() == 2)
{
LLPanel * image_panelp = dynamic_cast<LLPanel*>(children->back());
if (image_panelp)
{
removeChild(image_panelp);
delete image_panelp;
}
}
addChild(panelp);
sendChildToBack(panelp);
}
LLPanel * LLResizeBar::getImagePanel() const
{
return getChildCount() > 0 ? (LLPanel *)getChildList()->back() : NULL;
}
void LLResizeBar::draw()
{
if (mShowDragHandle)
{
S32 image_width = mDragHandleImage->getTextureWidth();
S32 image_height = mDragHandleImage->getTextureHeight();
const LLRect& panel_rect = getRect();
S32 image_left = (panel_rect.getWidth() - image_width) / 2 - 1;
S32 image_bottom = (panel_rect.getHeight() - image_height) / 2;
mImagePanel->setRect(LLRect(image_left, image_bottom + image_height, image_left + image_width, image_bottom));
}
LLPanel::draw();
}

View File

@ -27,15 +27,14 @@
#ifndef LL_RESIZEBAR_H
#define LL_RESIZEBAR_H
#include "llview.h"
#include "llcoord.h"
#include "llpanel.h"
class LLResizeBar : public LLView
class LLResizeBar : public LLPanel
{
public:
enum Side { LEFT, TOP, RIGHT, BOTTOM };
struct Params : public LLInitParam::Block<Params, LLView::Params>
struct Params : public LLInitParam::Block<Params, LLPanel::Params>
{
Mandatory<LLView*> resizing_view;
Mandatory<Side> side;
@ -44,24 +43,19 @@ public:
Optional<S32> max_size;
Optional<bool> snapping_enabled;
Optional<bool> allow_double_click_snapping;
Optional<bool> show_drag_handle;
Params()
: max_size("max_size", S32_MAX),
snapping_enabled("snapping_enabled", true),
resizing_view("resizing_view"),
side("side"),
allow_double_click_snapping("allow_double_click_snapping", true)
{
name = "resize_bar";
}
Params();
};
protected:
LLResizeBar(const LLResizeBar::Params& p);
friend class LLUICtrlFactory;
/*virtual*/ BOOL postBuild();
public:
// virtual void draw(); No appearance
virtual void draw();
virtual BOOL handleHover(S32 x, S32 y, MASK mask);
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
@ -72,20 +66,26 @@ public:
void setAllowDoubleClickSnapping(BOOL allow) { mAllowDoubleClickSnapping = allow; }
bool canResize() { return getEnabled() && mMaxSize > mMinSize; }
void setResizeListener(boost::function<void(void*)> listener) {mResizeListener = listener;}
BOOL isShowDragHandle() const { return mShowDragHandle; }
void setImagePanel(LLPanel * panelp);
LLPanel * getImagePanel() const;
private:
S32 mDragLastScreenX;
S32 mDragLastScreenY;
S32 mLastMouseScreenX;
S32 mLastMouseScreenY;
LLCoordGL mLastMouseDir;
S32 mMinSize;
S32 mMaxSize;
const Side mSide;
BOOL mSnappingEnabled;
BOOL mAllowDoubleClickSnapping;
LLView* mResizingView;
boost::function<void(void*)> mResizeListener;
S32 mDragLastScreenX;
S32 mDragLastScreenY;
S32 mLastMouseScreenX;
S32 mLastMouseScreenY;
LLCoordGL mLastMouseDir;
S32 mMinSize;
S32 mMaxSize;
const Side mSide;
BOOL mSnappingEnabled;
BOOL mAllowDoubleClickSnapping;
BOOL mShowDragHandle;
LLView* mResizingView;
boost::function<void(void*)> mResizeListener;
LLPointer<LLUIImage> mDragHandleImage;
LLPanel * mImagePanel;
};
#endif // LL_RESIZEBAR_H

View File

@ -652,6 +652,10 @@ void LLTextBase::drawText()
mSpellCheckEnd = end;
}
}
else
{
mMisspellRanges.clear();
}
LLTextSegmentPtr cur_segment = *seg_iter;

View File

@ -45,6 +45,7 @@
#include "llenvmanager.h"
#include "llfirstuse.h"
#include "llfloatercamera.h"
#include "llfloaterimcontainer.h"
#include "llfloaterreg.h"
#include "llfloatertools.h"
#include "llgroupactions.h"
@ -90,6 +91,7 @@
#include "llworld.h"
#include "llworldmap.h"
#include "stringize.h"
#include "boost/foreach.hpp"
using namespace LLVOAvatarDefines;
@ -2002,7 +2004,16 @@ void LLAgent::endAnimationUpdateUI()
{
skip_list.insert(LLFloaterReg::findInstance("mini_map"));
}
LLFloaterIMContainer* im_box = LLFloaterReg::getTypedInstance<LLFloaterIMContainer>("im_container");
LLFloaterIMContainer::floater_list_t conversations;
im_box->getDetachedConversationFloaters(conversations);
BOOST_FOREACH(LLFloater* conversation, conversations)
{
llinfos << "skip_list.insert(session_floater): " << conversation->getTitle() << llendl;
skip_list.insert(conversation);
}
gFloaterView->popVisibleAll(skip_list);
#endif
mViewsPushed = FALSE;

View File

@ -340,16 +340,20 @@ void LLConversationViewSession::setVisibleIfDetached(BOOL visible)
{
// Do this only if the conversation floater has been torn off (i.e. no multi floater host) and is not minimized
// Note: minimized dockable floaters are brought to front hence unminimized when made visible and we don't want that here
LLFolderViewModelItem* item = mViewModelItem;
LLUUID session_uuid = dynamic_cast<LLConversationItem*>(item)->getUUID();
LLFloater* session_floater = LLFloaterIMSessionTab::getConversation(session_uuid);
if (session_floater && !session_floater->getHost() && !session_floater->isMinimized())
LLFloater* session_floater = getSessionFloater();
if (session_floater && session_floater->isDetachedAndNotMinimized())
{
session_floater->setVisible(visible);
}
}
LLFloater* LLConversationViewSession::getSessionFloater()
{
LLFolderViewModelItem* item = mViewModelItem;
LLUUID session_uuid = dynamic_cast<LLConversationItem*>(item)->getUUID();
return LLFloaterIMSessionTab::getConversation(session_uuid);
}
LLConversationViewParticipant* LLConversationViewSession::findParticipant(const LLUUID& participant_id)
{
// This is *not* a general tree parsing algorithm. We search only in the mItems list

View File

@ -87,6 +87,8 @@ public:
/*virtual*/ void setFlashState(bool flash_state);
LLFloater* getSessionFloater();
private:
void onCurrentVoiceSessionChanged(const LLUUID& session_id);

View File

@ -215,7 +215,8 @@ void LLDoNotDisturbNotificationStorage::loadNotifications()
LLFloaterReg::showInstance("im_container");
}
if(group_ad_hoc_toast_exists)
bool isConversationLoggingAllowed = gSavedPerAccountSettings.getS32("KeepConversationLogTranscripts") > 0;
if(group_ad_hoc_toast_exists && isConversationLoggingAllowed)
{
LLFloaterReg::showInstance("conversation");
}

View File

@ -54,6 +54,7 @@
#include "llworld.h"
#include "llsdserialize.h"
#include "llviewerobjectlist.h"
#include "boost/foreach.hpp"
//
// LLFloaterIMContainer
@ -660,6 +661,23 @@ void LLFloaterIMContainer::setVisible(BOOL visible)
LLMultiFloater::setVisible(visible);
}
void LLFloaterIMContainer::getDetachedConversationFloaters(floater_list_t& floaters)
{
typedef conversations_widgets_map::value_type conv_pair;
BOOST_FOREACH(conv_pair item, mConversationsWidgets)
{
LLConversationViewSession* widget = dynamic_cast<LLConversationViewSession*>(item.second);
if (widget)
{
LLFloater* session_floater = widget->getSessionFloater();
if (session_floater && session_floater->isDetachedAndNotMinimized())
{
floaters.push_back(session_floater);
}
}
}
}
void LLFloaterIMContainer::setVisibleAndFrontmost(BOOL take_focus, const LLSD& key)
{
LLMultiFloater::setVisibleAndFrontmost(take_focus, key);
@ -799,15 +817,12 @@ void LLFloaterIMContainer::assignResizeLimits()
bool is_conv_pane_expanded = !mConversationsPane->isCollapsed();
bool is_msg_pane_expanded = !mMessagesPane->isCollapsed();
// With two panels visible number of borders is three, because the borders
// between the panels are merged into one
S32 number_of_visible_borders = llmin((is_conv_pane_expanded? 2 : 0) + (is_msg_pane_expanded? 2 : 0), 3);
S32 summary_width_of_visible_borders = number_of_visible_borders * LLPANEL_BORDER_WIDTH;
S32 conv_pane_target_width = is_conv_pane_expanded?
(is_msg_pane_expanded?
mConversationsPane->getRect().getWidth()
: mConversationsPane->getExpandedMinDim())
: mConversationsPane->getMinDim();
S32 summary_width_of_visible_borders = (is_msg_pane_expanded ? mConversationsStack->getPanelSpacing() : 0) + 1;
S32 conv_pane_target_width = is_conv_pane_expanded
? ( is_msg_pane_expanded?mConversationsPane->getRect().getWidth():mConversationsPane->getExpandedMinDim() )
: mConversationsPane->getMinDim();
S32 msg_pane_min_width = is_msg_pane_expanded ? mMessagesPane->getExpandedMinDim() : 0;
S32 new_min_width = conv_pane_target_width + msg_pane_min_width + summary_width_of_visible_borders;
@ -1947,23 +1962,28 @@ bool LLFloaterIMContainer::isScrolledOutOfSight(LLConversationViewSession* conve
BOOL LLFloaterIMContainer::handleKeyHere(KEY key, MASK mask )
{
BOOL handled = FALSE;
if(mask == MASK_ALT)
{
if (KEY_RETURN == key )
{
expandConversation();
handled = TRUE;
}
if ((KEY_DOWN == key ) || (KEY_RIGHT == key))
{
selectNextorPreviousConversation(true);
handled = TRUE;
}
if ((KEY_UP == key) || (KEY_LEFT == key))
{
selectNextorPreviousConversation(false);
handled = TRUE;
}
}
return TRUE;
return handled;
}
bool LLFloaterIMContainer::selectAdjacentConversation(bool focus_selected)

View File

@ -195,6 +195,8 @@ public:
bool isScrolledOutOfSight(LLConversationViewSession* conversation_item_widget);
boost::signals2::connection mMicroChangedSignal;
S32 getConversationListItemSize() { return mConversationsWidgets.size(); }
typedef std::list<LLFloater*> floater_list_t;
void getDetachedConversationFloaters(floater_list_t& floaters);
private:
LLConversationViewSession* createConversationItemWidget(LLConversationItem* item);

View File

@ -568,7 +568,10 @@ void LLFloaterIMNearbyChat::sendChat( EChatType type )
if (0 == channel)
{
// discard returned "found" boolean
LLGestureMgr::instance().triggerAndReviseString(utf8text, &utf8_revised_text);
if(!LLGestureMgr::instance().triggerAndReviseString(utf8text, &utf8_revised_text))
{
utf8_revised_text = utf8text;
}
}
else
{
@ -582,7 +585,6 @@ void LLFloaterIMNearbyChat::sendChat( EChatType type )
if (!utf8_revised_text.empty())
{
// Chat with animation
utf8_revised_text = utf8text;
sendChatFromViewer(utf8_revised_text, type, TRUE);
}
}

View File

@ -469,7 +469,10 @@ void LLFloaterIMSession::addP2PSessionParticipants(const LLSD& notification, con
temp_ids.insert(temp_ids.end(), uuids.begin(), uuids.end());
// then we can close the current session
onClose(false);
if(findInstance(mSessionID))
{
onClose(false);
}
// we start a new session so reset the initialization flag
mSessionInitialized = false;

View File

@ -212,7 +212,7 @@ void LLFloaterIMSessionTab::assignResizeLimits()
mRightPartPanel->setIgnoreReshape(is_participants_pane_collapsed);
S32 participants_pane_target_width = is_participants_pane_collapsed?
0 : (mParticipantListPanel->getRect().getWidth() + LLPANEL_BORDER_WIDTH);
0 : (mParticipantListPanel->getRect().getWidth() + mParticipantListAndHistoryStack->getPanelSpacing());
S32 new_min_width = participants_pane_target_width + mRightPartPanel->getExpandedMinDim() + mFloaterExtraWidth;
@ -1083,21 +1083,26 @@ void LLFloaterIMSessionTab::saveCollapsedState()
}
BOOL LLFloaterIMSessionTab::handleKeyHere(KEY key, MASK mask )
{
BOOL handled = FALSE;
if(mask == MASK_ALT)
{
LLFloaterIMContainer* floater_container = LLFloaterIMContainer::getInstance();
if (KEY_RETURN == key && !isTornOff())
{
floater_container->expandConversation();
handled = TRUE;
}
if ((KEY_UP == key) || (KEY_LEFT == key))
{
floater_container->selectNextorPreviousConversation(false);
handled = TRUE;
}
if ((KEY_DOWN == key ) || (KEY_RIGHT == key))
{
floater_container->selectNextorPreviousConversation(true);
handled = TRUE;
}
}
return TRUE;
return handled;
}

View File

@ -1798,6 +1798,7 @@ void LLViewerWindow::initBase()
// Constrain floaters to inside the menu and status bar regions.
gFloaterView = main_view->getChild<LLFloaterView>("Floater View");
gFloaterView->setFloaterSnapView(main_view->getChild<LLView>("floater_snap_region")->getHandle());
gSnapshotFloaterView = main_view->getChild<LLSnapshotFloaterView>("Snapshot Floater View");
// Console

View File

@ -864,4 +864,19 @@
<color
name="blue"
value="0 0 1 1"/>
<!--Resize bar colors -->
<color
name="ResizebarBorderLight"
value="0.231 0.231 0.231 1"/>
<color
name="ResizebarBorderDark"
value="0.133 0.133 0.133 1"/>
<color
name="ResizebarBody"
value="0.208 0.208 0.208 1"/>
</colors>

View File

@ -776,4 +776,7 @@ with the same filename but different name
<texture name="Popup_Caution" file_name="icons/pop_up_caution.png"/>
<texture name="Camera_Drag_Dot" file_name="world/CameraDragDot.png"/>
<texture name="NavBar Separator" file_name="navbar/separator.png"/>
<texture name="Horizontal Drag Handle" file_name="widgets/horizontal_drag_handle.png"/>
<texture name="Vertical Drag Handle" file_name="widgets/vertical_drag_handle.png"/>
</textures>

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 B

View File

@ -25,23 +25,27 @@
<layout_stack
animate="true"
bottom="-1"
drag_handle_gap="6"
drag_handle_first_indent="27"
drag_handle_second_indent="10"
follows="all"
layout="topleft"
left="0"
name="conversations_stack"
orientation="horizontal"
right="-1"
show_drag_handle="true"
top="0">
<layout_panel
auto_resize="false"
user_resize="true"
name="conversations_layout_panel"
min_dim="38"
expanded_min_dim="156">
expanded_min_dim="136">
<layout_stack
animate="false"
follows="left|top|right"
height="35"
height="27"
layout="topleft"
left="0"
name="conversations_pane_buttons_stack"
@ -50,7 +54,6 @@
top="0">
<layout_panel
auto_resize="true"
height="35"
name="conversations_pane_buttons_expanded">
<menu_button
follows="top|left"
@ -64,7 +67,7 @@
left="5"
name="sort_btn"
tool_tip="View/sort options"
top="5"
top="1"
width="31" />
<button
follows="top|left"
@ -74,7 +77,7 @@
image_selected="Toolbar_Middle_Selected"
image_unselected="Toolbar_Middle_Off"
layout="topleft"
top="5"
top="1"
left_pad="2"
name="add_btn"
tool_tip="Start a new conversation"
@ -87,7 +90,7 @@
image_selected="Toolbar_Middle_Selected"
image_unselected="Toolbar_Middle_Off"
layout="topleft"
top="5"
top="1"
left_pad="2"
name="speak_btn"
tool_tip="Speak with people using your microphone"
@ -95,9 +98,8 @@
</layout_panel>
<layout_panel
auto_resize="false"
height="35"
name="conversations_pane_buttons_collapsed"
width="41">
width="31">
<button
follows="right|top"
height="25"
@ -106,8 +108,8 @@
image_selected="Toolbar_Middle_Selected"
image_unselected="Toolbar_Middle_Off"
layout="topleft"
top="5"
left="1"
top="1"
left="0"
name="expand_collapse_btn"
tool_tip="Collapse/Expand this list"
width="31" />
@ -119,7 +121,7 @@
layout="topleft"
name="conversations_list_panel"
opaque="true"
top="35"
top_pad="0"
left="5"
right="-1"/>
</layout_panel>
@ -127,7 +129,7 @@
auto_resize="true"
user_resize="true"
name="messages_layout_panel"
expanded_min_dim="222">
expanded_min_dim="232">
<panel_container
bottom="-1"
follows="all"
@ -136,44 +138,44 @@
name="im_box_tab_container"
right="-1"
top="0">
<panel
bottom="-1"
follows="all"
layout="topleft"
name="stub_panel"
opaque="true"
top_pad="0"
left="0"
right="-1">
<button
follows="right|top"
height="25"
image_hover_unselected="Toolbar_Middle_Over"
image_overlay="Conv_toolbar_collapse"
image_selected="Toolbar_Middle_Selected"
image_unselected="Toolbar_Middle_Off"
<panel
bottom="-1"
follows="all"
layout="topleft"
top="5"
right="-10"
name="stub_collapse_btn"
tool_tip="Collapse this pane"
width="31" />
<text
type="string"
clip_partial="false"
follows="left|top|right"
layout="topleft"
left="15"
right="-15"
name="stub_textbox"
top="25"
height="40"
valign="center"
parse_urls="true"
wrap="true">
This conversation is in a separate window. [secondlife:/// Bring it back.]
</text>
</panel>
name="stub_panel"
opaque="true"
top_pad="0"
left="0"
right="-1">
<button
follows="right|top"
height="25"
image_hover_unselected="Toolbar_Middle_Over"
image_overlay="Conv_toolbar_collapse"
image_selected="Toolbar_Middle_Selected"
image_unselected="Toolbar_Middle_Off"
layout="topleft"
top="1"
right="-10"
name="stub_collapse_btn"
tool_tip="Collapse this pane"
width="31" />
<text
type="string"
clip_partial="false"
follows="left|top|right"
layout="topleft"
left="15"
right="-15"
name="stub_textbox"
top="25"
height="40"
valign="center"
parse_urls="true"
wrap="true">
This conversation is in a separate window. [secondlife:/// Bring it back.]
</text>
</panel>
</panel_container>
</layout_panel>
</layout_stack>

View File

@ -70,27 +70,23 @@
top="0"
left="0"
right="-1"
bottom="-3">
bottom="-1">
<layout_stack
animate="false"
bottom="-1"
default_tab_group="2"
follows="all"
right="-5"
bottom="-1"
top="0"
left="3"
border_size="0"
layout="topleft"
orientation="vertical"
name="main_stack"
tab_group="1">
right="-3"
orientation="vertical"
tab_group="1"
top="0">
<layout_panel
auto_resize="false"
user_resize="false"
name="toolbar_panel"
height="35"
right="-1"
left="1">
height="25">
<menu_button
menu_filename="menu_im_session_showmodes.xml"
follows="top|left"
@ -103,7 +99,7 @@
left="5"
name="view_options_btn"
tool_tip="View/sort options"
top="5"
top="1"
width="31" />
<menu_button
menu_filename="menu_im_conversation.xml"
@ -114,7 +110,7 @@
image_selected="Toolbar_Middle_Selected"
image_unselected="Toolbar_Middle_Off"
layout="topleft"
top="5"
top="1"
left_pad="2"
name="gear_btn"
visible="false"
@ -129,7 +125,7 @@
image_selected="Toolbar_Middle_Selected"
image_unselected="Toolbar_Middle_Off"
layout="topleft"
top="5"
top="1"
left_pad="2"
name="add_btn"
tool_tip="Add someone to this conversation"
@ -142,7 +138,7 @@
image_selected="Toolbar_Middle_Selected"
image_unselected="Toolbar_Middle_Off"
layout="topleft"
top="5"
top="1"
left_pad="2"
name="voice_call_btn"
tool_tip="Open voice connection"
@ -167,8 +163,8 @@
image_selected="Toolbar_Middle_Selected"
image_unselected="Toolbar_Middle_Off"
layout="topleft"
top="5"
right="-67"
top="1"
right="-70"
name="close_btn"
tool_tip="End this conversation"
width="31" />
@ -180,7 +176,7 @@
image_selected="Toolbar_Middle_Selected"
image_unselected="Toolbar_Middle_Off"
layout="topleft"
top="5"
top="1"
left_pad="2"
name="expand_collapse_btn"
tool_tip="Collapse/Expand this pane"
@ -195,20 +191,21 @@
layout="topleft"
left_pad="2"
name="tear_off_btn"
top="5"
top="1"
width="31" />
</layout_panel>
<layout_panel
name="body_panel"
top="1"
bottom="-1"
auto_resize="true"
user_resize="false">
height="235">
<layout_stack
default_tab_group="2"
drag_handle_gap="6"
drag_handle_first_indent="0"
drag_handle_second_indent="1"
follows="all"
orientation="horizontal"
name="im_panels"
show_drag_handle="true"
tab_group="1"
top="0"
right="-1"
@ -220,14 +217,12 @@
min_dim="0"
width="150"
user_resize="true"
auto_resize="false"
bottom="-1" />
auto_resize="false" />
<layout_panel
default_tab_group="3"
tab_group="2"
name="right_part_holder"
min_width="221"
bottom="-1">
min_width="221">
<layout_stack
animate="true"
default_tab_group="2"
@ -236,7 +231,7 @@
name="translate_and_chat_stack"
tab_group="1"
top="0"
left="0"
left="1"
right="-1"
bottom="-1">
<layout_panel
@ -262,7 +257,7 @@
parse_highlights="true"
parse_urls="true"
right="-1"
left="5"
left="0"
top="0"
bottom="-1" />
</layout_panel>
@ -271,12 +266,8 @@
</layout_stack>
</layout_panel>
<layout_panel
top_delta="0"
top="0"
height="30"
bottom="-1"
height="35"
auto_resize="false"
user_resize="false"
name="chat_layout_panel">
<layout_stack
animate="false"
@ -285,15 +276,11 @@
orientation="horizontal"
name="input_panels"
top="0"
bottom="-2"
bottom="-1"
left="0"
right="-1">
<layout_panel
name="input_editor_layout_panel"
auto_resize="true"
user_resize="false"
top="0"
bottom="-1">
name="input_editor_layout_panel">
<chat_editor
layout="topleft"
expand_lines_count="5"
@ -306,32 +293,27 @@
max_length="1023"
spellcheck="true"
tab_group="3"
top="1"
bottom="-2"
left="4"
right="-4"
bottom="-8"
left="5"
right="-5"
wrap="true" />
</layout_panel>
<layout_panel
auto_resize="false"
user_resize="false"
name="input_button_layout_panel"
width="30"
top="0"
bottom="-1">
width="32">
<button
layout="topleft"
left="1"
right="-1"
top="1"
height="22"
top="4"
height="25"
follows="left|right|top"
image_hover_unselected="Toolbar_Middle_Over"
image_overlay="Conv_expand_one_line"
image_selected="Toolbar_Middle_Selected"
image_unselected="Toolbar_Middle_Off"
name="minz_btn"
tool_tip="Shows/hides message panel" />
tool_tip="Shows/hides message panel"
width="28" />
</layout_panel>
</layout_stack>
</layout_panel>