aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src-qt5/core-utils/lumina-xconfig/ScreenSettings.cpp46
-rw-r--r--src-qt5/core-utils/lumina-xconfig/ScreenSettings.h1
-rw-r--r--src-qt5/core-utils/lumina-xconfig/lumina-xconfig.111
-rw-r--r--src-qt5/core-utils/lumina-xconfig/main.cpp8
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; }
bgstack15