diff --git a/gnome/src/actions.c b/gnome/src/actions.c index d2ad2971b30a2dd47d45e7ace952010d4abcdced..cc608e476f7e8a471c505b9af4f9e0e0892c3f51 100644 --- a/gnome/src/actions.c +++ b/gnome/src/actions.c @@ -241,23 +241,13 @@ sflphone_hung_up (callable_obj_t * c) /** Internal to actions: Fill account list */ void sflphone_fill_account_list (void) { - - gchar** array; - gchar** accountID; - unsigned int i; - int count; - - DEBUG ("SFLphone: Fill account list"); - - count = current_account_get_message_number (); + int count = current_account_get_message_number (); account_list_clear (); - array = (gchar **) dbus_account_list(); - + gchar **array = dbus_account_list(); if (array) { - - for (accountID = array; *accountID; accountID++) { + for (gchar **accountID = array; *accountID; accountID++) { account_t * a = g_new0 (account_t,1); a->accountID = g_strdup (*accountID); a->credential_information = NULL; @@ -267,7 +257,7 @@ void sflphone_fill_account_list (void) g_strfreev (array); } - for (i = 0; i < account_list_get_size(); i++) { + for (unsigned i = 0; i < account_list_get_size(); i++) { account_t * a = account_list_get_nth (i); if(a == NULL) { ERROR("SFLphone: Error: Could not find account %d in list", i); @@ -311,12 +301,9 @@ void sflphone_fill_account_list (void) a->state = ACCOUNT_STATE_INVALID; } - gchar * code = NULL; - code = g_hash_table_lookup (details, REGISTRATION_STATE_CODE); - - if (code != NULL) { + gchar * code = g_hash_table_lookup (details, REGISTRATION_STATE_CODE); + if (code != NULL) a->protocol_state_code = atoi (code); - } g_free (a->protocol_state_description); a->protocol_state_description = g_hash_table_lookup (details, REGISTRATION_STATE_DESCRIPTION); @@ -438,13 +425,11 @@ void sflphone_pick_up() { callable_obj_t *selectedCall = calltab_get_selected_call (active_calltree); - - DEBUG("SFLphone: Pick up"); - if (!selectedCall) { sflphone_new_call(); return; } + switch (selectedCall->_state) { case CALL_STATE_DIALING: sflphone_place_call (selectedCall); @@ -489,13 +474,9 @@ sflphone_on_hold () callable_obj_t * selectedCall = calltab_get_selected_call (current_calls); conference_obj_t * selectedConf = calltab_get_selected_conf (active_calltree); - DEBUG ("sflphone_on_hold"); - if (selectedCall) { switch (selectedCall->_state) { case CALL_STATE_CURRENT: - dbus_hold (selectedCall); - break; case CALL_STATE_RECORD: dbus_hold (selectedCall); break; @@ -525,8 +506,6 @@ sflphone_off_hold () break; } } else if (selectedConf) { - - dbus_unhold_conference (selectedConf); } } @@ -626,18 +605,7 @@ sflphone_incoming_call (callable_obj_t * c) } } -/* Truncates last char from dynamically allocated string */ -static void truncate_last_char(gchar **str) -{ - if (strlen(*str) > 0) { - gchar *tmp = *str; - tmp = g_strndup(*str, strlen(*str) - 1); - g_free(*str); - *str = tmp; - } -} - -void +static void process_dialing (callable_obj_t *c, guint keyval, gchar *key) { // We stop the tone @@ -653,18 +621,21 @@ process_dialing (callable_obj_t *c, guint keyval, gchar *key) sflphone_hang_up (); break; case GDK_BackSpace: - if (c->_state == CALL_STATE_TRANSFER) { - truncate_last_char(&c->_trsft_to); - calltree_update_call (current_calls, c, NULL); - } else { - truncate_last_char(&c->_peer_number); + { + gchar *num = (c->_state == CALL_STATE_TRANSFER) ? c->_trsft_to : c->_peer_number; + size_t len = strlen(num); + printf("\"%s\" : %zu\n", num, len); + if (len) { + len--; // delete one character + num[len] = '\0'; calltree_update_call (current_calls, c, NULL); + /* If number is now empty, hang up immediately */ - if (strlen(c->_peer_number) == 0) + if (c->_state != CALL_STATE_TRANSFER && len == 0) dbus_hang_up(c); } - break; + } case GDK_Tab: case GDK_Alt_L: case GDK_Control_L: @@ -729,6 +700,7 @@ sflphone_keypad (guint keyval, gchar * key) case GDK_Return: case GDK_KP_Enter: case GDK_Escape: + case GDK_BackSpace: break; default: calltree_display (current_calls);