diff --git a/bin/gwinwrap-0-0-1-x64.deb b/bin/gwinwrap-0-0-1-x64.deb
index fb8b0fe..991b8b6 100644
Binary files a/bin/gwinwrap-0-0-1-x64.deb and b/bin/gwinwrap-0-0-1-x64.deb differ
diff --git a/images/pic5.png b/images/pic5.png
index a698a49..67fd734 100644
Binary files a/images/pic5.png and b/images/pic5.png differ
diff --git a/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/GWinWrap.py b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/GWinWrap.py
old mode 100644
new mode 100755
index c0c8f85..d5d95d2
--- a/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/GWinWrap.py
+++ b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/GWinWrap.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-import os, cairo, sys, gi, re, threading, subprocess, hashlib
+import os, cairo, sys, gi, re, threading, subprocess, hashlib, signal, time
gi.require_version('Gtk', '3.0')
gi.require_version('Gdk', '3.0')
@@ -18,27 +18,18 @@ gdk.threads_init()
class GWinWrap:
def __init__(self):
- self.builder = gtk.Builder()
+ self.builder = gtk.Builder()
self.builder.add_from_file("resources/GWinWrap.glade")
+ self.builder.connect_signals(self)
# Get window and connect signals
- self.window = self.builder.get_object("Main")
- self.builder.connect_signals(self)
- self.window.connect("delete-event", gtk.main_quit)
- self.screen = self.window.get_screen()
- self.visual = self.screen.get_rgba_visual()
- if self.visual != None and self.screen.is_composited():
- self.window.set_visual(self.visual)
+ self.stateSaver = SaveStateToXWinWarp()
+ self.sttngsSver = SaveGWinWrapSettings()
+ window = self.builder.get_object("Main")
+ monitors = self.setWindowData(window)
+ window.connect("delete-event", gtk.main_quit)
- self.window.set_app_paintable(True)
- self.window.connect("draw", self.area_draw)
-
- # 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)
+ print(monitors[1])
# Add filter to allow only folders to be selected
dialog = self.builder.get_object("selectedDirDialog")
@@ -46,10 +37,7 @@ class GWinWrap:
dialog.add_filter(filefilter)
# Get reference to remove and add it back...
- self.gridLabel = self.builder.get_object("gridLabel")
-
- self.stateSaver = SaveStateToXWinWarp()
- self.sttngsSver = SaveGWinWrapSettings()
+ self.gridLabel = self.builder.get_object("gridLabel")
self.focusedImg = gtk.Image()
self.usrHome = os.path.expanduser('~')
@@ -80,10 +68,28 @@ class GWinWrap:
self.defPath = None
self.player = None
self.imgVwr = None
+ self.xScrnDemoPid = None
self.retrieveSettings()
- self.window.show()
+ window.show()
+ def setWindowData(self, window):
+ screen = window.get_screen()
+ visual = screen.get_rgba_visual()
+ if visual != None and screen.is_composited():
+ window.set_visual(visual)
+
+ window.set_app_paintable(True)
+ window.connect("draw", self.area_draw)
+
+ # 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)
+
+ return self.getMonitorData(screen)
def area_draw(self, widget, cr):
cr.set_source_rgba(0, 0, 0, 0.64)
@@ -91,7 +97,18 @@ class GWinWrap:
cr.paint()
cr.set_operator(cairo.OPERATOR_OVER)
+ def getMonitorData(self, screen):
+ monitors = []
+ wxhxny = []
+ for m in range(screen.get_n_monitors()):
+ monitors.append(screen.get_monitor_geometry(m))
+
+ wxhxny.append(monitors)
+ for monitor in monitors:
+ wxhxny.append(str(monitor.width) + "x" + str(monitor.height) + "+" + str(monitor.x) + "+" + str(monitor.y))
+
+ return wxhxny
def setNewDir(self, widget, data=None):
@@ -125,7 +142,7 @@ class GWinWrap:
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 os.path.isfile(hashImgpth) == False:
+ if isfile(hashImgpth) == False:
self.generateThumbnail(fullPathFile, hashImgpth)
thumbnl = self.createGtkImage(hashImgpth, [310, 310])
@@ -219,11 +236,11 @@ class GWinWrap:
def mouseOver(self, widget, eve, args):
hand_cursor = gdk.Cursor(gdk.CursorType.HAND2)
- self.window.get_window().set_cursor(hand_cursor)
+ self.builder.get_object("Main").get_window().set_cursor(hand_cursor)
def mouseOut(self, widget, eve, args):
watch_cursor = gdk.Cursor(gdk.CursorType.LEFT_PTR)
- self.window.get_window().set_cursor(watch_cursor)
+ self.builder.get_object("Main").get_window().set_cursor(watch_cursor)
def toggleXscreenUsageField(self, widget, data=None):
useXscreenSaver = self.builder.get_object("useXScrnList")
@@ -291,8 +308,30 @@ class GWinWrap:
def previewXscreen(self, widget, eve):
if eve.type == gdk.EventType.DOUBLE_BUTTON_PRESS:
- preview = self.xscrPth + "/" + self.xScreenVal + "&"
- os.system(preview)
+ # Must be actualized before getting window
+ demoWindow = self.builder.get_object("xScrnPreviewPopWindow")
+ self.helpLabel.set_markup("")
+
+ if self.xScrnDemoPid:
+ os.kill(self.xScrnDemoPid, signal.SIGTERM) #or signal.SIGKILL
+ self.xScrnDemoPid = None
+
+ if demoWindow.get_visible() == False:
+ demoWindow.show_all()
+ demoWindow.popup()
+
+ time.sleep(.800) # 800 mili-seconds to ensure first process dead
+ xScreenPreview = self.builder.get_object("xScreenPreview")
+ demoXscrnSaver = self.xscrPth + self.xScreenVal
+ window = xScreenPreview.get_window()
+ xid = window.get_xid()
+ process = subprocess.Popen([demoXscrnSaver, "-window-id", str(xid)])
+ self.xScrnDemoPid = process.pid
+
+ def closeDemoWindow(self, widget, data=None):
+ self.builder.get_object("xScrnPreviewPopWindow").popdown()
+ os.kill(self.xScrnDemoPid, signal.SIGTERM) #or signal.SIGKILL
+ self.xScrnDemoPid = None
def clearSelection(self, widget, data=None):
self.clear()
diff --git a/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/resources/GWinWrap.glade b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/resources/GWinWrap.glade
index 671cdbc..ad17b15 100644
--- a/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/resources/GWinWrap.glade
+++ b/src/debs/gwinwrap-0-0-1-x64/opt/GWinWrap/resources/GWinWrap.glade
@@ -115,12 +115,10 @@
@@ -629,7 +627,6 @@
True
True
True
- closePopupImage
True
@@ -817,4 +814,69 @@
+
diff --git a/src/versions/0.0.1/GWinWrap/GWinWrap.py b/src/versions/0.0.1/GWinWrap/GWinWrap.py
index 2a7fa52..d5d95d2 100755
--- a/src/versions/0.0.1/GWinWrap/GWinWrap.py
+++ b/src/versions/0.0.1/GWinWrap/GWinWrap.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
-import os, cairo, sys, gi, re, threading, subprocess, hashlib
+import os, cairo, sys, gi, re, threading, subprocess, hashlib, signal, time
gi.require_version('Gtk', '3.0')
gi.require_version('Gdk', '3.0')
@@ -68,6 +68,7 @@ class GWinWrap:
self.defPath = None
self.player = None
self.imgVwr = None
+ self.xScrnDemoPid = None
self.retrieveSettings()
window.show()
@@ -307,8 +308,30 @@ class GWinWrap:
def previewXscreen(self, widget, eve):
if eve.type == gdk.EventType.DOUBLE_BUTTON_PRESS:
- preview = self.xscrPth + "/" + self.xScreenVal + "&"
- os.system(preview)
+ # Must be actualized before getting window
+ demoWindow = self.builder.get_object("xScrnPreviewPopWindow")
+ self.helpLabel.set_markup("")
+
+ if self.xScrnDemoPid:
+ os.kill(self.xScrnDemoPid, signal.SIGTERM) #or signal.SIGKILL
+ self.xScrnDemoPid = None
+
+ if demoWindow.get_visible() == False:
+ demoWindow.show_all()
+ demoWindow.popup()
+
+ time.sleep(.800) # 800 mili-seconds to ensure first process dead
+ xScreenPreview = self.builder.get_object("xScreenPreview")
+ demoXscrnSaver = self.xscrPth + self.xScreenVal
+ window = xScreenPreview.get_window()
+ xid = window.get_xid()
+ process = subprocess.Popen([demoXscrnSaver, "-window-id", str(xid)])
+ self.xScrnDemoPid = process.pid
+
+ def closeDemoWindow(self, widget, data=None):
+ self.builder.get_object("xScrnPreviewPopWindow").popdown()
+ os.kill(self.xScrnDemoPid, signal.SIGTERM) #or signal.SIGKILL
+ self.xScrnDemoPid = None
def clearSelection(self, widget, data=None):
self.clear()
diff --git a/src/versions/0.0.1/GWinWrap/resources/GWinWrap.glade b/src/versions/0.0.1/GWinWrap/resources/GWinWrap.glade
index bcbb44a..ad17b15 100644
--- a/src/versions/0.0.1/GWinWrap/resources/GWinWrap.glade
+++ b/src/versions/0.0.1/GWinWrap/resources/GWinWrap.glade
@@ -627,7 +627,6 @@
True
True
True
- closePopupImage
True
@@ -815,4 +814,69 @@
+
+ 640
+ 525
+ False
+ 350
+ True
+ True
+ helpLabel
+ bottom
+ False
+
+
+ True
+ False
+ vertical
+
+
+ True
+ False
+
+
+ True
+ True
+ True
+ Close XScreenSaver Demo Window
+ closePopupImage
+ True
+
+
+
+ False
+ True
+ end
+ 0
+
+
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+ 0
+ none
+
+
+ True
+ False
+
+
+
+
+ True
+ True
+ 1
+
+
+
+
+
diff --git a/src/versions/0.0.1/GWinWrap/utils/__pycache__/SaveGWinWrapSettings.cpython-36.pyc b/src/versions/0.0.1/GWinWrap/utils/__pycache__/SaveGWinWrapSettings.cpython-36.pyc
deleted file mode 100644
index 23ecc42..0000000
Binary files a/src/versions/0.0.1/GWinWrap/utils/__pycache__/SaveGWinWrapSettings.cpython-36.pyc and /dev/null differ
diff --git a/src/versions/0.0.1/GWinWrap/utils/__pycache__/SaveStateToXWinWarp.cpython-36.pyc b/src/versions/0.0.1/GWinWrap/utils/__pycache__/SaveStateToXWinWarp.cpython-36.pyc
deleted file mode 100644
index 638f235..0000000
Binary files a/src/versions/0.0.1/GWinWrap/utils/__pycache__/SaveStateToXWinWarp.cpython-36.pyc and /dev/null differ
diff --git a/src/versions/0.0.1/GWinWrap/utils/__pycache__/__init__.cpython-36.pyc b/src/versions/0.0.1/GWinWrap/utils/__pycache__/__init__.cpython-36.pyc
deleted file mode 100644
index b2f720f..0000000
Binary files a/src/versions/0.0.1/GWinWrap/utils/__pycache__/__init__.cpython-36.pyc and /dev/null differ