Skip to content

Commit d96afeb

Browse files
committed
Merge branch 'feature/17/retrieve_window_dimensions' of github.com:nut-tree/libnut into feature/17/retrieve_window_dimensions
2 parents 37321e4 + d412c3d commit d96afeb

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

src/macos/window_manager.mm

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,30 @@
2424
return nullptr;
2525
}
2626

27+
WindowHandle getActiveWindow() {
28+
CGWindowListOption listOptions = kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements;
29+
CFArrayRef windowList = CGWindowListCopyWindowInfo(listOptions, kCGNullWindowID);
30+
31+
for (NSDictionary *info in (NSArray *)windowList) {
32+
NSNumber *ownerPid = info[(id)kCGWindowOwnerPID];
33+
NSNumber *windowNumber = info[(id)kCGWindowNumber];
34+
35+
auto app = [NSRunningApplication runningApplicationWithProcessIdentifier: [ownerPid intValue]];
36+
37+
if (![app isActive]) {
38+
continue;
39+
}
40+
41+
CFRelease(windowList);
42+
return [windowNumber intValue];
43+
}
44+
45+
if (windowList) {
46+
CFRelease(windowList);
47+
}
48+
return -1;
49+
}
50+
2751
std::vector<WindowHandle> getWindows() {
2852
CGWindowListOption listOptions = kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements;
2953
CFArrayRef windowList = CGWindowListCopyWindowInfo(listOptions, kCGNullWindowID);
@@ -54,7 +78,7 @@ MMRect getWindowRect(const WindowHandle windowHandle) {
5478
if (windowInfo != nullptr) {
5579
CGRect windowRect;
5680
if (CGRectMakeWithDictionaryRepresentation((CFDictionaryRef)windowInfo[(id)kCGWindowBounds], &windowRect)) {
57-
return MMRectMake(windowRect.origin.x, windowRect.origin.y, windowRect.size.height, windowRect.size.width);
81+
return MMRectMake(windowRect.origin.x, windowRect.origin.y, windowRect.size.width, windowRect.size.height);
5882
}
5983
return MMRectMake(0, 0, 0, 0);
6084
}

src/win32/window_manager.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ std::vector<WindowHandle> getWindows() {
1717
return windowHandles;
1818
}
1919

20+
WindowHandle getActiveWindow() {
21+
return reinterpret_cast<WindowHandle>(GetForegroundWindow());
22+
}
23+
2024
MMRect getWindowRect(const WindowHandle windowHandle) {
2125
HWND hWnd = reinterpret_cast<HWND>(windowHandle);
2226
RECT windowRect;

0 commit comments

Comments
 (0)