From c79c85835a253aff55e49f917f2f7c6fb69d31df Mon Sep 17 00:00:00 2001
From: Simon Morlat <simon.morlat@linphone.org>
Date: Mon, 6 Feb 2012 13:20:40 +0100
Subject: [PATCH] improve log window

---
 gtk/log.ui        |  96 +++++++++++++++++++----------
 gtk/logging.c     |  56 +++++++++++++----
 gtk/parameters.ui | 149 +++++++++++++++++++++-------------------------
 3 files changed, 179 insertions(+), 122 deletions(-)

diff --git a/gtk/log.ui b/gtk/log.ui
index 1192534a4a..4fe887e26b 100644
--- a/gtk/log.ui
+++ b/gtk/log.ui
@@ -1,50 +1,60 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
   <requires lib="gtk+" version="2.16"/>
-  <!-- interface-naming-policy toplevel-contextual -->
   <object class="GtkDialog" id="log">
     <property name="width_request">540</property>
     <property name="height_request">290</property>
+    <property name="can_focus">False</property>
     <property name="border_width">5</property>
     <property name="title" translatable="yes">Linphone debug window</property>
     <property name="window_position">center-on-parent</property>
     <property name="type_hint">normal</property>
     <property name="deletable">False</property>
-    <property name="has_separator">False</property>
-    <signal name="response" handler="gtk_widget_hide"/>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox1">
+      <object class="GtkBox" id="dialog-vbox1">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
         <property name="spacing">2</property>
-        <child>
-          <object class="GtkScrolledWindow" id="scrolledwindow1">
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area1">
             <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="hscrollbar_policy">never</property>
-            <property name="vscrollbar_policy">automatic</property>
-            <property name="window_placement">bottom-left</property>
-            <property name="window_placement_set">True</property>
-            <property name="shadow_type">in</property>
+            <property name="can_focus">False</property>
+            <property name="homogeneous">True</property>
+            <property name="layout_style">spread</property>
             <child>
-              <object class="GtkTextView" id="textview">
+              <object class="GtkCheckButton" id="scroll_to_end">
+                <property name="label" translatable="yes">Scroll to end</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
-                <property name="editable">False</property>
-                <property name="wrap_mode">word</property>
+                <property name="receives_default">False</property>
+                <property name="use_action_appearance">False</property>
+                <property name="xalign">0</property>
+                <property name="active">True</property>
+                <property name="draw_indicator">True</property>
+                <signal name="toggled" handler="linphone_gtk_log_scroll_to_end" swapped="no"/>
               </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
             </child>
-          </object>
-          <packing>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area1">
-            <property name="visible">True</property>
-            <property name="layout_style">end</property>
             <child>
-              <placeholder/>
+              <object class="GtkButton" id="button2">
+                <property name="label">gtk-clear</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>
+                <property name="use_stock">True</property>
+                <signal name="clicked" handler="linphone_gtk_log_clear" swapped="no"/>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
             </child>
             <child>
               <object class="GtkButton" id="button1">
@@ -52,25 +62,51 @@
                 <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_log_hide"/>
+                <signal name="clicked" handler="linphone_gtk_log_hide" swapped="no"/>
               </object>
               <packing>
                 <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">1</property>
+                <property name="fill">True</property>
+                <property name="position">2</property>
               </packing>
             </child>
           </object>
           <packing>
             <property name="expand">False</property>
-            <property name="pack_type">end</property>
+            <property name="fill">True</property>
             <property name="position">0</property>
           </packing>
         </child>
+        <child>
+          <object class="GtkScrolledWindow" id="scrolledwindow1">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="hscrollbar_policy">never</property>
+            <property name="window_placement">bottom-left</property>
+            <property name="window_placement_set">True</property>
+            <property name="shadow_type">in</property>
+            <child>
+              <object class="GtkTextView" id="textview">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="editable">False</property>
+                <property name="wrap_mode">word</property>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
       </object>
     </child>
     <action-widgets>
+      <action-widget response="0">scroll_to_end</action-widget>
+      <action-widget response="0">button2</action-widget>
       <action-widget response="0">button1</action-widget>
     </action-widgets>
   </object>
diff --git a/gtk/logging.c b/gtk/logging.c
index ebadeedfc0..e2a9da600a 100644
--- a/gtk/logging.c
+++ b/gtk/logging.c
@@ -239,18 +239,12 @@ void linphone_gtk_log_show(void){
 	gtk_window_present(GTK_WINDOW(log_window));
 }
 
-static void linphone_gtk_display_log(OrtpLogLevel lev, const char *msg){
+static void linphone_gtk_display_log(GtkTextView *v, OrtpLogLevel lev, const char *msg){
 	GtkTextIter iter,begin;
 	int off;
-	static GtkTextView *v=NULL;
 	GtkTextBuffer *b;
 	const char *lname="undef";
 
-	if (log_window==NULL) {
-		return;
-	}
-
-	if (v==NULL) v=GTK_TEXT_VIEW(linphone_gtk_get_widget(log_window,"textview"));
 	b=gtk_text_view_get_buffer(v);
 	switch(lev){
 		case ORTP_DEBUG:
@@ -285,10 +279,7 @@ static void linphone_gtk_display_log(OrtpLogLevel lev, const char *msg){
 	gtk_text_buffer_get_iter_at_offset(b,&begin,off);
 	if (lev==ORTP_ERROR || lev==ORTP_FATAL) gtk_text_buffer_apply_tag_by_name(b,"red",&begin,&iter);
 	else if (lev==ORTP_WARNING) gtk_text_buffer_apply_tag_by_name(b,"orange",&begin,&iter);
-	/*
-	gtk_text_buffer_get_end_iter(b,&iter);
-	gtk_text_view_scroll_to_iter(v,&iter,0,FALSE,0,0);
-	*/
+	
 	while(gtk_text_buffer_get_char_count(b)>LOG_MAX_CHARS){
 		GtkTextIter iter_line_after;
 		gtk_text_buffer_get_start_iter(b,&iter);
@@ -297,23 +288,50 @@ static void linphone_gtk_display_log(OrtpLogLevel lev, const char *msg){
 			gtk_text_buffer_delete(b,&iter,&iter_line_after);
 		}
 	}
+	
+}
+
+static void stick_to_end(GtkTextView *v){
+	GtkTextBuffer *b;
+	GtkTextIter iter;
+	b=gtk_text_view_get_buffer(v);
+	gtk_text_buffer_get_end_iter(b,&iter);
+	gtk_text_view_scroll_to_iter(v,&iter,0,FALSE,1.0,0);
+}
+
+void linphone_gtk_log_scroll_to_end(GtkToggleButton *button){
+	if (gtk_toggle_button_get_active(button)){
+		GtkTextView *v=GTK_TEXT_VIEW(linphone_gtk_get_widget(log_window,"textview"));
+		stick_to_end(v);
+	}
 }
 
+/*
+ * called from Gtk main loop.
+**/
 gboolean linphone_gtk_check_logs(){
 	GList *elem;
+	GtkTextView *v=NULL;
+	if (log_window) v=GTK_TEXT_VIEW(linphone_gtk_get_widget(log_window,"textview"));
 	g_static_mutex_lock(&log_mutex);
 	for(elem=log_queue;elem!=NULL;elem=elem->next){
 		LinphoneGtkLog *lgl=(LinphoneGtkLog*)elem->data;
-		linphone_gtk_display_log(lgl->lev,lgl->msg);
+		if (v) linphone_gtk_display_log(v,lgl->lev,lgl->msg);
 		g_free(lgl->msg);
 		g_free(lgl);
 	}
 	if (log_queue) g_list_free(log_queue);
 	log_queue=NULL;
 	g_static_mutex_unlock(&log_mutex);
+	if (v)
+		linphone_gtk_log_scroll_to_end(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(log_window,"scroll_to_end")));
 	return TRUE;
 }
 
+
+/*
+ * Called from any linphone thread.
+ */
 void linphone_gtk_log_push(OrtpLogLevel lev, const char *fmt, va_list args){
 	gchar *msg=g_strdup_vprintf(fmt,args);
 	LinphoneGtkLog *lgl=g_new(LinphoneGtkLog,1);
@@ -325,3 +343,17 @@ void linphone_gtk_log_push(OrtpLogLevel lev, const char *fmt, va_list args){
 	g_static_mutex_unlock(&log_mutex);
 }
 
+void linphone_gtk_log_clear(void){
+	if (log_window){
+		GtkTextIter end,begin;
+		GtkTextView *v;
+		GtkTextBuffer *b;
+		v=GTK_TEXT_VIEW(linphone_gtk_get_widget(log_window,"textview"));
+		b=gtk_text_view_get_buffer(v);
+		gtk_text_buffer_get_start_iter(b,&begin);
+		gtk_text_buffer_get_end_iter(b,&end);
+		gtk_text_buffer_delete(b,&begin,&end);
+	}
+}
+
+
diff --git a/gtk/parameters.ui b/gtk/parameters.ui
index dcea80e264..4a6748f763 100644
--- a/gtk/parameters.ui
+++ b/gtk/parameters.ui
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface>
   <requires lib="gtk+" version="2.18"/>
-  <!-- interface-naming-policy toplevel-contextual -->
   <object class="GtkAdjustment" id="adjustment1">
     <property name="lower">500</property>
     <property name="upper">3001</property>
@@ -48,12 +47,22 @@
     <property name="step_increment">1</property>
     <property name="page_increment">9.9999999995529656</property>
   </object>
+  <object class="GtkAdjustment" id="adjustment_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">
     <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="GtkAdjustment" id="adjustment_video_port">
+    <property name="upper">65535</property>
+    <property name="step_increment">2</property>
+    <property name="page_increment">10</property>
+  </object>
   <object class="GtkListStore" id="liststore1"/>
   <object class="GtkListStore" id="model1">
     <columns>
@@ -215,8 +224,6 @@
                                     <property name="can_focus">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">adjustment1</property>
                                     <signal name="value-changed" handler="linphone_gtk_mtu_changed" swapped="no"/>
                                   </object>
@@ -327,8 +334,6 @@
                                 <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">adjustment7</property>
                               </object>
                               <packing>
@@ -337,62 +342,60 @@
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkSpinButton" id="video_rtp_port">
+                              <object class="GtkLabel" id="media_encryption_label">
                                 <property name="visible">True</property>
-                                <property name="can_focus">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="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="can_focus">False</property>
+                                <property name="label" translatable="yes">Media encryption type</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">3</property>
+                                <property name="bottom_attach">4</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkSpinButton" id="audio_rtp_port">
+                              <object class="GtkComboBox" id="media_encryption_combo">
                                 <property name="visible">True</property>
-                                <property name="can_focus">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="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">adjustment3</property>
-                                <signal name="value-changed" handler="linphone_gtk_audio_port_changed" swapped="no"/>
+                                <property name="can_focus">False</property>
+                                <property name="active">0</property>
                               </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">3</property>
+                                <property name="bottom_attach">4</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkLabel" id="label7">
-                                <property name="visible">True</property>
+                              <object class="GtkLabel" id="tunnel_label">
                                 <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="label" translatable="yes">Video RTP/UDP:</property>
-                                <property name="justify">right</property>
+                                <property name="label" translatable="yes">Tunnel</property>
                               </object>
                               <packing>
-                                <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="GtkLabel" id="label6">
+                              <object class="GtkButton" id="tunnel_edit_button">
+                                <property name="label" translatable="yes">edit</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_edit_tunnel" swapped="no"/>
+                              </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>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label7">
                                 <property name="visible">True</property>
                                 <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="label" translatable="yes">Audio RTP/UDP:</property>
+                                <property name="label" translatable="yes">Video RTP/UDP:</property>
                                 <property name="justify">right</property>
                               </object>
                               <packing>
@@ -401,52 +404,48 @@
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkLabel" id="media_encryption_label">
+                              <object class="GtkLabel" id="label6">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="label" translatable="yes">Media encryption type</property>
+                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                <property name="label" translatable="yes">Audio RTP/UDP:</property>
+                                <property name="justify">right</property>
                               </object>
                               <packing>
-                                <property name="top_attach">3</property>
-                                <property name="bottom_attach">4</property>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkComboBox" id="media_encryption_combo">
+                              <object class="GtkSpinButton" id="audio_rtp_port">
                                 <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="active">0</property>
+                                <property name="can_focus">True</property>
+                                <property name="invisible_char">•</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"/>
                               </object>
                               <packing>
                                 <property name="left_attach">1</property>
                                 <property name="right_attach">2</property>
-                                <property name="top_attach">3</property>
-                                <property name="bottom_attach">4</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkLabel" id="tunnel_label">
-                                <property name="can_focus">False</property>
-                                <property name="label" translatable="yes">Tunnel</property>
-                              </object>
-                              <packing>
-                                <property name="top_attach">4</property>
-                                <property name="bottom_attach">5</property>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkButton" id="tunnel_edit_button">
-                                <property name="label" translatable="yes">edit</property>
+                              <object class="GtkSpinButton" id="video_rtp_port">
+                                <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_edit_tunnel" swapped="no"/>
+                                <property name="invisible_char">•</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"/>
                               </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>
@@ -545,8 +544,6 @@
                                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</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>
                                     <signal name="changed" handler="linphone_gtk_nat_address_changed" swapped="no"/>
                                   </object>
                                   <packing>
@@ -617,8 +614,6 @@
                                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</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>
                                     <signal name="changed" handler="linphone_gtk_stun_server_changed" swapped="no"/>
                                   </object>
                                   <packing>
@@ -786,8 +781,6 @@
                                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</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>
                                 <signal name="editing-done" handler="linphone_gtk_alsa_special_device_changed" swapped="no"/>
                               </object>
                               <packing>
@@ -1138,8 +1131,6 @@
                                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</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>
                                 <signal name="changed" handler="linphone_gtk_update_my_contact" swapped="no"/>
                               </object>
                               <packing>
@@ -1178,8 +1169,6 @@
                                 <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</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>
                                 <signal name="changed" handler="linphone_gtk_update_my_contact" swapped="no"/>
                               </object>
                               <packing>
@@ -1197,8 +1186,6 @@
                                 <property name="editable">False</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>
                               </object>
                               <packing>
                                 <property name="left_attach">1</property>
@@ -1255,6 +1242,9 @@
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
                                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                    <child internal-child="selection">
+                                      <object class="GtkTreeSelection" id="treeview-selection1"/>
+                                    </child>
                                   </object>
                                 </child>
                               </object>
@@ -1720,6 +1710,9 @@ virtual network !</property>
                                         <property name="can_focus">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="has_tooltip">True</property>
+                                        <child internal-child="selection">
+                                          <object class="GtkTreeSelection" id="treeview-selection2"/>
+                                        </child>
                                       </object>
                                     </child>
                                   </object>
@@ -1926,8 +1919,6 @@ virtual network !</property>
                                 <property name="tooltip_text" translatable="yes">0 stands for "unlimited"</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">adjustment5</property>
                                 <signal name="value-changed" handler="linphone_gtk_upload_bw_changed" swapped="no"/>
                               </object>
@@ -1948,8 +1939,6 @@ virtual network !</property>
                                 <property name="tooltip_text" translatable="yes">0 stands for "unlimited"</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">adjustment6</property>
                                 <signal name="value-changed" handler="linphone_gtk_download_bw_changed" swapped="no"/>
                               </object>
-- 
GitLab