2017-04-02 3 views
1

J'écris une application SDL2 simple avec 2 fenêtres.SDL2 - La fenêtre ne peut pas être rouverte

La première fenêtre (window variable) est affichée lorsque l'application démarre, la seconde (window2 variable) est masquée.

Comportement attendu:

je clique sur la première fenêtre, la seconde fenêtre apparaît, puis je fermer la seconde fenêtre.

Et je peux fermer et rouvrir la fenêtre autant que je veux.

comportement observé:

Une fois que je ferme la deuxième fenêtre, si je dans la première cliquer à nouveau sur la fenêtre, la deuxième fenêtre n'apparaît pas comme prévu.

Comme indiqué dans my comment: la fenêtre n'apparaît pas dans mon gestionnaire de fenêtres (c'est-à-dire Wayland).


Le code:

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

Répondre

2

Ceci est un SDL bug qui peut ou non ont été fixés par this patch.

+0

pouvez-vous s'il vous plaît fournir plus de détails –

+0

Je n'utilise plus ce projet, donc je ne peux pas tester si le correctif répare mon bug. Je suppose que c'est le cas, compte tenu de la description du bug. Merci de votre aide. –

0

Vous devriez appeler SDL_RaiseWindow placer la deuxième fenêtre au-dessus de l'autre. De lazyfoo's légendaires tutoriels SDL:

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

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

Merci, mais la fenêtre n'est même pas créée, elle ne peut donc pas fonctionner ... –

+0

Vous voulez dire l'exemple de code? C'est censé illustrer la réponse. Vous devez ajouter l'appel de fonction SDL_RaiseWindow après le SDL_ShowWindow. –

+0

Non, je voulais dire que la fenêtre n'apparaît pas dans mon gestionnaire de fenêtres (c'est-à-dire Wayland) par * "la fenêtre n'est même pas créée" *. Il n'y a aucune chance qu'un 'SDL_RaiseWindow' puisse lever une fenêtre inexistante. Je l'ai essayé de toute façon sans succès ... –