* the drop position is always relative to the containment; don't need to do store the scene pos. this fixes drops on panels
* allow drops on the toolbox, this gives is a place to drop things on the panel at all times, similar to the context menu on toolbox * small delay on showing the drop zone indicator so that when dragging into the tasks widget, for example, we don't end up flickering as it crosses the panel containment edge svn path=/trunk/KDE/kdelibs/; revision=1039186
This commit is contained in:
parent
242868a972
commit
c765e808a7
@ -1167,21 +1167,44 @@ void Containment::dragEnterEvent(QGraphicsSceneDragDropEvent *event)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event->isAccepted() && view()) {
|
if (event->isAccepted()) {
|
||||||
showDropZone(view()->mapFromScene(event->scenePos()));
|
if (!d->showDropZoneDelayTimer) {
|
||||||
|
d->showDropZoneDelayTimer = new QTimer(this);
|
||||||
|
d->showDropZoneDelayTimer->setInterval(300);
|
||||||
|
d->showDropZoneDelayTimer->setSingleShot(true);
|
||||||
|
connect(d->showDropZoneDelayTimer, SIGNAL(timeout()), this, SLOT(showDropZoneDelayed()));
|
||||||
|
}
|
||||||
|
|
||||||
|
d->dropPoints.insert(0, event->pos());
|
||||||
|
d->showDropZoneDelayTimer->start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Containment::dragLeaveEvent(QGraphicsSceneDragDropEvent *event)
|
||||||
|
{
|
||||||
|
if (d->showDropZoneDelayTimer) {
|
||||||
|
d->showDropZoneDelayTimer->stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ContainmentPrivate::showDropZoneDelayed()
|
||||||
|
{
|
||||||
|
q->showDropZone(dropPoints.value(0).toPoint());
|
||||||
|
dropPoints.remove(0);
|
||||||
|
}
|
||||||
|
|
||||||
void Containment::dragMoveEvent(QGraphicsSceneDragDropEvent *event)
|
void Containment::dragMoveEvent(QGraphicsSceneDragDropEvent *event)
|
||||||
{
|
{
|
||||||
QGraphicsItem *item = scene()->itemAt(event->scenePos());
|
QGraphicsItem *item = scene()->itemAt(event->scenePos());
|
||||||
event->setAccepted(item == this || !item);
|
event->setAccepted(item == this || item == d->toolBox || !item);
|
||||||
Plasma::Containment *c = containment();
|
if (!event->isAccepted()) {
|
||||||
if (c && c->immutability() == Plasma::Mutable &&
|
if (d->showDropZoneDelayTimer) {
|
||||||
(event->mimeData()->hasFormat(static_cast<Plasma::Corona*>(scene())->appletMimeType()) ||
|
d->showDropZoneDelayTimer->stop();
|
||||||
KUrl::List::canDecode(event->mimeData())) && view()) {
|
}
|
||||||
showDropZone(view()->mapFromScene(event->scenePos()));
|
} else if (!d->showDropZoneDelayTimer->isActive() && immutability() == Plasma::Mutable) {
|
||||||
}
|
kDebug() << event->pos().toPoint();
|
||||||
|
showDropZone(event->pos().toPoint());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Containment::dropEvent(QGraphicsSceneDragDropEvent *event)
|
void Containment::dropEvent(QGraphicsSceneDragDropEvent *event)
|
||||||
@ -1250,7 +1273,7 @@ void ContainmentPrivate::dropData(QPointF scenePos, QPoint screenPos, QGraphicsS
|
|||||||
foreach (const KUrl &url, urls) {
|
foreach (const KUrl &url, urls) {
|
||||||
if (AccessManager::supportedProtocols().contains(url.protocol())) {
|
if (AccessManager::supportedProtocols().contains(url.protocol())) {
|
||||||
AccessAppletJob *job = AccessManager::self()->accessRemoteApplet(url);
|
AccessAppletJob *job = AccessManager::self()->accessRemoteApplet(url);
|
||||||
dropPoints[job] = dropEvent->scenePos();
|
dropPoints[job] = dropEvent->pos();
|
||||||
QObject::connect(AccessManager::self(), SIGNAL(finished(Plasma::AccessAppletJob*)),
|
QObject::connect(AccessManager::self(), SIGNAL(finished(Plasma::AccessAppletJob*)),
|
||||||
q, SLOT(remoteAppletReady(Plasma::AccessAppletJob*)));
|
q, SLOT(remoteAppletReady(Plasma::AccessAppletJob*)));
|
||||||
} else {
|
} else {
|
||||||
@ -1270,7 +1293,7 @@ void ContainmentPrivate::dropData(QPointF scenePos, QPoint screenPos, QGraphicsS
|
|||||||
// It may be a directory or a file, let's stat
|
// It may be a directory or a file, let's stat
|
||||||
KIO::JobFlags flags = KIO::HideProgressInfo;
|
KIO::JobFlags flags = KIO::HideProgressInfo;
|
||||||
KIO::TransferJob *job = KIO::get(url, KIO::NoReload, flags);
|
KIO::TransferJob *job = KIO::get(url, KIO::NoReload, flags);
|
||||||
dropPoints[job] = dropEvent->scenePos();
|
dropPoints[job] = dropEvent->pos();
|
||||||
QObject::connect(job, SIGNAL(result(KJob*)), q, SLOT(dropJobResult(KJob*)));
|
QObject::connect(job, SIGNAL(result(KJob*)), q, SLOT(dropJobResult(KJob*)));
|
||||||
QObject::connect(job, SIGNAL(mimetype(KIO::Job *, const QString&)),
|
QObject::connect(job, SIGNAL(mimetype(KIO::Job *, const QString&)),
|
||||||
q, SLOT(mimeTypeRetrieved(KIO::Job *, const QString&)));
|
q, SLOT(mimeTypeRetrieved(KIO::Job *, const QString&)));
|
||||||
|
@ -547,6 +547,12 @@ class PLASMA_EXPORT Containment : public Applet
|
|||||||
*/
|
*/
|
||||||
void dragEnterEvent(QGraphicsSceneDragDropEvent *event);
|
void dragEnterEvent(QGraphicsSceneDragDropEvent *event);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @reimp
|
||||||
|
* @sa QGraphicsItem::dragLeaveEvent()
|
||||||
|
*/
|
||||||
|
void dragLeaveEvent(QGraphicsSceneDragDropEvent *event);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @reimp
|
* @reimp
|
||||||
* @sa QGraphicsItem::dragMoveEvent()
|
* @sa QGraphicsItem::dragMoveEvent()
|
||||||
@ -597,7 +603,7 @@ class PLASMA_EXPORT Containment : public Applet
|
|||||||
Q_PRIVATE_SLOT(d, void zoomOut())
|
Q_PRIVATE_SLOT(d, void zoomOut())
|
||||||
Q_PRIVATE_SLOT(d, void requestConfiguration())
|
Q_PRIVATE_SLOT(d, void requestConfiguration())
|
||||||
Q_PRIVATE_SLOT(d, void updateToolBoxVisibility())
|
Q_PRIVATE_SLOT(d, void updateToolBoxVisibility())
|
||||||
|
Q_PRIVATE_SLOT(d, void showDropZoneDelayed())
|
||||||
Q_PRIVATE_SLOT(d, void remoteAppletReady(Plasma::AccessAppletJob *))
|
Q_PRIVATE_SLOT(d, void remoteAppletReady(Plasma::AccessAppletJob *))
|
||||||
/**
|
/**
|
||||||
* This slot is called when the 'stat' after a job event has finished.
|
* This slot is called when the 'stat' after a job event has finished.
|
||||||
|
@ -51,6 +51,7 @@ public:
|
|||||||
toolBox(0),
|
toolBox(0),
|
||||||
con(0),
|
con(0),
|
||||||
type(Containment::NoContainmentType),
|
type(Containment::NoContainmentType),
|
||||||
|
showDropZoneDelayTimer(0),
|
||||||
drawWallpaper(true)
|
drawWallpaper(true)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -138,6 +139,13 @@ public:
|
|||||||
*/
|
*/
|
||||||
bool showAppletContextMenu(Applet *applet, const QPoint &screenPos);
|
bool showAppletContextMenu(Applet *applet, const QPoint &screenPos);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delayed drop zone display
|
||||||
|
*/
|
||||||
|
void showDropZoneDelayed();
|
||||||
|
|
||||||
|
static bool s_positioning;
|
||||||
|
|
||||||
Containment *q;
|
Containment *q;
|
||||||
FormFactor formFactor;
|
FormFactor formFactor;
|
||||||
Location location;
|
Location location;
|
||||||
@ -151,10 +159,10 @@ public:
|
|||||||
AbstractToolBox *toolBox;
|
AbstractToolBox *toolBox;
|
||||||
Context *con;
|
Context *con;
|
||||||
Containment::Type type;
|
Containment::Type type;
|
||||||
static bool s_positioning;
|
|
||||||
bool drawWallpaper;
|
|
||||||
QHash<KJob*, QPointF> dropPoints;
|
QHash<KJob*, QPointF> dropPoints;
|
||||||
QHash<KJob*, KMenu*> dropMenus;
|
QHash<KJob*, KMenu*> dropMenus;
|
||||||
|
QTimer *showDropZoneDelayTimer;
|
||||||
|
bool drawWallpaper;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // Plasma namespace
|
} // Plasma namespace
|
||||||
|
Loading…
x
Reference in New Issue
Block a user