From 22a53f99275a40971e389bccc9d4789b6418f81c Mon Sep 17 00:00:00 2001 From: itdominator <1itdominator@gmail.com> Date: Mon, 24 Jan 2022 00:11:21 -0600 Subject: [PATCH] Re-added deb build pipe --- src/debs/build.sh | 39 + src/debs/chownAll.sh | 6 + src/debs/gwinwrap-0-0-1-x64/DEBIAN/control | 8 + src/debs/gwinwrap-0-0-1-x64/DEBIAN/postrm | 11 + src/debs/gwinwrap-0-0-1-x64/bin/gwinwrap | Bin 0 -> 6168 bytes src/debs/gwinwrap-0-0-1-x64/bin/xwinwrap | Bin 0 -> 22603 bytes .../opt/GWinWrap/GWinWrap.desktop | 9 + .../opt/GWinWrap/__init__.py | 41 + .../opt/GWinWrap/__main__.py | 9 + .../gwinwrap-0-0-1-x64/opt/GWinWrap/gwinwrap | Bin 0 -> 6168 bytes .../opt/GWinWrap/resources/Main_Window.glade | 844 ++++++++++++++++++ .../opt/GWinWrap/resources/icons/GWinWrap.png | Bin 0 -> 9278 bytes .../opt/GWinWrap/resources/icons/folder.png | Bin 0 -> 4698 bytes .../opt/GWinWrap/resources/icons/picture.png | Bin 0 -> 6591 bytes .../opt/GWinWrap/resources/icons/player.png | Bin 0 -> 6535 bytes .../opt/GWinWrap/resources/stylesheet.css | 3 + .../signal_classes/CrossClassSignals.py | 397 ++++++++ .../opt/GWinWrap/signal_classes/__init__.py | 1 + .../GWinWrap/utils/SaveGWinWrapSettings.py | 52 ++ .../opt/GWinWrap/utils/SaveStateToXWinWarp.py | 69 ++ .../opt/GWinWrap/utils/Settings.py | 74 ++ .../opt/GWinWrap/utils/__init__.py | 3 + .../usr/share/doc/gwinwrap/copyright | 22 + 23 files changed, 1588 insertions(+) create mode 100644 src/debs/build.sh create mode 100644 src/debs/chownAll.sh create mode 100644 src/debs/gwinwrap-0-0-1-x64/DEBIAN/control create mode 100755 src/debs/gwinwrap-0-0-1-x64/DEBIAN/postrm create mode 100755 src/debs/gwinwrap-0-0-1-x64/bin/gwinwrap create mode 100755 src/debs/gwinwrap-0-0-1-x64/bin/xwinwrap create mode 100644 src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/GWinWrap.desktop create mode 100644 src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/__init__.py create mode 100644 src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/__main__.py create mode 100755 src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/gwinwrap create mode 100644 src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/resources/Main_Window.glade create mode 100644 src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/resources/icons/GWinWrap.png create mode 100644 src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/resources/icons/folder.png create mode 100644 src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/resources/icons/picture.png create mode 100644 src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/resources/icons/player.png create mode 100644 src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/resources/stylesheet.css create mode 100644 src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/signal_classes/CrossClassSignals.py create mode 100644 src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/signal_classes/__init__.py create mode 100644 src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/utils/SaveGWinWrapSettings.py create mode 100644 src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/utils/SaveStateToXWinWarp.py create mode 100644 src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/utils/Settings.py create mode 100644 src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/utils/__init__.py create mode 100644 src/debs/gwinwrap-0-0-1-x64/usr/share/doc/gwinwrap/copyright diff --git a/src/debs/build.sh b/src/debs/build.sh new file mode 100644 index 0000000..bb0b522 --- /dev/null +++ b/src/debs/build.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +# Fixes ownershp +function main() { + sudo find . -type f -exec chmod 644 {} + + sudo find . -type d -exec chmod 755 {} + + + # Set postrm permissions + for i in `find . -name postrm`; do + sudo chmod 755 "${i}" + done + + # Set gwinwrap permissions + for i in `find . -name gwinwrap`; do + sudo chmod 755 "${i}" + done + + # Set xwinwrap permissions + for i in `find . -name xwinwrap`; do + sudo chmod 755 "${i}" + done + + sudo chown -R root:root ./*/ + + builder; + bash ./chownAll.sh +} + +#builds debs +function builder() { + for i in `ls`; do + if [[ -d "${i}" ]]; then + dpkg --build "${i}" + else + echo "Not a dir." + fi + done +} +main; diff --git a/src/debs/chownAll.sh b/src/debs/chownAll.sh new file mode 100644 index 0000000..44bef62 --- /dev/null +++ b/src/debs/chownAll.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +function main() { + sudo chown -R abaddon:abaddon . +} +main; diff --git a/src/debs/gwinwrap-0-0-1-x64/DEBIAN/control b/src/debs/gwinwrap-0-0-1-x64/DEBIAN/control new file mode 100644 index 0000000..a23c389 --- /dev/null +++ b/src/debs/gwinwrap-0-0-1-x64/DEBIAN/control @@ -0,0 +1,8 @@ +Package: gwinwrap64 +Version: 0.0-1 +Section: python +Priority: optional +Architecture: amd64 +Depends: ffmpegthumbnailer (>= 2.0.10-0.1), mplayer (>=2.0-728-g2c378c7-4), gifsicle (>=1.86-1), nitrogen (>=1.5.2-2), xscreensaver (>=5.36-1ubuntu1), xscreensaver-gl (>=5.36-1ubuntu1), xscreensaver-gl-extra (>=5.36-1ubuntu1), xscreensaver-screensaver-dizzy (>=0.3-3), xscreensaver-screensaver-bsod (>=5.36-1ubuntu1), xscreensaver-data (>=5.36-1ubuntu1), xscreensaver-data-extra (>=5.36-1ubuntu1), xscreensaver-screensaver-webcollage (>=5.36-1ubuntu1) +Maintainer: Maxim Stewart <1itdominator@gmail.com> +Description: GWinWrap is a GUI to handle setting XWinWrap options. diff --git a/src/debs/gwinwrap-0-0-1-x64/DEBIAN/postrm b/src/debs/gwinwrap-0-0-1-x64/DEBIAN/postrm new file mode 100755 index 0000000..0f30ccd --- /dev/null +++ b/src/debs/gwinwrap-0-0-1-x64/DEBIAN/postrm @@ -0,0 +1,11 @@ +#!/bin/bash +#postrm (script executed after uninstalling the package) +#set -e + +if [ -f /bin/xwinwrap ]; then + rm /bin/xwinwrap +fi + +if [ -d /opt/GWinWrap ]; then + rm -rf /opt/GWinWrap +fi diff --git a/src/debs/gwinwrap-0-0-1-x64/bin/gwinwrap b/src/debs/gwinwrap-0-0-1-x64/bin/gwinwrap new file mode 100755 index 0000000000000000000000000000000000000000..2166a10f4ace993cb2f69f203ca8b9d829d7ce91 GIT binary patch literal 6168 zcmeHLUrbw77(Xq4C)=g!<|=5o>Xvj{xRi~t>i*rr1{Z@1PLL%NN`bQ0(3Z5f2tG`d zZAn#hFD5)0Vxo`62OoGa3SrrNgk+hCei3=deQoW)7$1BvoaUb2 z_wRSkcmCYdd+%GvTbt}Qo8V#>M+9nZg}O9ZwGgKsl`7dhVw2ECrKk|aU@3%4mmWk* zV!TgHGnP_Z0U+``cFW+g>r!BR$}$T^&JeMPd=}`WS*Vwgl~4#(8jy#%Iuxk__DF%z zMR~XhnTIO!RN|?`W1OeN7`0}8tOWNI40{XVl0-nC9_}3*eRA`T>|4F zOB0ODdl`64p^(1?2YF9Yf9uUlipIxCs;C(Z_14$b4E9$Kh9ZfP>Jd+Ub$y){k7|46 zxUqeVZ9dTABu_iXxt2hh0li$U)=P^Okda^iiqacmWD>( zUTv?oAG~M6(Fl2c*rr|naE$naeMuc9DngskyPNb>d5@HEZE?Q1+|RM|9zdVd(IZ1} z`(wLY)Eqmn1Nw~dUrUYmidM>0VVs{a?df@A{8H&0(?ojzb#SG3-hjHiN(Tw`Ao_1E zrlIWo9(C;M<~*piD=o=|ZXom?`vPooP{+tT$78qr!z(}Ty z+2x~#?Xt13YHrK4P?l{$Fn{cDE#x8++dGWp((+jt!R4YVu-LlhC_l_9nyZO{YQr6y+6=Wq;hhx6}J-OY%E!hqt|TV&})DDkM8mjrfW;`Jg3vuXWdw zT!YyM1HLbR*8aeA(wh9EHF@t?^0qg<^+#iT&SpISQ{on`(djPlYu+wzx7Rm! zF`M5VSUTArt)dO~QcZNotZD8HMLJ{tp&BtXY6hc`eX0ft3tMHuK|D+383)}@g4_mp z3UCY%SLOiB$_!u+;36Qdvx_zt-p5#MZ=Mvk5r?gEb4lq%TZserGoIb42kG=441ltB zthM(s_AbQo-rNDY8?G_1AqvIOq&QzJFMFeOOdPE^xO?A@XVHv2%oV5ZIW%|`#|3-i zmf~(m1XS2!VgxVn2LMHb;`q?spg2D$IIgG@g$;`9{USqgUnn*d&v?m8iXKxuUd8QI zTn&l}aS-32l*;>a2Iy1J4(Eu?ZIq1}*qDKh8Q7SCjT!hq%zzu7&txIwXGq4)Jjg;T zZVTyGDgH^)`Ms)=bbc?YAl*stQTYFjh5f&;rlY7&+I57?yPmti()k@{+HUEOKn#}S z76^R)$Ktd=Y$IgIJVVp-F#ng!XAB79XOt2mY$u$j{@Ff7I_J%NczBnE`-jH`Ii4|! zhes!=+bAwY`Y`#){GS28$L4ofPwU%6nD1|HY^C( z{?SN$G;E<6vpmCrSUePs{6+DBFBTZ|BY~u$K@+bx zmVAC4IPbyU=Kd$`x(uHr1Lx1*a`--yK~Nom3+I6O({>#+A*RVNA~oy11;@^OC)t|- z@m^;>pC4{I0QkJ1@Q3E_1UT?sWj^1Z!^G!vhx6w+#?!#Zd!Kc_|Hp{0Qpb3n<>pUj z@j3`Nr_7%!(4}jN_v;lU@l)JzDj(~pJ@&f7|-SL`Fms=@!!G5a|-j=^ezaw{qz6RRhlq9r#YUQWmQ}x zKF|MRkuH6U#D6*yX$krKNibvo%ooMF6-X0$$kH-(KL0cD%^DN3_H7iZ2AHO z{A5YXo%6lZis1F;c-9%e0!MicpZ~9&^c|Gr*5iK*4osE%=l>c0jyg~4$HU?FcpVpj ziy_SC?_eoR3JS+rT6X;0&NXo4@&*0hGttFFLgq34oX2+&-$fm-*FQJA1Om3j`Qzs) sEFL0qKhg*lO$V#u7TMexizP6BSDu~uxyXIzhWe@hJGn-XnaAco0XfC{djJ3c literal 0 HcmV?d00001 diff --git a/src/debs/gwinwrap-0-0-1-x64/bin/xwinwrap b/src/debs/gwinwrap-0-0-1-x64/bin/xwinwrap new file mode 100755 index 0000000000000000000000000000000000000000..26eafd7bd37915f130b67a7db347caa38ddafaf5 GIT binary patch literal 22603 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 DjE;QH literal 0 HcmV?d00001 diff --git a/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/GWinWrap.desktop b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/GWinWrap.desktop new file mode 100644 index 0000000..543fdb6 --- /dev/null +++ b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/GWinWrap.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=GWinWrap +Comment=Glade gui with python controls for XWinWrap +Exec=gwinwrap +Icon=/opt/GWinWrap/resources/icons/GWinWrap.png +Terminal=false +Type=Application +Categories=Accessories;System;Settings; diff --git a/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/__init__.py b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/__init__.py new file mode 100644 index 0000000..0beb3ee --- /dev/null +++ b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/__init__.py @@ -0,0 +1,41 @@ +#!/usr/bin/python3 + +# Gtk imports +import gi, faulthandler, signal +gi.require_version('Gtk', '3.0') + +from gi.repository import Gtk as gtk +from gi.repository import Gdk as gdk +from gi.repository import GLib + +# Python imports +import inspect + +from setproctitle import setproctitle + +# Application imports +from utils import Settings +from signal_classes import CrossClassSignals + + +class Main: + def __init__(self): + setproctitle('GWinWrap') + GLib.unix_signal_add(GLib.PRIORITY_DEFAULT, signal.SIGINT, gtk.main_quit) + faulthandler.enable() # For better debug info + + settings = Settings() + builder = settings.returnBuilder() + + # Gets the methods from the classes and sets to handler. + # Then, builder connects to any signals it needs. + classes = [CrossClassSignals(settings)] + + handlers = {} + for c in classes: + methods = inspect.getmembers(c, predicate=inspect.ismethod) + handlers.update(methods) + + builder.connect_signals(handlers) + window = settings.createWindow() + window.show() diff --git a/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/__main__.py b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/__main__.py new file mode 100644 index 0000000..60c7ea2 --- /dev/null +++ b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/__main__.py @@ -0,0 +1,9 @@ +from __init__ import Main, gtk + + +if __name__ == "__main__": + try: + main = Main() + gtk.main() + except Exception as e: + print(e) diff --git a/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/gwinwrap b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/gwinwrap new file mode 100755 index 0000000000000000000000000000000000000000..2166a10f4ace993cb2f69f203ca8b9d829d7ce91 GIT binary patch literal 6168 zcmeHLUrbw77(Xq4C)=g!<|=5o>Xvj{xRi~t>i*rr1{Z@1PLL%NN`bQ0(3Z5f2tG`d zZAn#hFD5)0Vxo`62OoGa3SrrNgk+hCei3=deQoW)7$1BvoaUb2 z_wRSkcmCYdd+%GvTbt}Qo8V#>M+9nZg}O9ZwGgKsl`7dhVw2ECrKk|aU@3%4mmWk* zV!TgHGnP_Z0U+``cFW+g>r!BR$}$T^&JeMPd=}`WS*Vwgl~4#(8jy#%Iuxk__DF%z zMR~XhnTIO!RN|?`W1OeN7`0}8tOWNI40{XVl0-nC9_}3*eRA`T>|4F zOB0ODdl`64p^(1?2YF9Yf9uUlipIxCs;C(Z_14$b4E9$Kh9ZfP>Jd+Ub$y){k7|46 zxUqeVZ9dTABu_iXxt2hh0li$U)=P^Okda^iiqacmWD>( zUTv?oAG~M6(Fl2c*rr|naE$naeMuc9DngskyPNb>d5@HEZE?Q1+|RM|9zdVd(IZ1} z`(wLY)Eqmn1Nw~dUrUYmidM>0VVs{a?df@A{8H&0(?ojzb#SG3-hjHiN(Tw`Ao_1E zrlIWo9(C;M<~*piD=o=|ZXom?`vPooP{+tT$78qr!z(}Ty z+2x~#?Xt13YHrK4P?l{$Fn{cDE#x8++dGWp((+jt!R4YVu-LlhC_l_9nyZO{YQr6y+6=Wq;hhx6}J-OY%E!hqt|TV&})DDkM8mjrfW;`Jg3vuXWdw zT!YyM1HLbR*8aeA(wh9EHF@t?^0qg<^+#iT&SpISQ{on`(djPlYu+wzx7Rm! zF`M5VSUTArt)dO~QcZNotZD8HMLJ{tp&BtXY6hc`eX0ft3tMHuK|D+383)}@g4_mp z3UCY%SLOiB$_!u+;36Qdvx_zt-p5#MZ=Mvk5r?gEb4lq%TZserGoIb42kG=441ltB zthM(s_AbQo-rNDY8?G_1AqvIOq&QzJFMFeOOdPE^xO?A@XVHv2%oV5ZIW%|`#|3-i zmf~(m1XS2!VgxVn2LMHb;`q?spg2D$IIgG@g$;`9{USqgUnn*d&v?m8iXKxuUd8QI zTn&l}aS-32l*;>a2Iy1J4(Eu?ZIq1}*qDKh8Q7SCjT!hq%zzu7&txIwXGq4)Jjg;T zZVTyGDgH^)`Ms)=bbc?YAl*stQTYFjh5f&;rlY7&+I57?yPmti()k@{+HUEOKn#}S z76^R)$Ktd=Y$IgIJVVp-F#ng!XAB79XOt2mY$u$j{@Ff7I_J%NczBnE`-jH`Ii4|! zhes!=+bAwY`Y`#){GS28$L4ofPwU%6nD1|HY^C( z{?SN$G;E<6vpmCrSUePs{6+DBFBTZ|BY~u$K@+bx zmVAC4IPbyU=Kd$`x(uHr1Lx1*a`--yK~Nom3+I6O({>#+A*RVNA~oy11;@^OC)t|- z@m^;>pC4{I0QkJ1@Q3E_1UT?sWj^1Z!^G!vhx6w+#?!#Zd!Kc_|Hp{0Qpb3n<>pUj z@j3`Nr_7%!(4}jN_v;lU@l)JzDj(~pJ@&f7|-SL`Fms=@!!G5a|-j=^ezaw{qz6RRhlq9r#YUQWmQ}x zKF|MRkuH6U#D6*yX$krKNibvo%ooMF6-X0$$kH-(KL0cD%^DN3_H7iZ2AHO z{A5YXo%6lZis1F;c-9%e0!MicpZ~9&^c|Gr*5iK*4osE%=l>c0jyg~4$HU?FcpVpj ziy_SC?_eoR3JS+rT6X;0&NXo4@&*0hGttFFLgq34oX2+&-$fm-*FQJA1Om3j`Qzs) sEFL0qKhg*lO$V#u7TMexizP6BSDu~uxyXIzhWe@hJGn-XnaAco0XfC{djJ3c literal 0 HcmV?d00001 diff --git a/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/resources/Main_Window.glade b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/resources/Main_Window.glade new file mode 100644 index 0000000..495ebfe --- /dev/null +++ b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/resources/Main_Window.glade @@ -0,0 +1,844 @@ + + + + + + + inode/directory + + + + + + + + + + True + False + gtk-clear + 3 + + + True + False + gtk-quit + 3 + + + True + False + gtk-cancel + 3 + + + True + False + gtk-jump-to + 3 + + + True + False + gtk-save + 3 + + + True + False + gtk-save + 3 + + + True + False + Settings.... + gtk-properties + 3 + + + True + False + gtk-media-play + 3 + + + True + False + gtk-media-stop + 3 + + + 950 + 600 + False + GWinWrap + center + 950 + 600 + icons/GWinWrap.png + center + + + + + + True + False + + + True + False + 15 + 15 + 15 + vertical + + + True + False + 5 + + + True + False + 15 + Note: Double click an image to view the video or image. + + + True + True + 0 + + + + + True + False + Chose Dream Scene / Image Directory + select-folder + False + Folders + Dream Scene / Image Dir + + + + False + True + 1 + + + + + True + True + True + settingsImage + True + + + + False + True + 2 + + + + + False + True + 0 + + + + + True + False + True + + + False + True + 1 + + + + + True + True + in + + + True + False + + + True + False + vertical + 10 + 10 + True + True + + + 640 + 525 + True + False + Choose Image/Video Directory... + + + + + + 0 + 0 + + + + + + + + + True + True + 2 + + + + + Clear + True + True + True + clearImage + True + + + + False + True + 3 + + + + + True + True + 0 + + + + + 300 + True + False + 10 + 15 + 15 + 15 + False + vertical + + + True + False + vertical + + + Use XScreenSaver + True + True + False + center + 5 + True + + + + False + True + 0 + + + + + True + True + in + + + True + False + True + XScreensaver List + False + + + + + + + + XScreensaves + + + + 0 + + + + + + + + + True + True + 1 + + + + + True + True + 0 + + + + + True + False + False + vertical + + + True + False + vertical + + + True + False + + + True + False + 10 + 10 + Playback Resolutions + + + True + True + 0 + + + + + True + False + 10 + 10 + Position Offset + + + True + True + 1 + + + + + False + True + 0 + + + + + True + False + + + True + False + 3 + + 7680x4320 + 3840x2160 + 2048x1080 + 1920x1080 + 1440x720 + 1600x900 + 1280x720 + 800x600 + + + + True + True + 0 + + + + + True + False + + + True + True + 1 + + + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + vertical + + + True + False + 10 + 5 + Save Path + + + True + True + 0 + + + + + True + False + 0 + + .animatedBGstarter.sh + .animatedBGstarter2.sh + .animatedBGstarter3.sh + + + + True + True + 1 + + + + + False + True + 1 + + + + + True + False + + + Save + True + True + True + True + True + saveImage + True + + + + 1 + 0 + + + + + (Re)Start + True + True + True + True + True + startImage + True + + + + 0 + 0 + + + + + Stop + True + True + True + True + True + stopImage + True + + + + 0 + 1 + + + + + Close + True + True + True + True + True + closeImage + True + + + + 1 + 1 + + + + + False + True + 2 + + + + + False + False + end + 1 + + + + + False + True + 1 + 1 + + + + + + + 640 + 525 + False + 350 + True + True + helpLabel + bottom + False + + + True + False + vertical + + + True + False + + + True + True + True + Close Demo Window + closePopupImage + True + + + + False + True + end + 0 + + + + + False + True + 0 + + + + + True + False + 0 + none + + + True + False + + + + + True + True + 1 + + + + + + + 640 + 525 + False + True + True + helpLabel + bottom + + + True + False + vertical + + + True + False + bottom + + + Main Image Viewer + True + True + True + openProgImage + True + + + + False + True + 0 + + + + + True + True + True + True + + + + False + True + 1 + + + + + False + True + 0 + + + + + True + True + in + False + + + True + False + + + True + False + gtk-missing-image + 6 + + + + + + + True + True + 1 + + + + + + + 250 + False + button1 + + + True + False + vertical + + + True + False + + + True + False + icons/folder.png + + + False + True + 0 + + + + + 330 + 26 + True + True + Set Custom Default Path + Set Custom Default Path + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + + + True + False + icons/player.png + + + False + True + 0 + + + + + 330 + 26 + True + True + Set Custom Video Player + Set Custom Video Player + + + False + True + 1 + + + + + False + True + 1 + + + + + True + False + + + True + False + icons/picture.png + + + False + True + 0 + + + + + 330 + 26 + True + True + Set Custom Image Viewer + Set Custom Image Viewer + + + False + True + 1 + + + + + False + True + 2 + + + + + Save + True + True + True + saveImag + True + + + + False + True + 3 + + + + + + diff --git a/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/resources/icons/GWinWrap.png b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/resources/icons/GWinWrap.png new file mode 100644 index 0000000000000000000000000000000000000000..cdd708d16faef991c910643670ab5cc4abfc605b GIT binary patch literal 9278 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 literal 0 HcmV?d00001 diff --git a/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/resources/icons/player.png b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/resources/icons/player.png new file mode 100644 index 0000000000000000000000000000000000000000..4f5ebda47ea6229b630a2a3af02fa59e99c678f1 GIT binary patch literal 6535 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 literal 0 HcmV?d00001 diff --git a/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/resources/stylesheet.css b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/resources/stylesheet.css new file mode 100644 index 0000000..722921b --- /dev/null +++ b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/resources/stylesheet.css @@ -0,0 +1,3 @@ +window { + +} diff --git a/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/signal_classes/CrossClassSignals.py b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/signal_classes/CrossClassSignals.py new file mode 100644 index 0000000..751f33d --- /dev/null +++ b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/signal_classes/CrossClassSignals.py @@ -0,0 +1,397 @@ +# Gtk imports +import gi + +gi.require_version('Gtk', '3.0') +gi.require_version('Gdk', '3.0') + +from gi.repository import Gtk as gtk +from gi.repository import Gdk as gdk +from gi.repository import GLib as glib +from gi.repository import GdkPixbuf + +# Python imports +import threading, subprocess, signal, os, sys, re, hashlib, time + +from os import listdir +from os.path import isfile, join + +# Application imports +from utils import SaveStateToXWinWarp, SaveGWinWrapSettings + + + +def threaded(fn): + def wrapper(*args, **kwargs): + threading.Thread(target=fn, args=args, kwargs=kwargs).start() + + return wrapper + + +class CrossClassSignals: + def __init__(self, settings): + self.settings = settings + self.builder = self.settings.returnBuilder() + + self.WINDOW = self.builder.get_object("Main_Window").get_window() + self.stateSaver = SaveStateToXWinWarp() + self.sttngsSver = SaveGWinWrapSettings() + + # Add filter to allow only folders to be selected + dialog = self.builder.get_object("selectedDirDialog") + filefilter = self.builder.get_object("Folders") + dialog.add_filter(filefilter) + + # Get reference to remove and add it back... + self.gridLabel = self.builder.get_object("gridLabel") + + self.focusedImg = gtk.Image() + self.usrHome = os.path.expanduser('~') + self.xScreenVal = None + self.toSavePath = None # Global file path and type for saving to file + self.applyType = 1 # 1 is XWinWrap and 2 is Nitrogen + + self.loadProgress = self.builder.get_object("loadProgress") + self.helpLabel = self.builder.get_object("helpLabel") + self.defaultLabel = "Note: Double click an image to view the video or image." + self.savedLabel = "Saved settings..." + self.appliedLabel = "Running xwinwrap..." + self.stoppedLabel = "Stopped xwinwrap..." + # foreground=\"#ffa800\" + # foreground=\"#88cc27\" + # foreground=\"#ff0000\" + + # Fill list xscreensaver + self.xscrPth = "/usr/lib/xscreensaver/" + xscreenList = self.builder.get_object("XScreensaver List") + list = [f for f in listdir(self.xscrPth) if isfile(join(self.xscrPth, f))] + list.sort() + + for file in list: + xscreenList.append((file,)) + + self.selectedImg = None # EventBox holder + self.defPath = None + self.player = None + self.imgVwr = None + self.demoAreaPid = None + + self.setPosData() + self.retrieveSettings() + + + + def setNewDir(self, widget, data=None): + dir = widget.get_filename() + threading.Thread(target=self.newDir, args=(dir,)).start() + + @threaded + def newDir(self, dir): + imageGrid = self.builder.get_object("imageGrid") + dirPath = dir + list = [f for f in listdir(dirPath) if isfile(join(dirPath, f))] + files = [] + row = 0 + col = 0 + + for file in list: + if file.lower().endswith(('.mkv', '.avi', '.flv', '.mov', '.m4v', '.mpg', '.wmv', '.mpeg', '.mp4', '.webm', '.png', '.jpg', '.jpeg', '.gif')): + files.append(file) + + fractionTick = 1.0 / 1.0 if len(files) == 0 else len(files) + tickCount = 0.0 + self.clear() + imageGrid.remove_column(0) + self.loadProgress.set_text("Loading...") + self.loadProgress.set_fraction(0.0) + self.helpLabel.set_markup("" + dirPath.strip(self.usrHome) + "") + for file in files: + fullPathFile = dirPath + "/" + file + eveBox = gtk.EventBox() + thumbnl = gtk.Image() + + if file.lower().endswith(('.mkv', '.avi', '.flv', '.mov', '.m4v', '.mpg', '.wmv', '.mpeg', '.mp4', '.webm')): + fileHash = hashlib.sha256(str.encode(fullPathFile)).hexdigest() + hashImgpth = self.usrHome + "/.thumbnails/normal/" + fileHash + ".png" + if isfile(hashImgpth) == False: + self.generateThumbnail(fullPathFile, hashImgpth) + + thumbnl = self.createGtkImage(hashImgpth, [310, 310]) + eveBox.connect("button_press_event", self.runMplayerProcess, (fullPathFile, file, eveBox,)) + eveBox.connect("enter_notify_event", self.mouseOver, ()) + eveBox.connect("leave_notify_event", self.mouseOut, ()) + elif file.lower().endswith(('.png', '.jpg', '.jpeg', '.gif')): + thumbnl = self.createGtkImage(fullPathFile, [310, 310]) + eveBox.connect("button_press_event", self.runImageViewerProcess, (fullPathFile, file, eveBox,)) + eveBox.connect("enter_notify_event", self.mouseOver, ()) + eveBox.connect("leave_notify_event", self.mouseOut, ()) + else: + print("Not a video or image file.") + continue + + glib.idle_add(self.preGridSetup, (eveBox, thumbnl, )) + glib.idle_add(self.addToGrid, (imageGrid, eveBox, col, row,)) + tickCount = tickCount + fractionTick + self.loadProgress.set_fraction(tickCount) + + col += 1 + if col == 2: + col = 0 + row += 1 + + self.loadProgress.set_text("Finished...") + + def preGridSetup(self, args): + args[0].show() + args[1].show() + args[0].add(args[1]) + + def addToGrid(self, args): + args[0].attach(args[1], args[2], args[3], 1, 1) + + def generateThumbnail(self, fullPathFile, hashImgpth): + # Stream duration + command = ["ffprobe", "-v", "error", "-select_streams", "v:0", "-show_entries", "stream=duration", "-of", "default=noprint_wrappers=1:nokey=1", fullPathFile] + data = subprocess.run(command, stdout=subprocess.PIPE) + duration = data.stdout.decode('utf-8') + + # Format (container) duration + if "N/A" in duration: + command = ["ffprobe", "-v", "error", "-show_entries", "format=duration", "-of", "default=noprint_wrappers=1:nokey=1", fullPathFile] + data = subprocess.run(command , stdout=subprocess.PIPE) + duration = data.stdout.decode('utf-8') + + # Stream duration type: image2 + if "N/A" in duration: + command = ["ffprobe", "-v", "error", "-select_streams", "v:0", "-f", "image2", "-show_entries", "stream=duration", "-of", "default=noprint_wrappers=1:nokey=1", fullPathFile] + data = subprocess.run(command, stdout=subprocess.PIPE) + duration = data.stdout.decode('utf-8') + + # Format (container) duration type: image2 + if "N/A" in duration: + command = ["ffprobe", "-v", "error", "-f", "image2", "-show_entries", "format=duration", "-of", "default=noprint_wrappers=1:nokey=1", fullPathFile] + data = subprocess.run(command , stdout=subprocess.PIPE) + duration = data.stdout.decode('utf-8') + + # Get frame roughly 35% through video + grabTime = str( int( float( duration.split(".")[0] ) * 0.35) ) + command = ["ffmpeg", "-ss", grabTime, "-i", fullPathFile, "-an", "-vframes", "1", "-s", "320x180", "-q:v", "2", hashImgpth] + subprocess.call(command) + + def createGtkImage(self, path, wxh): + try: + pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale( + filename = path, + width = wxh[0], + height = wxh[1], + preserve_aspect_ratio = True) + return gtk.Image.new_from_pixbuf(pixbuf) + except Exception as e: + print(e) + + return gtk.Image() + + + def openMainImageViewer(self, widget): + subprocess.call([self.imgVwr, self.toSavePath]) + + def runImageViewerProcess(self, widget, eve, params): + self.setSelected(params[2]) + + if eve.type == gdk.EventType.DOUBLE_BUTTON_PRESS: + previewWindow = self.builder.get_object("previewWindow") + previewImg = self.builder.get_object("previewImg") + previewImg.set_from_file(params[0]) + previewWindow.show_all() + previewWindow.popup() + + self.toSavePath = params[0] + self.applyType = 2 + self.helpLabel.set_markup("" + params[1] + "") + + def setSelected(self, eveBox): + if self.selectedImg: + col = gdk.RGBA(0.0, 0.0, 0.0, 0.0) + self.selectedImg.override_background_color(gtk.StateType.NORMAL, col) + + col = gdk.RGBA(0.9, 0.7, 0.4, 0.74) + eveBox.override_background_color(gtk.StateType.NORMAL, col) + self.selectedImg = eveBox + + def closePopup(self, widget): + self.builder.get_object("previewWindow").popdown() + + def mouseOver(self, widget, eve, args): + hand_cursor = gdk.Cursor(gdk.CursorType.HAND2) + self.builder.get_object("Main_Window").get_window().set_cursor(hand_cursor) + + def mouseOut(self, widget, eve, args): + watch_cursor = gdk.Cursor(gdk.CursorType.LEFT_PTR) + self.builder.get_object("Main_Window").get_window().set_cursor(watch_cursor) + + def toggleXscreenUsageField(self, widget, data=None): + useXscreenSaver = self.builder.get_object("useXScrnList") + if useXscreenSaver.get_active(): + self.builder.get_object("xScreenSvrList").set_sensitive(True) + else: + self.builder.get_object("xScreenSvrList").set_sensitive(False) + + def popSttingsWindow(self, widget): + self.builder.get_object("settingsWindow").popup() + + def saveToSettingsFile(self, widget): + self.defPath = self.builder.get_object("customDefaultPath").get_text().strip() + self.player = self.builder.get_object("customVideoPlyr").get_text().strip() + self.imgVwr = self.builder.get_object("customImgVwr").get_text().strip() + + self.sttngsSver.saveSettings(self.defPath, self.player, self.imgVwr) + + def retrieveSettings(self): + data = self.sttngsSver.retrieveSettings() + self.defPath = data[0] + self.player = data[1] + self.imgVwr = data[2] + + self.builder.get_object("customDefaultPath").set_text(self.defPath) + self.builder.get_object("customVideoPlyr").set_text(self.player) + self.builder.get_object("customImgVwr").set_text(self.imgVwr) + self.builder.get_object("selectedDirDialog").set_filename(self.defPath) + + if self.defPath: + self.newDir(self.defPath) + + + def saveToFile(self, widget, data=None): + saveLoc = self.builder.get_object("saveLoc").get_active_text() + useXscreenSaver = self.builder.get_object("useXScrnList").get_active() + plyBckRes = self.builder.get_object("playbackResolution") + offset4Res = self.builder.get_object("posOffset") + resolution = plyBckRes.get_active_text() + offset4Res.get_active_text() + self.applyType = self.stateSaver.saveToFile(self.toSavePath, resolution, + saveLoc, useXscreenSaver, self.xScreenVal, self.player) + if self.applyType == -1: + self.helpLabel.set_markup("Nothing saved...") + return + + self.helpLabel.set_markup(self.savedLabel) + + def applySttngs(self, widget, data=None): + os.system("killall xwinwrap &") + if self.applyType == 1: + files = os.listdir(self.usrHome) + for file in files: + fPath = self.usrHome + "/" + file + if os.path.isfile(fPath) and "animatedBGstarter" in file: + os.system("bash -c '~/" + file + "' &") + elif self.applyType == 2: + os.system("nitrogen --restore &") + else: + os.system("nitrogen --restore &") + self.helpLabel.set_markup(self.appliedLabel) + + def killXWinWrp(self, widget, data=None): + os.system("killall xwinwrap &") + self.helpLabel.set_markup(self.stoppedLabel) + + def passXScreenVal(self, widget): + xSvrListStore = self.builder.get_object("XScreensaver List") + row = widget.get_cursor() + path = gtk.TreePath(row.path) + treeiter = xSvrListStore.get_iter(path[0]) + self.xScreenVal = xSvrListStore.get_value(treeiter, 0) + + + def runMplayerProcess(self, widget, eve, params): + self.setSelected(params[2]) + video = params[0] + + if eve.type == gdk.EventType.DOUBLE_BUTTON_PRESS: + if self.player == "mplayer": + xid = self.getXID() + command = [self.player, video, "-slave", "-wid", str(xid), "-really-quiet", "-ao", "null", "-loop", "0"] + self.runDemoToDrawArea(command) + else: + subprocess.call([self.player, video, "-really-quiet", "-ao", "null", "-loop", "0"]) + + self.toSavePath = params[0] + self.applyType = 1 + self.helpLabel.set_markup("" + params[1] + "") + + def previewXscreen(self, widget, eve): + if eve.type == gdk.EventType.DOUBLE_BUTTON_PRESS: + demoXscrnSaver = self.xscrPth + self.xScreenVal + xid = self.getXID() + command = [demoXscrnSaver, "-window-id", str(xid)] + self.runDemoToDrawArea(command) + + def getXID(self): + # Must be actualized before getting window + demoWindowPopup = self.builder.get_object("demoPreviewPopWindow") + + if demoWindowPopup.get_visible() == False: + demoWindowPopup.show_all() + demoWindowPopup.popup() + + demoPreview = self.builder.get_object("demoPreview") + drwWindow = demoPreview.get_window() + return drwWindow.get_xid() + + def runDemoToDrawArea(self, command): + self.helpLabel.set_markup("") + + if self.demoAreaPid: + os.kill(self.demoAreaPid, signal.SIGTERM) #or signal.SIGKILL + self.demoAreaPid = None + time.sleep(.800) # 800 mili-seconds to ensure first process dead + + process = subprocess.Popen(command) + self.demoAreaPid = process.pid + + def closeDemoWindow(self, widget, data=None): + os.kill(self.demoAreaPid, signal.SIGTERM) #or signal.SIGKILL + self.demoAreaPid = None + time.sleep(.200) + self.builder.get_object("demoPreviewPopWindow").popdown() + + def clearSelection(self, widget, data=None): + self.clear() + + def clear(self): + imageGrid = self.builder.get_object("imageGrid") + + while True: + if imageGrid.get_child_at(0,0)!= None: + imageGrid.remove_row(0) + else: + break + + imageGrid.attach(self.gridLabel, 0, 0, 1, 1) + self.builder.get_object("xScreenSvrList").set_sensitive(False) + self.builder.get_object("useXScrnList").set_active(False) + self.helpLabel.set_markup(self.defaultLabel) + self.loadProgress.set_text("") + self.loadProgress.set_fraction(0.0) + self.toSavePath = None + self.xScreenVal = None + self.applyType = 1 # Default to XWinWrap + + + + def setPosData(self): + monitors = self.settings.getMonitorData() + posOff = self.builder.get_object("posOffset") + + for monitor in monitors: + if monitor.x >= 0 and monitor.y >= 0: + posOff.append_text("+" + str(monitor.x) + "+" + str(monitor.y)) + elif monitor.x <= 0 and monitor.y <= 0: + posOff.append_text(str(monitor.x) + str(monitor.y)) + elif monitor.x >= 0 and monitor.y <= 0: + posOff.append_text("+" + str(monitor.x) + str(monitor.y)) + elif monitor.x <= 0 and monitor.y >= 0: + posOff.append_text(str(monitor.x) + "+" + str(monitor.y)) + + posOff.set_active(0) + + + def closeProgram(self, widget, data=None): + sys.exit(0) diff --git a/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/signal_classes/__init__.py b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/signal_classes/__init__.py new file mode 100644 index 0000000..d2d4cdf --- /dev/null +++ b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/signal_classes/__init__.py @@ -0,0 +1 @@ +from signal_classes.CrossClassSignals import CrossClassSignals diff --git a/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/utils/SaveGWinWrapSettings.py b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/utils/SaveGWinWrapSettings.py new file mode 100644 index 0000000..a26fbb5 --- /dev/null +++ b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/utils/SaveGWinWrapSettings.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python + +import os, json + +class SaveGWinWrapSettings: + def __init__(self): + configFolder = os.path.expanduser('~') + "/.config/gwinwrap/" + self.configFile = configFolder + "settings.ini" + + if os.path.isdir(configFolder) == False: + os.mkdir(configFolder) + + if os.path.isfile(self.configFile) == False: + open(self.configFile, 'a').close() + + + def saveSettings(self, defPath, player, imgVwr): + data = {} + data['gwinwrap_settings'] = [] + + data['gwinwrap_settings'].append({ + 'defPath' : defPath, + 'player' : player, + 'imgvwr' : imgVwr + }) + + with open(self.configFile, 'w') as outfile: + json.dump(data, outfile) + + + def retrieveSettings(self): + returnData = [] + + with open(self.configFile) as infile: + try: + data = json.load(infile) + for obj in data['gwinwrap_settings']: + returnData = [obj['defPath'], obj['player'], obj['imgvwr']] + except Exception as e: + returnData = ['', 'mplayer', 'xdg-open'] + + + if returnData[0] == '': + returnData[0] = '' + + if returnData[1] == '': + returnData[1] = 'mplayer' + + if returnData[2] == '': + returnData[2] = 'xdg-open' + + return returnData diff --git a/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/utils/SaveStateToXWinWarp.py b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/utils/SaveStateToXWinWarp.py new file mode 100644 index 0000000..1e086be --- /dev/null +++ b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/utils/SaveStateToXWinWarp.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python + +import os + +class SaveStateToXWinWarp: + def __init__(self): + self.fileWriter = None + self.toSavePath = None + self.useXSvrn = None + self.xScreenVal = None + self.sveFileLoc = None + self.resolution = None + self.player = None + + + def saveToFile(self, toSavePath, resolution, + saveLoc, useXSvrn, xScreenVal, player): + + self.toSavePath = toSavePath + self.useXSvrn = useXSvrn + self.xScreenVal = xScreenVal + self.resolution = resolution + self.player = player + userPth = os.path.expanduser('~') + + # Saves to file with selected and needed settings + if toSavePath: + if toSavePath.lower().endswith(('.png', '.jpg', '.jpeg')): + self.sveFileLoc = userPth + "/" + ".config/nitrogen/bg-saved.cfg" + else: + self.sveFileLoc = userPth + "/" + saveLoc + elif useXSvrn and xScreenVal: + self.sveFileLoc = userPth + "/" + saveLoc + else: + return -1 + + if self.sveFileLoc: + self.fileWriter = open(self.sveFileLoc, "w") + + return self.startSave() + + def startSave(self): + applyType = 1 + output = None + + # XSCREENSAVER + if self.useXSvrn: + output = "xwinwrap -ov -g " + self.resolution + " -st -sp -b -nf -s -ni -- /usr/lib/xscreensaver/" + self.xScreenVal + " -window-id WID -root"; + # GIF + elif self.toSavePath.lower().endswith(('.gif')): + output = "xwinwrap -ov -g " + self.resolution + " -st -sp -b -nf -s -ni -- gifview -a -w WID " + self.toSavePath; + # Standard images using nitrogen + elif self.toSavePath.lower().endswith(('.png', 'jpg', '.jpeg')): + output = "[xin_0] \nfile=" + self.toSavePath + "\nmode=0 \nbgcolor=#000000\n\n[xin_1] \nfile=" + self.toSavePath + "\nmode=0 \nbgcolor=#000000"; + applyType = 2; + # VIDEO + else: + output = "xwinwrap -ov -g " + self.resolution + " -st -sp -b -nf -s -ni -- " + self.player + " -wid WID -really-quiet -ao null -loop 0 '" + self.toSavePath + "'"; + pass + + try: + if self.fileWriter: + self.fileWriter.write(output) + self.fileWriter.close() + except Exception as e: + print(":: Write failed! ::") + print(e) + + return applyType; diff --git a/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/utils/Settings.py b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/utils/Settings.py new file mode 100644 index 0000000..1f5479f --- /dev/null +++ b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/utils/Settings.py @@ -0,0 +1,74 @@ +# Gtk imports +import gi, cairo +gi.require_version('Gtk', '3.0') +gi.require_version('Gdk', '3.0') + +from gi.repository import Gtk as gtk +from gi.repository import Gdk as gdk + +# Python imports +import os + +# Application imports + + +class Settings: + def __init__(self): + self.builder = gtk.Builder() + self.builder.add_from_file("resources/Main_Window.glade") + + # 'Filters' + self.office = ('.doc', '.docx', '.xls', '.xlsx', '.xlt', '.xltx', '.xlm', + '.ppt', 'pptx', '.pps', '.ppsx', '.odt', '.rtf') + self.vids = ('.mkv', '.avi', '.flv', '.mov', '.m4v', '.mpg', '.wmv', + '.mpeg', '.mp4', '.webm') + self.txt = ('.txt', '.text', '.sh', '.cfg', '.conf') + self.music = ('.psf', '.mp3', '.ogg' , '.flac') + self.images = ('.png', '.jpg', '.jpeg', '.gif') + self.pdf = ('.pdf') + + + def createWindow(self): + # Get window and connect signals + window = self.builder.get_object("Main_Window") + window.connect("delete-event", gtk.main_quit) + self.setWindowData(window) + return window + + def setWindowData(self, window): + screen = window.get_screen() + visual = screen.get_rgba_visual() + + if visual != None and screen.is_composited(): + window.set_visual(visual) + + # bind css file + cssProvider = gtk.CssProvider() + cssProvider.load_from_path('resources/stylesheet.css') + screen = gdk.Screen.get_default() + styleContext = gtk.StyleContext() + styleContext.add_provider_for_screen(screen, cssProvider, gtk.STYLE_PROVIDER_PRIORITY_USER) + + # window.set_app_paintable(True) + + def getMonitorData(self): + screen = self.builder.get_object("Main_Window").get_screen() + monitors = [] + for m in range(screen.get_n_monitors()): + monitors.append(screen.get_monitor_geometry(m)) + + for monitor in monitors: + print(str(monitor.width) + "x" + str(monitor.height) + "+" + str(monitor.x) + "+" + str(monitor.y)) + + return monitors + + + def returnBuilder(self): return self.builder + + # Filter returns + def returnOfficeFilter(self): return self.office + def returnVidsFilter(self): return self.vids + def returnTextFilter(self): return self.txt + def returnMusicFilter(self): return self.music + def returnImagesFilter(self): return self.images + def returnPdfFilter(self): return self.pdf diff --git a/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/utils/__init__.py b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/utils/__init__.py new file mode 100644 index 0000000..ca4b01b --- /dev/null +++ b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/utils/__init__.py @@ -0,0 +1,3 @@ +from utils.Settings import Settings +from utils.SaveStateToXWinWarp import SaveStateToXWinWarp +from utils.SaveGWinWrapSettings import SaveGWinWrapSettings diff --git a/src/debs/gwinwrap-0-0-1-x64/usr/share/doc/gwinwrap/copyright b/src/debs/gwinwrap-0-0-1-x64/usr/share/doc/gwinwrap/copyright new file mode 100644 index 0000000..53b78e8 --- /dev/null +++ b/src/debs/gwinwrap-0-0-1-x64/usr/share/doc/gwinwrap/copyright @@ -0,0 +1,22 @@ +GWinWrap is copyright 2016, 2017 Maxim Stewart. +GWinWrap is currently developed by ITDominator <1itdominator@gmail.com>. + +License: GPLv2+ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. + +See /usr/share/common-licenses/GPL-2, or + for the terms of the latest version +of the GNU General Public License.