summaryrefslogtreecommitdiff
path: root/ext/tk
diff options
context:
space:
mode:
Diffstat (limited to 'ext/tk')
-rw-r--r--ext/tk/lib/tk.rb12
-rw-r--r--ext/tk/lib/tkextlib/tcllib/plotchart.rb4
-rw-r--r--ext/tk/sample/tkballoonhelp.rb18
-rw-r--r--ext/tk/tkutil/tkutil.c20
4 files changed, 38 insertions, 16 deletions
diff --git a/ext/tk/lib/tk.rb b/ext/tk/lib/tk.rb
index 7552abed91..f17a6af4d2 100644
--- a/ext/tk/lib/tk.rb
+++ b/ext/tk/lib/tk.rb
@@ -1174,6 +1174,8 @@ module TkCore
opts = ''
end
+ # RUN_EVENTLOOP_ON_MAIN_THREAD = true
+
unless self.const_defined? :RUN_EVENTLOOP_ON_MAIN_THREAD
if WITH_RUBY_VM ### check Ruby 1.9 !!!!!!!
# *** NEED TO FIX ***
@@ -1275,6 +1277,14 @@ module TkCore
INTERP = INTERP_THREAD[:interp]
INTERP_THREAD_STATUS = INTERP_THREAD[:status]
+
+ # delete the interpreter and kill the eventloop thread at exit
+ END{
+ if INTERP_THREAD.alive?
+ INTERP.delete
+ INTERP_THREAD.kill
+ end
+ }
end
def INTERP.__getip
@@ -4890,7 +4900,7 @@ class TkObject<TkKernel
begin
cget(name)
rescue
- if self.kind_of?(TkWindow)
+ if self.kind_of?(TkWindow) && name != "to_ary" && name != "to_str"
fail NameError,
"unknown option '#{id}' for #{self.inspect} (deleted widget?)"
else
diff --git a/ext/tk/lib/tkextlib/tcllib/plotchart.rb b/ext/tk/lib/tkextlib/tcllib/plotchart.rb
index 6b7a526b75..3c944bb266 100644
--- a/ext/tk/lib/tkextlib/tcllib/plotchart.rb
+++ b/ext/tk/lib/tkextlib/tcllib/plotchart.rb
@@ -145,8 +145,8 @@ module Tk::Tcllib::Plotchart
list(tk_call_without_enc('::Plotchart::coordsToPixel', w.path, x, y))
end
- def self.determine_scale(w, xmax, ymax)
- tk_call_without_enc('::Plotchart::determineScale', w.path, xmax, ymax)
+ def self.determine_scale(*args) # (xmin, xmax, inverted=false)
+ tk_call_without_enc('::Plotchart::determineScale', *args)
end
def self.set_zoom_pan(w)
diff --git a/ext/tk/sample/tkballoonhelp.rb b/ext/tk/sample/tkballoonhelp.rb
index a9bd371db6..a9c00d230d 100644
--- a/ext/tk/sample/tkballoonhelp.rb
+++ b/ext/tk/sample/tkballoonhelp.rb
@@ -111,12 +111,24 @@ class Tk::RbWidget::BalloonHelp<TkLabel
@frame.deiconify
@frame.raise
- @org_cursor = @parent['cursor']
- @parent.cursor('crosshair')
+ begin
+ @org_cursor = @parent.cget('cursor')
+ rescue
+ @org_cursor = @parent['cursor']
+ end
+ begin
+ @parent.configure('cursor', 'crosshair')
+ rescue
+ @parent.cursor('crosshair')
+ end
end
def erase
- @parent.cursor(@org_cursor)
+ begin
+ @parent.configure('cursor', @org_cursor)
+ rescue
+ @parent.cursor(@org_cursor)
+ end
@frame.withdraw
end
diff --git a/ext/tk/tkutil/tkutil.c b/ext/tk/tkutil/tkutil.c
index 6a670ce6fa..76cb5345be 100644
--- a/ext/tk/tkutil/tkutil.c
+++ b/ext/tk/tkutil/tkutil.c
@@ -1167,8 +1167,8 @@ subst_free(ptr)
}
}
-static struct cbsubst_info *
-allocate_cbsubst_info()
+static VALUE
+allocate_cbsubst_info(struct cbsubst_info **inf_ptr)
{
struct cbsubst_info *inf;
volatile VALUE proc, aliases;
@@ -1191,15 +1191,16 @@ allocate_cbsubst_info()
aliases = rb_hash_new();
inf->aliases = aliases;
- return inf;
+ if (inf_ptr != (struct cbsubst_info **)NULL) *inf_ptr = inf;
+
+ return Data_Wrap_Struct(cSUBST_INFO, subst_mark, subst_free, inf);
}
static void
cbsubst_init()
{
- rb_const_set(cCB_SUBST, ID_SUBST_INFO,
- Data_Wrap_Struct(cSUBST_INFO, subst_mark, subst_free,
- allocate_cbsubst_info()));
+ rb_const_set(cCB_SUBST, ID_SUBST_INFO,
+ allocate_cbsubst_info((struct cbsubst_info **)NULL));
}
static VALUE
@@ -1517,6 +1518,7 @@ cbsubst_table_setup(argc, argv, self)
VALUE *argv;
VALUE self;
{
+ volatile VALUE cbsubst_obj;
volatile VALUE key_inf;
volatile VALUE longkey_inf;
volatile VALUE proc_inf;
@@ -1538,7 +1540,7 @@ cbsubst_table_setup(argc, argv, self)
}
/* init */
- subst_inf = allocate_cbsubst_info();
+ cbsubst_obj = allocate_cbsubst_info(&subst_inf);
/*
* keys : array of [subst, type, ivar]
@@ -1625,9 +1627,7 @@ cbsubst_table_setup(argc, argv, self)
RARRAY_PTR(inf)[1]);
}
- rb_const_set(self, ID_SUBST_INFO,
- Data_Wrap_Struct(cSUBST_INFO, subst_mark,
- subst_free, subst_inf));
+ rb_const_set(self, ID_SUBST_INFO, cbsubst_obj);
return self;
}