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]

Reply via email to