[ruby-list:41665] Re: MacOS X Aqua 対応のための tcltklib の extconf.rb

From: 天野 竜太郎 <wn9r-amn@...>
Date: 2005-12-05 12:56:27 UTC
List: ruby-list #41665
ruby-list:41651の
 >メッセージボックスでは WM_DELETE_WINDOW プロトコルを無視 
しています.
 >そのため,閉じるボタンが無視されているのは正常です
この「メッセージボックス」を「Message Box Demonstration」 
ウィンドウと誤解していました。

 >とはいえ,今回の「固まる」という状況は,閉じるボタンによって
 >ウィンドウを消した場合でなくても (閉じるボタンには触れず,
 >きちんとダイアログ上のボタンをクリックした結果として
 >ウィンドウが消えた場合でも) 発生するのですよね?
固まるという状況は普通にラジオボタンをクリックした結果として発生 
します。
これまで報告したとおりです。
また既述の通り、AquaTclTkのwidgetは固まりません。

以下に詳細を。

私が「生きている」と言ったのは、
widgetの「ダイアログウィンドウ」の「1、メッセージボックス」をク 
リックして出てくる「Message Box Demonstration」ウィンドウ 
の「閉じるボタン」が生きているという意味でした。
「Message Box Demonstration」ウィンドウの「メッセージボッ 
クス」ボタンを押して出てくる「これはOKという種類のメッセー 
ジボックスで、"info"という種類のアイコンが表示されていま 
す。」という種類のダイアログにはそもそも最初から「閉じる」、「最 
小化」、「最大化」のボタンはついていません。そしてそのダイアログ 
上の「OK」ボタンを押して出てくる「あなたは"ok"を押し 
ましたね」というダイアログにも、「閉じる」、「最小化」、「最大 
化」のボタンは付いていません。
この二つのダイアログは、どちらも「Message Box  
Demonstration」ウィンドウのタイトル部分からにょきっという感じで 
出てくるSheet風のダイアログで、OSXになってからできた 
タイプのもので、それ以前のOS9のMacソフトには存在して 
いませんでした。AquaTclTkなので、OSXのAPIを利 
用しているのだと思います。
親ウィンドウの「Message Box Demonstration」ウィンドウと 
くっついているので、独立して動かすことはできません。
たぶん、WinやUnixのソフトでこの手のダイアログはない 
ので、ちょっと説明しにくいのですが。
ただ、この部分は、AquaTclTk側にも問題があるのかもしれませ 
ん。
/Library/Frameworks/Tk.framework/Versions/8.4/Resources/Scripts/demos/ 
widget
において、Common DialogのMessage Boxesを実行して 
Message Box Demonstrationの「Message Box」ボタンを押して、
「Thisi si a "ok" type message box with the "info" icon」 
という確認Sheetが出てきた状態で、Message Box  
Demonstrationウィンドウのタイトルバーの部分をマウスでドラッグし 
て動かすことができません。
これはこの場面で、OKボタンを押して出てくる次のSheet(You  
have selected "ok")でも同じです。
通常のMac OSXソフトではこの手のSheetダイアログが出て 
きた場面では親ウィンドウのタイトルバーをマウスでドラッグして動か 
すことができます。
アップル純正の「テキストエディット」もそうです。
それなのに、AquaTclTkのwidgetでドラッグできないとい 
うのは、問題かもしれません。

というわけで「閉じるボタン」に関しては私の勘違いでしたが、
ruby-list:41658のpatchを当てても、固まることに変わりなしで 
した。

あと、最初のラベル、ボタン、チェックボタン、ラジオボタンの 
13番
13,画像を見るための簡単なユーザーインターフェイス(機能に対応し 
たバージョンのTkが必要)
ですが、「ディレクトリ選択」ボタンをクリックするとエラーになりま 
す。
------------------------------------------------------------------------ 
------
RuntimeError: bad directory "v00003"
---< backtrace of Ruby side >-----
/usr/local/lib/ruby/1.8/tk.rb:2252:in `__invoke'
/usr/local/lib/ruby/1.8/tk.rb:2252:in `_invoke'
/usr/local/lib/ruby/1.8/tk.rb:1676:in `_ip_invoke_core'
/usr/local/lib/ruby/1.8/tk.rb:1710:in `_tk_call_core'
/usr/local/lib/ruby/1.8/tk.rb:1734:in `tk_call'
/usr/local/lib/ruby/1.8/tk.rb:1640:in `chooseDirectory'
mysrc/ruby-1.8.4/ext/tk/sample/demos-jp/widget:593:in  
`selectAndLoadDir3'
mysrc/ruby-1.8.4/ext/tk/sample/demos-jp/widget:664:in `_null_binding'
/usr/local/lib/ruby/1.8/tk.rb:1187:in `cb_eval'
/usr/local/lib/ruby/1.8/tk.rb:1138:in `call'
/usr/local/lib/ruby/1.8/tk.rb:1304:in `callback'
/usr/local/lib/ruby/1.8/tk.rb:1303:in `callback'
/usr/local/lib/ruby/1.8/tk.rb:1537:in `mainloop'
mysrc/ruby-1.8.4/ext/tk/sample/demos-jp/widget:888
---< backtrace of Tk side >-------
     invoked from within
"rb_out c00023"
     invoked from within
".w00024.w00030.w00035 invoke"
     ("uplevel" body line 1)
     invoked from within
"uplevel #0 [list $w invoke]"
     (procedure "tk::ButtonUp" line 23)
     invoked from within
"tk::ButtonUp .w00024.w00030.w00035"
     (command bound to event)
------------------------------------------------------------------------ 
----

AquaTclTkの同じサンプルは正常に動作します。
その手前の12番は問題ないです。

Ryutaro Amano
wn9r-amn@asahi-net.or.jp



In This Thread