use launcher new drag data interface

Change-Id: I73d5a67b58db46f52f25f3151c5c1b7766f8948b
This commit is contained in:
杨万青 2015-09-08 15:01:53 +08:00
parent f10f9cac6a
commit bfddee7d21
Notes: Deepin Code Review 2016-06-14 07:19:47 +00:00
Verified+1: Anonymous Coward #1000004
Code-Review+2: <ding465398889@163.com>
Submitted-by: <ding465398889@163.com>
Submitted-at: Tue, 08 Sep 2015 15:55:27 +0800
Reviewed-on: https://cr.deepin.io/6847
Project: dde/dde-dock
Branch: refs/heads/master
3 changed files with 32 additions and 27 deletions

View File

@ -80,17 +80,21 @@ void AppItem::dragEnterEvent(QDragEnterEvent *event)
{
onMouseLeave(); //enterEvent may be active along with the dragEnterEvent, so hide preview here
emit dragEntered(event);
AppItem *tmpItem = NULL;
tmpItem = dynamic_cast<AppItem *>(event->source());
if (tmpItem)
{
// qWarning()<< "[Info:]" << "Brother Item.";
AppItem *tmpItem = qobject_cast<AppItem *>(event->source());
if (tmpItem){ //from brother item
event->ignore();
emit dragEntered(event);
}
else
else if (event->mimeData()->formats().indexOf("RequestDock") != -1){ //from desktop or launcher
QJsonObject dataObj = QJsonDocument::fromJson(event->mimeData()->data("RequestDock")).object();
if (!dataObj.isEmpty() && !m_ddam->IsDocked(dataObj.value("appKey").toString())){
event->ignore();
emit dragEntered(event);
}
}
else //other files
{
event->setDropAction(Qt::MoveAction);
event->setDropAction(Qt::CopyAction);
event->accept();
}
}

View File

@ -23,6 +23,7 @@
#include "dbus/dbusclientmanager.h"
#include "controller/dockmodedata.h"
#include "interfaces/dockconstants.h"
#include "dbus/dbusdockedappmanager.h"
struct AppItemData {
QString id;
@ -91,6 +92,7 @@ private:
private:
AppItemData m_itemData;
DBusDockedAppManager *m_ddam = new DBusDockedAppManager(this);
DockModeData *m_dockModeData = DockModeData::instance();
DBusClientManager *m_clientmanager = NULL;
DBusEntryProxyer *m_entryProxyer = NULL;

View File

@ -112,8 +112,12 @@ int DockLayout::getContentsWidth()
for (int i = 0; i < m_appList.count(); i ++)
tmpWidth += m_appList.at(i)->width();
if (spacingItemIndex() != -1 && !m_dragItemMap.isEmpty() && m_dragItemMap.firstKey())
tmpWidth += m_dragItemMap.firstKey()->width() + m_itemSpacing;
if (spacingItemIndex() != -1){
if (!m_dragItemMap.isEmpty() && m_dragItemMap.firstKey())
tmpWidth += m_dragItemMap.firstKey()->width() + m_itemSpacing;
else //spacing add by launcher or desktop item drag enter
tmpWidth += DockModeData::instance()->getNormalItemWidth() + m_itemSpacing;
}
return tmpWidth;
}
@ -198,25 +202,17 @@ void DockLayout::dragEnterEvent(QDragEnterEvent *event)
void DockLayout::dropEvent(QDropEvent *event)
{
AbstractDockItem *sourceItem = dynamic_cast<AbstractDockItem *>(event->source());
AbstractDockItem *sourceItem = qobject_cast<AbstractDockItem *>(event->source());
if (!sourceItem && event->mimeData()->formats().indexOf("_DEEPIN_DND") != -1)
{
QString jsonStr = QString(event->mimeData()->data("_DEEPIN_DND")).split("uninstall").last().trimmed();
//Tim at both ends of the string is added to a character SOH (start of heading)
jsonStr = jsonStr.mid(1,jsonStr.length() - 2);
QJsonObject dataObj = QJsonDocument::fromJson(jsonStr.trimmed().toUtf8()).object();
if (dataObj.isEmpty() || m_ddam->IsDocked(dataObj.value("id").toString()))
{
//from desktop or launcher
if (!sourceItem && event->mimeData()->formats().indexOf("RequestDock") != -1){
QJsonObject dataObj = QJsonDocument::fromJson(event->mimeData()->data("RequestDock")).object();
if (dataObj.isEmpty() || m_ddam->IsDocked(dataObj.value("appKey").toString()))
relayout();
return;
}
m_ddam->ReqeustDock(dataObj.value("id").toString(),dataObj.value("name").toString(),dataObj.value("icon").toString(),"");
else
m_ddam->ReqeustDock(dataObj.value("appKey").toString(), "", "", "");
}
else if (sourceItem && event->mimeData()->formats().indexOf("_DEEPIN_DND") == -1)
else
restoreTmpItem();
}
@ -249,6 +245,9 @@ void DockLayout::slotItemRelease()
void DockLayout::slotItemEntered(QDragEnterEvent *)
{
//for launcher or desktop item drag enter
emit startDrag();
AbstractDockItem *item = qobject_cast<AbstractDockItem*>(sender());
int tmpIndex = indexOf(item);