From 5fbe9789faf05ce99bbff6ec4cd0b905519acbd0 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Fri, 03 Jul 2026 05:18:07 +0800
Subject: [PATCH] Freeze R221 2.2.2 source baseline
---
C1.source/privatevoice.src/internal/overlay/overlay_darwin.go | 35 ++++++++++++++++++++++++++++-------
1 files changed, 28 insertions(+), 7 deletions(-)
diff --git a/C1.source/privatevoice.src/internal/overlay/overlay_darwin.go b/C1.source/privatevoice.src/internal/overlay/overlay_darwin.go
index a3aecb7..b364993 100755
--- a/C1.source/privatevoice.src/internal/overlay/overlay_darwin.go
+++ b/C1.source/privatevoice.src/internal/overlay/overlay_darwin.go
@@ -151,6 +151,7 @@
static NSWindow* g_window = nil;
static NSWindow* g_dragWindow = nil;
+static int g_windowsOrderedOut = 1;
static float desktopTopY(void) {
NSScreen* mainScreen = [NSScreen mainScreen];
@@ -180,6 +181,17 @@
if (g_dragWindow) {
[g_dragWindow setFrameOrigin:dragOriginForVisualOrigin(visualOrigin)];
}
+}
+
+static void orderOverlayWindowsOutOnce(void) {
+ if (g_windowsOrderedOut) return;
+ if (g_window) [g_window orderOut:nil];
+ if (g_dragWindow) [g_dragWindow orderOut:nil];
+ g_windowsOrderedOut = 1;
+}
+
+static void markOverlayWindowsVisible(void) {
+ g_windowsOrderedOut = 0;
}
static void storeDragPositionFromVisualOrigin(NSPoint visualOrigin) {
@@ -669,8 +681,7 @@
[g_window setAlphaValue:eased];
if (g_state.fadeProgress <= 0 && g_state.fadeTarget == 0) {
- [g_window orderOut:nil];
- if (g_dragWindow) [g_dragWindow orderOut:nil];
+ orderOverlayWindowsOutOnce();
return;
}
@@ -683,6 +694,7 @@
applyOverlayWindowPolicy(g_dragWindow);
[g_dragWindow orderFrontRegardless];
}
+ markOverlayWindowsVisible();
}
// Reposition
@@ -724,6 +736,7 @@
g_window = window;
g_view = view;
+ g_windowsOrderedOut = 1;
PrivateVoiceOverlayWindow* dragWindow = [[PrivateVoiceOverlayWindow alloc]
initWithContentRect:NSMakeRect(0, 0, DRAG_W, DRAG_H)
@@ -789,6 +802,7 @@
applyOverlayWindowPolicy(g_dragWindow);
[g_dragWindow orderFrontRegardless];
}
+ markOverlayWindowsVisible();
}
static void overlayShow(void) {
@@ -882,6 +896,7 @@
import "C"
import (
+ "sync"
"time"
"unsafe"
)
@@ -894,6 +909,7 @@
// darwinOverlay uses a native NSWindow + Core Graphics to render
// the floating indicator, matching the Windows GDI+ implementation.
type darwinOverlay struct {
+ mu sync.Mutex
dragCb func(int, int)
created bool
done chan struct{}
@@ -906,12 +922,17 @@
}
func (o *darwinOverlay) ensureCreated() {
- if !o.created {
- C.overlayCreate()
- o.created = true
- time.Sleep(50 * time.Millisecond)
- go o.pollDrag()
+ o.mu.Lock()
+ if o.created {
+ o.mu.Unlock()
+ return
}
+ o.created = true
+ o.mu.Unlock()
+
+ C.overlayCreate()
+ time.Sleep(50 * time.Millisecond)
+ go o.pollDrag()
}
func (o *darwinOverlay) Show() {
--
Gitblit v1.9.3