image_viewer: Fix image view tab icon lost (#17063)

CharlesChen0823 created

Closes #16989 

Release Notes:

- N/A

Change summary

crates/image_viewer/Cargo.toml          |  2 ++
crates/image_viewer/src/image_viewer.rs | 12 +++++++++++-
2 files changed, 13 insertions(+), 1 deletion(-)

Detailed changes

crates/image_viewer/Cargo.toml 🔗

@@ -16,6 +16,8 @@ doctest = false
 anyhow.workspace = true
 db.workspace = true
 gpui.workspace = true
+file_icons.workspace = true
 ui.workspace = true
+settings.workspace = true
 workspace.workspace = true
 project.workspace = true

crates/image_viewer/src/image_viewer.rs 🔗

@@ -7,11 +7,13 @@ use gpui::{
 use persistence::IMAGE_VIEWER;
 use ui::prelude::*;
 
+use file_icons::FileIcons;
 use project::{Project, ProjectEntryId, ProjectPath};
+use settings::Settings;
 use std::{ffi::OsStr, path::PathBuf};
 use workspace::{
     item::{Item, ProjectItem, SerializableItem, TabContentParams},
-    ItemId, Pane, Workspace, WorkspaceId,
+    ItemId, ItemSettings, Pane, Workspace, WorkspaceId,
 };
 
 const IMAGE_VIEWER_KIND: &str = "ImageView";
@@ -85,6 +87,14 @@ impl Item for ImageView {
             .into_any_element()
     }
 
+    fn tab_icon(&self, cx: &WindowContext) -> Option<Icon> {
+        ItemSettings::get_global(cx)
+            .file_icons
+            .then(|| FileIcons::get_icon(self.path.as_path(), cx))
+            .flatten()
+            .map(|icon| Icon::from_path(icon))
+    }
+
     fn clone_on_split(
         &self,
         _workspace_id: Option<WorkspaceId>,