blob: dae5035bfb4b42f0379b9474a8b531015377c0ab [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the 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 );
}