| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 | 
							- /*
 
-  * GameChatKeyboardHandler.m, part of VCMI engine
 
-  *
 
-  * Authors: listed in file AUTHORS in main folder
 
-  *
 
-  * License: GNU General Public License v2.0 or later
 
-  * Full text of license available in license.txt file, in main folder
 
-  *
 
-  */
 
- #import "GameChatKeyboardHandler.h"
 
- static int watchReturnKey(void * userdata, SDL_Event * event);
 
- @interface GameChatKeyboardHandler ()
 
- @property (nonatomic) BOOL wasChatMessageSent;
 
- @end
 
- @implementation GameChatKeyboardHandler
 
- + (void)sendKeyEventWithKeyCode:(SDL_KeyCode)keyCode
 
- {
 
- 	SDL_Event keyEvent;
 
- 	keyEvent.key = (SDL_KeyboardEvent){
 
- 		.type = SDL_KEYDOWN,
 
- 		.state = SDL_PRESSED,
 
- 		.keysym.sym = keyCode,
 
- 	};
 
- 	SDL_PushEvent(&keyEvent);
 
- }
 
- - (instancetype)init {
 
- 	self = [super init];
 
- 	__auto_type notificationCenter = NSNotificationCenter.defaultCenter;
 
- 	[notificationCenter addObserver:self selector:@selector(textDidBeginEditing:) name:UITextFieldTextDidBeginEditingNotification object:nil];
 
- 	[notificationCenter addObserver:self selector:@selector(textDidEndEditing:) name:UITextFieldTextDidEndEditingNotification object:nil];
 
- 	return self;
 
- }
 
- #pragma mark - Notifications
 
- - (void)textDidBeginEditing:(NSNotification *)n {
 
- 	self.wasChatMessageSent = NO;
 
- 	// watch for pressing Return to ignore sending Escape key after keyboard is closed
 
- 	SDL_AddEventWatch(watchReturnKey, (__bridge void *)self);
 
- }
 
- - (void)textDidEndEditing:(NSNotification *)n {
 
- 	// discard chat message
 
- 	if(!self.wasChatMessageSent)
 
- 		[[self class] sendKeyEventWithKeyCode:SDLK_ESCAPE];
 
- }
 
- @end
 
- static int watchReturnKey(void * userdata, SDL_Event * event)
 
- {
 
- 	if(event->type == SDL_KEYDOWN && event->key.keysym.scancode == SDL_SCANCODE_RETURN)
 
- 	{
 
- 		__auto_type self = (__bridge GameChatKeyboardHandler *)userdata;
 
- 		self.wasChatMessageSent = YES;
 
- 		SDL_DelEventWatch(watchReturnKey, userdata);
 
- 	}
 
- 	return 1;
 
- }
 
 
  |