[events] Update Layer when WMWindowType changes
AbandonedPublic

Authored by broulik on Dec 10 2019, 9:12 AM.

Details

Reviewers
None
Group Reviewers
KWin
Summary

When changing window flags, any custom window type is removed by Qt because it doesn't know them.
So in case of e.g. Notification windows, they turn into regular windows, and then Plasma Dialog re-applies the proprietary window type. This confuses KWin about the stacking order and the window disappears behind other windows.

Test Plan

I can unset WindowDoesNotAcceptFocus in a NotificationType window without KWin getting confused now

Tried with

import QtQuick 2.2
import QtQuick.Controls 2.2 as QtControls

import org.kde.plasma.core 2.0 as PlasmaCore

Item {
    PlasmaCore.Dialog {
        id: dialog
        width: 640
        height: 480
        type: PlasmaCore.Dialog.Notification
        flags: Qt.WindowDoesNotAcceptFocus
        location: PlasmaCore.Types.Floating
        visible: true

        Column {
            QtControls.CheckBox {
                text: "Don't accept focus"
                checked: dialog.flags & Qt.WindowDoesNotAcceptFocus
                onToggled: {
                    if (checked) {
                        dialog.flags |= Qt.WindowDoesNotAcceptFocus;
                    } else {
                        dialog.flags &= ~Qt.WindowDoesNotAcceptFocus;
                    }
                }
            }

            QtControls.TextField {
                placeholderText: "Try typing here"
            }
        }
    }
}

Try typing, doesn't work, uncheck checkbox, focus a window behind it, the popup shouldnt disappear behind the other window

Diff Detail

Repository
R108 KWin
Lint
Lint Skipped
Unit
Unit Tests Skipped