安井です。
Gtk::CTreeでinsert_nodeで返されたCTreeNodeオブジェクトと、
SIGNAL_TREE_SELECT_ROWで返されるオブジェクトが合っていません。どうやら、
rbgtkctree.cのmake_ctree_nodeで毎回オブジェクトが生成されているように見え
ます。
CTreeNodeオブジェクトのidメソッドを再定義することで問題がなくなりそうに
思うのですが、どうでしょうか?

@@ -1419,6 +1419,14 @@
     return (GTK_CTREE_ROW(node)->expanded)?Qtrue:Qfalse;
 }
 
+static VALUE
+ctreenode_id(self)
+	 VALUE self;
+{
+	GtkCTreeNode* node = get_ctree_node(self);
+	return INT2NUM((int)node);
+}
+
 void Init_gtk_ctree()
 {
     gCTree = rb_define_class_under(mGtk, "CTree", gCList);
@@ -1572,4 +1580,5 @@
     rb_define_method(gCTreeNode, "children", ctreenode_get_children, 0);
     rb_define_method(gCTreeNode, "leaf?", ctreenode_is_leaf, 0);
     rb_define_method(gCTreeNode, "expanded?", ctreenode_expanded, 0);
+    rb_define_method(gCTreeNode, "id", ctreenode_id, 0);
 }

やっぱちょっと乱暴かも。もっと良い方法がありそう。
--
「ゴルゴダ・タワーの神は臆病者には微笑まない」
YASUI Kentarow <kenyasui / alles.or.jp>   http://www.alles.or.jp/~kenyasui/