From 554c5c1fd9d07bd1cb1046660edd41fa352d9720 Mon Sep 17 00:00:00 2001
From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com>
Date: Thu, 23 Oct 2008 11:55:29 -0400
Subject: [PATCH] Fix bug #102

The sip section in the preferences window is set insensitive if no sip accounts are configured
---
 sflphone-gtk/src/accountlist.c  | 34 +++++++++++++++++++++++++++++++++
 sflphone-gtk/src/accountlist.h  | 12 ++++++++++++
 sflphone-gtk/src/configwindow.c | 15 ++++++++++++---
 src/managerimpl.cpp             |  3 +++
 4 files changed, 61 insertions(+), 3 deletions(-)

diff --git a/sflphone-gtk/src/accountlist.c b/sflphone-gtk/src/accountlist.c
index 92280a3fba..893d057d24 100644
--- a/sflphone-gtk/src/accountlist.c
+++ b/sflphone-gtk/src/accountlist.c
@@ -230,3 +230,37 @@ gchar* account_list_get_current_id( void ){
         else 
             return __CURRENT_ACCOUNT_ID;
 }
+
+int account_list_get_sip_account_number( void ){
+
+    int n;
+    guint size, i;
+    account_t *current;
+
+    size = account_list_get_size();
+    n = 0;
+    for( i=0; i<size ;i++ ){
+        current = account_list_get_nth( i );
+        if( strcmp(g_hash_table_lookup(current->properties, ACCOUNT_TYPE), "SIP" ) == 0 )
+            n++;
+    }
+
+    return n;
+}
+
+int account_list_get_iax_account_number( void ){
+
+    int n;
+    guint size, i;
+    account_t *current;
+
+    size = account_list_get_size();
+    n = 0;
+    for( i=0; i<size ;i++ ){
+        current = account_list_get_nth( i );
+        if( strcmp(g_hash_table_lookup(current->properties, ACCOUNT_TYPE), "IAX" ) == 0 )
+            n++;
+    }
+
+    return n;
+}
diff --git a/sflphone-gtk/src/accountlist.h b/sflphone-gtk/src/accountlist.h
index 72dde233b8..18b5575d87 100644
--- a/sflphone-gtk/src/accountlist.h
+++ b/sflphone-gtk/src/accountlist.h
@@ -167,4 +167,16 @@ void account_list_move_down( guint index );
  */
 gchar* account_list_get_current_id( void );
 
+/**
+ * Returns the number of SIP accounts that have been configured
+ */
+int account_list_get_sip_account_number( void );
+
+/**
+ * Returns the number of IAX accounts that have been configured
+ */
+int account_list_get_iax_account_number( void );
+
+
+
 #endif 
diff --git a/sflphone-gtk/src/configwindow.c b/sflphone-gtk/src/configwindow.c
index 9081ef06e9..2c2c731bc3 100644
--- a/sflphone-gtk/src/configwindow.c
+++ b/sflphone-gtk/src/configwindow.c
@@ -314,7 +314,7 @@ set_pulse_app_volume_control( void )
   dbus_set_pulse_app_volume_control();
 }
 
-static void update_port( GtkSpinButton *button, void *ptr )
+static void update_port( GtkSpinButton *button UNUSED, void *ptr )
 {
   dbus_set_sip_port(gtk_spin_button_get_value_as_int((GtkSpinButton *)(ptr)));
 }
@@ -439,6 +439,10 @@ create_accounts_tab()
 GtkWidget*
 create_general_settings ()
 {
+
+    int curPort;
+    int n;
+
   GtkWidget *ret;
 
   GtkWidget *notifFrame;
@@ -542,14 +546,18 @@ create_general_settings ()
   gtk_box_pack_start( GTK_BOX(vbox) , widg , TRUE , TRUE , 1);
   g_signal_connect(G_OBJECT( widg ) , "clicked" , G_CALLBACK( set_pulse_app_volume_control ) , NULL);
 
+  n = account_list_get_sip_account_number();
+  printf("sip account number = %i\n", n);
+
   /** SIP port information */
-  int curPort = dbus_get_sip_port();
+  curPort = dbus_get_sip_port();
   if(curPort <= 0 || curPort > 65535)
     curPort = 5060;
-    
+
   frame = gtk_frame_new( _("SIP Port"));
   gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0);
   gtk_widget_show( frame );
+  gtk_widget_set_sensitive( GTK_WIDGET(frame), (n==0)?FALSE:TRUE );
 
   hbox = gtk_hbox_new(FALSE, 10);
   gtk_widget_show( hbox );
@@ -557,6 +565,7 @@ create_general_settings ()
 
   GtkWidget *applyButton = gtk_button_new_with_label(_("Apply"));
   gtk_widget_set_size_request(applyButton, 60, 35);
+  //gtk_widget_set_sensitive( GTK_WIDGET(applyButton), (n==0)?FALSE:TRUE );
 
   label = gtk_label_new(_("Port:"));
 
diff --git a/src/managerimpl.cpp b/src/managerimpl.cpp
index 9a5c1cfe1b..82f6bae0a4 100644
--- a/src/managerimpl.cpp
+++ b/src/managerimpl.cpp
@@ -2408,7 +2408,10 @@ ManagerImpl::getSipPort()
     if( _userAgent )
         return _userAgent->getSipPort();
     else
+    {
+        // It means that no SIP accounts are configured, so return a default value
         return 0;
+    }
 }
 
 void 
-- 
GitLab