From kde-commits Fri Dec 31 21:39:08 2010 From: Pino Toscano Date: Fri, 31 Dec 2010 21:39:08 +0000 To: kde-commits Subject: extragear/utils/kpager Message-Id: <20101231213908.10AF1AC8AE () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=129383157512852 SVN commit 1210514 by pino: port the custom drag code to the qt4 way - turn PagerWindowDrag into a simple namespace, and make the former c'tor a function to populate the QMimeData - canDecode/decode: just use QMimeData, instead of use the drag events ... because of this, manually accept() the event on drop - create a QDrag object and fill it with mime data, pixmap and hostspot information - remove few unnecessary includes M +13 -6 desktop.cpp M +8 -12 windowdrag.cpp M +8 -14 windowdrag.h --- trunk/extragear/utils/kpager/desktop.cpp #1210513:1210514 @@ -290,17 +290,20 @@ int deltax=dragpos.x(); int deltay=dragpos.y(); - PagerWindowDrag *wdrag= new PagerWindowDrag( info->win(), deltax, deltay, - m_desk, this); - wdrag->setPixmap( *pixmap, QPoint( deltax, deltay) ); + QDrag *drag = new QDrag(this); + QMimeData *mimeData = new QMimeData; + PagerWindowDrag::populateMimeData(mimeData, info->win(), deltax, deltay, m_desk); + drag->setMimeData(mimeData); + drag->setPixmap(*pixmap); + drag->setHotSpot(QPoint(deltax, deltay)); delete pixmap; - wdrag->dragCopy(); + drag->exec(); } void Desktop::dragEnterEvent(QDragEnterEvent *ev) { - if (PagerWindowDrag::canDecode( ev )) ev->accept(); + if (PagerWindowDrag::canDecode(ev->mimeData())) ev->accept(); } void Desktop::dragMoveEvent(QDragMoveEvent *) @@ -315,7 +318,11 @@ WId win=0; int deltax,deltay; int origdesk; - if (!PagerWindowDrag::decode(ev,win,deltax,deltay,origdesk)) return; + if (!PagerWindowDrag::decode(ev->mimeData(),win,deltax,deltay,origdesk)) + { + ev->accept(); + return; + } int x=ev->pos().x()-deltax; int y=ev->pos().y()-deltay; --- trunk/extragear/utils/kpager/windowdrag.cpp #1210513:1210514 @@ -23,37 +23,33 @@ *************************************************************************/ +#include + #include #include "windowdrag.h" -PagerWindowDrag::PagerWindowDrag(WId w,int deltax,int deltay, int origdesk,QWidget *parent) - : Q3StoredDrag("application/x-kpager",parent,"windowdrag") +void PagerWindowDrag::populateMimeData(QMimeData *mimeData, WId w, int deltax, int deltay, int origdesk) { QString tmp; tmp.sprintf("%d %d %d %d", static_cast(w), deltax, deltay, origdesk); QByteArray data = tmp.toLatin1(); - setEncodedData(data); + mimeData->setData("application/x-kpager", data); } -PagerWindowDrag::~PagerWindowDrag() +bool PagerWindowDrag::canDecode(const QMimeData *mimeData) { + return mimeData->hasFormat("application/x-kpager"); } -bool PagerWindowDrag::canDecode (QDragMoveEvent *e) +bool PagerWindowDrag::decode(const QMimeData *mimeData, WId &w, int &deltax, int &deltay, int &origdesk) { - return e->provides("application/x-kpager"); -} - -bool PagerWindowDrag::decode( QDropEvent *e, WId &w,int &deltax,int &deltay,int &origdesk) -{ - QByteArray data=e->encodedData("application/x-kpager"); + QByteArray data = mimeData->data("application/x-kpager"); if (data.size()) { char *tmp=data.data(); sscanf(tmp,"%lu %d %d %d", &w, &deltax, &deltay, &origdesk); - e->accept(); return true; } return false; --- trunk/extragear/utils/kpager/windowdrag.h #1210513:1210514 @@ -24,21 +24,15 @@ #ifndef WINDOWDRAG_H #define WINDOWDRAG_H -#include -//Added by qt3to4: -#include -#include -#include +#include -class PagerWindowDrag : public Q3StoredDrag +class QMimeData; + +namespace PagerWindowDrag { -public: - PagerWindowDrag(WId w,int deltax,int deltay,int origdesk,QWidget *parent); - virtual ~PagerWindowDrag(); + void populateMimeData(QMimeData *mimeData, WId w, int deltax, int deltay, int origdesk); + bool canDecode(const QMimeData *mimeData); + bool decode(const QMimeData *mimeData, WId &w, int &deltax, int &deltay, int &origdesk); +} - static bool canDecode( QDragMoveEvent *e); - static bool decode ( QDropEvent *e, WId &w,int &deltax,int &deltay,int &origdesk); - -}; - #endif