X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=Cura%2Fgui%2Fapp.py;h=47932c60c5e163b1415a7f1536cd9a15ba8af560;hb=6208201bafdeaf82883181471c6da3a41283cfe7;hp=3861dbc14d6efd13de58722d8683b61997c421c5;hpb=2de8becb4000ab530538e230276070edc75c00ac;p=cura.git diff --git a/Cura/gui/app.py b/Cura/gui/app.py index 3861dbc1..47932c60 100644 --- a/Cura/gui/app.py +++ b/Cura/gui/app.py @@ -23,6 +23,31 @@ class CuraApp(wx.App): self.splash = None self.loadFiles = files + if sys.platform.startswith('win'): + #Check for an already running instance, if another instance is running load files in there + from Cura.util import version + from ctypes import windll + import ctypes + import socket + import threading + + portNr = 0xCA00 + sum(map(ord, version.getVersion(False))) + if len(files) > 0: + try: + other_hwnd = windll.user32.FindWindowA(None, ctypes.c_char_p('Cura - ' + version.getVersion())) + if other_hwnd != 0: + sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + sock.sendto('\0'.join(files), ("127.0.0.1", portNr)) + + windll.user32.SetForegroundWindow(other_hwnd) + return + except: + pass + + socketListener = threading.Thread(target=self.Win32SocketListener, args=(portNr,)) + socketListener.daemon = True + socketListener.start() + if sys.platform.startswith('darwin'): #Do not show a splashscreen on OSX, as by Apple guidelines self.afterSplashCallback() @@ -36,11 +61,23 @@ class CuraApp(wx.App): except Exception as e: warnings.warn("File at {p} cannot be read: {e}".format(p=path, e=str(e))) + def Win32SocketListener(self, port): + import socket + try: + sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + sock.bind(("127.0.0.1", port)) + while True: + data, addr = sock.recvfrom(2048) + self.mainWindow.OnDropFiles(data.split('\0')) + except: + pass + def afterSplashCallback(self): #These imports take most of the time and thus should be done after showing the splashscreen import webbrowser from Cura.gui import mainWindow from Cura.gui import configWizard + from Cura.gui import newVersionDialog from Cura.util import profile from Cura.util import resources from Cura.util import version @@ -93,6 +130,9 @@ class CuraApp(wx.App): self.splash.Show(False) self.mainWindow.Show() self.mainWindow.OnDropFiles(self.loadFiles) + if profile.getPreference('last_run_version') != version.getVersion(False): + profile.putPreference('last_run_version', version.getVersion(False)) + newVersionDialog.newVersionDialog().Show() setFullScreenCapable(self.mainWindow)