improve mac service

This commit is contained in:
rustdesk
2022-04-27 19:21:38 +08:00
parent 33c6095eca
commit bbe902d92e
8 changed files with 68 additions and 35 deletions

View File

@@ -43,15 +43,6 @@ impl ConnectionManager {
senders: HashMap::new(),
};
let cm = Self(Arc::new(RwLock::new(inner)));
#[cfg(target_os = "macos")]
{
let cloned = cm.clone();
*super::macos::SHOULD_OPEN_UNTITLED_FILE_CALLBACK
.lock()
.unwrap() = Some(Box::new(move || {
cloned.call("awake", &make_args!());
}));
}
let cloned = cm.clone();
std::thread::spawn(move || start_ipc(cloned));
cm

View File

@@ -317,11 +317,6 @@ handler.newMessage = function(id, text) {
update();
}
handler.awake = function() {
view.windowState = View.WINDOW_SHOWN;
view.focus = self;
}
view << event statechange {
adjustBorder();
}

View File

@@ -367,3 +367,8 @@ function isReasonableSize(r) {
return !(x < -3200 || x > 3200 || y < -3200 || y > 3200);
}
function awake() {
view.windowState = View.WINDOW_SHOWN;
view.focus = self;
}

View File

@@ -745,6 +745,10 @@ function self.closing() {
// return false; // can prevent window close
var (x, y, w, h) = view.box(#rectw, #border, #screen);
handler.save_size(x, y, w, h);
if (is_osx) {
view.windowState = View.WINDOW_HIDDEN;
return false;
}
}
function self.ready() {

View File

@@ -12,11 +12,7 @@ use objc::{
sel, sel_impl,
};
use sciter::{make_args, Host};
use std::{
ffi::c_void,
rc::Rc,
sync::{Arc, Mutex},
};
use std::{ffi::c_void, rc::Rc};
static APP_HANDLER_IVAR: &str = "GoDeskAppHandler";
@@ -24,10 +20,7 @@ const TERMINATE_TAG: u32 = 0;
const SHOW_ABOUT_TAG: u32 = 1;
const SHOW_SETTINGS_TAG: u32 = 2;
const RUN_ME_TAG: u32 = 3;
lazy_static::lazy_static! {
pub static ref SHOULD_OPEN_UNTITLED_FILE_CALLBACK: Arc<Mutex<Option<Box<dyn Fn() + Send>>>> = Default::default();
}
const AWAKE: u32 = 4;
trait AppHandler {
fn command(&mut self, cmd: u32);
@@ -49,12 +42,30 @@ impl DelegateState {
}
}
static mut IGNORE_FIRST_TIME: bool = false;
pub fn ignore_first_time_awake() {
unsafe {
IGNORE_FIRST_TIME = true;
}
}
impl AppHandler for Rc<Host> {
fn command(&mut self, cmd: u32) {
if cmd == SHOW_ABOUT_TAG {
let _ = self.call_function("awake", &make_args![]);
let _ = self.call_function("showAbout", &make_args![]);
} else if cmd == SHOW_SETTINGS_TAG {
let _ = self.call_function("awake", &make_args![]);
let _ = self.call_function("showSettings", &make_args![]);
} else if cmd == AWAKE {
unsafe {
if IGNORE_FIRST_TIME {
IGNORE_FIRST_TIME = false;
return;
}
}
let _ = self.call_function("awake", &make_args![]);
}
}
}
@@ -95,12 +106,14 @@ extern "C" fn application_did_finish_launching(_this: &mut Object, _: Sel, _noti
}
extern "C" fn application_should_handle_open_untitled_file(
_this: &mut Object,
this: &mut Object,
_: Sel,
_sender: id,
) -> BOOL {
if let Some(callback) = SHOULD_OPEN_UNTITLED_FILE_CALLBACK.lock().unwrap().as_ref() {
callback();
unsafe {
let inner: *mut c_void = *this.get_ivar(APP_HANDLER_IVAR);
let inner = &mut *(inner as *mut DelegateState);
(*inner).command(AWAKE);
}
YES
}
@@ -131,7 +144,7 @@ unsafe fn make_menu_item(title: &str, key: &str, tag: u32) -> *mut Object {
object
}
pub fn make_menubar(host: Rc<Host>) {
pub fn make_menubar(host: Rc<Host>, is_index: bool) {
unsafe {
let _pool = NSAutoreleasePool::new(nil);
set_delegate(Some(Box::new(host)));
@@ -140,7 +153,7 @@ pub fn make_menubar(host: Rc<Host>) {
menubar.addItem_(app_menu_item);
let app_menu = NSMenu::new(nil).autorelease();
if std::env::args().len() > 1 {
if !is_index {
let new_item = make_menu_item("New Window", "n", RUN_ME_TAG);
app_menu.addItem_(new_item);
} else {
@@ -155,7 +168,7 @@ pub fn make_menubar(host: Rc<Host>) {
let separator = NSMenuItem::separatorItem(nil).autorelease();
app_menu.addItem_(separator);
let quit_item = make_menu_item(
&format!("Quit {}", hbb_common::config::APP_NAME),
&format!("Quit {}", crate::get_app_name()),
"q",
TERMINATE_TAG,
);