aboutsummaryrefslogtreecommitdiff
path: root/src-qt5/core-utils
diff options
context:
space:
mode:
authorKen Moore <ken@ixsystems.com>2017-08-15 19:19:54 -0400
committerKen Moore <ken@ixsystems.com>2017-08-15 19:19:54 -0400
commit3b6e8b8ee6e05e3d05e3d69b64b2afe5bc8c0d22 (patch)
tree5f8ebc9c2451d2f9b0adf37a1ce57eb9f9d0d0ef /src-qt5/core-utils
parentAdded translations to menu buttons and the panel settings dialogue (diff)
downloadlumina-3b6e8b8ee6e05e3d05e3d69b64b2afe5bc8c0d22.tar.gz
lumina-3b6e8b8ee6e05e3d05e3d69b64b2afe5bc8c0d22.tar.bz2
lumina-3b6e8b8ee6e05e3d05e3d69b64b2afe5bc8c0d22.zip
Get the lumina-xconfig monitor settings all up and working again.
1) Add 2D placement options for screens 2) Add Rotation options for screens 3) Add Fluxbox restart fix for session changes.
Diffstat (limited to 'src-qt5/core-utils')
-rw-r--r--src-qt5/core-utils/lumina-xconfig/MainUI.cpp22
-rw-r--r--src-qt5/core-utils/lumina-xconfig/MainUI.ui57
-rw-r--r--src-qt5/core-utils/lumina-xconfig/ScreenSettings.cpp19
-rw-r--r--src-qt5/core-utils/lumina-xconfig/ScreenSettings.h10
4 files changed, 88 insertions, 20 deletions
diff --git a/src-qt5/core-utils/lumina-xconfig/MainUI.cpp b/src-qt5/core-utils/lumina-xconfig/MainUI.cpp
index 90f09104..9ef2bca8 100644
--- a/src-qt5/core-utils/lumina-xconfig/MainUI.cpp
+++ b/src-qt5/core-utils/lumina-xconfig/MainUI.cpp
@@ -20,6 +20,11 @@ MainUI::MainUI() : QMainWindow(), ui(new Ui::MainUI){
ui->combo_location->clear();
ui->combo_location->addItem(tr("Right Of"), "--right-of");
ui->combo_location->addItem(tr("Left Of"), "--left-of");
+ ui->combo_rotation->clear();
+ ui->combo_rotation->addItem(tr("None"), 0);
+ ui->combo_rotation->addItem(tr("Left"), -90);
+ ui->combo_rotation->addItem(tr("Right"), 90);
+ ui->combo_rotation->addItem(tr("Inverted"), 180);
connect(ui->push_close, SIGNAL(clicked()), this, SLOT(close()) );
connect(ui->push_rescan, SIGNAL(clicked()), this, SLOT(UpdateScreens()) );
@@ -174,15 +179,11 @@ void MainUI::ScreenSelected(){
//QListWidgetItem *item = ui->list_screens->currentItem();
if(item.isEmpty()){
//nothing selected
- //ui->tool_deactivate->setEnabled(false);
- //ui->tool_moveleft->setEnabled(false);
- //ui->tool_moveright->setEnabled(false);
+ ui->tool_deactivate->setEnabled(false);
ui->tab_config->setEnabled(false);
}else{
//Item selected
- //ui->tool_deactivate->setEnabled(ui->list_screens->count()>1);
- //ui->tool_moveleft->setEnabled(ui->list_screens->row(item) > 0);
- //ui->tool_moveright->setEnabled(ui->list_screens->row(item) < (ui->list_screens->count()-1));
+ ui->tool_deactivate->setEnabled(true);
ui->tab_config->setEnabled(true);
//Update the info available on the config tab
ScreenInfo cur = currentScreenInfo();
@@ -195,6 +196,9 @@ void MainUI::ScreenSelected(){
if(cur.resList[i].contains(cres)){ ui->combo_resolution->setCurrentIndex(i); }
}
ui->check_primary->setChecked( cur.isprimary );
+ int index = ui->combo_rotation->findData( cur.rotation );
+ if(index<0){ index = 0; }
+ ui->combo_rotation->setCurrentIndex(index);
}
}
@@ -268,7 +272,6 @@ void MainUI::ActivateScreen(){
}
void MainUI::ApplyChanges(){
- //NOTE: need to re-specifiy the
QString item = currentSelection();
if(item.isEmpty()){ return; } //nothing to do
QString newres = ui->combo_resolution->currentData().toString();
@@ -281,6 +284,7 @@ void MainUI::ApplyChanges(){
if(SCREENS[i].ID == item){
SCREENS[i].geom.setWidth(newres.section("x",0,0).toInt());
SCREENS[i].geom.setHeight(newres.section("x",1,1).toInt());
+ SCREENS[i].rotation = ui->combo_rotation->currentData().toInt();
}
if(setprimary){ SCREENS[i].isprimary = SCREENS[i].ID==item; }
//Find the window associated with this screen
@@ -291,8 +295,8 @@ void MainUI::ApplyChanges(){
}
}
//Now run the command
- QStringList opts = currentOpts();
- LUtils::runCmd("xrandr", opts);
+ RRSettings::Apply(SCREENS);
+ //And update the UI and WM in a moment
QTimer::singleShot(500, this, SLOT(UpdateScreens()) );
QTimer::singleShot(1000, this, SLOT(RestartFluxbox()) );
}
diff --git a/src-qt5/core-utils/lumina-xconfig/MainUI.ui b/src-qt5/core-utils/lumina-xconfig/MainUI.ui
index 01bb032d..b4061b95 100644
--- a/src-qt5/core-utils/lumina-xconfig/MainUI.ui
+++ b/src-qt5/core-utils/lumina-xconfig/MainUI.ui
@@ -24,16 +24,51 @@
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QToolButton" name="tool_deactivate">
+ <property name="toolTip">
+ <string>Disable Current Screen</string>
+ </property>
<property name="text">
<string>...</string>
</property>
</widget>
</item>
<item>
+ <spacer name="verticalSpacer_4">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
<widget class="QToolButton" name="tool_tile">
+ <property name="toolTip">
+ <string>Tile Screens</string>
+ </property>
<property name="text">
<string>...</string>
</property>
+ <property name="icon">
+ <iconset theme="format-view-grid-small"/>
+ </property>
</widget>
</item>
</layout>
@@ -88,7 +123,7 @@
</item>
</layout>
</item>
- <item row="2" column="1">
+ <item row="3" column="1">
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
@@ -101,7 +136,7 @@
</property>
</spacer>
</item>
- <item row="3" column="1">
+ <item row="4" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<spacer name="horizontalSpacer_2">
@@ -118,13 +153,29 @@
</item>
</layout>
</item>
- <item row="1" column="1">
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="font">
+ <font>
+ <weight>75</weight>
+ <bold>true</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Rotation:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
<widget class="QCheckBox" name="check_primary">
<property name="text">
<string>Primary Screen</string>
</property>
</widget>
</item>
+ <item row="1" column="1">
+ <widget class="QComboBox" name="combo_rotation"/>
+ </item>
</layout>
</widget>
<widget class="QWidget" name="tab_new">
diff --git a/src-qt5/core-utils/lumina-xconfig/ScreenSettings.cpp b/src-qt5/core-utils/lumina-xconfig/ScreenSettings.cpp
index 6122c1a9..13ed86f4 100644
--- a/src-qt5/core-utils/lumina-xconfig/ScreenSettings.cpp
+++ b/src-qt5/core-utils/lumina-xconfig/ScreenSettings.cpp
@@ -29,6 +29,7 @@ void RRSettings::ApplyPrevious(){
if(screens[i].isprimary){ primary = screens[i].ID; }
screens[i].isactive = lastactive.contains(screens[i].ID);
screens[i].order = (screens[i].isactive ? -1 : -3); //check/ignore
+ screens[i].rotation = set.value("rotation",0).toInt();
set.endGroup();
}else if(screens[i].isavailable){
screens[i].order = -2; //needs activation/placement
@@ -116,6 +117,8 @@ QList<ScreenInfo> RRSettings::CurrentScreens(){
QString devres = info[i].section(" ",2,2, QString::SectionSkipEmpty);
if(!devres.contains("x")){ devres = info[i].section(" ",3,3,QString::SectionSkipEmpty); }
if(!devres.contains("x")){ devres.clear(); }
+ //Pull the monitor rotation mode out as well (last word before the parenthesis)
+ QString devrotate = info[i].section("(",0,0).split(" ",QString::SkipEmptyParts).last();
qDebug() << " - ID:" <<dev << "Current Geometry:" << devres;
//qDebug() << " - Res:" << devres;
if( !devres.contains("x") || !devres.contains("+") ){ devres.clear(); }
@@ -127,12 +130,16 @@ QList<ScreenInfo> RRSettings::CurrentScreens(){
}else if( !devres.isEmpty() ){
cscreen.isprimary = info[i].contains(" primary ");
//Device that is connected and attached (has a resolution)
- qDebug() << "Create new Screen entry:" << dev << devres;
+ qDebug() << "Create new Screen entry:" << dev << devres << devrotate << info[i].section("(",0,0);
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() );
cscreen.isavailable = true;
cscreen.isactive = true;
+ if(devrotate=="left"){ cscreen.rotation = -90; }
+ else if(devrotate=="right"){ cscreen.rotation = 90; }
+ else if(devrotate=="inverted"){ cscreen.rotation = 180; }
+ else{ cscreen.rotation = 0; }
}else if(info[i].contains(" connected")){
//Device that is connected, but not attached
qDebug() << "Create new Screen entry:" << dev << "none";
@@ -164,6 +171,7 @@ bool RRSettings::SaveScreens(QList<ScreenInfo> screens){
set.beginGroup(screens[i].ID);
set.setValue("geometry", screens[i].geom);
set.setValue("isprimary", screens[i].isprimary);
+ set.setValue("rotation", screens[i].rotation);
set.endGroup();
}
set.setValue("lastActive",active);
@@ -178,15 +186,18 @@ bool RRSettings::SaveScreens(QList<ScreenInfo> screens){
void RRSettings::Apply(QList<ScreenInfo> screens){
//Read all the settings and create the xrandr options to maintain these settings
QStringList opts;
- qDebug() << "Apply:" << screens.length();
+ //qDebug() << "Apply:" << screens.length();
for(int i=0; i<screens.length(); i++){
qDebug() << " -- Screen:" << i << screens[i].ID << screens[i].isactive << screens[i].order;
if(screens[i].order <0 || !screens[i].isactive){ 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());
opts << "--pos" << QString::number(screens[i].geom.x())+"x"+QString::number(screens[i].geom.y());
+ if(screens[i].rotation==-90){ opts << "--rotate" << "left"; }
+ else if(screens[i].rotation==90){ opts << "--rotate" << "right"; }
+ else if(screens[i].rotation==180){ opts << "--rotate" << "inverted"; }
+ else{ opts << "--rotate" << "normal"; }
if(screens[i].isprimary){ opts << "--primary"; }
}
- qDebug() << "Run command: xrandr" << opts;
+ //qDebug() << "Run command: xrandr" << opts;
LUtils::runCmd("xrandr", opts);
- //LUtils::runCmd("sleep 2; killall fluxbox"); //restart fluxbox as needed - it can't handle xrandr changes to the current session
}
diff --git a/src-qt5/core-utils/lumina-xconfig/ScreenSettings.h b/src-qt5/core-utils/lumina-xconfig/ScreenSettings.h
index 5826f804..0532cf72 100644
--- a/src-qt5/core-utils/lumina-xconfig/ScreenSettings.h
+++ b/src-qt5/core-utils/lumina-xconfig/ScreenSettings.h
@@ -13,7 +13,7 @@
#include <QStringList>
class ScreenInfo{
- public:
+ public:
QString ID;
QRect geom; //screen geometry
bool isprimary;
@@ -21,13 +21,15 @@ class ScreenInfo{
bool isavailable;
int order; //left to right
QStringList resList;
+ int rotation; //possible values: [-90, 0, 90, 180]
//Initial Defaults
ScreenInfo(){
- order = -1; //initial value is invalid
+ order = -1; //initial value is invalid
isprimary = false;
isactive = false;
isavailable = false;
+ rotation = 0; //no rotation by default
}
~ScreenInfo(){}
};
@@ -42,9 +44,9 @@ public:
//Save the screen config for later
static bool SaveScreens(QList<ScreenInfo> screens);
-
+
//Apply screen configuration
static void Apply(QList<ScreenInfo> screens);
-};
+};
#endif
bgstack15