diff options
| -rw-r--r-- | indra/llui/llbutton.cpp | 20 | ||||
| -rw-r--r-- | indra/llui/llbutton.h | 2 | ||||
| -rw-r--r-- | indra/llui/llspinctrl.cpp | 2 | 
3 files changed, 22 insertions, 2 deletions
| diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp index 0e59fdf519..8028f397f3 100644 --- a/indra/llui/llbutton.cpp +++ b/indra/llui/llbutton.cpp @@ -102,6 +102,7 @@ LLButton::Params::Params()  	scale_image("scale_image", true),  	hover_glow_amount("hover_glow_amount"),  	commit_on_return("commit_on_return", true), +    commit_on_capture_lost("commit_on_capture_lost", false),  	display_pressed_state("display_pressed_state", true),  	use_draw_context_alpha("use_draw_context_alpha", true),  	badge("badge"), @@ -165,6 +166,7 @@ LLButton::LLButton(const LLButton::Params& p)  	mBottomVPad(p.pad_bottom),  	mHoverGlowStrength(p.hover_glow_amount),  	mCommitOnReturn(p.commit_on_return), +    mCommitOnCaptureLost(p.commit_on_capture_lost),  	mFadeWhenDisabled(FALSE),  	mForcePressedState(false),  	mDisplayPressedState(p.display_pressed_state), @@ -475,6 +477,10 @@ BOOL LLButton::handleMouseUp(S32 x, S32 y, MASK mask)  	// We only handle the click if the click both started and ended within us  	if( hasMouseCapture() )  	{ +        // reset timers before focus change, to not cause +        // additional commits if mCommitOnCaptureLost. +        resetMouseDownTimer(); +  		// Always release the mouse  		gFocusMgr.setMouseCapture( NULL ); @@ -489,8 +495,6 @@ BOOL LLButton::handleMouseUp(S32 x, S32 y, MASK mask)  		// Regardless of where mouseup occurs, handle callback  		if(mMouseUpSignal) (*mMouseUpSignal)(this, LLSD()); -		resetMouseDownTimer(); -  		// DO THIS AT THE VERY END to allow the button to be destroyed as a result of being clicked.  		// If mouseup in the widget, it's been clicked  		if (pointInView(x, y)) @@ -1195,6 +1199,18 @@ void LLButton::setImageOverlay(const LLUUID& image_id, LLFontGL::HAlign alignmen  void LLButton::onMouseCaptureLost()  { +    if (mCommitOnCaptureLost +        && mMouseDownTimer.getStarted()) +    { +        if (mMouseUpSignal) (*mMouseUpSignal)(this, LLSD()); + +        if (mIsToggle) +        { +            toggleState(); +        } + +        LLUICtrl::onCommit(); +    }  	resetMouseDownTimer();  } diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h index 572d36996c..ccd31e90c0 100644 --- a/indra/llui/llbutton.h +++ b/indra/llui/llbutton.h @@ -124,6 +124,7 @@ public:  		Optional<bool>			is_toggle,  								scale_image,  								commit_on_return, +								commit_on_capture_lost,  								display_pressed_state;  		Optional<F32>				hover_glow_amount; @@ -374,6 +375,7 @@ protected:  	F32							mCurGlowStrength;  	bool						mCommitOnReturn; +    bool						mCommitOnCaptureLost;  	bool						mFadeWhenDisabled;  	bool						mForcePressedState;  	bool						mDisplayPressedState; diff --git a/indra/llui/llspinctrl.cpp b/indra/llui/llspinctrl.cpp index ee78b82429..ef7c8ec012 100644 --- a/indra/llui/llspinctrl.cpp +++ b/indra/llui/llspinctrl.cpp @@ -103,6 +103,7 @@ LLSpinCtrl::LLSpinCtrl(const LLSpinCtrl::Params& p)  	up_button_params.rect = LLRect(btn_left, getRect().getHeight(), btn_right, getRect().getHeight() - spinctrl_btn_height);  	up_button_params.click_callback.function(boost::bind(&LLSpinCtrl::onUpBtn, this, _2));  	up_button_params.mouse_held_callback.function(boost::bind(&LLSpinCtrl::onUpBtn, this, _2)); +    up_button_params.commit_on_capture_lost = true;  	mUpBtn = LLUICtrlFactory::create<LLButton>(up_button_params);  	addChild(mUpBtn); @@ -111,6 +112,7 @@ LLSpinCtrl::LLSpinCtrl(const LLSpinCtrl::Params& p)  	down_button_params.rect = LLRect(btn_left, getRect().getHeight() - spinctrl_btn_height, btn_right, getRect().getHeight() - 2 * spinctrl_btn_height);  	down_button_params.click_callback.function(boost::bind(&LLSpinCtrl::onDownBtn, this, _2));  	down_button_params.mouse_held_callback.function(boost::bind(&LLSpinCtrl::onDownBtn, this, _2)); +    down_button_params.commit_on_capture_lost = true;  	mDownBtn = LLUICtrlFactory::create<LLButton>(down_button_params);  	addChild(mDownBtn); | 
