1
1
mirror of https://github.com/wez/wezterm.git synced 2024-11-24 07:46:59 +03:00

tidy up front end accessors

This commit is contained in:
Wez Furlong 2022-01-15 20:33:05 -07:00
parent 39c2da3bdf
commit 12f32aeda8
2 changed files with 19 additions and 42 deletions

View File

@ -35,10 +35,10 @@ impl GuiFrontEnd {
});
let fe = Rc::downgrade(&front_end);
mux.subscribe(move |n| {
if let Some(_fe) = fe.upgrade() {
if let Some(fe) = fe.upgrade() {
match n {
MuxNotification::WindowCreated(mux_window_id) => {
if !is_switching_workspace() {
if !fe.is_switching_workspace() {
let mux = Mux::get().expect("mux started and running on main thread");
let window = mux.get_window(mux_window_id).expect("new window notif to have valid window");
if window.get_workspace() == mux.active_workspace_for_client(&client_id) {
@ -72,7 +72,7 @@ impl GuiFrontEnd {
promise::spawn::spawn(async move {
let mux = Mux::get().expect("mux started and running on main thread");
mux.set_active_workspace_for_client(&client_id, &workspace);
switch_workspace(&workspace);
crate::frontend::front_end().switch_workspace(&workspace);
drop(activity);
}).detach();
} else {
@ -181,44 +181,20 @@ impl GuiFrontEnd {
pub fn forget_known_window(&self, window: &Window) {
self.known_windows.borrow_mut().retain(|w| w != window);
}
pub fn is_switching_workspace(&self) -> bool {
*self.switching_workspaces.borrow()
}
}
thread_local! {
static FRONT_END: RefCell<Option<Rc<GuiFrontEnd>>> = RefCell::new(None);
}
pub fn record_known_window(window: Window) {
FRONT_END.with(|f| {
f.borrow_mut()
.as_mut()
.map(|f| f.record_known_window(window))
});
}
pub fn forget_known_window(window: &Window) {
FRONT_END.with(|f| {
f.borrow_mut()
.as_mut()
.map(|f| f.forget_known_window(window))
});
}
pub fn is_switching_workspace() -> bool {
pub fn front_end() -> Rc<GuiFrontEnd> {
FRONT_END
.with(|f| {
f.borrow()
.as_ref()
.map(|f| *f.switching_workspaces.borrow())
})
.unwrap_or(false)
}
pub fn switch_workspace(new_name: &str) {
FRONT_END.with(|f| {
f.borrow_mut()
.as_mut()
.map(|f| f.switch_workspace(new_name))
});
.with(|f| f.borrow().as_ref().map(Rc::clone))
.expect("to be called on gui thread")
}
pub struct WorkspaceSwitcher {
@ -244,7 +220,7 @@ impl WorkspaceSwitcher {
impl Drop for WorkspaceSwitcher {
fn drop(&mut self) {
switch_workspace(&self.new_name);
front_end().switch_workspace(&self.new_name);
}
}

View File

@ -2,6 +2,7 @@
use super::renderstate::*;
use super::utilsprites::RenderMetrics;
use crate::cache::LruCache;
use crate::frontend::front_end;
use crate::glium::texture::SrgbTexture2d;
use crate::overlay::{
confirm_close_pane, confirm_close_tab, confirm_close_window, confirm_quit_program, launcher,
@ -346,7 +347,7 @@ impl TermWindow {
// Immediately kill the tabs and allow the window to close
mux.kill_window(self.mux_window_id);
window.close();
crate::frontend::forget_known_window(window);
front_end().forget_known_window(window);
}
WindowCloseConfirmation::AlwaysPrompt => {
let tab = match mux.get_active_tab_for_window(self.mux_window_id) {
@ -354,7 +355,7 @@ impl TermWindow {
None => {
mux.kill_window(self.mux_window_id);
window.close();
crate::frontend::forget_known_window(window);
front_end().forget_known_window(window);
return;
}
};
@ -367,7 +368,7 @@ impl TermWindow {
if can_close {
mux.kill_window(self.mux_window_id);
window.close();
crate::frontend::forget_known_window(window);
front_end().forget_known_window(window);
return;
}
let window = self.window.clone().unwrap();
@ -776,7 +777,7 @@ impl TermWindow {
}
crate::update::start_update_checker();
crate::frontend::record_known_window(window);
front_end().record_known_window(window);
Ok(())
}
@ -849,7 +850,7 @@ impl TermWindow {
if gl.is_context_lost() {
log::error!("opengl context was lost; should reinit");
window.close();
crate::frontend::forget_known_window(window);
front_end().forget_known_window(window);
return false;
}
@ -965,7 +966,7 @@ impl TermWindow {
MuxNotification::WindowRemoved(window_id) => {
if window_id == self.mux_window_id {
window.close();
crate::frontend::forget_known_window(window);
front_end().forget_known_window(window);
}
}
_ => {}
@ -2547,7 +2548,7 @@ impl TermWindow {
impl Drop for TermWindow {
fn drop(&mut self) {
if let Some(window) = self.window.take() {
crate::frontend::forget_known_window(&window);
front_end().forget_known_window(&window);
}
}
}