Tag: cws_dev300_odbmacros3 User: fs Date: 2008-07-29 20:22:48+0000 Modified: dba/dbaccess/source/ui/misc/controllerframe.cxx
Log: #i76128# notify OnFocus/OnOnfocus events File Changes: Directory: /dba/dbaccess/source/ui/misc/ ======================================== File [changed]: controllerframe.cxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/ui/misc/controllerframe.cxx?r1=1.3&r2=1.3.2.1 Delta lines: +47 -2 -------------------- --- controllerframe.cxx 2008-04-10 16:04:43+0000 1.3 +++ controllerframe.cxx 2008-07-29 20:22:45+0000 1.3.2.1 @@ -7,7 +7,7 @@ * OpenOffice.org - a multi-platform office productivity suite * * $RCSfile: controllerframe.cxx,v $ - * $Revision: 1.3 $ + * $Revision: 1.3.2.1 $ * * This file is part of OpenOffice.org. * @@ -36,6 +36,8 @@ #include <com/sun/star/awt/XTopWindow.hpp> #include <com/sun/star/awt/XWindow2.hpp> #include <com/sun/star/lang/DisposedException.hpp> +#include <com/sun/star/document/XDocumentEventBroadcaster.hpp> +#include <com/sun/star/frame/XController2.hpp> /** === end UNO includes === **/ #include <cppuhelper/implbase1.hxx> @@ -66,6 +68,7 @@ using ::com::sun::star::frame::FrameAction_FRAME_UI_DEACTIVATING; using ::com::sun::star::frame::XModel; using ::com::sun::star::frame::XController; + using ::com::sun::star::frame::XController2; using ::com::sun::star::frame::XFramesSupplier; using ::com::sun::star::sdb::XOfficeDatabaseDocument; using ::com::sun::star::awt::XTopWindow; @@ -73,6 +76,7 @@ using ::com::sun::star::awt::XWindow2; using ::com::sun::star::lang::DisposedException; using ::com::sun::star::lang::EventObject; + using ::com::sun::star::document::XDocumentEventBroadcaster; /** === end UNO using === **/ //==================================================================== @@ -118,6 +122,7 @@ ControllerFrame_Data( IController& _rController ) :m_rController( _rController ) ,m_xFrame() + ,m_xDocEventBroadcaster() ,m_pListener() ,m_bActive( false ) { @@ -125,6 +130,7 @@ IController& m_rController; Reference< XFrame > m_xFrame; + Reference< XDocumentEventBroadcaster > m_xDocEventBroadcaster; ::rtl::Reference< FrameWindowActivationListener > m_pListener; bool m_bActive; }; @@ -141,11 +147,26 @@ _rData.m_pListener->dispose(); _rData.m_pListener = NULL; } + // remember new frame _rData.m_xFrame = _rxFrame; + // create new listener if ( _rData.m_xFrame.is() ) _rData.m_pListener = new FrameWindowActivationListener( _rData ); + + // at this point in time, we can assume the controller also has a model set, if it supports models + try + { + Reference< XController > xController( _rData.m_rController.getXController(), UNO_SET_THROW ); + Reference< XModel > xModel( xController->getModel() ); + if ( xModel.is() ) + _rData.m_xDocEventBroadcaster.set( xModel, UNO_QUERY_THROW ); + } + catch( const Exception& ) + { + DBG_UNHANDLED_EXCEPTION(); + } } //-------------------------------------------------------------------- @@ -204,6 +225,26 @@ } //-------------------------------------------------------------------- + /** broadcasts the OnFocus resp. OnUnfocus event + */ + static void lcl_notifyFocusChange_nothrow( ControllerFrame_Data& _rData, bool _bActive ) + { + try + { + if ( _rData.m_xDocEventBroadcaster.is() ) + { + ::rtl::OUString sEventName( ::rtl::OUString::createFromAscii( _bActive ? "OnFocus" : "OnUnfocus" ) ); + Reference< XController2 > xController( _rData.m_rController.getXController(), UNO_QUERY_THROW ); + _rData.m_xDocEventBroadcaster->notifyDocumentEvent( sEventName, xController, Any() ); + } + } + catch( const Exception& ) + { + DBG_UNHANDLED_EXCEPTION(); + } + } + + //-------------------------------------------------------------------- static void lcl_updateActive_nothrow( ControllerFrame_Data& _rData, bool _bActive ) { if ( _rData.m_bActive == _bActive ) @@ -211,6 +252,7 @@ _rData.m_bActive = _bActive; lcl_updateActiveComponents_nothrow( _rData ); + lcl_notifyFocusChange_nothrow( _rData, _bActive ); } //-------------------------------------------------------------------- @@ -335,7 +377,10 @@ // update active component if ( m_pData->m_bActive ) + { lcl_updateActiveComponents_nothrow( *m_pData ); + lcl_notifyFocusChange_nothrow( *m_pData, true ); + } return m_pData->m_xFrame; } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
