summaryrefslogtreecommitdiff
path: root/ext/tk
diff options
context:
space:
mode:
authornagai <nagai@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-07-13 03:47:05 +0000
committernagai <nagai@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-07-13 03:47:05 +0000
commit4d52e657871f87c1b61636e01bc60e39ad4d6c26 (patch)
tree556a280aa1f7cec12f2a6bb4805435b9a04cf4f2 /ext/tk
parent9e0adac4b4fc1ec38b2a236124fea675d2f23a0a (diff)
* ext/tk/tcltklib.c: TclTkLib.do_one_event doesn't work.
* ext/tk/lib/tk.rb: Tk.thread_update is available. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@8755 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/tk')
-rw-r--r--ext/tk/lib/tk.rb9
-rw-r--r--ext/tk/tcltklib.c25
2 files changed, 18 insertions, 16 deletions
diff --git a/ext/tk/lib/tk.rb b/ext/tk/lib/tk.rb
index 4267b42a3e..5bd6b3da84 100644
--- a/ext/tk/lib/tk.rb
+++ b/ext/tk/lib/tk.rb
@@ -1940,8 +1940,10 @@ module Tk
self
end
-=begin
- # See tcltklib.c for the reason of why the following methods are disabled.
+ # NOTE::
+ # If no eventloop-thread is running, "thread_update" method is same
+ # to "update" method. Else, "thread_update" method waits to complete
+ # idletask operation on the eventloop-thread.
def Tk.thread_update(idle=nil)
if idle
tk_call_without_enc('thread_update', 'idletasks')
@@ -1952,7 +1954,6 @@ module Tk
def Tk.thread_update_idletasks
thread_update(true)
end
-=end
def Tk.lower_window(win, below=None)
tk_call('lower', _epath(win), _epath(below))
@@ -4194,7 +4195,7 @@ end
#Tk.freeze
module Tk
- RELEASE_DATE = '2005-07-05'.freeze
+ RELEASE_DATE = '2005-07-13'.freeze
autoload :AUTO_PATH, 'tk/variable'
autoload :TCL_PACKAGE_PATH, 'tk/variable'
diff --git a/ext/tk/tcltklib.c b/ext/tk/tcltklib.c
index 244902dd41..cccf924e5b 100644
--- a/ext/tk/tcltklib.c
+++ b/ext/tk/tcltklib.c
@@ -4,7 +4,7 @@
* Oct. 24, 1997 Y. Matsumoto
*/
-#define TCLTKLIB_RELEASE_DATE "2005-07-05"
+#define TCLTKLIB_RELEASE_DATE "2005-07-13"
#include "ruby.h"
#include "rubysig.h"
@@ -1790,7 +1790,7 @@ lib_do_one_event_core(argc, argv, self, is_ip)
int flags;
int found_event;
- if (eventloop_thread) {
+ if (!NIL_P(eventloop_thread)) {
rb_raise(rb_eRuntimeError, "eventloop is already running");
}
@@ -3084,7 +3084,8 @@ ip_rb_threadUpdateCommand(clientData, interp, objc, objv)
}
#endif
- if (rb_thread_alone() || eventloop_thread == current_thread) {
+ if (rb_thread_alone()
+ || NIL_P(eventloop_thread) || eventloop_thread == current_thread) {
#if TCL_MAJOR_VERSION >= 8
DUMP1("call ip_rbUpdateObjCmd");
return ip_rbUpdateObjCmd(clientData, interp, objc, objv);
@@ -5477,10 +5478,10 @@ tk_funcall(func, argc, argv, obj)
}
if (NIL_P(eventloop_thread) || current == eventloop_thread) {
- if (eventloop_thread) {
- DUMP2("tk_funcall from current eventloop %lx", current);
- } else {
+ if (NIL_P(eventloop_thread)) {
DUMP2("tk_funcall from thread:%lx but no eventloop", current);
+ } else {
+ DUMP2("tk_funcall from current eventloop %lx", current);
}
result = (func)(ip_obj, argc, argv);
if (rb_obj_is_kind_of(result, rb_eException)) {
@@ -5792,10 +5793,10 @@ ip_eval(self, str)
rb_thread_critical = thr_crit_bup;
if (NIL_P(eventloop_thread) || current == eventloop_thread) {
- if (eventloop_thread) {
- DUMP2("eval from current eventloop %lx", current);
- } else {
+ if (NIL_P(eventloop_thread)) {
DUMP2("eval from thread:%lx but no eventloop", current);
+ } else {
+ DUMP2("eval from current eventloop %lx", current);
}
result = ip_eval_real(self, RSTRING(str)->ptr, RSTRING(str)->len);
if (rb_obj_is_kind_of(result, rb_eException)) {
@@ -6961,10 +6962,10 @@ ip_invoke_with_position(argc, argv, obj, position)
rb_raise(rb_eArgError, "command name missing");
}
if (NIL_P(eventloop_thread) || current == eventloop_thread) {
- if (eventloop_thread) {
- DUMP2("invoke from current eventloop %lx", current);
- } else {
+ if (NIL_P(eventloop_thread)) {
DUMP2("invoke from thread:%lx but no eventloop", current);
+ } else {
+ DUMP2("invoke from current eventloop %lx", current);
}
result = ip_invoke_real(argc, argv, ip_obj);
if (rb_obj_is_kind_of(result, rb_eException)) {