diff -Nru kylin-nm-5.0.0.0/debian/changelog kylin-nm-5.0.0.0/debian/changelog --- kylin-nm-5.0.0.0/debian/changelog 2024-12-20 14:12:19.000000000 +0800 +++ kylin-nm-5.0.0.0/debian/changelog 2024-12-23 15:55:06.000000000 +0800 @@ -1,3 +1,12 @@ +kylin-nm (5.0.0.0-ok0.5) huanghe; urgency=medium + + * BUG:无 + * 需求:无 + * 其他改动说明:三岛适配优化 + * 其他改动影响域:无 + + -- lixiang1 <lixiang1@kylinos.cn> Mon, 23 Dec 2024 15:55:06 +0800 + kylin-nm (5.0.0.0-ok0.4) huanghe; urgency=medium * BUG:无 diff -Nru kylin-nm-5.0.0.0/debian/patches/0070-94-vpn.patch kylin-nm-5.0.0.0/debian/patches/0070-94-vpn.patch --- kylin-nm-5.0.0.0/debian/patches/0070-94-vpn.patch 1970-01-01 08:00:00.000000000 +0800 +++ kylin-nm-5.0.0.0/debian/patches/0070-94-vpn.patch 2024-12-23 15:55:06.000000000 +0800 @@ -0,0 +1,324 @@ +From: =?utf-8?b?5p2O5Lqr?= <lixiang1@kylinos.cn> +Date: Mon, 23 Dec 2024 08:30:23 +0000 +Subject: =?utf-8?b?ITk0IOS8mOWMluS4ieWym+S7u+WKoeagj3ZwbuaJmOebmOWSjOe9kQ==?= + =?utf-8?b?57uc5omY55uY5by55Ye65L2N572uIE1lcmdlIHB1bGwgcmVxdWVzdCAhOTQgZnJv?= + =?utf-8?b?bSDmnY7kuqsvb3Blbmt5bGluL2h1YW5naGU=?= + +--- + src-vpn/frontend/single-pages/vpnpage.cpp | 83 ++++++++++++++++++------------- + src-vpn/frontend/single-pages/vpnpage.h | 2 +- + src/frontend/mainwindow.cpp | 67 +++++++++++++------------ + src/frontend/mainwindow.h | 2 +- + 4 files changed, 85 insertions(+), 69 deletions(-) + +diff --git a/src-vpn/frontend/single-pages/vpnpage.cpp b/src-vpn/frontend/single-pages/vpnpage.cpp +index 5b73a0e..99f471b 100644 +--- a/src-vpn/frontend/single-pages/vpnpage.cpp ++++ b/src-vpn/frontend/single-pages/vpnpage.cpp +@@ -25,11 +25,17 @@ + #include "../tools/panelgsettings.h" + #include "windowmanager/windowmanager.h" + ++#define MARGIN 8 ++#define PANEL_TOP 1 ++#define PANEL_LEFT 2 ++#define PANEL_RIGHT 3 ++#define PANEL_BOTTOM 0 ++ + #define PANEL_SETTINGS "org.ukui.panel.settings" + #define PANEL_SIZE_KEY "panelsize" + #define PANEL_POSITION_KEY "panelposition" + #define PANEL_TYPE_KEY "paneltype" +-#define UKUI_DATA_ISLAND_POSITION_KEY "settingsislandposition" ++#define UKUI_SETTINGS_ISLAND_POSITION_KEY "settingsislandposition" + #define UKUI_TOPBAR_SIZE_KEY "topbarsize" + #define UKUI_PANEL_LENGTH_KEY "panellength" + +@@ -625,9 +631,9 @@ void VpnPage::initPanelGSettings() + m_panelType = 0; + } + +- if (m_panelGSettings->keys().contains(UKUI_DATA_ISLAND_POSITION_KEY)) ++ if (m_panelGSettings->keys().contains(UKUI_SETTINGS_ISLAND_POSITION_KEY)) + { +- m_dataIslandPosition = m_panelGSettings->get(UKUI_DATA_ISLAND_POSITION_KEY).toInt(); ++ m_settingsIslandPosition = m_panelGSettings->get(UKUI_SETTINGS_ISLAND_POSITION_KEY).toInt(); + } + + if (m_panelGSettings->keys().contains(UKUI_TOPBAR_SIZE_KEY)) +@@ -650,10 +656,10 @@ void VpnPage::initPanelGSettings() + qDebug() << "切换任务栏类型"; + // updateGeometry(); + } +- else if (key == UKUI_DATA_ISLAND_POSITION_KEY) ++ else if (key == UKUI_SETTINGS_ISLAND_POSITION_KEY) + { +- m_dataIslandPosition = m_panelGSettings->get(UKUI_DATA_ISLAND_POSITION_KEY).toInt(); +- qDebug() << "任务栏宽度切换" << m_dataIslandPosition; ++ m_settingsIslandPosition = m_panelGSettings->get(UKUI_SETTINGS_ISLAND_POSITION_KEY).toInt(); ++ qDebug() << "任务栏宽度切换" << m_settingsIslandPosition; + // updateGeometry(); + } + else if (key == UKUI_TOPBAR_SIZE_KEY) +@@ -711,15 +717,22 @@ void VpnPage::showUI() + + resetPageHeight(); + ++ //跳过任务栏和分页器的属性 ++ const KWindowInfo info(this->winId(), NET::WMState); ++ kdk::WindowManager::setSkipSwitcher(this->windowHandle(), true); ++ kdk::WindowManager::setSkipTaskBar(this->windowHandle(), true); ++ if (!info.hasState(NET::SkipTaskbar) || !info.hasState(NET::SkipPager) || !info.hasState(NET::SkipSwitcher)) ++ KWindowSystem::setState(this->winId(), NET::SkipTaskbar | NET::SkipPager | NET::SkipSwitcher); + showNormal(); +- QWindow* window = this->windowHandle(); +- if (window) { +- //跳过任务栏和分页器的属性 +- kdk::WindowManager::setSkipSwitcher(window, true); +- kdk::WindowManager::setSkipTaskBar(window, true); +- } + raise(); + activateWindow(); ++ ++ //跳过任务栏和分页器的属性 ++ kdk::WindowManager::setSkipSwitcher(this->windowHandle(), true); ++ kdk::WindowManager::setSkipTaskBar(this->windowHandle(), true); ++ if (!info.hasState(NET::SkipTaskbar) || !info.hasState(NET::SkipPager) || !info.hasState(NET::SkipSwitcher)) ++ KWindowSystem::setState(this->winId(), NET::SkipTaskbar | NET::SkipPager | NET::SkipSwitcher); ++ + slideWindowByPanelPosition(); + resetWindowPosition(); + return; +@@ -727,32 +740,32 @@ void VpnPage::showUI() + + void VpnPage::slideWindowByPanelPosition() + { +- if(m_panelPosition == 0) +- { +- KWindowEffects::slideWindow(this->winId(), KWindowEffects::BottomEdge); +- } +- else if (m_panelPosition == 1) +- { +- KWindowEffects::slideWindow(this->winId(), KWindowEffects::TopEdge); +- } +- else if(m_panelPosition == 2) +- { +- KWindowEffects::slideWindow(this->winId(), KWindowEffects::LeftEdge); ++ if (m_panelType == 1) { ++ if (m_settingsIslandPosition) { ++ KWindowEffects::slideWindow(this->winId(), KWindowEffects::TopEdge); ++ } else { ++ KWindowEffects::slideWindow(this->winId(), KWindowEffects::BottomEdge); ++ } ++ } else { ++ switch(m_panelPosition) { ++ case PANEL_TOP: ++ KWindowEffects::slideWindow(this->winId(), KWindowEffects::TopEdge); ++ break; ++ case PANEL_LEFT: ++ KWindowEffects::slideWindow(this->winId(), KWindowEffects::LeftEdge); ++ break; ++ case PANEL_RIGHT: ++ KWindowEffects::slideWindow(this->winId(), KWindowEffects::RightEdge); ++ break; ++ case PANEL_BOTTOM: ++ KWindowEffects::slideWindow(this->winId(), KWindowEffects::BottomEdge); ++ break; ++ } + } +- else +- { +- KWindowEffects::slideWindow(this->winId(), KWindowEffects::RightEdge); } + } + + void VpnPage::resetWindowPosition() + { +-#define MARGIN 8 +-#define PANEL_TOP 1 +-#define PANEL_LEFT 2 +-#define PANEL_RIGHT 3 +-#define PANEL_BOTTOM 0 +- +- + QRect availableGeo = QGuiApplication::screenAt(QCursor::pos())->geometry(); + + +@@ -762,14 +775,14 @@ void VpnPage::resetWindowPosition() + int totalHeight = qApp->screenAt(QCursor::pos())->size().height() + qApp->screenAt(QCursor::pos())->geometry().y();//屏幕高度 + int totalWidth = qApp->screenAt(QCursor::pos())->size().width() + qApp->screenAt(QCursor::pos())->geometry().x(); + +- switch (m_panelPosition) { ++ switch (m_settingsIslandPosition) { + case PANEL_BOTTOM: + rect.setRect(qApp->screenAt(QCursor::pos())->geometry().right() - (totalWidth - PanelGSettings::instance()->getPanelLength(qApp->screenAt(QCursor::pos())->name())) / 2 - this->width(), + totalHeight - m_panelSize - this->height() - MARGIN, + this->width(), this->height()); + break; + default: +- rect.setRect(qApp->screenAt(QCursor::pos())->geometry().x(), ++ rect.setRect(qApp->screenAt(QCursor::pos())->geometry().right(), + qApp->screenAt(QCursor::pos())->geometry().y() + m_topbarSize - MARGIN, + this->width(), this->height()); + break; +diff --git a/src-vpn/frontend/single-pages/vpnpage.h b/src-vpn/frontend/single-pages/vpnpage.h +index 97345ef..6bf7259 100644 +--- a/src-vpn/frontend/single-pages/vpnpage.h ++++ b/src-vpn/frontend/single-pages/vpnpage.h +@@ -133,7 +133,7 @@ private: + int m_panelPosition; + int m_panelSize; + int m_panelType; +- int m_dataIslandPosition; ++ int m_settingsIslandPosition; + int m_topbarSize; + + +diff --git a/src/frontend/mainwindow.cpp b/src/frontend/mainwindow.cpp +index cd1fb54..9a2f2b9 100644 +--- a/src/frontend/mainwindow.cpp ++++ b/src/frontend/mainwindow.cpp +@@ -46,7 +46,7 @@ + #define PANEL_SIZE_KEY "panelsize" + #define PANEL_POSITION_KEY "panelposition" + #define PANEL_TYPE_KEY "paneltype" +-#define UKUI_DATA_ISLAND_POSITION_KEY "settingsislandposition" ++#define UKUI_SETTINGS_ISLAND_POSITION_KEY "settingsislandposition" + #define UKUI_TOPBAR_SIZE_KEY "topbarsize" + #define UKUI_PANEL_LENGTH_KEY "panellength" + +@@ -57,6 +57,12 @@ const QString intel = "V10SP1-edu"; + #define WLANPAGE 1 + #define AUTOSELET 2 + ++#define MARGIN 8 ++#define PANEL_TOP 1 ++#define PANEL_LEFT 2 ++#define PANEL_RIGHT 3 ++#define PANEL_BOTTOM 0 ++ + #define KEY_PRODUCT_FEATURES "PRODUCT_FEATURES" + + #define MW_EXCELLENT_SIGNAL 80 +@@ -369,9 +375,9 @@ void MainWindow::initPanelGSettings() + m_panelType = 0; + } + +- if (m_panelGSettings->keys().contains(UKUI_DATA_ISLAND_POSITION_KEY)) ++ if (m_panelGSettings->keys().contains(UKUI_SETTINGS_ISLAND_POSITION_KEY)) + { +- m_dataIslandPosition = m_panelGSettings->get(UKUI_DATA_ISLAND_POSITION_KEY).toInt(); ++ m_settingsIslandPosition = m_panelGSettings->get(UKUI_SETTINGS_ISLAND_POSITION_KEY).toInt(); + } + + if (m_panelGSettings->keys().contains(UKUI_TOPBAR_SIZE_KEY)) +@@ -394,10 +400,10 @@ void MainWindow::initPanelGSettings() + qDebug() << "切换任务栏类型"; + // updateGeometry(); + } +- else if (key == UKUI_DATA_ISLAND_POSITION_KEY) ++ else if (key == UKUI_SETTINGS_ISLAND_POSITION_KEY) + { +- m_dataIslandPosition = m_panelGSettings->get(UKUI_DATA_ISLAND_POSITION_KEY).toInt(); +- qDebug() << "任务栏宽度切换" << m_dataIslandPosition; ++ m_settingsIslandPosition = m_panelGSettings->get(UKUI_SETTINGS_ISLAND_POSITION_KEY).toInt(); ++ qDebug() << "任务栏宽度切换" << m_settingsIslandPosition; + // updateGeometry(); + } + else if (key == UKUI_TOPBAR_SIZE_KEY) +@@ -405,10 +411,6 @@ void MainWindow::initPanelGSettings() + m_topbarSize = m_panelGSettings->get(UKUI_TOPBAR_SIZE_KEY).toInt(); + // updateGeometry(); + } +- else if (key == UKUI_PANEL_LENGTH_KEY) +- { +- // updateGeometry(); +- } + resetWindowPosition(); + }); + } +@@ -587,12 +589,6 @@ void MainWindow::resetWindowPosition() + return; + } + +-#define MARGIN 8 +-#define PANEL_TOP 1 +-#define PANEL_LEFT 2 +-#define PANEL_RIGHT 3 +-#define PANEL_BOTTOM 0 +- + QRect availableGeo = QGuiApplication::screenAt(QCursor::pos())->geometry(); + int totalHeight = qApp->screenAt(QCursor::pos())->size().height() + qApp->screenAt(QCursor::pos())->geometry().y();//屏幕高度 + int totalWidth = qApp->screenAt(QCursor::pos())->size().width() + qApp->screenAt(QCursor::pos())->geometry().x(); +@@ -601,14 +597,14 @@ void MainWindow::resetWindowPosition() + QRect rect; + + if (m_panelType == 1) { +- switch (m_panelPosition) { ++ switch (m_settingsIslandPosition) { + case PANEL_BOTTOM: + rect.setRect(qApp->screenAt(QCursor::pos())->geometry().right() - (totalWidth - PanelGSettings::instance()->getPanelLength(qApp->screenAt(QCursor::pos())->name())) / 2 - this->width(), + totalHeight - m_panelSize - this->height() - MARGIN, + this->width(), this->height()); + break; + default: +- rect.setRect(qApp->screenAt(QCursor::pos())->geometry().x(), ++ rect.setRect(qApp->screenAt(QCursor::pos())->geometry().right() - this->width(), + qApp->screenAt(QCursor::pos())->geometry().y() + m_topbarSize - MARGIN, + this->width(), this->height()); + break; +@@ -745,21 +741,28 @@ void MainWindow::showControlCenter() + + void MainWindow::slideWindowByPanelPosition() + { +- if(m_panelPosition == 0) +- { +- KWindowEffects::slideWindow(this->winId(), KWindowEffects::BottomEdge); +- } +- else if (m_panelPosition == 1) +- { +- KWindowEffects::slideWindow(this->winId(), KWindowEffects::TopEdge); +- } +- else if(m_panelPosition == 2) +- { +- KWindowEffects::slideWindow(this->winId(), KWindowEffects::LeftEdge); ++ if (m_panelType == 1) { ++ if (m_settingsIslandPosition) { ++ KWindowEffects::slideWindow(this->winId(), KWindowEffects::TopEdge); ++ } else { ++ KWindowEffects::slideWindow(this->winId(), KWindowEffects::BottomEdge); ++ } ++ } else { ++ switch(m_panelPosition) { ++ case PANEL_TOP: ++ KWindowEffects::slideWindow(this->winId(), KWindowEffects::TopEdge); ++ break; ++ case PANEL_LEFT: ++ KWindowEffects::slideWindow(this->winId(), KWindowEffects::LeftEdge); ++ break; ++ case PANEL_RIGHT: ++ KWindowEffects::slideWindow(this->winId(), KWindowEffects::RightEdge); ++ break; ++ case PANEL_BOTTOM: ++ KWindowEffects::slideWindow(this->winId(), KWindowEffects::BottomEdge); ++ break; ++ } + } +- else +- { +- KWindowEffects::slideWindow(this->winId(), KWindowEffects::RightEdge); } + } + + void MainWindow::showByWaylandHelper() +diff --git a/src/frontend/mainwindow.h b/src/frontend/mainwindow.h +index b364cf4..e730971 100644 +--- a/src/frontend/mainwindow.h ++++ b/src/frontend/mainwindow.h +@@ -202,7 +202,7 @@ private: + int m_panelPosition; + int m_panelSize; + int m_panelType; +- int m_dataIslandPosition; ++ int m_settingsIslandPosition; + int m_topbarSize; + + //获取和重置窗口位置 diff -Nru kylin-nm-5.0.0.0/debian/patches/series kylin-nm-5.0.0.0/debian/patches/series --- kylin-nm-5.0.0.0/debian/patches/series 2024-12-20 14:12:19.000000000 +0800 +++ kylin-nm-5.0.0.0/debian/patches/series 2024-12-23 15:55:06.000000000 +0800 @@ -67,3 +67,4 @@ 0067-89-vpn.patch 0068-91-dns.patch 0069-93-vpn.patch +0070-94-vpn.patch