Use type_id to determine what has the focus

Co-Authored-By: Antonio Scandurra <me@as-cii.com>
This commit is contained in:
Petros Amoiridis 2023-03-13 11:42:40 +02:00
parent 46efb844af
commit 726c8eb43f
No known key found for this signature in database
2 changed files with 10 additions and 1 deletions

View File

@ -2757,6 +2757,12 @@ impl AppContext {
Some(self.views.get(&(window_id, view_id))?.ui_name())
}
pub fn view_type_id(&self, window_id: usize, view_id: usize) -> Option<TypeId> {
self.views
.get(&(window_id, view_id))
.map(|view| view.as_any().type_id())
}
pub fn background(&self) -> &Arc<executor::Background> {
&self.background
}

View File

@ -5,6 +5,7 @@ use gpui::{
ViewHandle, WeakModelHandle, WeakViewHandle,
};
use settings::Settings;
use std::any::TypeId;
use terminal::Terminal;
use workspace::{dock::FocusDock, item::ItemHandle, NewTerminal, StatusItemView, Workspace};
@ -50,7 +51,9 @@ impl View for TerminalButton {
let focused_view = cx.focused_view_id(cx.window_id());
let active = focused_view
.map(|view| cx.view_ui_name(cx.window_id(), view) == Some(TerminalView::ui_name()))
.map(|view_id| {
cx.view_type_id(cx.window_id(), view_id) == Some(TypeId::of::<TerminalView>())
})
.unwrap_or(false);
let has_terminals = !project.local_terminal_handles().is_empty();