From fe7bc917deb7c0512baddbe9b0f9e4d9c5b69a6c Mon Sep 17 00:00:00 2001 From: Arnaud Bienner Date: Sat, 14 Mar 2015 01:55:46 +0100 Subject: [PATCH] Check if Mac QSearchField has focus before handling the notification. Otherwise, playlist's search field will always handle those shortcuts, and they won't work anywhere else on the same window. Fixes #3320. --- 3rdparty/qocoa/qsearchfield_mac.mm | 58 +++++++++++++++++------------- 1 file changed, 33 insertions(+), 25 deletions(-) diff --git a/3rdparty/qocoa/qsearchfield_mac.mm b/3rdparty/qocoa/qsearchfield_mac.mm index 6c628a3d0..050c6a59a 100644 --- a/3rdparty/qocoa/qsearchfield_mac.mm +++ b/3rdparty/qocoa/qsearchfield_mac.mm @@ -107,32 +107,40 @@ public: @implementation QocoaSearchField -(BOOL)performKeyEquivalent:(NSEvent*)event { - if ([event type] == NSKeyDown && [event modifierFlags] & NSCommandKeyMask) - { - QString keyString = toQString([event characters]); - if (keyString == "a") // Cmd+a + + // First, check if we have the focus. + // If no, it probably means this event isn't for us. + NSResponder* firstResponder = [[NSApp keyWindow] firstResponder]; + if ([firstResponder isKindOfClass:[NSText class]] && + [(NSText*)firstResponder delegate] == self) { + + if ([event type] == NSKeyDown && [event modifierFlags] & NSCommandKeyMask) { - [self performSelector:@selector(selectText:)]; - return YES; - } - else if (keyString == "c") // Cmd+c - { - QClipboard* clipboard = QApplication::clipboard(); - clipboard->setText(toQString([self stringValue])); - return YES; - } - else if (keyString == "v") // Cmd+v - { - QClipboard* clipboard = QApplication::clipboard(); - [self setStringValue:fromQString(clipboard->text())]; - return YES; - } - else if (keyString == "x") // Cmd+x - { - QClipboard* clipboard = QApplication::clipboard(); - clipboard->setText(toQString([self stringValue])); - [self setStringValue:@""]; - return YES; + QString keyString = toQString([event characters]); + if (keyString == "a") // Cmd+a + { + [self performSelector:@selector(selectText:)]; + return YES; + } + else if (keyString == "c") // Cmd+c + { + QClipboard* clipboard = QApplication::clipboard(); + clipboard->setText(toQString([self stringValue])); + return YES; + } + else if (keyString == "v") // Cmd+v + { + QClipboard* clipboard = QApplication::clipboard(); + [self setStringValue:fromQString(clipboard->text())]; + return YES; + } + else if (keyString == "x") // Cmd+x + { + QClipboard* clipboard = QApplication::clipboard(); + clipboard->setText(toQString([self stringValue])); + [self setStringValue:@""]; + return YES; + } } }