Skip to content

[Bug]: GNOME Wayland: T3 Code cannot be pinned to the dash because its app id resolves to the hidden URL handler entry #32482

Closed

Description

@nico-buescher

Before submitting

  • I searched existing issues and did not find a duplicate.
  • I included enough detail to reproduce or investigate the problem.

Area

apps/desktop

Steps to reproduce

  1. On GNOME Shell 50 (Wayland), install t3code-nightly-bin from the AUR.
  2. Launch T3 Code.
  3. Right-click the running T3 Code icon in the dash.

Expected behavior

The menu offers "Pin to Dash", and the pinned launcher groups the running window.

Actual behavior

"Pin to Dash" is missing from the menu. The running window can't be pinned.

This is the part of #13975 that was left open when it was closed ("the window can still appear as a separate dock entry ... please open a new issue for that part only"). Here it shows up as a missing pin option rather than a second icon.

Cause:

  1. On every Linux startup, the app calls setDesktopName("com.t3tools.T3Code.desktop") (DesktopPreReadyPlatform.ts#L137, name from DesktopEarlyElectronStartup.ts#L33-L34). That makes the window's Wayland app id com.t3tools.T3Code.
  2. Also on every startup, the app writes ~/.local/share/applications/com.t3tools.T3Code.desktop with NoDisplay=true (DesktopPreReadyPlatform.ts#L116-L134, DesktopLinuxUrlHandler.ts#L79-L96).
  3. The AUR package installs its visible launcher as t3code.desktop with StartupWMClass=t3code (packaging/aur/t3code-nightly-bin/PKGBUILD#L89-L98). Neither the file name nor StartupWMClass matches com.t3tools.T3Code, so GNOME falls back to the desktop file whose name matches the app id, which is the hidden entry.
  4. GNOME Shell only shows "Pin to Dash" when parentalControlsManager.shouldShowApp(appInfo) is true (appMenu.js _updateFavoriteItem()). That function returns false when appInfo.should_show() is false (parentalControlsManager.js), and NoDisplay=true makes should_show() false. appFavorites.js uses the same check, so adding the id to favorite-apps by hand doesn't work either.

Related:

Either fix needs a matching change in packaging/aur/t3code-nightly-bin/PKGBUILD (and t3code-bin): set StartupWMClass, rename the launcher to com.t3tools.T3Code.desktop, or both.

Impact

Minor bug or occasional failure

Version or commit

0.1.8-nightly.20261107.4314. The relevant files are unchanged on main @ e455200.

Environment

Manjaro Linux (kernel 7.2.9), GNOME Shell 50.5, Wayland session, installed from the AUR package t3code-nightly-bin

Logs or stack traces

$ echo $XDG_CURRENT_DESKTOP $XDG_SESSION_TYPE
GNOME wayland

# Visible launcher installed by the AUR package
$ grep -E '^(Name|StartupWMClass)=' /usr/share/applications/t3code.desktop
Name=T3 Code Nightly
StartupWMClass=t3code

# Hidden entry the app rewrites on every launch (same id as the window)
$ cat ~/.local/share/applications/com.t3tools.T3Code.desktop
[Desktop Entry]
Type=Application
Name=T3 Code (Nightly)
Exec=/opt/t3code-nightly-bin/t3code %U
Icon=~/.local/share/icons/com.t3tools.T3Code.desktop.png
Terminal=false
NoDisplay=true
StartupNotify=false
MimeType=x-scheme-handler/t3code;

Screenshots, recordings, or supporting files

No response

Workaround

Local PKGBUILD edit in the t3code.desktop heredoc: change StartupWMClass=t3code to StartupWMClass=com.t3tools.T3Code (the #10895 direction). GNOME then matches the window to the visible launcher.

Alternative: patch resources/app.asar in prepare() to blank out the "NoDisplay=true", line in renderUrlHandlerDesktopEntry with 17 spaces (same length, so asar offsets stay valid; EnableEmbeddedAsarIntegrityValidation is disabled), and install the launcher as com.t3tools.T3Code.desktop. The user-local entry the app writes then becomes visible and can be pinned.

Activity

  1. added
    bugSomething is broken or behaving incorrectly.
    needs-triageIssue needs maintainer review and initial categorization.
    on Nov 7, 2026
  2. sungyongcho commented on Nov 10, 2026

    @sungyongcho

    Also reproduces with the official .deb (t3code 0.1.8, amd64) on Ubuntu 26.04, GNOME Shell 50.1, Wayland.

    • The package installs /usr/share/applications/t3code.desktop with Icon=t3code and StartupWMClass=t3code.
    • The running app sets CHROME_DESKTOP=com.t3tools.T3Code.desktop, so the window's app id is com.t3tools.T3Code.
    • GNOME matches the window to ~/.local/share/applications/com.t3tools.T3Code.desktop, the NoDisplay=true URL-handler entry the app rewrites on every launch. The window isn't grouped with the menu launcher and "Pin to Dash" is unavailable.

    So the fix needs to cover the .deb packaging too, not only the AUR PKGBUILD: either install the visible launcher as com.t3tools.T3Code.desktop, or set StartupWMClass=com.t3tools.T3Code.

    Workaround, confirmed on Ubuntu 26.04 / GNOME Shell 50.1 (Wayland): a user-level copy of the launcher with the matching StartupWMClass. After restarting T3 Code, the window groups with the launcher and "Pin to Dash" works. GNOME checks StartupWMClass before falling back to the desktop file id, and this copy isn't touched by package upgrades or the app's own rewrite:

    sed 's/^StartupWMClass=.*/StartupWMClass=com.t3tools.T3Code/' \
      /usr/share/applications/t3code.desktop > ~/.local/share/applications/t3code.desktop
    update-desktop-database ~/.local/share/applications
    
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething is broken or behaving incorrectly.needs-triageIssue needs maintainer review and initial categorization.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions