execve("/bin/cat", ["cat", "tree-swap.c"], [/* 20 vars */]) = 0 uname({sys="Linux", node="ruby", ...}) = 0 brk(0) = 0x804d000 open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=21888, ...}) = 0 old_mmap(NULL, 21888, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40000000 close(3) = 0 open("/lib/tls/libc.so.6", O_RDONLY) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0`H\325L"..., 512) = 512 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40006000 fstat64(3, {st_mode=S_IFREG|0755, st_size=1578228, ...}) = 0 old_mmap(0x4cd3f000, 1281996, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x4cd3f000 old_mmap(0x4ce72000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x132000) = 0x4ce72000 old_mmap(0x4ce76000, 8140, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x4ce76000 close(3) = 0 set_thread_area({entry_number:-1 -> 6, base_addr:0x400067c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0 munmap(0x40000000, 21888) = 0 brk(0) = 0x804d000 brk(0x806e000) = 0x806e000 brk(0) = 0x806e000 fstat64(1, {st_mode=S_IFREG|0660, st_size=1442, ...}) = 0 open("tree-swap.c", O_RDONLY|O_LARGEFILE) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=3622, ...}) = 0 read(3, "/* \n * Compile with:\n * gcc -o "..., 4096) = 3622 write(1, "/* \n * Compile with:\n * gcc -o "..., 3622/* * Compile with: * gcc -o tree-swap tree-swap.c `pkg-config --cflags --libs gtk+-2.0` * */ #include enum { COL_NAME = 0, NUM_COLS } ; static GtkTreeModel * create_and_fill_model (void) { GtkTreeStore *store; GtkTreeIter a, b, c, x; store = gtk_tree_store_new (NUM_COLS, G_TYPE_STRING); gtk_tree_store_append (store, &a, NULL); gtk_tree_store_set (store, &a, COL_NAME, "a", -1); gtk_tree_store_append (store, &b, NULL); gtk_tree_store_set (store, &b, COL_NAME, "b", -1); gtk_tree_store_append (store, &c, NULL); gtk_tree_store_set (store, &c, COL_NAME, "c", -1); gtk_tree_store_append (store, &x, &c); gtk_tree_store_set (store, &x, COL_NAME, "1", -1); gtk_tree_store_append (store, &x, &c); gtk_tree_store_set (store, &x, COL_NAME, "2", -1); gtk_tree_store_append (store, &x, &c); gtk_tree_store_set (store, &x, COL_NAME, "3", -1); return GTK_TREE_MODEL (store); } static GtkWidget * create_view_and_model (void) { GtkTreeViewColumn *col; GtkCellRenderer *renderer; GtkTreeModel *model; GtkWidget *view; view = gtk_tree_view_new (); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (view), -1, "Name", renderer, "text", COL_NAME, NULL); model = create_and_fill_model (); gtk_tree_view_set_model (GTK_TREE_VIEW (view), model); g_object_unref (model); /* destroy model automatically with view */ return view; } static void move_up (GtkButton *button, gpointer data) { GtkTreeView *tree = GTK_TREE_VIEW (data); GtkTreeModel *model; GtkTreeSelection *sel; GtkTreePath *path; GtkTreeIter a, b; sel = gtk_tree_view_get_selection (tree); if (gtk_tree_selection_get_selected (sel, NULL, &a)) { model = gtk_tree_view_get_model (tree); path = gtk_tree_model_get_path (model, &a); gtk_tree_path_prev (path); gtk_tree_model_get_iter (model, &b, path); gtk_tree_store_swap (GTK_TREE_STORE (model), &a, &b); } } static void move_down (GtkButton *button, gpointer data) { GtkTreeView *tree = GTK_TREE_VIEW (data); GtkTreeModel *model; GtkTreeSelection *sel; GtkTreeIter a, b; sel = gtk_tree_view_get_selection (tree); if (gtk_tree_selection_get_selected (sel, NULL, &a)) { b = a; model = gtk_tree_view_get_model (tree); gtk_tree_model_iter_next (model, &b); gtk_tree_store_swap (GTK_TREE_STORE (model), &a, &b); } } int main (int argc, char **argv) { GtkWidget *window, *view, *vbox, *button; gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); g_signal_connect (window, "delete_event", gtk_main_quit, NULL); /* dirty */ view = create_view_and_model (); vbox = gtk_vbox_new (FALSE, 5); gtk_box_pack_start (GTK_BOX (vbox), view, TRUE, TRUE, 0); button = gtk_button_new_with_label ("Move up"); g_signal_connect (button, "clicked", (GCallback)move_up, (gpointer) view); gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0); button = gtk_button_new_with_label ("Move down"); g_signal_connect (button, "clicked", (GCallback)move_down, (gpointer) view); gtk_box_pack_start (GTK_BOX (vbox), button, TRUE, TRUE, 0); gtk_container_add (GTK_CONTAINER (window), vbox); gtk_widget_show_all (window); gtk_tree_view_expand_all (GTK_TREE_VIEW (view)); gtk_main (); return 0; } ) = 3622 read(3, "", 4096) = 0 close(3) = 0 close(1) = 0 exit_group(0) = ?