Skip to content

Commit 776964a

Browse files
committed
fix: icon rendering, menu position, and Linux Wayland alt-tab (v0.2.5.3)
- Fix Find/Replace replace icon (↳) showing as square - use universally-supported arrow (→) - Fix tree viewer context menu icon (⋯) showing as square - use simple dots (...) - Add additional symbols to font atlas pre-warm list (⇄⇅↳↵…⋯) - Fix recent files popup appearing below and covering filename - now anchored above with proper pivot - Add app_id to ViewportBuilder for proper Wayland window management (alt-tab, taskbar) - Update CHANGELOG.md and ROADMAP.md for v0.2.5.3
1 parent 496c655 commit 776964a

7 files changed

Lines changed: 30 additions & 4 deletions

File tree

CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2323

2424
### Fixed
2525

26+
#### Linux Desktop Integration
27+
- **Alt-tab/taskbar visibility on Wayland** - Fixed Ferrite window not appearing in alt-tab switcher or taskbar on Linux desktop environments (KDE Plasma, GNOME) running Wayland. Added `app_id` to ViewportBuilder for proper window identification.
28+
29+
#### Icon Rendering
30+
- **Find/Replace replace icon** - Fixed the replace icon (↳) showing as a square box in the Find and Replace panel. Changed to a universally-supported arrow character (→).
31+
- **Tree viewer context menu icon** - Fixed the context menu button (⋯) in JSON/YAML/TOML tree viewer showing as a square. Changed to simple dots (...) for reliable rendering.
32+
- **Font atlas pre-warming** - Added additional symbols (⇄⇅↳↵…⋯) to the font atlas pre-warm list to ensure they render correctly from startup.
33+
34+
#### UI Positioning
35+
- **Recent files menu position** - Fixed the recent files/folders popup menu appearing below and covering the filename button in the status bar. Menu now appears above the button using proper anchor positioning.
36+
2637
#### Performance
2738
- **Linux folder opening freeze** - Fixed critical 10+ second UI freeze when opening workspace folders on Linux (especially Fedora/KDE Plasma). Root causes:
2839
- **notify crate misconfiguration** - Was configured with `default-features = false, features = ["macos_kqueue"]` which disabled the inotify backend on Linux, forcing fallback to slow polling-based file watching that had to walk and stat entire directory trees.

ROADMAP.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,10 @@ Point release with Windows code signing, syntax theme selector, extended languag
215215
- [x] **Git deleted file icon rendering** - Fixed git "deleted" status icon showing as a square box in file tree. Changed from unsupported Unicode character to ASCII minus.
216216
- [x] **Blockquote/table overflow** - Added horizontal scrolling for tables and blockquotes when content exceeds container width. Wide content no longer breaks max line width for subsequent content. Code blocks and mermaid diagrams already have internal scroll handling.
217217
- [x] **PowerShell file rendering collapse** - Fixed critical bug where PowerShell and other files without syntax definitions would collapse all content to a single line
218+
- [x] **Alt-tab/taskbar visibility on Wayland** - Fixed Ferrite window not appearing in alt-tab switcher or taskbar on Linux desktop environments (KDE Plasma, GNOME) running Wayland. Added `app_id` to ViewportBuilder.
219+
- [x] **Find/Replace replace icon** - Fixed the replace icon (↳) showing as a square box in the Find and Replace panel. Changed to universally-supported arrow (→).
220+
- [x] **Tree viewer context menu icon** - Fixed the context menu button (⋯) in JSON/YAML/TOML tree viewer showing as a square. Changed to simple dots (...).
221+
- [x] **Recent files menu position** - Fixed the recent files/folders popup menu appearing below and covering the filename button in the status bar. Menu now appears above the button.
218222

219223
---
220224

src/app.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1692,9 +1692,16 @@ impl FerriteApp {
16921692
.cloned()
16931693
.collect();
16941694

1695+
// Position popup above the button so it doesn't cover the filename
1696+
// Calculate position: start from left edge, place above with some margin
1697+
let popup_pos = egui::pos2(
1698+
button_response.rect.left(),
1699+
button_response.rect.top() - 8.0, // Small gap above button
1700+
);
16951701
let popup_response = egui::Area::new(popup_id)
16961702
.order(egui::Order::Foreground)
1697-
.fixed_pos(button_response.rect.left_bottom())
1703+
.fixed_pos(popup_pos)
1704+
.pivot(egui::Align2::LEFT_BOTTOM) // Anchor at bottom-left so it grows upward
16981705
.show(ctx, |ui| {
16991706
egui::Frame::popup(ui.style()).show(ui, |ui| {
17001707
// Use two-column layout if we have both files and folders

src/editor/find_replace.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,8 @@ impl FindReplacePanel {
478478
if find_state.is_replace_mode {
479479
ui.add_space(4.0);
480480
ui.horizontal(|ui| {
481-
ui.label(RichText::new("↳").size(14.0).color(muted_color));
481+
// Use a simple right arrow that's widely supported
482+
ui.label(RichText::new("→").size(14.0).color(muted_color));
482483

483484
ui.add_sized(
484485
Vec2::new(280.0, 24.0),

src/fonts.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1070,7 +1070,8 @@ pub fn create_font_definitions_with_settings(
10701070
const BOX_DRAWING_CHARS: &str = "─│┌┐└┘├┤┬┴┼━┃┏┓┗┛┣┫┳┻╋╔╗╚╝╠╣╦╩╬═║▀▄█▌▐░▒▓";
10711071

10721072
/// Common symbols that might not be in the initial font atlas.
1073-
const COMMON_SYMBOLS: &str = "←→↑↓↔↕⇐⇒⇑⇓•◦●○■□▪▫◆◇★☆✓✗✘✔✕✖";
1073+
/// Includes arrows, bullets, checkmarks, and common UI symbols.
1074+
const COMMON_SYMBOLS: &str = "←→↑↓↔↕⇐⇒⇑⇓⇄⇅↳↵•◦●○■□▪▫◆◇★☆✓✗✘✔✕✖…⋯";
10741075

10751076
/// Pre-warm the font atlas with commonly used special characters.
10761077
///

src/main.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ fn main() -> eframe::Result<()> {
155155
// Configure the native window options with custom title bar (no native decorations)
156156
let mut viewport = eframe::egui::ViewportBuilder::default()
157157
.with_title(APP_NAME)
158+
.with_app_id("ferrite") // Set app_id for Wayland (helps with alt-tab and taskbar on Linux)
158159
.with_decorations(false) // Custom title bar - no native window decorations
159160
.with_inner_size([window_size.width, window_size.height])
160161
.with_min_inner_size([400.0, 300.0]);

src/markdown/tree_viewer.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -982,7 +982,8 @@ impl<'a> TreeViewer<'a> {
982982
ui.colored_label(colors.string, "✓");
983983
}
984984

985-
ui.menu_button("⋯", |ui| {
985+
// Use three dots that render in all fonts (U+2026 horizontal ellipsis may not render)
986+
ui.menu_button("...", |ui| {
986987
if ui.button(t!("tree_viewer.copy_path").to_string()).clicked() {
987988
let json_path = self.path_to_jsonpath(path);
988989
ui.output_mut(|o| o.copied_text = json_path);

0 commit comments

Comments
 (0)