diff options
author | Riccardo Magliocchetti <riccardo.magliocchetti@gmail.com> | 2012-02-10 17:28:49 +0100 |
---|---|---|
committer | Michael Meeks <michael.meeks@suse.com> | 2012-02-17 16:44:56 +0000 |
commit | 2130deb2d13f7cbb5b5e55c061ad794e47e6999d (patch) | |
tree | 8d612af075ed67d74a69aa1294159ed7de18c21d /vcl/headless | |
parent | a818fa05c34bb2e969e2fe1972d9a52774538beb (diff) |
Introduce headless switch for X / cairo / toolkit less build
The plan is to reduce dependencies to be easier to deploy
libreoffice server side in headless mode.
Diffstat (limited to 'vcl/headless')
-rw-r--r-- | vcl/headless/headlessinst.cxx | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/vcl/headless/headlessinst.cxx b/vcl/headless/headlessinst.cxx new file mode 100644 index 000000000000..bde892fa7c23 --- /dev/null +++ b/vcl/headless/headlessinst.cxx @@ -0,0 +1,135 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * Version: MPL 1.1 / GPLv3+ / LGPLv3+ + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License or as specified alternatively below. You may obtain a copy of + * the License at http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * Major Contributor(s): + * Copyright (C) 2012 Novell, Inc. + * Michael Meeks <michael.meeks@suse.com> (initial developer) + * + * All Rights Reserved. + * + * For minor contributions see the git repository. + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 3 or later (the "GPLv3+"), or + * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"), + * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable + * instead of those above. + */ +#include <headless/svpinst.hxx> +#include <headless/svpdummies.hxx> +#include <generic/gendata.hxx> + +class HeadlessSalInstance : public SvpSalInstance +{ +public: + HeadlessSalInstance( SalYieldMutex *pMutex ); + virtual ~HeadlessSalInstance(); + + virtual SalSystem* CreateSalSystem(); +}; + +HeadlessSalInstance::HeadlessSalInstance( SalYieldMutex *pMutex ) : + SvpSalInstance( pMutex) +{ +} + +HeadlessSalInstance::~HeadlessSalInstance() +{ +} + +class HeadlessSalSystem : public SvpSalSystem { +#if 0 +public: + AndroidSalSystem() : SvpSalSystem() {} + virtual ~AndroidSalSystem() {} + virtual int ShowNativeDialog( const rtl::OUString& rTitle, + const rtl::OUString& rMessage, + const std::list< rtl::OUString >& rButtons, + int nDefButton ) + { + (void)rButtons; (void)nDefButton; + __android_log_print(ANDROID_LOG_INFO, "LibreOffice - dialog '%s': '%s'", + rtl::OUStringToOString(rTitle, RTL_TEXTENCODING_ASCII_US).getStr(), + rtl::OUStringToOString(rMessage, RTL_TEXTENCODING_ASCII_US).getStr()); + return 0; + } +#endif +}; + +SalSystem *HeadlessSalInstance::CreateSalSystem() +{ + return new HeadlessSalSystem(); +} + +class HeadlessSalData : public SalGenericData +{ +public: + HeadlessSalData( SalInstance *pInstance ) : SalGenericData( SAL_DATA_HEADLESS, pInstance ) {} + virtual void ErrorTrapPush() {} + virtual bool ErrorTrapPop( bool ) { return false; } +}; + +// All the interesting stuff is slaved from the AndroidSalInstance +void InitSalData() {} +void DeInitSalData() {} +void InitSalMain() {} +void DeInitSalMain() {} + +void SalAbort( const rtl::OUString& rErrorText, bool bDumpCore ) +{ + rtl::OUString aError( rErrorText ); + if( aError.isEmpty() ) + aError = rtl::OUString::createFromAscii("Unknown application error"); + ::fprintf( stderr, "%s\n", rtl::OUStringToOString(rErrorText, osl_getThreadTextEncoding()).getStr() ); + + ::fprintf( stderr, "SalAbort: '%s'", + rtl::OUStringToOString(aError, RTL_TEXTENCODING_ASCII_US).getStr()); + if( bDumpCore ) + abort(); + else + _exit(1); +} + +const OUString& SalGetDesktopEnvironment() +{ + static rtl::OUString aEnv( RTL_CONSTASCII_USTRINGPARAM( "headless" ) ); + return aEnv; +} + +SalData::SalData() : + m_pInstance( 0 ), + m_pPlugin( 0 ), + m_pPIManager(0 ) +{ +} + +SalData::~SalData() +{ +} + +// This is our main entry point: +SalInstance *CreateSalInstance() +{ + HeadlessSalInstance* pInstance = new HeadlessSalInstance( new SalYieldMutex() ); + new HeadlessSalData( pInstance ); + return pInstance; +} + +void DestroySalInstance( SalInstance *pInst ) +{ + pInst->ReleaseYieldMutex(); + delete pInst; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |