diff options
author | Ken Moore <ken@ixsystems.com> | 2018-06-07 21:55:13 -0400 |
---|---|---|
committer | Ken Moore <ken@ixsystems.com> | 2018-06-07 21:55:13 -0400 |
commit | 47d4b080f9e4dbb94b71ef748d8eb8e7c042e5b7 (patch) | |
tree | ce09cff3eee79a2284bc7a0ce0e7fe5324b41b0a /src-qt5/core/lumina-desktop/desktop-plugins | |
parent | Remove the xscreensaver return code check, apparently it is now erratic regar... (diff) | |
download | lumina-47d4b080f9e4dbb94b71ef748d8eb8e7c042e5b7.tar.gz lumina-47d4b080f9e4dbb94b71ef748d8eb8e7c042e5b7.tar.bz2 lumina-47d4b080f9e4dbb94b71ef748d8eb8e7c042e5b7.zip |
Rip out the initialization of drag and drop on applauncher desktop plugins.
Have it move the plugin on the desktop instead, but it can also be "dropped" into applications and get used as a drag-n-drop operation.
Diffstat (limited to 'src-qt5/core/lumina-desktop/desktop-plugins')
3 files changed, 50 insertions, 41 deletions
diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/LDPlugin.h b/src-qt5/core/lumina-desktop/desktop-plugins/LDPlugin.h index 815ae9da..18eee1e6 100644 --- a/src-qt5/core/lumina-desktop/desktop-plugins/LDPlugin.h +++ b/src-qt5/core/lumina-desktop/desktop-plugins/LDPlugin.h @@ -29,7 +29,7 @@ class LDPlugin : public QFrame{ Q_OBJECT - + private: QString PLUGID, prefix; QSettings *settings; @@ -41,9 +41,9 @@ private: public: LDPlugin(QWidget *parent = 0, QString id="unknown"); - + ~LDPlugin(){} - + QString ID(){ return PLUGID; } @@ -51,46 +51,46 @@ public: void setContextMenu(QMenu *cmen){ contextM = cmen; } QMenu* contextMenu(){ return contextM; } - + virtual QSize defaultPluginSize(){ //This needs to be re-implemented in the subclassed plugin // The returned QSize is in grid points (typically 100 or 200 pixels square) return QSize(1,1); //1x1 grid size } - + void savePluginGeometry(QRect geom){ settings->setValue(prefix+"geometry/desktopGridPoints", geom); settings->sync(); } - + QRect loadPluginGeometry(){ - return settings->value(prefix+"geometry/desktopGridPoints", QRect()).toRect(); + return settings->value(prefix+"geometry/desktopGridPoints", QRect()).toRect(); } - + void saveSetting(QString var, QVariant val){ //qDebug() << "Saving Setting:" << prefix+var+QString(" = ")+val.toString(); settings->setValue(prefix+var, val); settings->sync(); } - + QVariant readSetting(QString var, QVariant defaultval){ return settings->value(prefix+var, defaultval); } - + virtual void Cleanup(){ //This needs to be re-implemented in the subclassed plugin //This is where any last-minute changes are performed before a plugin is removed permanently //Note1: This is *not* called if the plugin is being temporarily closed //Note2: All the settings for this plugin will be automatically removed after this is finished } - + void removeSettings(bool permanent = false){ //such as when a plugin is deleted if(permanent){ Cleanup(); } QStringList list = settings->allKeys().filter(prefix); for(int i=0; i<list.length(); i++){ settings->remove(list[i]); } - + } - + void setGridGeometry(QRect grid){ settings->setValue(prefix+"geometry/gridLocation", grid); } QRect gridGeometry(){ return settings->value(prefix+"geometry/gridLocation",QRect()).toRect(); } @@ -106,36 +106,36 @@ public slots: setupMenu(); } void showPluginMenu(); - + signals: void OpenDesktopMenu(); void CloseDesktopMenu(); void PluginResized(); void PluginActivated(); - + //Signals for communication with the desktop layout system (not generally used by hand) void StartMoving(QString); //ID of plugin void StartResizing(QString); //ID of plugin void RemovePlugin(QString); //ID of plugin void IncreaseIconSize(); // only used for desktop icons void DecreaseIconSize(); // only used for desktop icons - + private slots: - void slotStartMove(){ - QCursor::setPos( this->mapToGlobal(QPoint(this->width()/2, this->height()/2)) ); - emit StartMoving(PLUGID); + void slotStartMove(){ + QCursor::setPos( this->mapToGlobal(QPoint(this->width()/2, this->height()/2)) ); + emit StartMoving(PLUGID); } - - void slotStartResize(){ - QCursor::setPos( this->mapToGlobal(QPoint(this->width()/2, this->height()/2)) ); - emit StartResizing(PLUGID); + + void slotStartResize(){ + QCursor::setPos( this->mapToGlobal(QPoint(this->width()/2, this->height()/2)) ); + emit StartResizing(PLUGID); } - - void slotRemovePlugin(){ + + void slotRemovePlugin(){ removeSettings(true); - emit RemovePlugin(PLUGID); + emit RemovePlugin(PLUGID); } - + protected: void mousePressEvent(QMouseEvent *ev){ if(!dragTimer->isActive() && ev->buttons().testFlag(Qt::LeftButton) ){ dragTimer->start(); } @@ -146,9 +146,9 @@ protected: QWidget::mouseReleaseEvent(ev); } void mouseMoveEvent(QMouseEvent *ev){ - if(ev->buttons().testFlag(Qt::LeftButton)){ + if(ev->buttons().testFlag(Qt::LeftButton)){ if(dragTimer->isActive()){ dragTimer->stop(); } - slotStartMove(); + slotStartMove(); } QWidget::mouseMoveEvent(ev); } diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.cpp b/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.cpp index 218bc098..88f535de 100644 --- a/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.cpp +++ b/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.cpp @@ -153,6 +153,8 @@ void AppLauncherPlugin::loadButton(){ tmp = this->contextMenu()->addAction( tr("Delete"), this, SLOT(fileDelete()) ); ICONS->loadIcon(tmp, "document-close"); } + tmp = this->contextMenu()->addAction( tr("Drag to Application"), this, SLOT(startDragNDrop()) ); + ICONS->loadIcon(tmp, "edit-redo"); iconLoaded(iconID); //make sure the emblem is layered on top //If the file is a symlink, put the overlay on the icon /*if(info.isSymLink()){ @@ -240,6 +242,21 @@ void AppLauncherPlugin::iconLoaded(QString ico){ } } +void AppLauncherPlugin::startDragNDrop(){ + //Start the drag event for this file + QDrag *drag = new QDrag(this); + QMimeData *md = new QMimeData; + md->setUrls( QList<QUrl>() << QUrl::fromLocalFile(button->whatsThis()) ); + drag->setMimeData(md); + //Now perform the drag and react appropriately + Qt::DropAction dropAction = drag->exec(Qt::CopyAction | Qt::MoveAction); + if(dropAction == Qt::MoveAction){ + // File Moved, remove it from here + //qDebug() << "File Moved:" << button->whatsThis(); + //DO NOT DELETE FILES - return code often is wrong (browser drops for instance) + } +} + void AppLauncherPlugin::actionTriggered(QAction *act){ if(act->whatsThis().isEmpty()){ return; } QString path = button->whatsThis(); diff --git a/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.h b/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.h index 6cff4bf7..553fe1c5 100644 --- a/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.h +++ b/src-qt5/core/lumina-desktop/desktop-plugins/applauncher/AppLauncherPlugin.h @@ -53,6 +53,7 @@ private slots: //void increaseIconSize(); //void decreaseIconSize(); //void deleteFile(); + void startDragNDrop(); void actionTriggered(QAction *act); void openWith(); @@ -90,18 +91,9 @@ protected: void mouseMoveEvent(QMouseEvent *ev){ if( (ev->buttons() & Qt::LeftButton) ){ if((ev->pos() - dragstartpos).manhattanLength() > (this->width()/4) ){ - //Start the drag event for this file - QDrag *drag = new QDrag(this); - QMimeData *md = new QMimeData; - md->setUrls( QList<QUrl>() << QUrl::fromLocalFile(button->whatsThis()) ); - drag->setMimeData(md); - //Now perform the drag and react appropriately - Qt::DropAction dropAction = drag->exec(Qt::CopyAction | Qt::MoveAction); - if(dropAction == Qt::MoveAction){ - // File Moved, remove it from here - //qDebug() << "File Moved:" << button->whatsThis(); - //DO NOT DELETE FILES - return code often is wrong (browser drops for instance) - } + emit StartMoving(this->ID()); + }else if(false){ // + startDragNDrop(); } }else{ LDPlugin::mouseMoveEvent(ev); |