summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2012-11-13 17:53:42 +0100
committerStephan Bergmann <sbergman@redhat.com>2012-11-13 18:04:26 +0100
commit12fa9ece663f24eff44197befe546a92e6c90724 (patch)
treea09c9b7844a5c8298d81c9b4934acc36f9c8b28b
parent4be8c3205afd55fa7e1f578384d3c91ebd8b5ec3 (diff)
Avoid global static data
...that (indirectly) allocates memory via rtl/alloc.h, thereby causing the rtl_cache_wsupdate_init thread to be spawned before main, as on Mac OS X that would interfere with the code in sal_detail_initialize to close all file descriptors >= 3 -- on Mac OS X the pthreads implementation makes use of KQUEUE file descriptors. * This commit removes enough global static data to make ui-preview work again on Mac OS X (where it crashed at startup when the main thread closed the KQUEUE fd used by pthreads implementation threads). gengal uses further static data (at least from module sb), so needs further clean-up. * Avoiding global static instances derived from class Application required the introduction of vcl/vclmain.hxx. * That the vcl library was linked against the static vclmain library (which only provides an implementation of main) appears to me to be a historic relic (all executables should either include a SAL_IMPLEMENT_MAIN or link against vclmain), so I removed that. Change-Id: I048aa616208cb3a1b9bd8dcc3b729ba1665729bd
-rw-r--r--cppu/source/uno/EnvStack.cxx14
-rw-r--r--padmin/source/pamain.cxx6
-rw-r--r--svx/source/gengal/gengal.cxx6
-rw-r--r--unotools/source/config/useroptions.cxx48
-rw-r--r--vcl/Library_vcl.mk6
-rw-r--r--vcl/Package_inc.mk1
-rw-r--r--vcl/aqua/source/dtrans/DataFlavorMapping.cxx47
-rw-r--r--vcl/aqua/source/dtrans/OSXTransferable.cxx7
-rw-r--r--vcl/inc/vcl/vclmain.hxx27
-rw-r--r--vcl/ios/source/dtrans/iOSTransferable.cxx7
-rw-r--r--vcl/source/salmain/salmain.cxx2
-rw-r--r--vcl/source/uipreviewer/previewer.cxx6
12 files changed, 101 insertions, 76 deletions
diff --git a/cppu/source/uno/EnvStack.cxx b/cppu/source/uno/EnvStack.cxx
index f4521c3bdeda..cafd4fe23b75 100644
--- a/cppu/source/uno/EnvStack.cxx
+++ b/cppu/source/uno/EnvStack.cxx
@@ -67,8 +67,6 @@ namespace
struct s_threadMap : public rtl::Static< ThreadMap, s_threadMap > {};
}
-static rtl::OUString s_uno_envDcp(RTL_CONSTASCII_USTRINGPARAM(UNO_LB_UNO));
-
static void s_setCurrent(uno_Environment * pEnv)
{
oslThreadIdentifier threadId = osl_getThreadIdentifier(NULL);
@@ -128,8 +126,10 @@ extern "C" CPPU_DLLPUBLIC void SAL_CALL uno_getCurrentEnvironment(uno_Environmen
(*ppEnv)->acquire(*ppEnv);
}
else
- uno_getEnvironment(ppEnv, s_uno_envDcp.pData, NULL);
-
+ {
+ rtl::OUString uno_envDcp(UNO_LB_UNO);
+ uno_getEnvironment(ppEnv, uno_envDcp.pData, NULL);
+ }
}
}
@@ -196,7 +196,7 @@ static int s_getNextEnv(uno_Environment ** ppEnv, uno_Environment * pCurrEnv, un
if (!nextPurpose.isEmpty())
{
- rtl::OUString next_envDcp(s_uno_envDcp);
+ rtl::OUString next_envDcp(UNO_LB_UNO);
next_envDcp += nextPurpose;
uno_getEnvironment(ppEnv, next_envDcp.pData, NULL);
@@ -355,7 +355,7 @@ CPPU_DLLPUBLIC int SAL_CALL uno_Environment_isValid(uno_Environment * pEnv, rtl_
int result = 1;
rtl::OUString typeName(cppu::EnvDcp::getTypeName(pEnv->pTypeName));
- if (typeName.equals(s_uno_envDcp))
+ if (typeName == UNO_LB_UNO)
{
cppu::Enterable * pEnterable = reinterpret_cast<cppu::Enterable *>(pEnv->pReserved);
if (pEnterable)
@@ -363,7 +363,7 @@ CPPU_DLLPUBLIC int SAL_CALL uno_Environment_isValid(uno_Environment * pEnv, rtl_
}
else
{
- rtl::OUString envDcp(s_uno_envDcp);
+ rtl::OUString envDcp(UNO_LB_UNO);
envDcp += cppu::EnvDcp::getPurpose(pEnv->pTypeName);
uno::Environment env(envDcp);
diff --git a/padmin/source/pamain.cxx b/padmin/source/pamain.cxx
index 6f6e2e3e722e..70f9267bfdb3 100644
--- a/padmin/source/pamain.cxx
+++ b/padmin/source/pamain.cxx
@@ -21,6 +21,7 @@
#include <unistd.h>
#include "vcl/svapp.hxx"
+#include "vcl/vclmain.hxx"
#include "vcl/wrkwin.hxx"
#include "vcl/unowrap.hxx"
@@ -53,7 +54,10 @@ public:
static rtl::OUString ReadStringHook( const rtl::OUString& );
};
-MyApp aMyApp;
+void vclmain::createApplication()
+{
+ static MyApp aMyApp;
+}
rtl::OUString MyApp::ReadStringHook( const rtl::OUString& rStr )
{
diff --git a/svx/source/gengal/gengal.cxx b/svx/source/gengal/gengal.cxx
index 21b86b874c51..6d296fc4876e 100644
--- a/svx/source/gengal/gengal.cxx
+++ b/svx/source/gengal/gengal.cxx
@@ -47,6 +47,7 @@
#include <tools/urlobj.hxx>
#include <tools/fsys.hxx>
+#include <vcl/vclmain.hxx>
#include <vcl/window.hxx>
#include <vcl/svapp.hxx>
#include <vcl/font.hxx>
@@ -261,6 +262,9 @@ int GalApp::Main()
return EXIT_SUCCESS;
}
-GalApp aGalApp;
+void vclmain::createApplication()
+{
+ static GalApp aGalApp;
+}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/unotools/source/config/useroptions.cxx b/unotools/source/config/useroptions.cxx
index 8af1121f9e42..5da601831adb 100644
--- a/unotools/source/config/useroptions.cxx
+++ b/unotools/source/config/useroptions.cxx
@@ -51,29 +51,27 @@ using rtl::OUString;
namespace
{
-OUString const sData = "org.openoffice.UserProfile/Data";
-
// vOptionNames[] -- names of the user option entries
// The order corresponds to the #define USER_OPT_* list in useroptions.hxx.
-OUString const vOptionNames[] = {
- OUString("l"), // USER_OPT_CITY
- OUString("o"), // USER_OPT_COMPANY
- OUString("c"), // USER_OPT_COUNTRY
- OUString("mail"), // USER_OPT_EMAIL
- OUString("facsimiletelephonenumber"), // USER_OPT_FAX
- OUString("givenname"), // USER_OPT_FIRSTNAME
- OUString("sn"), // USER_OPT_LASTNAME
- OUString("position"), // USER_OPT_POSITION
- OUString("st"), // USER_OPT_STATE
- OUString("street"), // USER_OPT_STREET
- OUString("homephone"), // USER_OPT_TELEPHONEHOME
- OUString("telephonenumber"), // USER_OPT_TELEPHONEWORK
- OUString("title"), // USER_OPT_TITLE
- OUString("initials"), // USER_OPT_ID
- OUString("postalcode"), // USER_OPT_ZIP
- OUString("fathersname"), // USER_OPT_FATHERSNAME
- OUString("apartment"), // USER_OPT_APARTMENT
- OUString("customernumber") // USER_OPT_CUSTOMERNUMBER
+char const * const vOptionNames[] = {
+ "l", // USER_OPT_CITY
+ "o", // USER_OPT_COMPANY
+ "c", // USER_OPT_COUNTRY
+ "mail", // USER_OPT_EMAIL
+ "facsimiletelephonenumber", // USER_OPT_FAX
+ "givenname", // USER_OPT_FIRSTNAME
+ "sn", // USER_OPT_LASTNAME
+ "position", // USER_OPT_POSITION
+ "st", // USER_OPT_STATE
+ "street", // USER_OPT_STREET
+ "homephone", // USER_OPT_TELEPHONEHOME
+ "telephonenumber", // USER_OPT_TELEPHONEWORK
+ "title", // USER_OPT_TITLE
+ "initials", // USER_OPT_ID
+ "postalcode", // USER_OPT_ZIP
+ "fathersname", // USER_OPT_FATHERSNAME
+ "apartment", // USER_OPT_APARTMENT
+ "customernumber" // USER_OPT_CUSTOMERNUMBER
};
const sal_uInt16 nOptionNameCount = SAL_N_ELEMENTS(vOptionNames);
@@ -147,7 +145,7 @@ SvtUserOptions::Impl::Impl() :
m_xCfg = uno::Reference<container::XNameAccess>(
comphelper::ConfigurationHelper::openConfig(
comphelper::getProcessComponentContext(),
- sData,
+ "org.openoffice.UserProfile/Data",
comphelper::ConfigurationHelper::E_STANDARD
),
uno::UNO_QUERY
@@ -180,7 +178,7 @@ OUString SvtUserOptions::Impl::GetToken (sal_uInt16 nToken) const
try
{
if (m_xData.is())
- m_xData->getPropertyValue(vOptionNames[nToken]) >>= sToken;
+ m_xData->getPropertyValue(OUString::createFromAscii(vOptionNames[nToken])) >>= sToken;
}
catch (uno::Exception const& ex)
{
@@ -201,7 +199,7 @@ void SvtUserOptions::Impl::SetToken (sal_uInt16 nToken, OUString const& sToken)
try
{
if (m_xData.is())
- m_xData->setPropertyValue(vOptionNames[nToken], uno::makeAny(sToken));
+ m_xData->setPropertyValue(OUString::createFromAscii(vOptionNames[nToken]), uno::makeAny(sToken));
comphelper::ConfigurationHelper::flush(m_xCfg);
}
catch (uno::Exception const& ex)
@@ -240,7 +238,7 @@ sal_Bool SvtUserOptions::Impl::IsTokenReadonly (sal_uInt16 nToken) const
{
uno::Reference<beans::XPropertySet> xData(m_xCfg, uno::UNO_QUERY);
uno::Reference<beans::XPropertySetInfo> xInfo = xData->getPropertySetInfo();
- beans::Property aProp = xInfo->getPropertyByName(vOptionNames[nToken]);
+ beans::Property aProp = xInfo->getPropertyByName(OUString::createFromAscii(vOptionNames[nToken]));
return ((aProp.Attributes & beans::PropertyAttribute::READONLY) ==
beans::PropertyAttribute::READONLY);
}
diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk
index 004325af146f..18592d4e146d 100644
--- a/vcl/Library_vcl.mk
+++ b/vcl/Library_vcl.mk
@@ -661,12 +661,6 @@ $(eval $(call gb_Library_add_ldflags,vcl,\
endif
endif
-ifneq ($(OS),IOS)
-$(eval $(call gb_Library_use_static_libraries,vcl,\
- vclmain \
-))
-endif
-
# Runtime dependency for unit-tests
$(call gb_LinkTarget_get_target,$(call gb_Library_get_linktargetname,vcl)) :| \
$(call gb_AllLangResTarget_get_target,vcl)
diff --git a/vcl/Package_inc.mk b/vcl/Package_inc.mk
index 1c488bed8cb0..3f37b7442ad2 100644
--- a/vcl/Package_inc.mk
+++ b/vcl/Package_inc.mk
@@ -156,6 +156,7 @@ $(eval $(call gb_Package_add_file,vcl_inc,inc/vcl/unohelp.hxx,vcl/unohelp.hxx))
$(eval $(call gb_Package_add_file,vcl_inc,inc/vcl/unowrap.hxx,vcl/unowrap.hxx))
$(eval $(call gb_Package_add_file,vcl_inc,inc/vcl/vclenum.hxx,vcl/vclenum.hxx))
$(eval $(call gb_Package_add_file,vcl_inc,inc/vcl/vclevent.hxx,vcl/vclevent.hxx))
+$(eval $(call gb_Package_add_file,vcl_inc,inc/vcl/vclmain.hxx,vcl/vclmain.hxx))
$(eval $(call gb_Package_add_file,vcl_inc,inc/vcl/vclmedit.hxx,vcl/vclmedit.hxx))
$(eval $(call gb_Package_add_file,vcl_inc,inc/vcl/virdev.hxx,vcl/virdev.hxx))
$(eval $(call gb_Package_add_file,vcl_inc,inc/vcl/waitobj.hxx,vcl/waitobj.hxx))
diff --git a/vcl/aqua/source/dtrans/DataFlavorMapping.cxx b/vcl/aqua/source/dtrans/DataFlavorMapping.cxx
index 47fad6bd38f3..80ec5c35a6eb 100644
--- a/vcl/aqua/source/dtrans/DataFlavorMapping.cxx
+++ b/vcl/aqua/source/dtrans/DataFlavorMapping.cxx
@@ -48,16 +48,13 @@ using ::rtl::OString;
namespace // private
{
- const Type CPPUTYPE_SEQINT8 = getCppuType((Sequence<sal_Int8>*)0);
- const Type CPPUTYPE_OUSTRING = getCppuType( (OUString*)0 );
-
/* Determine whether or not a DataFlavor is valid.
*/
bool isValidFlavor(const DataFlavor& aFlavor)
{
size_t len = aFlavor.MimeType.getLength();
Type dtype = aFlavor.DataType;
- return ((len > 0) && ((dtype == CPPUTYPE_SEQINT8) || (dtype == CPPUTYPE_OUSTRING)));
+ return ((len > 0) && ((dtype == getCppuType((Sequence<sal_Int8>*)0)) || (dtype == getCppuType( (OUString*)0 ))));
}
NSString* PBTYPE_SODX = @"application/x-openoffice-objectdescriptor-xml;windows_formatname=\"Star Object Descriptor (XML)\"";
@@ -92,7 +89,7 @@ namespace // private
NSString* SystemFlavor;
const char* OOoFlavor;
const char* HumanPresentableName;
- Type DataType;
+ bool DataTypeOUString; // sequence<byte> otherwise
};
// NSPICTPboardType is deprecated in 10.6 and later
@@ -113,23 +110,23 @@ namespace // private
*/
FlavorMap flavorMap[] =
{
- { NSStringPboardType, "text/plain;charset=utf-16", "Unicode Text (UTF-16)", CPPUTYPE_OUSTRING },
- { NSRTFPboardType, "text/richtext", "Rich Text Format", CPPUTYPE_SEQINT8 },
- { NSTIFFPboardType, "image/bmp", "Windows Bitmap", CPPUTYPE_SEQINT8 },
- { NSPICTPboardType, "image/bmp", "Windows Bitmap", CPPUTYPE_SEQINT8 },
- { NSHTMLPboardType, "text/html", "Plain Html", CPPUTYPE_SEQINT8 },
- { NSFilenamesPboardType, "application/x-openoffice-filelist;windows_formatname=\"FileList\"", "FileList", CPPUTYPE_SEQINT8 },
- { PBTYPE_SESX, FLAVOR_SESX, "Star Embed Source (XML)", CPPUTYPE_SEQINT8 },
- { PBTYPE_SLSDX, FLAVOR_SLSDX, "Star Link Source Descriptor (XML)", CPPUTYPE_SEQINT8 },
- { PBTYPE_ESX, FLAVOR_ESX, "Star Embed Source (XML)", CPPUTYPE_SEQINT8 },
- { PBTYPE_LSX, FLAVOR_LSX, "Star Link Source (XML)", CPPUTYPE_SEQINT8 },
- { PBTYPE_EOX, FLAVOR_EOX, "Star Embedded Object (XML)", CPPUTYPE_SEQINT8 },
- { PBTYPE_SVXB, FLAVOR_SVXB, "SVXB (StarView Bitmap/Animation", CPPUTYPE_SEQINT8 },
- { PBTYPE_GDIMF, FLAVOR_GDIMF, "GDIMetaFile", CPPUTYPE_SEQINT8 },
- { PBTYPE_WMF, FLAVOR_WMF, "Windows MetaFile", CPPUTYPE_SEQINT8 },
- { PBTYPE_EMF, FLAVOR_EMF, "Windows Enhanced MetaFile", CPPUTYPE_SEQINT8 },
- { PBTYPE_SODX, FLAVOR_SODX, "Star Object Descriptor (XML)", CPPUTYPE_SEQINT8 },
- { PBTYPE_DUMMY_INTERNAL, FLAVOR_DUMMY_INTERNAL, "internal data",CPPUTYPE_SEQINT8 }
+ { NSStringPboardType, "text/plain;charset=utf-16", "Unicode Text (UTF-16)", true },
+ { NSRTFPboardType, "text/richtext", "Rich Text Format", false },
+ { NSTIFFPboardType, "image/bmp", "Windows Bitmap", false },
+ { NSPICTPboardType, "image/bmp", "Windows Bitmap", false },
+ { NSHTMLPboardType, "text/html", "Plain Html", false },
+ { NSFilenamesPboardType, "application/x-openoffice-filelist;windows_formatname=\"FileList\"", "FileList", false },
+ { PBTYPE_SESX, FLAVOR_SESX, "Star Embed Source (XML)", false },
+ { PBTYPE_SLSDX, FLAVOR_SLSDX, "Star Link Source Descriptor (XML)", false },
+ { PBTYPE_ESX, FLAVOR_ESX, "Star Embed Source (XML)", false },
+ { PBTYPE_LSX, FLAVOR_LSX, "Star Link Source (XML)", false },
+ { PBTYPE_EOX, FLAVOR_EOX, "Star Embedded Object (XML)", false },
+ { PBTYPE_SVXB, FLAVOR_SVXB, "SVXB (StarView Bitmap/Animation", false },
+ { PBTYPE_GDIMF, FLAVOR_GDIMF, "GDIMetaFile", false },
+ { PBTYPE_WMF, FLAVOR_WMF, "Windows MetaFile", false },
+ { PBTYPE_EMF, FLAVOR_EMF, "Windows Enhanced MetaFile", false },
+ { PBTYPE_SODX, FLAVOR_SODX, "Star Object Descriptor (XML)", false },
+ { PBTYPE_DUMMY_INTERNAL, FLAVOR_DUMMY_INTERNAL, "internal data",false }
};
@@ -138,12 +135,12 @@ namespace // private
inline bool isByteSequenceType(const Type& theType)
{
- return (theType == CPPUTYPE_SEQINT8);
+ return (theType == getCppuType((Sequence<sal_Int8>*)0));
}
inline bool isOUStringType(const Type& theType)
{
- return (theType == CPPUTYPE_OUSTRING);
+ return (theType == getCppuType( (OUString*)0 ));
}
} // namespace private
@@ -519,7 +516,7 @@ DataFlavor DataFlavorMapper::systemToOpenOfficeFlavor(NSString* systemDataFlavor
{
oOOFlavor.MimeType = OUString::createFromAscii(flavorMap[i].OOoFlavor);
oOOFlavor.HumanPresentableName = OUString(RTL_CONSTASCII_USTRINGPARAM(flavorMap[i].HumanPresentableName));
- oOOFlavor.DataType = flavorMap[i].DataType;
+ oOOFlavor.DataType = flavorMap[i].DataTypeOUString ? getCppuType( (OUString*)0 ) : getCppuType((Sequence<sal_Int8>*)0);
return oOOFlavor;
}
} // for
diff --git a/vcl/aqua/source/dtrans/OSXTransferable.cxx b/vcl/aqua/source/dtrans/OSXTransferable.cxx
index ec393b0d54cc..0f6c57d06ef7 100644
--- a/vcl/aqua/source/dtrans/OSXTransferable.cxx
+++ b/vcl/aqua/source/dtrans/OSXTransferable.cxx
@@ -34,16 +34,13 @@ using namespace com::sun::star::container;
using ::rtl::OUString;
-const Type CPPUTYPE_SEQINT8 = getCppuType((Sequence<sal_Int8>*)0);
-const Type CPPUTYPE_OUSTRING = getCppuType((OUString*)0);
-
namespace // private
{
bool isValidFlavor( const DataFlavor& aFlavor )
{
size_t len = aFlavor.MimeType.getLength();
Type dtype = aFlavor.DataType;
- return ((len > 0) && ((dtype == CPPUTYPE_SEQINT8) || (dtype == CPPUTYPE_OUSTRING)));
+ return ((len > 0) && ((dtype == getCppuType((Sequence<sal_Int8>*)0)) || (dtype == getCppuType((OUString*)0))));
}
} // namespace private
@@ -106,7 +103,7 @@ Any SAL_CALL OSXTransferable::getTransferData( const DataFlavor& aFlavor )
bool OSXTransferable::isUnicodeText(const DataFlavor& flavor)
{
- return (flavor.DataType == CPPUTYPE_OUSTRING);
+ return (flavor.DataType == getCppuType((OUString*)0));
}
diff --git a/vcl/inc/vcl/vclmain.hxx b/vcl/inc/vcl/vclmain.hxx
new file mode 100644
index 000000000000..1b60cfba42ce
--- /dev/null
+++ b/vcl/inc/vcl/vclmain.hxx
@@ -0,0 +1,27 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_VCL_VCLMAIN_HXX
+#define INCLUDED_VCL_VCLMAIN_HXX
+
+#include "sal/config.h"
+
+namespace vclmain {
+
+// Function called from vclmain's implementation of main, needs to be
+// implemented by the application and needs to instantiate a (static, derived)
+// instance of Application (where the Application constructor takes care to link
+// that instance to ImplSVData.mpApp):
+void createApplication();
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/ios/source/dtrans/iOSTransferable.cxx b/vcl/ios/source/dtrans/iOSTransferable.cxx
index 603b6b949f0d..1f335403d1ff 100644
--- a/vcl/ios/source/dtrans/iOSTransferable.cxx
+++ b/vcl/ios/source/dtrans/iOSTransferable.cxx
@@ -32,16 +32,13 @@ using namespace com::sun::star::container;
using ::rtl::OUString;
-const Type CPPUTYPE_SEQINT8 = getCppuType((Sequence<sal_Int8>*)0);
-const Type CPPUTYPE_OUSTRING = getCppuType((OUString*)0);
-
namespace // private
{
bool isValidFlavor( const DataFlavor& aFlavor )
{
size_t len = aFlavor.MimeType.getLength();
Type dtype = aFlavor.DataType;
- return ((len > 0) && ((dtype == CPPUTYPE_SEQINT8) || (dtype == CPPUTYPE_OUSTRING)));
+ return ((len > 0) && ((dtype == getCppuType((Sequence<sal_Int8>*)0)) || (dtype == getCppuType((OUString*)0))));
}
} // namespace private
@@ -82,7 +79,7 @@ Any SAL_CALL iOSTransferable::getTransferData( const DataFlavor& aFlavor )
bool iOSTransferable::isUnicodeText(const DataFlavor& flavor)
{
- return (flavor.DataType == CPPUTYPE_OUSTRING);
+ return (flavor.DataType == getCppuType((OUString*)0));
}
diff --git a/vcl/source/salmain/salmain.cxx b/vcl/source/salmain/salmain.cxx
index 0718260e4e42..13cd13fe4f99 100644
--- a/vcl/source/salmain/salmain.cxx
+++ b/vcl/source/salmain/salmain.cxx
@@ -23,11 +23,13 @@
#include "sal/main.h"
#include "tools/extendapplicationenvironment.hxx"
+#include "vcl/vclmain.hxx"
#include "salinst.hxx"
SAL_IMPLEMENT_MAIN() {
tools::extendApplicationEnvironment();
+ vclmain::createApplication();
return SVMain();
}
diff --git a/vcl/source/uipreviewer/previewer.cxx b/vcl/source/uipreviewer/previewer.cxx
index 7abb9def5c3b..939c55342744 100644
--- a/vcl/source/uipreviewer/previewer.cxx
+++ b/vcl/source/uipreviewer/previewer.cxx
@@ -18,6 +18,7 @@
#include <vcl/dialog.hxx>
#include <vcl/help.hxx>
#include <vcl/svapp.hxx>
+#include <vcl/vclmain.hxx>
class UIPreviewApp : public Application
{
@@ -88,6 +89,9 @@ int UIPreviewApp::Main()
return EXIT_SUCCESS;
}
-UIPreviewApp aApp;
+void vclmain::createApplication()
+{
+ static UIPreviewApp aApp;
+}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */