node-mac-recorder 2.10.9 → 2.10.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/window_selector.mm +30 -37
package/package.json
CHANGED
package/src/window_selector.mm
CHANGED
|
@@ -494,41 +494,39 @@ void updateOverlay() {
|
|
|
494
494
|
// Find window under cursor
|
|
495
495
|
NSDictionary *windowUnderCursor = getWindowUnderCursor(globalPoint);
|
|
496
496
|
|
|
497
|
-
//
|
|
497
|
+
// Check if we need to update overlay (new window or position change of current window)
|
|
498
|
+
BOOL needsUpdate = NO;
|
|
498
499
|
NSDictionary *targetWindow = nil;
|
|
499
500
|
|
|
500
|
-
if (
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
[[allWindows filteredArrayUsingPredicate:
|
|
506
|
-
[NSPredicate predicateWithFormat:@"id == %d", windowId]] firstObject] : nil;
|
|
507
|
-
|
|
508
|
-
if (!targetWindow) {
|
|
509
|
-
NSLog(@"⚠️ Toggled window no longer exists - resetting toggle");
|
|
510
|
-
g_hasToggledWindow = false;
|
|
501
|
+
if (windowUnderCursor) {
|
|
502
|
+
if (!g_currentWindowUnderCursor ||
|
|
503
|
+
![windowUnderCursor isEqualToDictionary:g_currentWindowUnderCursor]) {
|
|
504
|
+
// New window under cursor
|
|
505
|
+
needsUpdate = YES;
|
|
511
506
|
targetWindow = windowUnderCursor;
|
|
507
|
+
} else {
|
|
508
|
+
// Same window, but check if position changed by getting fresh data
|
|
509
|
+
int currentWindowId = [[g_currentWindowUnderCursor objectForKey:@"id"] intValue];
|
|
510
|
+
NSArray *allWindows = getAllSelectableWindows();
|
|
511
|
+
NSDictionary *freshWindowData = allWindows ?
|
|
512
|
+
[[allWindows filteredArrayUsingPredicate:
|
|
513
|
+
[NSPredicate predicateWithFormat:@"id == %d", currentWindowId]] firstObject] : nil;
|
|
514
|
+
|
|
515
|
+
if (freshWindowData && ![freshWindowData isEqualToDictionary:g_currentWindowUnderCursor]) {
|
|
516
|
+
// Same window but position/size changed
|
|
517
|
+
needsUpdate = YES;
|
|
518
|
+
targetWindow = freshWindowData;
|
|
519
|
+
NSLog(@"📍 WINDOW MOVED: Updating overlay position");
|
|
520
|
+
} else {
|
|
521
|
+
targetWindow = g_currentWindowUnderCursor;
|
|
522
|
+
}
|
|
512
523
|
}
|
|
513
|
-
} else {
|
|
514
|
-
targetWindow = windowUnderCursor;
|
|
515
524
|
}
|
|
516
525
|
|
|
517
|
-
if (targetWindow) {
|
|
518
|
-
// Update current window
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
g_hasToggledWindow; // Always update position for toggled windows
|
|
522
|
-
|
|
523
|
-
if (shouldUpdate && !g_hasToggledWindow) {
|
|
524
|
-
// Only switch windows if not toggled
|
|
525
|
-
[g_currentWindowUnderCursor release];
|
|
526
|
-
g_currentWindowUnderCursor = [targetWindow retain];
|
|
527
|
-
} else if (g_hasToggledWindow) {
|
|
528
|
-
// Update position data for toggled window
|
|
529
|
-
[g_currentWindowUnderCursor release];
|
|
530
|
-
g_currentWindowUnderCursor = [targetWindow retain];
|
|
531
|
-
}
|
|
526
|
+
if (needsUpdate && targetWindow) {
|
|
527
|
+
// Update current window with target window (fresh data)
|
|
528
|
+
[g_currentWindowUnderCursor release];
|
|
529
|
+
g_currentWindowUnderCursor = [targetWindow retain];
|
|
532
530
|
|
|
533
531
|
// Update overlay position and size with fresh data
|
|
534
532
|
int x = [[targetWindow objectForKey:@"x"] intValue];
|
|
@@ -594,14 +592,9 @@ void updateOverlay() {
|
|
|
594
592
|
// Ensure overlay is on the correct screen
|
|
595
593
|
[g_overlayWindow setFrame:overlayFrame display:YES];
|
|
596
594
|
|
|
597
|
-
// Update overlay view window info
|
|
595
|
+
// Update overlay view window info and reset toggle state for new window
|
|
598
596
|
[(WindowSelectorOverlayView *)g_overlayView setWindowInfo:targetWindow];
|
|
599
|
-
|
|
600
|
-
// Only reset toggle state when switching to a different window (not for position updates)
|
|
601
|
-
if (shouldUpdate && !g_hasToggledWindow) {
|
|
602
|
-
[(WindowSelectorOverlayView *)g_overlayView setIsToggled:NO];
|
|
603
|
-
g_hasToggledWindow = NO; // Reset global toggle state when switching windows
|
|
604
|
-
}
|
|
597
|
+
[(WindowSelectorOverlayView *)g_overlayView setIsToggled:NO];
|
|
605
598
|
|
|
606
599
|
// Add/update info label above button
|
|
607
600
|
NSTextField *infoLabel = nil;
|
|
@@ -774,7 +767,7 @@ void updateOverlay() {
|
|
|
774
767
|
NSLog(@" ✅ Overlay Status: Level=%ld, Alpha=%.1f, Visible=%s, Frame Set=YES",
|
|
775
768
|
[g_overlayWindow level], [g_overlayWindow alphaValue],
|
|
776
769
|
[g_overlayWindow isVisible] ? "YES" : "NO");
|
|
777
|
-
} else if (!
|
|
770
|
+
} else if (!windowUnderCursor && g_currentWindowUnderCursor) {
|
|
778
771
|
// No window under cursor and no toggle active, hide overlay
|
|
779
772
|
NSString *leftWindowTitle = [g_currentWindowUnderCursor objectForKey:@"title"] ?: @"Untitled";
|
|
780
773
|
NSString *leftAppName = [g_currentWindowUnderCursor objectForKey:@"appName"] ?: @"Unknown";
|