Skip to content

Stop app icons flickering when the launcher opens - #67

Open
nchudleigh wants to merge 1 commit into
typecraft-dev:mainfrom
nchudleigh:fix/icon-flicker
Open

nchudleigh wants to merge 1 commit into
typecraft-dev:mainfrom
nchudleigh:fix/icon-flicker

Conversation

@nchudleigh

@nchudleigh nchudleigh commented Nov 3, 2026 •

Copy link
Copy Markdown

Problem

App icons blink off and on for a few frames each time the launcher opens. Glyph icons don't, only image icons (apps).

The icon's source is !visible ? "" : …, and visible is effective visibility, so it turns false whenever the launcher hides. Every hide drops every app icon, and every open reloads it asynchronously: blank until it decodes, then again as sourceSize settles. A 60 fps screen recording showed the app icon going blank twice within the first few frames of opening, and per-row logging showed Loading → Ready → Loading → Ready with the same source.

Change

  • Base the source on whether the row has an icon (wanted), not on effective visibility, so hiding the launcher keeps decoded icons.
  • retainWhileLoading: true keeps the previous image while a new source or size decodes (Qt 6.8+; Omarchy 4 ships 6.12).

Testing

node --test tests/*.test.js passes. Checked with a 60 fps recording before and after (frames below).

Screenshots

Four consecutive 60 fps frames as the launcher opens. Before, the app icon blanks every other frame:

Icon frames before

After:

Icon frames after

🤖 Generated with Claude Code

The icon's source was `!visible ? "" : ...`, and `visible` is effective
visibility: it turns false whenever the launcher hides. Every hide dropped
every app icon and every open reloaded it asynchronously, so image icons
(apps, unlike glyph icons) drew blank for a few frames, and again as the
size settled. Key the source on whether the row has an icon instead, and
keep the previous image while a reload decodes (retainWhileLoading).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant