Use type_id to determine what has the focus

Petros Amoiridis and Antonio Scandurra created

Co-Authored-By: Antonio Scandurra <me@as-cii.com>

Change summary

crates/gpui/src/app.rs                      | 6 ++++++
crates/terminal_view/src/terminal_button.rs | 5 ++++-
2 files changed, 10 insertions(+), 1 deletion(-)

Detailed changes

crates/gpui/src/app.rs 🔗

@@ -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
     }

crates/terminal_view/src/terminal_button.rs 🔗

@@ -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();