Embedding SDL into GTK+

2019-02-15 00:29发布

I have an application that uses GTK+ to display some nice GUI, but I am using SDL to display a small RGB frame buffer inside GTK+

I have used the following code to get SDL into GTK+:

char SDL_windowhack[32];
sprintf(SDL_windowhack, "SDL_WINDOWID=%ld", GDK_WINDOW_XWINDOW(deviceWindow->window));
putenv(SDL_windowhack);

Unfortunately, I also use SDL for keyboard and mouse event. The main thread that uses SDL to update the image spawns the following thread:

void *SDLEvent(void *arg)
{
    SDL_Event event;

    while (1) {
        fprintf(stderr, "Test\n");
        SDL_WaitEvent(&event);
        switch (event.type) {
            /* ... */
        }
    }
}

I see that the print statement is executed twice, then none. As soon as I terminate the thread that SDL uses to update the screen (display), the loop in SDLEvent starts executing very fast again.

This code used to work fine before I integrated SDL into GTK+ so I am thinking GTK+ is maybe blocking SDL in some ways?

Does anyone have any suggestions please?

Thank you very much!

标签: c sdl gtk
1条回答
2楼-- · 2019-02-15 00:52

Although I have not used SDL, but as you are looking for events it appears that you are running two event loops. Gtk runs its own event loop which handles events like the ones from mouse & keyboard. I think you need to find a way to integrate the both. Some googling resulted in the following link where in the section "Double event loop issue" your problem has been addressed (I think). Try adding SDLEvent function as idler function using g_idle_add as suggested in the link and see if it works.
Hope this helps!

查看更多
登录 后发表回答