All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] callmanager: change state of waiting call
@ 2011-04-15 12:29 Nicolas Bertrand
  2011-04-19 17:01 ` Denis Kenzior
  0 siblings, 1 reply; 2+ messages in thread
From: Nicolas Bertrand @ 2011-04-15 12:29 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 2536 bytes --]

becomes incoming when all active and held are released

---
 src/callmanager.cpp |   25 +++++++++++++++++++++----
 src/callmanager.h   |    3 +++
 2 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/src/callmanager.cpp b/src/callmanager.cpp
index be17b83..929c182 100644
--- a/src/callmanager.cpp
+++ b/src/callmanager.cpp
@@ -409,6 +409,9 @@ void CallManager::hangupConnected()
         }
     }
     callList = newCallList;
+
+    if ( !hasCall( CallState_Held ) )
+        waitingToIncoming();
 }
 
 void CallManager::hangupHeld()
@@ -423,6 +426,9 @@ void CallManager::hangupHeld()
         }
     }
     callList = newCallList;
+
+    if ( !hasCall( CallState_Active ) )
+        waitingToIncoming();
 }
 
 void CallManager::hangupConnectedAndHeld()
@@ -438,6 +444,7 @@ void CallManager::hangupConnectedAndHeld()
         }
     }
     callList = newCallList;
+    waitingToIncoming();
 }
 
 void CallManager::hangupCall( int id )
@@ -508,10 +515,6 @@ bool CallManager::chld1()
         // We only have active calls - hang them up.
         hangupConnected();
         return true;
-    } else if ( hasCall( CallState_Active ) ) {
-        // We only have active calls - hang them up.
-        hangupConnected();
-        return true;
     } else if ( ( id = idForDialing() ) >= 0 ) {
         // We have a dialing call.
         hangupCall(id);
@@ -544,6 +547,10 @@ bool CallManager::chld1x( int x )
         }
     }
     callList = newCallList;
+
+    if ( !hasCall( CallState_Active )  && !hasCall( CallState_Held ) )
+        waitingToIncoming();
+
     return found;
 }
 
@@ -709,6 +716,16 @@ void CallManager::dialingToAlerting()
     sendState( callList[index] );
 }
 
+void CallManager::waitingToIncoming()
+{
+	int index = indexForId( idForState( CallState_Waiting ) );
+	if ( index < 0 )
+		return;
+
+    callList[index].state = CallState_Incoming;
+    sendState( callList[index] );
+}
+
 void CallManager::dialBack()
 {
     startIncomingCall( "1234567", "7654321", "Alice", true );
diff --git a/src/callmanager.h b/src/callmanager.h
index 90cb9bd..5876c87 100644
--- a/src/callmanager.h
+++ b/src/callmanager.h
@@ -121,6 +121,9 @@ private slots:
     // Transition the active dialing call to alerting.
     void dialingToAlerting();
 
+    // Transition the waiting call to incoming.
+    void waitingToIncoming();
+
     // Handle dial-backs.
     void dialBack();
     void dialBackWithHangup5();
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2011-04-19 17:01 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-04-15 12:29 [PATCH] callmanager: change state of waiting call Nicolas Bertrand
2011-04-19 17:01 ` Denis Kenzior

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.