diff --git a/src/FrameworkWidgetFactory.cpp b/src/FrameworkWidgetFactory.cpp index 631fc935..4b31ca8b 100644 --- a/src/FrameworkWidgetFactory.cpp +++ b/src/FrameworkWidgetFactory.cpp @@ -91,12 +91,6 @@ FloatingWindow *DefaultWidgetFactory::createFloatingWindow(Frame *frame, MainWin DropIndicatorOverlayInterface *DefaultWidgetFactory::createDropIndicatorOverlay(DropArea *dropArea) const { - if (isWayland() && s_dropIndicatorType == DropIndicatorType::Classic) { - qWarning() << Q_FUNC_INFO << "Classical indicators aren't supported on Wayland yet." - << "Falling back to Segmented Indicators"; - s_dropIndicatorType = DropIndicatorType::Segmented; - } - switch (s_dropIndicatorType) { case DropIndicatorType::Classic: return new ClassicIndicators(dropArea); diff --git a/src/private/WindowBeingDragged.cpp b/src/private/WindowBeingDragged.cpp index fb16dfa0..d9a77be5 100644 --- a/src/private/WindowBeingDragged.cpp +++ b/src/private/WindowBeingDragged.cpp @@ -221,7 +221,7 @@ QPixmap WindowBeingDraggedWayland::pixmap() const { QPixmap pixmap(size()); QPainter p(&pixmap); - p.setOpacity(0.8); + p.setOpacity(0.7); if (m_floatingWindow) { m_floatingWindow->render(&p); diff --git a/src/private/indicators/ClassicIndicators.cpp b/src/private/indicators/ClassicIndicators.cpp index 22d7e1e4..da009e3b 100644 --- a/src/private/indicators/ClassicIndicators.cpp +++ b/src/private/indicators/ClassicIndicators.cpp @@ -197,7 +197,10 @@ void ClassicIndicators::setDropLocation(ClassicIndicators::DropLocation location void ClassicIndicators::updateWindowPosition() { QRect rect = this->rect(); - QPoint pos = mapToGlobal(QPoint(0, 0)); - rect.moveTo(pos); + if (m_indicatorWindow->isWindow()) { + // On all non-wayland platforms it's a top-level. + QPoint pos = mapToGlobal(QPoint(0, 0)); + rect.moveTo(pos); + } m_indicatorWindow->setGeometry(rect); } diff --git a/src/private/indicators/ClassicIndicatorsWindow.cpp b/src/private/indicators/ClassicIndicatorsWindow.cpp index 0e2dfbec..a3ab0b50 100644 --- a/src/private/indicators/ClassicIndicatorsWindow.cpp +++ b/src/private/indicators/ClassicIndicatorsWindow.cpp @@ -101,8 +101,22 @@ QString Indicator::iconFileName(bool active) const : QStringLiteral(":/img/classic_indicators/opaque/%1.png").arg(name); } +static QWidgetAdapter* parentForIndicatorWindow(ClassicIndicators *classicIndicators_) +{ + // On Wayland it can't be a top-level, as we have no way of positioning it + + return isWayland() ? classicIndicators_ + : nullptr; +} + +static Qt::WindowFlags flagsForIndicatorWindow() +{ + return isWayland() ? Qt::Widget + : (Qt::Tool | Qt::BypassWindowManagerHint); +} + IndicatorWindow::IndicatorWindow(ClassicIndicators *classicIndicators_) - : QWidget(nullptr, Qt::Tool | Qt::BypassWindowManagerHint) + : QWidget(parentForIndicatorWindow(classicIndicators_), flagsForIndicatorWindow()) , classicIndicators(classicIndicators_) , m_center(new Indicator(classicIndicators, this, DropIndicatorOverlayInterface::DropLocation_Center)) // Each indicator is not a top-level. Otherwise there's noticeable delay. , m_left(new Indicator(classicIndicators, this, DropIndicatorOverlayInterface::DropLocation_Left))