mirror of https://github.com/lapce/lapce.git
Fix: new windows would never be created after closing all (#1651)
* fix: reopen event handler on macOS The `NewWindow`Command submitted by `Event::ApplicationShouldHandleReopen` will never be handled before `update()`. * docs: update CHANGELOG
This commit is contained in:
parent
b843959ac1
commit
a65ab0b2fd
|
@ -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
|
||||
|
|
|
@ -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) => {
|
||||
|
|
Loading…
Reference in New Issue