]> git.0d.be Git - empathy.git/blobdiff - libempathy-gtk/empathy-log-window.c
Merge branch 'gnome-3-8'
[empathy.git] / libempathy-gtk / empathy-log-window.c
index af375f1b51f27b86236e8298772dbb85edecc621..526569a510fd78e6da29ab7945f81ef64654dde6 100644 (file)
  */
 
 #include "config.h"
-
-#include <string.h>
-#include <stdlib.h>
+#include "empathy-log-window.h"
 
 #include <glib/gi18n-lib.h>
-#include <gtk/gtk.h>
-#include <webkit/webkit.h>
-
-#include <telepathy-glib/telepathy-glib.h>
 #include <telepathy-glib/proxy-subclass.h>
 
-#include <telepathy-yell/telepathy-yell.h>
-
-#include <telepathy-logger/telepathy-logger.h>
-#ifdef HAVE_CALL_LOGS
-# include <telepathy-logger/call-event.h>
-#endif
-
-#include <extensions/extensions.h>
-
-#include <libempathy/action-chain-internal.h>
-#include <libempathy/empathy-camera-monitor.h>
-#include <libempathy/empathy-chatroom-manager.h>
-#include <libempathy/empathy-chatroom.h>
-#include <libempathy/empathy-gsettings.h>
-#include <libempathy/empathy-message.h>
-#include <libempathy/empathy-request-util.h>
-#include <libempathy/empathy-utils.h>
-#include <libempathy/empathy-time.h>
-
-#include "empathy-log-window.h"
+#include "action-chain-internal.h"
 #include "empathy-account-chooser.h"
 #include "empathy-call-utils.h"
-#include "empathy-chat-view.h"
-#include "empathy-contact-dialogs.h"
+#include "empathy-camera-monitor.h"
+#include "empathy-geometry.h"
+#include "empathy-gsettings.h"
 #include "empathy-images.h"
+#include "empathy-individual-information-dialog.h"
+#include "empathy-request-util.h"
 #include "empathy-theme-manager.h"
 #include "empathy-ui-utils.h"
+#include "empathy-utils.h"
 #include "empathy-webkit-utils.h"
+#include "extensions.h"
 
 #define DEBUG_FLAG EMPATHY_DEBUG_OTHER
-#include <libempathy/empathy-debug.h>
+#include "empathy-debug.h"
 
 #define EMPATHY_NS "http://live.gnome.org/Empathy"
 
@@ -324,11 +304,17 @@ static void
 toolbutton_profile_clicked (GtkToolButton *toolbutton,
     EmpathyLogWindow *self)
 {
+  FolksIndividual *individual;
+
   g_return_if_fail (self != NULL);
   g_return_if_fail (EMPATHY_IS_CONTACT (self->priv->selected_contact));
 
-  empathy_contact_information_dialog_show (self->priv->selected_contact,
-      GTK_WINDOW (self));
+  individual = empathy_ensure_individual_from_tp_contact (
+      empathy_contact_get_tp_contact (self->priv->selected_contact));
+
+  empathy_display_individual_info (individual);
+
+  g_object_unref (individual);
 }
 
 static void
@@ -773,6 +759,8 @@ empathy_log_window_init (EmpathyLogWindow *self)
 
   log_window_update_buttons_sensitivity (self);
   gtk_widget_show (GTK_WIDGET (self));
+
+  empathy_geometry_bind (GTK_WINDOW (self), "log-window");
 }
 
 GtkWidget *
@@ -870,7 +858,7 @@ maybe_refresh_logs (TpChannel *channel,
       !(event_mask & TPL_EVENT_MASK_TEXT))
     goto out;
   if ((!tp_strdiff (type, TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA) ||
-       !tp_strdiff (type, TPY_IFACE_CHANNEL_TYPE_CALL)) &&
+       !tp_strdiff (type, TP_IFACE_CHANNEL_TYPE_CALL)) &&
       !(event_mask & TPL_EVENT_MASK_CALL))
     goto out;
 
@@ -1012,7 +1000,7 @@ observe_channels (TpSimpleObserver *observer,
           tp_g_signal_connect_object (channel, "invalidated",
               G_CALLBACK (on_channel_ended), self, 0);
         }
-      else if (!tp_strdiff (type, TPY_IFACE_CHANNEL_TYPE_CALL) ||
+      else if (!tp_strdiff (type, TP_IFACE_CHANNEL_TYPE_CALL) ||
           !tp_strdiff (type, TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA))
         {
           g_hash_table_insert (self->priv->channels,
@@ -1057,7 +1045,7 @@ log_window_create_observer (EmpathyLogWindow *self)
   tp_base_client_take_observer_filter (self->priv->observer,
       tp_asv_new (
           TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING,
-            TPY_IFACE_CHANNEL_TYPE_CALL,
+            TP_IFACE_CHANNEL_TYPE_CALL,
           NULL));
 
   tp_base_client_register (self->priv->observer, NULL);
@@ -1231,22 +1219,20 @@ get_icon_for_event (TplEvent *event)
       if (!tp_str_empty (tpl_text_event_get_supersedes_token (text)))
         icon = EMPATHY_IMAGE_EDIT_MESSAGE;
     }
-#ifdef HAVE_CALL_LOGS
   else if (TPL_IS_CALL_EVENT (event))
     {
       TplCallEvent *call = TPL_CALL_EVENT (event);
-      TplCallEndReason reason = tpl_call_event_get_end_reason (call);
+      TpCallStateChangeReason reason = tpl_call_event_get_end_reason (call);
       TplEntity *sender = tpl_event_get_sender (event);
       TplEntity *receiver = tpl_event_get_receiver (event);
 
-      if (reason == TPL_CALL_END_REASON_NO_ANSWER)
+      if (reason == TP_CALL_STATE_CHANGE_REASON_NO_ANSWER)
         icon = EMPATHY_IMAGE_CALL_MISSED;
       else if (tpl_entity_get_entity_type (sender) == TPL_ENTITY_SELF)
         icon = EMPATHY_IMAGE_CALL_OUTGOING;
       else if (tpl_entity_get_entity_type (receiver) == TPL_ENTITY_SELF)
         icon = EMPATHY_IMAGE_CALL_INCOMING;
     }
-#endif
 
   return icon;
 }
@@ -1258,6 +1244,7 @@ log_window_append_chat_message (TplEvent *event,
   GtkTreeStore *store = log_window->priv->store_events;
   GtkTreeIter iter, parent;
   gchar *pretty_date, *alias, *body;
+  gchar *msg_escaped;
   GDateTime *date;
   EmpathyStringParser *parsers;
   GString *msg;
@@ -1281,19 +1268,23 @@ log_window_append_chat_message (TplEvent *event,
   empathy_string_parser_substr (empathy_message_get_body (message), -1,
       parsers, msg);
 
+  msg_escaped = g_strescape (msg->str, NULL);
+
   if (tpl_text_event_get_message_type (TPL_TEXT_EVENT (event))
       == TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION)
     {
       /* Translators: this is an emote: '* Danielle waves' */
-      body = g_strdup_printf (_("<i>* %s %s</i>"), alias, msg->str);
+      body = g_strdup_printf (_("<i>* %s %s</i>"), alias, msg_escaped);
     }
   else
     {
       /* Translators: this is a message: 'Danielle: hello'
        * The string in bold is the sender's name */
-      body = g_strdup_printf (_("<b>%s:</b> %s"), alias, msg->str);
+      body = g_strdup_printf (_("<b>%s:</b> %s"), alias, msg_escaped);
     }
 
+  g_free (msg_escaped);
+
   gtk_tree_store_append (store, &iter, &parent);
   gtk_tree_store_set (store, &iter,
       COL_EVENTS_TS, tpl_event_get_timestamp (event),
@@ -1312,7 +1303,6 @@ log_window_append_chat_message (TplEvent *event,
   g_date_time_unref (date);
 }
 
-#ifdef HAVE_CALL_LOGS
 static void
 log_window_append_call (TplEvent *event,
     EmpathyMessage *message)
@@ -1356,7 +1346,7 @@ log_window_append_call (TplEvent *event,
       COL_EVENTS_EVENT, event,
       -1);
 
-  if (tpl_call_event_get_end_reason (call) != TPL_CALL_END_REASON_NO_ANSWER)
+  if (tpl_call_event_get_end_reason (call) != TP_CALL_STATE_CHANGE_REASON_NO_ANSWER)
     {
       gchar *body;
       gchar *tmp;
@@ -1403,7 +1393,6 @@ log_window_append_call (TplEvent *event,
   g_free (pretty_date);
   g_date_time_unref (started_date);
 }
-#endif
 
 static void
 log_window_append_message (TplEvent *event,
@@ -1411,10 +1400,8 @@ log_window_append_message (TplEvent *event,
 {
   if (TPL_IS_TEXT_EVENT (event))
     log_window_append_chat_message (event, message);
-#ifdef HAVE_CALL_LOGS
   else if (TPL_IS_CALL_EVENT (event))
     log_window_append_call (event, message);
-#endif
   else
     DEBUG ("Message type not handled");
 }
@@ -1745,6 +1732,35 @@ format_date_for_display (GDate *date)
   return text;
 }
 
+static void
+add_date_if_needed (EmpathyLogWindow *self,
+    GDate *date)
+{
+  GtkTreeModel *model;
+  GtkListStore *store;
+  gchar *text;
+
+  model = gtk_tree_view_get_model (GTK_TREE_VIEW (
+        log_window->priv->treeview_when));
+  store = GTK_LIST_STORE (model);
+
+  /* Add the date if it's not already there */
+  has_element = FALSE;
+  gtk_tree_model_foreach (model, model_has_date, date);
+  if (has_element)
+    return;
+
+  text = format_date_for_display (date);
+
+  gtk_list_store_insert_with_values (store, NULL, -1,
+      COL_WHEN_DATE, date,
+      COL_WHEN_TEXT, text,
+      COL_WHEN_ICON, CALENDAR_ICON,
+      -1);
+
+  g_free (text);
+}
+
 static void
 populate_dates_from_search_hits (GList *accounts,
     GList *targets)
@@ -1789,20 +1805,7 @@ populate_dates_from_search_hits (GList *accounts,
         if (!found)
           continue;
 
-      /* Add the date if it's not already there */
-      has_element = FALSE;
-      gtk_tree_model_foreach (model, model_has_date, hit->date);
-      if (!has_element)
-        {
-          gchar *text = format_date_for_display (hit->date);
-
-          gtk_list_store_append (store, &iter);
-          gtk_list_store_set (store, &iter,
-              COL_WHEN_DATE, hit->date,
-              COL_WHEN_TEXT, text,
-              COL_WHEN_ICON, CALENDAR_ICON,
-              -1);
-        }
+      add_date_if_needed (log_window, hit->date);
     }
 
   if (gtk_tree_model_get_iter_first (model, &iter))
@@ -1833,6 +1836,41 @@ populate_dates_from_search_hits (GList *accounts,
     }
 }
 
+static void
+add_event_to_store (EmpathyLogWindow *self,
+    TpAccount *account,
+    TplEntity *entity)
+{
+  GtkListStore *store;
+  TplEntityType type = tpl_entity_get_entity_type (entity);
+  EmpathyContact *contact;
+  const gchar *name;
+  gchar *sort_key;
+  gboolean room = type == TPL_ENTITY_ROOM;
+
+  store = GTK_LIST_STORE (gtk_tree_view_get_model (
+        GTK_TREE_VIEW (log_window->priv->treeview_who)));
+
+  contact = empathy_contact_from_tpl_contact (account, entity);
+
+  name = empathy_contact_get_alias (contact);
+  sort_key = g_utf8_collate_key (name, -1);
+
+  gtk_list_store_insert_with_values (store, NULL, -1,
+      COL_WHO_TYPE, COL_TYPE_NORMAL,
+      COL_WHO_ICON, room ? EMPATHY_IMAGE_GROUP_MESSAGE
+                         : EMPATHY_IMAGE_AVATAR_DEFAULT,
+      COL_WHO_NAME, name,
+      COL_WHO_NAME_SORT_KEY, sort_key,
+      COL_WHO_ID, tpl_entity_get_identifier (entity),
+      COL_WHO_ACCOUNT, account,
+      COL_WHO_TARGET, entity,
+      -1);
+
+  g_free (sort_key);
+  g_object_unref (contact);
+}
+
 static void
 populate_entities_from_search_hits (void)
 {
@@ -1872,32 +1910,7 @@ populate_entities_from_search_hits (void)
       gtk_tree_model_foreach (model, model_has_entity, hit);
       if (!has_element)
         {
-          TplEntityType type = tpl_entity_get_entity_type (hit->target);
-          EmpathyContact *contact;
-          const gchar *name;
-          gchar *sort_key;
-          gboolean room = type == TPL_ENTITY_ROOM;
-
-          contact = empathy_contact_from_tpl_contact (hit->account,
-              hit->target);
-
-          name = empathy_contact_get_alias (contact);
-          sort_key = g_utf8_collate_key (name, -1);
-
-          gtk_list_store_append (store, &iter);
-          gtk_list_store_set (store, &iter,
-              COL_WHO_TYPE, COL_TYPE_NORMAL,
-              COL_WHO_ICON, room ? EMPATHY_IMAGE_GROUP_MESSAGE
-                                 : EMPATHY_IMAGE_AVATAR_DEFAULT,
-              COL_WHO_NAME, name,
-              COL_WHO_NAME_SORT_KEY, sort_key,
-              COL_WHO_ID, tpl_entity_get_identifier (hit->target),
-              COL_WHO_ACCOUNT, hit->account,
-              COL_WHO_TARGET, hit->target,
-              -1);
-
-          g_free (sort_key);
-          g_object_unref (contact);
+          add_event_to_store (log_window, hit->account, hit->target);
         }
     }
 
@@ -2069,31 +2082,78 @@ log_window_search_entry_icon_pressed_cb (GtkEntry *entry,
     "", -1);
 }
 
+static void
+do_update_buttons_sensitivity (EmpathyLogWindow *self)
+{
+  EmpathyCapabilities capabilities;
+  gboolean profile, chat, call, video;
+
+  tp_clear_object (&self->priv->button_video_binding);
+
+  if (self->priv->selected_contact != NULL)
+    {
+      capabilities = empathy_contact_get_capabilities (
+          self->priv->selected_contact);
+
+      profile = chat = TRUE;
+      call = capabilities & EMPATHY_CAPABILITIES_AUDIO;
+      video = capabilities & EMPATHY_CAPABILITIES_VIDEO;
+    }
+  else
+    {
+      profile = chat = call = video = FALSE;
+    }
+
+  gtk_widget_set_sensitive (self->priv->button_profile, profile);
+  gtk_widget_set_sensitive (self->priv->button_chat, chat);
+  gtk_widget_set_sensitive (self->priv->button_call, call);
+
+  if (video)
+    {
+      self->priv->button_video_binding = g_object_bind_property (
+          self->priv->camera_monitor, "available",
+          self->priv->button_video, "sensitive",
+          G_BINDING_SYNC_CREATE);
+    }
+  else
+    {
+      /* Don't override the binding */
+      gtk_widget_set_sensitive (self->priv->button_video, video);
+    }
+}
+
+static void
+contact_capabilities_changed_cb (EmpathyContact *contact,
+    GParamSpec *spec,
+    EmpathyLogWindow *self)
+{
+  do_update_buttons_sensitivity (self);
+}
+
 static void
 log_window_update_buttons_sensitivity (EmpathyLogWindow *self)
 {
   GtkTreeView *view;
   GtkTreeModel *model;
   GtkTreeSelection *selection;
-  EmpathyCapabilities capabilities;
   TpAccount *account;
   TplEntity *target;
   GtkTreeIter iter;
   GList *paths;
   GtkTreePath *path;
-  gboolean profile, chat, call, video;
 
-  profile = chat = call = video = FALSE;
+  if (self->priv->selected_contact != NULL)
+    {
+      g_signal_handlers_disconnect_by_func (self->priv->selected_contact,
+          contact_capabilities_changed_cb, self);
 
-  tp_clear_object (&self->priv->button_video_binding);
-  tp_clear_object (&self->priv->selected_contact);
+      tp_clear_object (&self->priv->selected_contact);
+    }
 
   view = GTK_TREE_VIEW (self->priv->treeview_who);
   model = gtk_tree_view_get_model (view);
   selection = gtk_tree_view_get_selection (view);
 
-  profile = chat = call = video = FALSE;
-
   if (!gtk_tree_model_get_iter_first (model, &iter))
     goto events;
 
@@ -2121,12 +2181,6 @@ log_window_update_buttons_sensitivity (EmpathyLogWindow *self)
   g_object_unref (account);
   g_object_unref (target);
 
-  capabilities = empathy_contact_get_capabilities (self->priv->selected_contact);
-
-  profile = chat = TRUE;
-  call = capabilities & EMPATHY_CAPABILITIES_AUDIO;
-  video = capabilities & EMPATHY_CAPABILITIES_VIDEO;
-
   goto out;
 
  events:
@@ -2136,29 +2190,16 @@ log_window_update_buttons_sensitivity (EmpathyLogWindow *self)
 
   if (self->priv->events_contact != NULL)
     self->priv->selected_contact = g_object_ref (self->priv->events_contact);
-  else
-    goto out;
-
-  capabilities = empathy_contact_get_capabilities (self->priv->selected_contact);
-
-  profile = chat = TRUE;
-  call = capabilities & EMPATHY_CAPABILITIES_AUDIO;
-  video = capabilities & EMPATHY_CAPABILITIES_VIDEO;
-
-  if (video)
-    self->priv->button_video_binding = g_object_bind_property (
-        self->priv->camera_monitor, "available",
-        self->priv->button_video, "sensitive",
-        G_BINDING_SYNC_CREATE);
 
  out:
-  gtk_widget_set_sensitive (self->priv->button_profile, profile);
-  gtk_widget_set_sensitive (self->priv->button_chat, chat);
-  gtk_widget_set_sensitive (self->priv->button_call, call);
+  if (self->priv->selected_contact != NULL)
+    {
+      tp_g_signal_connect_object (self->priv->selected_contact,
+          "notify::capabilities", G_CALLBACK (contact_capabilities_changed_cb),
+          self, 0);
+    }
 
-  /* Don't override the binding */
-  if (!video)
-    gtk_widget_set_sensitive (self->priv->button_video, video);
+  do_update_buttons_sensitivity (self);
 }
 
 static void
@@ -2315,32 +2356,7 @@ log_manager_got_entities_cb (GObject *manager,
 
   for (l = entities; l; l = l->next)
     {
-      TplEntity *entity = TPL_ENTITY (l->data);
-      TplEntityType type = tpl_entity_get_entity_type (entity);
-      EmpathyContact *contact;
-      const gchar *name;
-      gchar *sort_key;
-      gboolean room = type == TPL_ENTITY_ROOM;
-
-      contact = empathy_contact_from_tpl_contact (ctx->account, entity);
-
-      name = empathy_contact_get_alias (contact);
-      sort_key = g_utf8_collate_key (name, -1);
-
-      gtk_list_store_append (store, &iter);
-      gtk_list_store_set (store, &iter,
-          COL_WHO_TYPE, COL_TYPE_NORMAL,
-          COL_WHO_ICON, room ? EMPATHY_IMAGE_GROUP_MESSAGE
-                             : EMPATHY_IMAGE_AVATAR_DEFAULT,
-          COL_WHO_NAME, name,
-          COL_WHO_NAME_SORT_KEY, sort_key,
-          COL_WHO_ID, tpl_entity_get_identifier (entity),
-          COL_WHO_ACCOUNT, ctx->account,
-          COL_WHO_TARGET, entity,
-          -1);
-
-      g_free (sort_key);
-      g_object_unref (contact);
+      add_event_to_store (ctx->self, ctx->account, l->data);
 
       if (ctx->self->priv->selected_account != NULL &&
           !tp_strdiff (tp_proxy_get_object_path (ctx->account),
@@ -2473,7 +2489,7 @@ log_window_who_populate (EmpathyLogWindow *self)
       GList *accounts, *l;
 
       manager = empathy_account_chooser_get_account_manager (account_chooser);
-      accounts = tp_account_manager_get_valid_accounts (manager);
+      accounts = tp_account_manager_dup_valid_accounts (manager);
 
       for (l = accounts; l != NULL; l = l->next)
         {
@@ -2484,7 +2500,7 @@ log_window_who_populate (EmpathyLogWindow *self)
               get_entities_for_account, ctx);
         }
 
-      g_list_free (accounts);
+      g_list_free_full (accounts, g_object_unref);
     }
   _tpl_action_chain_append (self->priv->chain, select_first_entity, self);
   _tpl_action_chain_start (self->priv->chain);
@@ -3004,23 +3020,21 @@ log_window_what_setup (EmpathyLogWindow *self)
   GtkTreeIter        iter;
   GtkTreeStore      *store;
   GtkCellRenderer   *cell;
+  GtkTreeIter parent;
   guint i;
+
   struct event events [] = {
     { TPL_EVENT_MASK_ANY, 0, NULL, _("Anything") },
     { WHAT_TYPE_SEPARATOR, 0, NULL, "separator" },
     { TPL_EVENT_MASK_TEXT, 0, "format-justify-fill", _("Text chats") },
-#ifdef HAVE_CALL_LOGS
     { TPL_EVENT_MASK_CALL, EVENT_CALL_ALL, EMPATHY_IMAGE_CALL, _("Calls") },
-#endif
   };
-#ifdef HAVE_CALL_LOGS
+
   struct event call_events [] = {
     { TPL_EVENT_MASK_CALL, EVENT_CALL_INCOMING, EMPATHY_IMAGE_CALL_INCOMING, _("Incoming calls") },
     { TPL_EVENT_MASK_CALL, EVENT_CALL_OUTGOING, EMPATHY_IMAGE_CALL_OUTGOING, _("Outgoing calls") },
     { TPL_EVENT_MASK_CALL, EVENT_CALL_MISSED, EMPATHY_IMAGE_CALL_MISSED, _("Missed calls") }
   };
-  GtkTreeIter parent;
-#endif
 
   view = GTK_TREE_VIEW (self->priv->treeview_what);
   selection = gtk_tree_view_get_selection (view);
@@ -3078,7 +3092,6 @@ log_window_what_setup (EmpathyLogWindow *self)
           -1);
     }
 
-#ifdef HAVE_CALL_LOGS
   gtk_tree_model_iter_nth_child (model, &parent, NULL, 3);
   for (i = 0; i < G_N_ELEMENTS (call_events); i++)
     {
@@ -3091,7 +3104,6 @@ log_window_what_setup (EmpathyLogWindow *self)
           COL_WHAT_ICON, call_events[i].icon,
           -1);
     }
-#endif
 
   gtk_tree_view_expand_all (view);
 
@@ -3198,7 +3210,6 @@ log_window_got_messages_for_date_cb (GObject *manager,
       TplEvent *event = l->data;
       gboolean append = TRUE;
 
-#ifdef HAVE_CALL_LOGS
       if (TPL_IS_CALL_EVENT (l->data)
           && ctx->event_mask & TPL_EVENT_MASK_CALL
           && ctx->event_mask != TPL_EVENT_MASK_ANY)
@@ -3213,11 +3224,12 @@ log_window_got_messages_for_date_cb (GObject *manager,
             }
           else
             {
-              TplCallEndReason reason = tpl_call_event_get_end_reason (call);
+              TpCallStateChangeReason reason =
+                tpl_call_event_get_end_reason (call);
               TplEntity *sender = tpl_event_get_sender (event);
               TplEntity *receiver = tpl_event_get_receiver (event);
 
-              if (reason == TPL_CALL_END_REASON_NO_ANSWER)
+              if (reason == TP_CALL_STATE_CHANGE_REASON_NO_ANSWER)
                 {
                   if (ctx->subtype & EVENT_CALL_MISSED)
                     append = TRUE;
@@ -3234,7 +3246,6 @@ log_window_got_messages_for_date_cb (GObject *manager,
                 }
             }
         }
-#endif
 
       if (append)
         {
@@ -3405,24 +3416,7 @@ log_manager_got_dates_cb (GObject *manager,
 
   for (l = dates; l != NULL; l = l->next)
     {
-      GDate *date = l->data;
-
-      /* Add the date if it's not already there */
-      has_element = FALSE;
-      gtk_tree_model_foreach (model, model_has_date, date);
-      if (!has_element)
-        {
-          gchar *text = format_date_for_display (date);
-
-          gtk_list_store_append (store, &iter);
-          gtk_list_store_set (store, &iter,
-              COL_WHEN_DATE, date,
-              COL_WHEN_TEXT, text,
-              COL_WHEN_ICON, CALENDAR_ICON,
-              -1);
-
-          g_free (text);
-        }
+      add_date_if_needed (log_window, l->data);
     }
 
   if (gtk_tree_model_get_iter_first (model, &iter))