summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--vcl/unx/source/gdi/gcach_xpeer.cxx48
-rw-r--r--vcl/unx/source/gdi/gcach_xpeer.hxx13
2 files changed, 43 insertions, 18 deletions
diff --git a/vcl/unx/source/gdi/gcach_xpeer.cxx b/vcl/unx/source/gdi/gcach_xpeer.cxx
index 8cbf67ffe6dc..5c6bf42885b5 100644
--- a/vcl/unx/source/gdi/gcach_xpeer.cxx
+++ b/vcl/unx/source/gdi/gcach_xpeer.cxx
@@ -649,27 +649,51 @@ X11GlyphCache::X11GlyphCache( X11GlyphPeer& rPeer )
// ---------------------------------------------------------------------------
-static X11GlyphPeer* pX11GlyphPeer = NULL;
-static X11GlyphCache* pX11GlyphCache = NULL;
+namespace
+{
+ struct GlyphCacheHolder
+ {
+ private:
+ X11GlyphPeer* m_pX11GlyphPeer;
+ X11GlyphCache* m_pX11GlyphCache;
+ public:
+ GlyphCacheHolder()
+ {
+ m_pX11GlyphPeer = new X11GlyphPeer();
+ m_pX11GlyphCache = new X11GlyphCache( *m_pX11GlyphPeer );
+ }
+ void release()
+ {
+ delete m_pX11GlyphCache;
+ delete m_pX11GlyphPeer;
+ m_pX11GlyphCache = NULL;
+ m_pX11GlyphPeer = NULL;
+ }
+ X11GlyphCache& getGlyphCache()
+ {
+ return *m_pX11GlyphCache;
+ }
+ ~GlyphCacheHolder()
+ {
+ release();
+ }
+ };
+}
+
+struct theGlyphCacheHolder :
+ public rtl::Static<GlyphCacheHolder, theGlyphCacheHolder>
+{};
X11GlyphCache& X11GlyphCache::GetInstance()
{
- if( !pX11GlyphCache )
- {
- pX11GlyphPeer = new X11GlyphPeer();
- pX11GlyphCache = new X11GlyphCache( *pX11GlyphPeer );
- }
- return *pX11GlyphCache;
+ return theGlyphCacheHolder::get().getGlyphCache();
}
// ---------------------------------------------------------------------------
void X11GlyphCache::KillInstance()
{
- delete pX11GlyphCache;
- delete pX11GlyphPeer;
- pX11GlyphCache = NULL;
- pX11GlyphPeer = NULL;
+ return theGlyphCacheHolder::get().release();
}
// ===========================================================================
diff --git a/vcl/unx/source/gdi/gcach_xpeer.hxx b/vcl/unx/source/gdi/gcach_xpeer.hxx
index b634659876bd..eeea6309dcf2 100644
--- a/vcl/unx/source/gdi/gcach_xpeer.hxx
+++ b/vcl/unx/source/gdi/gcach_xpeer.hxx
@@ -84,12 +84,13 @@ private:
class X11GlyphCache : public GlyphCache
{
public:
- X11GlyphPeer& GetPeer() { return reinterpret_cast<X11GlyphPeer&>( mrPeer ); }
-static X11GlyphCache& GetInstance();
-static void KillInstance();
-
-private:
- X11GlyphCache( X11GlyphPeer& );
+ X11GlyphCache( X11GlyphPeer& );
+ X11GlyphPeer& GetPeer()
+ {
+ return reinterpret_cast<X11GlyphPeer&>(mrPeer);
+ }
+ static X11GlyphCache& GetInstance();
+ static void KillInstance();
};
#endif // _SV_GCACH_XPEER_HXX