diff options
Diffstat (limited to 'libempathy-gtk/empathy-log-window.c')
-rw-r--r-- | libempathy-gtk/empathy-log-window.c | 90 |
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); |