tstaskmonitor/client/s60/src/tstaskmonitor_p.cpp
author hgs
Fri, 14 May 2010 17:24:44 +0300
changeset 94 dbb8300717f7
child 83 156f692b1687
permissions -rw-r--r--
201019
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
94
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description: 
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
#include "tstaskmonitor_p.h"
hgs
parents:
diff changeset
    18
#include "tstaskmonitor.h"
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
#include "tstaskmonitorclient.h"
hgs
parents:
diff changeset
    21
#include "tsapplicationtask.h"
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
#include "tsutils.h"
hgs
parents:
diff changeset
    24
using TaskSwitcher::CleanupResetAndDestroyPushL;
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
TsTaskMonitorPrivate::TsTaskMonitorPrivate(TsTaskMonitor *q) : q_ptr(q), mClient(0)
hgs
parents:
diff changeset
    27
{
hgs
parents:
diff changeset
    28
    QT_TRAP_THROWING(mClient = CTsTaskMonitorClient::NewL());
hgs
parents:
diff changeset
    29
    mClient->Subscribe(*this);
hgs
parents:
diff changeset
    30
}
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
TsTaskMonitorPrivate::~TsTaskMonitorPrivate()
hgs
parents:
diff changeset
    33
{
hgs
parents:
diff changeset
    34
    mClient->CancelSubscribe();
hgs
parents:
diff changeset
    35
}
hgs
parents:
diff changeset
    36
hgs
parents:
diff changeset
    37
QList< QSharedPointer<TsTask> > TsTaskMonitorPrivate::taskList()
hgs
parents:
diff changeset
    38
{
hgs
parents:
diff changeset
    39
    QList< QSharedPointer<TsTask> > tasks;
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
    QT_TRAP_THROWING (    
hgs
parents:
diff changeset
    42
        RPointerArray<CTsFswEntry> entries;   
hgs
parents:
diff changeset
    43
        CleanupResetAndDestroyPushL<CTsFswEntry>(entries);
hgs
parents:
diff changeset
    44
        mClient->TaskListL(entries);
hgs
parents:
diff changeset
    45
        
hgs
parents:
diff changeset
    46
        // TsTask claims ownership of CTsFswEntry, so we have to remove entries from 
hgs
parents:
diff changeset
    47
        // entries array after adding task to tasks array to prevent double delete of
hgs
parents:
diff changeset
    48
        // CTsFswEntry objects in case of leave (for example due to OOM) in the middle 
hgs
parents:
diff changeset
    49
        // of the loop below.
hgs
parents:
diff changeset
    50
        while (entries.Count()) {
hgs
parents:
diff changeset
    51
            CTsFswEntry *firstEntry = entries[0];
hgs
parents:
diff changeset
    52
            CleanupStack::PushL(firstEntry);
hgs
parents:
diff changeset
    53
            entries.Remove(0);
hgs
parents:
diff changeset
    54
            
hgs
parents:
diff changeset
    55
            // @todo switch by entry type
hgs
parents:
diff changeset
    56
            QT_TRYCATCH_LEAVING(tasks.append(QSharedPointer<TsTask>(new TsApplicationTask(firstEntry))));
hgs
parents:
diff changeset
    57
            
hgs
parents:
diff changeset
    58
            CleanupStack::Pop(firstEntry);
hgs
parents:
diff changeset
    59
        }
hgs
parents:
diff changeset
    60
        
hgs
parents:
diff changeset
    61
        CleanupStack::PopAndDestroy(&entries);    
hgs
parents:
diff changeset
    62
    );
hgs
parents:
diff changeset
    63
    
hgs
parents:
diff changeset
    64
    return tasks;
hgs
parents:
diff changeset
    65
}
hgs
parents:
diff changeset
    66
hgs
parents:
diff changeset
    67
void TsTaskMonitorPrivate::HandleRunningAppChange()
hgs
parents:
diff changeset
    68
{
hgs
parents:
diff changeset
    69
    emit q_ptr->taskListChanged();
hgs
parents:
diff changeset
    70
}