diff --git a/gtk/call_logs.ui b/gtk/call_logs.ui
index 566f525f2..00c2dfbda 100644
--- a/gtk/call_logs.ui
+++ b/gtk/call_logs.ui
@@ -1,31 +1,40 @@
-
+
+
+
+
+ True
+ gtk-clear
+
diff --git a/gtk/calllogs.c b/gtk/calllogs.c
index 06954191a..c196c2c41 100644
--- a/gtk/calllogs.c
+++ b/gtk/calllogs.c
@@ -21,47 +21,109 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
void linphone_gtk_call_log_update(GtkWidget *w){
- GtkTextView *v=GTK_TEXT_VIEW(linphone_gtk_get_widget(w,"logtextview"));
- GtkTextBuffer *b=gtk_text_view_get_buffer(v);
- GtkTextIter iter,begin;
- int off;
- char *logmsg;
+ GtkTreeView *v=GTK_TREE_VIEW(linphone_gtk_get_widget(w,"logs_view"));
+ GtkListStore *store;
const MSList *logs;
+
+ store=(GtkListStore*)gtk_tree_view_get_model(v);
+ if (store==NULL){
+ store=gtk_list_store_new(3,G_TYPE_STRING,G_TYPE_STRING, G_TYPE_POINTER);
+ gtk_tree_view_set_model(v,GTK_TREE_MODEL(store));
+ g_object_unref(G_OBJECT(store));
+ }
+ gtk_list_store_clear (store);
+
for (logs=linphone_core_get_call_logs(linphone_gtk_get_core());logs!=NULL;logs=logs->next){
LinphoneCallLog *cl=(LinphoneCallLog*)logs->data;
- logmsg=linphone_call_log_to_str(cl);
- gtk_text_buffer_get_end_iter(b,&iter);
- off=gtk_text_iter_get_offset(&iter);
- gtk_text_buffer_insert(b,&iter,logmsg,-1);
- gtk_text_buffer_get_end_iter(b,&iter);
- gtk_text_buffer_insert(b,&iter,"\n",-1);
- gtk_text_buffer_get_end_iter(b,&iter);
- gtk_text_buffer_get_iter_at_offset(b,&begin,off);
- gtk_text_buffer_apply_tag_by_name(b,cl->dir==LinphoneCallOutgoing ? "green" : "blue" ,&begin,&iter);
- ms_free(logmsg);
+ GtkTreeIter iter;
+ LinphoneAddress *la=cl->dir==LinphoneCallIncoming ? cl->from : cl->to;
+ char *addr= linphone_address_as_string_uri_only (la);
+ const char *display;
+ gchar *logtxt;
+ display=linphone_address_get_display_name (la);
+ if (display==NULL){
+ display=linphone_address_get_username (la);
+ if (display==NULL)
+ display=linphone_address_get_domain (la);
+ }
+ logtxt=g_markup_printf_escaped("%s\t%s\n"
+ "%s\t%i minutes %i seconds",display, addr, cl->start_date,
+ cl->duration/60,cl->duration%60);
+ gtk_list_store_append (store,&iter);
+ gtk_list_store_set (store,&iter,
+ 0, cl->dir==LinphoneCallOutgoing ? GTK_STOCK_GO_UP : GTK_STOCK_GO_DOWN,
+ 1, logtxt,2,la,-1);
+ ms_free(addr);
+ g_free(logtxt);
}
- gtk_text_buffer_get_end_iter(b,&iter);
- gtk_text_view_scroll_to_iter(v,&iter,0,FALSE,0,0);
+
}
-void linphone_gtk_call_log_response(GtkWidget *w){
+static bool_t put_selection_to_uribar(GtkWidget *treeview){
+ GtkTreeSelection *sel;
+
+ sel=gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
+ if (sel!=NULL){
+ GtkTreeModel *model=NULL;
+ GtkTreeIter iter;
+ if (gtk_tree_selection_get_selected (sel,&model,&iter)){
+ gpointer pla;
+ LinphoneAddress *la;
+ char *tmp;
+ gtk_tree_model_get(model,&iter,2,&pla,-1);
+ la=(LinphoneAddress*)pla;
+ tmp=linphone_address_as_string (la);
+ gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(linphone_gtk_get_main_window(),"uribar")),tmp);
+ ms_free(tmp);
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+void linphone_gtk_history_row_activated(GtkWidget *treeview){
+ put_selection_to_uribar(treeview);
+}
+
+void linphone_gtk_call_log_response(GtkWidget *w, guint response_id){
GtkWidget *mw=linphone_gtk_get_main_window();
+ if (response_id==1){
+ if (put_selection_to_uribar(linphone_gtk_get_widget(w,"logs_view")))
+ linphone_gtk_start_call(linphone_gtk_get_widget(mw,"start_call"));
+ }else if (response_id==2){
+ linphone_core_clear_call_logs (linphone_gtk_get_core());
+ linphone_gtk_call_log_update(w);
+ return;
+ }
g_object_set_data(G_OBJECT(mw),"call_logs",NULL);
gtk_widget_destroy(w);
}
+
+static void fill_renderers(GtkTreeView *v){
+ GtkTreeViewColumn *c;
+ GtkCellRenderer *r=gtk_cell_renderer_pixbuf_new ();
+
+ g_object_set(r,"stock-size",GTK_ICON_SIZE_BUTTON,NULL);
+ c=gtk_tree_view_column_new_with_attributes("icon",r,"stock-id",0,NULL);
+ gtk_tree_view_append_column (v,c);
+
+ r=gtk_cell_renderer_text_new ();
+ c=gtk_tree_view_column_new_with_attributes("sipaddress",r,"markup",1,NULL);
+ gtk_tree_view_append_column (v,c);
+}
+
GtkWidget * linphone_gtk_show_call_logs(void){
GtkWidget *mw=linphone_gtk_get_main_window();
- GtkTextBuffer *b;
GtkWidget *w=(GtkWidget*)g_object_get_data(G_OBJECT(linphone_gtk_get_main_window()),"call_logs");
if (w==NULL){
w=linphone_gtk_create_window("call_logs");
+ gtk_button_set_image(GTK_BUTTON(linphone_gtk_get_widget(w,"call_back_button")),
+ create_pixmap (linphone_gtk_get_ui_config("callback_button","status-green.png")));
+ fill_renderers(GTK_TREE_VIEW(linphone_gtk_get_widget(w,"logs_view")));
g_object_set_data(G_OBJECT(mw),"call_logs",w);
g_signal_connect(G_OBJECT(w),"response",(GCallback)linphone_gtk_call_log_response,NULL);
gtk_widget_show(w);
- b=gtk_text_view_get_buffer(GTK_TEXT_VIEW(linphone_gtk_get_widget(w,"logtextview")));
- gtk_text_buffer_create_tag(b,"blue","foreground","blue",NULL);
- gtk_text_buffer_create_tag(b,"green","foreground","green",NULL);
linphone_gtk_call_log_update(w);
}else gtk_window_present(GTK_WINDOW(w));
return w;
diff --git a/mediastreamer2 b/mediastreamer2
index 292e7943c..f2ddc59ed 160000
--- a/mediastreamer2
+++ b/mediastreamer2
@@ -1 +1 @@
-Subproject commit 292e7943c683fd8ada2dc0234fdcb1b9e299aba9
+Subproject commit f2ddc59ed02f26ff828243fa400abae925b6f730