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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-mac-recorder",
3
- "version": "2.10.10",
3
+ "version": "2.10.12",
4
4
  "description": "Native macOS screen recording package for Node.js applications",
5
5
  "main": "index.js",
6
6
  "keywords": [
@@ -494,41 +494,69 @@ void updateOverlay() {
494
494
  // Find window under cursor
495
495
  NSDictionary *windowUnderCursor = getWindowUnderCursor(globalPoint);
496
496
 
497
- // Decide which window to track (cursor or toggled)
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 (g_hasToggledWindow && g_currentWindowUnderCursor) {
501
- // Use current toggled window, but get fresh position data
502
- int windowId = [[g_currentWindowUnderCursor objectForKey:@"id"] intValue];
503
- NSArray *allWindows = getAllSelectableWindows();
504
- targetWindow = allWindows != nil ?
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
+ // 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 if different or if we need fresh position data
519
- BOOL shouldUpdate = !g_currentWindowUnderCursor ||
520
- ![targetWindow isEqualToDictionary:g_currentWindowUnderCursor] ||
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 a different window (not for position updates)
601
- if (shouldUpdate && !g_hasToggledWindow) {
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
- g_hasToggledWindow = NO; // Reset global toggle state when switching windows
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 (!targetWindow && g_currentWindowUnderCursor && !g_hasToggledWindow) {
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";