[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

Re: [MD:4096] Tooltip are incompletely implemented.



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