diff options
Diffstat (limited to 'vcl/unx/generic/gdi/dtint.cxx')
-rw-r--r-- | vcl/unx/generic/gdi/dtint.cxx | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/vcl/unx/generic/gdi/dtint.cxx b/vcl/unx/generic/gdi/dtint.cxx new file mode 100644 index 000000000000..d14389cd0438 --- /dev/null +++ b/vcl/unx/generic/gdi/dtint.cxx @@ -0,0 +1,139 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_vcl.hxx" + +#include <unistd.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <dlfcn.h> + +#include "osl/file.h" +#include "osl/process.h" +#include "osl/security.h" + +#include "vcl/svapp.hxx" + +#include "unx/salunx.h" +#include <X11/Xatom.h> +#ifdef USE_CDE +#include "unx/cdeint.hxx" +#endif +#include "unx/dtint.hxx" +#include "unx/saldisp.hxx" +#include "unx/saldata.hxx" +#include "unx/wmadaptor.hxx" + +#include "dtsetenum.hxx" + +#include <set> +#include <stdio.h> + +// NETBSD has no RTLD_GLOBAL +#ifndef RTLD_GLOBAL +#define DLOPEN_MODE (RTLD_LAZY) +#else +#define DLOPEN_MODE (RTLD_GLOBAL | RTLD_LAZY) +#endif + + +using namespace rtl; +using namespace vcl_sal; + +String DtIntegrator::aHomeDir; + +DtIntegrator::DtIntegrator() : + meType( DtGeneric ), + mnSystemLookCommandProcess( -1 ) +{ + mpSalDisplay = GetX11SalData()->GetDisplay(); + mpDisplay = mpSalDisplay->GetDisplay(); + OUString aDir; + oslSecurity aCur = osl_getCurrentSecurity(); + if( aCur ) + { + osl_getHomeDir( aCur, &aDir.pData ); + osl_freeSecurityHandle( aCur ); + OUString aSysDir; + osl_getSystemPathFromFileURL( aDir.pData, &aSysDir.pData ); + aHomeDir = aSysDir; + } +} + +DtIntegrator::~DtIntegrator() +{ +} + +DtIntegrator* DtIntegrator::CreateDtIntegrator() +{ + /* + * #i22061# override desktop detection + * if environment variable OOO_FORCE_DESKTOP is set + * to one of "cde" "kde" "gnome" then autodetection + * is overridden. + */ + static const char* pOverride = getenv( "OOO_FORCE_DESKTOP" ); + if( pOverride && *pOverride ) + { + OString aOver( pOverride ); + +#if USE_CDE + if( aOver.equalsIgnoreAsciiCase( "cde" ) ) + return new CDEIntegrator(); +#endif + if( aOver.equalsIgnoreAsciiCase( "none" ) ) + return new DtIntegrator(); + } + +#ifdef USE_CDE + void* pLibrary = NULL; + + // check dt type + // CDE + SalDisplay* pSalDisplay = GetX11SalData()->GetDisplay(); + Display* pDisplay = pSalDisplay->GetDisplay(); + Atom nDtAtom = XInternAtom( pDisplay, "_DT_WM_READY", True ); + if( nDtAtom && ( pLibrary = dlopen( "/usr/dt/lib/libDtSvc.so", DLOPEN_MODE ) ) ) + { + dlclose( pLibrary ); + return new CDEIntegrator(); + } +#endif + + // default: generic implementation + return new DtIntegrator(); +} + +void DtIntegrator::GetSystemLook( AllSettings& rSettings ) +{ + // #i48001# set a default blink rate + StyleSettings aStyleSettings = rSettings.GetStyleSettings(); + aStyleSettings.SetCursorBlinkTime( 500 ); + rSettings.SetStyleSettings( aStyleSettings ); +} |