From b184957232c47afac15c3d4e9ef3361f5f6334a9 Mon Sep 17 00:00:00 2001 From: "N0\\A" Date: Wed, 22 Oct 2025 10:48:55 +0200 Subject: [PATCH] . --- core/__pycache__/file_search.cpython-313.pyc | Bin 797 -> 0 bytes ui/__pycache__/gui.cpython-313.pyc | Bin 5481 -> 0 bytes ui/__pycache__/ui.cpython-313.pyc | Bin 1086 -> 0 bytes ui/demo/gui.py | 105 ------------------- 4 files changed, 105 deletions(-) delete mode 100644 core/__pycache__/file_search.cpython-313.pyc delete mode 100644 ui/__pycache__/gui.cpython-313.pyc delete mode 100644 ui/__pycache__/ui.cpython-313.pyc delete mode 100644 ui/demo/gui.py diff --git a/core/__pycache__/file_search.cpython-313.pyc b/core/__pycache__/file_search.cpython-313.pyc deleted file mode 100644 index 788e35375e9b3471e1c760ef7358619390beca0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 797 zcmYjP&ubGw6rS0g{BSo36{=!lBxyxh(5y&H6eLg@PfC$&i$V$|?oPTJH@jhGR;%<7 zyhu;&rO=~C{R0I51doXkDnr17CvTO2UY$w0#1H0u-+S}sOg{ap^^M04K{eH*J2El zfFlxy%vR2AB_+jD#hQE*;TSYUoT2f5S6qt+ikk#)!BsJ~M4&XK+Z2s-tmeEV#*ce# z9e}1-GgwMo$FP}+tBqW&<}5v)DWM%5tX9v(4PYcUxYBmsEVP|c z5VDdNP}cH&>}>L+w;O~68wy7Z?=halgoK0|7q}8qj>Mz6T*G_4R^UVw6P~1Q#5|uT zUb&v_@=PNNnAgP*Ox z1rE6+e55~pDncKO_3UBwpn9qohkEhE8R^UY`Z$$+xBqtks6I+v9j40TTz*ivJ<3%E z>B?AJJk`oywetIw4_5|D)z8kCdqZurzy4j%9o7zNBfT&{g^92R2ISB*5+o}$S&%_~ zVy;p~rbB!L$4b0k0h`p8-K9)*ngJ G^Zx+jzplyv diff --git a/ui/__pycache__/gui.cpython-313.pyc b/ui/__pycache__/gui.cpython-313.pyc deleted file mode 100644 index 674c390bc3848e14fd2dee6fcdd9320b8eed571c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5481 zcmbstTWlN0@s2!_M~aU)l2u8zEJn6uQ`RGLB-`~vm2AtFWm%E##KfsovuEl=olV{` zdq>%FVZtW2q{$d1WTX(VLCw5Y0f z&K;9v&1|r7UK5tpSLGQcYf+gQMM;}sRfKB>r{~jYA*Gr@7>{Tgk}l;m(QJBsBr$^o zSxx7XqO6?|l2=kl$;tBwQZr@xrl+K986j)BRSlV*5uP8NK{z?XT{a=M zEsJ`Qs7lvGld*cArku?PDbb81ktk^5NIJVHoEOw9p!dIk!gNe z)x->}ZTW0ckxfPe%*1?a=$S5q^P-$H{lfhGNK%tPF03i3R9Z|dNvd=yEt)}K@nTj$ zf~FudI6achrlq7{$ue)kZd)64Qjs6+=5GAWbIfE@{pF&Km1T1+C5Obe=-NT~SAirVd_+0(bEWW+xCgY$)&3*`^ZP^2AGp z>I-M{XN_P?55^vZ8wyfhGQ!<@xchTA9qM^#Qwnlk{@mjVwQjg6e|RHE`9lV~LuYr~ z87;Bx>uk_qn{~GNUgv7;Zp>&ornej`vBw{T>kFB8GWSk?^N86(cXNFnD?} zAG|#SW$8cJ+unS$j@Y}04Wtt-rX;m2@Rl<5(d;H;CRn!_|4&sJgdPdLc;p@`tB%O)%V zjiim)%1o|OBH0qSuT?A^xj<0@Phq`&N0MMfFIPt>4kSECZrB62G{UV_2oYWnlwFYI zD&-oip?-@R7!v6ymHK+tR|+KO8r{oKkRx4=v!de@281q9MqG znv%uSP%qZt6_QCYtC@A2lv*sSLbyyb>mYSj5}PNhWOLb1TnN`J2w&eScC2U=;j+Pu zWR#pLPC@ooN3p+}Emg^93$F`L{snY5sr9-S3di!tZVlagZS{@2Zy2rpdTW2Nu7AC? zy^OcMVzeIBTaOl7kN=4=hBX!*lxZTyglK-g!BA5 zbNRVj7w;{tF5iW~8_?SZilKq^;0tzodr1$zR1EI6^W4WBM%R$uHB{^xHoC_2uCZd* z`2FBHNN(Xl^i5b{?Xdd~a3Jg`4&c_duS^iqRsi8J-O`A=Jg2g+gn%=>2g1Cf|ET4n zHG&Xa?kfggZHsV7Zg$2Lg^t0hVyx{!KHDo*$1M>q(%?o@mPGU|K+!Pna7DDqX~LFc zoChh}XPUSAOofHZVD(k#u**aWLxrI`xz!tYZ+!69ZySHt{F`Q@e^l=uHQGkY=X_f< z8oTtyu3}@i(Kw(t4ip;?{=VUlyZ*3CZ#;89I0h#iJx#9+J$=a7sjb|KUsm{s0AwS; z>_!ZyEyJHSXq#ma2Njl}mTlU()uw7Lb_EsZSTM`Z`SyaU(>YGs)`BJgvAnLD3pCu| zV;o^MX7w3uu9olvL2ZH#jDf2! zl8@XuwK{osvbeLm)YN^S?Xhf&x$V8fdDKcXu@J6QWk^togc(RAGRk}oO0a|(OeEgS z3F$H?l1MB_NY&DkEXoQLwb;k)IxZ{Zh_^yWskLj^$-A8{04Y7droIvg~vJy@C%uR-+=y_k%-Ot+AQS4tLsrd8i*P?t+GN`W}!T1uUP4vOYLy%C6h z8i;;W|Es27HWdS1H&3oJK7(n|nU*_;O3dzufreY%7V$@8Z;!3;w|AGAMi9ZHAB;c5 z$oGL)ZF4COa%b=)0ib^kw01Us}3^a5$U3sbwCXcL(jviXT<>`w0SOL9&9x ze^t^Jt>{7Dz%w8gDu2{$oALTTp=@8Xu4?v}9b!XB1{RKQ6~Bo$+%!%9g$n$YYWf@1 wtyA59XM-yjZiNljs#13p*`Ax8C(Hr5_ja?ftyACD`GkVO<3*aKn=SSK1>Y#$2LJ#7 diff --git a/ui/__pycache__/ui.cpython-313.pyc b/ui/__pycache__/ui.cpython-313.pyc deleted file mode 100644 index e76decb2d9aa1b2cd2146b88596a10cd13da14dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1086 zcma)5-A@xi5TEN^+mn{kVyQwT**1PP5^7BPAR!nc&?-uVO9M$snx;M4lXkD(T_x>< zkPwq9i8Llk{{{aWVl~nAe1aF>Dt++P-J=J{gF3mJ-I<;F&2RRj+uz>@R6bt+Ra|xe z95BNcYFpC1Lx*=DfyB+jLr!xbkQ^hR@vDNwPpklBMSxX40`Xn~f&y3IqQVbmFXVb& zYY?dB>EEqz3^Psju}ECJH^-2+E5j0tKPM4L(faXT4CYeYMM(Mpup{lZLsJeL4Z&kS zfCmtyFPyBN)avnn25_1y38%Sd_&IGa=2QHV$HqDx?d~O)wI_2F^Phd3U~+$9=lz47 z+s>i84FB7EfyNdfDlXK6v)GU|WE5qzrj%ryEz1*#a4$5*wVrr@@=6}xFz6!Aqb#l& zMFkhe(1uzq-XyJo3$8@GUQr4yr5dO zbhM^cDXNOkg^x#F#Hrv))gX>Fod~QpaaJ@18-%AEiL<0`$XZk&qRp8&+02S9$;6e# zIt|d-Z9!DXSgfd)WfsS%-^Rj?MI z$?R(CdsJ^J{VLomhuM*fZGCl7(pp}VgU z->x?ow>PPK-?#ipTrmToX006vH(Xylf!)bhlRHx_sqH~#FtnF=n`kB5!E23Kb6~I; z->J72cQ#G`(0=IdXaB^(m2h*$3=X%hzMnthVKmb5fH&N6gLtV+sR0o)8OAu1i8_ft zr)u&z+lWn3^!_H(rfHugy^jT1-$+DWSmgFhzGBw!?)WcMDc#h+~ d!|0LV<4^~I;BC~~{P0&nd^y+QK^Uk$9| diff --git a/ui/demo/gui.py b/ui/demo/gui.py deleted file mode 100644 index 75a3fb1..0000000 --- a/ui/demo/gui.py +++ /dev/null @@ -1,105 +0,0 @@ -#!/usr/bin/env python3 -""" -desktop_pet_x11.py -X11-only: shows a frameless, always-on-top pet using pet.png. -Transparent pixels are click-through via a per-pixel mask (setMask). -""" -import sys -from pathlib import Path -from PySide6 import QtCore, QtGui, QtWidgets - -ASSET = Path(__file__).with_name("pet.png") - - -class PetWindow(QtWidgets.QWidget): - def __init__(self): - super().__init__() - - # Ensure X11 (xcb) — exit if not - platform = QtGui.QGuiApplication.platformName().lower() - if not platform.startswith("xcb"): - raise SystemExit( - f"desktop_pet_x11.py requires X11 (platformName={platform}). Exiting." - ) - - # Window flags: frameless, always-on-top, tool window (no taskbar entry) - flags = ( - QtCore.Qt.FramelessWindowHint - | QtCore.Qt.WindowStaysOnTopHint - | QtCore.Qt.Tool - ) - self.setWindowFlags(flags) - # Let the window be transparent where the PNG is transparent - self.setAttribute(QtCore.Qt.WA_TranslucentBackground) - - # Load pixmap - pix = QtGui.QPixmap(str(ASSET)) - if pix.isNull(): - raise SystemExit(f"Could not load image: {ASSET}") - - # Show pixmap in a label - self.label = QtWidgets.QLabel(self) - self.label.setPixmap(pix) - self.label.resize(pix.size()) - self.resize(pix.size()) - - # Apply per-pixel mask from alpha channel so transparent areas are outside the window shape. - img = pix.toImage() - if img.hasAlphaChannel(): - # createAlphaMask returns a QImage where alpha pixels are white/black (suitable for QBitmap) - mask_img = img.createAlphaMask() - mask = QtGui.QBitmap.fromImage(mask_img) - self.setMask(mask) - else: - # No alpha channel: warn but continue (window will be rectangular and not click-through) - print("Warning: pet.png has no alpha channel; per-pixel click-through unavailable.") - - # System tray - self.tray = QtWidgets.QSystemTrayIcon(self) - # Prefer a small icon; QIcon will scale automatically - self.tray.setIcon(QtGui.QIcon(str(ASSET))) - menu = QtWidgets.QMenu() - menu.addAction("Hide/Show", self.toggle_visible) - menu.addSeparator() - menu.addAction("Quit", QtWidgets.QApplication.quit) - self.tray.setContextMenu(menu) - self.tray.show() - - # Dragging support - self._drag_pos = None - - # Drag only when clicking opaque pixels - def mousePressEvent(self, event: QtGui.QMouseEvent): - if event.button() == QtCore.Qt.LeftButton: - # global pos - top-left -> offset - self._drag_pos = event.globalPosition().toPoint() - self.frameGeometry().topLeft() - event.accept() - elif event.button() == QtCore.Qt.RightButton: - # show tray menu at pointer - self.tray.contextMenu().popup(event.globalPosition().toPoint()) - - def mouseMoveEvent(self, event: QtGui.QMouseEvent): - if self._drag_pos and (event.buttons() & QtCore.Qt.LeftButton): - self.move(event.globalPosition().toPoint() - self._drag_pos) - - def mouseReleaseEvent(self, event: QtGui.QMouseEvent): - self._drag_pos = None - - def toggle_visible(self): - self.setVisible(not self.isVisible()) - - -def main(): - app = QtWidgets.QApplication(sys.argv) - app.setApplicationName("DesktopPetX11") - - pet = PetWindow() - pet.move(200, 200) - pet.show() - - print("Desktop pet started (X11). Transparent pixels are click-through.") - sys.exit(app.exec()) - - -if __name__ == "__main__": - main() \ No newline at end of file