--f2QGlHpHGjS2mn6Y
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit

保科です。

ruby-1.3.5-970531 と ruby/gtk 0.18 でちょっとしたプログラムなぞ
い討澆燭い覆 △覆匹般桔鼎併遒澆鬚靴討い襪里任垢造卒)
Modal Dialogbox のところで詰まっています。

gtk_window_set_modal() を使うと、Modal Window はすぐにできるのですが
ボタンを押されるまで戻り値を返さないような、Modal Dialogbox を
作ろうとすると、gtk_mail_iteration() がどうしても欲しくなって
しまうのです。

小汚いプログラムで恐覆里任垢、以下のものを走らせると;
ダイアログボックスが浸点で、戻り竪 で返ってきてしまいます。

コメントを外せばボタンを押してダイアログボックスを閉じるまで
返ってこなくなり、戻り値も 1 になるのですが…

で、gtk_main_iteration() を rbgtk.c に追加すること自体は簡単でしたので
自分のところではして Gtk::main_iteration が使えるようにして
いるのですが、ひょっとして、私はなにかひどい誤解をしていたりする
のでしょうか?

require 'gtk'

def cb_ok( string, button1, button2, button3)
  dialogwindow  tk::Dialog::new()
  dialogwindow.set_modal(true)
  dialogwindow.border_width(10)

  label  tk::Label::new(string)
  dialogwindow.vbox.pack_start(label, true, true, 0)
  label.show

  val  
  button  tk::Button::new(button1)
  button.signal_connect("clicked") do val   end
  button.signal_connect_after("clicked") do dialogwindow.destroy end
  
  dialogwindow.action_area.pack_start(button, true, true, 0)
  button.show
  dialogwindow.show

#  while val 2
#    Gtk::main_iteration()
#  end
  return val
end

w  tk::Window::new(Gtk::WINDOW_TOPLEVEL)
w.signal_connect("delete_event") { exit }
w.signal_connect("destroy") { exit }

main  tk::VBox::new(false, 0)
main.border_width(1)
w.add(main)

button  tk::Button::new("OK")
button.signal_connect("clicked") do 
  val  b_ok("オラオラ", "はい", nil, nil )
p val
end
main.pack_start(button, true, true, 0)
button.show

main.show
w.show
Gtk::main()

-- 
ちなんでどうする気だ?

保科 徹(hoshina / best.com)  http://www.best.com/~hoshina
PGP fingerprint : 95 73 1C 26 C6 9E 28 86  BA 32 34 CA FC 9B DC 6D

--f2QGlHpHGjS2mn6Y
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="ruby-gtk-0.18.iteration.patch"
Content-Transfer-Encoding: 7bit

--- gtk/src/rbgtk.c~	Mon May 31 08:31:11 1999
+++ gtk/src/rbgtk.c	Wed Jun  2 18:20:11 1999
@@ -5854,6 +5854,14 @@
 }
 
 static VALUE
+gtk_m_main_iteration(self)
+    VALUE self;
+{
+    gtk_main_iteration();
+    return Qnil;
+}
+
+static VALUE
 gtk_rc_m_parse(self, rc)
     VALUE self, rc;
 {
@@ -7044,6 +7052,7 @@
   rb_define_module_function(mGtk, "main", gtk_m_main, 0);
   rb_define_module_function(mGtk, "main_level", gtk_m_main_level, 0);
   rb_define_module_function(mGtk, "main_quit", gtk_m_main_quit, 0);
+  rb_define_module_function(mGtk, "main_iteration", gtk_m_main_iteration, 0);
   rb_define_module_function(mGtk, "timeout_add", timeout_add, 1);
   rb_define_module_function(mGtk, "timeout_remove", timeout_remove, 1);
   rb_define_module_function(mGtk, "idle_add", idle_add, 0);

--f2QGlHpHGjS2mn6Y--