Message-ID: <3fe5f7f1-8d30-49eb-ba41-4ad1c1e021f3@l25g2000vba.googlegroups.com>
> First of all, does the following work fine?
Yep. It does.
Tell me what to test next. 
Well, could you try the following patch?
--- tk.rb.orig 2009-04-07 06:04:22.000000000 +0900
+++ tk.rb 2009-04-09 06:27:07.000000000 +0900
@@ -1130,30 +1130,30 @@
opts = ''
end
- if WITH_RUBY_VM ### check Ruby 1.9 !!!!!!!
- # *** NEED TO FIX ***
- ip = TclTkIp.new(name, opts)
- 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
- INTERP = ip
- else
- unless self.const_defined? :RUN_EVENTLOOP_ON_MAIN_THREAD
- RUN_EVENTLOOP_ON_MAIN_THREAD = false
- end
- if RUN_EVENTLOOP_ON_MAIN_THREAD
+ unless self.const_defined? :RUN_EVENTLOOP_ON_MAIN_THREAD
+ if WITH_RUBY_VM ### check Ruby 1.9 !!!!!!!
+ # *** NEED TO FIX ***
+ ip = TclTkIp.new(name, opts)
+ 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
INTERP = ip
else
- ip.delete
+ unless self.const_defined? :RUN_EVENTLOOP_ON_MAIN_THREAD
+ RUN_EVENTLOOP_ON_MAIN_THREAD = false
+ end
+ if RUN_EVENTLOOP_ON_MAIN_THREAD
+ INTERP = ip
+ else
+ ip.delete
+ end
end
- end
- ip = nil
- else
- unless self.const_defined? :RUN_EVENTLOOP_ON_MAIN_THREAD
+ ip = nil
+ else
RUN_EVENTLOOP_ON_MAIN_THREAD = false
end
end
@@ -1202,6 +1202,9 @@
INTERP_THREAD_STATUS = INTERP_THREAD[:status]
end
+ # WINDOWING_SYSTEM = TclTkLib::WINDOWING_SYSTEM
+ WINDOWING_SYSTEM = INTERP._invoke_without_enc('tk', 'windowingsystem')
···
From: Diego.Virasoro@gmail.com
Subject: Re: Ruby 1.9.1 + Tk problem
Date: Wed, 8 Apr 2009 23:45:08 +0900
+
def INTERP.__getip
self
end
@@ -1703,12 +1706,15 @@
TclTkLib.mainloop(check_root)
elsif TkCore::RUN_EVENTLOOP_ON_MAIN_THREAD
- # if TclTkLib::WINDOWING_SYSTEM == 'aqua' &&
- if TkCore::INTERP._invoke_without_enc('tk','windowingsystem')=='aqua' &&
- Thread.current != Thread.main &&
- (TclTkLib.get_version <=> [8,4,TclTkLib::RELEASE_TYPE::FINAL,9]) > 0
- raise RuntimeError,
- "eventloop on TkAqua ( > Tk8.4.9 ) works on the main thread only"
+ if Thread.current != Thread.main
+ msg = 'eventloop on '
+ if TkCore::WINDOWING_SYSTEM == 'aqua' &&
+ (TclTkLib.get_version<=>[8,4,TclTkLib::RELEASE_TYPE::FINAL,9]) > 0
+ msg << "TkAqua ( > Tk8.4.9 )"
+ else
+ msg << "your current environment (or setting)"
+ end
+ raise RuntimeError, msg << " works on the main thread only"
end
TclTkLib.mainloop(check_root)
--
Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)