Systemowe menu to to popup wyświetlany w lewym górnym rogu okna, po wciśnięciu skrótu Alt+Space, po kliknięciu PPM w obszarze paska tytułowego okna lub kliknięciu LPM na ikonkę obok tytułu okna. Wygląda tak, jakby się ktoś zastanawiał:

Chciałbym mieć kontrolę nad tym menu, a konkretniej, móc wykryć moment gdy to menu zostaje wywołane, kiedy zostaje zamknięte (bez wyboru żadnej z jego opcji) oraz, gdy użytkownik wybierze którąś opcję odpalającą modalną pętlę komunikatów, mieć możliwość wykrycia momentu zakończenia tej modalnej pętli.
Obecnie mogę wykryć moment pojawienia się tego menu, dlatego że w każdym przypadku jest ono wywoływane przeze mnie ręcznie. Co prawda używam do tego funkcji SDL_ShowWindowSystemMenu, ale mam też dostęp do pętli komunikatów okna. Zawsze wywołuję je samodzielnie, dlatego że okno ma customową dekorację. Tak więc ten przypadek nie stanowi problemu.
Problemem jest jednak wykrycie momentu zamknięcia tego popupu — SDL ani nie generuje zdarzeń dotyczących jego pokazania, ani zamknięcia. Ponadto, jeśli użytkownik wybierze którąś z opcji odpalającej pętlę modalną (np. Size do zmiany rozmiaru okna za pomocą myszy lub klawiatury), nie mam pojęcia jak wykryć moment zakończenia pętli modalnej oraz wznowienia wykonywania wątku głównego okna (czyli wątku gry).
Ma ktoś pomysł jak to rozwiązać?
W teorii są do dyspozycji komunikaty WM_ENTERMENULOOP i WM_EXITMENULOOP, ale mam z nimi problem. Ten pierwszy komunikat nie jest w ogóle dostarczany do calbacku hooku (mała strata), a ten drugi co prawda jest dostarczany do callbacku, ale zawsze gdy systemowe menu jest zamykane, czyli bez względu na to czy użytkownik zamknął popup czy wybrał którąś opcję i uruchomił modalną pętlę. Tak więc drugi komunikat nie jest do końca tym czego oczekuję.