//=========================================== // Lumina-desktop source code // Copyright (c) 2017, Ken Moore // Available under the 3-clause BSD license // See the LICENSE file for full details //=========================================== #include "RootDesktopObject.h" #include #include #include #include // === PUBLIC === RootDesktopObject::RootDesktopObject(QObject *parent) : QObject(parent){ updateScreens(); //make sure the internal list is updated right away } RootDesktopObject::~RootDesktopObject(){ } void RootDesktopObject::RegisterType(){ static bool done = false; if(done){ return; } done=true; qmlRegisterType("Lumina.Backend.RootDesktopObject", 2, 0, "RootDesktopObject"); //Also register any types that are needed by this class ScreenObject::RegisterType(); } RootDesktopObject* RootDesktopObject::instance(){ static RootDesktopObject* r_obj = new RootDesktopObject(); return r_obj; } //QML Read Functions QStringList RootDesktopObject::screens(){ qDebug() << "Request Screens:" << s_objects.length(); QStringList names; for(int i=0; iname(); } return names; } ScreenObject* RootDesktopObject::screen(QString id){ qDebug() << "Got Screen Request:" << id; for(int i=0; iname()==id){ return s_objects[i]; } } return 0; } QStringList RootDesktopObject::panels(){ //qDebug() << "Request Panels:" << panel_objects.length(); QStringList names; for(int i=0; iname(); } return names; } PanelObject* RootDesktopObject::panel(QString id){ //qDebug() << "Got Panel Request:" << id; for(int i=0; iname()==id){ return panel_objects[i]; } } return 0; } QStringList RootDesktopObject::windows(){ //qDebug() << "Request Panels:" << panel_objects.length(); QStringList names; for(int i=0; iid()); } return names; } NativeWindow* RootDesktopObject::window(QString id){ //qDebug() << "Got Panel Request:" << id; WId chk = id.toInt(); //numerical ID's in this case for(int i=0; iid()==chk){ return window_objects[i]; } } return 0; } void RootDesktopObject::setPanels(QList list){ panel_objects = list; emit panelsChanged(); } void RootDesktopObject::setWindows(QList list){ window_objects = list; emit windowsChanged(); } void RootDesktopObject::logout(){ emit startLogout(); } void RootDesktopObject::lockscreen(){ emit lockScreen(); } void RootDesktopObject::mousePositionChanged(){ emit mouseMoved(); } // === PUBLIC SLOTS === void RootDesktopObject::updateScreens(){ QList scrns = QApplication::screens(); QList tmp; //copy of the internal array initially for(int i=0; iname()==scrns[i]->name()){ found = true; tmp << s_objects.takeAt(j); } } if(!found){ tmp << new ScreenObject(scrns[i], this); } } //Delete any leftover objects for(int i=0; ideleteLater(); } s_objects = tmp; emit screensChanged(); for(int i=0; iemit geomChanged(); } } void RootDesktopObject::ChangeWallpaper(QString screen, QString value){ for(int i=0; iname()==screen){ s_objects[i]->setBackground(value); break; } } } // === PRIVATE ===