diff -urN skkinput-2.03/OverWinP.h skkinput-2.03.k/OverWinP.h --- skkinput-2.03/OverWinP.h Mon Mar 23 14:43:17 1998 +++ skkinput-2.03.k/OverWinP.h Mon Sep 10 22:13:53 2001 @@ -99,6 +99,7 @@ int modeshell_width, modeshell_height ; int modeshell_border_width ; int fixed_modeshell ; + Boolean modeshell_outside; unsigned long prevModeStatus ; /* 現在の漢字入力モードを表示するウィンドウ。*/ diff -urN skkinput-2.03/resrcs.h skkinput-2.03.k/resrcs.h --- skkinput-2.03/resrcs.h Mon Mar 23 14:41:25 1998 +++ skkinput-2.03.k/resrcs.h Mon Sep 10 22:25:29 2001 @@ -111,4 +111,6 @@ #define XtNsouthCursor "southCursor" #define XtCSouthCursor "SouthCursor" +#define XtNmodeshell_outside "modeshell_outside" +#define XtCModeShell_OutSide "ModeShell_OutSide" #endif --- skkinput-2.03/OverWin.c.out Tue Mar 16 16:59:01 1999 +++ skkinput-2.03/OverWin.c Tue Sep 11 08:08:35 2001 @@ -129,6 +129,10 @@ sizeof (Boolean), XtOffsetOf (OverthespotWinRec, overthespotWin.buffer.toggleControlMode), XtRImmediate, (XtPointer)FALSE }, + { XtNmodeshell_outside, XtCModeShell_OutSide, XtRBoolean, + sizeof (Boolean), + XtOffsetOf (OverthespotWinRec, overthespotWin.modeshell_outside), + XtRImmediate, (XtPointer)TRUE}, } ; #undef offset @@ -476,6 +480,31 @@ return ; } +static Window OTSW_CreateModeShellWin + (Widget gw, Window focus_window, int *probe, int border_width) +{ + OverthespotWinWidget w = (OverthespotWinWidget)gw ; + Window win ; + XSetWindowAttributes attr; + + if (border_width <= 0){ + win = XCreateSimpleWindow + (XtDisplay (gw), focus_window, 0, 0, 1, 1, 0, + w->overthespotWin.obackground, + w->overthespotWin.obackground) ; + } else { + win = XCreateSimpleWindow + (XtDisplay (gw), focus_window, 0, 0, 1, 1, border_width, + w->overthespotWin.oforeground, + w->overthespotWin.obackground) ; + } + attr.override_redirect = True; + XChangeWindowAttributes (XtDisplay (gw), win, CWOverrideRedirect, &attr); + /* 作りはしたものの必要になるまでは、map しない。*/ + *probe = False ; + return win ; +} + static Window OTSW_CreateSubCanvas (Widget gw, Window focus_window, int *probe, int border_width) { @@ -535,8 +564,14 @@ w->overthespotWin.fixed_modeshell = False ; } /* モードシェルを作成する。*/ - w->overthespotWin.modeshell_win = OTSW_CreateSubCanvas + if (w->overthespotWin.modeshell_outside) { + w->overthespotWin.modeshell_win = OTSW_CreateModeShellWin + (gw, RootWindowOfScreen (XtScreen(gw)), &w->overthespotWin.modeshell_probe, border_width) ; + } + else { + w->overthespotWin.modeshell_win = OTSW_CreateSubCanvas (gw, parentwin, &w->overthespotWin.modeshell_probe, border_width) ; + } /* 大きさ情報の初期化。resize は一回は通って欲しいものですから。*/ w->overthespotWin.modeshell_width = 1 ; w->overthespotWin.modeshell_height = 1 ; @@ -1062,6 +1097,7 @@ if (!neww->overthespotWin.modeshell_probe){ XMapWindow (XtDisplay (neww), neww->overthespotWin.modeshell_win) ; neww->overthespotWin.modeshell_probe = True ; + OTSW_resetupModeWindow (new); } /* mini-buffer を表示する。もし必要ならば…であるが。*/ OTSW_ConfigureMinibuffer (new) ; @@ -1783,6 +1819,9 @@ if (w->overthespotWin.fixed_modeshell){ x = w->overthespotWin.status_area.x ; y = w->overthespotWin.status_area.y ; + } else if (w->overthespotWin.modeshell_outside) { + x = DisplayWidth (XtDisplay (gw), DefaultScreen (XtDisplay (gw))) - modeshell_width - 10; + y = DisplayHeight (XtDisplay (gw), DefaultScreen (XtDisplay (gw))) - modeshell_height - 10; } else { min_x = w->overthespotWin.client_area.x ; min_y = w->overthespotWin.client_area.y ; --- skkinput-2.03/Skkinput.ad.o Tue Sep 11 08:10:54 2001 +++ skkinput-2.03/Skkinput.ad Tue Sep 11 08:10:02 2001 @@ -34,6 +34,8 @@ Skkinput*overthespot.borderWidth: 1 ! 従来のその場変換型の入力方式とする。 Skkinput*overthespot.overTheSpotLikeInput: TRUE +! ステータスウィンドウを画面右下に表示する +Skkinput*overthespot.modeshell_outside: TRUE ! その場変換の場合のリソース指定。 Skkinput*offthespot.changeMinibufferFont: TRUE