Kaydet (Commit) a232712f authored tarafından Noel Grandin's avatar Noel Grandin

use rtl::Reference in ScSelectionTransferObj

instead of manual acquire/release

Change-Id: I056fc3767f2e7b3ffacdd930e9a8e3b71c32620e
üst 8abcd0c3
...@@ -141,9 +141,7 @@ ScSelectionTransferObj* ScSelectionTransferObj::CreateFromView( ScTabView* pView ...@@ -141,9 +141,7 @@ ScSelectionTransferObj* ScSelectionTransferObj::CreateFromView( ScTabView* pView
ScSelectionTransferObj::ScSelectionTransferObj( ScTabView* pSource, ScSelectionTransferMode eNewMode ) : ScSelectionTransferObj::ScSelectionTransferObj( ScTabView* pSource, ScSelectionTransferMode eNewMode ) :
pView( pSource ), pView( pSource ),
eMode( eNewMode ), eMode( eNewMode )
pCellData( nullptr ),
pDrawData( nullptr )
{ {
//! store range for StillValid //! store range for StillValid
} }
...@@ -168,16 +166,8 @@ void ScSelectionTransferObj::ForgetView() ...@@ -168,16 +166,8 @@ void ScSelectionTransferObj::ForgetView()
pView = nullptr; pView = nullptr;
eMode = SC_SELTRANS_INVALID; eMode = SC_SELTRANS_INVALID;
if (pCellData) mxCellData.clear();
{ mxDrawData.clear();
pCellData->release();
pCellData = nullptr;
}
if (pDrawData)
{
pDrawData->release();
pDrawData = nullptr;
}
} }
void ScSelectionTransferObj::AddSupportedFormats() void ScSelectionTransferObj::AddSupportedFormats()
...@@ -258,7 +248,7 @@ void ScSelectionTransferObj::AddSupportedFormats() ...@@ -258,7 +248,7 @@ void ScSelectionTransferObj::AddSupportedFormats()
void ScSelectionTransferObj::CreateCellData() void ScSelectionTransferObj::CreateCellData()
{ {
OSL_ENSURE( !pCellData, "CreateCellData twice" ); OSL_ENSURE( !mxCellData.is(), "CreateCellData twice" );
if ( pView ) if ( pView )
{ {
ScViewData& rViewData = pView->GetViewData(); ScViewData& rViewData = pView->GetViewData();
...@@ -306,19 +296,18 @@ void ScSelectionTransferObj::CreateCellData() ...@@ -306,19 +296,18 @@ void ScSelectionTransferObj::CreateCellData()
pTransferObj->SetDragSource( pDocSh, aNewMark ); pTransferObj->SetDragSource( pDocSh, aNewMark );
pCellData = pTransferObj; mxCellData = pTransferObj;
pCellData->acquire(); // keep ref count up - released in ForgetView
} }
else else
delete pClipDoc; delete pClipDoc;
} }
} }
OSL_ENSURE( pCellData, "can't create CellData" ); OSL_ENSURE( mxCellData.is(), "can't create CellData" );
} }
void ScSelectionTransferObj::CreateDrawData() void ScSelectionTransferObj::CreateDrawData()
{ {
OSL_ENSURE( !pDrawData, "CreateDrawData twice" ); OSL_ENSURE( !mxDrawData.is(), "CreateDrawData twice" );
if ( pView ) if ( pView )
{ {
// similar to ScDrawView::BeginDrag // similar to ScDrawView::BeginDrag
...@@ -356,27 +345,26 @@ void ScSelectionTransferObj::CreateDrawData() ...@@ -356,27 +345,26 @@ void ScSelectionTransferObj::CreateDrawData()
pTransferObj->SetDrawPersist( aPersistRef ); // keep persist for ole objects alive pTransferObj->SetDrawPersist( aPersistRef ); // keep persist for ole objects alive
pTransferObj->SetDragSource( pDrawView ); // copies selection pTransferObj->SetDragSource( pDrawView ); // copies selection
pDrawData = pTransferObj; mxDrawData = pTransferObj;
pDrawData->acquire(); // keep ref count up - released in ForgetView
} }
} }
OSL_ENSURE( pDrawData, "can't create DrawData" ); OSL_ENSURE( mxDrawData.is(), "can't create DrawData" );
} }
ScTransferObj* ScSelectionTransferObj::GetCellData() ScTransferObj* ScSelectionTransferObj::GetCellData()
{ {
if ( !pCellData && ( eMode == SC_SELTRANS_CELL || eMode == SC_SELTRANS_CELLS ) ) if ( !mxCellData.is() && ( eMode == SC_SELTRANS_CELL || eMode == SC_SELTRANS_CELLS ) )
CreateCellData(); CreateCellData();
return pCellData; return mxCellData.get();
} }
ScDrawTransferObj* ScSelectionTransferObj::GetDrawData() ScDrawTransferObj* ScSelectionTransferObj::GetDrawData()
{ {
if ( !pDrawData && ( eMode == SC_SELTRANS_DRAW_BITMAP || eMode == SC_SELTRANS_DRAW_GRAPHIC || if ( !mxDrawData.is() && ( eMode == SC_SELTRANS_DRAW_BITMAP || eMode == SC_SELTRANS_DRAW_GRAPHIC ||
eMode == SC_SELTRANS_DRAW_BOOKMARK || eMode == SC_SELTRANS_DRAW_OLE || eMode == SC_SELTRANS_DRAW_BOOKMARK || eMode == SC_SELTRANS_DRAW_OLE ||
eMode == SC_SELTRANS_DRAW_OTHER ) ) eMode == SC_SELTRANS_DRAW_OTHER ) )
CreateDrawData(); CreateDrawData();
return pDrawData; return mxDrawData.get();
} }
bool ScSelectionTransferObj::GetData( bool ScSelectionTransferObj::GetData(
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#define INCLUDED_SC_SOURCE_UI_INC_SELTRANS_HXX #define INCLUDED_SC_SOURCE_UI_INC_SELTRANS_HXX
#include <svtools/transfer.hxx> #include <svtools/transfer.hxx>
#include <rtl/ref.hxx>
class ScTabView; class ScTabView;
class ScTransferObj; class ScTransferObj;
...@@ -41,10 +42,10 @@ enum ScSelectionTransferMode ...@@ -41,10 +42,10 @@ enum ScSelectionTransferMode
class ScSelectionTransferObj : public TransferableHelper class ScSelectionTransferObj : public TransferableHelper
{ {
private: private:
ScTabView* pView; ScTabView* pView;
ScSelectionTransferMode eMode; ScSelectionTransferMode eMode;
ScTransferObj* pCellData; rtl::Reference<ScTransferObj> mxCellData;
ScDrawTransferObj* pDrawData; rtl::Reference<ScDrawTransferObj> mxDrawData;
ScSelectionTransferObj( ScTabView* pSource, ScSelectionTransferMode eNewMode ); ScSelectionTransferObj( ScTabView* pSource, ScSelectionTransferMode eNewMode );
void CreateCellData(); void CreateCellData();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment