User: hr Date: 2006/08/15 03:49:14 Modified: dba/dbaccess/source/ui/browser/brwctrlr.cxx
Log: INTEGRATION: CWS dba30 (1.89.16); FILE MERGED 2006/07/19 12:38:38 fs 1.89.16.4: RESYNC: (1.91-1.93); FILE MERGED 2006/04/20 06:48:12 oj 1.89.16.3: RESYNC: (1.90-1.91); FILE MERGED 2006/03/21 18:29:03 fs 1.89.16.2: RESYNC: (1.89-1.90); FILE MERGED 2005/12/15 08:56:51 fs 1.89.16.1: refined the clipboard handling, to removed potential problems found during #124875# File Changes: Directory: /dba/dbaccess/source/ui/browser/ =========================================== File [changed]: brwctrlr.cxx Url: http://dba.openoffice.org/source/browse/dba/dbaccess/source/ui/browser/brwctrlr.cxx?r1=1.93&r2=1.94 Delta lines: +21 -12 --------------------- --- brwctrlr.cxx 10 Jul 2006 15:23:44 -0000 1.93 +++ brwctrlr.cxx 15 Aug 2006 10:49:12 -0000 1.94 @@ -526,6 +526,7 @@ ,m_bLoadCanceled( sal_False ) ,m_bClosingKillOpen( sal_False ) ,m_bErrorOccured( sal_False ) + ,m_pClipbordNotifier( NULL ) { DBG_CTOR(SbaXDataBrowserController,NULL); @@ -537,6 +538,9 @@ m_xFormControllerImpl->setDelegator(*this); } ::comphelper::decrement(m_refCount); + + m_aInvalidateClipboard.SetTimeoutHdl(LINK(this, SbaXDataBrowserController, OnInvalidateClipboard)); + m_aInvalidateClipboard.SetTimeout(300); } //------------------------------------------------------------------------------ @@ -1215,7 +1219,7 @@ removeModelListeners(getControlModel()); - if ( getView() ) + if ( getView() && m_pClipbordNotifier ) { m_pClipbordNotifier->ClearCallbackLink(); m_pClipbordNotifier->AddRemoveListener( getView(), sal_False ); @@ -1274,8 +1278,8 @@ // start the clipboard timer if (getBrowserView() && getBrowserView()->getVclControl() && !m_aInvalidateClipboard.IsActive()) { - m_aInvalidateClipboard.SetTimeout(300); m_aInvalidateClipboard.Start(); + OnInvalidateClipboard( NULL ); } break; case ::com::sun::star::frame::FrameAction_FRAME_DEACTIVATING: @@ -1285,7 +1289,7 @@ if (getBrowserView() && getBrowserView()->getVclControl() && m_aInvalidateClipboard.IsActive()) { m_aInvalidateClipboard.Stop(); - LINK(this, SbaXDataBrowserController, OnInvalidateClipboard).Call(NULL); + OnInvalidateClipboard( NULL ); } // remove the "get cell focus"-event m_aAsyncGetCellFocus.CancelCall(); @@ -2171,29 +2175,38 @@ //------------------------------------------------------------------------------ void SbaXDataBrowserController::CellActivated() { - m_aInvalidateClipboard.SetTimeout(300); m_aInvalidateClipboard.Start(); + OnInvalidateClipboard( NULL ); } //------------------------------------------------------------------------------ void SbaXDataBrowserController::CellDeactivated() { m_aInvalidateClipboard.Stop(); - LINK(this, SbaXDataBrowserController, OnInvalidateClipboard).Call(NULL); + OnInvalidateClipboard( NULL ); } //------------------------------------------------------------------------------ IMPL_LINK( SbaXDataBrowserController, OnClipboardChanged, void*, EMPTYARG ) { + ::vos::OGuard aGuard(Application::GetSolarMutex()); return OnInvalidateClipboard( NULL ); } //------------------------------------------------------------------------------ -IMPL_LINK(SbaXDataBrowserController, OnInvalidateClipboard, void*, EMPTYARG) +IMPL_LINK(SbaXDataBrowserController, OnInvalidateClipboard, AutoTimer*, _pTimer) { InvalidateFeature(ID_BROWSER_CUT); InvalidateFeature(ID_BROWSER_COPY); + + // if the invalidation was triggered by the timer, we do not need to invalidate PASTE. + // The timer is only for checking the CUT/COPY slots regulariry, which depend on the + // selection state of the active cell + // TODO: get a callback at the Edit which allows to be notified when the selection + // changes. This would be much better than this cycle-eating polling mechanism here .... + if ( _pTimer != &m_aInvalidateClipboard ) InvalidateFeature(ID_BROWSER_PASTE); + return 0L; } @@ -2477,10 +2490,6 @@ // ------------------------------- InvalidateAll(); - - // ------------------------------- - // start the clipboard invalidator - m_aInvalidateClipboard.SetTimeoutHdl(LINK(this, SbaXDataBrowserController, OnInvalidateClipboard)); m_aAsyncGetCellFocus.Call(); } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
