From: Hidetoshi NAGAI Date: 2007-10-20T01:20:27+09:00 Subject: [ruby-list:44130] Re: ruby-tk with tcltk8.5b1 永井@知能.九工大です. From: Ryutaro Amano Subject: [ruby-list:44129] Re: ruby-tk with tcltk8.5b1 Date: Fri, 19 Oct 2007 22:42:13 +0900 Message-ID: > > #if TCL_MAJOR_VERSION >= 8 && TCL_MINOR_VERSION < 5 > > ------------------------------------------------------------ > > としてコンパイルしてください. > > 天野です。有り難うございます。うまく動くようになりました。 問題の関数を使わない方法を考えてみました. もし良かったら,先に変更した部分を元に戻して, 以下のパッチをあてて試してみていただけませんでしょうか? # ついでに... # Tcl/Tk 8.5 の新機能への対応が不十分なところを見つけたら, # 報告していただけると助かります. # Tcl/Tk 8.5 の売りの一つの Tile 拡張については # require 'tkextlib/tile' でかなりの部分は使えると思います. # ただ,tkextlib/tile/style.rb には修正が必要で # ('style' で呼んでいる部分を '::ttk::style' で呼ぶようにする), # そのままではうまく動かないはずです. # 標準ウィジェット群が '::tk::button' 等でも定義されたことも踏まえて, # TkButton 等が標準ウィジェットと Tile 拡張とのどちらを指すかを # 切り替えできるようにしようと構想中です. Index: tcltklib.c =================================================================== --- tcltklib.c (revision 13577) +++ tcltklib.c (working copy) @@ -7843,6 +7843,7 @@ #if TCL_MAJOR_VERSION >= 8 struct tcltkip *ptr = get_ip(interp); struct dummy_TkMenuRef *menuRefPtr; + XEvent event; StringValue(menu_path); @@ -7873,9 +7874,20 @@ } #endif +#if 0 TkEventuallyRecomputeMenu(menuRefPtr->menuPtr); TkEventuallyRedrawMenu(menuRefPtr->menuPtr, (struct dummy_TkMenuEntry *)NULL); +#else + memset((void *) &event, 0, sizeof(event)); + event.xany.type = ConfigureNotify; + event.xany.serial = NextRequest(Tk_Display((menuRefPtr->menuPtr)->tkwin)); + event.xany.send_event = 0; /* FALSE */ + event.xany.window = Tk_WindowId((menuRefPtr->menuPtr)->tkwin); + event.xany.display = Tk_Display((menuRefPtr->menuPtr)->tkwin); + event.xconfigure.window = event.xany.window; + Tk_HandleEvent(&event); +#endif #else /* TCL_MAJOR_VERSION <= 7 */ rb_notimplement(); -- 永井 秀利 (九工大 知能情報) nagai@ai.kyutech.ac.jp