Skip to content

Commit 3ea60f1

Browse files
committed
fix docking drag drop problem on Linux wayland
1 parent d92452a commit 3ea60f1

File tree

2 files changed

+28
-18
lines changed

2 files changed

+28
-18
lines changed

src/DockOverlay.cpp

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -188,27 +188,32 @@ struct DockOverlayCrossPrivate
188188
}
189189

190190
l->setPixmap(createHighDpiDropIndicatorPixmap(size, DockWidgetArea, Mode));
191+
#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)
192+
l->setWindowFlags(Qt::ToolTip);
193+
#else
191194
l->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);
192-
l->setAttribute(Qt::WA_TranslucentBackground);
193-
l->setProperty("dockWidgetArea", DockWidgetArea);
194-
return l;
195-
}
195+
#endif
196+
l->setAttribute(Qt::WA_TranslucentBackground);
197+
l->setProperty("dockWidgetArea", DockWidgetArea);
198+
return l;
199+
}
196200

197-
//============================================================================
198-
void updateDropIndicatorIcon(QWidget* DropIndicatorWidget)
199-
{
200-
QLabel* l = qobject_cast<QLabel*>(DropIndicatorWidget);
201+
//============================================================================
202+
void updateDropIndicatorIcon(QWidget* DropIndicatorWidget)
203+
{
204+
QLabel* l = qobject_cast<QLabel*>(DropIndicatorWidget);
201205
const qreal metric = dropIndicatiorWidth(l);
202206
const QSizeF size(metric, metric);
203207

204208
int Area = l->property("dockWidgetArea").toInt();
205209
l->setPixmap(createHighDpiDropIndicatorPixmap(size, (DockWidgetArea)Area, Mode));
206-
}
210+
}
207211

208-
//============================================================================
209-
QPixmap createHighDpiDropIndicatorPixmap(const QSizeF& size, DockWidgetArea DockWidgetArea,
210-
CDockOverlay::eMode Mode)
211-
{
212+
//============================================================================
213+
QPixmap createHighDpiDropIndicatorPixmap(const QSizeF& size,
214+
DockWidgetArea DockWidgetArea,
215+
CDockOverlay::eMode Mode)
216+
{
212217
QColor borderColor = iconColor(CDockOverlayCross::FrameColor);
213218
QColor backgroundColor = iconColor(CDockOverlayCross::WindowBackgroundColor);
214219
QColor overlayColor = iconColor(CDockOverlayCross::OverlayColor);
@@ -402,7 +407,7 @@ CDockOverlay::CDockOverlay(QWidget* parent, eMode Mode) :
402407
d->Mode = Mode;
403408
d->Cross = new CDockOverlayCross(this);
404409
#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)
405-
setWindowFlags(Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint);
410+
setWindowFlags(Qt::ToolTip | Qt::X11BypassWindowManagerHint);
406411
#else
407412
setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);
408413
#endif
@@ -737,7 +742,8 @@ CDockOverlayCross::CDockOverlayCross(CDockOverlay* overlay) :
737742
{
738743
d->DockOverlay = overlay;
739744
#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)
740-
setWindowFlags(Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint);
745+
setWindowFlags(Qt::ToolTip | Qt::WindowStaysOnTopHint
746+
| Qt::X11BypassWindowManagerHint);
741747
#else
742748
setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);
743749
#endif

src/FloatingDragPreview.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -289,9 +289,13 @@ CFloatingDragPreview::CFloatingDragPreview(QWidget* Content, QWidget* parent) :
289289
}
290290
else
291291
{
292-
setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);
293-
setAttribute(Qt::WA_NoSystemBackground);
294-
setAttribute(Qt::WA_TranslucentBackground);
292+
#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)
293+
setWindowFlags(Qt::ToolTip);
294+
#else
295+
setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);
296+
#endif
297+
setAttribute(Qt::WA_NoSystemBackground);
298+
setAttribute(Qt::WA_TranslucentBackground);
295299
}
296300

297301
#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)

0 commit comments

Comments
 (0)