[PATCH] Get rid of GlobalEditData::GetStdRefDevice()

Tor Lillqvist (via Code Review) gerrit at gerrit.libreoffice.org
Mon May 13 05:27:20 PDT 2013


Hi,

I have submitted a patch for review:

    https://gerrit.libreoffice.org/3886

To pull it, you can do:

    git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/86/3886/1

Get rid of GlobalEditData::GetStdRefDevice()

This avoids a crash on exit in a dbgutil build on OS X.

The horrible bOwnerOfRefDev crack screams out for boost::shared_ptr, I think?

Change-Id: Icf3ae3c28da0583a44472f36312b07766734bf7b
---
M editeng/source/editeng/eerdll.cxx
M editeng/source/editeng/eerdll2.hxx
M editeng/source/editeng/impedit2.cxx
3 files changed, 11 insertions(+), 24 deletions(-)



diff --git a/editeng/source/editeng/eerdll.cxx b/editeng/source/editeng/eerdll.cxx
index c6a008d..704573a 100644
--- a/editeng/source/editeng/eerdll.cxx
+++ b/editeng/source/editeng/eerdll.cxx
@@ -79,7 +79,6 @@
 }
 
 GlobalEditData::GlobalEditData()
-    : m_aStdRefDevice(::com::sun::star::uno::Reference<com::sun::star::lang::XComponent>(::comphelper::getProcessComponentContext(), ::com::sun::star::uno::UNO_QUERY_THROW))
 {
     ppDefItems = NULL;
 }
@@ -186,16 +185,6 @@
         xLanguageGuesser = linguistic2::LanguageGuessing::create( comphelper::getProcessComponentContext() );
     }
     return xLanguageGuesser;
-}
-
-OutputDevice* GlobalEditData::GetStdRefDevice()
-{
-    if ( !m_aStdRefDevice )
-    {
-        m_aStdRefDevice.reset(new VirtualDevice);
-        m_aStdRefDevice->SetMapMode( MAP_TWIP );
-    }
-    return m_aStdRefDevice.get();
 }
 
 EditResId::EditResId( sal_uInt16 nId ):
diff --git a/editeng/source/editeng/eerdll2.hxx b/editeng/source/editeng/eerdll2.hxx
index ae592c3..2c53b96 100644
--- a/editeng/source/editeng/eerdll2.hxx
+++ b/editeng/source/editeng/eerdll2.hxx
@@ -23,7 +23,6 @@
 #include <com/sun/star/linguistic2/XLanguageGuessing.hpp>
 #include <editeng/forbiddencharacterstable.hxx>
 #include <rtl/ref.hxx>
-#include <comphelper/scoped_disposing_ptr.hxx>
 
 class SfxPoolItem;
 
@@ -32,7 +31,6 @@
 private:
     ::com::sun::star::uno::Reference<
         ::com::sun::star::linguistic2::XLanguageGuessing >  xLanguageGuesser;
-    comphelper::scoped_disposing_solar_mutex_reset_ptr<OutputDevice> m_aStdRefDevice;
     SfxPoolItem**   ppDefItems;
 
     rtl::Reference<SvxForbiddenCharactersTable> xForbiddenCharsTable;
@@ -42,13 +40,11 @@
                     ~GlobalEditData();
 
     SfxPoolItem**   GetDefItems();
-    OutputDevice*   GetStdRefDevice();
 
     rtl::Reference<SvxForbiddenCharactersTable> GetForbiddenCharsTable();
     void            SetForbiddenCharsTable( rtl::Reference<SvxForbiddenCharactersTable> xForbiddenChars ) { xForbiddenCharsTable = xForbiddenChars; }
     ::com::sun::star::uno::Reference< ::com::sun::star::linguistic2::XLanguageGuessing > GetLanguageGuesser();
 };
-
 
 #endif //_EERDLL2_HXX
 
diff --git a/editeng/source/editeng/impedit2.cxx b/editeng/source/editeng/impedit2.cxx
index b46b23c..8bd7306 100644
--- a/editeng/source/editeng/impedit2.cxx
+++ b/editeng/source/editeng/impedit2.cxx
@@ -150,10 +150,8 @@
     aOnlineSpellTimer.SetTimeout( 100 );
     aOnlineSpellTimer.SetTimeoutHdl( LINK( this, ImpEditEngine, OnlineSpellHdl ) );
 
-    pRefDev             = EE_DLL().GetGlobalData()->GetStdRefDevice();
-
     // Access data already from here on!
-    SetRefDevice( pRefDev );
+    SetRefDevice( NULL );
     InitDoc( sal_False );
 
     bCallParaInsertedOrDeleted = true;
@@ -190,11 +188,16 @@
     if ( bOwnerOfRefDev )
         delete pRefDev;
 
-    pRefDev = pRef;
-    bOwnerOfRefDev = false;
-
     if ( !pRef )
-        pRefDev = EE_DLL().GetGlobalData()->GetStdRefDevice();
+    {
+        pRefDev = new VirtualDevice;
+        pRefDev->SetMapMode( MAP_TWIP );
+        bOwnerOfRefDev = true;
+    } else
+    {
+        pRefDev = pRef;
+        bOwnerOfRefDev = false;
+    }
 
     nOnePixelInRef = (sal_uInt16)pRefDev->PixelToLogic( Size( 1, 0 ) ).Width();
 
@@ -210,8 +213,7 @@
     if ( GetRefDevice()->GetMapMode() == rMapMode )
         return;
 
-    // When RefDev == GlobalRefDev => create own!
-    if ( !bOwnerOfRefDev && ( pRefDev == EE_DLL().GetGlobalData()->GetStdRefDevice() ) )
+    if ( !bOwnerOfRefDev )
     {
         pRefDev = new VirtualDevice;
         pRefDev->SetMapMode( MAP_TWIP );

-- 
To view, visit https://gerrit.libreoffice.org/3886
To unsubscribe, visit https://gerrit.libreoffice.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Icf3ae3c28da0583a44472f36312b07766734bf7b
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: master
Gerrit-Owner: Tor Lillqvist <tml at iki.fi>



More information about the LibreOffice mailing list