diff --git a/src/base/consts.cpp b/src/base/consts.cpp index bfdaec84..dbe1ccbc 100644 --- a/src/base/consts.cpp +++ b/src/base/consts.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2022 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -12,6 +12,7 @@ const char kSearchIndexPage[] = DMAN_WEB_DIR "/toSearchMd/index.html"; const char kConfigWindowWidth[] = "window_width"; const char kConfigWindowHeight[] = "window_height"; +const char kConfigWindowMaximized[] = "window_maximized"; const char kConfigWindowInfo[] = "window_info"; const char kConfigAppList[] = "AppList"; diff --git a/src/base/consts.h b/src/base/consts.h index f2b8dbf2..898ca91a 100644 --- a/src/base/consts.h +++ b/src/base/consts.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2022 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -15,6 +15,7 @@ extern const char kSearchIndexPage[]; extern const char kConfigWindowWidth[]; extern const char kConfigWindowHeight[]; +extern const char kConfigWindowMaximized[]; extern const char kConfigWindowInfo[]; extern const char kConfigAppList[]; diff --git a/src/controller/window_manager.cpp b/src/controller/window_manager.cpp index 5f9bfaaf..fcf6708f 100644 --- a/src/controller/window_manager.cpp +++ b/src/controller/window_manager.cpp @@ -15,6 +15,8 @@ #include #include +#include +#include #define WM_SENDER_NAME "Sender" const int kWinMinWidth = 680; @@ -199,6 +201,7 @@ void WindowManager::setWindow(WebWindow *window) setting->beginGroup(QString(kConfigWindowInfo)); int saveWidth = setting->value(QString(kConfigWindowWidth)).toInt(); int saveHeight = setting->value(QString(kConfigWindowHeight)).toInt(); + bool saveMaximized = setting->value(QString(kConfigWindowMaximized)).toBool(); setting->endGroup(); // 如果配置文件没有数据 if (saveWidth == 0 || saveHeight == 0) { @@ -213,6 +216,17 @@ void WindowManager::setWindow(WebWindow *window) qCDebug(app) << "Setting minimum window size to:" << kWinMinWidth << "x" << kWinMinHeight; window->setMinimumSize(kWinMinWidth, kWinMinHeight); + // 获取当前屏幕可用区域(已排除Dock栏占用区域) + QRect screenRect = QGuiApplication::primaryScreen()->availableGeometry(); + + if (saveMaximized || (saveWidth > screenRect.width() && saveHeight > screenRect.height())) { + // 上次关闭时最大化 或 保存的窗口尺寸宽和高均大于屏幕可用区域,直接最大化 + window->showMaximized(); + } else { + // 屏幕居中显示 + Dtk::Widget::moveToCenter(window); + } + qCDebug(app) << "Window properties configured successfully"; } diff --git a/src/view/web_window.cpp b/src/view/web_window.cpp index 29ffd042..639a734d 100644 --- a/src/view/web_window.cpp +++ b/src/view/web_window.cpp @@ -941,11 +941,20 @@ void WebWindow::saveWindowSize() { qCDebug(app) << "Saving window size"; QSettings *setting = ConfigManager::getInstance()->getSettings(); + bool isMaximized = windowState() & Qt::WindowMaximized; setting->beginGroup(QString(kConfigWindowInfo)); - setting->setValue(QString(kConfigWindowWidth), width()); - setting->setValue(QString(kConfigWindowHeight), height()); + if (isMaximized) { + // 最大化时保存正常状态下的几何信息,以便恢复时使用正确尺寸 + setting->setValue(QString(kConfigWindowWidth), normalGeometry().width()); + setting->setValue(QString(kConfigWindowHeight), normalGeometry().height()); + } else { + setting->setValue(QString(kConfigWindowWidth), width()); + setting->setValue(QString(kConfigWindowHeight), height()); + } + setting->setValue(QString(kConfigWindowMaximized), isMaximized); + setting->sync(); setting->endGroup(); - qCDebug(app) << "Window size saved"; + qCDebug(app) << "Window size saved, maximized:" << isMaximized; } /** * @brief WebWindow::updateDb 更新数据库