controlpanelplugins/themeplugin/src/cpthemeclientsymbian_p.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 14 May 2010 15:53:07 +0300
changeset 14 23411a3be0db
parent 11 10d0dd0e43f1
child 15 cc79acdc26cb
permissions -rw-r--r--
Revision: 201017 Kit: 201019

/*
 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0""
 * which accompanies this distribution, and is available
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
 *
 * Initial Contributors:
 * Nokia Corporation - initial contribution.
 *
 * Contributors:
 *
 * Description:  
 *   
 */

#include "cpthemeclientsymbian_p.h"
#include "cpthemesymbiancommon_p.h"

#include <QFile>
#include <QDebug>
#include <QTime>

const TUint KDefaultMessageSlots = 4;

/**
* constructor
*/
CpThemeClientPrivate::CpThemeClientPrivate():
    clientConnected(false)
{
}

/**
* CpThemeClientPrivate::connectToServer()
*
* Connects to the server
*/
bool CpThemeClientPrivate::connectToServer()
{
   
    TInt error; 
    
    error = CreateSession(KThemeServerName, Version(), KDefaultMessageSlots);
    return( clientConnected = (KErrNone == error ) );
}

/**
Indicates a connection to the server
*/
bool CpThemeClientPrivate::isConnected()
{
    return connected;
}



/**
Returns the version number
*/  
TVersion CpThemeClientPrivate::Version(void) const
{
    return(TVersion(KThemeServerMajorVersionNumber,
                    KThemeServerMinorVersionNumber,
                    KThemeServerBuildVersionNumber));
}

/**
 * Destructor
 */
CpThemeClientPrivate::~CpThemeClientPrivate()
{
    RSessionBase::Close();
}

/**
 * StartServer
 */
TInt CpThemeClientPrivate::StartServer()
{
    TFindServer findThemeServer(KThemeServerName);
    TFullName name;
    if ( KErrNone == findThemeServer.Next( name ) ) {
        // Server already running
        return KErrNone;
    }
    return CreateServerProcess();
}

/**
 * CreateServerProcess
 */
TInt CpThemeClientPrivate::CreateServerProcess()
{
    TInt result;
    const TUid KServerUid2={0x100039CE};
    const TUidType serverUid( KNullUid, KServerUid2, KServerUid3 );
    RProcess server;
    _LIT(KThemeServerExe,"hbthemeserver.exe");
    
    result = server.Create( KThemeServerExe, KNullDesC, EOwnerProcess );
    
    if (KErrNone != result) {
        return  result; 
    }
    else {
        TRequestStatus status;
        server.Rendezvous(status);
        if (status!=KRequestPending) {
            server.Kill(0); // abort startup
        }
        else {
            server.Resume(); // logon OK - start the server
        }
        User::WaitForRequest(status);// wait for start or death
        server.Close();
        connected == status.Int() == KErrNone ? true : false;
        return status.Int(); // return the error
    }
}

/**
 * changeTheme
 */
bool CpThemeClientPrivate::changeTheme(const QString& aString )
{
    TPtrC themeName(reinterpret_cast<const TUint16 *>(aString.constData()));
    TIpcArgs args(&themeName);
    TInt err = SendReceive(EThemeSelection, args);
    return KErrNone == err;
}