---
 src/callmanager.cpp |   34 ++++++++++++++++++++++++++--------
 src/callmanager.h   |    3 +++
 2 files changed, 29 insertions(+), 8 deletions(-)

diff --git a/src/callmanager.cpp b/src/callmanager.cpp
index 585a3ac..9823f05 100644
--- a/src/callmanager.cpp
+++ b/src/callmanager.cpp
@@ -149,6 +149,8 @@ bool CallManager::command( const QString& cmd )
         info.dialBack = false;
         callList += info;
 
+        emit sendCallStatus( &callList );
+
         // Advertise the call state change and then return to command mode.
         sendState( info );
         send( "OK" );
@@ -176,6 +178,8 @@ bool CallManager::command( const QString& cmd )
                 info.dialBack = false;
                 callList += info;
 
+                emit sendCallStatus( &callList );
+
                 // Advertise the call state change and then return to command 
mode.
                 sendState( info );
                 send( "CONNECT 19200" );
@@ -369,6 +373,7 @@ void CallManager::startIncomingCall( const QString& number,
     callList += info;
 
     emitRing(info);
+    emit sendCallStatus( &callList );
 
     // Announce the incoming call using Ericsson-style state notifications.
     sendState( info );
@@ -395,6 +400,7 @@ void CallManager::hangupAll()
     connectTimer->stop();
     alertingTimer->stop();
     hangupTimer->stop();
+    emit sendCallStatus( &callList );
 }
 
 void CallManager::hangupConnected()
@@ -412,6 +418,8 @@ void CallManager::hangupConnected()
 
     if ( !hasCall( CallState_Held ) )
         waitingToIncoming();
+
+    emit sendCallStatus( &callList );
 }
 
 void CallManager::hangupHeld()
@@ -429,6 +437,8 @@ void CallManager::hangupHeld()
 
     if ( !hasCall( CallState_Active ) )
         waitingToIncoming();
+
+    emit sendCallStatus( &callList );
 }
 
 void CallManager::hangupConnectedAndHeld()
@@ -445,6 +455,7 @@ void CallManager::hangupConnectedAndHeld()
     }
     callList = newCallList;
     waitingToIncoming();
+    emit sendCallStatus( &callList );
 }
 
 void CallManager::hangupCall( int id )
@@ -464,15 +475,13 @@ bool CallManager::acceptCall()
     } else if ( hasCall( CallState_Active ) ) {
         // Put the active calls on hold and accept the incoming call.
         changeGroup( CallState_Active, CallState_Held );
-        callList[index].state = CallState_Active;
-        sendState( callList[index] );
-        return true;
-    } else {
-        // Only held calls, or no other calls, so just make the incoming call 
active.
-        callList[index].state = CallState_Active;
-        sendState( callList[index] );
-        return true;
     }
+
+       // No more active calls, so accept incoming
+    callList[index].state = CallState_Active;
+    sendState( callList[index] );
+    emit sendCallStatus( &callList );
+       return true;
 }
 
 bool CallManager::chld0()
@@ -500,6 +509,7 @@ bool CallManager::chld1()
         int index = indexForId(id);
         callList[index].state = CallState_Active;
         sendState( callList[index] );
+        emit sendCallStatus( &callList );
         return true;
     } else if ( hasCall( CallState_Held ) ) {
         // Hangup the active calls and activate the held ones.
@@ -508,6 +518,7 @@ bool CallManager::chld1()
             if ( callList[index].state == CallState_Held ) {
                 callList[index].state = CallState_Active;
                 sendState( callList[index] );
+                emit sendCallStatus( &callList );
             }
         }
         return true;
@@ -551,6 +562,7 @@ bool CallManager::chld1x( int x )
     if ( !hasCall( CallState_Active ) && !hasCall( CallState_Held ) )
         waitingToIncoming();
 
+    emit sendCallStatus( &callList );
     return found;
 }
 
@@ -570,6 +582,7 @@ bool CallManager::chld2()
         int index = indexForId( id );
         callList[index].state = CallState_Active;
         sendState( callList[index] );
+        emit sendCallStatus( &callList );
         return true;
     } else if ( hasCall( CallState_Active ) && hasCall( CallState_Held ) ) {
         // Swap the active and held calls.
@@ -620,6 +633,7 @@ bool CallManager::chld2x( int x )
             // No active calls, so make just this call active.
             callList[index].state = CallState_Active;
             sendState( callList[index] );
+            emit sendCallStatus( &callList );
         }
         return true;
     } else if ( callList[index].state == CallState_Active ) {
@@ -634,6 +648,7 @@ bool CallManager::chld2x( int x )
                     return false;
                 callList[index2].state = CallState_Held;
                 sendState( callList[index2] );
+                emit sendCallStatus( &callList );
             }
         }
         return true;
@@ -691,6 +706,7 @@ void CallManager::dialingToConnected()
     // Transition the call to its new state.
     callList[index].state = CallState_Active;
     sendState( callList[index] );
+    emit sendCallStatus( &callList );
     // If the dialed number starts with 05123, disconnect the
     // call after xx seconds, where xx is part of the dial string
     // as 05123xx
@@ -714,6 +730,7 @@ void CallManager::dialingToAlerting()
     // Transition the call to its new state.
     callList[index].state = CallState_Alerting;
     sendState( callList[index] );
+    emit sendCallStatus( &callList );
 }
 
 void CallManager::waitingToIncoming()
@@ -856,6 +873,7 @@ void CallManager::changeGroup( CallState oldState, 
CallState newState )
             sendState( callList[index] );
         }
     }
+    emit sendCallStatus( &callList );
 }
 
 void CallManager::sendState( const CallInfo& info )
diff --git a/src/callmanager.h b/src/callmanager.h
index 5876c87..69e8d3b 100644
--- a/src/callmanager.h
+++ b/src/callmanager.h
@@ -114,6 +114,9 @@ signals:
     // Send a call control event.
     void controlEvent( const QSimControlEvent& event );
 
+    // Send calls list on status change
+    void sendCallStatus( QList<CallInfo> *list );
+
 private slots:
     // Transition the active dialing or alerting call to connected.
     void dialingToConnected();
-- 
1.7.1

_______________________________________________
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono

Reply via email to