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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-mac-recorder",
3
- "version": "2.10.9",
3
+ "version": "2.10.11",
4
4
  "description": "Native macOS screen recording package for Node.js applications",
5
5
  "main": "index.js",
6
6
  "keywords": [
@@ -494,41 +494,39 @@ 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
+ 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 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
- }
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 (!targetWindow && g_currentWindowUnderCursor && !g_hasToggledWindow) {
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";