diff options
author | Ken Moore <moorekou@gmail.com> | 2015-10-16 14:49:59 -0400 |
---|---|---|
committer | Ken Moore <moorekou@gmail.com> | 2015-10-16 14:49:59 -0400 |
commit | af742de80c460e981037858b69829b503bbdedbe (patch) | |
tree | 149f66ca4a26efa0946f70cb7d2cfb8e39efa43a /lumina-desktop | |
parent | Change some text on the "system monitor" desktop plugin: "Disk Usage" -> "Dis... (diff) | |
download | lumina-af742de80c460e981037858b69829b503bbdedbe.tar.gz lumina-af742de80c460e981037858b69829b503bbdedbe.tar.bz2 lumina-af742de80c460e981037858b69829b503bbdedbe.zip |
Convert the grid used for the desktop plugin system a little bit:
1) The "IconSize" used is the total size for a desktop item (width & height), rather than the actual size of the icon.
2) Change the saved value in the settings file to "GridSize" instead of IconSize.
3) Make the entire grid relate to this item size - ensuring grid alignment for both desktop items and desktop plugins.
4) Make sure to treat any manual "applauncher" plugins as desktop items for sizing/update purposes.
5) Save the plugin geometries in pixel coordinates instead of grid coordinates to accomodate for flexible grid sizes now.
6) Add another update rule for 0.8.6->0.8.7 (including 0.8.7-devel->0.8.7-release) which removed all the old saved desktop plugin geometries (since they are in the wrong coordinate system). This is a minor change because the update to 0.8.7 was already going to change all the plugins anyway.
Diffstat (limited to 'lumina-desktop')
-rw-r--r-- | lumina-desktop/LDesktop.cpp | 10 | ||||
-rw-r--r-- | lumina-desktop/LDesktopPluginSpace.cpp | 31 | ||||
-rw-r--r-- | lumina-desktop/LDesktopPluginSpace.h | 23 | ||||
-rw-r--r-- | lumina-desktop/LSession.cpp | 4 |
4 files changed, 39 insertions, 29 deletions
diff --git a/lumina-desktop/LDesktop.cpp b/lumina-desktop/LDesktop.cpp index 241302a4..15b09b8a 100644 --- a/lumina-desktop/LDesktop.cpp +++ b/lumina-desktop/LDesktop.cpp @@ -224,7 +224,7 @@ void LDesktop::InitDesktop(){ connect(bgWindow, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(ShowMenu(const QPoint&)) ); if(DEBUG){ qDebug() << "Create bgDesktop"; } bgDesktop = new LDesktopPluginSpace(bgWindow); //new QMdiArea(bgWindow); - bgDesktop->SetIconSize( settings->value(DPREFIX+"IconSize",64).toInt() ); + bgDesktop->SetIconSize( settings->value(DPREFIX+"GridSize",100).toInt() ); connect(bgDesktop, SIGNAL(PluginRemovedByUser(QString)), this, SLOT(RemoveDeskPlugin(QString)) ); connect(bgDesktop, SIGNAL(IncreaseIcons()), this, SLOT(IncreaseDesktopPluginIcons()) ); connect(bgDesktop, SIGNAL(DecreaseIcons()), this, SLOT(DecreaseDesktopPluginIcons()) ); @@ -372,21 +372,21 @@ void LDesktop::RemoveDeskPlugin(QString ID){ } void LDesktop::IncreaseDesktopPluginIcons(){ - int cur = settings->value(DPREFIX+"IconSize",64).toInt(); + int cur = settings->value(DPREFIX+"GridSize",100).toInt(); cur+=16; issyncing=true; //don't let the change cause a refresh - settings->setValue(DPREFIX+"IconSize",cur); + settings->setValue(DPREFIX+"GridSize",cur); settings->sync(); QTimer::singleShot(200, this, SLOT(UnlockSettings()) ); bgDesktop->SetIconSize(cur); } void LDesktop::DecreaseDesktopPluginIcons(){ - int cur = settings->value(DPREFIX+"IconSize",64).toInt(); + int cur = settings->value(DPREFIX+"GridSize",100).toInt(); if(cur<32){ return; } //cannot get smaller than 16x16 cur-=16; issyncing=true; //don't let the change cause a refresh - settings->setValue(DPREFIX+"IconSize",cur); + settings->setValue(DPREFIX+"GridSize",cur); settings->sync(); QTimer::singleShot(200, this, SLOT(UnlockSettings()) ); bgDesktop->SetIconSize(cur); diff --git a/lumina-desktop/LDesktopPluginSpace.cpp b/lumina-desktop/LDesktopPluginSpace.cpp index 3b1c97ba..2c9bea12 100644 --- a/lumina-desktop/LDesktopPluginSpace.cpp +++ b/lumina-desktop/LDesktopPluginSpace.cpp @@ -23,6 +23,7 @@ LDesktopPluginSpace::LDesktopPluginSpace(QWidget *parent) : QWidget(parent){ this->setContextMenuPolicy(Qt::NoContextMenu); this->setMouseTracking(true); TopToBottom = true; + GRIDSIZE = 100.0; //default value if not set plugsettings = LSession::handle()->DesktopPluginSettings(); } @@ -41,8 +42,9 @@ void LDesktopPluginSpace::LoadItems(QStringList plugs, QStringList files){ void LDesktopPluginSpace::SetIconSize(int size){ if(DEBUG){ qDebug() << "Set Desktop Icon Size:" << size; } - QSize newsize = calculateItemSize(size); - itemSize = newsize; //save this for all the later icons which are generated (grid size) + //QSize newsize = calculateItemSize(size); + GRIDSIZE = size; //turn the int into a float; + itemSize = QSize(1,1); //save this for all the later icons which are generated (grid size) UpdateGeom(); //Now re-set the item icon size reloadPlugins(true); @@ -88,11 +90,12 @@ void LDesktopPluginSpace::addDesktopPlugin(QString plugID){ LDPlugin *plug = NewDP::createPlugin(plugID, this); plug->setWhatsThis(plugID); //Now get the geometry for the plugin - QRect geom = plug->loadPluginGeometry(); //in grid coords + QRect geom = plug->loadPluginGeometry(); //in pixel coords + if(!geom.isNull()){ geom = geomToGrid(geom); } //convert to grid coordinates if(geom.isNull()){ //No previous location - need to calculate initial geom QSize sz = plug->sizeHint(); - if(plugID.startsWith("applauncher::") ){ sz = itemSize*GRIDSIZE; } + if(plugID.startsWith("applauncher") ){ sz = itemSize*GRIDSIZE; } geom.setWidth( RoundUp(sz.width()/GRIDSIZE) ); geom.setHeight( RoundUp(sz.height()/GRIDSIZE) ); geom.moveTo( findOpenSpot(geom.width(), geom.height()) ); @@ -191,24 +194,22 @@ void LDesktopPluginSpace::reloadPlugins(bool ForceIconUpdate ){ QStringList plugs = plugins; QStringList items = deskitems; for(int i=0; i<ITEMS.length(); i++){ - if(plugs.contains(ITEMS[i]->whatsThis())){ plugs.removeAll(ITEMS[i]->whatsThis()); } - else if(ITEMS[i]->whatsThis().contains("---dlink") && items.contains(ITEMS[i]->whatsThis().section("---",0,0).section("::",1,50)) ){ - //Account for the variation in the Plugin ID for desktop files - if(ForceIconUpdate){ + + if( ITEMS[i]->whatsThis().startsWith("applauncher") && ForceIconUpdate){ //Change the size of the existing plugin - preserving the location if possible - QRect geom = ITEMS[i]->loadPluginGeometry(); + QRect geom = ITEMS[i]->loadPluginGeometry(); //pixel coords if(!geom.isNull()){ + geom = geomToGrid(geom); //convert to grid coords geom.setSize(itemSize); //Reset back to default size (does not change location) - ITEMS[i]->savePluginGeometry(geom); + ITEMS[i]->savePluginGeometry( gridToGeom(geom)); //save it back in pixel coords } //Now remove the plugin for the moment - run it through the re-creation routine below delete ITEMS.takeAt(i); i--; - }else{ - items.removeAll(ITEMS[i]->whatsThis().section("---",0,0).section("::",1,50)); - } - - }else{ ITEMS[i]->removeSettings(true); delete ITEMS.takeAt(i); i--; } //this is considered a permanent removal (cleans settings) + } + else if(plugs.contains(ITEMS[i]->whatsThis())){ plugs.removeAll(ITEMS[i]->whatsThis()); } + else if(items.contains(ITEMS[i]->whatsThis().section("---",0,0).section("::",1,50))){ items.removeAll(ITEMS[i]->whatsThis().section("---",0,0).section("::",1,50)); } + else{ ITEMS[i]->removeSettings(true); delete ITEMS.takeAt(i); i--; } //this is considered a permanent removal (cleans settings) } //Now create any new items diff --git a/lumina-desktop/LDesktopPluginSpace.h b/lumina-desktop/LDesktopPluginSpace.h index 842999b3..2a0f97a3 100644 --- a/lumina-desktop/LDesktopPluginSpace.h +++ b/lumina-desktop/LDesktopPluginSpace.h @@ -21,7 +21,7 @@ #define MIMETYPE QString("x-special/lumina-desktop-plugin") //#define MIMEPOS QString("x-special/lumina-desktop-plugin-pos") -#define GRIDSIZE 16.0 //Need this to be a double/float - usually used for divisions +//#define GRIDSIZE 64.0 //Need this to be a double/float - usually used for divisions class LDesktopPluginSpace : public QWidget{ Q_OBJECT @@ -50,6 +50,7 @@ private: QStringList plugins, deskitems; QList<LDPlugin*> ITEMS; bool TopToBottom; + float GRIDSIZE; int RoundUp(double num){ int out = num; //This will truncate the number @@ -80,12 +81,13 @@ private: //This function incorporates the bottom/right edge matchins procedures (for incomplete last grid) QRect geom(grid.x()*GRIDSIZE, grid.y()*GRIDSIZE, grid.width()*GRIDSIZE, grid.height()*GRIDSIZE); //Now check the edge conditions (last right/bottom grid points might be smaller than GRIDSIZE) - //qDebug() << "GridToGeom:" << grid << geom; - if(geom.right() > this->geometry().right() && (geom.right() -this->geometry().right())<GRIDSIZE ){ - geom.setRight(this->geometry().right()); //match up with the edge + QSize areaSize = this->size(); //use the size of the area instead of the geometry - because we need this in child coordinates like "geom" above + //qDebug() << "GridToGeom:" << grid << geom << "Area size:" << areaSize; + if(geom.right() > areaSize.width() && (geom.right()-areaSize.width())<GRIDSIZE ){ + geom.setRight(areaSize.width()-1); //match up with the edge } - if(geom.bottom() > this->geometry().bottom() && (geom.bottom() -this->geometry().bottom())<GRIDSIZE ){ - geom.setBottom(this->geometry().bottom()); //match up with the edge + if(geom.bottom() > areaSize.height() && (geom.bottom() -areaSize.height())<GRIDSIZE ){ + geom.setBottom(areaSize.height()-1); //match up with the edge } //qDebug() << " - Adjusted:" << geom; return geom; @@ -171,13 +173,16 @@ protected: QPoint diff = grid - posToGrid(geom.center()); //difference in grid coords //qDebug() << "Move Event:" << "Diff:" << diff << "Geom:" << geom << grid << ev->pos(); geom = geomToGrid(geom); //convert to grid coords + //qDebug() << "Move Event:" << "Old geom (grid):" << geom; geom.moveTo( (geom.topLeft()+diff) ); + //qDebug() << " - After Move:" << geom; geom = gridToGeom(geom); //convert back to px coords with edge matching - //qDebug() << " - Setting Geometry:" << geom; + //qDebug() << " - new Geometry:" << geom; if(ValidGeometry(act.section("::::",1,50), geom)){ + //qDebug() << " - Is valid"; item->setGeometry(geom); ev->acceptProposedAction(); - item->savePluginGeometry(geomToGrid(geom)); + item->savePluginGeometry(geom); //save in pixel coords }else{ ev->ignore(); } //invalid location }else{ @@ -197,7 +202,7 @@ protected: if(ValidGeometry(act.section("::::",1,50), geom)){ item->setGeometry(geom); ev->acceptProposedAction(); - item->savePluginGeometry(geomToGrid(geom)); + item->savePluginGeometry(geom); //save in pixel coords }else{ ev->ignore(); } //invalid location } } diff --git a/lumina-desktop/LSession.cpp b/lumina-desktop/LSession.cpp index 145ac992..cd78cce2 100644 --- a/lumina-desktop/LSession.cpp +++ b/lumina-desktop/LSession.cpp @@ -414,6 +414,10 @@ void LSession::checkUserFiles(){ } } dset.sync(); + //Due to the grid size change for desktop plugins, need to remove any old plugin geometries + if(QFile::exists(QDir::homePath()+"/.lumina/pluginsettings/desktopsettings.conf")){ + QFile::remove(QDir::homePath()+"/.lumina/pluginsettings/desktopsettings.conf"); + } } //Convert to the XDG autostart spec as necessary (Change occured with 0.8.5) |