https://bugs.kde.org/show_bug.cgi?id=439137
--- Comment #10 from qydwhotm...@gmail.com --- I guess the window does change its WM_TRANSIENT_FOR property after its initialization if I add debug messages to the right places. I use a custom patch to add more debug information to KWin.(https://build.opensuse.org/package/view_file/home:fusionfuture:branches:KDE:Frameworks5/kwin5/enable-debug.patch?expand=1) Below are debug logs. =============Top-left START============= kwin_core: fetchTransient(): window() = 8388672 kwin_core: manage(): calling readTransientProperty(transientCookie) kwin_core: readTransientProperty(): transientFor.getTransientFor() returns False. "Dialogs <2>\u200E" kwin_core: verifyTransientFor(): new_transient_for == XCB_WINDOW_NONE and set is False. "Dialogs <2>\u200E" kwin_core: readTransientProperty(): (2)new_transient_for_id = 0 kwin_core: User timestamp, ASN: 10647473 kwin_core: User timestamp, final: KWin::X11lCient(0x5576a65c3b40, windowId=0x800040, caption="Dialogs <2>\u200E") : 10647473 kwin_core: Activation: Belongs to active application kwin_core: checkTransient(): m_originalTransientForId != w kwin_core: checkTransient(): m_originalTransientForId != w kwin_core: checkTransient(): m_originalTransientForId != w kwin_core: checkTransient(): m_originalTransientForId != w kwin_core: checkTransient(): m_originalTransientForId != w kwin_core: checkTransient(): m_originalTransientForId != w kwin_core: checkTransient(): m_originalTransientForId != w kwin_core: checkTransient(): m_originalTransientForId != w kwin_core: checkTransient(): m_originalTransientForId != w kwin_core: checkTransient(): m_originalTransientForId != w kwin_core: checkTransient(): m_originalTransientForId != w kwin_core: checkTransient(): m_originalTransientForId != w kwin_core: checkTransient(): m_originalTransientForId != w kwin_core: fetchTransient(): window() = 8388672 kwin_core: readTransient(): calling readTransientProperty(transientFor) kwin_core: readTransientProperty(): (1)new_transient_for_id = 8388612 kwin_core: readTransientProperty(): transientFor.getTransientFor() returns True. "Dialogs <2>\u200E" kwin_core: readTransientProperty(): (2)new_transient_for_id = 8388612 kwin_core: setTransient(): new_transient_for_id ( 8388612 ) != m_transientForId( 0 ) is True. kwin_core: setTransient(): m_transientForId != XCB_WINDOW_NONE && !groupTransient() is True. "Dialogs <2>\u200E" =============Top-left END============= It can be seen from the log and the source code that readTransient() is called by propertyNotifyEvent(xcb_property_notify_event_t *e), and the case is XCB_ATOM_WM_TRANSIENT_FOR. =============Center START============= kwin_core: fetchTransient(): window() = 8388759 kwin_core: manage(): calling readTransientProperty(transientCookie) kwin_core: readTransientProperty(): (1)new_transient_for_id = 8388612 kwin_core: readTransientProperty(): transientFor.getTransientFor() returns True. "Dialogs <2>\u200E" kwin_core: readTransientProperty(): (2)new_transient_for_id = 8388612 kwin_core: setTransient(): new_transient_for_id ( 8388612 ) != m_transientForId( 0 ) is True. kwin_core: setTransient(): m_transientForId != XCB_WINDOW_NONE && !groupTransient() is True. "Dialogs <2>\u200E" kwin_core: User timestamp, ASN: 10694350 kwin_core: User timestamp, final: KWin::X11Client(0x5576a6f708e0, windowId=0x800097, caption="Dialogs <2>\u200E", transientFor=KWin::X11Client(0x5576a664eed0, windowId=0x800004, caption="Dialogs")) : 10694350 kwin_core: Activation: Belongs to active application kwin_core: checkTransient(): m_originalTransientForId != w kwin_core: checkTransient(): m_originalTransientForId != w kwin_core: checkTransient(): m_originalTransientForId != w kwin_core: checkTransient(): m_originalTransientForId != w kwin_core: checkTransient(): m_originalTransientForId != w kwin_core: checkTransient(): m_originalTransientForId != w kwin_core: checkTransient(): m_originalTransientForId != w kwin_core: checkTransient(): m_originalTransientForId != w kwin_core: checkTransient(): m_originalTransientForId != w kwin_core: checkTransient(): m_originalTransientForId != w kwin_core: checkTransient(): m_originalTransientForId != w kwin_core: checkTransient(): m_originalTransientForId != w kwin_core: checkTransient(): m_originalTransientForId != w =============Center END============= Here, readTransient() is not called. -- You are receiving this mail because: You are watching all bug changes.