1
0
mirror of https://git.FreeBSD.org/ports.git synced 2025-01-03 06:04:53 +00:00

x11/lumina-core: Update to 1.6.2_10

Add patch for new mixer UI in FreeBSD 14
Old system reports levels as 0 to 100, new 0 to 1
This commit is contained in:
Jason W. Bacon 2024-05-19 08:36:14 -05:00
parent bf2de0ed24
commit 83ca8e8902
5 changed files with 145 additions and 12 deletions

View File

@ -1,7 +1,7 @@
PORTNAME= lumina-core
DISTVERSIONPREFIX= v
DISTVERSION= 1.6.2
PORTREVISION= 9
PORTREVISION= 10
CATEGORIES= x11
MAINTAINER= jwb@FreeBSD.org

View File

@ -1,6 +1,14 @@
--- core.pro.orig 2022-03-03 00:56:25 UTC
--- core.pro.orig 2021-12-26 02:33:45 UTC
+++ core.pro
@@ -10,8 +10,8 @@ SUBDIRS+= lumina-desktop \
@@ -4,14 +4,16 @@ include("../OS-detect.pri")
TEMPLATE = subdirs
CONFIG += recursive
+# lumina-checkpass is needed for 1.6.2, since code replacing
+# xscreensaver is enabled
SUBDIRS+= lumina-desktop \
lumina-session \
lumina-open \
lumina-info \
lumina-pingcursor \
$${PWD}/../../icon-theme \

View File

@ -1,14 +1,130 @@
--- libLumina/LuminaOS-FreeBSD.cpp.orig 2021-12-26 02:33:45 UTC
+++ libLumina/LuminaOS-FreeBSD.cpp
@@ -9,6 +9,7 @@
@@ -9,6 +9,8 @@
#include <unistd.h>
#include <sys/types.h>
#include <sys/sysctl.h>
+#include <sys/param.h> // __FreeBSD_version
+#include <dev/acpica/acpiio.h>
#include <QDebug>
//can't read xbrightness settings - assume invalid until set
@@ -289,31 +290,53 @@ void LOS::systemSuspend(){
@@ -171,10 +173,29 @@ int LOS::audioVolume(){ //Returns: audio volume as a p
audiovolume = out;
}else{
//probe the system for the current volume (other utils could be changing it)
+ // mixer interface changed in FreeBSD 14
+ // 13 and prior: mixer -S vol outputs
+ // vol:50:50
+ // 14 and later, there is no -S flag, and vol is a fraction, not a %
+ // mixer -o vol outputs
+ // vol.volume=0.75:0.75
+ // vol.mute=0
+ // Might be better to use the mixer API instead
+#if __FreeBSD_version < 1400000
QString info = LUtils::getCmdOutput("mixer -S vol").join(":").simplified(); //ignores any other lines
if(!info.isEmpty()){
int L = info.section(":",1,1).toInt();
int R = info.section(":",2,2).toInt();
+#else
+ // Produce something like vol.volume=0.26:0.26=vol.mute=0=
+ // Multiple lines are joined, separated by '='
+ QString info = LUtils::getCmdOutput("mixer -o vol").join("=").simplified();
+ if(!info.isEmpty()){
+ int L = info.section(QRegularExpression("[=:]"),1,1).toDouble() * 100.0;
+ int R = info.section(QRegularExpression("[=:]"),2,2).toDouble() * 100.0;
+#endif
+
+
if(L>R){ out = L; }
else{ out = R; }
if(out != audiovolume){
@@ -195,10 +216,27 @@ void LOS::setAudioVolume(int percent){
if(remoteSession){
LUtils::runCmd(QString("pactl set-sink-volume @DEFAULT_SINK@ ")+QString::number(percent)+"%");
}else{
- QString info = LUtils::getCmdOutput("mixer -S vol").join(":").simplified(); //ignores any other lines
- if(!info.isEmpty()){
- int L = info.section(":",1,1).toInt();
- int R = info.section(":",2,2).toInt();
+ // mixer interface changed in FreeBSD 14
+ // 13 and prior: mixer -S vol outputs
+ // vol:50:50
+ // 14 and later, there is no -S flag, and vol is a fraction, not a %
+ // mixer -o vol outputs
+ // vol.volume=0.75:0.75
+ // vol.mute=0
+ // Might be better to use the mixer API instead
+#if __FreeBSD_version < 1400000
+ QString info = LUtils::getCmdOutput("mixer -S vol").join(":").simplified(); //ignores any other lines
+ if(!info.isEmpty()){
+ int L = info.section(":",1,1).toInt();
+ int R = info.section(":",2,2).toInt();
+#else
+ // Produce something like vol.volume=0.26:0.26=vol.mute=0=
+ // Multiple lines are joined, separated by '='
+ QString info = LUtils::getCmdOutput("mixer -o vol").join("=").simplified();
+ if(!info.isEmpty()){
+ int L = info.section(QRegularExpression("[=:]"),1,1).toDouble() * 100.0;
+ int R = info.section(QRegularExpression("[=:]"),2,2).toDouble() * 100.0;
+#endif
int diff = L-R;
if((percent == L) && (L==R)){ return; } //already set to that volume
if(diff<0){ R=percent; L=percent+diff; } //R Greater
@@ -207,7 +245,11 @@ void LOS::setAudioVolume(int percent){
if(L<0){L=0;}else if(L>100){L=100;}
if(R<0){R=0;}else if(R>100){R=100;}
//Run Command
+#if __FreeBSD_version < 1400000
LUtils::runCmd("mixer vol "+QString::number(L)+":"+QString::number(R));
+#else
+ LUtils::runCmd("mixer vol="+QString::number(L/100.0)+":"+QString::number(R/100.0));
+#endif
}
}
audiovolume = percent; //save for checking later
@@ -220,15 +262,36 @@ void LOS::changeAudioVolume(int percentdiff){
if(remoteSession){
LUtils::runCmd(QString("pactl set-sink-volume @DEFAULT_SINK@ ")+((percentdiff>0)?"+" : "") + QString::number(percentdiff)+"%");
}else{
- QString info = LUtils::getCmdOutput("mixer -S vol").join(":").simplified(); //ignores any other lines
- if(!info.isEmpty()){
- int L = info.section(":",1,1).toInt() + percentdiff;
- int R = info.section(":",2,2).toInt() + percentdiff;
+ // mixer interface changed in FreeBSD 14
+ // 13 and prior: mixer -S vol outputs
+ // vol:50:50
+ // 14 and later, there is no -S flag, and vol is a fraction, not a %
+ // mixer -o vol outputs
+ // vol.volume=0.75:0.75
+ // vol.mute=0
+ // Might be better to use the mixer API instead
+#if __FreeBSD_version < 1400000
+ QString info = LUtils::getCmdOutput("mixer -S vol").join(":").simplified(); //ignores any other lines
+ if(!info.isEmpty()){
+ int L = info.section(":",1,1).toInt();
+ int R = info.section(":",2,2).toInt();
+#else
+ // Produce something like vol.volume=0.26:0.26=vol.mute=0=
+ // Multiple lines are joined, separated by '='
+ QString info = LUtils::getCmdOutput("mixer -o vol").join("=").simplified();
+ if(!info.isEmpty()){
+ int L = info.section(QRegularExpression("[=:]"),1,1).toDouble() * 100.0;
+ int R = info.section(QRegularExpression("[=:]"),2,2).toDouble() * 100.0;
+#endif
//Check bounds
if(L<0){L=0;}else if(L>100){L=100;}
if(R<0){R=0;}else if(R>100){R=100;}
//Run Command
+#if __FreeBSD_version < 1400000
LUtils::runCmd("mixer vol "+QString::number(L)+":"+QString::number(R));
+#else
+ LUtils::runCmd("mixer vol="+QString::number(L/100.0)+":"+QString::number(R/100.0));
+#endif
}
}
}
@@ -289,31 +352,53 @@ void LOS::systemSuspend(){
}
//Battery Availability

View File

@ -1,6 +1,6 @@
--- lumina-desktop/LSession.cpp.orig 2021-12-26 02:33:45 UTC
+++ lumina-desktop/LSession.cpp
@@ -97,46 +97,96 @@ LSession::~LSession(){
@@ -97,46 +97,100 @@ LSession::~LSession(){
//Static function so everything can get the same icon name
QString LSession::batteryIconName(int charge, bool charging){
int icon = -1;
@ -11,16 +11,20 @@
- else if (charge > 0 ) { icon = 0; }
- if(charging){ icon = icon+10; }
+
+ // Add 5% in order to round to nearest 10%
+ // E.g. 85% to 94% will show 90% icon
+ icon = (charge + 5) / 10;
+
+ // Old code with only a few different battery levels shown
+ //if (charge > 90) { icon = 4; }
+ //else if (charge > 70) { icon = 3; }
+ //else if (charge > 20) { icon = 2; }
+ //else if (charge > 5) { icon = 1; }
+ //else if (charge > 0 ) { icon = 0; }
+
+ // New code with battery levels for every 10% difference shown
+ // Add 5% in order to round to nearest 10%
+ // E.g. 85% to 94% will show 90% icon
+ // Note: icon is an arbitrary integer used in a case statement later
+ // 0 - 10 are for discharging states, 11+ are for charging
+ icon = (charge + 5) / 10;
+
+ if(charging){ icon += 11; }
+
+ // Some icons may not be available for some themes, so build a list
@ -112,7 +116,7 @@
if(charge==100){ iconList << "battery-full-charged"; }
iconList << "battery-100-charging" << "battery-full-charging"
<< "battery-charging-100" << "battery-charging-full";
@@ -644,9 +694,12 @@ void LSession::adjustWindowGeom(WId win, bool maximize
@@ -644,11 +698,16 @@ void LSession::adjustWindowGeom(WId win, bool maximize
if(DEBUG){ qDebug() << "Y-Diff:" << diff; }
if(diff < 0){ diff = -diff; } //need a positive value
if( (fgeom.height()+ diff)< desk.height()){
@ -127,4 +131,8 @@
+ fgeom.moveBottom(desk.bottom());
}else if(geom.height() > diff){ //window bigger than the difference
//Need to resize the window - keeping the origin point the same
+ //This should only happen if the window is taller than the screen
+ //e.g. the screen size has shrunk
geom.setHeight( geom.height()-diff-1 ); //shrink it by the difference (need an extra pixel somewhere)
fgeom.setHeight( fgeom.height()-diff );
}

View File

@ -11,12 +11,13 @@
QTemporaryFile *TF = new QTemporaryFile(".XXXXXXXXXX");
TF->setAutoRemove(true);
bool ok = false;
@@ -90,7 +92,7 @@ void LLockScreen::TryUnlock(){
@@ -90,7 +92,8 @@ void LLockScreen::TryUnlock(){
if(DEBUG){ qDebug() << "Trying to unlock session:" << getlogin(); }
LUtils::runCommand(ok, "lumina-checkpass",QStringList() << "-f" << TF->fileName() );
if(DEBUG){ qDebug() << " - Success:" << ok; }
- ok = true; //bypass for the moment
+ // ok = true; //bypass if lumina-checkpass is not working
+ //Results in any password being accepted to unlock
}
delete TF; //ensure the temporary file is removed **right now** for security purposes
if(ok){