如何跟踪Nswindow的OnActivespace Property

问题描述 投票:0回答:1
First:addobserver

- (instancetype)initWithWidgetSpaceTracker:(WidgetSpaceTracker*)owner { if ((self = [super init])) { DCHECK(owner); _owner = owner; NSWindow* window = _owner->GetNSWindow(); if (window) { [window addObserver:self forKeyPath:@"onActiveSpace" options:NSKeyValueObservingOptionNew context:nil]; } } return self; }

  • 秒:收到更改通知
- (void)observeValueForKeyPath:(NSString*)keyPath
                      ofObject:(id)object
                        change:(NSDictionary<NSKeyValueChangeKey, id>*)change
                       context:(void*)context {
  DCHECK(_owner);
  if ([keyPath isEqual:@"onActiveSpace"]) {
    _owner->OnSpaceActiveChanged([change[NSKeyValueChangeNewKey] boolValue]);
  } else {
    [super observeValueForKeyPath:keyPath
                         ofObject:object
                           change:change
                          context:context];
  }
}
  • 您无法观察
onActiveSpace
属性,因为天窗不支持该功能。如果您真的想观察到它,则可以观察到名为
_NSWindowDidChangeWindowNumber
objective-c macos nswindow
1个回答
0
投票
但我想问:为什么?

-[NSWindow _commonAwake]

属性表明NSWINDOW创建了一个NSCGSwindow,并且已连接到Windowserver的空间。如果它是一个选项卡窗口,并且未选择该选项卡,则将返回否。你为什么要观察这个?如果您用
onActiveSpace
初始化Nswindow,则NSWINDOW将立即在空间上。
如果您想确定用户是否可见窗口,则需要使用
defer:YES

并观察

occlusionState
	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.