2017-04-02 118 views
1

我正在用2個窗口編寫一個簡單的SDL2應用程序。SDL2 - 窗口無法重新打開

當應用程序啓動時顯示第一個窗口(window變量),第二個窗口(window2變量)被隱藏。

預期的行爲:

我點擊第一窗口,第二窗口彈出,然後我關閉了第二個窗口。

我可以關閉並重新打開窗口,只要我想要。

觀察到的行爲:

一旦我關閉了第二個窗口,如果我在第一個窗口reclick,第二個窗口不會如預期出現。

my comment所述:該窗口未出現在我的窗口管理器(即Wayland)中。


代碼:

#include <SDL2/SDL.h> 

int main() 
{ 
    SDL_Window* window, *window2 = NULL; 

    if (SDL_Init(SDL_INIT_VIDEO) < 0) { 
     return 1; 
    } else { 
     window = SDL_CreateWindow("ONE", SDL_WINDOWPOS_UNDEFINED, 
        SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN); 
     window2 = SDL_CreateWindow("TWO", SDL_WINDOWPOS_UNDEFINED, 
         SDL_WINDOWPOS_UNDEFINED, 320, 240, SDL_WINDOW_HIDDEN); 

     if (window == NULL || window2 == NULL) { 
      SDL_DestroyWindow(window); 
      SDL_DestroyWindow(window2); 
      return 1; 
     } 

     bool running = true; 

     while(running) { 
      SDL_Event event; 
      while (SDL_PollEvent(&event)) { 
       if (event.type == SDL_WINDOWEVENT) { 
        if (event.window.event == SDL_WINDOWEVENT_CLOSE) { 
         if (SDL_GetWindowID(window) == event.window.windowID) { 
          running = false; 
         } else { 
          SDL_HideWindow(window2); 
         } 
        } 
       } else if (event.type == SDL_MOUSEBUTTONDOWN) { 
        SDL_ShowWindow(window2); 
       } 
      } 
     } 
    } 

    SDL_DestroyWindow(window); 
    SDL_DestroyWindow(window2); 

    SDL_Quit(); 

    return 0; 
} 

回答

2

這是一個SDL bug可能或可能不會已得到修復this patch

+0

你能否提供更多的細節 –

+0

我不再使用這個項目,所以我無法測試該補丁是否修復了我的錯誤。考慮到錯誤的描述,我想它是的。感謝您的幫助。 –

0

你應該叫SDL_RaiseWindow放置在第二窗口上另一個的上面。 從lazyfoo's傳奇SDL教程:

void LWindow::focus() 
{ 
//Restore window if needed 
if(!mShown) 
    SDL_ShowWindow(mWindow); 

//Move window forward 
SDL_RaiseWindow(mWindow); 
} 
+0

謝謝,但窗口甚至沒有創建,所以它不能工作... –

+0

你的意思是代碼示例?它應該說明答案。您必須在SDL_ShowWindow之後添加SDL_RaiseWindow函數調用。 –

+0

不,我的意思是窗口沒有出現在我的窗口管理器(即Wayland)中* *「窗口甚至沒有創建」*。 「SDL_RaiseWindow」不可能引發一個不存在的窗口。我試了一下沒有成功... –