【问题标题】:SDL2: how to raise window (on top of calling terminal)SDL2:如何提升窗口(在调用终端之上)
【发布时间】:2015-05-01 04:54:41
【问题描述】:

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

我不需要将焦点放在那个窗口上,所以只需在没有焦点的情况下抬起就可以了。 (SDL2 Raising a window without giving it focus)。

我已经尝试了所有 SDL_WindowFlags,但似乎没有任何帮助。 SDL_RaiseWindow() 也没有帮助。

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

我编译下面的程序并从 KDE 中的 bash 终端启动它(防止焦点窃取级别:低,焦点策略:单击焦点)。

示例代码:

#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/window-manager 的问题吗?

【问题讨论】:

  • 你是如何执行程序的? window managerfocus policy是否设置为click to focus
  • 嗨 Elvisjames,我编译了上面的程序并从 KDE 中的 bash 终端启动它。焦点窃取预防级别:低,焦点策略:点击焦点。

标签: c++ centos6 sdl-2


【解决方案1】:

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

在 Windows 中的 Cygwin64 下该窗口也会升起。

【讨论】:

    猜你喜欢
    • 2015-04-08
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多