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;
}