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

[meadow-develop:1998/386]menubar and minibuffer.



市川@ESDです。

>>>>> In <wkwwge522b.fsf@xxxxxxxxxxxxxxxxxxxxxxxxx> 
>>>>>	"himi" = Miyashita Hisashi(宮下 尚:HIMI) <himi@xxxxxxxxxxxxx> wrote:

himi> 新年早々うるさいこと言うかも知れませんが、
himi> ちょっと大目に見て下さい。

  いいえ、確認ありがとうございます。

himi> ちょっとわからないところがたくさんありますので、
himi> すみませんが、確認してみて下さい。

  了解です。

himi> > +/* TEST T.Ichikawa */
himi> > +#ifdef MEADOW
himi> > +static int menubar_state = 0;
himi> > +#endif
himi> > +/* TEST T.Ichikawa */
himi> > +

himi> ここ、menubar_stateはFrame毎に持つべきデータですね。
himi> これではまずいです。
himi> f->output_data.w32の中に封じ込めて下さい。
himi> 私としては、frame_change_stateの上位ビットでも使うべきだと
himi> 思います。

  私もそう思ったのですが、細かなところまで見る時間的な余裕もなく
  *とりあえず動作するもの*を作ったに過ぎません。
  ですので、データ構造などは再度見直す必要性があるかもしれません。

himi> > -		rect.bottom = lppos->cy - hdiff;
himi> > +/* TEST - T.Ichikawa */
himi> > +		if((f->output_data.w32->frame_change_state < 2) &&

himi> この条件、不要ではありませんか?

  でしょうか...
  もう少し細かく動作を見る必要がありそうです。
  もうちょっと確認してみます。

himi> > +		   (menubar_state == 2) &&
himi> > +		   (lppos->flags == 0x37)){

himi> うるさいようですが、GNUのcoding styleにそろえて下さると
himi> 嬉しいです。(RMSが認めてくれましぇん。;_;)

  はい。了解です。
  確かに私の patch の部分だけ style が違いますね。
  気をつけようと思います。

himi> それと、lppos->flagsの使い方に問題があります。
himi> Win32APIはDocumentに書かれている以外のことをすると
himi> 著しく移植性が落ちます。

himi> それから、一般的に、定数値を参照するときには
himi> 定義済みの値SWP_???などを使って下さい。
himi> 直接、値を書き込むと非常にソースが読みにくくなります。

  そうですね。
  私もこの magic number を直接書くのには非常にためらいがあったんですが... 
  お正月の頭で考えたもので...
  また、

himi> それで、
himi> SWP_DRAWFRAME | SWP_NOACTIVATE  | SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE
himi> ですか。
himi> うーん、どういう状況を意図しているのか、さっぱり分かりません。

  といった状況がいまいち私には理解できなかったんですが menubar が2行になった
  瞬間の lppos->flags の値がこの値(0x37)だったんです。

;; いろいろと make してみて確認しました。

  そのため、このような条件を入れてみました...

himi> > +		  rect.bottom = lppos->cy + f->output_data.w32->line_height - 5;
himi> ここ、どうして5なんですか?

himi> > +		  menubar_state = 0;
himi> > +		} else if (lppos->flags == 0x04){
himi> > +		  rect.bottom = lppos->cy + f->output_data.w32->line_height - 13;

himi> 同じく、どうして13なんですか?
himi> あと、SWP_NOZORDERである時という理由も分かりません。

  ここいらは何回かの試行錯誤による値ですのでまったく根拠はないです。
  強いて言うと経験的な値です。
  ですので、もっとここでの議論できちんとした値にするべきだと考えています。

himi> > +		  SetWindowPos (hwnd, NULL, 0, 0,
himi> > +				rect.right, rect.bottom,
himi> > +				SWP_NOZORDER | SWP_NOMOVE);

himi> これは、不要ではありませんか?

himi> > +		  menubar_state = (menubar_state >= 2) ? 2 : menubar_state + 1;
himi> > +		  return 0;

himi> このreturn 0;もとってしまえば、

  とにかくこのパッチは本当に*とりあえず動くもの*なので、細かな事については
  ここで皆さんに議論してもらえると非常にうれしかったんです。
  でも、himi さんから直々に助言をもらえると自分自身の勉強にもなります(^^)

  私がこの patch を作った過程として...

    ・以前 himi さんの流した patch では menubar が2行になった時、minibbuffer 
      は1行になったが、frame の大きさが徐々に小さくなっていく
    ・menubar が 2 行になる場合、lppos->flags の値は 0x37 がくるようである。
    ・その時(lppos->flags == 0x37) の rect.bottom の値を frame の大きさが変化
      しないように計算する。

  といった過程で行いました。

  しかし、それでは*状況の説明ができない*といった致命的な欠陥もありそうなの
  でもう少し見直す必要がありますね(;_;)

-- 
Tatsuya Ichikawa : Epson Software Development Lab, Inc. Nagano , Japan.
# PGP Public Key : See below url. ;-)
  http://www.icat.or.jp/cgi-bin/pgpsearchkey.pl?op=get&search=0x0A2D6599
       E-mail    : <ichikawa@xxxxxxxxxxxxxx><t-ichi@xxxxxxxxxxxxxxxxx>