diff --git a/gui/app.py b/gui/app.py index c644d55..18dc0a7 100644 --- a/gui/app.py +++ b/gui/app.py @@ -169,15 +169,13 @@ class App(ctk.CTk): self._main_frame = ctk.CTkFrame(self._paned, fg_color="transparent") self._paned.add(self._main_frame, minsize=500) - # Header bar (language + about) - header_bar = ctk.CTkFrame(self._main_frame, fg_color="transparent", height=40) - header_bar.pack(fill="x", padx=10, pady=(8, 0)) - header_bar.pack_propagate(False) + # Header controls — overlay frame placed on top of tabview's tab row + self._header_controls = ctk.CTkFrame(self._main_frame, fg_color="transparent", height=30) # Language selector _lang_img = ctk_icon("globe", 18) self._lang_icon = ctk.CTkLabel( - header_bar, text="" if _lang_img else "\U0001f310", + self._header_controls, text="" if _lang_img else "\U0001f310", image=_lang_img, font=ctk.CTkFont(size=14), width=20, ) self._lang_icon.pack(side="right", padx=(5, 0)) @@ -185,17 +183,17 @@ class App(ctk.CTk): current_display = LANGUAGES.get(i18n.get_language(), "English") self._lang_var = ctk.StringVar(value=current_display) self.lang_menu = ctk.CTkOptionMenu( - header_bar, values=lang_values, variable=self._lang_var, - width=110, height=30, command=self._change_language + self._header_controls, values=lang_values, variable=self._lang_var, + width=110, height=26, command=self._change_language ) self.lang_menu.pack(side="right", padx=(5, 0)) # Check Updates button _sync_img = ctk_icon("refresh", 18) self._update_check_btn = ctk.CTkButton( - header_bar, text="" if _sync_img else "\u21bb", - image=_sync_img, width=30, height=30, - corner_radius=15, fg_color="#6b7280", hover_color="#4b5563", + self._header_controls, text="" if _sync_img else "\u21bb", + image=_sync_img, width=26, height=26, + corner_radius=13, fg_color="#6b7280", hover_color="#4b5563", command=self._check_updates_manual, ) self._update_check_btn.pack(side="right", padx=(5, 0)) @@ -203,12 +201,12 @@ class App(ctk.CTk): # About button _info_img = ctk_icon("info", 18) self.about_btn = ctk.CTkButton( - header_bar, text="" if _info_img else "ⓘ", - image=_info_img, width=30, height=30, - corner_radius=15, fg_color="#6b7280", hover_color="#4b5563", + self._header_controls, text="" if _info_img else "ⓘ", + image=_info_img, width=26, height=26, + corner_radius=13, fg_color="#6b7280", hover_color="#4b5563", command=self._show_about ) - self.about_btn.pack(side="right", padx=(5, 5)) + self.about_btn.pack(side="right", padx=(5, 0)) # Update banner (hidden by default) self._update_banner = None @@ -251,8 +249,13 @@ class App(ctk.CTk): # Create new tabview self.tabview = ctk.CTkTabview(self._main_frame, command=self._on_tab_changed) self.tabview._outer_spacing = 0 + self.tabview._outer_button_overhang = 0 self.tabview._configure_grid() - self.tabview.pack(fill="both", expand=True, padx=10, pady=(0, 10)) + self.tabview.pack(fill="both", expand=True, padx=10, pady=(4, 10)) + + # Overlay header controls on top-right of tabview (same row as tab buttons) + self._header_controls.lift() + self._header_controls.place(in_=self.tabview, relx=1.0, y=0, anchor="ne", relwidth=0.4) for key in self._tab_keys: self.tabview.add(_tab_label(key)) diff --git a/releases/ServerManager-v1.9.32-win-x64.exe b/releases/ServerManager-v1.9.37-win-x64.exe similarity index 98% rename from releases/ServerManager-v1.9.32-win-x64.exe rename to releases/ServerManager-v1.9.37-win-x64.exe index 0f9f57a..5d66336 100644 Binary files a/releases/ServerManager-v1.9.32-win-x64.exe and b/releases/ServerManager-v1.9.37-win-x64.exe differ diff --git a/version.py b/version.py index fd48631..e7a8b68 100755 --- a/version.py +++ b/version.py @@ -1,6 +1,6 @@ """Version info for ServerManager.""" -__version__ = "1.9.36" +__version__ = "1.9.37" __app_name__ = "ServerManager" __author__ = "aibot777" __description__ = "Desktop GUI for managing remote servers"