]> sjero.net Git - linphone/commitdiff
Merge branch 'master' of git.linphone.org:linphone into dev_gtk_new_ui
authorMargaux Clerc <margaux.clerc@belledonne-communications>
Fri, 14 Dec 2012 15:36:15 +0000 (16:36 +0100)
committerMargaux Clerc <margaux.clerc@belledonne-communications>
Fri, 14 Dec 2012 15:36:15 +0000 (16:36 +0100)
Conflicts:
gtk/parameters.ui

1  2 
gtk/main.c
gtk/parameters.ui

diff --combined gtk/main.c
index 1216b6106a37bad2d90471e73a84c90742a1a0ff,48bf27a089ed729dd0dc0adc8bd6136aa9a5110d..973f7afe66f7268f8ed9c3a5a225ed56136f7641
@@@ -134,7 -134,7 +134,7 @@@ static GOptionEntry linphone_options[]=
  };
  
  #define INSTALLED_XML_DIR PACKAGE_DATA_DIR "/linphone"
 -#define RELATIVE_XML_DIR 
 +#define RELATIVE_XML_DIR
  #define BUILD_TREE_XML_DIR "gtk"
  
  #ifndef WIN32
  #define SECRETS_FILE "linphone-zidcache"
  #endif
  
 -
  char *linphone_gtk_get_config_file(const char *filename){
        const int path_max=1024;
        char *config_file=g_malloc0(path_max);
        return config_file;
  }
  
 -
  #define FACTORY_CONFIG_FILE "linphonerc.factory"
  static char _factory_config_file[1024];
  static const char *linphone_gtk_get_factory_config_file(){
                                                 "%s",FACTORY_CONFIG_FILE);
        } else {
                char *progdir;
 -              
 +
                if (progpath != NULL) {
                        char *basename;
                        progdir = strdup(progpath);
@@@ -237,8 -239,8 +237,8 @@@ static void linphone_gtk_init_liblinpho
        vtable.call_encryption_changed=linphone_gtk_call_encryption_changed;
        vtable.transfer_state_changed=linphone_gtk_transfer_state_changed;
  
-       linphone_core_set_user_agent("Linphone", LINPHONE_VERSION);
        the_core=linphone_core_new(&vtable,config_file,factory_config_file,NULL);
+       linphone_core_set_user_agent(the_core,"Linphone", LINPHONE_VERSION);
        linphone_core_set_waiting_callback(the_core,linphone_gtk_wait,NULL);
        linphone_core_set_zrtp_secrets_file(the_core,secrets_file);
        g_free(secrets_file);
        }
  }
  
 -
 -
  LinphoneCore *linphone_gtk_get_core(void){
        return the_core;
  }
@@@ -302,7 -306,7 +302,7 @@@ GtkWidget *linphone_gtk_create_window(c
        GtkWidget *w;
  
        if (get_ui_file(window_name,path,sizeof(path))==-1) return NULL;
 -      
 +
        if (!gtk_builder_add_from_file (builder, path, &error)){
                g_error("Couldn't load builder file: %s", error->message);
                g_error_free (error);
@@@ -327,7 -331,7 +327,7 @@@ GtkWidget *linphone_gtk_create_widget(c
        gchar *object_ids[2];
        object_ids[0]=g_strdup(widget_name);
        object_ids[1]=NULL;
 -      
 +
        if (get_ui_file(filename,path,sizeof(path))==-1) return NULL;
        if (!gtk_builder_add_objects_from_file(builder,path,object_ids,&error)){
                g_error("Couldn't load %s from builder file %s: %s", widget_name,path,error->message);
@@@ -381,7 -385,7 +381,7 @@@ GtkWidget *linphone_gtk_get_widget(GtkW
  void linphone_gtk_display_something(GtkMessageType type,const gchar *message){
        GtkWidget *dialog;
        GtkWidget *main_window=linphone_gtk_get_main_window();
 -      
 +
        gtk_widget_show(main_window);
        if (type==GTK_MESSAGE_QUESTION)
        {
@@@ -437,7 -441,7 +437,7 @@@ void linphone_gtk_show_about()
        GdkPixbuf *logo=create_pixbuf(
            linphone_gtk_get_ui_config("logo","linphone-banner.png"));
        static const char *defcfg="defcfg";
 -      
 +
        about=linphone_gtk_create_window("about");
        gtk_about_dialog_set_url_hook(about_url_clicked,NULL,NULL);
        memset(&filestat,0,sizeof(filestat));
@@@ -479,7 -483,6 +479,7 @@@ static void set_video_window_decoration
        const char *icon_path=linphone_gtk_get_ui_config("icon",LINPHONE_ICON);
        char video_title[256];
        GdkPixbuf *pbuf=create_pixbuf(icon_path);
 +
        if (!linphone_core_in_call(linphone_gtk_get_core())){
                snprintf(video_title,sizeof(video_title),"%s video",title);
                /* When not in call, treat the video as a normal window */
@@@ -647,8 -650,8 +647,8 @@@ static void save_uri_history()
  static void completion_add_text(GtkEntry *entry, const char *text){
        GtkTreeIter iter;
        GtkTreeModel *model=gtk_entry_completion_get_model(gtk_entry_get_completion(entry));
 -      
 -      if (gtk_tree_model_get_iter_first(model,&iter)){ 
 +
 +      if (gtk_tree_model_get_iter_first(model,&iter)){
                do {
                        gchar *uri=NULL;
                        gtk_tree_model_get(model,&iter,0,&uri,-1);
        save_uri_history();
  }
  
 -
  bool_t linphone_gtk_video_enabled(void){
        const LinphoneVideoPolicy *vpol=linphone_core_get_video_policy(linphone_gtk_get_core());
        return vpol->automatically_accept && vpol->automatically_initiate;
@@@ -686,6 -690,7 +686,6 @@@ void linphone_gtk_show_main_window()
  void linphone_gtk_call_terminated(LinphoneCall *call, const char *error){
        GtkWidget *mw=linphone_gtk_get_main_window();
        if (linphone_core_get_calls(linphone_gtk_get_core())==NULL){
 -          gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"terminate_call"),FALSE);
            gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"start_call"),TRUE);
        }
        if (linphone_gtk_use_in_call_view() && call)
@@@ -699,22 -704,22 +699,22 @@@ static void linphone_gtk_update_call_bu
        const MSList *calls=linphone_core_get_calls(lc);
        GtkWidget *button;
        bool_t start_active=TRUE;
 -      bool_t stop_active=FALSE;
 +      //bool_t stop_active=FALSE;
        bool_t add_call=FALSE;
        int call_list_size=ms_list_size(calls);
 -      
 +
        if (calls==NULL){
                start_active=TRUE;
 -              stop_active=FALSE;
 +              //stop_active=FALSE;
        }else{
 -              stop_active=TRUE;       
 +              //stop_active=TRUE;
                start_active=TRUE;
                add_call=TRUE;
        }
        button=linphone_gtk_get_widget(mw,"start_call");
        gtk_widget_set_sensitive(button,start_active);
        gtk_widget_set_visible(button,!add_call);
 -      
 +
        button=linphone_gtk_get_widget(mw,"add_call");
        if (linphone_core_sound_resources_locked(lc) || (call && linphone_call_get_state(call)==LinphoneCallIncomingReceived)) {
                gtk_widget_set_sensitive(button,FALSE);
                gtk_widget_set_sensitive(button,start_active);
        }
        gtk_widget_set_visible(button,add_call);
 -      
 -      gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"terminate_call"),stop_active);
 +
 +      //gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"terminate_call"),stop_active);
  
        linphone_gtk_enable_transfer_button(lc,call_list_size>1);
        linphone_gtk_enable_conference_button(lc,call_list_size>1);
@@@ -749,6 -754,7 +749,6 @@@ static gboolean linphone_gtk_auto_answe
        return FALSE;
  }
  
 -
  void linphone_gtk_start_call(GtkWidget *w){
        LinphoneCore *lc=linphone_gtk_get_core();
        LinphoneCall *call;
                gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"start_call"),FALSE);
                g_timeout_add(100,(GSourceFunc)linphone_gtk_start_call_do,uri_bar);
        }
 -      
 +
  }
  
  void linphone_gtk_uri_bar_activate(GtkWidget *w){
        linphone_gtk_start_call(w);
  }
  
 -
  void linphone_gtk_terminate_call(GtkWidget *button){
        gboolean is_conf;
        LinphoneCall *call=linphone_gtk_get_currently_displayed_call(&is_conf);
@@@ -801,7 -808,7 +801,7 @@@ void _linphone_gtk_enable_video(gboolea
        policy.automatically_initiate=policy.automatically_accept=val;
        linphone_core_enable_video(linphone_gtk_get_core(),TRUE,TRUE);
        linphone_core_set_video_policy(linphone_gtk_get_core(),&policy);
 -      
 +
        if (val){
                linphone_core_enable_video_preview(linphone_gtk_get_core(),
                linphone_gtk_get_ui_config_int("videoselfview",VIDEOSELFVIEW_DEFAULT));
@@@ -834,6 -841,7 +834,6 @@@ void linphone_gtk_used_identity_changed
        if (sel) g_free(sel);
  }
  
 -
  void on_proxy_refresh_button_clicked(GtkWidget *w){
        LinphoneCore *lc=linphone_gtk_get_core();
        MSList const *item=linphone_core_get_proxy_config_list(lc);
@@@ -887,6 -895,7 +887,6 @@@ typedef struct _AuthTimeout
        GtkWidget *w;
  } AuthTimeout;
  
 -
  static void auth_timeout_clean(AuthTimeout *tout){
        tout->w=NULL;
  }
@@@ -938,7 -947,7 +938,7 @@@ static void linphone_gtk_auth_info_requ
        LinphoneAuthInfo *info;
        gchar *msg;
        GtkWidget *mw=linphone_gtk_get_main_window();
 -      
 +
        if (mw && GTK_WIDGET_VISIBLE(linphone_gtk_get_widget(mw,"login_frame"))){
                /*don't prompt for authentication when login frame is visible*/
                linphone_core_abort_authentication(lc,NULL);
  static void linphone_gtk_display_status(LinphoneCore *lc, const char *status){
        GtkWidget *w=linphone_gtk_get_main_window();
        GtkWidget *status_bar=linphone_gtk_get_widget(w,"status_bar");
 +
        gtk_statusbar_push(GTK_STATUSBAR(status_bar),
                        gtk_statusbar_get_context_id(GTK_STATUSBAR(status_bar),""),
                        status);
@@@ -1029,14 -1037,14 +1029,14 @@@ void linphone_gtk_notify(LinphoneCall *
                if (!notify_init ("Linphone")) ms_error("Libnotify failed to init.");
  #endif
        if (!call) {
 -        
 +
  #ifdef HAVE_NOTIFY
                if (!notify_notification_show(notify_notification_new("Linphone",msg,NULL
  #ifdef HAVE_NOTIFY1
        ,NULL
  #endif
  ),NULL))
 -       
 +
                                ms_error("Failed to send notification.");
  #else
                linphone_gtk_show_main_window();
@@@ -1149,7 -1157,7 +1149,7 @@@ static void linphone_gtk_call_state_cha
                        if (auto_answer)  {
                                linphone_call_ref(call);
                                g_timeout_add(2000,(GSourceFunc)linphone_gtk_auto_answer ,call);
 -                      }               
 +                      }
                break;
                case LinphoneCallResuming:
                        linphone_gtk_enable_hold_button(call,TRUE,TRUE);
                break;
                case LinphoneCallPausing:
                        linphone_gtk_enable_hold_button(call,TRUE,FALSE);
 +                      update_tab_header(call,FALSE);
                case LinphoneCallPausedByRemote:
                        linphone_gtk_in_call_view_set_paused(call);
 +                      update_tab_header(call,TRUE);
                break;
                case LinphoneCallConnected:
                        linphone_gtk_enable_hold_button (call,TRUE,TRUE);
@@@ -1187,7 -1193,7 +1187,7 @@@ static void update_registration_status(
        GtkTreeIter iter;
        gboolean found=FALSE;
        const char *stock_id=NULL;
 -      
 +
        if (gtk_tree_model_get_iter_first(model,&iter)){
                gpointer p;
                do{
        gtk_list_store_set(GTK_LIST_STORE(model),&iter,1,stock_id,-1);
  }
  
 -static void linphone_gtk_registration_state_changed(LinphoneCore *lc, LinphoneProxyConfig *cfg, 
 +static void linphone_gtk_registration_state_changed(LinphoneCore *lc, LinphoneProxyConfig *cfg,
                                                      LinphoneRegistrationState rs, const char *msg){
        switch (rs){
                case LinphoneRegistrationOk:
@@@ -1273,13 -1279,13 +1273,13 @@@ static GtkWidget *create_icon_menu()
        GtkWidget *image;
        gchar *tmp;
        const gchar *homesite;
 -      
 +
        homesite=linphone_gtk_get_ui_config("home","http://www.linphone.org");
        menu_item=gtk_image_menu_item_new_with_label(_("Website link"));
        tmp=g_strdup(homesite);
        g_object_set_data(G_OBJECT(menu_item),"home",tmp);
        g_object_weak_ref(G_OBJECT(menu_item),(GWeakNotify)g_free,tmp);
 -      
 +
        image=gtk_image_new_from_stock(GTK_STOCK_HELP,GTK_ICON_SIZE_MENU);
        gtk_widget_show(image);
        gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item),image);
        gtk_widget_show(menu_item);
        gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item);
        g_signal_connect(G_OBJECT(menu_item),"activate",(GCallback)linphone_gtk_link_to_website,NULL);
 -      
 +
        menu_item=gtk_image_menu_item_new_from_stock(GTK_STOCK_ABOUT,NULL);
        gtk_widget_show(menu_item);
        gtk_menu_shell_append(GTK_MENU_SHELL(menu),menu_item);
@@@ -1441,7 -1447,6 +1441,7 @@@ static void linphone_gtk_dtmf_released(
        linphone_core_stop_dtmf (linphone_gtk_get_core());
  }
  
 +
  static void linphone_gtk_connect_digits(void){
        GtkContainer *cont=GTK_CONTAINER(linphone_gtk_get_widget(linphone_gtk_get_main_window(),"dtmf_table"));
        GList *children=gtk_container_get_children(cont);
@@@ -1481,23 -1486,18 +1481,23 @@@ static void linphone_gtk_configure_main
        static const char *home;
        static const char *start_call_icon;
        static const char *add_call_icon;
 -      static const char *stop_call_icon;
 +      //static const char *stop_call_icon;
        static const char *search_icon;
        static gboolean update_check_menu;
        static gboolean buttons_have_borders;
        static gboolean show_abcd;
        GtkWidget *w=linphone_gtk_get_main_window();
 +      GHashTable *contacts_history;
 +
 +      contacts_history=g_hash_table_new_full(g_str_hash, g_str_equal,g_free, NULL);
 +      g_object_set_data(G_OBJECT(w),"history",(gpointer)contacts_history);
 +
        if (!config_loaded){
                title=linphone_gtk_get_ui_config("title","Linphone");
                home=linphone_gtk_get_ui_config("home","http://www.linphone.org");
                start_call_icon=linphone_gtk_get_ui_config("start_call_icon","startcall-green.png");
                add_call_icon=linphone_gtk_get_ui_config("add_call_icon","addcall-green.png");
 -              stop_call_icon=linphone_gtk_get_ui_config("stop_call_icon","stopcall-red.png");
 +              //stop_call_icon=linphone_gtk_get_ui_config("stop_call_icon","stopcall-red.png");
                search_icon=linphone_gtk_get_ui_config("directory_search_icon",NULL);
                update_check_menu=linphone_gtk_get_ui_config_int("update_check_menu",0);
                buttons_have_borders=linphone_gtk_get_ui_config_int("buttons_border",1);
                if (!buttons_have_borders)
                        gtk_button_set_relief(GTK_BUTTON(linphone_gtk_get_widget(w,"add_call")),GTK_RELIEF_NONE);
        }
 -      if (stop_call_icon){
 -              gtk_button_set_image(GTK_BUTTON(linphone_gtk_get_widget(w,"terminate_call")),
 -                                  create_pixmap (stop_call_icon));
 -              if (!buttons_have_borders)
 -                      gtk_button_set_relief(GTK_BUTTON(linphone_gtk_get_widget(w,"terminate_call")),GTK_RELIEF_NONE);
 -      }
        if (search_icon){
                GdkPixbuf *pbuf=create_pixbuf(search_icon);
                if(pbuf != NULL) {
@@@ -1626,7 -1632,6 +1626,7 @@@ static void linphone_gtk_init_main_wind
        linphone_gtk_call_log_update(main_window);
        
        linphone_gtk_update_call_buttons (NULL);
 +      g_object_set_data(G_OBJECT(main_window),"is_conf",GINT_TO_POINTER(FALSE));
        /*prevent the main window from being destroyed by a user click on WM controls, instead we hide it*/
        g_signal_connect (G_OBJECT (main_window), "delete-event",
                G_CALLBACK (linphone_gtk_close), main_window);
@@@ -1759,11 -1764,11 +1759,11 @@@ int main(int argc, char *argv[])
        g_thread_init(NULL);
  #endif
        gdk_threads_init();
 -      
 +
        progpath = strdup(argv[0]);
 -      
 +
        config_file=linphone_gtk_get_config_file(NULL);
 -      
 +
  
  #ifdef WIN32
        /*workaround for windows: sometimes LANG is defined to an integer value, not understood by gtk */
        gtk_rc_add_default_file("./gtkrc");
  #endif
        gdk_threads_enter();
 -      
 +
        if (!gtk_init_with_args(&argc,&argv,_("A free SIP video-phone"),
                                linphone_options,NULL,NULL)){
                gdk_threads_leave();
                return -1;
        }
 -      
 +
        settings=gtk_settings_get_default();
        g_type_class_unref (g_type_class_ref (GTK_TYPE_IMAGE_MENU_ITEM));
        g_type_class_unref (g_type_class_ref (GTK_TYPE_BUTTON));
        /*never block termination:*/
        g_signal_connect(G_OBJECT(theMacApp),"NSApplicationBlockTermination",(GCallback)on_block_termination,NULL);
  #endif
 -      
 +
        the_ui=linphone_gtk_create_window("main");
 -      
 +
 +      g_object_set_data(G_OBJECT(the_ui),"is_created",GINT_TO_POINTER(FALSE));
 +
        linphone_gtk_create_log_window();
        linphone_core_enable_logs_with_cb(linphone_gtk_log_handler);
  
        linphone_gtk_init_liblinphone(config_file, factory_config_file);
 -      
 +
        g_set_application_name(app_name);
        pbuf=create_pixbuf(linphone_gtk_get_ui_config("icon",LINPHONE_ICON));
        if (pbuf!=NULL) gtk_window_set_default_icon(pbuf);
 -      
 +
        /* do not lower timeouts under 30 ms because it exhibits a bug on gtk+/win32, with cpu running 20% all the time...*/
        gtk_timeout_add(30,(GtkFunction)linphone_gtk_iterate,(gpointer)linphone_gtk_get_core());
        gtk_timeout_add(30,(GtkFunction)linphone_gtk_check_logs,(gpointer)NULL);
diff --combined gtk/parameters.ui
index 61d357da87eb076eeb72be4795761ef5dcbdfc4f,d6d2e4927c7a6ecc2cc35f543949334b71184f87..53a6447960fee9b1f094d4ca6349977d2e47c1a6
      <property name="step_increment">1</property>
      <property name="page_increment">9.9999999995529656</property>
    </object>
-   <object class="GtkAdjustment" id="adjustment_audio_port">
+   <object class="GtkAdjustment" id="adjustment_max_audio_port">
      <property name="upper">65535</property>
      <property name="step_increment">2</property>
      <property name="page_increment">10</property>
    </object>
-   <object class="GtkAdjustment" id="adjustment_tcp_port">
+   <object class="GtkAdjustment" id="adjustment_max_video_port">
      <property name="upper">65535</property>
-     <property name="value">1</property>
-     <property name="step_increment">1</property>
+     <property name="step_increment">2</property>
      <property name="page_increment">10</property>
    </object>
-   <object class="GtkAdjustment" id="adjustment_video_port">
+   <object class="GtkAdjustment" id="adjustment_min_audio_port">
      <property name="upper">65535</property>
      <property name="step_increment">2</property>
      <property name="page_increment">10</property>
    </object>
+   <object class="GtkAdjustment" id="adjustment_min_video_port">
+     <property name="upper">65535</property>
+     <property name="step_increment">2</property>
+     <property name="page_increment">10</property>
+   </object>
+   <object class="GtkAdjustment" id="adjustment_tcp_port">
+     <property name="upper">65535</property>
+     <property name="value">1</property>
+     <property name="step_increment">1</property>
+     <property name="page_increment">10</property>
+   </object>
    <object class="GtkListStore" id="liststore1"/>
    <object class="GtkListStore" id="model1">
      <columns>
      <property name="can_focus">False</property>
      <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
      <property name="title" translatable="yes">Settings</property>
 -    <property name="icon">linphone2.png</property>
      <signal name="destroy" handler="linphone_gtk_parameters_destroyed" swapped="no"/>
      <child>
        <object class="GtkVBox" id="vbox1">
                                  <child>
                                    <object class="GtkCheckButton" id="mtu_set">
                                      <property name="label" translatable="yes">Set Maximum Transmission Unit:</property>
+                                     <property name="use_action_appearance">False</property>
                                      <property name="visible">True</property>
                                      <property name="can_focus">True</property>
                                      <property name="receives_default">False</property>
-                                     <property name="use_action_appearance">False</property>
                                      <property name="draw_indicator">True</property>
                                      <signal name="toggled" handler="linphone_gtk_mtu_set" swapped="no"/>
                                    </object>
                              <child>
                                <object class="GtkCheckButton" id="dtmf_sipinfo">
                                  <property name="label" translatable="yes">Send DTMFs as SIP info</property>
+                                 <property name="use_action_appearance">False</property>
                                  <property name="visible">True</property>
                                  <property name="can_focus">True</property>
                                  <property name="receives_default">False</property>
-                                 <property name="use_action_appearance">False</property>
                                  <property name="draw_indicator">True</property>
                                  <signal name="toggled" handler="linphone_gtk_use_sip_info_dtmf_toggled" swapped="no"/>
                                </object>
                              <child>
                                <object class="GtkCheckButton" id="ipv6_enabled">
                                  <property name="label" translatable="yes">Use IPv6 instead of IPv4</property>
+                                 <property name="use_action_appearance">False</property>
                                  <property name="visible">True</property>
                                  <property name="can_focus">True</property>
                                  <property name="receives_default">False</property>
                                  <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                 <property name="use_action_appearance">False</property>
                                  <property name="draw_indicator">True</property>
                                  <signal name="toggled" handler="linphone_gtk_ipv6_toggled" swapped="no"/>
                                </object>
                              <child>
                                <object class="GtkButton" id="tunnel_edit_button">
                                  <property name="label">gtk-edit</property>
+                                 <property name="use_action_appearance">False</property>
                                  <property name="can_focus">True</property>
                                  <property name="receives_default">True</property>
-                                 <property name="use_action_appearance">False</property>
                                  <property name="use_stock">True</property>
                                  <signal name="clicked" handler="linphone_gtk_edit_tunnel" swapped="no"/>
                                </object>
                                </packing>
                              </child>
                              <child>
-                               <object class="GtkSpinButton" id="audio_rtp_port">
+                               <object class="GtkLabel" id="label13">
                                  <property name="visible">True</property>
-                                 <property name="can_focus">True</property>
-                                 <property name="invisible_char">•</property>
-                                 <property name="primary_icon_activatable">False</property>
-                                 <property name="secondary_icon_activatable">False</property>
-                                 <property name="primary_icon_sensitive">True</property>
-                                 <property name="secondary_icon_sensitive">True</property>
-                                 <property name="adjustment">adjustment_audio_port</property>
-                                 <property name="numeric">True</property>
-                                 <signal name="value-changed" handler="linphone_gtk_audio_port_changed" swapped="no"/>
+                                 <property name="can_focus">False</property>
+                                 <property name="label" translatable="yes">DSCP fields</property>
                                </object>
                                <packing>
-                                 <property name="left_attach">1</property>
-                                 <property name="right_attach">2</property>
-                                 <property name="top_attach">1</property>
-                                 <property name="bottom_attach">2</property>
+                                 <property name="top_attach">4</property>
+                                 <property name="bottom_attach">5</property>
                                </packing>
                              </child>
                              <child>
-                               <object class="GtkSpinButton" id="video_rtp_port">
+                               <object class="GtkButton" id="dscp_edit_button">
+                                 <property name="label">gtk-edit</property>
+                                 <property name="use_action_appearance">False</property>
                                  <property name="visible">True</property>
                                  <property name="can_focus">True</property>
-                                 <property name="invisible_char">•</property>
-                                 <property name="primary_icon_activatable">False</property>
-                                 <property name="secondary_icon_activatable">False</property>
-                                 <property name="primary_icon_sensitive">True</property>
-                                 <property name="secondary_icon_sensitive">True</property>
-                                 <property name="adjustment">adjustment_video_port</property>
-                                 <property name="numeric">True</property>
-                                 <signal name="value-changed" handler="linphone_gtk_video_port_changed" swapped="no"/>
+                                 <property name="receives_default">True</property>
+                                 <property name="use_stock">True</property>
+                                 <signal name="clicked" handler="linphone_gtk_dscp_edit" swapped="no"/>
                                </object>
                                <packing>
                                  <property name="left_attach">1</property>
                                  <property name="right_attach">2</property>
-                                 <property name="top_attach">2</property>
-                                 <property name="bottom_attach">3</property>
+                                 <property name="top_attach">4</property>
+                                 <property name="bottom_attach">5</property>
                                </packing>
                              </child>
                              <child>
-                               <object class="GtkLabel" id="label13">
+                               <object class="GtkHBox" id="hbox6">
                                  <property name="visible">True</property>
                                  <property name="can_focus">False</property>
-                                 <property name="label" translatable="yes">DSCP fields</property>
+                                 <child>
+                                   <object class="GtkSpinButton" id="audio_min_rtp_port">
+                                     <property name="visible">True</property>
+                                     <property name="can_focus">True</property>
+                                     <property name="invisible_char">•</property>
+                                     <property name="primary_icon_activatable">False</property>
+                                     <property name="secondary_icon_activatable">False</property>
+                                     <property name="primary_icon_sensitive">True</property>
+                                     <property name="secondary_icon_sensitive">True</property>
+                                     <property name="adjustment">adjustment_min_audio_port</property>
+                                     <property name="numeric">True</property>
+                                     <signal name="value-changed" handler="linphone_gtk_min_audio_port_changed" swapped="no"/>
+                                   </object>
+                                   <packing>
+                                     <property name="expand">True</property>
+                                     <property name="fill">True</property>
+                                     <property name="position">0</property>
+                                   </packing>
+                                 </child>
+                                 <child>
+                                   <object class="GtkSpinButton" id="audio_max_rtp_port">
+                                     <property name="visible">True</property>
+                                     <property name="can_focus">True</property>
+                                     <property name="invisible_char">•</property>
+                                     <property name="invisible_char_set">True</property>
+                                     <property name="primary_icon_activatable">False</property>
+                                     <property name="secondary_icon_activatable">False</property>
+                                     <property name="primary_icon_sensitive">True</property>
+                                     <property name="secondary_icon_sensitive">True</property>
+                                     <property name="adjustment">adjustment_max_audio_port</property>
+                                     <property name="numeric">True</property>
+                                     <signal name="value-changed" handler="linphone_gtk_max_audio_port_changed" swapped="no"/>
+                                   </object>
+                                   <packing>
+                                     <property name="expand">True</property>
+                                     <property name="fill">True</property>
+                                     <property name="position">1</property>
+                                   </packing>
+                                 </child>
+                                 <child>
+                                   <object class="GtkCheckButton" id="fixed_audio_port">
+                                     <property name="label" translatable="yes">Fixed</property>
+                                     <property name="use_action_appearance">False</property>
+                                     <property name="visible">True</property>
+                                     <property name="can_focus">True</property>
+                                     <property name="receives_default">False</property>
+                                     <property name="draw_indicator">True</property>
+                                     <signal name="toggled" handler="linphone_gtk_fixed_audio_port_toggle" swapped="no"/>
+                                   </object>
+                                   <packing>
+                                     <property name="expand">True</property>
+                                     <property name="fill">True</property>
+                                     <property name="position">2</property>
+                                   </packing>
+                                 </child>
                                </object>
                                <packing>
-                                 <property name="top_attach">4</property>
-                                 <property name="bottom_attach">5</property>
+                                 <property name="left_attach">1</property>
+                                 <property name="right_attach">2</property>
+                                 <property name="top_attach">1</property>
+                                 <property name="bottom_attach">2</property>
                                </packing>
                              </child>
                              <child>
-                               <object class="GtkButton" id="dscp_edit_button">
-                                 <property name="label">gtk-edit</property>
+                               <object class="GtkHBox" id="hbox17">
                                  <property name="visible">True</property>
-                                 <property name="can_focus">True</property>
-                                 <property name="receives_default">True</property>
-                                 <property name="use_action_appearance">False</property>
-                                 <property name="use_stock">True</property>
-                                 <signal name="clicked" handler="linphone_gtk_dscp_edit" swapped="no"/>
+                                 <property name="can_focus">False</property>
+                                 <child>
+                                   <object class="GtkSpinButton" id="video_min_rtp_port">
+                                     <property name="visible">True</property>
+                                     <property name="can_focus">True</property>
+                                     <property name="invisible_char">•</property>
+                                     <property name="primary_icon_activatable">False</property>
+                                     <property name="secondary_icon_activatable">False</property>
+                                     <property name="primary_icon_sensitive">True</property>
+                                     <property name="secondary_icon_sensitive">True</property>
+                                     <property name="adjustment">adjustment_min_video_port</property>
+                                     <property name="numeric">True</property>
+                                     <signal name="value-changed" handler="linphone_gtk_min_video_port_changed" swapped="no"/>
+                                   </object>
+                                   <packing>
+                                     <property name="expand">True</property>
+                                     <property name="fill">True</property>
+                                     <property name="position">0</property>
+                                   </packing>
+                                 </child>
+                                 <child>
+                                   <object class="GtkSpinButton" id="video_max_rtp_port">
+                                     <property name="visible">True</property>
+                                     <property name="can_focus">True</property>
+                                     <property name="invisible_char">•</property>
+                                     <property name="invisible_char_set">True</property>
+                                     <property name="primary_icon_activatable">False</property>
+                                     <property name="secondary_icon_activatable">False</property>
+                                     <property name="primary_icon_sensitive">True</property>
+                                     <property name="secondary_icon_sensitive">True</property>
+                                     <property name="adjustment">adjustment_max_video_port</property>
+                                     <property name="numeric">True</property>
+                                     <signal name="value-changed" handler="linphone_gtk_max_video_port_changed" swapped="no"/>
+                                   </object>
+                                   <packing>
+                                     <property name="expand">True</property>
+                                     <property name="fill">True</property>
+                                     <property name="position">1</property>
+                                   </packing>
+                                 </child>
+                                 <child>
+                                   <object class="GtkCheckButton" id="fixed_video_port">
+                                     <property name="label" translatable="yes">Fixed</property>
+                                     <property name="use_action_appearance">False</property>
+                                     <property name="visible">True</property>
+                                     <property name="can_focus">True</property>
+                                     <property name="receives_default">False</property>
+                                     <property name="draw_indicator">True</property>
+                                     <signal name="toggled" handler="linphone_gtk_fixed_video_port_toggle" swapped="no"/>
+                                   </object>
+                                   <packing>
+                                     <property name="expand">True</property>
+                                     <property name="fill">True</property>
+                                     <property name="position">2</property>
+                                   </packing>
+                                 </child>
                                </object>
                                <packing>
                                  <property name="left_attach">1</property>
                                  <property name="right_attach">2</property>
-                                 <property name="top_attach">4</property>
-                                 <property name="bottom_attach">5</property>
+                                 <property name="top_attach">2</property>
+                                 <property name="bottom_attach">3</property>
                                </packing>
                              </child>
                            </object>
                          <child>
                            <object class="GtkRadioButton" id="no_nat">
                              <property name="label" translatable="yes">Direct connection to the Internet</property>
+                             <property name="use_action_appearance">False</property>
                              <property name="visible">True</property>
                              <property name="can_focus">True</property>
                              <property name="receives_default">False</property>
-                             <property name="use_action_appearance">False</property>
                              <property name="active">True</property>
                              <property name="draw_indicator">True</property>
                              <signal name="toggled" handler="linphone_gtk_no_firewall_toggled" swapped="no"/>
                              <child>
                                <object class="GtkRadioButton" id="use_nat_address">
                                  <property name="label" translatable="yes">Behind NAT / Firewall (specify gateway IP below)</property>
+                                 <property name="use_action_appearance">False</property>
                                  <property name="visible">True</property>
                                  <property name="can_focus">True</property>
                                  <property name="receives_default">False</property>
-                                 <property name="use_action_appearance">False</property>
                                  <property name="active">True</property>
                                  <property name="draw_indicator">True</property>
                                  <property name="group">no_nat</property>
                          <child>
                            <object class="GtkRadioButton" id="use_stun">
                              <property name="label" translatable="yes">Behind NAT / Firewall (use STUN to resolve)</property>
+                             <property name="use_action_appearance">False</property>
                              <property name="visible">True</property>
                              <property name="can_focus">True</property>
                              <property name="receives_default">False</property>
-                             <property name="use_action_appearance">False</property>
                              <property name="draw_indicator">True</property>
                              <property name="group">no_nat</property>
                              <signal name="toggled" handler="linphone_gtk_use_stun_toggled" swapped="no"/>
                          <child>
                            <object class="GtkRadioButton" id="use_ice">
                              <property name="label" translatable="yes">Behind NAT / Firewall (use ICE)</property>
+                             <property name="use_action_appearance">False</property>
                              <property name="visible">True</property>
                              <property name="can_focus">True</property>
                              <property name="receives_default">False</property>
-                             <property name="use_action_appearance">False</property>
                              <property name="draw_indicator">True</property>
                              <property name="group">no_nat</property>
                              <signal name="toggled" handler="linphone_gtk_use_ice_toggled" swapped="no"/>
                              <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                              <property name="n_rows">6</property>
                              <property name="n_columns">2</property>
+                             <child>
+                               <placeholder/>
+                             </child>
                              <child>
                                <object class="GtkHBox" id="ring_sound_box">
                                  <property name="visible">True</property>
                                  <child>
                                    <object class="GtkButton" id="play_ring">
                                      <property name="label">gtk-media-play</property>
+                                     <property name="use_action_appearance">False</property>
                                      <property name="visible">True</property>
                                      <property name="can_focus">True</property>
                                      <property name="receives_default">True</property>
                                      <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                     <property name="use_action_appearance">False</property>
                                      <property name="use_stock">True</property>
                                      <signal name="clicked" handler="linphone_gtk_play_ring_file" swapped="no"/>
                                    </object>
                              <child>
                                <object class="GtkCheckButton" id="echo_cancelation">
                                  <property name="label" translatable="yes">Enable echo cancellation</property>
+                                 <property name="use_action_appearance">False</property>
                                  <property name="visible">True</property>
                                  <property name="can_focus">True</property>
                                  <property name="receives_default">False</property>
-                                 <property name="use_action_appearance">False</property>
                                  <property name="draw_indicator">True</property>
                                  <signal name="toggled" handler="linphone_gtk_echo_cancelation_toggled" swapped="no"/>
                                </object>
                                  <property name="bottom_attach">6</property>
                                </packing>
                              </child>
-                             <child>
-                               <placeholder/>
-                             </child>
                            </object>
                          </child>
                        </object>
                                  <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                                  <child>
                                    <object class="GtkButton" id="wizard">
+                                     <property name="use_action_appearance">False</property>
                                      <property name="visible">True</property>
                                      <property name="can_focus">True</property>
                                      <property name="receives_default">True</property>
-                                     <property name="use_action_appearance">False</property>
                                      <signal name="clicked" handler="linphone_gtk_display_wizard" swapped="no"/>
                                      <child>
                                        <object class="GtkHBox" id="hbox5">
                                  </child>
                                  <child>
                                    <object class="GtkButton" id="add_proxy">
+                                     <property name="use_action_appearance">False</property>
                                      <property name="visible">True</property>
                                      <property name="can_focus">True</property>
                                      <property name="receives_default">True</property>
                                      <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                     <property name="use_action_appearance">False</property>
                                      <signal name="clicked" handler="linphone_gtk_add_proxy" swapped="no"/>
                                      <child>
                                        <object class="GtkHBox" id="hbox14">
                                  </child>
                                  <child>
                                    <object class="GtkButton" id="edit_proxy">
+                                     <property name="use_action_appearance">False</property>
                                      <property name="visible">True</property>
                                      <property name="can_focus">True</property>
                                      <property name="receives_default">True</property>
                                      <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                     <property name="use_action_appearance">False</property>
                                      <signal name="clicked" handler="linphone_gtk_edit_proxy" swapped="no"/>
                                      <child>
                                        <object class="GtkHBox" id="hbox16">
                                  </child>
                                  <child>
                                    <object class="GtkButton" id="remove_proxy">
+                                     <property name="use_action_appearance">False</property>
                                      <property name="visible">True</property>
                                      <property name="can_focus">True</property>
                                      <property name="receives_default">True</property>
                                      <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                     <property name="use_action_appearance">False</property>
                                      <signal name="clicked" handler="linphone_gtk_remove_proxy" swapped="no"/>
                                      <child>
                                        <object class="GtkHBox" id="hbox7">
                                      <property name="position">3</property>
                                    </packing>
                                  </child>
 -                                <child>
 -                                  <object class="GtkButton" id="create_phonics">
 -                                    <property name="use_action_appearance">False</property>
 -                                    <property name="can_focus">True</property>
 -                                    <property name="receives_default">True</property>
 -                                    <signal name="clicked" handler="linphone_gtk_create_fonics_account" swapped="no"/>
 -                                    <child>
 -                                      <object class="GtkHBox" id="hbox1">
 -                                        <property name="visible">True</property>
 -                                        <property name="can_focus">False</property>
 -                                        <child>
 -                                          <object class="GtkImage" id="image1">
 -                                            <property name="visible">True</property>
 -                                            <property name="can_focus">False</property>
 -                                            <property name="stock">gtk-network</property>
 -                                          </object>
 -                                          <packing>
 -                                            <property name="expand">True</property>
 -                                            <property name="fill">True</property>
 -                                            <property name="position">0</property>
 -                                          </packing>
 -                                        </child>
 -                                        <child>
 -                                          <object class="GtkLabel" id="label11">
 -                                            <property name="visible">True</property>
 -                                            <property name="can_focus">False</property>
 -                                            <property name="label" translatable="yes">Register to FONICS
 -virtual network !</property>
 -                                          </object>
 -                                          <packing>
 -                                            <property name="expand">True</property>
 -                                            <property name="fill">True</property>
 -                                            <property name="position">1</property>
 -                                          </packing>
 -                                        </child>
 -                                      </object>
 -                                    </child>
 -                                  </object>
 -                                  <packing>
 -                                    <property name="expand">False</property>
 -                                    <property name="fill">False</property>
 -                                    <property name="position">4</property>
 -                                  </packing>
 -                                </child>
                                </object>
                                <packing>
                                  <property name="expand">False</property>
                              <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                              <child>
                                <object class="GtkButton" id="erase_passwords">
+                                 <property name="use_action_appearance">False</property>
                                  <property name="visible">True</property>
                                  <property name="can_focus">True</property>
                                  <property name="receives_default">True</property>
                                  <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                 <property name="use_action_appearance">False</property>
                                  <signal name="clicked" handler="linphone_gtk_clear_passwords" swapped="no"/>
                                  <child>
                                    <object class="GtkHBox" id="hbox18">
                                      <child>
                                        <object class="GtkButton" id="button4">
                                          <property name="label">gtk-go-up</property>
+                                         <property name="use_action_appearance">False</property>
                                          <property name="visible">True</property>
                                          <property name="can_focus">True</property>
                                          <property name="receives_default">True</property>
                                          <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                         <property name="use_action_appearance">False</property>
                                          <property name="use_stock">True</property>
                                          <signal name="clicked" handler="linphone_gtk_codec_up" swapped="no"/>
                                        </object>
                                      <child>
                                        <object class="GtkButton" id="up_codec">
                                          <property name="label">gtk-go-down</property>
+                                         <property name="use_action_appearance">False</property>
                                          <property name="visible">True</property>
                                          <property name="can_focus">True</property>
                                          <property name="receives_default">True</property>
                                          <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                         <property name="use_action_appearance">False</property>
                                          <property name="use_stock">True</property>
                                          <signal name="clicked" handler="linphone_gtk_codec_down" swapped="no"/>
                                        </object>
                                      </child>
                                      <child>
                                        <object class="GtkButton" id="enable_codec">
+                                         <property name="use_action_appearance">False</property>
                                          <property name="visible">True</property>
                                          <property name="can_focus">True</property>
                                          <property name="receives_default">True</property>
                                          <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                         <property name="use_action_appearance">False</property>
                                          <signal name="clicked" handler="linphone_gtk_codec_enable" swapped="no"/>
                                          <child>
                                            <object class="GtkHBox" id="hbox8">
                                      </child>
                                      <child>
                                        <object class="GtkButton" id="disable_codec">
+                                         <property name="use_action_appearance">False</property>
                                          <property name="visible">True</property>
                                          <property name="can_focus">True</property>
                                          <property name="receives_default">True</property>
                                          <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                         <property name="use_action_appearance">False</property>
                                          <signal name="clicked" handler="linphone_gtk_codec_disable" swapped="no"/>
                                          <child>
                                            <object class="GtkHBox" id="hbox9">
                                  <property name="top_attach">1</property>
                                  <property name="bottom_attach">2</property>
                                  <property name="x_options">GTK_FILL</property>
 -                                <property name="y_options"/>
 +                                <property name="y_options"></property>
                                </packing>
                              </child>
                              <child>
                              <child>
                                <object class="GtkCheckButton" id="adaptive_rate_control">
                                  <property name="label" translatable="yes">Enable adaptive rate control</property>
+                                 <property name="use_action_appearance">False</property>
                                  <property name="visible">True</property>
                                  <property name="can_focus">True</property>
                                  <property name="receives_default">False</property>
-                                 <property name="use_action_appearance">False</property>
                                  <property name="xalign">0</property>
                                  <property name="draw_indicator">True</property>
                                  <signal name="toggled" handler="linphone_gtk_adaptive_rate_control_toggled" swapped="no"/>
                                  <property name="top_attach">2</property>
                                  <property name="bottom_attach">3</property>
                                  <property name="x_options">GTK_FILL</property>
 -                                <property name="y_options"/>
 +                                <property name="y_options"></property>
                                </packing>
                              </child>
                              <child>
                                  <property name="top_attach">2</property>
                                  <property name="bottom_attach">3</property>
                                  <property name="x_options">GTK_FILL</property>
-                                 <property name="y_options"></property>
+                                 <property name="y_options"/>
                                </packing>
                              </child>
                            </object>
                          <child>
                            <object class="GtkCheckButton" id="ui_level">
                              <property name="label" translatable="yes">Show advanced settings</property>
+                             <property name="use_action_appearance">False</property>
                              <property name="visible">True</property>
                              <property name="can_focus">True</property>
                              <property name="receives_default">False</property>
-                             <property name="use_action_appearance">False</property>
                              <property name="draw_indicator">True</property>
                              <signal name="toggled" handler="linphone_gtk_ui_level_toggled" swapped="no"/>
                            </object>
              <property name="layout_style">end</property>
              <child>
                <object class="GtkButton" id="button5">
+                 <property name="use_action_appearance">False</property>
                  <property name="visible">True</property>
                  <property name="can_focus">True</property>
                  <property name="receives_default">True</property>
                  <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                 <property name="use_action_appearance">False</property>
                  <signal name="clicked" handler="linphone_gtk_parameters_closed" swapped="no"/>
                  <child>
                    <object class="GtkHBox" id="hbox3">