]> sjero.net Git - linphone/blobdiff - gtk/logging.c
fix various compilation issue
[linphone] / gtk / logging.c
index ebadeedfc0e0aab079b6a6155f6b4baeedf47c9d..26027251f6aad830a5bea120bd2a3fe621ff8536 100644 (file)
@@ -23,6 +23,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #include <sys/stat.h>
 #include <sys/types.h>
 #endif
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
 
 extern gchar *linphone_logfile;
 
@@ -206,6 +207,7 @@ static void linphone_gtk_log_file(OrtpLogLevel lev, const char *msg)
                 case of a crash (which is one of the main reasons we have a
                     log facility in the first place). */
                fprintf(outlog, "[%s] [%s] %s\n", date, lname, msg);
+               fflush(outlog);
        }
 }
 
@@ -239,18 +241,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 +281,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 +290,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 +345,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);
+       }
+}
+
+