まつもと ゆきひろです
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;
}
- }