aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilip Withnall <philip.withnall@collabora.co.uk>2011-01-30 00:16:29 +0800
committerPhilip Withnall <philip.withnall@collabora.co.uk>2011-02-18 08:04:45 +0800
commit7365b5426c1e281f49bd67506c09ce76ffb67e2c (patch)
treefc7ab108424e93aad9463308ed79b3caf5482427
parent6103b13b462a07a8b508ee2223ef1e5acfc8dd47 (diff)
downloadgsoc2013-empathy-7365b5426c1e281f49bd67506c09ce76ffb67e2c.tar
gsoc2013-empathy-7365b5426c1e281f49bd67506c09ce76ffb67e2c.tar.gz
gsoc2013-empathy-7365b5426c1e281f49bd67506c09ce76ffb67e2c.tar.bz2
gsoc2013-empathy-7365b5426c1e281f49bd67506c09ce76ffb67e2c.tar.lz
gsoc2013-empathy-7365b5426c1e281f49bd67506c09ce76ffb67e2c.tar.xz
gsoc2013-empathy-7365b5426c1e281f49bd67506c09ce76ffb67e2c.tar.zst
gsoc2013-empathy-7365b5426c1e281f49bd67506c09ce76ffb67e2c.zip
Bug 637151 — Hide the user Individual from the contact list
Generalise the mechanism used to determine whether a persona is to be displayed by Empathy to also take into account whether the persona is the user and, if so, whether they're in the contact list. This bumps the libfolks dependency to 0.3.5. Closes: bgo#637151
-rw-r--r--configure.ac2
-rw-r--r--libempathy-gtk/empathy-individual-dialogs.c2
-rw-r--r--libempathy-gtk/empathy-individual-information-dialog.c2
-rw-r--r--libempathy-gtk/empathy-individual-menu.c8
-rw-r--r--libempathy-gtk/empathy-individual-store.c4
-rw-r--r--libempathy-gtk/empathy-individual-view.c19
-rw-r--r--libempathy-gtk/empathy-individual-widget.c20
-rw-r--r--libempathy-gtk/empathy-linking-dialog.c2
-rw-r--r--libempathy/empathy-contact.c4
-rw-r--r--libempathy/empathy-utils.c22
-rw-r--r--libempathy/empathy-utils.h1
11 files changed, 59 insertions, 27 deletions
diff --git a/configure.ac b/configure.ac
index 7d53cff4b..70d8e5b1e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -31,7 +31,7 @@ AC_COPYRIGHT([
# Minimal version required
# Hardp deps
-FOLKS_REQUIRED=0.3.4
+FOLKS_REQUIRED=0.3.5
GCONF_REQUIRED=1.2.0
GLIB_REQUIRED=2.27.2
GNUTLS_REQUIRED=2.8.5
diff --git a/libempathy-gtk/empathy-individual-dialogs.c b/libempathy-gtk/empathy-individual-dialogs.c
index 22af8d567..07fe24a53 100644
--- a/libempathy-gtk/empathy-individual-dialogs.c
+++ b/libempathy-gtk/empathy-individual-dialogs.c
@@ -193,7 +193,7 @@ empathy_block_individual_dialog_show (GtkWindow *parent,
TpContact *contact;
EmpathyIndividualManagerFlags flags;
- if (!TPF_IS_PERSONA (persona))
+ if (!empathy_folks_persona_is_interesting (FOLKS_PERSONA (persona)))
continue;
contact = tpf_persona_get_contact (persona);
diff --git a/libempathy-gtk/empathy-individual-information-dialog.c b/libempathy-gtk/empathy-individual-information-dialog.c
index 7659c8ba6..fcbec1228 100644
--- a/libempathy-gtk/empathy-individual-information-dialog.c
+++ b/libempathy-gtk/empathy-individual-information-dialog.c
@@ -139,7 +139,7 @@ set_label_visibility (EmpathyIndividualInformationDialog *dialog)
personas = folks_individual_get_personas (priv->individual);
for (l = personas; l != NULL; l = l->next)
{
- if (TPF_IS_PERSONA (l->data))
+ if (empathy_folks_persona_is_interesting (FOLKS_PERSONA (l->data)))
num_personas++;
}
}
diff --git a/libempathy-gtk/empathy-individual-menu.c b/libempathy-gtk/empathy-individual-menu.c
index 757bbe54a..7cab792a2 100644
--- a/libempathy-gtk/empathy-individual-menu.c
+++ b/libempathy-gtk/empathy-individual-menu.c
@@ -87,7 +87,7 @@ individual_menu_add_personas (GtkMenuShell *menu,
* functionality */
for (l = personas; l != NULL; l = l->next)
{
- if (!TPF_IS_PERSONA (l->data))
+ if (!empathy_folks_persona_is_interesting (FOLKS_PERSONA (l->data)))
continue;
persona_count++;
@@ -116,7 +116,7 @@ individual_menu_add_personas (GtkMenuShell *menu,
const gchar *account;
GtkWidget *action;
- if (!TPF_IS_PERSONA (persona))
+ if (!empathy_folks_persona_is_interesting (FOLKS_PERSONA (l->data)))
continue;
tp_contact = tpf_persona_get_contact (persona);
@@ -940,7 +940,7 @@ room_sub_menu_activate_cb (GtkWidget *item,
TpContact *tp_contact;
GList *rooms;
- if (!TPF_IS_PERSONA (persona))
+ if (!empathy_folks_persona_is_interesting (FOLKS_PERSONA (l->data)))
continue;
tp_contact = tpf_persona_get_contact (persona);
@@ -1040,7 +1040,7 @@ empathy_individual_invite_menu_item_new (FolksIndividual *individual,
TpContact *tp_contact;
EmpathyContact *contact_cur;
- if (!TPF_IS_PERSONA (persona))
+ if (!empathy_folks_persona_is_interesting (FOLKS_PERSONA (l->data)))
continue;
tp_contact = tpf_persona_get_contact (persona);
diff --git a/libempathy-gtk/empathy-individual-store.c b/libempathy-gtk/empathy-individual-store.c
index 4146407e4..5035b77d3 100644
--- a/libempathy-gtk/empathy-individual-store.c
+++ b/libempathy-gtk/empathy-individual-store.c
@@ -132,7 +132,7 @@ individual_can_audio_video_call (FolksIndividual *individual,
TpContact *tp_contact;
EmpathyContact *contact;
- if (!TPF_IS_PERSONA (l->data))
+ if (!empathy_folks_persona_is_interesting (FOLKS_PERSONA (l->data)))
continue;
tp_contact = tpf_persona_get_contact (TPF_PERSONA (l->data));
@@ -1912,7 +1912,7 @@ individual_store_get_individual_status_icon_with_icon_name (
personas = folks_individual_get_personas (individual);
for (l = personas, contact_count = 0; l; l = l->next)
{
- if (TPF_IS_PERSONA (l->data))
+ if (empathy_folks_persona_is_interesting (FOLKS_PERSONA (l->data)))
contact_count++;
if (contact_count > 1)
diff --git a/libempathy-gtk/empathy-individual-view.c b/libempathy-gtk/empathy-individual-view.c
index eb2bb4003..29bf2e645 100644
--- a/libempathy-gtk/empathy-individual-view.c
+++ b/libempathy-gtk/empathy-individual-view.c
@@ -1614,7 +1614,7 @@ individual_view_is_visible_individual (EmpathyIndividualView *self,
EmpathyLiveSearch *live = EMPATHY_LIVE_SEARCH (priv->search_widget);
const gchar *str;
GList *personas, *l;
- gboolean is_favorite;
+ gboolean is_favorite, contains_interesting_persona = FALSE;
/* We're only giving the visibility wrt filtering here, not things like
* presence. */
@@ -1624,6 +1624,20 @@ individual_view_is_visible_individual (EmpathyIndividualView *self,
return FALSE;
}
+ /* Hide all individuals which consist entirely of uninteresting personas */
+ personas = folks_individual_get_personas (individual);
+ for (l = personas; l; l = l->next)
+ {
+ if (empathy_folks_persona_is_interesting (FOLKS_PERSONA (l->data)))
+ {
+ contains_interesting_persona = TRUE;
+ break;
+ }
+ }
+
+ if (contains_interesting_persona == FALSE)
+ return FALSE;
+
is_favorite = folks_favouritable_get_is_favourite (
FOLKS_FAVOURITABLE (individual));
if (is_searching == FALSE)
@@ -1636,14 +1650,13 @@ individual_view_is_visible_individual (EmpathyIndividualView *self,
return TRUE;
/* check contact id, remove the @server.com part */
- personas = folks_individual_get_personas (individual);
for (l = personas; l; l = l->next)
{
const gchar *p;
gchar *dup_str = NULL;
gboolean visible;
- if (!TPF_IS_PERSONA (l->data))
+ if (!empathy_folks_persona_is_interesting (FOLKS_PERSONA (l->data)))
continue;
str = folks_persona_get_display_id (l->data);
diff --git a/libempathy-gtk/empathy-individual-widget.c b/libempathy-gtk/empathy-individual-widget.c
index dd894646c..19d0f81a7 100644
--- a/libempathy-gtk/empathy-individual-widget.c
+++ b/libempathy-gtk/empathy-individual-widget.c
@@ -400,7 +400,7 @@ details_update (EmpathyIndividualWidget *self)
personas = folks_individual_get_personas (priv->individual);
for (l = personas; l != NULL; l = l->next)
{
- if (TPF_IS_PERSONA (l->data))
+ if (empathy_folks_persona_is_interesting (FOLKS_PERSONA (l->data)))
{
tp_contact = tpf_persona_get_contact (TPF_PERSONA (l->data));
if (tp_contact != NULL)
@@ -548,7 +548,7 @@ location_update (EmpathyIndividualWidget *self)
{
FolksPersona *persona = FOLKS_PERSONA (l->data);
- if (TPF_IS_PERSONA (persona))
+ if (empathy_folks_persona_is_interesting (persona))
{
TpContact *tp_contact;
@@ -721,7 +721,7 @@ location_update (EmpathyIndividualWidget *self)
{
FolksPersona *persona = FOLKS_PERSONA (l->data);
- if (TPF_IS_PERSONA (persona))
+ if (empathy_folks_persona_is_interesting (persona))
{
gdouble lat = 0.0, lon = 0.0;
ClutterActor *marker;
@@ -793,7 +793,7 @@ persona_dup_avatar (FolksPersona *persona)
EmpathyContact *contact;
EmpathyAvatar *avatar;
- if (!TPF_IS_PERSONA (persona))
+ if (!empathy_folks_persona_is_interesting (persona))
return NULL;
tp_contact = tpf_persona_get_contact (TPF_PERSONA (persona));
@@ -996,7 +996,7 @@ individual_is_user (FolksIndividual *individual)
{
FolksPersona *persona = FOLKS_PERSONA (l->data);
- if (TPF_IS_PERSONA (persona))
+ if (empathy_folks_persona_is_interesting (persona))
{
TpContact *tp_contact;
EmpathyContact *contact;
@@ -1391,7 +1391,7 @@ add_persona (EmpathyIndividualWidget *self,
GtkWidget *label, *account_label, *account_image, *separator;
guint current_row = 0;
- if (!TPF_IS_PERSONA (persona))
+ if (!empathy_folks_persona_is_interesting (persona))
return;
if (priv->flags & EMPATHY_INDIVIDUAL_WIDGET_EDIT_FAVOURITE)
@@ -1494,7 +1494,7 @@ remove_persona (EmpathyIndividualWidget *self,
GtkWidget *separator;
GtkTable *table;
- if (!TPF_IS_PERSONA (persona))
+ if (!empathy_folks_persona_is_interesting (persona))
return;
table = g_hash_table_lookup (priv->persona_tables, persona);
@@ -1566,7 +1566,7 @@ individual_table_set_up (EmpathyIndividualWidget *self)
personas = folks_individual_get_personas (priv->individual);
for (l = personas; l != NULL; l = l->next)
{
- if (TPF_IS_PERSONA (l->data))
+ if (empathy_folks_persona_is_interesting (FOLKS_PERSONA (l->data)))
num_personas++;
}
@@ -1629,7 +1629,7 @@ personas_changed_cb (FolksIndividual *individual,
for (l = personas; l != NULL; l = l->next)
{
- if (TPF_IS_PERSONA (l->data))
+ if (empathy_folks_persona_is_interesting (FOLKS_PERSONA (l->data)))
new_num_personas++;
}
@@ -1811,7 +1811,7 @@ individual_update (EmpathyIndividualWidget *self)
personas = folks_individual_get_personas (priv->individual);
for (l = personas; l != NULL; l = l->next)
{
- if (!TPF_IS_PERSONA (l->data))
+ if (!empathy_folks_persona_is_interesting (FOLKS_PERSONA (l->data)))
continue;
update_persona (self, FOLKS_PERSONA (l->data));
diff --git a/libempathy-gtk/empathy-linking-dialog.c b/libempathy-gtk/empathy-linking-dialog.c
index 323ec4e03..b71b3660c 100644
--- a/libempathy-gtk/empathy-linking-dialog.c
+++ b/libempathy-gtk/empathy-linking-dialog.c
@@ -248,7 +248,7 @@ empathy_linking_dialog_show (FolksIndividual *individual,
personas = folks_individual_get_personas (individual);
for (l = personas; l != NULL; l = l->next)
{
- if (TPF_IS_PERSONA (l->data))
+ if (empathy_folks_persona_is_interesting (FOLKS_PERSONA (l->data)))
num_personas++;
}
diff --git a/libempathy/empathy-contact.c b/libempathy/empathy-contact.c
index f91b587c7..d9ae5f649 100644
--- a/libempathy/empathy-contact.c
+++ b/libempathy/empathy-contact.c
@@ -859,7 +859,7 @@ empathy_contact_get_persona (EmpathyContact *contact)
{
TpfPersona *persona = j->data;
- if (TPF_IS_PERSONA (persona))
+ if (empathy_folks_persona_is_interesting (FOLKS_PERSONA (persona)))
{
TpContact *tp_contact = tpf_persona_get_contact (persona);
@@ -1909,7 +1909,7 @@ empathy_contact_dup_best_for_action (FolksIndividual *individual,
TpContact *tp_contact;
EmpathyContact *contact;
- if (!TPF_IS_PERSONA (l->data))
+ if (!empathy_folks_persona_is_interesting (FOLKS_PERSONA (l->data)))
continue;
tp_contact = tpf_persona_get_contact (TPF_PERSONA (l->data));
diff --git a/libempathy/empathy-utils.c b/libempathy/empathy-utils.c
index 038334e27..eebcf9593 100644
--- a/libempathy/empathy-utils.c
+++ b/libempathy/empathy-utils.c
@@ -756,7 +756,7 @@ empathy_folks_individual_contains_contact (FolksIndividual *individual)
personas = folks_individual_get_personas (individual);
for (l = personas; l != NULL; l = l->next)
{
- if (TPF_IS_PERSONA (l->data))
+ if (empathy_folks_persona_is_interesting (FOLKS_PERSONA (l->data)))
return (tpf_persona_get_contact (TPF_PERSONA (l->data)) != NULL);
}
@@ -783,7 +783,7 @@ empathy_contact_dup_from_folks_individual (FolksIndividual *individual)
{
TpfPersona *persona = l->data;
- if (TPF_IS_PERSONA (persona))
+ if (empathy_folks_persona_is_interesting (FOLKS_PERSONA (persona)))
{
TpContact *tp_contact;
@@ -803,6 +803,24 @@ tp_channel_group_change_reason_from_folks_groups_change_reason (
return (TpChannelGroupChangeReason) reason;
}
+gboolean
+empathy_folks_persona_is_interesting (FolksPersona *persona)
+{
+ /* We're not interested in non-Telepathy personas */
+ if (!TPF_IS_PERSONA (persona))
+ return FALSE;
+
+ /* We're not interested in user personas which haven't been added to the
+ * contact list (see bgo#637151). */
+ if (folks_persona_get_is_user (persona) &&
+ !tpf_persona_get_is_in_contact_list (TPF_PERSONA (persona)))
+ {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
gchar *
empathy_get_x509_certificate_hostname (gnutls_x509_crt_t cert)
{
diff --git a/libempathy/empathy-utils.h b/libempathy/empathy-utils.h
index efa5d11d1..272fada1c 100644
--- a/libempathy/empathy-utils.h
+++ b/libempathy/empathy-utils.h
@@ -107,6 +107,7 @@ TpConnectionPresenceType empathy_folks_presence_type_to_tp (FolksPresenceType ty
gboolean empathy_folks_individual_contains_contact (FolksIndividual *individual);
EmpathyContact * empathy_contact_dup_from_folks_individual (FolksIndividual *individual);
TpChannelGroupChangeReason tp_channel_group_change_reason_from_folks_groups_change_reason (FolksGroupableChangeReason reason);
+gboolean empathy_folks_persona_is_interesting (FolksPersona *persona);
gchar * empathy_get_x509_certificate_hostname (gnutls_x509_crt_t cert);