[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]
[meadow-develop:1998/382]menubar and minibuffer.
- X-ml-count: 382
- Subject: [meadow-develop:1998/382]menubar and minibuffer.
- From: Miyashita Hisashi(宮下 尚:HIMI) <himi@xxxxxxxxxxxxx>
- Date: 06 Jan 1998 01:16:12 +0900
- X-mailer: Gnus v5.4.64 + SEMI patch (r2.1)/Emacs 20.2
新年早々うるさいこと言うかも知れませんが、
ちょっと大目に見て下さい。
Tatsuya Ichikawa <t-ichi@xxxxxxxxxxxxxxxxx> writes:
> ところで、以前から Meadow で懸案になっていた Menubar が2行になったとき
> Minibuffer も2行になってしまうという問題を Quick Hack ですがパッチを
> 作ってみました。
> Magic Number が使ってあっったりしてきたないパッチですが himi さん、試して
> みていただけますか??
ちょっとわからないところがたくさんありますので、
すみませんが、確認してみて下さい。
> [2 patch1 <application/octet-stream (7bit)>]
> --- mw32fns.c.orig Thu Dec 18 07:58:15 1997
> +++ mw32fns.c Sat Jan 03 17:57:11 1998
> @@ -47,7 +47,13 @@
> extern HINSTANCE hprevinst;
> extern LPSTR lpCmdLine;
> extern int nCmdShow;
> -
> +
> +/* TEST T.Ichikawa */
> +#ifdef MEADOW
> +static int menubar_state = 0;
> +#endif
> +/* TEST T.Ichikawa */
> +
ここ、menubar_stateはFrame毎に持つべきデータですね。
これではまずいです。
f->output_data.w32の中に封じ込めて下さい。
私としては、frame_change_stateの上位ビットでも使うべきだと
思います。
> #define EMACS_RESOURCE_CLASS "Emacs"
>
> /* Title name and application name for X stuff. */
> @@ -2214,13 +2220,18 @@
> case WM_WINDOWPOSCHANGED:
>
> if (!f->async_iconified && f->async_visible &&
> - f->output_data.w32->frame_change_state != 2)
> + f->output_data.w32->frame_change_state < 2)
> + /* To adjust window correctly,
> + we must check size of the window twice
> + (strictly speaking number of dimention),
> + thus, width and height. */
> {
> LPWINDOWPOS lppos = (LPWINDOWPOS) lParam;
>
> - f->output_data.w32->frame_change_state = 2;
> + f->output_data.w32->frame_change_state++;
>
> - if (!(lppos->flags & SWP_NOSIZE))
> + if ((!(lppos->flags & SWP_NOSIZE)) ||
> + (lppos->flags & SWP_DRAWFRAME))
> {
> RECT rect;
> int wdiff;
> @@ -2228,7 +2239,6 @@
>
> GetClientRect (hwnd, &rect);
>
> -
> #ifdef MW32_FONT
> wdiff = ((rect.right - rect.left) -
> f->output_data.w32->vertical_scroll_bar_extra) %
> @@ -2244,7 +2254,24 @@
> if (wdiff || hdiff)
> {
> rect.right = lppos->cx - wdiff;
> - rect.bottom = lppos->cy - hdiff;
> +/* TEST - T.Ichikawa */
> + if((f->output_data.w32->frame_change_state < 2) &&
この条件、不要ではありませんか?
> + (menubar_state == 2) &&
> + (lppos->flags == 0x37)){
うるさいようですが、GNUのcoding styleにそろえて下さると
嬉しいです。(RMSが認めてくれましぇん。;_;)
それと、lppos->flagsの使い方に問題があります。
Win32APIはDocumentに書かれている以外のことをすると
著しく移植性が落ちます。
(書かれていることをやってもだめなことが多いのですが:-P)
将来lppos->flagsの新しいbitが使われたとき動作しなくなります。
それから、一般的に、定数値を参照するときには
定義済みの値SWP_???などを使って下さい。
直接、値を書き込むと非常にソースが読みにくくなります。
# 例外はROP(Raster OPeration)
それで、
SWP_DRAWFRAME | SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE
ですか。
うーん、どういう状況を意図しているのか、さっぱり分かりません。
> + rect.bottom = lppos->cy + f->output_data.w32->line_height - 5;
ここ、どうして5なんですか?
> + menubar_state = 0;
> + } else if (lppos->flags == 0x04){
> + rect.bottom = lppos->cy + f->output_data.w32->line_height - 13;
同じく、どうして13なんですか?
あと、SWP_NOZORDERである時という理由も分かりません。
> + SetWindowPos (hwnd, NULL, 0, 0,
> + rect.right, rect.bottom,
> + SWP_NOZORDER | SWP_NOMOVE);
これは、不要ではありませんか?
> + menubar_state = (menubar_state >= 2) ? 2 : menubar_state + 1;
> + return 0;
このreturn 0;もとってしまえば、
> + } else {
> + rect.bottom = lppos->cy - hdiff;
> + menubar_state = (menubar_state >= 2) ? 2 : menubar_state + 1;
> + }
> +/* TEST T.Ichikawa */
> SetWindowPos (hwnd, NULL, 0, 0,
> rect.right, rect.bottom,
> SWP_NOZORDER | SWP_NOMOVE);
> @@ -2252,9 +2279,7 @@
> }
> }
> }
> -
> - if (f)
> - f->output_data.w32->frame_change_state = 0;
> + f->output_data.w32->frame_change_state = 0;
>
> goto dflt;
> #endif
From himi