iOS: close menu when keyboard hides

If the menu is closed from the keyboard gesture, and
the focus object doesn't change, the menu will still
be in a visible state, even if the keyboard is hidden.

This patch will ensure that this can not be the case
by listening for keyboardWillHideNotification. Since
we have no guarantee for when the destructor runs, we
apply a pessimistic approach and ensure we stop listen
when the menu gets closed.

Task-number: QTBUG-42523
Change-Id: If734ea32d1823b978c9c1c67ebcc5b6c3c5c338c
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
This commit is contained in:
Richard Moe Gustavsen 2014-11-12 12:28:16 +01:00 committed by Jani Heikkinen
parent bed25d8a3a
commit c506d938a8

View File

@ -153,13 +153,29 @@ static NSString *const kSelectorPrefix = @"_qtMenuItem_";
[self setDelegate:self]; [self setDelegate:self];
[self setDataSource:self]; [self setDataSource:self];
[self selectRow:m_selectedRow inComponent:0 animated:false]; [self selectRow:m_selectedRow inComponent:0 animated:false];
[self listenForKeyboardWillHideNotification:YES];
} }
return self; return self;
} }
-(void)listenForKeyboardWillHideNotification:(BOOL)listen
{
if (listen) {
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(cancelMenu)
name:@"UIKeyboardWillHideNotification" object:nil];
} else {
[[NSNotificationCenter defaultCenter]
removeObserver:self
name:@"UIKeyboardWillHideNotification" object:nil];
}
}
-(void)dealloc -(void)dealloc
{ {
[self listenForKeyboardWillHideNotification:NO];
self.toolbar = 0; self.toolbar = 0;
[super dealloc]; [super dealloc];
} }
@ -193,6 +209,7 @@ static NSString *const kSelectorPrefix = @"_qtMenuItem_";
- (void)closeMenu - (void)closeMenu
{ {
[self listenForKeyboardWillHideNotification:NO];
if (!m_visibleMenuItems.isEmpty()) if (!m_visibleMenuItems.isEmpty())
QIOSMenu::currentMenu()->handleItemSelected(m_visibleMenuItems.at(m_selectedRow)); QIOSMenu::currentMenu()->handleItemSelected(m_visibleMenuItems.at(m_selectedRow));
else else
@ -201,6 +218,7 @@ static NSString *const kSelectorPrefix = @"_qtMenuItem_";
- (void)cancelMenu - (void)cancelMenu
{ {
[self listenForKeyboardWillHideNotification:NO];
QIOSMenu::currentMenu()->dismiss(); QIOSMenu::currentMenu()->dismiss();
} }