Bug 514758 - Taskbar does not show a normal window from a specific app (UTAU through Wine)
Summary: Taskbar does not show a normal window from a specific app (UTAU through Wine)
Status: CONFIRMED
Alias: None
Product: plasmashell
Classification: Plasma
Component: Task Manager and Icons-Only Task Manager widgets (other bugs)
Version First Reported In: 6.5.5
Platform: Arch Linux Linux
: NOR normal
Target Milestone: 1.0
Assignee: Plasma Bugs List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2026-01-17 19:49 UTC by Kisaragi Hiu
Modified: 2026-01-23 16:22 UTC (History)
3 users (show)

See Also:
Latest Commit:
Version Fixed/Implemented In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Kisaragi Hiu 2026-01-17 19:49:47 UTC
SUMMARY
When running UTAU (https://utau2008.xrea.jp/) through Wine on Plasma, its window does not show up in the taskbar. It does show up in the Alt-Tab switcher.

This has been the case ever since I started using Plasma around 2017~2018, possibly longer, but it's only ever been this one specific Windows app and, as far as I remember, only happened on Plasma. I do not know how to make this reproduction more minimum, and I'm opening this more to put it out in writing that this issue exists.

This issue exists in both Plasma (X11) and Plasma (Wayland).

STEPS TO REPRODUCE
I don't know how to make this more minimal, so unfortunately this kind of has to make do.
1. Download UTAU from https://utau2008.xrea.jp/ and install it into a wineprefix
2. Run it
3. Observe that its window is not present on the taskbar

OBSERVED RESULT
UTAU's window is skipped by the taskbar, but present in the Alt-Tab switcher

EXPECTED RESULT
UTAU's window, as a normal window, should show up on the taskbar.

SOFTWARE/OS VERSIONS
Operating System: Arch Linux 
KDE Plasma Version: 6.5.5
KDE Frameworks Version: 6.22.0
Qt Version: 6.10.1
Kernel Version: 6.12.65-1-lts (64-bit)
Graphics Platform: Wayland
Processors: 12 × AMD Ryzen 5 2600 Six-Core Processor
Memory: 16 GiB of RAM (15.5 GiB usable)
Graphics Processor: Intel® Arc 

ADDITIONAL INFORMATION
I dug into the code. The window is filtered out in plasma-workspace/libtaskmanager/taskfilterproxymodel.cpp[1], because it's determined to be a skipTaskbar window.
This explains why it does show up in the Alt-Tab switcher, but this window isn't supposed to be skipTaskbar. The window is an X window going through Xwayland so I can run xprop on it, which shows the window type is normal and does not mention being skipTaskbar.

In waylandtasksmodel.cpp[2] I can see that whether a window is skipTaskbar is judged in two ways:
    } else if (role == SkipTaskbar) {
        return window->windowState.testFlag(PlasmaWindow::state::state_skiptaskbar)
               || d->transients.contains(window);
    }
where a window is apparently first added into "transients" if it has a parent window[3]:
    // Handle transient.
    if (PlasmaWindow *leader = window->parentWindow.data()) {
        transients.insert(window, leader);
If I make it so that it shows all transients, then the window shows up as I expected, so this is a case where a window is being considered a "transient" when it shouldn't.

[1]: https://invent.kde.org/plasma/plasma-workspace/-/blob/d2b1b60976e3ac8572f75d33a4e1b7ee8520235a/libtaskmanager/taskfilterproxymodel.cpp#L331
[2]: https://invent.kde.org/plasma/plasma-workspace/-/blob/d2b1b60976e3ac8572f75d33a4e1b7ee8520235a/libtaskmanager/waylandtasksmodel.cpp#L942
[3]: https://invent.kde.org/plasma/plasma-workspace/-/blob/d2b1b60976e3ac8572f75d33a4e1b7ee8520235a/libtaskmanager/waylandtasksmodel.cpp#L769
Comment 1 Kisaragi Hiu 2026-01-17 20:06:37 UTC
Ah, I'm guessing this is the same issue as BUG 240517, which despite the NOT A BUG was actually closed because "Closing for lack of feedback" and with "Please feel free to reopen this report if you can still reproduce this with KDE 4.8.3 or later."

For some reason some Windows apps on Wine (including UTAU and various examples in BUG 240517) produce a setup where there is a parent invisible skipTaskbar window, then the actual main window is a child of that, and libtaskmanager's handling of this since apparently 16 years+ ago has been to skip the child window together with the parent window.

The child window has this xprop output:
_NET_WM_ALLOWED_ACTIONS(ATOM) = _NET_WM_ACTION_MOVE, _NET_WM_ACTION_RESIZE, _NET_WM_ACTION_MINIMIZE, _NET_WM_ACTION_MAXIMIZE_VERT, _NET_WM_ACTION_MAXIMIZE_HORZ, _NET_WM_ACTION_FULLSCREEN, _NET_WM_ACTION_CHANGE_DESKTOP, _NET_WM_ACTION_CLOSE
_KDE_NET_WM_FRAME_STRUT(CARDINAL) = 0, 0, 30, 0
_NET_FRAME_EXTENTS(CARDINAL) = 0, 0, 30, 0
_NET_WM_DESKTOP(CARDINAL) = 0
_KDE_NET_WM_ACTIVITIES(STRING) = "dc93f33b-acc6-40f7-8b04-734b0da0e781"
WM_STATE(WM_STATE):
                window state: Normal
                icon window: 0x0
_NET_WM_STATE(ATOM) = _NET_WM_STATE_FOCUSED
_KDE_NET_WM_USER_CREATION_TIME(CARDINAL) = 16542606
_NET_WM_NAME(UTF8_STRING) = "新規プロジェクト - This is UTAU, NOT VOCALOID!"
WM_ICON_NAME(COMPOUND_TEXT) = "新規プロジェクト - This is UTAU, NOT VOCALOID!"
WM_NAME(COMPOUND_TEXT) = "新規プロジェクト - This is UTAU, NOT VOCALOID!"
WM_HINTS(WM_HINTS):
                Client accepts input or input focus: False
                Initial state is Normal State.
                bitmap id # to use for icon: 0x1a00097
                bitmap id # of mask for icon: 0x1a00099
                window id # of group leader: 0x1c00003
_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_NORMAL
WM_TRANSIENT_FOR(WINDOW): window id # 0x1c00003
_MOTIF_WM_HINTS(_MOTIF_WM_HINTS) = 0x3, 0x3e, 0x7a, 0x0, 0x0
WM_NORMAL_HINTS(WM_SIZE_HINTS):
                program specified location: 379, 174
                window gravity: Static
XdndAware(ATOM) = BITMAP
_NET_WM_PID(CARDINAL) = 123567
WM_LOCALE_NAME(STRING) = "ja_JP.UTF-8"
WM_CLIENT_MACHINE(STRING) = "MF-PC"
WM_CLASS(STRING) = "utau.exe", "utau.exe"
WM_PROTOCOLS(ATOM): protocols  WM_DELETE_WINDOW, _NET_WM_PING, WM_TAKE_FOCUS

The parent window has this xprop output:
_NET_WM_ALLOWED_ACTIONS(ATOM) = _NET_WM_ACTION_MOVE, _NET_WM_ACTION_MINIMIZE, _NET_WM_ACTION_FULLSCREEN, _NET_WM_ACTION_CHANGE_DESKTOP, _NET_WM_ACTION_CLOSE
_NET_WM_DESKTOP(CARDINAL) = 0
WM_STATE(WM_STATE):
                window state: Normal
                icon window: 0x0
_NET_WM_USER_TIME(CARDINAL) = 0
_NET_WM_STATE(ATOM) = _NET_WM_STATE_DEMANDS_ATTENTION, _NET_WM_STATE_SKIP_TASKBAR, _NET_WM_STATE_SKIP_PAGER, _KDE_NET_WM_STATE_SKIP_SWITCHER
_NET_WM_NAME(UTF8_STRING) = "歌声合成ツール - UTAU"
WM_ICON_NAME(COMPOUND_TEXT) = "歌声合成ツール - UTAU"
WM_NAME(COMPOUND_TEXT) = "歌声合成ツール - UTAU"
WM_HINTS(WM_HINTS):
                Client accepts input or input focus: False
                Initial state is Normal State.
                bitmap id # to use for icon: 0x1a0001c
                bitmap id # of mask for icon: 0x1a0001e
                window id # of group leader: 0x1c00003
_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_NORMAL
_MOTIF_WM_HINTS(_MOTIF_WM_HINTS) = 0x3, 0x34, 0x0, 0x0, 0x0
WM_NORMAL_HINTS(WM_SIZE_HINTS):
                program specified location: 960, 540
                program specified minimum size: 1 by 1
                program specified maximum size: 1 by 1
                window gravity: Static
XdndAware(ATOM) = BITMAP
_NET_WM_PID(CARDINAL) = 123567
WM_LOCALE_NAME(STRING) = "ja_JP.UTF-8"
_KDE_NET_WM_USER_CREATION_TIME(CARDINAL) = 16542588
WM_CLIENT_MACHINE(STRING) = "MF-PC"
WM_CLASS(STRING) = "utau.exe", "utau.exe"
WM_PROTOCOLS(ATOM): protocols  WM_DELETE_WINDOW, _NET_WM_PING, WM_TAKE_FOCUS
Comment 2 Kisaragi Hiu 2026-01-17 21:33:21 UTC
This doesn't seem to be a wine issue, since Wine seems to simply map Windows's API function for removing an item from the taskbar directly to setting that window's skipTaskbar to true on X
https://gitlab.winehq.org/wine/wine/-/blob/905be521d322c85bb63b34ab9230b4bab791fb0b/dlls/winex11.drv/window.c#L3508
https://gitlab.winehq.org/search?search=DELETE_TAB&nav_source=navbar&project_id=5&group_id=10&search_code=true
https://learn.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-itaskbarlist-deletetab

Note how the parent window has a minimum and maximum size of 1x1.

I tried the first app from BUG 240517 and it does have the same issue (even now, 16 years later). (If anyone else wants to decide whether to keep this bug, or close this one in favor of reopening that one, I'm fine either way; but I'll keep investigating here for now.)
That app has the same behavior: parent window is skipTaskbar, 1x1 in size, isn't actually visible; child window is visible but is hidden in taskbar because it's treated as a transient window.

Seeing how there are several Win32 apps that are like this, this seems to be a bit of a convention, and it'd be nice if this is worked around.

I tried out a workaround patch that only excludes a window with a parent from the taskbar if that parent is not 1x1 in size, and it does help put the apps in the taskbar, but then the taskbar doesn't highlight them as active even when they appear to be.
The change to waylandtasksmodel.cpp (in WaylandTasksModel::data):
    } else if (role == SkipTaskbar) {
        // before:
        // return window->windowState.testFlag(PlasmaWindow::state::state_skiptaskbar)
        //       || d->transients.contains(window);
        return window->windowState.testFlag(PlasmaWindow::state::state_skiptaskbar)
               || (d->transients.contains(window)
                   // and not a 1x1 window
                   && !(d->transients.value(window)->geometry.height() == 1
                        && d->transients.value(window)->geometry.width() == 1));