1
Xorg(X11、Linux)用のシンプルなアプリケーションをコーディングしていますが、これにはフルスクリーンウィンドウが必要です。Xorgのフルスクリーンウィンドウでキーボードイベントが発生しない
正常に動作しているようですが、ウィンドウマネージャはウィンドウを無視して、フルスクリーンとして正しく配置されます。しかし、問題があります、イベントループは決してKeyPressイベントを取得しません。マウスイベントは正常に受信されましたが、キーは押されません。
// assuming some variables are already defined as global here, like display etc.
void main()
{
unsigned long valuemask = CWOverrideRedirect;
XSetWindowAttributes attributes;
Window window;
window = XCreateSimpleWindow(display, XDefaultRootWindow(display), 0, 0,
(DisplayWidth(display, screen)), (DisplayHeight(display, screen)), 0, 0, 0);
attributes.override_redirect = True;
XChangeWindowAttributes(display, window, valuemask, &attributes);
for (;;)
{
XNextEvent(display, &ev);
switch (ev.type)
{
case KeyPress:
... this gets never called if override_redirect = True
}
// ... the rest of code
}
}
私はattributes.override_redirect = False;
を設定した場合、ウィンドウはもはやフルスクリーンではありませんが、キーボードイベントが正常に受信されています。
どのようにしてウィンドウがフルスクリーンで、適切なキーボードイベントを同時に受け取れるようにするには?
「XSetInputFocus」を試しましたか? –
すごい、これです! :=]回答として自由に投稿してください。私はものを修正するこれを追加しました:XSetInputFocus(disp、win、RevertToNone、CurrentTime); –