mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	swkbd: Fix a bug where clicking Cancel hangs the game (#5294)
* swkbd: Fix a bug where clicking Cancel hangs the game The text is validated in `Finalize`. If the validation fails, an error is returned and the applet is not actually finalized. This can result in hangs. This is usually not a problem as the frontend is expected to validate the text passed to `Finalize`. However, when the user clicked on `Cancel`, the text is ignored and the frontend won't do any validation. Therefore, we should skip the validation here as well. Also fixed a potential data race. All these functions should now be called on the same thread * Address review comments Renamed the fields Remove close button
This commit is contained in:
		
							parent
							
								
									41bff0e3b7
								
							
						
					
					
						commit
						60669a7dd8
					
				
					 4 changed files with 21 additions and 13 deletions
				
			
		|  | @ -115,6 +115,7 @@ void QtKeyboard::Execute(const Frontend::KeyboardConfig& config) { | |||
|         ok_id = static_cast<u8>(this->config.button_config); | ||||
|     } | ||||
|     QMetaObject::invokeMethod(this, "OpenInputDialog", Qt::BlockingQueuedConnection); | ||||
|     Finalize(result_text, result_button); | ||||
| } | ||||
| 
 | ||||
| void QtKeyboard::ShowError(const std::string& error) { | ||||
|  | @ -125,13 +126,15 @@ void QtKeyboard::ShowError(const std::string& error) { | |||
| 
 | ||||
| void QtKeyboard::OpenInputDialog() { | ||||
|     QtKeyboardDialog dialog(&parent, this); | ||||
|     dialog.setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | | ||||
|                           Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint); | ||||
|     dialog.setWindowFlags(dialog.windowFlags() & | ||||
|                           ~(Qt::WindowCloseButtonHint | Qt::WindowContextHelpButtonHint)); | ||||
|     dialog.setWindowModality(Qt::WindowModal); | ||||
|     dialog.exec(); | ||||
|     LOG_INFO(Frontend, "SWKBD input dialog finished, text={}, button={}", dialog.text.toStdString(), | ||||
|              dialog.button); | ||||
|     Finalize(dialog.text.toStdString(), dialog.button); | ||||
| 
 | ||||
|     result_text = dialog.text.toStdString(); | ||||
|     result_button = dialog.button; | ||||
|     LOG_INFO(Frontend, "SWKBD input dialog finished, text={}, button={}", result_text, | ||||
|              result_button); | ||||
| } | ||||
| 
 | ||||
| void QtKeyboard::ShowErrorDialog(QString message) { | ||||
|  |  | |||
|  | @ -62,6 +62,9 @@ private: | |||
| 
 | ||||
|     QWidget& parent; | ||||
| 
 | ||||
|     std::string result_text; | ||||
|     int result_button; | ||||
| 
 | ||||
|     friend class QtKeyboardDialog; | ||||
|     friend class QtKeyboardValidator; | ||||
| }; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue