1
0
mirror of https://github.com/EDCD/EDMarketConnector.git synced 2025-05-04 09:21:03 +03:00

[#1346] Option to Disable Systray

This commit is contained in:
David Sangrey 2025-04-22 22:48:31 -04:00
parent ed964b3e55
commit eae0417797
No known key found for this signature in database
GPG Key ID: 3AEADBB0186884BC
3 changed files with 38 additions and 9 deletions

View File

@ -446,13 +446,20 @@ class AppWindow:
self.prefsdialog = None
if sys.platform == 'win32':
if sys.platform == 'win32' and not bool(config.get_int('no_systray')):
from simplesystray import SysTrayIcon
def open_window(systray: 'SysTrayIcon', *args) -> None:
self.w.deiconify()
menu_options = (("Open", None, open_window),)
logfile_loc = pathlib.Path(config.app_dir_path / 'logs')
menu_options = (
("Open", None, open_window),
("Report a Bug", None, self.help_report_a_bug),
("About EDMC", None, lambda: not self.HelpAbout.showing and self.HelpAbout(self.w)),
("Open Log Folder", None, lambda: prefs.open_folder(logfile_loc)),
("Open System Profiler", None, lambda: prefs.help_open_system_profiler(self)),
)
# Method associated with on_quit is called whenever the systray is closing
self.systray = SysTrayIcon("EDMarketConnector.ico", applongname, menu_options, on_quit=self.exit_tray)
self.systray.start()
@ -616,7 +623,7 @@ class AppWindow:
self.help_menu.add_command(command=lambda: not self.HelpAbout.showing and self.HelpAbout(self.w))
logfile_loc = pathlib.Path(config.app_dir_path / 'logs')
self.help_menu.add_command(command=lambda: prefs.open_folder(logfile_loc)) # Open Log Folder
self.help_menu.add_command(command=lambda: prefs.help_open_system_profiler(self)) # Open Log Folde
self.help_menu.add_command(command=lambda: prefs.help_open_system_profiler(self)) # Open System Profiler
self.menubar.add_cascade(menu=self.help_menu)
if sys.platform == 'win32':
@ -1857,10 +1864,14 @@ class AppWindow:
def onexit(self, event=None, restart: bool = False) -> None:
"""Application shutdown procedure."""
if sys.platform == 'win32':
shutdown_thread = threading.Thread(
target=self.systray.shutdown,
daemon=True,
)
try:
shutdown_thread = threading.Thread(
target=self.systray.shutdown,
daemon=True,
)
except AttributeError: # No SysTray
shutdown_thread = threading.Thread(daemon=True)
shutdown_thread.start()
config.set_shutdown() # Signal we're in shutdown now.
@ -1938,7 +1949,9 @@ class AppWindow:
def default_iconify(self, event=None) -> None:
"""Handle the Windows default theme 'minimise' button."""
# If we're meant to "minimize to system tray" then hide the window so no taskbar icon is seen
if sys.platform == 'win32' and config.get_bool('minimize_system_tray'):
if (sys.platform == 'win32'
and config.get_bool('minimize_system_tray')
and not bool(config.get_int('no_systray'))):
# This gets called for more than the root widget, so only react to that
if str(event.widget) == '.':
self.w.withdraw()

View File

@ -78,6 +78,9 @@
/* EDMarketConnector.py: Label for 'Station' line in main UI; prefs.py: Configuration - Label for selection of 'Station' provider website; prefs.py: Appearance - Example 'Normal' text; stats.py: Status dialog subtitle; In files: EDMarketConnector.py:918; prefs.py:632; prefs.py:770; stats.py:408; */
"Station" = "Station";
/* prefs.py: Appearance option for Windows "Disable Systray"; */
"Disable Systray" = "Disable Systray";
/* EDMarketConnector.py: 'File' menu title on OSX; EDMarketConnector.py: 'File' menu title; EDMarketConnector.py: 'File' menu; In files: EDMarketConnector.py:921; EDMarketConnector.py:939; EDMarketConnector.py:942; EDMarketConnector.py:2264; */
"File" = "File";

View File

@ -704,6 +704,7 @@ class PreferencesDialog(tk.Toplevel):
self.lang = tk.StringVar(value=self.languages.get(config.get_str('language'), tr.tl('Default')))
self.always_ontop = tk.BooleanVar(value=bool(config.get_int('always_ontop')))
self.minimize_system_tray = tk.BooleanVar(value=config.get_bool('minimize_system_tray'))
self.disable_system_tray = tk.BooleanVar(value=config.get_bool('no_systray'))
self.theme = tk.IntVar(value=config.get_int('theme'))
self.theme_colors = [config.get_str('dark_text'), config.get_str('dark_highlight')]
self.theme_prompts = [
@ -881,7 +882,7 @@ class PreferencesDialog(tk.Toplevel):
columnspan=3, padx=self.BUTTONX, pady=self.PADY, sticky=tk.W, row=row.get()
) # Appearance setting
if sys.platform == 'win32':
if sys.platform == 'win32' and not bool(config.get_int('no_systray')):
nb.Checkbutton(
appearance_frame,
# LANG: Appearance option for Windows "minimize to system tray"
@ -890,6 +891,15 @@ class PreferencesDialog(tk.Toplevel):
command=self.themevarchanged
).grid(columnspan=3, padx=self.BUTTONX, pady=self.PADY, sticky=tk.W, row=row.get()) # Appearance setting
if sys.platform == 'win32':
nb.Checkbutton(
appearance_frame,
# LANG: Appearance option for Windows "Disable Systray"
text=tr.tl('Disable Systray'),
variable=self.disable_system_tray,
command=self.themevarchanged,
).grid(columnspan=3, padx=self.BUTTONX, pady=self.PADY, sticky=tk.W, row=row.get()) # Appearance setting
nb.Label(appearance_frame).grid(sticky=tk.W) # big spacer
# LANG: Label for Settings > Appearance tab
@ -1280,6 +1290,9 @@ class PreferencesDialog(tk.Toplevel):
config.set('ui_transparency', self.transparency.get())
config.set('always_ontop', self.always_ontop.get())
config.set('minimize_system_tray', self.minimize_system_tray.get())
if self.disable_system_tray.get() != config.get('no_systray'):
self.req_restart = True
config.set('no_systray', self.disable_system_tray.get())
config.set('theme', self.theme.get())
config.set('dark_text', self.theme_colors[0])
config.set('dark_highlight', self.theme_colors[1])