feat: add window size restore

This commit is contained in:
ihmily
2025-10-15 21:27:52 +08:00
parent 4fdac11175
commit ba8d041ba5
4 changed files with 25 additions and 3 deletions

View File

@@ -286,6 +286,14 @@ class SettingsPage(PageBase):
),
),
self.create_folder_setting_row(self._["name_rules"]),
self.create_setting_row(
self._["remember_window_size"],
ft.Switch(
value=self.get_config_value("remember_window_size", False),
on_change=self.on_change,
data="remember_window_size",
),
),
],
is_mobile,
),

View File

@@ -213,6 +213,7 @@
"time": "time",
"title": "title",
"proxy_settings": "Proxy Settings",
"remember_window_size": "Remember Window Size",
"is_proxy_enabled": "Configuration for using proxy and related settings",
"enable_proxy": "Enable Proxy",
"proxy_address": "Proxy Address",

View File

@@ -212,6 +212,7 @@
"author": "作者",
"time": "时间",
"title": "标题",
"remember_window_size": "退出时记住窗口大小",
"proxy_settings": "代理设置",
"is_proxy_enabled": "设置是否使用代理及相关配置",
"enable_proxy": "开启代理",

18
main.py
View File

@@ -29,7 +29,7 @@ class GlobalState:
global_state = GlobalState()
def setup_window(page: ft.Page, is_web: bool) -> None:
def setup_window(page: ft.Page, app: App, is_web: bool) -> None:
page.window.icon = os.path.join(execute_dir, ASSETS_DIR, "icon.ico")
page.window.center()
page.window.to_front()
@@ -39,6 +39,14 @@ def setup_window(page: ft.Page, is_web: bool) -> None:
if not is_web:
try:
if app.settings.user_config.get("remember_window_size"):
window_width = app.settings.user_config.get("window_width")
window_height = app.settings.user_config.get("window_height")
if window_width and window_height:
page.window.width = int(window_width)
page.window.height = int(window_height)
return
screen = get_monitors()[0]
page.window.width = int(screen.width * WINDOW_SCALE)
page.window.height = int(screen.height * WINDOW_SCALE)
@@ -75,6 +83,10 @@ def handle_route_change(page: ft.Page, app: App) -> callable:
def handle_window_event(page: ft.Page, app: App, save_progress_overlay: 'SaveProgressOverlay') -> callable:
async def on_window_event(e: ft.ControlEvent) -> None:
if e.data == "close":
if app.settings.user_config.get("remember_window_size"):
app.settings.user_config["window_width"] = page.window.width
app.settings.user_config["window_height"] = page.window.height
await app.config_manager.save_user_config(app.settings.user_config)
await handle_app_close(page, app, save_progress_overlay)
return on_window_event
@@ -108,13 +120,13 @@ async def main(page: ft.Page) -> None:
page.window.min_height = MIN_WIDTH * WINDOW_SCALE
is_web = args.web or platform == "web"
setup_window(page, is_web)
app = App(page)
page.data = app
app.is_web_mode = is_web
app.is_mobile = False
setup_window(page, app, is_web)
if not is_web:
try:
app.tray_manager = TrayManager(app)