SDL2:如何提升窗口(在呼叫终端之上)

时间:2015-02-28 14:13:35

标签: c++ centos6 sdl-2

窗口总是在后台弹出,但我希望它位于前台,至少在终端前面,执行打开窗口的代码。

我不需要专注于那个窗口,所以只是在没有焦点的情况下进行提升就行了。 (SDL2 Raising a window without giving it focus)。

我已经尝试了所有SDL_WindowFlags,但似乎都没有帮助。 另外,SDL_RaiseWindow()没有帮助。

该窗口用于以图形方式显示终端程序的结果。 我在CentOs 6.4上从源2.0.3编译了SDL2

我编译以下程序并从KDE的bash终端启动它(Focus stealing prevention level:low,Focus Policy:click to focus)。

示例代码:

#include <SDL.h>

int main(int, char**){
    SDL_Init(SDL_INIT_VIDEO);
    SDL_Window *win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480,
        SDL_WINDOW_SHOWN | SDL_WINDOW_INPUT_GRABBED |
        SDL_WINDOW_INPUT_FOCUS | SDL_WINDOW_MOUSE_FOCUS |
        SDL_WINDOW_FOREIGN | SDL_WINDOW_OPENGL);
    SDL_RaiseWindow(win);

    SDL_Delay(4000);
    SDL_DestroyWindow(win);
    SDL_Quit();

    return 0;
}

编辑:我在Windows下的Cygwin64中尝试了相同的示例。在这种情况下,窗口会弹出终端前面的窗口。那么这是CentOS /窗口管理器问题吗?

1 个答案:

答案 0 :(得分:0)

KDE / CentOs中的行为取决于窗口管理器的焦点窃取防护级别设置。它设置为。 当我将其设置为 none 时,窗口将会升起。 我的新问题是:即使设置 low ,我能以某种方式强制窗口被提升吗? (https://stackoverflow.com/questions/28785519/force-window-to-be-raised-with-focus-stealing-prevention-level-low

窗口也会在Windows下的Cygwin64下提升。