commit 7ea34c3e3289f5f8683038dfb881aa6585b9ca84 Author: Manuel Riquelme Date: Wed Nov 22 14:57:12 2023 +0100 first commit diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..0cb7370 --- /dev/null +++ b/Readme.md @@ -0,0 +1,8 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Exec=python3 /opt/xfce4-caffeine/main.py +Name=xfce4-caffeine +Icon=/opt/xfce4-caffeine/assets/hot_cofee.png \ No newline at end of file diff --git a/assets/cold_cofee.png b/assets/cold_cofee.png new file mode 100755 index 0000000..dac0eae Binary files /dev/null and b/assets/cold_cofee.png differ diff --git a/assets/hot_cofee.png b/assets/hot_cofee.png new file mode 100755 index 0000000..5fe43c6 Binary files /dev/null and b/assets/hot_cofee.png differ diff --git a/main.py b/main.py new file mode 100644 index 0000000..813a49a --- /dev/null +++ b/main.py @@ -0,0 +1,100 @@ +from PyQt6.QtGui import QIcon, QAction +from PyQt6.QtWidgets import QApplication, QMenu, QSystemTrayIcon +import os +import subprocess + +path = os.path.dirname(os.path.abspath(__file__)) + +app = QApplication([]) +app.setQuitOnLastWindowClosed(False) + +# TODO está instalado xdg-utils? +# TODO está instalado xwininfo? + +# estado +global estado +if os.popen("xdg-screensaver status").read() == "enabled\n": + estado = True +else: + estado = False + +# Creating the options +menu = QMenu() + +# Menú activar +optionActivo = QAction("Activar salvapantallas") +optionActivo.triggered.connect(lambda: activar()) + +# Menú desactivar +optionDesactivo = QAction("Desactivar salvapantallas") +optionDesactivo.triggered.connect(lambda: desactivar()) + +# Saber si está funcionando y cambiar el icono +if estado: + icon = QIcon(path + "/assets/cold_cofee.png") + menu.addAction(optionDesactivo) +else: + icon = QIcon(path + "/assets/hot_cofee.png") + menu.addAction(optionActivo) + + +# window id de screensaver +global window_id +window_id = ( + subprocess.Popen( + 'xwininfo -root | grep xwininfo | cut -d" " -f4', + stdout=subprocess.PIPE, + shell=True, + ) + .stdout.read() + .strip() +) + + +# opción desactivar +def desactivar(): + icon = QIcon(path + "/assets/hot_cofee.png") + tray.setIcon(icon) + menu.removeAction(optionDesactivo) + menu.removeAction(quit) + menu.addAction(optionActivo) + menu.addAction(quit) + global window_id + suspend_screensaver() + + +# opción activar +def activar(): + icon = QIcon(path + "/assets/cold_cofee.png") + tray.setIcon(icon) + menu.removeAction(optionActivo) + menu.removeAction(quit) + menu.addAction(optionDesactivo) + menu.addAction(quit) + resume_screensaver() + + +def suspend_screensaver(): + # run xdg-screensaver on root window + subprocess.Popen("xdg-screensaver suspend " + window_id.decode("utf-8"), shell=True) + + +def resume_screensaver(): + subprocess.Popen("xdg-screensaver resume " + window_id.decode("utf-8"), shell=True) + + +# Adding item on the menu bar +tray = QSystemTrayIcon() +tray.setIcon(icon) +tray.setVisible(True) + + +# To quit the app +quit = QAction("Quit") +quit.triggered.connect(app.quit) +menu.addAction(quit) + +# Adding options to the System Tray +tray.setContextMenu(menu) + +app.exec()