]> sjero.net Git - linphone/blobdiff - gtk/propertybox.c
Fix UI feedbacks :
[linphone] / gtk / propertybox.c
index 03092a0a5a732e8f3e61bdcf8f2365fbdf3e2913..f30b55d05e080e122be42a18f2366f419ff1d7a9 100644 (file)
@@ -131,6 +131,13 @@ void linphone_gtk_update_my_port(GtkWidget *w){
        linphone_core_set_sip_transports(lc,&tr);
 }
 
+void linphone_gtk_set_propety_entry(GtkWidget *w, gboolean stunServer, gboolean ip){
+       GtkWidget *stun_entry=linphone_gtk_get_widget(gtk_widget_get_toplevel(w),"stun_server");
+       GtkWidget *ip_entry=linphone_gtk_get_widget(gtk_widget_get_toplevel(w),"nat_address");
+       gtk_widget_set_sensitive(stun_entry,stunServer);
+       gtk_widget_set_sensitive(ip_entry,ip);
+}
+
 void linphone_gtk_stun_server_changed(GtkWidget *w){
        const gchar *addr=gtk_entry_get_text(GTK_ENTRY(w));
        linphone_core_set_stun_server(linphone_gtk_get_core(),addr);
@@ -217,23 +224,38 @@ void linphone_gtk_max_video_port_changed(GtkWidget *w){
 }
 
 void linphone_gtk_no_firewall_toggled(GtkWidget *w){
-       if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)))
+       if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w))){
+               linphone_gtk_set_propety_entry(w,FALSE,FALSE);
                linphone_core_set_firewall_policy(linphone_gtk_get_core(),LinphonePolicyNoFirewall);
+       }
 }
 
 void linphone_gtk_use_nat_address_toggled(GtkWidget *w){
-       if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)))
+       if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w))){
+               linphone_gtk_set_propety_entry(w,FALSE,TRUE);
                linphone_core_set_firewall_policy(linphone_gtk_get_core(),LinphonePolicyUseNatAddress);
+       }
 }
 
 void linphone_gtk_use_stun_toggled(GtkWidget *w){
-       if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)))
+       if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w))){
+               linphone_gtk_set_propety_entry(w,TRUE,FALSE);
                linphone_core_set_firewall_policy(linphone_gtk_get_core(),LinphonePolicyUseStun);
+       }
 }
 
 void linphone_gtk_use_ice_toggled(GtkWidget *w){
-       if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)))
+       if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w))){
+               linphone_gtk_set_propety_entry(w,TRUE,FALSE);
                linphone_core_set_firewall_policy(linphone_gtk_get_core(),LinphonePolicyUseIce);
+       }
+}
+
+void linphone_gtk_use_upnp_toggled(GtkWidget *w){
+       if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w))){
+               linphone_gtk_set_propety_entry(w,FALSE,FALSE);
+               linphone_core_set_firewall_policy(linphone_gtk_get_core(),LinphonePolicyUseUpnp);
+       }
 }
 
 void linphone_gtk_mtu_changed(GtkWidget *w){
@@ -772,6 +794,8 @@ static LangCodes supported_langs[]={
        {       "zh_CN" ,       N_("Chinese")   },
        {       "zh_TW" ,       N_("Traditional Chinese")       },
        {       "nb_NO" ,       N_("Norwegian") },
+       {       "he"    ,       N_("Hebrew")    },
+       {       "sr"    ,       N_("Serbian")   },
        {       NULL    ,       NULL            }
 };
 
@@ -794,7 +818,12 @@ static void linphone_gtk_fill_langs(GtkWidget *pb){
        const char *all_langs="C " LINPHONE_ALL_LANGS;
        const char *name;
        int i=0,index=0;
-       const char *cur_lang=getenv("LANG");
+       const char *cur_lang;
+       #if defined(WIN32) || defined(__APPLE__)
+               cur_lang=getenv("LANG");
+       #else
+               cur_lang=getenv("LANGUAGE");
+       #endif
        int cur_lang_index=-1;
        char text[256]={0};
        if (cur_lang==NULL) cur_lang="C";
@@ -818,7 +847,12 @@ static void linphone_gtk_fill_langs(GtkWidget *pb){
 void linphone_gtk_lang_changed(GtkComboBox *combo){
        const char *selected=gtk_combo_box_get_active_text(combo);
        char code[10];
-       const char *cur_lang=getenv("LANG");
+       const char *cur_lang;
+       #if defined(WIN32) || defined(__APPLE__)
+               cur_lang=getenv("LANG");
+       #else
+               cur_lang=getenv("LANGUAGE");
+       #endif
        if (selected!=NULL){
                sscanf(selected,"%s",code);
                if (cur_lang==NULL) cur_lang="C";
@@ -869,19 +903,35 @@ void linphone_gtk_ui_level_toggled(GtkWidget *w) {
        linphone_gtk_ui_level_adapt(top);
 }
 
+static void linphone_gtk_set_media_encryption_mandatory_sensitive(GtkWidget *propbox, gboolean val){
+       GtkWidget *w=linphone_gtk_get_widget(propbox,"media_encryption_mandatory");
+       gtk_widget_set_sensitive(w,val);
+}
+
 static void linphone_gtk_media_encryption_changed(GtkWidget *combo){
        char *selected=gtk_combo_box_get_active_text(GTK_COMBO_BOX(combo));
        LinphoneCore *lc=linphone_gtk_get_core();
+       GtkWidget *toplevel=gtk_widget_get_toplevel(combo);
        if (selected!=NULL){
-               if (strcasecmp(selected,"SRTP")==0)
+               if (strcasecmp(selected,"SRTP")==0){
                        linphone_core_set_media_encryption(lc,LinphoneMediaEncryptionSRTP);
-               else if (strcasecmp(selected,"ZRTP")==0)
+                       linphone_gtk_set_media_encryption_mandatory_sensitive(toplevel,TRUE);
+               }else if (strcasecmp(selected,"ZRTP")==0){
                        linphone_core_set_media_encryption(lc,LinphoneMediaEncryptionZRTP);
-               else linphone_core_set_media_encryption(lc,LinphoneMediaEncryptionNone);
+                       linphone_gtk_set_media_encryption_mandatory_sensitive(toplevel,FALSE);
+               }
+               else {
+                       linphone_core_set_media_encryption(lc,LinphoneMediaEncryptionNone);
+                       linphone_gtk_set_media_encryption_mandatory_sensitive(toplevel,FALSE);
+               }
                g_free(selected);
        }else g_warning("gtk_combo_box_get_active_text() returned NULL");
 }
 
+void linphone_gtk_set_media_encryption_mandatory(GtkWidget *button){
+       linphone_core_set_media_encryption_mandatory(linphone_gtk_get_core(),gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)));
+}
+
 static void linphone_gtk_show_media_encryption(GtkWidget *pb){
        LinphoneCore *lc=linphone_gtk_get_core();
        GtkWidget *combo=linphone_gtk_get_widget(pb,"media_encryption_combo");
@@ -917,21 +967,31 @@ static void linphone_gtk_show_media_encryption(GtkWidget *pb){
                /*hide this setting*/
                gtk_widget_hide(combo);
                gtk_widget_hide(linphone_gtk_get_widget(pb,"media_encryption_label"));
+               gtk_widget_hide(linphone_gtk_get_widget(pb,"media_encryption_mandatory"));
        }else{
                LinphoneMediaEncryption menc=linphone_core_get_media_encryption(lc);
                switch(menc){
                        case LinphoneMediaEncryptionNone:
                                gtk_combo_box_set_active(GTK_COMBO_BOX(combo),0);
+                               linphone_gtk_set_media_encryption_mandatory_sensitive(pb,FALSE);
                        break;
                        case LinphoneMediaEncryptionSRTP:
-                               if (srtp_id!=-1) gtk_combo_box_set_active(GTK_COMBO_BOX(combo),srtp_id);
+                               if (srtp_id!=-1) {
+                                       gtk_combo_box_set_active(GTK_COMBO_BOX(combo),srtp_id);
+                                       linphone_gtk_set_media_encryption_mandatory_sensitive(pb,TRUE);
+                               }
                        break;
                        case LinphoneMediaEncryptionZRTP:
-                               if (zrtp_id!=-1) gtk_combo_box_set_active(GTK_COMBO_BOX(combo),zrtp_id);
+                               if (zrtp_id!=-1) {
+                                       gtk_combo_box_set_active(GTK_COMBO_BOX(combo),zrtp_id);
+                                       linphone_gtk_set_media_encryption_mandatory_sensitive(pb,FALSE);
+                               }
                        break;
                }
                g_signal_connect(G_OBJECT(combo),"changed",(GCallback)linphone_gtk_media_encryption_changed,NULL);
        }
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(pb,"media_encryption_mandatory")),
+                                    linphone_core_is_media_encryption_mandatory(lc));
        g_object_unref(G_OBJECT(model));
 }
 
@@ -974,10 +1034,8 @@ void linphone_gtk_show_parameters(void){
        if (pb==NULL) {
                pb=linphone_gtk_create_window("parameters");
                g_object_set_data(G_OBJECT(mw),"parameters",pb);
-               ms_error("linphone_gtk_show_paramters: create");
        }else {
                gtk_widget_show(pb);
-               ms_error("linphone_gtk_show_parameters: show");
                return;
        }
        codec_list=linphone_gtk_get_widget(pb,"codec_list");
@@ -987,21 +1045,21 @@ void linphone_gtk_show_parameters(void){
                                linphone_core_ipv6_enabled(lc));
        linphone_core_get_sip_transports(lc,&tr);
 
-    if (tr.tcp_port > 0) {
-        gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(pb,"proto_combo")), 1);
-        gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"proto_port")),
+       if (tr.tcp_port > 0) {
+               gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(pb,"proto_combo")), 1);
+               gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"proto_port")),
                                tr.tcp_port);
-    }
-    else if (tr.tls_port > 0) {
-        gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(pb,"proto_combo")), 2);
-        gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"proto_port")),
+       }
+       else if (tr.tls_port > 0) {
+               gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(pb,"proto_combo")), 2);
+               gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"proto_port")),
                                tr.tls_port);
-    }
-    else {
-        gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(pb,"proto_combo")), 0);
-        gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"proto_port")),
+       }
+       else {
+               gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(pb,"proto_combo")), 0);
+               gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"proto_port")),
                                tr.udp_port);
-    }
+       }
 
        linphone_core_get_audio_port_range(lc, &min_port, &max_port);
        gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb, "audio_min_rtp_port")), min_port);
@@ -1038,7 +1096,14 @@ void linphone_gtk_show_parameters(void){
                case LinphonePolicyUseIce:
                        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(pb,"use_ice")),TRUE);
                break;
+               case LinphonePolicyUseUpnp:
+                       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(pb,"use_upnp")),TRUE);
+               break;
        }
+       if(!linphone_core_upnp_available(lc)) {
+               gtk_widget_hide(linphone_gtk_get_widget(pb,"use_upnp"));
+       }
+
        mtu=linphone_core_get_mtu(lc);
        if (mtu<=0){
                gtk_widget_set_sensitive(linphone_gtk_get_widget(pb,"mtu"),FALSE);
@@ -1141,44 +1206,22 @@ void linphone_gtk_edit_tunnel_closed(GtkWidget *button){
         gtk_widget_destroy(pb);
 }
 
-
-static void tunnel_get_server_host_and_port(LinphoneTunnel *tunnel, char *host, int size, int *port){
-       char *colon;
-       char *addresses;
-       char *str1;
-       char *address;
-       const char* configured_addresses;
-
-       configured_addresses=linphone_tunnel_get_servers(tunnel);
-
-       if (configured_addresses==NULL){
-               host[0]=0;
-               *port=0;
-               return;
-       }
-       addresses=ms_strdup(configured_addresses);
-       str1=addresses;
-       address=strtok(str1," "); // Not thread safe
-       if (!address) return;
-       colon=strchr(address, ':');
-       if (!colon) return;
-       *colon++='\0';
-       *port=atoi(colon);
-       strncpy(host,address,size);
-       ms_free(addresses);
-}
-
-
 void linphone_gtk_edit_tunnel(GtkButton *button){
        GtkWidget *w=linphone_gtk_create_window("tunnel_config");
        LinphoneCore *lc=linphone_gtk_get_core();
        LinphoneTunnel *tunnel=linphone_core_get_tunnel(lc);
-       char host[128]={'\0'};
+       const MSList *configs;
+       const char *host = NULL;
        int port=0;
        
        if (!tunnel) return;
        
-       tunnel_get_server_host_and_port(tunnel, host, sizeof(host), &port);
+       configs = linphone_tunnel_get_servers(tunnel);
+       if(configs != NULL) {
+               LinphoneTunnelConfig *ltc = (LinphoneTunnelConfig *)configs->data;
+               host = linphone_tunnel_config_get_host(ltc);
+               port = linphone_tunnel_config_get_port(ltc);
+       }
 
        gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(w,"host")),host);
        if (port==0) port=443;
@@ -1211,6 +1254,7 @@ void linphone_gtk_tunnel_ok(GtkButton *button){
        GtkWidget *w=gtk_widget_get_toplevel(GTK_WIDGET(button));
        LinphoneCore *lc=linphone_gtk_get_core();
        LinphoneTunnel *tunnel=linphone_core_get_tunnel(lc);
+       LinphoneTunnelConfig *config=linphone_tunnel_config_new();
 
        gint port = (gint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(w,"port")));
        gboolean enabled=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(w,"radio_enable")));
@@ -1224,7 +1268,9 @@ void linphone_gtk_tunnel_ok(GtkButton *button){
        if (host && *host=='\0') host=NULL;
        if (http_port==0) http_port=8080;
        linphone_tunnel_clean_servers(tunnel);
-       linphone_tunnel_add_server(tunnel,host,port);
+       linphone_tunnel_config_set_host(config, host);
+       linphone_tunnel_config_set_port(config, port);
+       linphone_tunnel_add_server(tunnel, config);
        linphone_tunnel_enable(tunnel,enabled);
        linphone_tunnel_set_http_proxy(tunnel,http_host,http_port,username,password);
        
@@ -1286,4 +1332,3 @@ void linphone_gtk_dscp_edit_response(GtkWidget *dialog, guint response_id){
        }
        gtk_widget_destroy(dialog);
 }
-