node-mac-recorder 2.10.10 → 2.10.12
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 +63 -33
package/package.json
CHANGED
package/src/window_selector.mm
CHANGED
|
@@ -494,41 +494,69 @@ 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
|
-
[[
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
501
|
+
if (windowUnderCursor) {
|
|
502
|
+
// Check if we're in lock mode (toggled window)
|
|
503
|
+
if (g_hasToggledWindow && g_currentWindowUnderCursor) {
|
|
504
|
+
// Check if cursor moved to different window while locked
|
|
505
|
+
int toggledWindowId = [[g_currentWindowUnderCursor objectForKey:@"id"] intValue];
|
|
506
|
+
int cursorWindowId = [[windowUnderCursor objectForKey:@"id"] intValue];
|
|
507
|
+
|
|
508
|
+
if (toggledWindowId != cursorWindowId) {
|
|
509
|
+
// Cursor moved to different window - cancel toggle and switch to new window
|
|
510
|
+
NSLog(@"🔓 TOGGLE CANCELLED: Cursor moved to different window");
|
|
511
|
+
g_hasToggledWindow = NO;
|
|
512
|
+
needsUpdate = YES;
|
|
513
|
+
targetWindow = windowUnderCursor;
|
|
514
|
+
} else {
|
|
515
|
+
// Same window - check for position changes
|
|
516
|
+
NSArray *allWindows = getAllSelectableWindows();
|
|
517
|
+
NSDictionary *freshWindowData = allWindows ?
|
|
518
|
+
[[allWindows filteredArrayUsingPredicate:
|
|
519
|
+
[NSPredicate predicateWithFormat:@"id == %d", toggledWindowId]] firstObject] : nil;
|
|
520
|
+
|
|
521
|
+
if (freshWindowData && ![freshWindowData isEqualToDictionary:g_currentWindowUnderCursor]) {
|
|
522
|
+
// Toggled window position changed - update
|
|
523
|
+
needsUpdate = YES;
|
|
524
|
+
targetWindow = freshWindowData;
|
|
525
|
+
NSLog(@"📍 TOGGLED WINDOW MOVED: Updating overlay position");
|
|
526
|
+
} else {
|
|
527
|
+
// No change needed
|
|
528
|
+
needsUpdate = NO;
|
|
529
|
+
targetWindow = g_currentWindowUnderCursor;
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
} else if (!g_currentWindowUnderCursor ||
|
|
533
|
+
![windowUnderCursor isEqualToDictionary:g_currentWindowUnderCursor]) {
|
|
534
|
+
// Normal mode - new window under cursor
|
|
535
|
+
needsUpdate = YES;
|
|
511
536
|
targetWindow = windowUnderCursor;
|
|
537
|
+
} else {
|
|
538
|
+
// Same window, but check if position changed by getting fresh data
|
|
539
|
+
int currentWindowId = [[g_currentWindowUnderCursor objectForKey:@"id"] intValue];
|
|
540
|
+
NSArray *allWindows = getAllSelectableWindows();
|
|
541
|
+
NSDictionary *freshWindowData = allWindows ?
|
|
542
|
+
[[allWindows filteredArrayUsingPredicate:
|
|
543
|
+
[NSPredicate predicateWithFormat:@"id == %d", currentWindowId]] firstObject] : nil;
|
|
544
|
+
|
|
545
|
+
if (freshWindowData && ![freshWindowData isEqualToDictionary:g_currentWindowUnderCursor]) {
|
|
546
|
+
// Same window but position/size changed
|
|
547
|
+
needsUpdate = YES;
|
|
548
|
+
targetWindow = freshWindowData;
|
|
549
|
+
NSLog(@"📍 WINDOW MOVED: Updating overlay position");
|
|
550
|
+
} else {
|
|
551
|
+
targetWindow = g_currentWindowUnderCursor;
|
|
552
|
+
}
|
|
512
553
|
}
|
|
513
|
-
} else {
|
|
514
|
-
targetWindow = windowUnderCursor;
|
|
515
554
|
}
|
|
516
555
|
|
|
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
|
-
}
|
|
556
|
+
if (needsUpdate && targetWindow) {
|
|
557
|
+
// Update current window with target window (fresh data)
|
|
558
|
+
[g_currentWindowUnderCursor release];
|
|
559
|
+
g_currentWindowUnderCursor = [targetWindow retain];
|
|
532
560
|
|
|
533
561
|
// Update overlay position and size with fresh data
|
|
534
562
|
int x = [[targetWindow objectForKey:@"x"] intValue];
|
|
@@ -597,10 +625,12 @@ void updateOverlay() {
|
|
|
597
625
|
// Update overlay view window info
|
|
598
626
|
[(WindowSelectorOverlayView *)g_overlayView setWindowInfo:targetWindow];
|
|
599
627
|
|
|
600
|
-
// Only reset toggle state when switching to
|
|
601
|
-
if (
|
|
628
|
+
// Only reset toggle state when switching to different window (not for position updates)
|
|
629
|
+
if (!g_hasToggledWindow) {
|
|
602
630
|
[(WindowSelectorOverlayView *)g_overlayView setIsToggled:NO];
|
|
603
|
-
|
|
631
|
+
} else {
|
|
632
|
+
// Keep toggle state for locked window
|
|
633
|
+
[(WindowSelectorOverlayView *)g_overlayView setIsToggled:YES];
|
|
604
634
|
}
|
|
605
635
|
|
|
606
636
|
// Add/update info label above button
|
|
@@ -774,7 +804,7 @@ void updateOverlay() {
|
|
|
774
804
|
NSLog(@" ✅ Overlay Status: Level=%ld, Alpha=%.1f, Visible=%s, Frame Set=YES",
|
|
775
805
|
[g_overlayWindow level], [g_overlayWindow alphaValue],
|
|
776
806
|
[g_overlayWindow isVisible] ? "YES" : "NO");
|
|
777
|
-
} else if (!
|
|
807
|
+
} else if (!windowUnderCursor && g_currentWindowUnderCursor) {
|
|
778
808
|
// No window under cursor and no toggle active, hide overlay
|
|
779
809
|
NSString *leftWindowTitle = [g_currentWindowUnderCursor objectForKey:@"title"] ?: @"Untitled";
|
|
780
810
|
NSString *leftAppName = [g_currentWindowUnderCursor objectForKey:@"appName"] ?: @"Unknown";
|