ensure language toggle only happens outside of a render event

This commit is contained in:
Mark Vejvoda 2011-10-25 22:40:28 +00:00
parent 9848a6c529
commit 0b6dbdf411
3 changed files with 28 additions and 3 deletions

View File

@ -657,7 +657,10 @@ MainWindow::MainWindow(Program *program) : WindowGl() {
this->program= program;
this->popupMenu.setEnabled(false);
this->popupMenu.setVisible(false);
this->triggerLanguageToggle = false;
this->triggerLanguage = "";
}
MainWindow::~MainWindow(){
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
delete program;
@ -686,7 +689,9 @@ void MainWindow::eventMouseDown(int x, int y, MouseButton mouseButton){
// Exit game
if(result.first != cancelLanguageSelection) {
toggleLanguage(result.second);
//toggleLanguage(result.second);
this->triggerLanguageToggle = true;
this->triggerLanguage = result.second;
}
return;
@ -883,6 +888,8 @@ void MainWindow::showLanguages() {
void MainWindow::toggleLanguage(string language) {
popupMenu.setEnabled(false);
popupMenu.setVisible(false);
this->triggerLanguageToggle = false;
this->triggerLanguage = "";
Lang &lang= Lang::getInstance();
string currentLanguage = lang.getLanguage();
@ -983,7 +990,9 @@ void MainWindow::eventKeyDown(SDL_KeyboardEvent key) {
else if(keystate.mod & (KMOD_LCTRL | KMOD_RCTRL) &&
isKeyPressed(configKeys.getSDLKey("SwitchLanguage"),key) == true) {
if(keystate.mod & (KMOD_LSHIFT | KMOD_RSHIFT)) {
toggleLanguage("");
//toggleLanguage("");
this->triggerLanguageToggle = true;
this->triggerLanguage = "";
}
else {
showLanguages();

View File

@ -34,9 +34,10 @@ private:
Program* program;
PopupMenu popupMenu;
int cancelLanguageSelection;
bool triggerLanguageToggle;
string triggerLanguage;
void showLanguages();
void toggleLanguage(string language);
public:
MainWindow(Program *program);
@ -57,6 +58,10 @@ public:
virtual void eventClose();
virtual void render();
void toggleLanguage(string language);
bool getTriggerLanguageToggle() const { return triggerLanguageToggle; }
string getTriggerLanguage() const { return triggerLanguage; }
};
}}//end namespace

View File

@ -310,6 +310,17 @@ void Program::loop() {
void Program::loopWorker() {
if(SystemFlags::getSystemSettingType(SystemFlags::debugPerformance).enabled) SystemFlags::OutputDebug(SystemFlags::debugPerformance,"In [%s::%s Line: %d] ================================= MAIN LOOP START ================================= \n",__FILE__,__FUNCTION__,__LINE__);
Renderer &renderer= Renderer::getInstance();
if(renderer.isMasterserverMode() == false && window) {
MainWindow *mainWindow = dynamic_cast<MainWindow *>(window);
if(mainWindow) {
//mainWindow->render();
if(mainWindow->getTriggerLanguageToggle()) {
mainWindow->toggleLanguage(mainWindow->getTriggerLanguage());
}
}
}
Chrono chronoLoop;
if(SystemFlags::getSystemSettingType(SystemFlags::debugPerformance).enabled) chronoLoop.start();