From: Hidetoshi NAGAI Date: 2008-12-20T22:32:17+09:00 Subject: [ruby-list:45730] Re: ruby-1.9.1-preview2のruby-tk on OSX 永井@知能.九工大です. From: 天野竜太郎 Subject: [ruby-list:45727] Re: ruby-1.9.1-preview2のruby-tk on OSX Date: Fri, 19 Dec 2008 22:39:58 +0900 Message-ID: <91B53BE6-5D56-417F-9F86-0F67E2E73B18@asahi-net.or.jp> > 天野です。 すみません.迷惑をかけています. > こうすると、起動してこないというか、windowが見えた段階 > でずっとカーソルが回り続けてしまいます。 > チェックボタンを二つつけただけのものでもwindowが出てくるのに > 10秒ぐらい、ボタンが見えるのにさらに20秒ぐらいでしかもそのwindow > を操作できない状態です。これではという状況です。 う〜む.thread の切り替えがうまくいっていないんでしょうかねぇ... それでは確かに使い物にならないですね. 残念ながら,当座は「main thread でのみ event loop を動かせる」で 回避しておくしかなさそうです. 正しく Aqua 環境であることを確認するには extconf.rb の変更 (tkConfig.sh の利用) が必要なようです. ですが,これは注意深くやらないといけませんから, 今は変更を保留して対策を考えることにします. 以下のようなものではいかがでしょうか? Index: tk.rb =================================================================== --- tk.rb (revision 20801) +++ tk.rb (working copy) @@ -1112,15 +1112,19 @@ WITH_RUBY_VM = Object.const_defined?(:RubyVM) && ::RubyVM.class == Class WITH_ENCODING = defined?(::Encoding.default_external) && true #WITH_ENCODING = Object.const_defined?(:Encoding) && ::Encoding.class == Class - #if TclTkLib::WINDOWING_SYSTEM == 'aqua' - # if (TclTkLib.get_version <=> [8, 4, TclTkLib::RELEASE_TYPE::FINAL, 9]) > 0 - # # *** KNOWN BUG *** - # # Main event loop thread of TkAqua (> Tk8.4.9) must be the main - # # application thread. So, ruby1.9 users must call Tk.mainloop on - # # the main application thread. - # RUN_EVENTLOOP_ON_MAIN_THREAD = true - # end - #end + # *** NEED TO FIX *** + ip = TclTkIp.new + if ip._invoke_without_enc('tk', 'windowingsystem') == 'aqua' && + (TclTkLib.get_version <=> [8, 4, TclTkLib::RELEASE_TYPE::FINAL, 9]) > 0 + # *** KNOWN BUG *** + # Main event loop thread of TkAqua (> Tk8.4.9) must be the main + # application thread. So, ruby1.9 users must call Tk.mainloop on + # the main application thread. + RUN_EVENTLOOP_ON_MAIN_THREAD = true + end + ip.delete + ip = nil + unless self.const_defined? :RUN_EVENTLOOP_ON_MAIN_THREAD ### Ruby 1.9 !!!!!!!!!!!!!!!!!!!!!!!!!! RUN_EVENTLOOP_ON_MAIN_THREAD = false @@ -5529,7 +5533,7 @@ #Tk.freeze module Tk - RELEASE_DATE = '2008-12-04'.freeze + RELEASE_DATE = '2008-12-20'.freeze autoload :AUTO_PATH, 'tk/variable' autoload :TCL_PACKAGE_PATH, 'tk/variable' -- 永井 秀利 (nagai@ai.kyutech.ac.jp) 九州工業大学 大学院情報工学研究院 知能情報工学研究系