diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index 46576ba79..3a47db9e6 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -562,7 +562,7 @@ void LLMenuItemGL::draw( void ) } if( !mDrawBranchLabel.empty() ) { - mFont->render( mDrawBranchLabel.getWString(), 0, (F32)getRect().mRight - (F32)RIGHT_PAD_PIXELS, ((F32)MENU_ITEM_PADDING / 2.f) + 1.f, color, + mFont->render( mDrawBranchLabel.getWString(), 0, (F32)getRect().mRight - (F32)RIGHT_PAD_PIXELS, ((F32)MENU_ITEM_PADDING / 2.f) + 1.f, (!getEnabled() || getHighlight()) ? color : color % .7f, LLFontGL::RIGHT, LLFontGL::BOTTOM, mStyle, font_shadow, S32_MAX, S32_MAX, NULL, FALSE ); } } @@ -1494,7 +1494,9 @@ void LLMenuItemBranchGL::openMenu() S32 delta_x = 0; S32 delta_y = 0; branch->localPointToOtherView( 0, 0, &x, &y, branch->getParent() ); - if( y < menu_region_rect.mBottom ) + + F32 center_y = top - (getRect().getHeight() / 2.f); + if( y < menu_region_rect.mBottom && center_y <= menu_region_rect.getCenterY()) { // open upwards if menu extends past bottom // adjust by the height of the menu item branch since it is a submenu @@ -1827,6 +1829,7 @@ LLMenuGL::LLMenuGL( const std::string& name, const std::string& label ) : LLUICtrl( name, LLRect(), FALSE, NULL, NULL ), mBackgroundColor( sDefaultBackgroundColor ), mBgVisible( TRUE ), + mHasSelection( FALSE ), mLabel( label ), mDropShadowed( TRUE ), mHorizontalLayout( FALSE ), @@ -1852,6 +1855,7 @@ LLMenuGL::LLMenuGL( const std::string& label) : LLUICtrl( label, LLRect(), FALSE, NULL, NULL ), mBackgroundColor( sDefaultBackgroundColor ), mBgVisible( TRUE ), + mHasSelection( FALSE ), mLabel( label ), mDropShadowed( TRUE ), mHorizontalLayout( FALSE ), @@ -2484,9 +2488,9 @@ void LLMenuGL::arrange( void ) } } - setRect(LLRect(getRect().mLeft, getRect().mBottom + height, getRect().mLeft + width, getRect().mBottom)); - S32 cur_height = (S32)llmin(max_height, height); + setRect(LLRect(getRect().mLeft, getRect().mTop, getRect().mLeft + width, getRect().mTop - cur_height)); + S32 cur_width = 0; S32 offset = 0; item_list_t::iterator item_iter; @@ -2540,6 +2544,7 @@ void LLMenuGL::createSpilloverBranch() mSpilloverMenu->updateParent(LLMenuGL::sMenuContainer); // Inherit colors mSpilloverMenu->setBackgroundColor( mBackgroundColor ); + mSpilloverMenu->setCanTearOff(FALSE); mSpilloverBranch = new LLMenuItemBranchGL(std::string("More"), std::string("More"), mSpilloverMenu->getHandle()); mSpilloverBranch->setFontStyle(LLFontGL::ITALIC); @@ -3055,11 +3060,11 @@ BOOL LLMenuGL::handleHover( S32 x, S32 y, MASK mask ) // don't change menu focus unless mouse is moving or alt key is not held down if ((llabs(mMouseVelX) > 0 || - llabs(mMouseVelY) > 0) && + llabs(mMouseVelY) > 0) /*&& (!mHasSelection || - //(mouse_delta_x == 0 && mouse_delta_y == 0) || + (mouse_delta_x == 0 && mouse_delta_y == 0) || (mMouseVelX < 0) || - llabs((F32)mMouseVelY) / llabs((F32)mMouseVelX) > MAX_MOUSE_SLOPE_SUB_MENU)) + llabs((F32)mMouseVelY) / llabs((F32)mMouseVelX) > MAX_MOUSE_SLOPE_SUB_MENU)*/) { for ( child_list_const_iter_t child_it = getChildList()->begin(); child_it != getChildList()->end(); ++child_it) { diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp index 01bed1d94..059f6a444 100644 --- a/indra/llui/llscrolllistctrl.cpp +++ b/indra/llui/llscrolllistctrl.cpp @@ -641,6 +641,7 @@ LLScrollListCtrl::LLScrollListCtrl(const std::string& name, const LLRect& rect, : LLUICtrl(name, rect, TRUE, commit_callback, callback_user_data), mLineHeight(0), mScrollLines(0), + mMouseWheelOpaque(true), mPageLines(0), mHeadingHeight(20), mMaxSelectable(0), @@ -1950,6 +1951,12 @@ BOOL LLScrollListCtrl::handleScrollWheel(S32 x, S32 y, S32 clicks) BOOL handled = FALSE; // Pretend the mouse is over the scrollbar handled = mScrollbar->handleScrollWheel( 0, 0, clicks ); + + if (mMouseWheelOpaque) + { + return TRUE; + } + return handled; } @@ -2842,6 +2849,8 @@ LLXMLNodePtr LLScrollListCtrl::getXML(bool save_children) const node->createChild("draw_stripes", TRUE)->setBoolValue(mDrawStripes); node->createChild("column_padding", TRUE)->setIntValue(mColumnPadding); + + node->createChild("mouse_wheel_opaque", TRUE)->setBoolValue(mMouseWheelOpaque); addColorXML(node, mBgWriteableColor, "bg_writeable_color", "ScrollBgWriteableColor"); addColorXML(node, mBgReadOnlyColor, "bg_read_only_color", "ScrollBgReadOnlyColor"); @@ -2969,6 +2978,9 @@ LLView* LLScrollListCtrl::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFac BOOL sort_ascending = TRUE; node->getAttributeBOOL("sort_ascending", sort_ascending); + + BOOL mouse_wheel_opaque = TRUE; + node->getAttributeBOOL("mouse_wheel_opaque", mouse_wheel_opaque); LLUICtrlCallback callback = NULL; @@ -2993,6 +3005,8 @@ LLView* LLScrollListCtrl::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFac scroll_list->initFromXML(node, parent); scroll_list->setSearchColumn(search_column); + + scroll_list->mMouseWheelOpaque = mouse_wheel_opaque; LLSD columns; S32 index = 0; diff --git a/indra/llui/llscrolllistctrl.h b/indra/llui/llscrolllistctrl.h index 10b7e13a2..ada8032f1 100644 --- a/indra/llui/llscrolllistctrl.h +++ b/indra/llui/llscrolllistctrl.h @@ -671,6 +671,7 @@ private: BOOL mCommitOnSelectionChange; BOOL mSelectionChanged; BOOL mNeedsScroll; + BOOL mMouseWheelOpaque; BOOL mCanSelect; BOOL mDisplayColumnHeaders; BOOL mColumnsDirty; diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index e9f6da192..c0751eb7a 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -898,6 +898,7 @@ void init_client_menu(LLMenuGL* menu) { // *TODO: Translate LLMenuGL* sub = new LLMenuGL("Consoles"); + sub->setCanTearOff(TRUE); menu->addChild(sub); sub->addChild(new LLMenuItemCheckGL("Frame Console", &toggle_visibility, @@ -978,6 +979,7 @@ void init_client_menu(LLMenuGL* menu) sub_menu = new LLMenuGL("HUD Info"); { + sub_menu->setCanTearOff(TRUE); sub_menu->addChild(new LLMenuItemCheckGL("Velocity", &toggle_visibility, NULL, @@ -1039,10 +1041,12 @@ void init_client_menu(LLMenuGL* menu) menu->addSeparator(); sub_menu = new LLMenuGL("Rendering"); + sub_menu->setCanTearOff(TRUE); init_debug_rendering_menu(sub_menu); menu->addChild(sub_menu); sub_menu = new LLMenuGL("World"); + sub_menu->setCanTearOff(TRUE); init_debug_world_menu(sub_menu); menu->addChild(sub_menu); @@ -1051,6 +1055,7 @@ void init_client_menu(LLMenuGL* menu) if (rlv_handler_t::isEnabled()) { sub_menu = new LLMenuGL("RLVa"); + sub_menu->setCanTearOff(TRUE); init_debug_rlva_menu(sub_menu); menu->addChild(sub_menu); sub_menu->setVisible(rlv_handler_t::isEnabled()); @@ -1060,20 +1065,24 @@ void init_client_menu(LLMenuGL* menu) // [/RLVa:KB] sub_menu = new LLMenuGL("UI"); + sub_menu->setCanTearOff(TRUE); init_debug_ui_menu(sub_menu); menu->addChild(sub_menu); sub_menu = new LLMenuGL("XUI"); + sub_menu->setCanTearOff(TRUE); init_debug_xui_menu(sub_menu); menu->addChild(sub_menu); sub_menu = new LLMenuGL("Character"); + sub_menu->setCanTearOff(TRUE); init_debug_avatar_menu(sub_menu); menu->addChild(sub_menu); { LLMenuGL* sub = NULL; sub = new LLMenuGL("Network"); + sub->setCanTearOff(TRUE); sub->addChild(new LLMenuItemCallGL("Enable Message Log", &handle_viewer_enable_message_log, NULL)); @@ -1105,6 +1114,7 @@ void init_client_menu(LLMenuGL* menu) { LLMenuGL* sub = NULL; sub = new LLMenuGL("Recorder"); + sub->setCanTearOff(TRUE); sub->addChild(new LLMenuItemCheckGL("Full Session Logging", &menu_toggle_control, NULL, &menu_check_control, (void*)"StatsSessionTrackFrameStats")); @@ -1126,6 +1136,7 @@ void init_client_menu(LLMenuGL* menu) { LLMenuGL* sub = NULL; sub = new LLMenuGL("Media"); + sub->setCanTearOff(TRUE); sub->addChild(new LLMenuItemCallGL("Reload MIME types", &LLMIMETypes::reload)); sub->addChild(new LLMenuItemCallGL("Web Browser Test", &handle_web_browser_test)); menu->addChild( sub ); @@ -1178,6 +1189,7 @@ void init_client_menu(LLMenuGL* menu) { LLMenuGL* sub = NULL; sub = new LLMenuGL("Debugging"); + sub->setCanTearOff(TRUE); #if LL_WINDOWS sub->addChild(new LLMenuItemCallGL("Force Breakpoint", &force_error_breakpoint, NULL, NULL, 'B', MASK_CONTROL | MASK_ALT)); #endif @@ -1324,6 +1336,7 @@ void init_debug_rendering_menu(LLMenuGL* menu) // Debug menu for types/pools // sub_menu = new LLMenuGL("Types"); + sub_menu->setCanTearOff(TRUE); menu->addChild(sub_menu); sub_menu->addChild(new LLMenuItemCheckGL("Simple", @@ -1382,6 +1395,7 @@ void init_debug_rendering_menu(LLMenuGL* menu) (void*)LLPipeline::RENDER_TYPE_BUMP, '\\', MASK_CONTROL|MASK_ALT|MASK_SHIFT)); sub_menu->createJumpKeys(); sub_menu = new LLMenuGL("Features"); + sub_menu->setCanTearOff(TRUE); menu->addChild(sub_menu); sub_menu->addChild(new LLMenuItemCheckGL("UI", &LLPipeline::toggleRenderDebugFeature, NULL, @@ -1422,6 +1436,7 @@ void init_debug_rendering_menu(LLMenuGL* menu) // Debug menu for info displays // sub_menu = new LLMenuGL("Info Displays"); + sub_menu->setCanTearOff(TRUE); menu->addChild(sub_menu); sub_menu->addChild(new LLMenuItemCheckGL("Verify", &LLPipeline::toggleRenderDebug, NULL, @@ -1501,6 +1516,7 @@ void init_debug_rendering_menu(LLMenuGL* menu) (void*)LLPipeline::RENDER_DEBUG_RENDER_COMPLEXITY)); ; sub_menu = new LLMenuGL("Render Tests"); + sub_menu->setCanTearOff(TRUE); sub_menu->addChild(new LLMenuItemCheckGL("Camera Offset", &menu_toggle_control, @@ -1590,7 +1606,7 @@ void init_debug_rendering_menu(LLMenuGL* menu) void init_debug_avatar_menu(LLMenuGL* menu) { LLMenuGL* sub_menu = new LLMenuGL("Character Tests"); - menu->addChild(sub_menu); + sub_menu->setCanTearOff(TRUE); sub_menu->addChild(new LLMenuItemToggleGL("Go Away/AFK When Idle", &gAllowIdleAFK)); @@ -1668,6 +1684,7 @@ void init_debug_rlva_menu(LLMenuGL* menu) // Debug options { LLMenuGL* pDbgMenu = new LLMenuGL("Debug"); + pDbgMenu->setCanTearOff(TRUE); if (gSavedSettings.controlExists(RLV_SETTING_DEBUG)) pDbgMenu->addChild(new LLMenuItemCheckGL("Show Debug Messages", menu_toggle_control, NULL, menu_check_control, (void*)RLV_SETTING_DEBUG));