diff options
-rw-r--r-- | sc/inc/viewuno.hxx | 3 | ||||
-rw-r--r-- | sc/source/ui/unoobj/viewuno.cxx | 49 | ||||
-rw-r--r-- | vbahelper/source/msforms/vbacontrol.cxx | 3 |
3 files changed, 51 insertions, 4 deletions
diff --git a/sc/inc/viewuno.hxx b/sc/inc/viewuno.hxx index da2f96c152a4..64119793ee77 100644 --- a/sc/inc/viewuno.hxx +++ b/sc/inc/viewuno.hxx @@ -205,7 +205,8 @@ private: void EndMouseListening(); void StartActivationListening(); void EndActivationListening(); - + bool mbLeftMousePressed; + bool mbPendingSelectionChanged; ScTabViewObj(); // disabled public: ScTabViewObj(ScTabViewShell* pViewSh); diff --git a/sc/source/ui/unoobj/viewuno.cxx b/sc/source/ui/unoobj/viewuno.cxx index 22c0d9d791a3..7e9e1be6a09a 100644 --- a/sc/source/ui/unoobj/viewuno.cxx +++ b/sc/source/ui/unoobj/viewuno.cxx @@ -463,7 +463,9 @@ ScTabViewObj::ScTabViewObj( ScTabViewShell* pViewSh ) : aMouseClickHandlers( 0 ), aActivationListeners( 0 ), nPreviousTab( 0 ), - bDrawSelModeSet(false) + bDrawSelModeSet(false), + mbLeftMousePressed(false ), + mbPendingSelectionChanged(false) { if (pViewSh) nPreviousTab = pViewSh->GetViewData()->GetTabNo(); @@ -1184,13 +1186,17 @@ bool ScTabViewObj::IsMouseListening() const SCTAB nTab = pViewData->GetTabNo(); return pDoc->HasSheetEventScript( nTab, SC_SHEETEVENT_RIGHTCLICK, true ) || - pDoc->HasSheetEventScript( nTab, SC_SHEETEVENT_DOUBLECLICK, true ); + pDoc->HasSheetEventScript( nTab, SC_SHEETEVENT_DOUBLECLICK, true ) || + pDoc->HasSheetEventScript( nTab, SC_SHEETEVENT_SELECT, true ); + } sal_Bool ScTabViewObj::MousePressed( const awt::MouseEvent& e ) throw (::uno::RuntimeException) { sal_Bool bReturn(false); + if ( e.Buttons == ::com::sun::star::awt::MouseButton::LEFT ) + mbLeftMousePressed = true; uno::Reference< uno::XInterface > xTarget = GetClickedObject(Point(e.X, e.Y)); if (!aMouseClickHandlers.empty() && xTarget.is()) @@ -1281,6 +1287,26 @@ sal_Bool ScTabViewObj::MousePressed( const awt::MouseEvent& e ) sal_Bool ScTabViewObj::MouseReleased( const awt::MouseEvent& e ) throw (uno::RuntimeException) { + if ( e.Buttons == ::com::sun::star::awt::MouseButton::LEFT ) + { + try + { + mbPendingSelectionChanged = false; + ScTabViewShell* pViewSh = GetViewShell(); + ScViewData* pViewData = pViewSh->GetViewData(); + ScDocShell* pDocSh = pViewData->GetDocShell(); + ScDocument* pDoc = pDocSh->GetDocument(); + uno::Reference< script::vba::XVBAEventProcessor > xVbaEvents( pDoc->GetVbaEventProcessor(), uno::UNO_SET_THROW ); + uno::Sequence< uno::Any > aArgs( 1 ); + aArgs[ 0 ] <<= getSelection(); + xVbaEvents->processVbaEvent( ScSheetEvents::GetVbaSheetEventId( SC_SHEETEVENT_SELECT ), aArgs ); + } + catch( uno::Exception& ) + { + } + mbLeftMousePressed = false; + } + sal_Bool bReturn(false); if (!aMouseClickHandlers.empty()) @@ -1746,7 +1772,24 @@ void ScTabViewObj::SelectionChanged() /*ErrCode eRet =*/ pDocSh->CallXScript( *pScript, aParams, aRet, aOutArgsIndex, aOutArgs ); } } - // Removed Sun/Oracle code intentionally, it doesn't work properly ( selection should be fired after mouse release ) + if ( !mbLeftMousePressed ) // selection still in progress + { + mbPendingSelectionChanged = false; + try + { + uno::Reference< script::vba::XVBAEventProcessor > xVbaEvents( pDoc->GetVbaEventProcessor(), uno::UNO_SET_THROW ); + uno::Sequence< uno::Any > aArgs( 1 ); + aArgs[ 0 ] <<= getSelection(); + xVbaEvents->processVbaEvent( ScSheetEvents::GetVbaSheetEventId( SC_SHEETEVENT_SELECT ), aArgs ); + } + catch( uno::Exception& ) + { + } + } + else + { + mbPendingSelectionChanged = true; + } } diff --git a/vbahelper/source/msforms/vbacontrol.cxx b/vbahelper/source/msforms/vbacontrol.cxx index e9be0406615d..b788368b8df4 100644 --- a/vbahelper/source/msforms/vbacontrol.cxx +++ b/vbahelper/source/msforms/vbacontrol.cxx @@ -192,11 +192,14 @@ void SAL_CALL ScVbaControl::setEnabled( sal_Bool bVisible ) throw (uno::RuntimeE sal_Bool SAL_CALL ScVbaControl::getVisible() throw (uno::RuntimeException) { sal_Bool bVisible( sal_True ); + m_xProps->getPropertyValue ( "EnableVisible" ) >>= bVisible; uno::Reference< drawing::XControlShape > xControlShape( m_xControl, uno::UNO_QUERY ); if ( xControlShape.is() ) { + bool bEnableVisible = bVisible; uno::Reference< beans::XPropertySet > xProps( m_xControl, uno::UNO_QUERY_THROW ); xProps->getPropertyValue ( "Visible" ) >>= bVisible; + bVisible = bVisible && bEnableVisible; } else m_xProps->getPropertyValue ( "EnableVisible" ) >>= bVisible; |