aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy-gtk/empathy-contact-selector.c
diff options
context:
space:
mode:
authorXavier Claessens <xclaesse@src.gnome.org>2009-01-31 01:33:42 +0800
committerXavier Claessens <xclaesse@src.gnome.org>2009-01-31 01:33:42 +0800
commit3ec0482e4801c8c0e28763108685e165c170d134 (patch)
treea25e532b0a95cb49ed9995247371d37a462b5a94 /libempathy-gtk/empathy-contact-selector.c
parentc6a2ec5e82e66e3a515df39f68ae9179bbc69424 (diff)
downloadgsoc2013-empathy-3ec0482e4801c8c0e28763108685e165c170d134.tar
gsoc2013-empathy-3ec0482e4801c8c0e28763108685e165c170d134.tar.gz
gsoc2013-empathy-3ec0482e4801c8c0e28763108685e165c170d134.tar.bz2
gsoc2013-empathy-3ec0482e4801c8c0e28763108685e165c170d134.tar.lz
gsoc2013-empathy-3ec0482e4801c8c0e28763108685e165c170d134.tar.xz
gsoc2013-empathy-3ec0482e4801c8c0e28763108685e165c170d134.tar.zst
gsoc2013-empathy-3ec0482e4801c8c0e28763108685e165c170d134.zip
use EmpathyContactListStore directly
svn path=/trunk/; revision=2315
Diffstat (limited to 'libempathy-gtk/empathy-contact-selector.c')
-rw-r--r--libempathy-gtk/empathy-contact-selector.c100
1 files changed, 27 insertions, 73 deletions
diff --git a/libempathy-gtk/empathy-contact-selector.c b/libempathy-gtk/empathy-contact-selector.c
index 3de39bef8..75b1dbf14 100644
--- a/libempathy-gtk/empathy-contact-selector.c
+++ b/libempathy-gtk/empathy-contact-selector.c
@@ -33,13 +33,6 @@ G_DEFINE_TYPE (EmpathyContactSelector, empathy_contact_selector,
#define GET_PRIV(object) (G_TYPE_INSTANCE_GET_PRIVATE \
((object), EMPATHY_TYPE_CONTACT_SELECTOR, EmpathyContactSelectorPriv))
-enum {
- CONTACT_COL,
- NAME_COL,
- STATUS_ICON_NAME_COL,
- NUM_COLS
-};
-
enum
{
PROP_0,
@@ -51,12 +44,11 @@ typedef struct _EmpathyContactSelectorPriv EmpathyContactSelectorPriv;
struct _EmpathyContactSelectorPriv
{
EmpathyContactListStore *store;
- GtkListStore *list_store;
gboolean is_blank_set;
};
static void changed_cb (GtkComboBox *widget, gpointer data);
-static gboolean get_iter_for_contact (GtkListStore *list_store,
+static gboolean get_iter_for_contact (GtkTreeStore *store,
GtkTreeIter *list_iter, EmpathyContact *contact);
@@ -70,8 +62,8 @@ empathy_contact_selector_get_selected (EmpathyContactSelector *selector)
if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (selector), &iter))
return NULL;
- gtk_tree_model_get (GTK_TREE_MODEL (priv->list_store), &iter,
- CONTACT_COL, &contact, -1);
+ gtk_tree_model_get (GTK_TREE_MODEL (priv->store), &iter,
+ EMPATHY_CONTACT_LIST_STORE_COL_CONTACT, &contact, -1);
return contact;
}
@@ -83,9 +75,10 @@ set_blank_contact (EmpathyContactSelector *selector)
EmpathyContactSelectorPriv *priv = GET_PRIV (selector);
GtkTreeIter blank_iter;
- gtk_list_store_insert (priv->list_store, &blank_iter, 0);
- gtk_list_store_set (priv->list_store, &blank_iter, CONTACT_COL, NULL,
- NAME_COL, _("Select a contact"), -1);
+ gtk_tree_store_insert (GTK_TREE_STORE (priv->store), &blank_iter, NULL, 0);
+ gtk_tree_store_set (GTK_TREE_STORE (priv->store), &blank_iter,
+ EMPATHY_CONTACT_LIST_STORE_COL_CONTACT, NULL,
+ EMPATHY_CONTACT_LIST_STORE_COL_NAME, ("Select a contact"), -1);
g_signal_handlers_block_by_func(selector, changed_cb, NULL);
gtk_combo_box_set_active_iter (GTK_COMBO_BOX (selector), &blank_iter);
g_signal_handlers_unblock_by_func(selector, changed_cb, NULL);
@@ -107,9 +100,9 @@ notify_popup_shown_cb (GtkComboBox *widget,
if (shown)
{
- if (get_iter_for_contact (priv->list_store, &blank_iter, NULL))
+ if (get_iter_for_contact (GTK_TREE_STORE (priv->store), &blank_iter, NULL))
{
- gtk_list_store_remove (priv->list_store, &blank_iter);
+ gtk_tree_store_remove (GTK_TREE_STORE (priv->store), &blank_iter);
priv->is_blank_set = FALSE;
}
}
@@ -118,7 +111,7 @@ notify_popup_shown_cb (GtkComboBox *widget,
if (gtk_combo_box_get_active (widget) == -1)
{
set_blank_contact (selector);
- if (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (priv->list_store),
+ if (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (priv->store),
NULL) == 1)
gtk_widget_set_sensitive (GTK_WIDGET (selector), FALSE);
}
@@ -143,15 +136,15 @@ changed_cb (GtkComboBox *widget,
if (gtk_combo_box_get_active (widget) == -1)
{
set_blank_contact (selector);
- if (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (priv->list_store),
+ if (gtk_tree_model_iter_n_children (GTK_TREE_MODEL (priv->store),
NULL) == 1)
gtk_widget_set_sensitive (GTK_WIDGET (selector), FALSE);
}
else
{
- if (get_iter_for_contact (priv->list_store, &blank_iter, NULL))
+ if (get_iter_for_contact (GTK_TREE_STORE (priv->store), &blank_iter, NULL))
{
- gtk_list_store_remove (priv->list_store, &blank_iter);
+ gtk_tree_store_remove (GTK_TREE_STORE (priv->store), &blank_iter);
priv->is_blank_set = FALSE;
}
}
@@ -159,7 +152,7 @@ changed_cb (GtkComboBox *widget,
static gboolean
-get_iter_for_contact (GtkListStore *list_store,
+get_iter_for_contact (GtkTreeStore *store,
GtkTreeIter *list_iter,
EmpathyContact *contact)
{
@@ -170,19 +163,20 @@ get_iter_for_contact (GtkListStore *list_store,
/* Do a linear search to find the row with CONTACT_COL set to contact. */
path = gtk_tree_path_new_first ();
- if (gtk_tree_model_get_iter (GTK_TREE_MODEL (list_store), &tmp_iter, path))
+ if (gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &tmp_iter, path))
{
do
{
- gtk_tree_model_get (GTK_TREE_MODEL (list_store),
- &tmp_iter, CONTACT_COL, &tmp_contact, -1);
+ gtk_tree_model_get (GTK_TREE_MODEL (store),
+ &tmp_iter, EMPATHY_CONTACT_LIST_STORE_COL_CONTACT,
+ &tmp_contact, -1);
found = (tmp_contact == contact);
if (found)
{
*list_iter = tmp_iter;
break;
}
- } while (gtk_tree_model_iter_next (GTK_TREE_MODEL (list_store),
+ } while (gtk_tree_model_iter_next (GTK_TREE_MODEL (store),
&tmp_iter));
}
@@ -199,48 +193,9 @@ empathy_store_row_changed_cb (EmpathyContactListStore *empathy_store,
{
EmpathyContactSelector *selector = EMPATHY_CONTACT_SELECTOR (data);
EmpathyContactSelectorPriv *priv = GET_PRIV (selector);
- GtkTreeIter list_iter;
- EmpathyContact *contact;
- gchar *name;
- gchar *icon_name;
- gboolean is_online;
gint children;
- /* Synchronize the GtkListStore with the EmpathyContactListStore. */
- gtk_tree_model_get (GTK_TREE_MODEL (empathy_store), empathy_iter,
- EMPATHY_CONTACT_LIST_STORE_COL_CONTACT, &contact,
- EMPATHY_CONTACT_LIST_STORE_COL_NAME, &name,
- EMPATHY_CONTACT_LIST_STORE_COL_ICON_STATUS, &icon_name,
- EMPATHY_CONTACT_LIST_STORE_COL_IS_ONLINE, &is_online, -1);
-
- if (!contact)
- {
- g_free (name);
- g_free (icon_name);
- return;
- }
-
- /* The store does not contain the contact, so create a new row and set it. */
- if (!get_iter_for_contact (priv->list_store, &list_iter, contact))
- {
- gtk_list_store_append (priv->list_store, &list_iter);
- gtk_list_store_set (priv->list_store, &list_iter, CONTACT_COL,
- contact, -1);
- }
-
- if (is_online)
- {
- gtk_list_store_set (priv->list_store, &list_iter, NAME_COL, name,
- STATUS_ICON_NAME_COL, icon_name, -1);
- }
- else
- {
- /* We display only online contacts. */
- gtk_list_store_remove (priv->list_store, &list_iter);
- }
-
- children = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (priv->list_store),
- NULL);
+ children = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (priv->store), NULL);
if (children == 1 && priv->is_blank_set)
gtk_widget_set_sensitive (GTK_WIDGET (selector), FALSE);
@@ -264,13 +219,12 @@ empathy_contact_selector_constructor (GType type,
GtkCellRenderer *renderer;
g_object_set (priv->store, "is-compact", TRUE, "show-avatars", FALSE,
- "show-offline", FALSE, "sort-criterium",
+ "show-offline", FALSE, "sort-criterium", "show-groups", FALSE,
EMPATHY_CONTACT_LIST_STORE_SORT_NAME, NULL);
+ empathy_contact_list_store_set_show_groups (priv->store, FALSE);
- priv->list_store = gtk_list_store_new (NUM_COLS, EMPATHY_TYPE_CONTACT,
- G_TYPE_STRING, G_TYPE_STRING);
- gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (priv->list_store),
- NAME_COL, GTK_SORT_ASCENDING);
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (priv->store),
+ EMPATHY_CONTACT_LIST_STORE_COL_NAME, GTK_SORT_ASCENDING);
g_signal_connect (priv->store, "row-changed",
G_CALLBACK (empathy_store_row_changed_cb), (gpointer) contact_selector);
@@ -280,7 +234,7 @@ empathy_contact_selector_constructor (GType type,
G_CALLBACK (notify_popup_shown_cb), NULL);
gtk_combo_box_set_model (GTK_COMBO_BOX (contact_selector),
- GTK_TREE_MODEL (priv->list_store));
+ GTK_TREE_MODEL (priv->store));
gtk_widget_set_sensitive (GTK_WIDGET (contact_selector), FALSE);
/* Status icon */
@@ -288,14 +242,14 @@ empathy_contact_selector_constructor (GType type,
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (contact_selector),
renderer, FALSE);
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (contact_selector), renderer,
- "icon-name", STATUS_ICON_NAME_COL, NULL);
+ "icon-name", EMPATHY_CONTACT_LIST_STORE_COL_ICON_STATUS, NULL);
/* Contact name */
renderer = gtk_cell_renderer_text_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (contact_selector),
renderer, TRUE);
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (contact_selector), renderer,
- "text", NAME_COL, NULL);
+ "text", EMPATHY_CONTACT_LIST_STORE_COL_NAME, NULL);
set_blank_contact (contact_selector);