窗口总是在后台弹出,但我希望它位于前台,至少在终端前面,执行打开窗口的代码。
我不需要专注于那个窗口,所以只是在没有焦点的情况下进行提升就行了。 (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 /窗口管理器问题吗?
答案 0 :(得分:0)
KDE / CentOs中的行为取决于窗口管理器的焦点窃取防护级别设置。它设置为低。 当我将其设置为 none 时,窗口将会升起。 我的新问题是:即使设置 low ,我能以某种方式强制窗口被提升吗? (https://stackoverflow.com/questions/28785519/force-window-to-be-raised-with-focus-stealing-prevention-level-low)
窗口也会在Windows下的Cygwin64下提升。