diff options
Diffstat (limited to 'libempathy-gtk/empathy-individual-view.c')
-rw-r--r-- | libempathy-gtk/empathy-individual-view.c | 218 |
1 files changed, 109 insertions, 109 deletions
diff --git a/libempathy-gtk/empathy-individual-view.c b/libempathy-gtk/empathy-individual-view.c index ad777c94a..6f8cda08e 100644 --- a/libempathy-gtk/empathy-individual-view.c +++ b/libempathy-gtk/empathy-individual-view.c @@ -144,115 +144,6 @@ static guint signals[LAST_SIGNAL]; G_DEFINE_TYPE (EmpathyIndividualView, empathy_individual_view, GTK_TYPE_TREE_VIEW); -static gboolean -individual_view_is_visible_individual (EmpathyIndividualView *self, - FolksIndividual *individual) -{ - EmpathyIndividualViewPriv *priv = GET_PRIV (self); - EmpathyLiveSearch *live = EMPATHY_LIVE_SEARCH (priv->search_widget); - const gchar *str; - GList *personas, *l; - - /* We're only giving the visibility wrt filtering here, not things like - * presence. */ - if (live == NULL || gtk_widget_get_visible (GTK_WIDGET (live)) == FALSE) - return TRUE; - - /* check alias name */ - str = folks_individual_get_alias (individual); - if (empathy_live_search_match (live, str)) - 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; - - str = folks_persona_get_uid (l->data); - p = strstr (str, "@"); - if (p != NULL) - str = dup_str = g_strndup (str, p - str); - - visible = empathy_live_search_match (live, str); - g_free (dup_str); - if (visible) - return TRUE; - } - - /* FIXME: Add more rules here, we could check phone numbers in - * contact's vCard for example. */ - - return FALSE; -} - -static gboolean -individual_view_filter_visible_func (GtkTreeModel *model, - GtkTreeIter *iter, - gpointer user_data) -{ - EmpathyIndividualView *self = EMPATHY_INDIVIDUAL_VIEW (user_data); - EmpathyIndividualViewPriv *priv = GET_PRIV (self); - FolksIndividual *individual = NULL; - gboolean is_group, is_separator, valid; - GtkTreeIter child_iter; - gboolean visible, is_online; - gboolean is_searching = TRUE; - - if (priv->search_widget == NULL || - !gtk_widget_get_visible (priv->search_widget)) - is_searching = FALSE; - - gtk_tree_model_get (model, iter, - EMPATHY_INDIVIDUAL_STORE_COL_IS_GROUP, &is_group, - EMPATHY_INDIVIDUAL_STORE_COL_IS_SEPARATOR, &is_separator, - EMPATHY_INDIVIDUAL_STORE_COL_IS_ONLINE, &is_online, - EMPATHY_INDIVIDUAL_STORE_COL_INDIVIDUAL, &individual, - -1); - - if (individual != NULL) - { - visible = individual_view_is_visible_individual (self, individual); - g_object_unref (individual); - - if (is_searching) - return visible; - else - return (priv->show_offline || is_online); - } - - if (is_separator) - return TRUE; - - /* Not a contact, not a separator, must be a group */ - g_return_val_if_fail (is_group, FALSE); - - /* only show groups which are not empty */ - for (valid = gtk_tree_model_iter_children (model, &child_iter, iter); - valid; valid = gtk_tree_model_iter_next (model, &child_iter)) - { - gtk_tree_model_get (model, &child_iter, - EMPATHY_INDIVIDUAL_STORE_COL_INDIVIDUAL, &individual, - EMPATHY_INDIVIDUAL_STORE_COL_IS_ONLINE, &is_online, - -1); - - if (individual == NULL) - continue; - - visible = individual_view_is_visible_individual (self, individual); - g_object_unref (individual); - - /* show group if it has at least one visible contact in it */ - if ((is_searching && visible) || - (!is_searching && (priv->show_offline || is_online))) - return TRUE; - } - - return FALSE; -} - static void individual_view_tooltip_destroy_cb (GtkWidget *widget, EmpathyIndividualView *view) @@ -1532,6 +1423,115 @@ individual_view_store_row_deleted_cb (GtkTreeModel *model, individual_view_verify_group_visibility (view, path); } +static gboolean +individual_view_is_visible_individual (EmpathyIndividualView *self, + FolksIndividual *individual) +{ + EmpathyIndividualViewPriv *priv = GET_PRIV (self); + EmpathyLiveSearch *live = EMPATHY_LIVE_SEARCH (priv->search_widget); + const gchar *str; + GList *personas, *l; + + /* We're only giving the visibility wrt filtering here, not things like + * presence. */ + if (live == NULL || gtk_widget_get_visible (GTK_WIDGET (live)) == FALSE) + return TRUE; + + /* check alias name */ + str = folks_individual_get_alias (individual); + if (empathy_live_search_match (live, str)) + 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; + + str = folks_persona_get_uid (l->data); + p = strstr (str, "@"); + if (p != NULL) + str = dup_str = g_strndup (str, p - str); + + visible = empathy_live_search_match (live, str); + g_free (dup_str); + if (visible) + return TRUE; + } + + /* FIXME: Add more rules here, we could check phone numbers in + * contact's vCard for example. */ + + return FALSE; +} + +static gboolean +individual_view_filter_visible_func (GtkTreeModel *model, + GtkTreeIter *iter, + gpointer user_data) +{ + EmpathyIndividualView *self = EMPATHY_INDIVIDUAL_VIEW (user_data); + EmpathyIndividualViewPriv *priv = GET_PRIV (self); + FolksIndividual *individual = NULL; + gboolean is_group, is_separator, valid; + GtkTreeIter child_iter; + gboolean visible, is_online; + gboolean is_searching = TRUE; + + if (priv->search_widget == NULL || + !gtk_widget_get_visible (priv->search_widget)) + is_searching = FALSE; + + gtk_tree_model_get (model, iter, + EMPATHY_INDIVIDUAL_STORE_COL_IS_GROUP, &is_group, + EMPATHY_INDIVIDUAL_STORE_COL_IS_SEPARATOR, &is_separator, + EMPATHY_INDIVIDUAL_STORE_COL_IS_ONLINE, &is_online, + EMPATHY_INDIVIDUAL_STORE_COL_INDIVIDUAL, &individual, + -1); + + if (individual != NULL) + { + visible = individual_view_is_visible_individual (self, individual); + g_object_unref (individual); + + if (is_searching) + return visible; + else + return (priv->show_offline || is_online); + } + + if (is_separator) + return TRUE; + + /* Not a contact, not a separator, must be a group */ + g_return_val_if_fail (is_group, FALSE); + + /* only show groups which are not empty */ + for (valid = gtk_tree_model_iter_children (model, &child_iter, iter); + valid; valid = gtk_tree_model_iter_next (model, &child_iter)) + { + gtk_tree_model_get (model, &child_iter, + EMPATHY_INDIVIDUAL_STORE_COL_INDIVIDUAL, &individual, + EMPATHY_INDIVIDUAL_STORE_COL_IS_ONLINE, &is_online, + -1); + + if (individual == NULL) + continue; + + visible = individual_view_is_visible_individual (self, individual); + g_object_unref (individual); + + /* show group if it has at least one visible contact in it */ + if ((is_searching && visible) || + (!is_searching && (priv->show_offline || is_online))) + return TRUE; + } + + return FALSE; +} + static void individual_view_constructed (GObject *object) { |