mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-03 00:15:21 +00:00
fix: 图标被异常移除
原因:开始拖动的时候没有获取图标的位置,在不移除的情况下找不到图标正确的位置,进而移除了图标 解决方案:在开始拖动图标的时候记录一下当前图标的位置,如果图标的位置没有被改变,拖动完成后会插入到之前的位置。 Log: 修复图标异常移除的问题 Bug: https://pms.uniontech.com/bug-view-129165.html Influence: 拖动图标的场景(特别是wayland环境下) Change-Id: Ic17730be4c17db527005ae52e181a196a11c0f80
This commit is contained in:
parent
9f1e7cd885
commit
f4a42d5e57
@ -440,22 +440,8 @@ void MainPanelControl::removeItem(DockItem *item)
|
||||
void MainPanelControl::moveItem(DockItem *sourceItem, DockItem *targetItem)
|
||||
{
|
||||
// get target index
|
||||
int idx = -1;
|
||||
if (targetItem->itemType() == DockItem::App)
|
||||
idx = m_appAreaSonLayout->indexOf(targetItem);
|
||||
else if (targetItem->itemType() == DockItem::Plugins){
|
||||
//因为日期时间插件大小和其他插件大小有异,为了设置边距,在各插件中增加了一层布局
|
||||
//因此有拖动图标时,需要从多的一层布局中判断是否相同插件而获取插件位置顺序
|
||||
for (int i = 0; i < m_pluginLayout->count(); ++i) {
|
||||
QLayout *layout = m_pluginLayout->itemAt(i)->layout();
|
||||
if (layout && layout->itemAt(0)->widget() == targetItem) {
|
||||
idx = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (targetItem->itemType() == DockItem::FixedPlugin)
|
||||
idx = m_fixedAreaLayout->indexOf(targetItem);
|
||||
else
|
||||
int idx = getItemIndex(targetItem);
|
||||
if (-1 == idx)
|
||||
return;
|
||||
|
||||
// remove old item
|
||||
@ -468,6 +454,31 @@ void MainPanelControl::moveItem(DockItem *sourceItem, DockItem *targetItem)
|
||||
insertItem(idx, sourceItem);
|
||||
}
|
||||
|
||||
int MainPanelControl::getItemIndex(DockItem *targetItem) const
|
||||
{
|
||||
if (!targetItem)
|
||||
return -1;
|
||||
|
||||
if (targetItem->itemType() == DockItem::App)
|
||||
return m_appAreaSonLayout->indexOf(targetItem);
|
||||
|
||||
if (targetItem->itemType() == DockItem::Plugins){
|
||||
//因为日期时间插件大小和其他插件大小有异,为了设置边距,在各插件中增加了一层布局
|
||||
//因此有拖动图标时,需要从多的一层布局中判断是否相同插件而获取插件位置顺序
|
||||
for (int i = 0; i < m_pluginLayout->count(); ++i) {
|
||||
QLayout *layout = m_pluginLayout->itemAt(i)->layout();
|
||||
if (layout && layout->itemAt(0)->widget() == targetItem) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (targetItem->itemType() == DockItem::FixedPlugin)
|
||||
return m_fixedAreaLayout->indexOf(targetItem);
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
void MainPanelControl::dragEnterEvent(QDragEnterEvent *e)
|
||||
{
|
||||
//拖拽图标到任务栏时,如果拖拽到垃圾箱插件图标widget上,则默认不允许拖拽,其他位置默认为允许拖拽
|
||||
@ -740,6 +751,7 @@ void MainPanelControl::startDrag(DockItem *dockItem)
|
||||
m_appDragWidget = appDrag->appDragWidget();
|
||||
|
||||
if (Utils::IS_WAYLAND_DISPLAY) {
|
||||
m_dragIndex = getItemIndex(dockItem);
|
||||
connect(m_appDragWidget, &AppDragWidget::requestRemoveSelf, this, [ = ](bool needDelete) {
|
||||
m_appDragWidget = nullptr;
|
||||
if (!item.isNull() && qobject_cast<AppItem *>(item)->isValid()) {
|
||||
|
@ -83,7 +83,9 @@ private:
|
||||
void resizeDesktopWidget();
|
||||
bool checkNeedShowDesktop();
|
||||
bool appIsOnDock(const QString &appDesktop);
|
||||
|
||||
|
||||
int getItemIndex(DockItem *targetItem) const;
|
||||
|
||||
protected:
|
||||
void dragMoveEvent(QDragMoveEvent *e) override;
|
||||
void dragEnterEvent(QDragEnterEvent *e) override;
|
||||
|
Loading…
x
Reference in New Issue
Block a user