aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy-gtk/empathy-log-window.c
diff options
context:
space:
mode:
Diffstat (limited to 'libempathy-gtk/empathy-log-window.c')
-rw-r--r--libempathy-gtk/empathy-log-window.c90
1 files changed, 69 insertions, 21 deletions
diff --git a/libempathy-gtk/empathy-log-window.c b/libempathy-gtk/empathy-log-window.c
index 5ea872e14..cc3a90614 100644
--- a/libempathy-gtk/empathy-log-window.c
+++ b/libempathy-gtk/empathy-log-window.c
@@ -182,6 +182,7 @@ enum
COL_WHO_TYPE,
COL_WHO_ICON,
COL_WHO_NAME,
+ COL_WHO_NAME_SORT_KEY,
COL_WHO_ID,
COL_WHO_ACCOUNT,
COL_WHO_TARGET,
@@ -678,6 +679,9 @@ empathy_log_window_init (EmpathyLogWindow *self)
empathy_account_chooser_filter_has_logs, NULL);
empathy_account_chooser_set_all (account_chooser);
+ gtk_style_context_add_class (gtk_widget_get_style_context (self->priv->account_chooser),
+ GTK_STYLE_CLASS_RAISED);
+
g_signal_connect (self->priv->account_chooser, "changed",
G_CALLBACK (log_window_chats_accounts_changed_cb),
self);
@@ -699,10 +703,10 @@ empathy_log_window_init (EmpathyLogWindow *self)
vbox = gtk_vbox_new (FALSE, 3);
self->priv->search_entry = gtk_entry_new ();
- gtk_entry_set_icon_from_stock (GTK_ENTRY (self->priv->search_entry),
- GTK_ENTRY_ICON_PRIMARY, GTK_STOCK_FIND);
- gtk_entry_set_icon_from_stock (GTK_ENTRY (self->priv->search_entry),
- GTK_ENTRY_ICON_SECONDARY, GTK_STOCK_CLEAR);
+ gtk_entry_set_icon_from_icon_name (GTK_ENTRY (self->priv->search_entry),
+ GTK_ENTRY_ICON_SECONDARY, "edit-find-symbolic");
+ gtk_entry_set_icon_sensitive (GTK_ENTRY (self->priv->search_entry),
+ GTK_ENTRY_ICON_SECONDARY, FALSE);
label = gtk_label_new (_("Search"));
@@ -1367,13 +1371,24 @@ log_window_append_call (TplEvent *event,
if (tpl_call_event_get_end_reason (call) != TPL_CALL_END_REASON_NO_ANSWER)
{
gchar *body;
+ gchar *tmp;
span = tpl_call_event_get_duration (TPL_CALL_EVENT (event));
+
if (span < 60)
- duration = g_strdup_printf (_("%" G_GINT64_FORMAT " seconds"), span);
+ {
+ tmp = g_strdup_printf ("%" G_GINT64_FORMAT, span);
+ duration = g_strdup_printf (
+ ngettext ("%s second", "%s seconds", span), tmp);
+ g_free (tmp);
+ }
else
- duration = g_strdup_printf (_("%" G_GINT64_FORMAT " minutes"),
- span / 60);
+ {
+ tmp = g_strdup_printf ("%" G_GINT64_FORMAT, span / 60);
+ duration = g_strdup_printf (
+ ngettext ("%s minute", "%s minutes", span / 60), tmp);
+ g_free (tmp);
+ }
finished_date = g_date_time_add (started_date, -span);
finished = g_date_time_format (finished_date, "%X");
@@ -1729,9 +1744,8 @@ format_date_for_display (GDate *date)
text = g_date_time_format (dt, "%A");
else
text = g_date_time_format (dt,
- C_("A date such as '23 May 2010', "
- "%e is the day, %B the month and %Y the year",
- "%e %B %Y"));
+ /* Translators: A date such as '23 May 2010' (strftime format) */
+ _("%e %B %Y"));
g_date_time_unref (dt);
}
@@ -1861,22 +1875,29 @@ populate_entities_from_search_hits (void)
{
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, empathy_contact_get_alias (contact),
+ 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);
}
}
@@ -2004,6 +2025,25 @@ static void
log_window_search_entry_changed_cb (GtkWidget *entry,
EmpathyLogWindow *self)
{
+ const gchar *str;
+
+ str = gtk_entry_get_text (GTK_ENTRY (self->priv->search_entry));
+
+ if (!tp_str_empty (str))
+ {
+ gtk_entry_set_icon_from_icon_name (GTK_ENTRY (self->priv->search_entry),
+ GTK_ENTRY_ICON_SECONDARY, "edit-clear-symbolic");
+ gtk_entry_set_icon_sensitive (GTK_ENTRY (self->priv->search_entry),
+ GTK_ENTRY_ICON_SECONDARY, TRUE);
+ }
+ else
+ {
+ gtk_entry_set_icon_from_icon_name (GTK_ENTRY (self->priv->search_entry),
+ GTK_ENTRY_ICON_SECONDARY, "edit-find-symbolic");
+ gtk_entry_set_icon_sensitive (GTK_ENTRY (self->priv->search_entry),
+ GTK_ENTRY_ICON_SECONDARY, FALSE);
+ }
+
if (self->priv->source != 0)
g_source_remove (self->priv->source);
self->priv->source = g_timeout_add (500, (GSourceFunc) start_find_search,
@@ -2279,21 +2319,28 @@ log_manager_got_entities_cb (GObject *manager,
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, empathy_contact_get_alias (contact),
+ 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);
if (ctx->self->priv->selected_account != NULL &&
@@ -2445,23 +2492,23 @@ log_window_who_populate (EmpathyLogWindow *self)
}
static gint
-sort_by_name (GtkTreeModel *model,
+sort_by_name_key (GtkTreeModel *model,
GtkTreeIter *a,
GtkTreeIter *b,
gpointer user_data)
{
- gchar *name1, *name2;
+ gchar *key1, *key2;
gint type1, type2;
gint ret;
gtk_tree_model_get (model, a,
COL_WHO_TYPE, &type1,
- COL_WHO_NAME, &name1,
+ COL_WHO_NAME_SORT_KEY, &key1,
-1);
gtk_tree_model_get (model, b,
COL_WHO_TYPE, &type2,
- COL_WHO_NAME, &name2,
+ COL_WHO_NAME_SORT_KEY, &key2,
-1);
if (type1 == COL_TYPE_ANY)
@@ -2473,10 +2520,10 @@ sort_by_name (GtkTreeModel *model,
else if (type2 == COL_TYPE_SEPARATOR)
ret = 1;
else
- ret = g_strcmp0 (name1, name2);
+ ret = g_strcmp0 (key1, key2);
- g_free (name1);
- g_free (name2);
+ g_free (key1);
+ g_free (key2);
return ret;
}
@@ -2623,6 +2670,7 @@ log_window_who_setup (EmpathyLogWindow *self)
G_TYPE_INT, /* type */
G_TYPE_STRING, /* icon */
G_TYPE_STRING, /* name */
+ G_TYPE_STRING, /* name sort key */
G_TYPE_STRING, /* id */
TP_TYPE_ACCOUNT, /* account */
TPL_TYPE_ENTITY); /* target */
@@ -2657,10 +2705,10 @@ log_window_who_setup (EmpathyLogWindow *self)
NULL, NULL);
gtk_tree_sortable_set_sort_column_id (sortable,
- COL_WHO_NAME,
+ COL_WHO_NAME_SORT_KEY,
GTK_SORT_ASCENDING);
gtk_tree_sortable_set_sort_func (sortable,
- COL_WHO_NAME, sort_by_name,
+ COL_WHO_NAME_SORT_KEY, sort_by_name_key,
NULL, NULL);
gtk_tree_view_set_search_column (view, COL_WHO_NAME);