void LDesktop::UpdateDesktop(){ if(DEBUG){ qDebug() << " - Update Desktop Plugins for screen:" << desktopnumber; } QStringList plugins = settings->value(DPREFIX+"pluginlist", QStringList()).toStringList(); if(defaultdesktop && plugins.isEmpty()){ //plugins << "sample" << "sample" << "sample"; } bool changed=false; //in case the plugin list needs to be changed //First make sure all the plugin names are unique for(int i=0; i<plugins.length(); i++){ if(!plugins[i].contains("---") ){ int num=1; while( plugins.contains(plugins[i]+"---"+QString::number(desktopnumber)+"."+QString::number(num)) ){ num++; } plugins[i] = plugins[i]+"---"+QString::number(desktopnumber)+"."+QString::number(num); changed=true; } } //Go through the plugins and remove any existing ones that do not show up on the current list for(int i=0; i<PLUGINS.length(); i++){ if(!plugins.contains(PLUGINS[i]->ID())){ //Remove this plugin (with settings) - is not currently listed DesktopPluginRemoved(PLUGINS[i]->ID()); i--; } } //Now add/update plugins for(int i=0; i<plugins.length(); i++){ //See if this plugin is already there LDPlugin *plug = 0; for(int p=0; p<PLUGINS.length(); p++){ //qDebug() << " -- Existing Plugin:" << PLUGINS[p]->ID() << p << PLUGINS.length(); if(PLUGINS[p]->ID()==plugins[i]){ //qDebug() << " -- Found Plugin"; plug = PLUGINS[p]; break; } } if(plug==0){ //New Plugin if(DEBUG){qDebug() << " -- New Plugin:" << plugins[i];} plug = NewDP::createPlugin(plugins[i], bgDesktop); if(plug != 0){ connect(plug, SIGNAL(OpenDesktopMenu()), this, SLOT(ShowMenu()) ); //qDebug() << " -- Show Plugin"; PLUGINS << plug; CreateDesktopPluginContainer(plug); } } } if(changed){ //save the modified plugin list to file (so per-plugin settings are preserved) issyncing=true; //don't let the change cause a refresh settings->setValue(DPREFIX+"pluginlist", plugins); settings->sync(); QTimer::singleShot(200, this, SLOT(UnlockSettings()) ); } }
void LDesktop::CreateDesktopPluginContainer(LDPlugin *plug){ //Verify that a container does not already exist for this plugin QList<QMdiSubWindow*> wins = bgDesktop->subWindowList(); for(int i=0; i<wins.length(); i++){ if(wins[i]->whatsThis()==plug->ID()){ return; } } //Create a new plugin container LDPluginContainer *win = new LDPluginContainer(plug, desktoplocked); if(desktoplocked){ bgDesktop->addSubWindow(win, Qt::FramelessWindowHint); } else{ bgDesktop->addSubWindow(win, Qt::CustomizeWindowHint | Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint); } win->adjustSize(); win->loadInitialPosition(); win->show(); win->update(); connect(win, SIGNAL(PluginRemoved(QString)), this, SLOT(DesktopPluginRemoved(QString)) ); }
LDPluginContainer* LDesktop::CreateDesktopPluginContainer(LDPlugin *plug){ //Verify that a container does not already exist for this plugin QList<QMdiSubWindow*> wins = bgDesktop->subWindowList(); for(int i=0; i<wins.length(); i++){ if(wins[i]->whatsThis()==plug->ID()){ return 0; } } //Create a new plugin container LDPluginContainer *win = new LDPluginContainer(plug, desktoplocked); win->loadInitialSize(); //Sizing should be done before adding the window to the area if(desktoplocked){ bgDesktop->addSubWindow(win, Qt::Tool | Qt::FramelessWindowHint); }else{ bgDesktop->addSubWindow(win, Qt::Tool | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint); } if( !win->hasFixedPosition() ){ //NOTE: This section *only* runs for new plugins - it does not run for re-creations of old plugins //Need to determine the location of the plugin (leave size alone) if(DEBUG){ qDebug() << " --- Floating Plugin - find a spot for it"; } QPoint pt = findNewPluginLocation(availDPArea, win->size()); if(pt.x()>=0 && pt.y()>=0){ win->saveNewPosition(pt); win->move(pt); if(DEBUG){ qDebug() << " --- Moving to point:" << pt; } } //Make sure to remove this plugin from the availability region availDPArea = availDPArea.subtracted( QRegion(win->geometry()) ); } QApplication::processEvents(); QTimer::singleShot(300+(5*PLUGINS.length()), win, SLOT(loadInitialPosition()) ); //Now load the position (if one is saved) if(DEBUG){ qDebug() << "Initial DP Geom:" << plug->geometry(); qDebug() << " - Container Geom:" << win->geometry(); } QApplication::processEvents(); connect(win, SIGNAL(PluginRemoved(QString)), this, SLOT(DesktopPluginRemoved(QString)) ); return win; }
void LDesktop::UpdateDesktop(){ if(DEBUG){ qDebug() << " - Update Desktop Plugins for screen:" << desktopnumber; } QStringList plugins = settings->value(DPREFIX+"pluginlist", QStringList()).toStringList(); if(defaultdesktop && plugins.isEmpty()){ //plugins << "sample" << "sample" << "sample"; } bool changed=false; //in case the plugin list needs to be changed //First make sure all the plugin names are unique for(int i=0; i<plugins.length(); i++){ if(!plugins[i].contains("---") ){ int num=1; while( plugins.contains(plugins[i]+"---"+QString::number(desktopnumber)+"."+QString::number(num)) ){ num++; } plugins[i] = plugins[i]+"---"+QString::number(desktopnumber)+"."+QString::number(num); changed=true; } } if(changed){ //save the modified plugin list to file (so per-plugin settings are preserved) issyncing=true; //don't let the change cause a refresh settings->setValue(DPREFIX+"pluginlist", plugins); settings->sync(); QTimer::singleShot(200, this, SLOT(UnlockSettings()) ); } //If generating desktop file launchers, add those in if(settings->value(DPREFIX+"generateDesktopIcons",false).toBool()){ QFileInfoList files = LSession::handle()->DesktopFiles(); for(int i=0; i<files.length(); i++){ plugins << "applauncher::"+files[i].absoluteFilePath()+"---"+DPREFIX; } } //Go through the plugins and remove any existing ones that do not show up on the current list for(int i=0; i<PLUGINS.length(); i++){ if(!plugins.contains(PLUGINS[i]->ID())){ //Remove this plugin (with settings) - is not currently listed DesktopPluginRemoved(PLUGINS[i]->ID(),true); //flag this as an internal removal i--; } } //Now get an accounting of all the available/used space (overwriting the private variable) QSize ssize = LSession::handle()->screenGeom(desktopnumber).size(); //qDebug() << "Screen Size:" << ssize << desktopnumber; if(bgDesktop->isVisible() && ( (bgDesktop->size().height() <= ssize.height()) && (bgDesktop->size().width() <= ssize.width()) )){ ssize = bgDesktop->size(); qDebug() << " - Adjusted:" << ssize; } availDPArea = QRegion(QRect(QPoint(0,0), ssize)); //Note that this is child-geometry space //Remove all the space currently occupied //qDebug() << "Available Screen Geom:" << avail.boundingRect(); QList<QMdiSubWindow*> wins = bgDesktop->subWindowList(); for(int i=0; i<wins.length(); i++){ qDebug() << "Subtracting Geom:" << wins[i]->geometry(); availDPArea = availDPArea.subtracted( QRegion(wins[i]->geometry()) ); } //Now add/update plugins for(int i=0; i<plugins.length(); i++){ //See if this plugin is already there LDPlugin *plug = 0; for(int p=0; p<PLUGINS.length(); p++){ //qDebug() << " -- Existing Plugin:" << PLUGINS[p]->ID() << p << PLUGINS.length(); if(PLUGINS[p]->ID()==plugins[i]){ //qDebug() << " -- Found Plugin"; plug = PLUGINS[p]; break; } } if(plug==0){ //New Plugin if(DEBUG){qDebug() << " -- New Plugin:" << plugins[i];} plug = NewDP::createPlugin(plugins[i], bgDesktop); if(plug != 0){ connect(plug, SIGNAL(OpenDesktopMenu()), this, SLOT(ShowMenu()) ); if(DEBUG){ qDebug() << " --- Show Plugin"; } PLUGINS << plug; QApplication::processEvents(); //need a moment between plugin/container creation LDPluginContainer *cont = CreateDesktopPluginContainer(plug); //Done with this plugin - removed it's area from the available space if(DEBUG){ qDebug() << " --- Done Creating Plugin Container" << cont->geometry(); } //avail = avail.subtracted( QRegion(cont->geometry()) ); //remove this space from the available region as well } } QApplication::processEvents(); //need to process events between loading of plugins } }