Skip to content

Commit 5a91b12

Browse files
committed
fix docking drag drop problem on Linux wayland
1 parent eb22a9a commit 5a91b12

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
@@ -190,27 +190,32 @@ struct DockOverlayCrossPrivate
190190
}
191191

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

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

206210
int Area = l->property("dockWidgetArea").toInt();
207211
l->setPixmap(createHighDpiDropIndicatorPixmap(size, (DockWidgetArea)Area, Mode));
208-
}
212+
}
209213

210-
//============================================================================
211-
QPixmap createHighDpiDropIndicatorPixmap(const QSizeF& size, DockWidgetArea DockWidgetArea,
212-
CDockOverlay::eMode Mode)
213-
{
214+
//============================================================================
215+
QPixmap createHighDpiDropIndicatorPixmap(const QSizeF& size,
216+
DockWidgetArea DockWidgetArea,
217+
CDockOverlay::eMode Mode)
218+
{
214219
QColor borderColor = iconColor(CDockOverlayCross::FrameColor);
215220
QColor backgroundColor = iconColor(CDockOverlayCross::WindowBackgroundColor);
216221
QColor overlayColor = iconColor(CDockOverlayCross::OverlayColor);
@@ -404,7 +409,7 @@ CDockOverlay::CDockOverlay(QWidget* parent, eMode Mode) :
404409
d->Mode = Mode;
405410
d->Cross = new CDockOverlayCross(this);
406411
#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)
407-
setWindowFlags(Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint);
412+
setWindowFlags(Qt::ToolTip | Qt::X11BypassWindowManagerHint);
408413
#else
409414
setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);
410415
#endif
@@ -739,7 +744,8 @@ CDockOverlayCross::CDockOverlayCross(CDockOverlay* overlay) :
739744
{
740745
d->DockOverlay = overlay;
741746
#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)
742-
setWindowFlags(Qt::Tool | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint);
747+
setWindowFlags(Qt::ToolTip | Qt::WindowStaysOnTopHint
748+
| Qt::X11BypassWindowManagerHint);
743749
#else
744750
setWindowFlags(Qt::Tool | Qt::FramelessWindowHint);
745751
#endif

src/FloatingDragPreview.cpp

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

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

0 commit comments

Comments
 (0)