diff --git a/CHANGELOG.md b/CHANGELOG.md index 6279f762..43bf379a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ ### Bug Fixes +- [#1588](https://github.com/lapce/lapce/issues/1588): Fixed an issue where new windows would never be created after closing all windows on macOS. + ## 0.2.2 ### Features/Changes diff --git a/lapce-ui/src/app.rs b/lapce-ui/src/app.rs index 15185e3d..b46e3f4b 100644 --- a/lapce-ui/src/app.rs +++ b/lapce-ui/src/app.rs @@ -289,6 +289,58 @@ impl LapceAppDelegate { pub fn new() -> Self { Self {} } + + fn new_window( + window_id: &WindowId, + ctx: &mut druid::DelegateCtx, + data: &mut LapceData, + ) { + let (size, pos) = data + .windows + .get(window_id) + // If maximised, use default dimensions instead + .filter(|win| !win.maximised) + .map(|win| (win.size, win.pos + (50.0, 50.0))) + .unwrap_or_else(|| { + data.db + .get_last_window_info() + .map(|i| (i.size, i.pos)) + .unwrap_or_else(|_| { + (Size::new(800.0, 600.0), Point::new(0.0, 0.0)) + }) + }); + let info = WindowInfo { + size, + pos, + maximised: false, + tabs: TabsInfo { + active_tab: 0, + workspaces: vec![], + }, + }; + let mut window_data = LapceWindowData::new( + data.keypress.clone(), + data.latest_release.clone(), + data.update_in_process, + data.log_file.clone(), + data.panel_orders.clone(), + ctx.get_external_handle(), + &info, + data.db.clone(), + ); + let root = build_window(&mut window_data); + let window_id = window_data.window_id; + data.windows.insert(window_id, window_data.clone()); + let desc = new_window_desc( + window_id, + root, + info.size, + info.pos, + info.maximised, + &window_data.config, + ); + ctx.new_window(desc); + } } impl Default for LapceAppDelegate { @@ -313,11 +365,9 @@ fn event( } Event::ApplicationShouldHandleReopen(has_visible_windows) => { if !has_visible_windows { - ctx.submit_command(Command::new( - LAPCE_UI_COMMAND, - LapceUICommand::NewWindow(WindowId::next()), - Target::Global, - )); + // Create new window immediately + let new_window_id = WindowId::next(); + Self::new_window(&new_window_id, ctx, data); } return None; } @@ -543,54 +593,7 @@ fn command( return druid::Handled::Yes; } LapceUICommand::NewWindow(from_window_id) => { - let (size, pos) = data - .windows - .get(from_window_id) - // If maximised, use default dimensions instead - .filter(|win| !win.maximised) - .map(|win| (win.size, win.pos + (50.0, 50.0))) - .unwrap_or_else(|| { - data.db - .get_last_window_info() - .map(|i| (i.size, i.pos)) - .unwrap_or_else(|_| { - ( - Size::new(800.0, 600.0), - Point::new(0.0, 0.0), - ) - }) - }); - let info = WindowInfo { - size, - pos, - maximised: false, - tabs: TabsInfo { - active_tab: 0, - workspaces: vec![], - }, - }; - let mut window_data = LapceWindowData::new( - data.keypress.clone(), - data.latest_release.clone(), - data.update_in_process, - data.log_file.clone(), - data.panel_orders.clone(), - ctx.get_external_handle(), - &info, - data.db.clone(), - ); - let root = build_window(&mut window_data); - let window_id = window_data.window_id; - data.windows.insert(window_id, window_data.clone()); - let desc = new_window_desc( - window_id, - root, - info.size, - info.pos, - info.maximised, - &window_data.config, - ); - ctx.new_window(desc); + Self::new_window(from_window_id, ctx, data); return druid::Handled::Yes; } LapceUICommand::CloseWindow(window_id) => {