2016-12-05 16 views
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;を設定した場合、ウィンドウはもはやフルスクリーンではありませんが、キーボードイベントが正常に受信されています。

どのようにしてウィンドウがフルスクリーンで、適切なキーボードイベントを同時に受け取れるようにするには?

+0

「XSetInputFocus」を試しましたか? –

+0

すごい、これです! :=]回答として自由に投稿してください。私はものを修正するこれを追加しました:XSetInputFocus(disp、win、RevertToNone、CurrentTime); –

答えて

1

;-)

は、なぜあなたはXSetInputFocus(disp, win, RevertToNone, CurrentTime);を試してみませんか?

関連する問題