From: matz@... (Yukihiro Matsumoto) Date: 1998-08-11T12:21:34+09:00 Subject: [ruby-list:9025] Re: Gtk::CList まつもと ゆきひろです In message "[ruby-list:9014] Gtk::CList" on 98/08/11, "民斗 " 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; } - }