@@ -107,9 +107,19 @@ def systray_clicked(icon: pystray.Icon, menu: pystray.MenuItem):
107107 app .hide ()
108108
109109
110- def quit_systray (icon : pystray .Icon , menu : pystray .MenuItem ):
110+ def systray_settings (icon : pystray .Icon , menu : pystray .MenuItem ):
111111 import kivy .app
112- kivy .app .App .get_running_app ().stop ()
112+ app = kivy .app .App .get_running_app ()
113+ if app .hidden :
114+ app .show ()
115+
116+ import kivy .clock
117+ kivy .clock .Clock .schedule_once (kivy .app .App .get_running_app ().open_settings )
118+
119+
120+ def systray_quit (icon : pystray .Icon , menu : pystray .MenuItem ):
121+ import kivy .clock
122+ kivy .clock .Clock .schedule_once (kivy .app .App .get_running_app ().stop )
113123 icon .stop ()
114124
115125
@@ -128,8 +138,9 @@ def resource_path(relative_path: str):
128138
129139def run_gui_from_systray ():
130140 default_menu_item = pystray .MenuItem (TITLE , systray_clicked , default = True , visible = True )
131- quit_menu_item = pystray .MenuItem ('Quit' , quit_systray )
132- systray_menu = pystray .Menu (default_menu_item , quit_menu_item )
141+ settings_menu_item = pystray .MenuItem ('Settings' , systray_settings )
142+ quit_menu_item = pystray .MenuItem ('Quit' , systray_quit )
143+ systray_menu = pystray .Menu (default_menu_item , settings_menu_item , quit_menu_item )
133144 systray = pystray .Icon (TITLE , menu = systray_menu )
134145 systray .icon = PIL .Image .open (resource_path (r'images/icon.png' ))
135146 systray .run (setup = run_gui )
@@ -161,7 +172,7 @@ def parse_args():
161172 # FIXME: Windows only ATM.
162173 mutex = win32event .CreateMutex (None , False , TITLE )
163174 if ERROR_ALREADY_EXISTS == win32api .GetLastError ():
164- exit (f"{ TITLE } is already running" )
175+ sys . exit (f"{ TITLE } is already running" )
165176
166177 arguments = parse_args ()
167178 configure (arguments )
0 commit comments