diff options
| author | nagai <nagai@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-06-16 18:54:48 +0000 |
|---|---|---|
| committer | nagai <nagai@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-06-16 18:54:48 +0000 |
| commit | 9b236f987d4df3a508c2650cc9b1a992923511e8 (patch) | |
| tree | 1e7f75c13a5f7c0bb296f463154a92900f33afb5 | |
| parent | 5bcfcce7b4c4a87e1af65d2f218e9d8252e16a48 (diff) | |
* ext/tk/sample/demos-jp/toolber.rb, ext/tk/sample/demos-en/toolber.rb:
fail to back a tear-off marker when reattach the toolbar.
* ext/tk/sample/irbtkw.rbw: freezes when receives SIGINT.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@17370 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
| -rw-r--r-- | ext/tk/sample/demos-en/msgbox2.rb | 4 | ||||
| -rw-r--r-- | ext/tk/sample/demos-en/toolbar.rb | 2 | ||||
| -rw-r--r-- | ext/tk/sample/demos-jp/msgbox2.rb | 4 | ||||
| -rw-r--r-- | ext/tk/sample/demos-jp/toolbar.rb | 2 | ||||
| -rw-r--r-- | ext/tk/sample/irbtkw.rbw | 16 | ||||
| -rw-r--r-- | ext/tk/tcltklib.c | 57 |
6 files changed, 68 insertions, 17 deletions
diff --git a/ext/tk/sample/demos-en/msgbox2.rb b/ext/tk/sample/demos-en/msgbox2.rb index 6fe6c778b3..136a723c73 100644 --- a/ext/tk/sample/demos-en/msgbox2.rb +++ b/ext/tk/sample/demos-en/msgbox2.rb @@ -42,7 +42,7 @@ TkFrame.new(base_frame) {|frame| TkButton.new(frame) { text 'Message Box' - command proc{showMessageBox $msgbox2_demo} + command proc{showMessageBox2 $msgbox2_demo} }.pack('side'=>'left', 'expand'=>'yes') }.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') @@ -79,7 +79,7 @@ $msgboxType = TkVariable.new('ok') 'anchor'=>'w', 'fill'=>'x') } -def showMessageBox(w) +def showMessageBox2(w) button = Tk.messageBox('icon'=>$msgboxIcon.value, 'type'=>$msgboxType.value, 'title'=>'Message', 'parent'=>w, 'message'=>"\"#{$msgboxType.value}\" Type MessageBox", diff --git a/ext/tk/sample/demos-en/toolbar.rb b/ext/tk/sample/demos-en/toolbar.rb index 5cf863717b..633c52c15d 100644 --- a/ext/tk/sample/demos-en/toolbar.rb +++ b/ext/tk/sample/demos-en/toolbar.rb @@ -70,7 +70,7 @@ if Tk.windowingsystem != 'aqua' w.grid_remove self.wm_manage # self.wm_title('Toolbar') # if you don't want to use its widget name as a window title. - self.wm_protocol('WM_DELETE_WINDOW'){ self.untearoff(self) } + self.wm_protocol('WM_DELETE_WINDOW'){ self.untearoff(w) } end def tbar_base.untearoff(w) self.wm_forget diff --git a/ext/tk/sample/demos-jp/msgbox2.rb b/ext/tk/sample/demos-jp/msgbox2.rb index d61f25129a..e2944c59ed 100644 --- a/ext/tk/sample/demos-jp/msgbox2.rb +++ b/ext/tk/sample/demos-jp/msgbox2.rb @@ -41,7 +41,7 @@ TkFrame.new(base_frame) {|frame| TkButton.new(frame) { text 'メッセージボックス' - command proc{showMessageBox $msgbox2_demo} + command proc{showMessageBox2 $msgbox2_demo} }.pack('side'=>'left', 'expand'=>'yes') }.pack('side'=>'bottom', 'fill'=>'x', 'pady'=>'2m') @@ -78,7 +78,7 @@ $msgboxType = TkVariable.new('ok') 'anchor'=>'w', 'fill'=>'x') } -def showMessageBox(w) +def showMessageBox2(w) button = Tk.messageBox('icon'=>$msgboxIcon.value, 'type'=>$msgboxType.value, 'title'=>'Message', 'parent'=>w, 'message'=>"\"#{$msgboxType.value}\"タイプのメッセージボックス", diff --git a/ext/tk/sample/demos-jp/toolbar.rb b/ext/tk/sample/demos-jp/toolbar.rb index 9cb3834c34..1bb265d1f8 100644 --- a/ext/tk/sample/demos-jp/toolbar.rb +++ b/ext/tk/sample/demos-jp/toolbar.rb @@ -73,7 +73,7 @@ if Tk.windowingsystem != 'aqua' w.grid_remove self.wm_manage # self.wm_title('Toolbar') # もしウィジェット名をウィンドウタイトルにしたくないなら,ここで設定してください - self.wm_protocol('WM_DELETE_WINDOW'){ self.untearoff(self) } + self.wm_protocol('WM_DELETE_WINDOW'){ self.untearoff(w) } end def tbar_base.untearoff(w) self.wm_forget diff --git a/ext/tk/sample/irbtkw.rbw b/ext/tk/sample/irbtkw.rbw index 3fb6dde626..04de3a2022 100644 --- a/ext/tk/sample/irbtkw.rbw +++ b/ext/tk/sample/irbtkw.rbw @@ -48,10 +48,20 @@ console.yscrollbar(TkScrollbar.new(top, :width=>10).pack(:before=>console, :side=>:right, :expand=>false, :fill=>:y)) + +# save original I/O +out = $stdout +err = $stderr + irb_thread = nil ev_loop = Thread.new{ - Tk.mainloop - irb_thread.kill if irb_thread + begin + Tk.mainloop + ensure + $stdout = out + $stderr = err + irb_thread.kill if irb_thread + end } # window position control @@ -142,5 +152,5 @@ console.bind('Control-c'){ irb_thread.join # exit -ev_thread.kill +ev_loop.kill Tk.exit diff --git a/ext/tk/tcltklib.c b/ext/tk/tcltklib.c index 66345bfcb0..ea892f62b3 100644 --- a/ext/tk/tcltklib.c +++ b/ext/tk/tcltklib.c @@ -6562,11 +6562,26 @@ ip_eval_real(self, cmd_str, cmd_len) return rbtk_pending_exception; } - if (ptr->return_value == TCL_ERROR) { + /* if (ptr->return_value == TCL_ERROR) { */ + if (ptr->return_value != TCL_OK) { if (event_loop_abort_on_exc > 0 && !Tcl_InterpDeleted(ptr->ip)) { volatile VALUE exc; - exc = create_ip_exc(self, rb_eRuntimeError, - "%s", Tcl_GetStringResult(ptr->ip)); + + switch (ptr->return_value) { + case TCL_RETURN: + exc = create_ip_exc(self, eTkCallbackReturn, + "ip_eval_real receives TCL_RETURN"); + case TCL_BREAK: + exc = create_ip_exc(self, eTkCallbackBreak, + "ip_eval_real receives TCL_BREAK"); + case TCL_CONTINUE: + exc = create_ip_exc(self, eTkCallbackContinue, + "ip_eval_real receives TCL_CONTINUE"); + default: + exc = create_ip_exc(self, rb_eRuntimeError, "%s", + Tcl_GetStringResult(ptr->ip)); + } + rbtk_release_ip(ptr); rb_thread_critical = thr_crit_bup; return exc; @@ -6608,10 +6623,23 @@ ip_eval_real(self, cmd_str, cmd_len) return rbtk_pending_exception; } - if (ptr->return_value == TCL_ERROR) { + /* if (ptr->return_value == TCL_ERROR) { */ + if (ptr->return_value != TCL_OK) { volatile VALUE exc; - exc = create_ip_exc(self, rb_eRuntimeError, "%s", ptr->ip->result); + switch (ptr->return_value) { + case TCL_RETURN: + exc = create_ip_exc(self, eTkCallbackReturn, + "ip_eval_real receives TCL_RETURN"); + case TCL_BREAK: + exc = create_ip_exc(self, eTkCallbackBreak, + "ip_eval_real receives TCL_BREAK"); + case TCL_CONTINUE: + exc = create_ip_exc(self, eTkCallbackContinue, + "ip_eval_real receives TCL_CONTINUE"); + default: + exc = create_ip_exc(self, rb_eRuntimeError, "%s", ptr->ip->result); + } rbtk_release_ip(ptr); return exc; @@ -7855,11 +7883,24 @@ ip_invoke_core(interp, argc, argv) rb_thread_critical = thr_crit_bup; - if (ptr->return_value == TCL_ERROR) { + /* if (ptr->return_value == TCL_ERROR) { */ + if (ptr->return_value != TCL_OK) { if (event_loop_abort_on_exc > 0 && !Tcl_InterpDeleted(ptr->ip)) { + switch (ptr->return_value) { + case TCL_RETURN: + return create_ip_exc(interp, eTkCallbackReturn, + "ip_invoke_core receives TCL_RETURN"); + case TCL_BREAK: + return create_ip_exc(interp, eTkCallbackBreak, + "ip_invoke_core receives TCL_BREAK"); + case TCL_CONTINUE: + return create_ip_exc(interp, eTkCallbackContinue, + "ip_invoke_core receives TCL_CONTINUE"); + default: + return create_ip_exc(interp, rb_eRuntimeError, "%s", + Tcl_GetStringResult(ptr->ip)); + } - return create_ip_exc(interp, rb_eRuntimeError, - "%s", Tcl_GetStringResult(ptr->ip)); } else { if (event_loop_abort_on_exc < 0) { rb_warning("%s (ignore)", Tcl_GetStringResult(ptr->ip)); |
