diff --git a/projector.py b/projector.py index ac5d39b..c0923fe 100755 --- a/projector.py +++ b/projector.py @@ -8,6 +8,7 @@ import os import math import subprocess import sys +import ctypes import tkinter.messagebox as messagebox from web.server import start_server_thread @@ -159,6 +160,26 @@ class SongProjector: except Exception as e: print(f"Napaka pri zagonu web serverja: {e}") + # -------------------------------------------------- + # Preprečevanje ohranjevalnika zaslona + # -------------------------------------------------- + self.keep_awake() + + def keep_awake(self): + """ + Prepreči vklop ohranjevalnika zaslona ali spanja. + """ + try: + if sys.platform.startswith("win"): + # Windows: ES_CONTINUOUS | ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED + # 0x80000000 | 0x00000002 | 0x00000001 + ctypes.windll.kernel32.SetThreadExecutionState(0x80000003) + elif sys.platform == "linux": + # Linux: poskusimo z xset (če smo v X11) + subprocess.Popen(["xset", "s", "off", "-dpms"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + except Exception as e: + print(f"Napaka pri preprečevanju spanja: {e}") + # ------------------------------------------------------ # NOVA METODA: enakomeren prelom predolgih vrstic # ------------------------------------------------------ @@ -463,6 +484,20 @@ class SongProjector: # Izhod # ------------------------------------------------------ def exit_program(self, event=None): + # Ponastavi stanje preprečevanja spanja na Windows + if sys.platform.startswith("win"): + try: + # ES_CONTINUOUS (0x80000000) + ctypes.windll.kernel32.SetThreadExecutionState(0x80000000) + except: + pass + elif sys.platform == "linux": + try: + # Ponovno vklopi ohranjevalnik in DPMS (privzete vrednosti) + subprocess.Popen(["xset", "s", "on", "+dpms"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) + except: + pass + self.conn.close() self.root.destroy()