From cf2cebd0fcb0079fc0a544192cede1b66d536f4a Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Sun, 30 Apr 2023 13:27:40 +0200 Subject: [PATCH] Ignore "StatusIndicator" window on MacOS It interferes with the focus window checks --- src/osx/advanced-scene-switcher-osx.mm | 50 +++++++++++++++----------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/src/osx/advanced-scene-switcher-osx.mm b/src/osx/advanced-scene-switcher-osx.mm index db4b4d89..81ba6e2f 100644 --- a/src/osx/advanced-scene-switcher-osx.mm +++ b/src/osx/advanced-scene-switcher-osx.mm @@ -78,28 +78,38 @@ void GetCurrentWindowTitle(std::string &title) for (NSDictionary *app in apps) { int layer = [[app objectForKey:@"kCGWindowLayer"] intValue]; - // True if window is frontmost - if (layer == 0) { - std::string name( - [[app objectForKey:@"kCGWindowName"] - UTF8String], - [[app objectForKey:@"kCGWindowName"] - lengthOfBytesUsingEncoding: - NSUTF8StringEncoding]); - std::string owner( - [[app objectForKey:@"kCGWindowOwnerName"] - UTF8String], - [[app objectForKey:@"kCGWindowOwnerName"] - lengthOfBytesUsingEncoding: - NSUTF8StringEncoding]); - if (!name.empty()) { - title = name; - } else if (!owner.empty()) { - title = owner; - } - break; + if (layer != 0) { + continue; } + + std::string name([[app objectForKey:@"kCGWindowName"] + UTF8String], + [[app objectForKey:@"kCGWindowName"] + lengthOfBytesUsingEncoding: + NSUTF8StringEncoding]); + std::string owner( + [[app objectForKey:@"kCGWindowOwnerName"] + UTF8String], + [[app objectForKey:@"kCGWindowOwnerName"] + lengthOfBytesUsingEncoding: + NSUTF8StringEncoding]); + + if (!name.empty()) { + title = name; + } else if (!owner.empty()) { + title = owner; + } + + // Ignore the "StatusIndicator" application window + // + // It is used to display the microphone status and if active is + // always the top most window + if (title == "StatusIndicator") { + continue; + } + + break; } apps = nil; CFRelease(cfApps);