Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 切换工作区(Xorg)时引发SDL2窗口_Linux_Sdl_Sdl 2_Xorg_Xfce - Fatal编程技术网

Linux 切换工作区(Xorg)时引发SDL2窗口

Linux 切换工作区(Xorg)时引发SDL2窗口,linux,sdl,sdl-2,xorg,xfce,Linux,Sdl,Sdl 2,Xorg,Xfce,我用SDL2创建了一个简单的OpenGL窗口。我在Linux上运行这个,我的WM是xfwm4 我的问题是,若我在窗口未聚焦时更改工作区(使用ctrl+alt+箭头),它会自动提升。这会使窗口出现在新的工作区上,或者(取决于WM设置)立即将工作区切换回原来的位置。有没有办法防止这种情况 下面是一个演示此行为的测试用例: #include <SDL2/SDL.h> #include <SDL2/SDL_opengl.h> int main(int argc, char *a

我用SDL2创建了一个简单的OpenGL窗口。我在Linux上运行这个,我的WM是xfwm4

我的问题是,若我在窗口未聚焦时更改工作区(使用ctrl+alt+箭头),它会自动提升。这会使窗口出现在新的工作区上,或者(取决于WM设置)立即将工作区切换回原来的位置。有没有办法防止这种情况

下面是一个演示此行为的测试用例:

#include <SDL2/SDL.h>
#include <SDL2/SDL_opengl.h>

int main(int argc, char *argv[])
{
    SDL_Init(SDL_INIT_VIDEO);
    SDL_Window *window = SDL_CreateWindow("test",  SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 200, 200, SDL_WINDOW_OPENGL);
    SDL_GLContext glcontext = SDL_GL_CreateContext(window);
    glEnable(GL_SCISSOR_TEST);

    while (1)
    {
        SDL_Event e;

        SDL_PollEvent(&e);
        if (e.type == SDL_QUIT || e.type == SDL_KEYDOWN && e.key.keysym.sym == SDLK_ESCAPE)
                break;

        // a small opengl effect, please don't mind
        int bs = (rand() % 50) + 50; int bo = (200-bs)/2;
        float t = SDL_GetTicks()*0.001f; glScissor(0, cos(t*18.92623f)*bo+bo,200,bs);
        float g = sin(t)*0.5f+0.5f; glClearColor(2.0f*g,1.5f*g,0.8f*g,0.f); glClear(GL_COLOR_BUFFER_BIT);
        SDL_GL_SwapWindow(window);
    }

    SDL_GL_DeleteContext(glcontext);  

    SDL_DestroyWindow(window);
    SDL_Quit();

    return 0;
}
#包括
#包括
int main(int argc,char*argv[])
{
SDL_Init(SDL_Init_视频);
SDL_Window*Window=SDL_CreateWindow(“测试”,SDL_WINDOWPOS_未定义,SDL_WINDOWPOS_未定义,200,200,SDL_Window_OPENGL);
SDL_GLContext GLContext=SDL_GL_CreateContext(窗口);
glEnable(GL_剪刀试验);
而(1)
{
SDL_事件e;
SDL_PollEvent&e;
if(e.type==SDL|u QUIT | e.type==SDL_KEYDOWN&&e.key.keysym.sym==SDLK_ESCAPE)
打破
//一个小的opengl效果,请不要介意
int-bs=(rand()%50)+50;int-bo=(200-bs)/2;
浮点数t=SDL_GetTicks()*0.001f;glScissor(0,cos(t*18.92623f)*bo+bo,200,bs);
浮点g=sin(t)*0.5f+0.5f;glClearColor(2.0f*g,1.5f*g,0.8f*g,0.f);glClear(GLU颜色缓冲位);
SDL_GL_SwapWindow(窗口);
}
SDL_GL_DeleteContext(glcontext);
SDL_窗口(窗口);
SDL_退出();
返回0;
}