diff --git a/gtk/log.ui b/gtk/log.ui index 1192534a4..4fe887e26 100644 --- a/gtk/log.ui +++ b/gtk/log.ui @@ -1,28 +1,89 @@ - + - 540 290 + False 5 Linphone debug window center-on-parent normal False - False - - + True + False vertical 2 + + + True + False + True + spread + + + Scroll to end + True + True + False + False + 0 + True + True + + + + False + True + 0 + + + + + gtk-clear + True + True + True + False + True + + + + False + True + 1 + + + + + gtk-close + True + True + True + False + True + + + + False + True + 2 + + + + + False + True + 0 + + True True never - automatic bottom-left True in @@ -36,41 +97,16 @@ + True + True 1 - - - True - end - - - - - - gtk-close - True - True - True - True - - - - False - False - 1 - - - - - False - end - 0 - - + scroll_to_end + button2 button1 diff --git a/gtk/logging.c b/gtk/logging.c index ebadeedfc..e2a9da600 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 dcea80e26..4a6748f76 100644 --- a/gtk/parameters.ui +++ b/gtk/parameters.ui @@ -1,7 +1,6 @@ - 500 3001 @@ -48,12 +47,22 @@ 1 9.9999999995529656 + + 65535 + 2 + 10 + 65535 1 1 10 + + 65535 + 2 + 10 + @@ -215,8 +224,6 @@ True False False - True - True adjustment1 @@ -327,8 +334,6 @@ True False False - True - True adjustment7 @@ -336,70 +341,6 @@ 2 - - - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False - False - True - True - - - 1 - 2 - 1 - 2 - - - - - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - - True - False - False - True - True - adjustment3 - - - - 1 - 2 - 2 - 3 - - - - - True - False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - Video RTP/UDP: - right - - - 1 - 2 - - - - - True - False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - Audio RTP/UDP: - right - - - 2 - 3 - - True @@ -449,6 +390,64 @@ 5 + + + True + False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Video RTP/UDP: + right + + + 2 + 3 + + + + + True + False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Audio RTP/UDP: + right + + + 1 + 2 + + + + + True + True + + adjustment_audio_port + True + + + + 1 + 2 + 1 + 2 + + + + + True + True + + adjustment_video_port + True + + + + 1 + 2 + 2 + 3 + + @@ -545,8 +544,6 @@ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK False False - True - True @@ -617,8 +614,6 @@ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK False False - True - True @@ -786,8 +781,6 @@ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK False False - True - True @@ -1138,8 +1131,6 @@ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK False False - True - True @@ -1178,8 +1169,6 @@ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK False False - True - True @@ -1197,8 +1186,6 @@ False False False - True - True 1 @@ -1255,6 +1242,9 @@ True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + + + @@ -1720,6 +1710,9 @@ virtual network ! True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True + + + @@ -1926,8 +1919,6 @@ virtual network ! 0 stands for "unlimited" False False - True - True adjustment5 @@ -1948,8 +1939,6 @@ virtual network ! 0 stands for "unlimited" False False - True - True adjustment6