diff options
Diffstat (limited to 'src-qt5/core-utils/lumina-xconfig')
-rw-r--r-- | src-qt5/core-utils/lumina-xconfig/ScreenSettings.cpp | 46 | ||||
-rw-r--r-- | src-qt5/core-utils/lumina-xconfig/ScreenSettings.h | 1 | ||||
-rw-r--r-- | src-qt5/core-utils/lumina-xconfig/lumina-xconfig.1 | 11 | ||||
-rw-r--r-- | src-qt5/core-utils/lumina-xconfig/main.cpp | 8 |
4 files changed, 62 insertions, 4 deletions
diff --git a/src-qt5/core-utils/lumina-xconfig/ScreenSettings.cpp b/src-qt5/core-utils/lumina-xconfig/ScreenSettings.cpp index a8f94680..a5740eae 100644 --- a/src-qt5/core-utils/lumina-xconfig/ScreenSettings.cpp +++ b/src-qt5/core-utils/lumina-xconfig/ScreenSettings.cpp @@ -21,12 +21,52 @@ void RRSettings::ApplyPrevious(){ RRSettings::Apply(screens); } +void RRSettings::ApplyProfile(QString profile){ + //Make sure the profile exists first + if( !RRSettings::savedProfiles().contains(profile) ){ return; } + //Now load/apply the profile + QList<ScreenInfo> screens = RRSettings::PreviousSettings(profile); + RRSettings::Apply(screens); +} + void RRSettings::MirrorAll(){ - QList<ScreenInfo> screens; + QList<ScreenInfo> screens = RRSettings::CurrentScreens(); //Now find the highest resolution supported by all connected monitors - + QStringList combined; + bool starting = true; + for(int i=0; i<screens.length(); i++){ + //qDebug() << "Got Screen:" << screens[i].ID << screens[i].isavailable << screens[i].isactive << screens[i].resList; + if(!screens[i].isavailable){ continue; } + if(combined.isEmpty() && starting){ combined = screens[i].resList; starting = false; } + else{ + for(int j=0; j<combined.length(); j++){ + QString res = combined[j].section(" ",0,0, QString::SectionSkipEmpty); + if( screens[i].resList.filter(res).isEmpty() ){ + combined.removeAt(j); j--; + } + } + } + } + //Get the highest res in the combined list + if(combined.isEmpty()){ + qDebug() << "Could not find any common resolutions between the available monitors!"; + return; + } + //qDebug() << "Got combined res list:" << combined; + QSize max; + for(int i=0; i<combined.length(); i++){ + QString res = combined[i].section(" ",0,0, QString::SectionSkipEmpty); + QSize tmp(res.section("x",0,0).toInt(), res.section("x",1,1).toInt() ); + if(tmp.width()>=max.width() && tmp.height()>=max.height()){ max = tmp; } + } + qDebug() << "Detected max unified resolution:" << max; //Setup one monitor with that resolution, and mirror the rest of them - + for(int i=0; i<screens.length(); i++){ + if(!screens[i].isavailable){ continue; } //skip it, not available at the moment + screens[i].geom = QRect(QPoint(0,0),max); + screens[i].rotation = 0; + if(!screens[i].isactive){ screens[i].applyChange = 2; } //activate it + } //Now reset the display with xrandr RRSettings::Apply(screens); } diff --git a/src-qt5/core-utils/lumina-xconfig/ScreenSettings.h b/src-qt5/core-utils/lumina-xconfig/ScreenSettings.h index 4f042cb8..729c3eba 100644 --- a/src-qt5/core-utils/lumina-xconfig/ScreenSettings.h +++ b/src-qt5/core-utils/lumina-xconfig/ScreenSettings.h @@ -39,6 +39,7 @@ class RRSettings{ public: //Reset current screen config to match previously-saved settings static void ApplyPrevious(); + static void ApplyProfile(QString profile); //Setup all the connected monitors as a single mirror static void MirrorAll(); diff --git a/src-qt5/core-utils/lumina-xconfig/lumina-xconfig.1 b/src-qt5/core-utils/lumina-xconfig/lumina-xconfig.1 index a37d0395..0a4a7ec3 100644 --- a/src-qt5/core-utils/lumina-xconfig/lumina-xconfig.1 +++ b/src-qt5/core-utils/lumina-xconfig/lumina-xconfig.1 @@ -10,7 +10,12 @@ configurations. .Sh SYNOPSIS .Nm .Op Fl -reset-monitors +.Nm .Op Fl -mirror-monitors +.Nm +.Op Fl -list-profiles +.Nm +.Op Fl -apply-profile Ao profile Ac .Sh DESCRIPTION .Nm @@ -27,9 +32,13 @@ is not in use. Options: .Bl -tag -width indent .It Ic --reset-monitors -Reset the monitor configuration to defaults in config file +Reset the monitor configuration to the default profile .It Ic --mirror-monitors Setup all connected monitors as a single display output +.It Ic --list-profiles +Return the list of all the currently-known profiles +.It Ic --apply-profile <profile> +Apply the given monitor profile (will do nothing if profile does not exist) .El .Sh DEPENDENCIES diff --git a/src-qt5/core-utils/lumina-xconfig/main.cpp b/src-qt5/core-utils/lumina-xconfig/main.cpp index 64c70cfc..0508692b 100644 --- a/src-qt5/core-utils/lumina-xconfig/main.cpp +++ b/src-qt5/core-utils/lumina-xconfig/main.cpp @@ -22,6 +22,14 @@ int main(int argc, char ** argv) RRSettings::MirrorAll(); CLIdone = true; break; + }else if(QString(argv[i]) == "--list-profiles"){ + qDebug() << RRSettings::savedProfiles().join("\n"); + CLIdone = true; + break; + }else if(QString(argv[i]) == "--apply-profile" && argc > (i+1) ){ + RRSettings::ApplyProfile( QString(argv[i+1]) ); + CLIdone = true; + break; } } if(CLIdone){ return 0; } |