まつもと ゆきひろです

In message "[ruby-list:9014] Gtk::CList"
    on 98/08/11, "民斗 " <tommy / valley.ne.jp> writes:

|民斗と申します。
|
|最近、ruby + gtk をちょっといじっているんですが、Gtk::CList の
|signal_connect("select_row") の使い方が良くわかりません。

いや,これはバグです.一応の目安としては

|	./test.rb:36: [BUG] Segmentation fault

と出るものはみんなバグです(分かりやすい).
調べたら3つのバグが複合してました.うーむ.


--- gtk.c	1998/08/10 05:55:34	1.1.1.1.2.25
+++ gtk.c	1998/08/11 03:17:44
@@ -1057,8 +1057,8 @@
     }
-    else if (obj_is_kind_of(obj, gWindow)) {
+    if (obj_is_kind_of(obj, gWindow)) {
 	if (strcmp(signame, "move_resize") == 0) {
-	    ary_push(args, NUM2INT(*GTK_RETLOC_INT(params[0])));
-	    ary_push(args, NUM2INT(*GTK_RETLOC_INT(params[1])));
-	    ary_push(args, NUM2INT(GTK_VALUE_INT(params[3])));
-	    ary_push(args, NUM2INT(GTK_VALUE_INT(params[4])));
+	    ary_push(args, INT2NUM(*GTK_RETLOC_INT(params[0])));
+	    ary_push(args, INT2NUM(*GTK_RETLOC_INT(params[1])));	
+	    ary_push(args, INT2NUM(GTK_VALUE_INT(params[3])));
+	    ary_push(args, INT2NUM(GTK_VALUE_INT(params[4])));
 	    return;
@@ -1070,5 +1070,5 @@
     }
-    else if (obj_is_kind_of(obj, gEntry)) {
+    if (obj_is_kind_of(obj, gEntry)) {
 	if (strcmp(signame, "insert_position") == 0) {
-	    ary_push(args, NUM2INT(*GTK_RETLOC_INT(params[0])));
+	    ary_push(args, INT2NUM(*GTK_RETLOC_INT(params[0])));
 	    return;
@@ -1076,6 +1076,9 @@
     }
-    else if (obj_is_kind_of(obj, gCList)) {
-	if (strcmp(signame, "select_row") == 0) {
-	    if (GTK_VALUE_POINTER(params[0]))
-		ary_push(args, make_gdkevent(GTK_VALUE_POINTER(params[0])));
+    if (obj_is_kind_of(obj, gCList)) {
+	if (strcmp(signame, "select_row") == 0 ||
+	    strcmp(signame, "unselect_row") == 0) {
+	    ary_push(args, INT2NUM(GTK_VALUE_INT(params[0])));
+	    ary_push(args, INT2NUM(GTK_VALUE_INT(params[1])));
+	    if (GTK_VALUE_POINTER(params[2]))
+		ary_push(args, make_gdkevent(GTK_VALUE_POINTER(params[2])));
 	    else
@@ -1084,10 +1087,3 @@
 	}
-	if (strcmp(signame, "unselect_row") == 0) {
-	    if (GTK_VALUE_POINTER(params[0]))
-		ary_push(args, make_gdkevent(GTK_VALUE_POINTER(params[0])));
-	    else
-		ary_push(args, Qnil);
-	    return;
 	}
-    }