aboutsummaryrefslogtreecommitdiff
path: root/src-qt5/core-utils/lumina-xconfig/MainUI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src-qt5/core-utils/lumina-xconfig/MainUI.cpp')
-rw-r--r--src-qt5/core-utils/lumina-xconfig/MainUI.cpp47
1 files changed, 32 insertions, 15 deletions
diff --git a/src-qt5/core-utils/lumina-xconfig/MainUI.cpp b/src-qt5/core-utils/lumina-xconfig/MainUI.cpp
index 169302ca..6553bb37 100644
--- a/src-qt5/core-utils/lumina-xconfig/MainUI.cpp
+++ b/src-qt5/core-utils/lumina-xconfig/MainUI.cpp
@@ -32,7 +32,7 @@ MainUI::MainUI() : QMainWindow(), ui(new Ui::MainUI){
}
MainUI::~MainUI(){
-
+
}
void MainUI::loadIcons(){
@@ -55,10 +55,10 @@ QStringList MainUI::currentOpts(){
if(SCREENS[i].order <0){ continue; } //skip this screen - non-active
opts << "--output" << SCREENS[i].ID << "--mode" << QString::number(SCREENS[i].geom.width())+"x"+QString::number(SCREENS[i].geom.height());
if(SCREENS[i].isprimary){ opts << "--primary"; }
- if(SCREENS[i].order > 0){
+ if(SCREENS[i].order > 0){
//Get the ID of the previous screen
- QString id;
- for(int j=0; j<SCREENS.length(); j++){
+ QString id;
+ for(int j=0; j<SCREENS.length(); j++){
if(SCREENS[j].order == SCREENS[i].order-1){ id = SCREENS[j].ID; break;}
}
if(!id.isEmpty()){ opts << "--right-of" << id; }
@@ -78,6 +78,14 @@ ScreenInfo MainUI::currentScreenInfo(){
return ScreenInfo();
}
+void MainUI::AddScreenToWidget(ScreenInfo screen){
+ QListWidgetItem *it = new QListWidgetItem();
+ it->setTextAlignment(Qt::AlignCenter);
+ it->setText( screen.ID+"\n\n ("+QString::number(screen.geom.x())+", "+QString::number(screen.geom.y())+")\n ("+QString::number(screen.geom.width())+"x"+QString::number(screen.geom.height())+") " );
+ it->setWhatsThis(screen.ID);
+ ui->list_screens->addItem(it);
+}
+
void MainUI::UpdateScreens(){
//First probe the server for current screens
SCREENS = RRSettings::CurrentScreens();
@@ -86,10 +94,10 @@ void MainUI::UpdateScreens(){
for(int i=0; i<info.length(); i++){
if(info[i].contains("connected") ){
//qDebug() << "xrandr info:" << info[i];
- if(!cscreen.ID.isEmpty()){
+ if(!cscreen.ID.isEmpty()){
SCREENS << cscreen; //current screen finished - save it into the array
- cscreen = ScreenInfo(); //Now create a new structure
- }
+ cscreen = ScreenInfo(); //Now create a new structure
+ }
//qDebug() << "Line:" << info[i];
QString dev = info[i].section(" ",0,0); //device ID
//The device resolution can be either the 3rd or 4th output - check both
@@ -112,7 +120,7 @@ void MainUI::UpdateScreens(){
cscreen.ID = dev;
//Note: devres format: "<width>x<height>+<xoffset>+<yoffset>"
cscreen.geom.setRect( devres.section("+",-2,-2).toInt(), devres.section("+",-1,-1).toInt(), devres.section("x",0,0).toInt(), devres.section("+",0,0).section("x",1,1).toInt() );
-
+
}else if(info[i].contains(" connected")){
//Device that is connected, but not attached
qDebug() << "Create new Screen entry:" << dev << "none";
@@ -136,22 +144,31 @@ void MainUI::UpdateScreens(){
while(found){
found = false; //make sure to break out if a screen is not found
for(int i=0; i<SCREENS.length(); i++){
- if(SCREENS[i].order != -1){} //already evaluated - skip it
+ if(SCREENS[i].order != -1){qDebug() << "Skip Screen:" << i << SCREENS[i].order; } //already evaluated - skip it
else if(SCREENS[i].geom.x()==xoffset){
found = true; //make sure to look for the next one
xoffset = xoffset+SCREENS[i].geom.width(); //next number to look for
SCREENS[i].order = cnum; //assign the current order to it
cnum++; //get ready for the next one
- QListWidgetItem *it = new QListWidgetItem();
+ AddScreenToWidget(SCREENS[i]);
+ /*QListWidgetItem *it = new QListWidgetItem();
it->setTextAlignment(Qt::AlignCenter);
- it->setText( SCREENS[i].ID+"\n ("+QString::number(SCREENS[i].geom.width())+"x"+QString::number(SCREENS[i].geom.height())+") " );
+ it->setText( SCREENS[i].ID+"\n ("+QString::number(SCREENS[i].geom.x())+", "+QString::number(SCREENS[i].geom.y())+")\n("+QString::number(SCREENS[i].geom.width())+"x"+QString::number(SCREENS[i].geom.height())+") " );
it->setWhatsThis(SCREENS[i].ID);
- ui->list_screens->addItem(it);
- if(SCREENS[i].ID==csel){ ui->list_screens->setCurrentItem(it); }
+ ui->list_screens->addItem(it);*/
+ //if(SCREENS[i].ID==csel){ ui->list_screens->setCurrentItem(it); }
+ }else if(SCREENS[i].geom.x() < xoffset || SCREENS[i].geom.x() > xoffset){
+ //Screen not aligned with previous screen edge
+ qDebug() << "Found mis-aligned screen:" << i << SCREENS[i].ID;
+ found = true; //make sure to look for the next one
+ xoffset = xoffset+SCREENS[i].geom.width(); //next number to look for
+ SCREENS[i].order = cnum; //assign the current order to it
+ cnum++; //get ready for the next one
+ AddScreenToWidget(SCREENS[i]);
}
}
}
-
+
//Now update the available/current screens in the UI
ui->combo_availscreens->clear();
ui->combo_cscreens->clear();
@@ -219,7 +236,7 @@ void MainUI::MoveScreenLeft(){
}
//Now run the command
QStringList opts = currentOpts();
- LUtils::runCmd("xrandr", opts);
+ LUtils::runCmd("xrandr", opts);
//Now run the command
//LUtils::runCmd("xrandr", QStringList() << "--output" << CID << "--left-of" << LID);
QTimer::singleShot(500, this, SLOT(UpdateScreens()) );
bgstack15