/** * Verarbeitung des Drückens der Rechten Maustaste. * * @param[in] mc Mauskoordinaten Struktur * * @author OLiver */ void WindowManager::Msg_RightDown(const MouseCoords& mc) { // ist unser Desktop gültig? if(!desktop) return; // Sind Fenster vorhanden && ist das aktive Fenster ok if(!windows.empty()) { // ist das Fenster modal? wenn ja, dann raus if (windows.back()->GetModal()) return; // prüfen ob Fenster geschlossen werden muss IngameWindow* foundWindow = FindWindowUnderMouse(mc); if(foundWindow){ // ja, dann schliessen if (foundWindow->GetCloseOnRightClick()) foundWindow->Close(); else { windows.back()->SetActive(false); // Fenster aus der Liste holen und vorne wieder anhängen windows.remove(foundWindow); windows.push_back(foundWindow); desktop->SetActive(false); foundWindow->SetActive(true); foundWindow->Msg_RightDown(mc); } return; } } // ist der Desktop aktiv? if(desktop->GetActive()) { // ja, dann Msg_RightDown aufrufen desktop->Msg_RightDown(mc); // und die Fenster darunter auch desktop->RelayMouseMessage(&Window::Msg_RightDown, mc); } else if(!windows.empty()) { // dann Nachricht an Fenster weiterleiten windows.back()->RelayMouseMessage(&Window::Msg_RightDown, mc); } // letztes Fenster deaktivieren, da ja nun der Desktop aktiv werden soll if(!windows.empty()) windows.back()->SetActive(false); // Desktop aktivieren desktop->SetActive(true); // ja, dann Msg_RightDown aufrufen desktop->Msg_RightDown(mc); // und die Fenster darunter auch desktop->RelayMouseMessage(&Window::Msg_RightDown, mc); }
/** * Verarbeitung des Drückens der Rechten Maustaste. * * @param[in] mc Mauskoordinaten Struktur */ void WindowManager::Msg_RightDown(const MouseCoords& mc) { // ist unser Desktop gültig? if(!curDesktop) return; // Sind Fenster vorhanden && ist das aktive Fenster ok if(!windows.empty()) { IngameWindow* foundWindow = FindWindowUnderMouse(mc); if(windows.back()->IsModal()) { // We have a modal window -> Activate it curDesktop->SetActive(false); windows.back()->SetActive(true); // Ignore actions in all other windows if(foundWindow != windows.back()) return; } if(foundWindow){ // Close it if requested if (foundWindow->GetCloseOnRightClick()) foundWindow->Close(); else { windows.back()->SetActive(false); // Fenster aus der Liste holen und vorne wieder anhängen windows.remove(foundWindow); windows.push_back(foundWindow); curDesktop->SetActive(false); foundWindow->SetActive(true); foundWindow->Msg_RightDown(mc); } return; } } // ist der Desktop aktiv? if(curDesktop->IsActive()) { // ja, dann Msg_RightDown aufrufen curDesktop->Msg_RightDown(mc); // und die Fenster darunter auch curDesktop->RelayMouseMessage(&Window::Msg_RightDown, mc); } else if(!windows.empty()) { // dann Nachricht an Fenster weiterleiten windows.back()->RelayMouseMessage(&Window::Msg_RightDown, mc); } // letztes Fenster deaktivieren, da ja nun der Desktop aktiv werden soll if(!windows.empty()) windows.back()->SetActive(false); // Desktop aktivieren curDesktop->SetActive(true); // ja, dann Msg_RightDown aufrufen curDesktop->Msg_RightDown(mc); // und die Fenster darunter auch curDesktop->RelayMouseMessage(&Window::Msg_RightDown, mc); }