diff --git a/desktoppackage/contents/explorer/AppletDelegate.qml b/desktoppackage/contents/explorer/AppletDelegate.qml --- a/desktoppackage/contents/explorer/AppletDelegate.qml +++ b/desktoppackage/contents/explorer/AppletDelegate.qml @@ -48,10 +48,10 @@ onDragStarted: { kwindowsystem.showingDesktop = true; - main.preventWindowHide = true; + main.draggingWidget = true; } onDrop: { - main.preventWindowHide = false; + main.draggingWidget = false; } MouseArea { diff --git a/desktoppackage/contents/explorer/WidgetExplorer.qml b/desktoppackage/contents/explorer/WidgetExplorer.qml --- a/desktoppackage/contents/explorer/WidgetExplorer.qml +++ b/desktoppackage/contents/explorer/WidgetExplorer.qml @@ -37,16 +37,23 @@ width: Math.max(heading.paintedWidth, units.iconSizes.enormous * 2 + units.smallSpacing * 4 + units.gridUnit * 2) height: 800//Screen.height + opacity: draggingWidget ? 0.3 : 1 + property QtObject containment //external drop events can cause a raise event causing us to lose focus and //therefore get deleted whilst we are still in a drag exec() //this is a clue to the owning dialog that hideOnWindowDeactivate should be deleted //See https://bugs.kde.org/show_bug.cgi?id=332733 - property bool preventWindowHide: false + property bool preventWindowHide: draggingWidget || categoriesDialog.status !== PlasmaComponents.DialogStatus.Closed + || getWidgetsDialog.status !== PlasmaComponents.DialogStatus.Closed + + property bool outputOnly: draggingWidget property Item categoryButton + property bool draggingWidget: false + signal closed() onVisibleChanged: { @@ -136,27 +143,13 @@ widgetExplorer.widgetsModel.filterQuery = model.filterData widgetExplorer.widgetsModel.filterType = model.filterType } - onStatusChanged: { - if (status == PlasmaComponents.DialogStatus.Opening) { - main.preventWindowHide = true; - } else if (status == PlasmaComponents.DialogStatus.Closed) { - main.preventWindowHide = false; - } - } } PlasmaComponents.ModelContextMenu { id: getWidgetsDialog visualParent: getWidgetsButton // model set on first invocation onClicked: model.trigger() - onStatusChanged: { - if (status == PlasmaComponents.DialogStatus.Opening) { - main.preventWindowHide = true; - } else if (status == PlasmaComponents.DialogStatus.Closed) { - main.preventWindowHide = false; - } - } } /* PlasmaCore.Dialog { @@ -245,7 +238,6 @@ id: categoryButton text: i18nd("plasma_shell_org.kde.plasma.desktop", "Categories") onClicked: { - main.preventWindowHide = true; categoriesDialog.model = widgetExplorer.filterModel categoriesDialog.open(0, categoryButton.height) } @@ -349,7 +341,6 @@ iconSource: "get-hot-new-stuff" text: i18nd("plasma_shell_org.kde.plasma.desktop", "Get new widgets") onClicked: { - main.preventWindowHide = true; getWidgetsDialog.model = widgetExplorer.widgetsMenuActions getWidgetsDialog.open() } diff --git a/desktoppackage/contents/views/Desktop.qml b/desktoppackage/contents/views/Desktop.qml --- a/desktoppackage/contents/views/Desktop.qml +++ b/desktoppackage/contents/views/Desktop.qml @@ -146,6 +146,8 @@ sidePanelStack.item.forceActiveFocus(); } else if (sidePanelStack.state == "widgetExplorer"){ sidePanel.hideOnWindowDeactivate = Qt.binding(function() { return sidePanelStack.item && !sidePanelStack.item.preventWindowHide; }) + sidePanel.opacity = Qt.binding(function() { return sidePanelStack.item ? sidePanelStack.item.opacity : 1 }) + sidePanel.outputOnly = Qt.binding(function() { return sidePanelStack.item && sidePanelStack.item.outputOnly }) } else { sidePanel.hideOnWindowDeactivate = true; }