[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]
Re: [MD:4096] Tooltip are incompletely implemented.
- X-ml-count: 4118
- Subject: Re: [MD:4096] Tooltip are incompletely implemented.
- From: MIYASHITA Hisashi (宮下 尚:HIMI) <himi@xxxxxxxxxxx>
- Date: Fri, 10 Jan 2003 01:44:47 +0900
- User-agent: Wanderlust/2.5.7 (Smooth) SEMI/1.14.3 (Ushinoya) FLIM/1.14.2 (Yagi-Nishiguchi) APEL/10.3 Emacs/21.1 (i386-msvc-nt5.0.2195) MULE/5.0 (SAKAKI) Meadow/1.99 Alpha3 (HATAITA)
At Fri, 10 Jan 2003 01:09:26 +0900,
MIYOSHI Masanori wrote:
> himi> windowは、message thread で作成してください。main threadで
> himi> 作成してはいけません。
> himi> ちなみに、これを放っておくと何が起こってもおかしくありません。
>
> ここら辺は良く理解していないので、次の developer's meeting ででも
> 解説してもらえるとありがたいです。
>
> ちなみに、NTEmacs の my_create_tip_window()@w32fns.c では
> > /* Create a tooltip window. Unlike my_create_window, we do not do this
> > indirectly via the Window thread, as we do not need to process Window
> > messages for the tooltip. Creating tooltips indirectly also creates
> > deadlocks when tooltips are created for menu items. */
> と、tooltip window を message thread で作成する必要はないし、逆に
> デッドロックの原因となると記述してあります。
>
> Meadow には関係ないですか?
NTEmacsと、Meadowのmessage処理の構成はもはや完全に別物です。
従って、このあたりのNTEmacsに関する議論は、ほとんどMeadowには
通用しません。
NTEmacsでは、message thread(the Window thread)が別threadなのは
ただ、C-gのためだけといっても良く、もう一度main threadのmessage
queueにつめなおされて処理されます。だから、main threadで作っても
そんなに問題は無いのだと思います。
(もはや感想を述べる気力も起きない。x_x;)
しかし、Meadowでは、ほぼ完全にmessage threadとmain threadが
分離されています。このままでは、tooltip windowのmessageが
適切に処理されないでしょう。
dead lockに関してですが、menu barのWindowsの実装は、独自のmessage loopに
委譲することで行われているので、何か問題が起きるという可能性は完全には
否定できません。実際menu barの実装ではだいぶdead lock回避のためにbug潰しを
必要とした記憶がありますので。(mw32_menu_bar_store_activate_eventあたりが
その苦闘の結果;_;)
もし、menu barのためにdead lockがおきるなら、mw32menu.cなどを変更する
ことによって対処しましょう。多分そんな必要はないと思うけど。
あ、そうだ。この辺の実装は私も時間があれば手伝います。
> himi> SetWindowLong()でwindow初期化処理を行っていますが、他のAPIで
> himi> 処理できる内容に関しては、使用を避けたほうが懸命です。
>
> 現状では、ここで設定した値を利用していなかったので、この設定を削
> 除しました。後ほど、良く考えて対応します。
了解。
> himi> fontが、なんか、"default"を固定で選んでいますね。見なかった
> himi> ことにとりあえずするのもなんなので、tooltip用のFRを作るのが
> himi> 良さそうです。
> ^^;;
>
> tooltip-frame-parameters でフォントを指定できるようにしました。
> 次のように指定します。
>
> (w32-add-font
> "tipfont"
> '((strict-spec
> ((:char-spec ascii :height any)
> (w32-logfont "MS UI Gothic" 0 12 400 0 nil nil nil 128 1 3 49))
> ((:char-spec japanese-jisx0208 :height any)
> (w32-logfont "MS UI Gothic" 0 12 400 0 nil nil nil 128 1 3 49)))))
>
> (setq tooltip-frame-parameters
> (append
> '((internal-border-width . 1)
> (font . "tipfont"))
> tooltip-frame-parameters))
すばらしい。
> himi> あと、Emacs Lispのpremitive functionの名前以外は、関数名には
> himi> 一貫性のためにmw32_のprefixをつけてください。
>
> 了解です。
> 命名規則は次のような理解で正しいですか?
>
> (1) mw32*.[ch] 内に閉じた extern 変数、関数の prefix は `mw32_'
> とする。static の場合は、`x_' の prefix があれば、`mw32_' に
> 変更する。
>
> (2) mw32*.[ch] 外から参照される extern 変数、関数については、
> (a) Meadow で新規にmw32*.[ch] 外に 追加したものは、prefix を
> `mw32_' とする。
> (b) 上記以外は、prefix を、`x_' や `w32_' のまま変更しない。
> (premitive function はここに含まれる)
はい。この方針でお願いします。
from himi