请原谅一些代码。我担心这是必要的。我在SDKMM窗口中嵌入了一个SDL窗口,如下所示:
HelloWorld::HelloWorld()
: _button("Test")
{
set_border_width(10);
add(_vbox);
_button.signal_clicked().connect(sigc::mem_fun(*this, &HelloWorld::on_button_clicked));
_vbox.add(_button);
_vbox.add(_eventbox);
_eventbox.add(_socket);
_vbox.show_all();
}
void HelloWorld::on_button_clicked()
{
int tx = 0, ty = 0, tw = 0, th = 0;
_eventbox.get_window()->get_geometry(tx, ty, tw, th);
SDL_Init(SDL_INIT_VIDEO);
SDL_QuitSubSystem(SDL_INIT_EVENTS); // We need no events.
// Plug SDL window inside GTKMM's socket.
if ((_sdl_window = SDL_CreateWindowFrom((const void*)_socket.get_id())) == NULL) {
std::cerr << "Window creation error.\n";
exit(EXIT_FAILURE);
}
_renderer = SDL_CreateRenderer(_sdl_window, -1, SDL_RENDERER_SOFTWARE | SDL_RENDERER_TARGETTEXTURE);
_texture = SDL_CreateTexture(_renderer, SDL_PIXELFORMAT_RGB888, SDL_TEXTUREACCESS_TARGET, tw, th);
// Draw red rectangle on texture.
SDL_SetRenderTarget(_renderer, _texture);
SDL_SetRenderDrawColor(_renderer, 255, 0, 0, 0);
SDL_RenderClear(_renderer);
// Blit it.
SDL_SetRenderTarget(_renderer, NULL);
SDL_RenderCopy(_renderer, _texture, NULL, NULL);
SDL_UpdateWindowSurface(_sdl_window);
}
运行它会显示GTKMM窗口。按下按钮时,SDL窗口将显示在其下方,红色将填充纹理。
现在:如果鼠标没有在红色区域内移动,那么一切似乎都很好。但是如果我将鼠标移动到红色区域内,即在SDL窗口中移动,那么几秒钟后SDL窗口就会消失。
我看不出这种情况发生的明显原因。有人知道我的窗口嵌入可能是错误的,或者可能导致这种情况的原因吗?