fix(desktop): 识别浮层浮在全屏 App 之上(FullScreenAuxiliary)
仅 alwaysOnTop 时,全屏终端/浏览器独占 Space,浮层不显示。启动时给浮层 NSWindow 追加 CanJoinAllSpaces|Stationary|FullScreenAuxiliary 集合行为(objc2 直设,主线程),使其作为辅助窗叠加到全屏 Space 上。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -312,6 +312,33 @@ fn set_tray_tooltip(app: &AppHandle, text: &str) {
|
||||
}
|
||||
}
|
||||
|
||||
/// 让识别浮层能浮在全屏 App 之上(macOS):给 NSWindow 追加
|
||||
/// CanJoinAllSpaces | Stationary | FullScreenAuxiliary 集合行为。
|
||||
/// 仅 alwaysOnTop 不够——全屏 App 独占 Space,普通置顶窗口不会出现在其中,
|
||||
/// FullScreenAuxiliary 才让浮层作为辅助窗叠加到全屏 Space 上。
|
||||
/// 必须在主线程调用(Tauri setup 闭包即主线程),窗口创建后调用一次即可。
|
||||
#[cfg(target_os = "macos")]
|
||||
pub fn configure_overlay_spaces(app: &AppHandle) {
|
||||
use objc2::{msg_send, runtime::AnyObject};
|
||||
// NSWindowCollectionBehavior 位标志
|
||||
const CAN_JOIN_ALL_SPACES: usize = 1 << 0;
|
||||
const STATIONARY: usize = 1 << 4;
|
||||
const FULL_SCREEN_AUXILIARY: usize = 1 << 8;
|
||||
if let Some(w) = app.get_webview_window(OVERLAY) {
|
||||
if let Ok(ptr) = w.ns_window() {
|
||||
let ns = ptr as *mut AnyObject;
|
||||
unsafe {
|
||||
let cur: usize = msg_send![ns, collectionBehavior];
|
||||
let next = cur | CAN_JOIN_ALL_SPACES | STATIONARY | FULL_SCREEN_AUXILIARY;
|
||||
let _: () = msg_send![ns, setCollectionBehavior: next];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(not(target_os = "macos"))]
|
||||
pub fn configure_overlay_spaces(_app: &AppHandle) {}
|
||||
|
||||
fn show_overlay(app: &AppHandle) {
|
||||
if let Some(w) = app.get_webview_window(OVERLAY) {
|
||||
// 跟随光标:浮层出现在指针下方 24px,水平居中
|
||||
|
||||
Reference in New Issue
Block a user