From 12d9a9de37e5737543d10feb6b40483023080b6a Mon Sep 17 00:00:00 2001
From: Pierre-Luc Beaudoin <pierre-luc.beaudoin@savoirfairelinux.com>
Date: Tue, 18 Sep 2007 16:23:12 -0400
Subject: [PATCH] Working hang up when dialing

---
 sflphone-gtk/src/actions.c  | 47 +++++++++++++++++++++++--------------
 sflphone-gtk/src/calltree.c | 32 +++++++++++++++++++++----
 2 files changed, 58 insertions(+), 21 deletions(-)

diff --git a/sflphone-gtk/src/actions.c b/sflphone-gtk/src/actions.c
index c1587beb63..d312529d8c 100644
--- a/sflphone-gtk/src/actions.c
+++ b/sflphone-gtk/src/actions.c
@@ -201,7 +201,7 @@ sflphone_keypad( guint keyval, gchar * key)
       sflphone_place_call(c);
       break;
     case 65307: /* ESCAPE */
-      sflphone_hang_up(c);
+      dbus_hang_up(c);
       break;
     case 65288: /* BACKSPACE */
       {  /* Brackets mandatory because of local vars */
@@ -214,11 +214,11 @@ sflphone_keypad( guint keyval, gchar * key)
           g_free(c->from);
           c->from = g_strconcat("\"\" <", c->to, ">", NULL);
           screen_set_call(c);
-          update_call_tree();
+          update_call_tree(c);
         } 
         else if(strlen(c->to) == 1)
         {
-          sflphone_hang_up(c);
+          dbus_hang_up(c);
         }
         
       }
@@ -241,7 +241,7 @@ sflphone_keypad( guint keyval, gchar * key)
         g_free(c->from);
         c->from = g_strconcat("\"\" <", c->to, ">", NULL);
         screen_set_call(c);
-        update_call_tree();
+        update_call_tree(c);
       }
       break;
     }
@@ -254,23 +254,36 @@ sflphone_keypad( guint keyval, gchar * key)
       switch (keyval)
       {
       case 65307: /* ESCAPE */
-        sflphone_hang_up(c);
+        dbus_hang_up(c);
         break;
       }
     } 
-    else // Not in a call, not dialing, create a new call 
+    else 
     {
-      if (keyval < 255 || (keyval >65453 && keyval < 65466))
-      { 
-        /* Brackets mandatory because of local vars */
-        call_t * c = g_new0 (call_t, 1);
-        c->state = CALL_STATE_DIALING;
-        c->from = g_strconcat("\"\" <", key, ">", NULL);
-        c->callID = "asdf"; // TODO generate a unique number
-        c->to = g_strdup(key);
-        call_list_add(c);
-        screen_set_call(c);
-        update_call_tree();
+      call_t * c = (call_t*) call_list_get_by_state (CALL_STATE_RINGING);
+      if(c) // Currently ring => edit number
+      {
+        switch (keyval)
+        {
+        case 65307: /* ESCAPE */
+          dbus_hang_up(c);
+          break;
+        }
+      }
+      else
+      { // Not in a call, not dialing, create a new call 
+        if (keyval < 255 || (keyval >65453 && keyval < 65466))
+        { 
+          /* Brackets mandatory because of local vars */
+          call_t * c = g_new0 (call_t, 1);
+          c->state = CALL_STATE_DIALING;
+          c->from = g_strconcat("\"\" <", key, ">", NULL);
+          c->callID = "asdf"; // TODO generate a unique number
+          c->to = g_strdup(key);
+          call_list_add(c);
+          screen_set_call(c);
+          update_call_tree_add(c);
+        }
       }
     }
   }
diff --git a/sflphone-gtk/src/calltree.c b/sflphone-gtk/src/calltree.c
index 3afe9fc3cc..d8fe46f0ba 100644
--- a/sflphone-gtk/src/calltree.c
+++ b/sflphone-gtk/src/calltree.c
@@ -404,7 +404,7 @@ update_call_tree (call_t * c)
     		{
     		  pixbuf = gdk_pixbuf_new_from_file(PIXMAPS_DIR "/hold.svg", NULL);
     		}
-    		else if (c->state == CALL_STATE_RINGING)
+    		else if (c->state == CALL_STATE_INCOMING || c->state == CALL_STATE_RINGING)
     		{
     		  pixbuf = gdk_pixbuf_new_from_file(PIXMAPS_DIR "/ring.svg", NULL);
     		}
@@ -412,6 +412,10 @@ update_call_tree (call_t * c)
     		{
     		  pixbuf = gdk_pixbuf_new_from_file(PIXMAPS_DIR "/current.svg", NULL);
     		}
+    	  else if (c->state == CALL_STATE_DIALING)
+    		{
+    		  pixbuf = gdk_pixbuf_new_from_file(PIXMAPS_DIR "/dial.svg", NULL);
+    		}
     	  //Resize it
         if(pixbuf)
         {
@@ -446,17 +450,35 @@ update_call_tree_add (call_t * c)
 
   // New call in the list
   gchar * markup;
-  markup = g_markup_printf_escaped("<b>%s</b>\n"
+  if (c->state == CALL_STATE_CURRENT)
+  {
+    markup = g_markup_printf_escaped("<big><b>%s</b></big>\n"
   				    "%s", 
   				    call_get_name(c), 
   				    call_get_number(c));
-  
+  }
+  else 
+  {
+    markup = g_markup_printf_escaped("<b>%s</b>\n"
+  				    "%s", 
+  				    call_get_name(c), 
+  				    call_get_number(c));
+  }
+
   gtk_list_store_append (store, &iter);
 
-  if (c->state == CALL_STATE_INCOMING)
+  if (c->state == CALL_STATE_HOLD)
+  {
+    pixbuf = gdk_pixbuf_new_from_file(PIXMAPS_DIR "/hold.svg", NULL);
+  }
+  else if (c->state == CALL_STATE_INCOMING || c->state == CALL_STATE_RINGING)
   {
     pixbuf = gdk_pixbuf_new_from_file(PIXMAPS_DIR "/ring.svg", NULL);
   }
+  else if (c->state == CALL_STATE_CURRENT)
+  {
+    pixbuf = gdk_pixbuf_new_from_file(PIXMAPS_DIR "/current.svg", NULL);
+  }
   else if (c->state == CALL_STATE_DIALING)
   {
     pixbuf = gdk_pixbuf_new_from_file(PIXMAPS_DIR "/dial.svg", NULL);
@@ -479,6 +501,8 @@ update_call_tree_add (call_t * c)
   	g_object_unref(G_OBJECT(pixbuf));
 
   //g_free(markup);
+ 
   
   update_buttons();
+	//return row_ref;
 }
-- 
GitLab