#include #include #include #include #include #include static void init_treeview (GtkWidget *treeview) { GtkCellRenderer *renderer; GtkTreeModel *model; model = GTK_TREE_MODEL (gtk_list_store_new (2, GDK_TYPE_PIXBUF, G_TYPE_STRING)); gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), model); renderer = gtk_cell_renderer_pixbuf_new (); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview), -1, "Shares", renderer, "pixbuf", 0, NULL); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview), -1, "Shares", renderer, "text", 1, NULL); } static void populate_treeview (GtkWidget *widget, OobsObject *shares) { GtkTreeModel *model; GtkTreeIter treeiter; OobsListIter iter; GdkPixbuf *pixbuf; GObject *object; gboolean valid; model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget)); valid = oobs_list_get_iter_first (OOBS_LIST (shares), &iter); pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (), "gnome-fs-smb", 48, 0, NULL); gtk_list_store_clear (GTK_LIST_STORE (model)); while (valid) { oobs_list_get (OOBS_LIST (shares), &iter, &object); gtk_list_store_append (GTK_LIST_STORE (model), &treeiter); gtk_list_store_set (GTK_LIST_STORE (model), &treeiter, 0, pixbuf, 1, oobs_share_get_path (OOBS_SHARE (object)), -1); valid = oobs_list_iter_next (OOBS_LIST (shares), &iter); } g_object_unref (pixbuf); } static void on_shares_changed (OobsObject *shares, GtkWidget *treeview) { populate_treeview (treeview, shares); } int main (int argc, char *argv[]) { GladeXML *xml; OobsSession *session; OobsObject *shares; GtkWidget *treeview; gtk_init (&argc, &argv); xml = glade_xml_new ("test.glade", NULL, NULL); treeview = glade_xml_get_widget (xml, "treeview"); init_treeview (treeview); session = oobs_session_new (); shares = oobs_shares_list_new (session); g_signal_connect (shares, "changed", G_CALLBACK (on_shares_changed), treeview); populate_treeview (treeview, shares); gtk_main (); }