From cb1dae530d3bafdbf00802167fe47957cec75a48 Mon Sep 17 00:00:00 2001
From: Andrew Lorimer <andrew@lorimer.id.au>
Date: Sat, 22 May 2021 13:59:54 +1000
Subject: [PATCH] add stop function to systray icon

---
 ppt_control/ppt_control.py | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/ppt_control/ppt_control.py b/ppt_control/ppt_control.py
index 5ff80ef..d6a06d1 100755
--- a/ppt_control/ppt_control.py
+++ b/ppt_control/ppt_control.py
@@ -469,7 +469,7 @@ def open_settings(_=None):
     global interface_root
     interface_root = tk.Tk()
     interface_root.protocol("WM_DELETE_WINDOW", on_closing)
-    interface_root.iconphoto(False, tk.PhotoImage(file="static/icons/ppt.png"))
+    interface_root.iconphoto(False, tk.PhotoImage(file="static\icons\ppt.png"))
     interface_root.geometry("600x300+300+300")
     app = Interface(interface_root)
     interface_thread = threading.Thread(target=interface_root.mainloop())
@@ -529,13 +529,21 @@ class Interface(ttk.Frame):
         refresh_status()
         
         
+def exit_action(icon):
+    logger.debug("User requested shutdown")
+    icon.visible = False
+    icon.stop()
 
 def show_icon():
     logger.debug("Starting system tray icon")
-    menu = (pystray.MenuItem("Status", lambda: null_action(), enabled=False),
+    icon = pystray.Icon("ppt-control")
+    icon.menu = (pystray.MenuItem("Status", lambda: null_action(), enabled=False),
             pystray.MenuItem("Restart", lambda: start()),
-            pystray.MenuItem("Settings", lambda: open_settings()))
-    icon = pystray.Icon("ppt-control", Image.open(os.path.dirname(os.path.realpath(__file__)) + r'''\static\icons\ppt.ico'''), "ppt-control", menu)
+            pystray.MenuItem("Stop", lambda: exit_action(icon)),
+            pystray.MenuItem("Settings", lambda: open_settings())
+            )
+    icon.icon = Image.open(os.path.dirname(os.path.realpath(__file__)) + r'''\static\icons\ppt.ico''')
+    icon.title = "ppt-control"
     icon.visible = True
     icon.run(setup=start)
 
@@ -579,6 +587,7 @@ def start_interface():
 
     # Start systray icon and server
     show_icon()
+    sys.exit(0)
 
 if __name__ == "__main__":
     start_interface()
-- 
2.47.1