aboutsummaryrefslogtreecommitdiff
path: root/src-qt5/core
diff options
context:
space:
mode:
authorKen Moore <moorekou@gmail.com>2020-05-04 09:59:13 -0400
committerKen Moore <moorekou@gmail.com>2020-05-04 10:00:26 -0400
commitf747ac87e16ae16343bcc6c40327eca92cffca07 (patch)
tree9ab2dd1b66f091780960f645f9f786ea496bd406 /src-qt5/core
parentMerge pull request #725 from JohnBlood/patch-1 (diff)
downloadlumina-f747ac87e16ae16343bcc6c40327eca92cffca07.tar.gz
lumina-f747ac87e16ae16343bcc6c40327eca92cffca07.tar.bz2
lumina-f747ac87e16ae16343bcc6c40327eca92cffca07.zip
Get the screensaver system up and running.
The lockscreen prompt is disabled at the moment while testing some input detection mechanisms (unlock button just always works without verifying password)
Diffstat (limited to 'src-qt5/core')
-rw-r--r--src-qt5/core/libLumina/LuminaX11.cpp6
-rw-r--r--src-qt5/core/lumina-desktop/LDesktop.cpp3
-rw-r--r--src-qt5/core/lumina-desktop/LSession.cpp3
-rw-r--r--src-qt5/core/lumina-desktop/SystemWindow.cpp6
-rw-r--r--src-qt5/core/lumina-desktop/extrafiles/Lumina-DE.pngbin0 -> 2847 bytes
-rw-r--r--src-qt5/core/lumina-desktop/extrafiles/screensavers/Fireflies.json26
-rw-r--r--src-qt5/core/lumina-desktop/extrafiles/screensavers/Grav.json26
-rw-r--r--src-qt5/core/lumina-desktop/extrafiles/screensavers/Matrix.json26
-rw-r--r--src-qt5/core/lumina-desktop/extrafiles/screensavers/README.md79
-rw-r--r--src-qt5/core/lumina-desktop/extrafiles/screensavers/Video.json26
-rw-r--r--src-qt5/core/lumina-desktop/extrafiles/screensavers/Warp.json25
-rw-r--r--src-qt5/core/lumina-desktop/extrafiles/screensavers/qml_scripts/Fireflies.qml19
-rw-r--r--src-qt5/core/lumina-desktop/extrafiles/screensavers/qml_scripts/Firefly.qml63
-rw-r--r--src-qt5/core/lumina-desktop/extrafiles/screensavers/qml_scripts/Grav.qml132
-rw-r--r--src-qt5/core/lumina-desktop/extrafiles/screensavers/qml_scripts/Matrix.qml71
-rw-r--r--src-qt5/core/lumina-desktop/extrafiles/screensavers/qml_scripts/Video.qml48
-rw-r--r--src-qt5/core/lumina-desktop/extrafiles/screensavers/qml_scripts/Warp.qml64
-rw-r--r--src-qt5/core/lumina-desktop/lumina-desktop.pro5
-rw-r--r--src-qt5/core/lumina-desktop/panel-plugins/systemstart/StartMenu.cpp3
-rw-r--r--src-qt5/core/lumina-desktop/panel-plugins/userbutton/LUserButton.cpp2
-rw-r--r--src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserItemWidget.cpp32
-rw-r--r--src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserWidget.cpp16
-rw-r--r--src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserWidget.h7
-rw-r--r--src-qt5/core/lumina-desktop/src-screensaver/LLockScreen.cpp7
-rw-r--r--src-qt5/core/lumina-desktop/src-screensaver/LScreenSaver.cpp13
-rw-r--r--src-qt5/core/lumina-desktop/src-screensaver/SSBaseWidget.cpp2
-rw-r--r--src-qt5/core/lumina-session/session.cpp8
27 files changed, 671 insertions, 47 deletions
diff --git a/src-qt5/core/libLumina/LuminaX11.cpp b/src-qt5/core/libLumina/LuminaX11.cpp
index 1df5a9f0..3262e16d 100644
--- a/src-qt5/core/libLumina/LuminaX11.cpp
+++ b/src-qt5/core/libLumina/LuminaX11.cpp
@@ -462,12 +462,12 @@ int LXCB::WindowIsFullscreen(WId win){
int i = 0;
for(it = screens.constBegin(); it != screens.constEnd(); ++it, ++i) {
QRect sgeom = (*it)->availableGeometry();
- qDebug() << " -- Check Window Geom:" << sgeom << geom << this->WindowClass(win);
+ //qDebug() << " -- Check Window Geom:" << sgeom << geom << this->WindowClass(win);
if( sgeom.contains(geom.center()) ){
//Allow a 1 pixel variation in "full-screen" detection
- qDebug() << " -- Found Screen:" << i;
+ //qDebug() << " -- Found Screen:" << i;
if( geom.width() >= (sgeom.width()-1) && geom.height()>=(sgeom.height()-1) ){
- qDebug() << " -- Is Fullscreen!";
+ //qDebug() << " -- Is Fullscreen!";
//fullS = true;
fscreen = i;
}
diff --git a/src-qt5/core/lumina-desktop/LDesktop.cpp b/src-qt5/core/lumina-desktop/LDesktop.cpp
index 6ca48a28..9d77af61 100644
--- a/src-qt5/core/lumina-desktop/LDesktop.cpp
+++ b/src-qt5/core/lumina-desktop/LDesktop.cpp
@@ -109,7 +109,8 @@ void LDesktop::UpdateGeometry(){
}
void LDesktop::SystemLock(){
- QProcess::startDetached("xscreensaver-command -lock");
+ QTimer::singleShot(30,LSession::handle(), SLOT(LockScreen()) );
+ //QProcess::startDetached("xscreensaver-command -lock");
}
void LDesktop::SystemLogout(){
diff --git a/src-qt5/core/lumina-desktop/LSession.cpp b/src-qt5/core/lumina-desktop/LSession.cpp
index f1d5973d..996b3acf 100644
--- a/src-qt5/core/lumina-desktop/LSession.cpp
+++ b/src-qt5/core/lumina-desktop/LSession.cpp
@@ -21,10 +21,7 @@
#include <LIconCache.h>
#include <unistd.h> //for usleep() usage
-
-#ifndef DEBUG
#define DEBUG 0
-#endif
XCBEventFilter *evFilter = 0;
LIconCache *ICONS = 0;
diff --git a/src-qt5/core/lumina-desktop/SystemWindow.cpp b/src-qt5/core/lumina-desktop/SystemWindow.cpp
index bfad961d..6a4172d3 100644
--- a/src-qt5/core/lumina-desktop/SystemWindow.cpp
+++ b/src-qt5/core/lumina-desktop/SystemWindow.cpp
@@ -105,7 +105,8 @@ void SystemWindow::sysSuspend(){
this->hide();
LSession::processEvents();
//Make sure to lock the system first (otherwise anybody can access it again)
- LUtils::runCmd("xscreensaver-command -lock");
+ LSession::handle()->LockScreen();
+ //LUtils::runCmd("xscreensaver-command -lock");
//Now suspend the system
LOS::systemSuspend();
}
@@ -114,5 +115,6 @@ void SystemWindow::sysLock(){
this->hide();
LSession::processEvents();
qDebug() << "Locking the desktop...";
- QProcess::startDetached("xscreensaver-command -lock");
+ QTimer::singleShot(30,LSession::handle(), SLOT(LockScreen()) );
+ //QProcess::startDetached("xscreensaver-command -lock");
}
diff --git a/src-qt5/core/lumina-desktop/extrafiles/Lumina-DE.png b/src-qt5/core/lumina-desktop/extrafiles/Lumina-DE.png
new file mode 100644
index 00000000..ce88a252
--- /dev/null
+++ b/src-qt5/core/lumina-desktop/extrafiles/Lumina-DE.png
Binary files differ
diff --git a/src-qt5/core/lumina-desktop/extrafiles/screensavers/Fireflies.json b/src-qt5/core/lumina-desktop/extrafiles/screensavers/Fireflies.json
new file mode 100644
index 00000000..c09de308
--- /dev/null
+++ b/src-qt5/core/lumina-desktop/extrafiles/screensavers/Fireflies.json
@@ -0,0 +1,26 @@
+{
+ "name" : {
+ "default" : "Fireflies"
+ },
+ "description" : {
+ "default" : "Dancing balls of light on the screen"
+ },
+ "author" : {
+ "name" : "Ken Moore",
+ "email" : "ken@ixsystems.com",
+ "website" : "https://github.com/beanpole135",
+ "company" : "iXsystems",
+ "company_website" : "http://ixsystems.com"
+ },
+ "meta" : {
+ "license" : "3-clause BSD",
+ "license_url" : "https://github.com/trueos/lumina/blob/master/LICENSE",
+ "copyright" : "Copyright (c) 2017, Ken Moore (ken@ixsystems.com)",
+ "date_created" : "20171010",
+ "version" : "1.0"
+ },
+ "qml" : {
+ "exec" : "qml_scripts/Fireflies.qml",
+ "additional_files" : ["qml_scripts/Firefly.qml"]
+ }
+}
diff --git a/src-qt5/core/lumina-desktop/extrafiles/screensavers/Grav.json b/src-qt5/core/lumina-desktop/extrafiles/screensavers/Grav.json
new file mode 100644
index 00000000..c75ae170
--- /dev/null
+++ b/src-qt5/core/lumina-desktop/extrafiles/screensavers/Grav.json
@@ -0,0 +1,26 @@
+{
+ "disabled" : true,
+ "name" : {
+ "default" : "Grav"
+ },
+ "description" : {
+ "default" : "Simulates a solar system, with a single star and planets erratically orbiting that star"
+ },
+ "author" : {
+ "name" : "Zackary Welch",
+ "email" : "zwelch@ixsystems.com",
+ "website" : "https://github.com/ZackaryWelch",
+ "company" : "iXsystems",
+ "company_website" : "http://ixsystems.com"
+ },
+ "meta" : {
+ "license" : "3-clause BSD",
+ "license_url" : "https://github.com/trueos/lumina/blob/master/LICENSE",
+ "copyright" : "Copyright (c) 2017, Ken Moore (ken@ixsystems.com)",
+ "date_created" : "20171101",
+ "version" : "1.0"
+ },
+ "qml" : {
+ "exec" : "qml_scripts/Grav.qml"
+ }
+}
diff --git a/src-qt5/core/lumina-desktop/extrafiles/screensavers/Matrix.json b/src-qt5/core/lumina-desktop/extrafiles/screensavers/Matrix.json
new file mode 100644
index 00000000..8c9a351f
--- /dev/null
+++ b/src-qt5/core/lumina-desktop/extrafiles/screensavers/Matrix.json
@@ -0,0 +1,26 @@
+{
+ "disabled" : true,
+ "name" : {
+ "default" : "Matrix"
+ },
+ "description" : {
+ "default" : "Erratic falling columns of various characters with a set color"
+ },
+ "author" : {
+ "name" : "Zackary Welch",
+ "email" : "zwelch@ixsystems.com",
+ "website" : "https://github.com/ZackaryWelch",
+ "company" : "iXsystems",
+ "company_website" : "http://ixsystems.com"
+ },
+ "meta" : {
+ "license" : "3-clause BSD",
+ "license_url" : "https://github.com/trueos/lumina/blob/master/LICENSE",
+ "copyright" : "Copyright (c) 2017, Ken Moore (ken@ixsystems.com)",
+ "date_created" : "20180103",
+ "version" : "1.0"
+ },
+ "qml" : {
+ "exec" : "qml_scripts/Matrix.qml"
+ }
+}
diff --git a/src-qt5/core/lumina-desktop/extrafiles/screensavers/README.md b/src-qt5/core/lumina-desktop/extrafiles/screensavers/README.md
new file mode 100644
index 00000000..d9093b44
--- /dev/null
+++ b/src-qt5/core/lumina-desktop/extrafiles/screensavers/README.md
@@ -0,0 +1,79 @@
+## Screensaver Format
+The screensaver system for the Lumina desktop allows for the creation and use of scripts written in the QML language, with a number of screensavers and other examples installed out-of-box. There are only a couple warnings/caveats to consider when developing a new screensaver:
+
+1. The root object in your QML script will be automatically sized to fit the screen as needed. Avoid trying to hard-code specific screen dimensions within your script as it will not work properly.
+2. A JSON manifest file must be created (format listed below) and placed into one of the screensaver plugin directories for it to be recognized as a valid screensaver by the desktop.
+
+
+### JSON Manifest
+The manifest file contains all the information needed to actually validate/launch the screensaver, as well as additional information about the author and/or the screensaver itself.
+
+Example JSON manifest file (sample.json):
+```
+{
+ "name" : {
+ "default" : "sample",
+ "en_US" : "US English localization of the name",
+ "en" : "Generic english localization of the name"
+ },
+
+ "description" : {
+ "default" : "sample screensaver",
+ "en_US" : "US English Localization of the description"
+ },
+
+ "author" : {
+ "name" : "Me",
+ "email" : "Me@myself.net",
+ "website" : "http://mywebsite.net",
+ "company" : "iXsystems",
+ "company_website" : "http://ixsystems.com"
+ },
+
+ "meta" : {
+ "license" : "3-clause BSD",
+ "license_url" : "https://github.com/trueos/lumina/blob/master/LICENSE",
+ "copyright" : "Copyright (c) 2017, Ken Moore (ken@ixsystems.com)",
+ "date_created" : "20171010",
+ "date_updated" : "20171011",
+ "version" : "1.0"
+ },
+
+ "qml" : {
+ "exec" : "absolute/or/relative/path/to/script.qml",
+ "additional_files" : ["file/which/must/exist.png"],
+ "qt_min_version" : "5.0",
+ "qt_max_version" : "6.0"
+ }
+}
+```
+
+Details of the individual items in the manifest:
+* NOTE: for locale codes, both long and short version are acceptable:
+ Example 1: If the current locale is "en_GB", but the JSON manifest lists translations for "en_US" and "en", then the "en" translation will be used.
+ Example 2: If the current locale is "en_GB", but neither "en_GB" nor "en" translations exist, then the "default" version will be used.
+
+* **name** : (required) This is the official name of the screensaver to show to users
+ * *default* : (required) Non-translated name of the screensaver
+ * *[locale]* : (optional) Translated name for specific [locale]
+* **description** : (required) This is a short description of the screensaver to show to users
+ * *default* : (required) Non-translated description of the screensaver
+ * *[locale]* : (optional) Translated description for specific [locale]
+* **author** : (all optional) Additional information about the author(s) of the screensaver
+ * *name* : Name of the author
+ * *email* : Email to contact the author (useful for licensing questions and such)
+ * *website* : Personal website for the author (github/facebook/twitter profile, etc)
+ * *company* : Company for which the author is creating this screensaver
+ * *company_website* : Website for the company
+* **meta** : (all optional) Additional information about the screensaver itself
+ * *license* : License the screensaver is released under
+ * *license_url* : Website which contains the full text of the license
+ * *copyright* : Copyright notice for this screensaver
+ * *date_created* : (yyyyMMdd) Date the screensaver was initially created
+ * *date_updated* : (yyyyMMdd) Date the screensaver was last updated
+ * *version* : Current version of the screensaver (typically updated every time "date_updated" is changed)
+* **qml** : (required) Information about launching the screensaver and checking validity
+ * *exec* : (required) Absolute or relative path to the QML script (relative to the directory which contains the JSON manifest)
+ * *additional_files* : (optional) Array of paths for other files/scripts which must exist for the screensaver to work properly.
+ * *qt_min_version* : (optional) Minimum version of the Qt libraries that this screensaver supports
+ * *qt_max_version* : (optional) Maximum version of the Qt libraries that this screensaver supports
diff --git a/src-qt5/core/lumina-desktop/extrafiles/screensavers/Video.json b/src-qt5/core/lumina-desktop/extrafiles/screensavers/Video.json
new file mode 100644
index 00000000..8bd86157
--- /dev/null
+++ b/src-qt5/core/lumina-desktop/extrafiles/screensavers/Video.json
@@ -0,0 +1,26 @@
+{
+ "disabled" : true,
+ "name" : {
+ "default" : "Video"
+ },
+ "description" : {
+ "default" : "Play a single video or a list of videos in a loop"
+ },
+ "author" : {
+ "name" : "Zackary Welch",
+ "email" : "zwelch@ixsystems.com",
+ "website" : "https://github.com/ZackaryWelch",
+ "company" : "iXsystems",
+ "company_website" : "http://ixsystems.com"
+ },
+ "meta" : {
+ "license" : "3-clause BSD",
+ "license_url" : "https://github.com/trueos/lumina/blob/master/LICENSE",
+ "copyright" : "Copyright (c) 2017, Ken Moore (ken@ixsystems.com)",
+ "date_created" : "20171025",
+ "version" : "1.0"
+ },
+ "qml" : {
+ "exec" : "qml_scripts/Video.qml"
+ }
+}
diff --git a/src-qt5/core/lumina-desktop/extrafiles/screensavers/Warp.json b/src-qt5/core/lumina-desktop/extrafiles/screensavers/Warp.json
new file mode 100644
index 00000000..888df01f
--- /dev/null
+++ b/src-qt5/core/lumina-desktop/extrafiles/screensavers/Warp.json
@@ -0,0 +1,25 @@
+{
+ "name" : {
+ "default" : "Warp"
+ },
+ "description" : {
+ "default" : "Warp trail through the stars"
+ },
+ "author" : {
+ "name" : "Ken Moore",
+ "email" : "ken@ixsystems.com",
+ "website" : "https://github.com/beanpole135",
+ "company" : "iXsystems",
+ "company_website" : "http://ixsystems.com"
+ },
+ "meta" : {
+ "license" : "3-clause BSD",
+ "license_url" : "https://github.com/trueos/lumina/blob/master/LICENSE",
+ "copyright" : "Copyright (c) 2017, Ken Moore (ken@ixsystems.com)",
+ "date_created" : "20171012",
+ "version" : "1.0"
+ },
+ "qml" : {
+ "exec" : "qml_scripts/Warp.qml"
+ }
+}
diff --git a/src-qt5/core/lumina-desktop/extrafiles/screensavers/qml_scripts/Fireflies.qml b/src-qt5/core/lumina-desktop/extrafiles/screensavers/qml_scripts/Fireflies.qml
new file mode 100644
index 00000000..d8dcc1ed
--- /dev/null
+++ b/src-qt5/core/lumina-desktop/extrafiles/screensavers/qml_scripts/Fireflies.qml
@@ -0,0 +1,19 @@
+import QtQuick 2.0
+import QtGraphicalEffects 1.0
+import "." as QML
+
+Rectangle {
+ id : canvas
+ anchors.fill: parent
+ color: "black"
+
+ Repeater {
+ model: Math.round(Math.random()*canvas.width/10)+100
+ QML.Firefly {
+ parent: canvas
+ x: Math.round(Math.random()*canvas.width)
+ y: Math.round(Math.random()*canvas.height)
+ }
+ } //end of Repeater
+
+} //end of canvas rectangle
diff --git a/src-qt5/core/lumina-desktop/extrafiles/screensavers/qml_scripts/Firefly.qml b/src-qt5/core/lumina-desktop/extrafiles/screensavers/qml_scripts/Firefly.qml
new file mode 100644
index 00000000..7b65d8ec
--- /dev/null
+++ b/src-qt5/core/lumina-desktop/extrafiles/screensavers/qml_scripts/Firefly.qml
@@ -0,0 +1,63 @@
+import QtQuick 2.0
+import QtQuick.Window 2.2
+import QtGraphicalEffects 1.0
+
+Item {
+
+ RectangularGlow {
+ anchors.fill: fly
+ glowRadius: Math.round(fly.radius /2)
+ spread: 0.5
+ color: Qt.rgba(1,1,1,0.3)
+ cornerRadius: fly.radius + glowRadius
+ }
+
+ Rectangle {
+ id: fly
+ width: Math.round(Math.random()*canvas.width/200)+2
+ height: width
+ x: parent.x
+ y: parent.y
+ color: Qt.rgba(Math.random(),Math.random(),0,0.5)
+ radius: Math.floor(width/2)
+ property int jitterX: Math.round(Math.random()*100)+10
+ property int jitterY: Math.round(Math.random()*100)+10
+
+ Behavior on color {
+ ColorAnimation {
+ duration: 500
+ }
+ }
+ Behavior on x {
+ SmoothedAnimation {
+ velocity: 10+Math.random()*canvas.width/100
+ }
+ }
+ Behavior on y {
+ SmoothedAnimation {
+ velocity: 10+Math.random()*canvas.height/100
+ }
+ }
+
+ }
+
+
+
+ Timer {
+ interval: 5
+ repeat: true
+ running: true
+ property bool starting: true
+ onTriggered: {
+ if(starting){ interval = Math.round(Math.random()*1000)+500; starting = false; }
+ if ( (fly.x+fly.jitterX)>parent.width || (fly.x+fly.jitterX)<0 ){ fly.jitterX = 0-fly.jitterX }
+ fly.x = fly.x+fly.jitterX
+ if( (fly.y+fly.jitterY)>parent.height || (fly.y+fly.jitterY)<0 ){ fly.jitterY = 0-fly.jitterY }
+ fly.y = fly.y+fly.jitterY
+ fly.jitterX = (Math.round(Math.random())*2 - 1) *fly.jitterX
+ fly.jitterY = (Math.round(Math.random())*2 - 1) *fly.jitterY
+ fly.color = Qt.rgba(Math.random(),Math.random(),Math.random(),0.5)
+
+ }
+ } //end of timer
+} //end of item
diff --git a/src-qt5/core/lumina-desktop/extrafiles/screensavers/qml_scripts/Grav.qml b/src-qt5/core/lumina-desktop/extrafiles/screensavers/qml_scripts/Grav.qml
new file mode 100644
index 00000000..d1e5d3c9
--- /dev/null
+++ b/src-qt5/core/lumina-desktop/extrafiles/screensavers/qml_scripts/Grav.qml
@@ -0,0 +1,132 @@
+import QtQuick 2.7
+import QtGraphicalEffects 1.0
+
+Rectangle {
+ id : canvas
+ anchors.fill: parent
+ width: Screen.width
+ height: Screen.height
+ color: "black"
+
+ //TODO Add orbital trails option
+ //TODO Fix jitteryness and start position
+ //TODO Make orbits more extreme
+
+ //Between 5 and 15 planets, read from settings
+ property int planets: Math.round(( Math.random() * 10 ) + 5 )
+ property int cx: Math.round(width/2)
+ property int cy: Math.round(height/2)
+
+ //Create planets
+ Repeater {
+ id: planetRepeater
+ model: planets
+
+ Rectangle {
+ id : index
+ parent: canvas
+
+ //Creates random distance for elipse
+ property double c: Math.random() * 250
+ property double b: Math.random() * 150 + c
+ property double a: Math.sqrt(b*b+c*c)
+ //Random angle of rotation
+ property double th: Math.random() * Math.PI
+ property var path: []
+
+ //Calculates starting position
+ x: Math.round(cx + a * Math.cos(th))
+ y: Math.round(cy + b * Math.sin(th))
+
+ //Planet size between 14 and 32 pixels
+ width: Math.round(1.75 * (((Math.random() * 10) + 8 )))
+ height: width
+
+ //Make each rectangle look circular
+ radius: width / 2
+
+ //Give each planet a random color, semi-transparent
+ color: Qt.rgba(Math.random(), Math.random(), Math.random(), 0.5)
+
+ /*Timer {
+ //Each planet updates between 1ms and 51ms (smaller times=faster)
+ interval: Math.round(Math.random() * 50 ) + 1
+ repeat: true
+ running: true
+ property int time: 0
+
+ onTriggered: {
+ //Parametric equation that calculates the position of the general ellipse. Completes a loop ever 314 cycles. Credit to
+ x = cx+a*Math.cos(2*Math.PI*(time/314.0))*Math.cos(th) - b*Math.sin(2*Math.PI*(time/314.0))*Math.sin(th)
+ y = cy+a*Math.cos(2*Math.PI*(time/314.0))*Math.sin(th) + b*Math.sin(2*Math.PI*(time/314.0))*Math.cos(th)
+ time++;
+
+ //Move a planet 80 pixels away from the sun if the planet is too close
+ if(x > cx && Math.abs(cx-x) < 80) {
+ x+=80
+ }else if(x < cx && Math.abs(cx-x) < 80) {
+ x-=80
+ }
+
+ if(y > cy && Math.abs(cy-y) < 80) {
+ y+=80
+ }else if(y < cy && Math.abs(cy-y) < 80) {
+ y-=80
+ }
+ }
+ }*/
+
+ Component.onCompleted: {
+ pahtX[0] = x
+ pahtY[0] = y
+ for(int i = 1; i <= 200; i++) {
+ pathX[i] = cx+a*Math.cos(2*Math.PI*(i/200.0)*Math.cos(th) - b*Math.sin(2*Math.PI*(i/200.0)*Math.sin(th)
+ pathY[i] = cy+a*Math.cos(2*Math.PI*(i/200.0)*Math.sin(th) + b*Math.sin(2*Math.PI*(i/200.0)*Math.cos(th)
+ }
+ }
+ }
+ }
+
+ //Create the star
+ Rectangle{
+ id: star
+ parent: canvas
+
+ //Centers in star in the center of the canvas, with an offset to center the animation
+ x: cx - 30
+ y: cy - 30
+
+ width: 60
+ height: width
+
+ //Create the wobble animation
+ SequentialAnimation on height {
+ loops: Animation.Infinite
+ PropertyAnimation { duration: 2000; to: 90 }
+ PropertyAnimation { duration: 2000; to: 60 }
+ }
+
+ SequentialAnimation on width {
+ loops: Animation.Infinite
+ PropertyAnimation { duration: 2000; to: 90 }
+ PropertyAnimation { duration: 2000; to: 60 }
+ }
+
+ color: "black"
+ radius: width / 2
+
+ //Creates a radial gradient to make the star look cool
+ RadialGradient {
+ anchors.fill: parent
+ gradient: Gradient {
+ GradientStop { position:0 ;color: Qt.rgba(0,0,0,0)}
+ GradientStop { position:0.18 ;color: Qt.rgba(0,0,0,0)}
+ GradientStop { position:0.2 ;color: Qt.rgba(0.32,0.47,0.30,0.13)}
+ GradientStop { position:0.3 ;color: Qt.rgba(0.62,0.92,0.58,0.25)}
+ GradientStop { position:0.4 ;color: Qt.rgba(1.00,0.93,0.59,0.51)}
+ GradientStop { position:0.5 ;color: Qt.rgba(0,0,0,0)}
+ }
+ }
+
+ }
+}
diff --git a/src-qt5/core/lumina-desktop/extrafiles/screensavers/qml_scripts/Matrix.qml b/src-qt5/core/lumina-desktop/extrafiles/screensavers/qml_scripts/Matrix.qml
new file mode 100644
index 00000000..d4031201
--- /dev/null
+++ b/src-qt5/core/lumina-desktop/extrafiles/screensavers/qml_scripts/Matrix.qml
@@ -0,0 +1,71 @@
+import QtQuick 2.0
+import QtMultimedia 5.7
+import QtQuick.Window 2.2
+
+Rectangle {
+ width: Window.width
+ height: Window.height
+ color: "black"
+
+ Row{
+ id: masterRow
+ anchors.left: parent.left
+ anchors.horizontalCenter: parent.horizontalCenter
+ width: parent.width
+ spacing: 5
+ Repeater {
+ id: cR
+ model: Window.width / 15 + 1
+ Column {
+ id: masterColumn
+ width: 10
+ Text {
+ id: column
+ color: "#ff4d4d"
+ font.pixelSize: 10
+ transform: Rotation { origin.x: 0; origin.y: 0; angle: 90 }
+ Timer {
+ interval: 50
+ repeat: true
+ running: true
+ onTriggered: {
+ if(Math.random() < 0.95) {
+ var bottom = column.text.charAt(column.text.length-1)
+ var newString = bottom+column.text.substring(0, column.text.length-1)
+ column.text = newString
+ interval = 50
+ }else{
+ interval = 1000
+ }
+ }
+ }
+ Component.onCompleted: {
+ var str = " "
+ var numberChar = Math.random() * 100 + (Window.height * 0.1);
+ if(Math.random() < 0.80) {
+ while(str.length < numberChar) {
+ if(Math.random() < 0.5) {
+ var charCount = Math.random() * 8 + 10
+ var segStr = ""
+ while(segStr.length < charCount) {
+ var randChar = String.fromCharCode(0x30A0 + Math.random() * (0x30FF-0x30A0+1));
+ segStr += randChar
+ }
+ str += segStr
+ }else{
+ var charCount = Math.random() * 6 + 14
+ var segStr = ""
+ while(segStr.length < charCount) {
+ segStr += " "
+ }
+ str += segStr
+ }
+ }
+ }
+ column.text = str
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src-qt5/core/lumina-desktop/extrafiles/screensavers/qml_scripts/Video.qml b/src-qt5/core/lumina-desktop/extrafiles/screensavers/qml_scripts/Video.qml
new file mode 100644
index 00000000..9948537b
--- /dev/null
+++ b/src-qt5/core/lumina-desktop/extrafiles/screensavers/qml_scripts/Video.qml
@@ -0,0 +1,48 @@
+import QtQuick 2.0
+import QtMultimedia 5.7
+import QtQuick.Window 2.2
+import Qt.labs.folderlistmodel 2.1
+
+Rectangle {
+ width: Screen.width
+ height: Screen.height
+ color: "black"
+
+ FolderListModel {
+ id: folderModel
+ folder: "/usr/local/videos"
+ }
+
+ Repeater {
+ model: folderModel
+ Component {
+ Item {
+ Component.onCompleted: { playlist.addItem(fileURL) }
+ }
+ }
+ }
+
+ Playlist {
+ id: playlist
+ playbackMode: Playlist.Random
+ PlaylistItem { source: "/" }
+ onError: { console.log("ERROR") }
+ }
+
+ MediaPlayer {
+ id: player
+ autoPlay: true
+ playlist: playlist
+ }
+
+ VideoOutput {
+ id: videoOutput
+ source: player
+ anchors.fill: parent
+ }
+
+ Component.onCompleted: {
+ playlist.shuffle()
+ console.log(playlist.itemCount)
+ }
+}
diff --git a/src-qt5/core/lumina-desktop/extrafiles/screensavers/qml_scripts/Warp.qml b/src-qt5/core/lumina-desktop/extrafiles/screensavers/qml_scripts/Warp.qml
new file mode 100644
index 00000000..1cf9bc37
--- /dev/null
+++ b/src-qt5/core/lumina-desktop/extrafiles/screensavers/qml_scripts/Warp.qml
@@ -0,0 +1,64 @@
+import QtQuick 2.0
+import QtGraphicalEffects 1.0
+
+Rectangle {
+ id : canvas
+ anchors.fill: parent
+ color: "black"
+
+ function getStarColor(num){
+ if(num < 1) { return "white" }
+ if(num < 2) { return "mistyrose" }
+ return "lightblue"
+ }
+
+ // CREATE STARFIELD
+ Repeater {
+ model: Math.round(Math.random()*canvas.width/10)+500
+ Rectangle {
+ parent: canvas
+ x: Math.round(Math.random()*canvas.width)
+ y: Math.round(Math.random()*canvas.height)
+ width: Math.round(Math.random()*3)+3
+ height: width
+ radius: width/2
+ color: getStarColor( (index%3) )
+
+ }
+ } //end of Repeater
+
+ // NOW CREATE THE WARP EFFECT
+ ZoomBlur {
+ id: blur
+ anchors.fill: canvas
+ source: canvas
+ samples: 24
+ length: canvas.width / 20
+ horizontalOffset: 0
+ verticalOffset: 0
+
+ Behavior on horizontalOffset{
+ NumberAnimation{
+ duration: 3000
+ }
+ }
+ Behavior on verticalOffset{
+ NumberAnimation{
+ duration: 3000
+ }
+ }
+ } //end of zoom blur
+
+ Timer {
+ interval: 5
+ repeat: true
+ running: true
+ property bool starting: true
+ onTriggered: {
+ if(starting){ interval = 3010; starting = false; }
+ blur.horizontalOffset = (Math.random()*canvas.width/4) - (canvas.width/8)
+ blur.verticalOffset = (Math.random()*canvas.height/4) - (canvas.height/8)
+ }
+ } //end of timer
+
+} //end of canvas rectangle
diff --git a/src-qt5/core/lumina-desktop/lumina-desktop.pro b/src-qt5/core/lumina-desktop/lumina-desktop.pro
index 07bffe4a..678a8526 100644
--- a/src-qt5/core/lumina-desktop/lumina-desktop.pro
+++ b/src-qt5/core/lumina-desktop/lumina-desktop.pro
@@ -96,6 +96,9 @@ defaults.path = $${L_SHAREDIR}/lumina-desktop/
conf.path = $${L_ETCDIR}
+extrafiles.path = $${L_SHAREDIR}/lumina-desktop
+extrafiles.files = extrafiles/*
+
#Now do any OS-specific defaults (if available)
#First see if there is a known OS override first
!isEmpty(DEFAULT_SETTINGS){
@@ -185,7 +188,7 @@ dotrans.extra=cd $$PWD/i18n && $${LRELEASE} -nounfinished *.ts && cp *.qm $(INST
manpage.path=$${L_MANDIR}/man1/
manpage.extra="$${MAN_ZIP} $$PWD/lumina-desktop.1 > $(INSTALL_ROOT)$${L_MANDIR}/man1/lumina-desktop.1.gz"
-INSTALLS += target desktop icons defaults conf fluxconf manpage
+INSTALLS += target desktop icons defaults conf fluxconf manpage extrafiles
WITH_I18N{
INSTALLS += dotrans
diff --git a/src-qt5/core/lumina-desktop/panel-plugins/systemstart/StartMenu.cpp b/src-qt5/core/lumina-desktop/panel-plugins/systemstart/StartMenu.cpp
index 57c17d47..38f5246f 100644
--- a/src-qt5/core/lumina-desktop/panel-plugins/systemstart/StartMenu.cpp
+++ b/src-qt5/core/lumina-desktop/panel-plugins/systemstart/StartMenu.cpp
@@ -578,7 +578,8 @@ void StartMenu::on_tool_launch_deskinfo_clicked(){
//Logout Buttons
void StartMenu::on_tool_lock_clicked(){
//QProcess::startDetached("xscreensaver-command -lock");
- LaunchItem("xscreensaver-command -lock",false);
+ QTimer::singleShot(30,LSession::handle(), SLOT(LockScreen()) );
+ //LaunchItem("xscreensaver-command -lock",false);
}
void StartMenu::on_tool_logout_clicked(){
diff --git a/src-qt5/core/lumina-desktop/panel-plugins/userbutton/LUserButton.cpp b/src-qt5/core/lumina-desktop/panel-plugins/userbutton/LUserButton.cpp
index acb27135..c1cf2907 100644
--- a/src-qt5/core/lumina-desktop/panel-plugins/userbutton/LUserButton.cpp
+++ b/src-qt5/core/lumina-desktop/panel-plugins/userbutton/LUserButton.cpp
@@ -23,7 +23,7 @@ LUserButtonPlugin::LUserButtonPlugin(QWidget *parent, QString id, bool horizonta
mact = new QWidgetAction(this);
mact->setDefaultWidget(usermenu);
menu->addAction(mact);
-
+
button->setMenu(menu);
connect(menu, SIGNAL(aboutToHide()), this, SLOT(updateButtonVisuals()) );
//Setup the global shortcut handling for opening the start menu
diff --git a/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserItemWidget.cpp b/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserItemWidget.cpp
index 8d7dab7a..dc89525c 100644
--- a/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserItemWidget.cpp
+++ b/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserItemWidget.cpp
@@ -33,7 +33,7 @@ UserItemWidget::UserItemWidget(QWidget *parent, QString itemPath, QString type,
name->setText( tr("Go Back") );
}else{
icon->setPixmap( LXDG::findIcon("folder","").pixmap(32,32) );
- name->setText( this->fontMetrics().elidedText(itemPath.section("/",-1), Qt::ElideRight, TEXTCUTOFF) );
+ name->setText( this->fontMetrics().elidedText(itemPath.section("/",-1), Qt::ElideRight, TEXTCUTOFF) );
}
}else{
actButton->setVisible(false);
@@ -46,7 +46,7 @@ UserItemWidget::UserItemWidget(QWidget *parent, QString itemPath, QString type,
}else{
icon->setPixmap( LXDG::findMimeIcon(itemPath.section("/",-1)).pixmap(32,32) );
}
- name->setText( this->fontMetrics().elidedText(itemPath.section("/",-1), Qt::ElideRight, TEXTCUTOFF) );
+ name->setText( this->fontMetrics().elidedText(itemPath.section("/",-1), Qt::ElideRight, TEXTCUTOFF) );
}
icon->setWhatsThis(itemPath);
if(!goback){ this->setWhatsThis(name->text()); }
@@ -77,7 +77,7 @@ UserItemWidget::UserItemWidget(QWidget *parent, XDGDesktop *item) : QFrame(paren
}
//Now fill it appropriately
icon->setPixmap( LXDG::findIcon(item->icon,"preferences-system-windows-actions").pixmap(32,32) );
- name->setText( this->fontMetrics().elidedText(item->name, Qt::ElideRight, TEXTCUTOFF) );
+ name->setText( this->fontMetrics().elidedText(item->name, Qt::ElideRight, TEXTCUTOFF) );
this->setWhatsThis(name->text());
icon->setWhatsThis(item->filePath);
//Now setup the buttons appropriately
@@ -85,7 +85,7 @@ UserItemWidget::UserItemWidget(QWidget *parent, XDGDesktop *item) : QFrame(paren
setupActions(item);
}
-UserItemWidget::~UserItemWidget(){
+UserItemWidget::~UserItemWidget(){
delete button;
delete icon;
delete name;
@@ -98,7 +98,7 @@ void UserItemWidget::createWidget(){
menuopen = false;
menureset = new QTimer(this);
menureset->setSingleShot(true);
- menureset->setInterval(1000); //1 second
+ menureset->setInterval(1000); //1 second
this->setContentsMargins(0,0,0,0);
button = new QToolButton(this);
button->setIconSize( QSize(14,14) );
@@ -125,7 +125,7 @@ void UserItemWidget::createWidget(){
void UserItemWidget::setupButton(bool disable){
//if(isDirectory){ qDebug() << "Directory Entry:" << isShortcut << linkPath << icon->whatsThis(); }
-
+
if(disable){
button->setVisible(false);
}else if(isShortcut && !linkPath.isEmpty()){ //Favorite Item - can always remove this
@@ -141,7 +141,7 @@ void UserItemWidget::setupButton(bool disable){
}else if(!isShortcut){// if( !QFile::exists( QDir::homePath()+"/Desktop/"+icon->whatsThis().section("/",-1) ) && !LUtils::isFavorite(icon->whatsThis() ) ){
//This file does not have a shortcut yet -- allow the user to add it
button->setWhatsThis("add");
- button->setIcon( LXDG::findIcon("bookmark-toolbar","") );
+ button->setIcon( LXDG::findIcon("bookmark-toolbar","") );
button->setToolTip(tr("Create Shortcut"));
connect(button, SIGNAL(clicked()), this, SLOT(buttonClicked()) );
}else{
@@ -161,7 +161,7 @@ void UserItemWidget::setupActions(XDGDesktop *app){
QAction *act = new QAction(LXDG::findIcon(app->actions[i].icon, app->icon), app->actions[i].name, this);
act->setToolTip(app->actions[i].ID);
act->setWhatsThis(app->actions[i].ID);
- actButton->menu()->addAction(act);
+ actButton->menu()->addAction(act);
}
connect(actButton->menu(), SIGNAL(triggered(QAction*)), this, SLOT(actionClicked(QAction*)) );
connect(actButton->menu(), SIGNAL(aboutToShow()), this, SLOT(actionMenuOpen()) );
@@ -171,22 +171,22 @@ void UserItemWidget::setupActions(XDGDesktop *app){
void UserItemWidget::buttonClicked(){
button->setVisible(false);
- if(button->whatsThis()=="add"){
+ if(button->whatsThis()=="add"){
LDesktopUtils::addFavorite(icon->whatsThis());
//QFile::link(icon->whatsThis(), QDir::homePath()+"/.lumina/favorites/"+icon->whatsThis().section("/",-1) );
- emit NewShortcut();
- }else if(button->whatsThis()=="remove"){
- if(linkPath.isEmpty()){
+ emit NewShortcut();
+ }else if(button->whatsThis()=="remove"){
+ if(linkPath.isEmpty()){
//This is a desktop file
if(isDirectory){
QProcess::startDetached("rm -r \""+icon->whatsThis()+"\"");
}else{
- QFile::remove(icon->whatsThis());
- }
+ QFile::remove(icon->whatsThis());
+ }
//Don't emit the RemovedShortcut signal here - the automatic ~/Desktop watcher will see the change when finished
- }else{
+ }else{
LDesktopUtils::removeFavorite(icon->whatsThis()); //This is a favorite
- emit RemovedShortcut();
+ emit RemovedShortcut();
}
}
}
diff --git a/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserWidget.cpp b/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserWidget.cpp
index a0ba8996..9fdc7169 100644
--- a/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserWidget.cpp
+++ b/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserWidget.cpp
@@ -15,7 +15,7 @@ UserWidget::UserWidget(QWidget* parent) : QTabWidget(parent), ui(new Ui::UserWid
if(parent!=0){ parent->setMouseTracking(true); }
this->setMouseTracking(true);
sysapps = LSession::handle()->applicationMenu()->currentAppHash(); //get the raw info
-
+
//Connect the signals/slots
connect(ui->tool_desktopsettings, SIGNAL(clicked()), this, SLOT(openDeskSettings()) );
connect(ui->tool_config_screensaver, SIGNAL(clicked()), this, SLOT(openScreenSaverConfig()) );
@@ -28,13 +28,13 @@ UserWidget::UserWidget(QWidget* parent) : QTabWidget(parent), ui(new Ui::UserWid
connect(ui->tool_home_browse, SIGNAL(clicked()), this, SLOT(slotOpenDir()) );
connect(ui->tool_home_search, SIGNAL(clicked()), this, SLOT(slotOpenSearch()) );
connect(ui->tool_config_about, SIGNAL(clicked()), this, SLOT(openLuminaInfo()) );
-
+
//Setup the special buttons
connect(ui->tool_app_store, SIGNAL(clicked()), this, SLOT(openStore()) );
connect(ui->tool_controlpanel, SIGNAL(clicked()), this, SLOT(openControlPanel()) );
//connect(ui->tool_qtconfig, SIGNAL(clicked()), this, SLOT(openQtConfig()) );
-
- lastUpdate = QDateTime(); //make sure it refreshes
+
+ lastUpdate = QDateTime(); //make sure it refreshes
connect(LSession::handle()->applicationMenu(), SIGNAL(AppMenuUpdated()), this, SLOT(UpdateMenu()) );
connect(QApplication::instance(), SIGNAL(DesktopFilesChanged()), this, SLOT(updateFavItems()) );
@@ -68,7 +68,7 @@ void UserWidget::SortScrollArea(QScrollArea *area){
for(int i=0; i<lay->count(); i++){
items << lay->itemAt(i)->widget()->whatsThis().toLower();
}
-
+
items.sort();
//qDebug() << " - Sorted Items:" << items;
for(int i=0; i<items.length(); i++){
@@ -84,7 +84,7 @@ void UserWidget::SortScrollArea(QScrollArea *area){
}
}
}
-
+
}
QIcon UserWidget::rotateIcon(QIcon ico){
@@ -119,13 +119,13 @@ void UserWidget::UpdateAll(){
ui->tool_fav_dirs->setIcon( LXDG::findIcon("folder","") );
ui->tool_fav_files->setIcon( LXDG::findIcon("document-multiple","") );
ui->tool_desktopsettings->setIcon( LXDG::findIcon("preferences-desktop","") );
- ui->tool_config_screensaver->setIcon( LXDG::findIcon("preferences-desktop-screensaver","") );
+ ui->tool_config_screensaver->setIcon( LXDG::findIcon("preferences-desktop-screensaver","") );
ui->tool_config_screensettings->setIcon( LXDG::findIcon("preferences-other","") );
ui->tool_home_gohome->setIcon( LXDG::findIcon("go-home","") );
ui->tool_home_browse->setIcon( LXDG::findIcon("document-open","") );
ui->tool_home_search->setIcon( LXDG::findIcon("system-search","") );
ui->tool_config_about->setIcon( LXDG::findIcon("lumina","") );
-
+
//Setup the special buttons
QString APPSTORE = LOS::AppStoreShortcut();
if(QFile::exists(APPSTORE) && !APPSTORE.isEmpty()){
diff --git a/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserWidget.h b/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserWidget.h
index 8b03c489..c112ac0f 100644
--- a/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserWidget.h
+++ b/src-qt5/core/lumina-desktop/panel-plugins/userbutton/UserWidget.h
@@ -24,8 +24,6 @@
#include <LuminaOS.h>
#include "UserItemWidget.h"
-#define SSAVER QString("xscreensaver-demo")
-
namespace Ui{
class UserWidget;
};
@@ -81,7 +79,8 @@ private slots:
LaunchItem("lumina-config", false);
}
void openScreenSaverConfig(){
- LaunchItem(SSAVER, false);
+ LaunchItem("lumina-config",false);
+ //LaunchItem(SSAVER, false);
}
void openScreenConfig(){
LaunchItem("lumina-xconfig",false);
@@ -89,7 +88,7 @@ private slots:
void openLuminaInfo(){
LaunchItem("lumina-info",false);
}
-
+
protected:
void mouseMoveEvent( QMouseEvent *event);
diff --git a/src-qt5/core/lumina-desktop/src-screensaver/LLockScreen.cpp b/src-qt5/core/lumina-desktop/src-screensaver/LLockScreen.cpp
index 2cfd0f4a..4253a115 100644
--- a/src-qt5/core/lumina-desktop/src-screensaver/LLockScreen.cpp
+++ b/src-qt5/core/lumina-desktop/src-screensaver/LLockScreen.cpp
@@ -45,6 +45,7 @@ void LLockScreen::aboutToHide(){
ui->line_password->clear();
ui->line_password->clearFocus();
if(refreshtime->isActive()){ refreshtime->stop(); }
+ ui->line_password->releaseKeyboard();
}
void LLockScreen::aboutToShow(){
@@ -59,6 +60,7 @@ void LLockScreen::aboutToShow(){
UpdateLockInfo();
ui->line_password->clear();
ui->line_password->setFocus();
+ ui->line_password->grabKeyboard();
}
// =================
@@ -85,9 +87,10 @@ void LLockScreen::TryUnlock(){
QTextStream in(TF);
in << pass.toUtf8()+"\0"; //make sure it is null-terminated
TF->close();
- //qDebug() << "Trying to unlock session:" << TF->fileName() << LUtils::readFile(TF->fileName());
- //qDebug() << "UserName:" << getlogin();
+ 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
}
delete TF; //ensure the temporary file is removed **right now** for security purposes
if(ok){
diff --git a/src-qt5/core/lumina-desktop/src-screensaver/LScreenSaver.cpp b/src-qt5/core/lumina-desktop/src-screensaver/LScreenSaver.cpp
index 8cf78fdf..41ee7c4a 100644
--- a/src-qt5/core/lumina-desktop/src-screensaver/LScreenSaver.cpp
+++ b/src-qt5/core/lumina-desktop/src-screensaver/LScreenSaver.cpp
@@ -27,7 +27,7 @@ LScreenSaver::LScreenSaver() : QWidget(0,Qt::BypassWindowManagerHint | Qt::Windo
LOCKER->hide();
SSRunning = SSLocked = updating = false;
this->setObjectName("LSCREENSAVERBASE");
- this->setStyleSheet("LScreenSaver#LSCREENSAVERBASE{ background: grey; }");
+ this->setStyleSheet("LScreenSaver#LSCREENSAVERBASE{ background: darkgrey; }");
this->setMouseTracking(true);
connect(starttimer, SIGNAL(timeout()), this, SLOT(ShowScreenSaver()) );
connect(locktimer, SIGNAL(timeout()), this, SLOT(LockScreen()) );
@@ -51,7 +51,10 @@ void LScreenSaver::UpdateTimers(){
if(locktimer->isActive()){ locktimer->stop(); }
if(hidetimer->isActive()){ hidetimer->stop(); }
- if(!SSRunning && !SSLocked && (starttimer->interval() > 1000) ){ starttimer->start(); } //time to SS start
+ if(!SSRunning && !SSLocked && (starttimer->interval() > 1000) ){
+ //time to SS start
+ if(LSession::handle()->XCB->WindowIsFullscreen(LSession::handle()->XCB->WM_Get_Active_Window()) ){ starttimer->start(); } //do not start if current window is fullscreen (videos, movies, etc)
+ }
else if( SSRunning && !SSLocked && (locktimer->interval() > 1000 ) ){ locktimer->start(); } //time to lock
else if( !SSRunning && SSLocked ){ hidetimer->start(); } //time to hide lock screen
}
@@ -114,11 +117,12 @@ void LScreenSaver::checkInputEvents(){
change = true;
}
//If there was an input event detected (or a window is currently full-screen), update timers and such
- if(change || LSession::handle()->XCB->WindowIsFullscreen(active) ){ newInputEvent(); }
+ if(change){ newInputEvent(); }
}
void LScreenSaver::ShowScreenSaver(){
if(DEBUG){ qDebug() << "Showing Screen Saver:" << QDateTime::currentDateTime().toString(); }
+ checkInputEvents(); //update all the internal times to now
//QApplication::setOverrideCursor(QCursor::BlankCursor);
SSRunning = true;
updating = true;
@@ -155,6 +159,7 @@ void LScreenSaver::ShowScreenSaver(){
BASES[i]->show();
BASES[i]->startPainting();
}
+ this->grabKeyboard();
updating = false;
UpdateTimers();
}
@@ -167,6 +172,7 @@ void LScreenSaver::ShowLockScreen(){
LOCKER->resize(LOCKER->sizeHint());
LOCKER->move(ctr - QPoint(LOCKER->width()/2, LOCKER->height()/2) );
LOCKER->show();
+ LOCKER->activateWindow();
//Start the timer for hiding the lock screen due to inactivity
UpdateTimers();
}
@@ -176,6 +182,7 @@ void LScreenSaver::HideScreenSaver(){
if(DEBUG){ qDebug() << "Hiding Screen Saver:" << QDateTime::currentDateTime().toString(); }
SSRunning = false;
//if(cBright>0){ LOS::setScreenBrightness(cBright); } //return to current brightness
+ this->releaseKeyboard();
if(!SSLocked){
this->hide();
emit ClosingScreenSaver();
diff --git a/src-qt5/core/lumina-desktop/src-screensaver/SSBaseWidget.cpp b/src-qt5/core/lumina-desktop/src-screensaver/SSBaseWidget.cpp
index aa3214a2..840eb12a 100644
--- a/src-qt5/core/lumina-desktop/src-screensaver/SSBaseWidget.cpp
+++ b/src-qt5/core/lumina-desktop/src-screensaver/SSBaseWidget.cpp
@@ -10,7 +10,7 @@
//Relative directory to search along the XDG paths for screensavers
#define REL_DIR QString("/lumina-desktop/screensavers")
-#define DEBUG 0
+#define DEBUG 1
// ========
// PUBLIC
diff --git a/src-qt5/core/lumina-session/session.cpp b/src-qt5/core/lumina-session/session.cpp
index aed63f7e..cba855c9 100644
--- a/src-qt5/core/lumina-session/session.cpp
+++ b/src-qt5/core/lumina-session/session.cpp
@@ -151,10 +151,16 @@ void LSession::setupCompositor(bool force){
//Compositing manager
QSettings settings("lumina-desktop","sessionsettings");
if(settings.value("enableCompositing",false).toBool() || force){
- if(LUtils::isValidBinary("compton")){
+ if(LUtils::isValidBinary("picom")){
+ //New name for compton - removed the "-d" startup option (finally reads DISPLAY instead) (May 2020)
+ //Always use the GLX backend for picom - the xrender and hybrid backends cause lots of flickering
+ startProcess("compositing","picom --backend glx --config "+set, QStringList() << set);
+
+ }else if(LUtils::isValidBinary("compton")){
QString disp = getenv("DISPLAY");
//Always use the GLX backend for compton - the xrender and hybrid backends cause lots of flickering
startProcess("compositing","compton --backend glx -d "+disp+" --config "+set, QStringList() << set);
+
}else if(LUtils::isValidBinary("xcompmgr") && !settings.value("compositingWithGpuAccelOnly",true).toBool() ){
startProcess("compositing","xcompmgr");
}
bgstack15