From d782aad77de15ca3beb8999ed0f829d0db76aa46 Mon Sep 17 00:00:00 2001 From: nagai Date: Thu, 9 Sep 2004 05:03:21 +0000 Subject: * ext/tcltklib/tcltklib.c (ip_init): change flag value for setting 'argv' and 'argv0' variable * ext/tk/lib/remote-tk.rb: follow changes of multi-tk.rb git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6876 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 +++++++ ext/tcltklib/tcltklib.c | 9 +++++++-- ext/tk/lib/remote-tk.rb | 29 +++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 725d4ed463..f7d19f7f39 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Thu Sep 9 13:58:56 2004 Hidetoshi NAGAI + + * ext/tcltklib/tcltklib.c (ip_init): change flag value for setting + 'argv' and 'argv0' variable + + * ext/tk/lib/remote-tk.rb: follow changes of multi-tk.rb + Thu Sep 9 11:46:18 2004 Dave Thomas * lib/rdoc/parsers/parse_c.rb (RDoc::C_Parser::do_classes): Allow diff --git a/ext/tcltklib/tcltklib.c b/ext/tcltklib/tcltklib.c index 657c5765b3..0a2fcbd349 100644 --- a/ext/tcltklib/tcltklib.c +++ b/ext/tcltklib/tcltklib.c @@ -2884,12 +2884,14 @@ ip_init(argc, argv, self) /* without Tk */ with_tk = 0; } else { - Tcl_SetVar(ptr->ip, "argv", StringValuePtr(opts), 0); + /* Tcl_SetVar(ptr->ip, "argv", StringValuePtr(opts), 0); */ + Tcl_SetVar(ptr->ip, "argv", StringValuePtr(opts), TCL_GLOBAL_ONLY); } case 1: /* argv0 */ if (!NIL_P(argv0)) { - Tcl_SetVar(ptr->ip, "argv0", StringValuePtr(argv0), 0); + /* Tcl_SetVar(ptr->ip, "argv0", StringValuePtr(argv0), 0); */ + Tcl_SetVar(ptr->ip, "argv0", StringValuePtr(argv0), TCL_GLOBAL_ONLY); } case 0: /* no args */ @@ -2917,6 +2919,7 @@ ip_init(argc, argv, self) /* get main window */ mainWin = Tk_MainWindow(ptr->ip); + Tk_Preserve((ClientData)mainWin); /* add ruby command to the interpreter */ #if TCL_MAJOR_VERSION >= 8 @@ -3015,6 +3018,8 @@ ip_init(argc, argv, self) (ClientData)mainWin, (Tcl_CmdDeleteProc *)NULL); #endif + Tk_Release((ClientData)mainWin); + return self; } diff --git a/ext/tk/lib/remote-tk.rb b/ext/tk/lib/remote-tk.rb index bdee25e060..85888b158a 100644 --- a/ext/tk/lib/remote-tk.rb +++ b/ext/tk/lib/remote-tk.rb @@ -14,6 +14,17 @@ class MultiTkIp @@TK_TABLE_LIST = [].taint unless defined?(@@TK_TABLE_LIST) def self._IP_TABLE; @@IP_TABLE; end def self._TK_TABLE_LIST; @@TK_TABLE_LIST; end + + @flag = true + def self._DEFAULT_MASTER + # work only once + if @flag + @flag = nil + @@DEFAULT_MASTER + else + nil + end + end end class RemoteTkIp @@IP_TABLE = MultiTkIp._IP_TABLE unless defined?(@@IP_TABLE) @@ -26,6 +37,15 @@ end require 'multi-tk' +class RemoteTkIp + if defined?(@@DEFAULT_MASTER) + MultiTkIp._DEFAULT_MASTER + else + @@DEFAULT_MASTER = MultiTkIp._DEFAULT_MASTER + end +end + + ############################### class << RemoteTkIp @@ -73,14 +93,19 @@ class RemoteTkIp @threadgroup = ThreadGroup.new + @safe_level = [$SAFE] + @cmd_queue = Queue.new +=begin @cmd_receiver, @receiver_watchdog = _create_receiver_and_watchdog() @threadgroup.add @cmd_receiver @threadgroup.add @receiver_watchdog @threadgroup.enclose +=end + @@DEFAULT_MASTER.assign_receiver_and_watchdog(self) @@IP_TABLE[@threadgroup] = self @@TK_TABLE_LIST.size.times{ @@ -94,6 +119,10 @@ class RemoteTkIp end @ip_id = _create_connection + class << self + undef :instance_eval + end + self.freeze # defend against modification end -- cgit v1.2.3