From d50250ed87ffb0614291e115ed43fbf7eb49c99b Mon Sep 17 00:00:00 2001 From: iaom Date: Mon, 19 Aug 2024 17:30:32 +0800 Subject: [PATCH] =?UTF-8?q?feat(panel):Island=E5=BD=A2=E6=80=81=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=A4=9A=E5=B1=8F=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- panel/src/shell.cpp | 44 +++++++++++++++++--------------- panel/src/shell.h | 2 ++ panel/src/view/panel-next.cpp | 9 ++++++- panel/src/view/panel-next.h | 2 ++ panel/src/view/panel-top-bar.cpp | 8 ++++++ panel/src/view/panel-top-bar.h | 1 + 6 files changed, 44 insertions(+), 22 deletions(-) diff --git a/panel/src/shell.cpp b/panel/src/shell.cpp index 41843d9..7694eed 100644 --- a/panel/src/shell.cpp +++ b/panel/src/shell.cpp @@ -152,35 +152,20 @@ void Shell::startVersion4panel() void Shell::startVersion5Panel() { Screen *primary = m_screenManager->primaryScreen(); - auto panel = new PanelNext(primary, "panel0"); - connect(panel, &PanelNext::islandRemoved, this, &Shell::islandRemovedFromPanel); - connect(this, &Shell::islandRemovedFromTopBar, panel, &PanelNext::addIsland); - m_panelsVersion5.insert(primary, panel); - - auto panelTopBar = new PanelTopBar(primary, "panelTopBar0"); - connect(panelTopBar, &PanelTopBar::islandRemoved, this, &Shell::islandRemovedFromTopBar); - connect(this, &Shell::islandRemovedFromPanel, panelTopBar, &PanelTopBar::addIsland); - m_panelTopBars.insert(primary, panelTopBar); + m_panelsVersion5.insert(primary, createPanelNext(primary, "panel0")); + m_panelTopBars.insert(primary, createPanelTopBar(primary, "panelTopBar0")); for(Screen * screen : m_screenManager->screens()) { if(screen != primary) { - panel = new PanelNext(screen, QString("panel%1").arg(m_panelsVersion5.size())); - connect(panel, &PanelNext::islandRemoved, this, &Shell::islandRemovedFromPanel); - connect(this, &Shell::islandRemovedFromTopBar, panel, &PanelNext::addIsland); - m_panelsVersion5.insert(screen, panel); - panelTopBar = new PanelTopBar(screen, QString("panelTopBar%1").arg(m_panelTopBars.size())); - connect(panelTopBar, &PanelTopBar::islandRemoved, this, &Shell::islandRemovedFromTopBar); - connect(this, &Shell::islandRemovedFromPanel, panelTopBar, &PanelTopBar::addIsland); - m_panelTopBars.insert(screen, panelTopBar); + m_panelsVersion5.insert(screen, createPanelNext(screen, QString("panel%1").arg(m_panelsVersion5.size()))); + m_panelTopBars.insert(screen, createPanelTopBar(screen, QString("panelTopBar%1").arg(m_panelTopBars.size()))); } } connect(m_screenManager, &ScreensManager::screenAdded, this, [&](Screen *screen){ if(!m_panelsVersion5.contains(screen)) { - auto panel = new PanelNext(screen, QString("panel%1").arg(m_panelsVersion5.size())); - m_panelsVersion5.insert(screen, panel); - auto panelTopBar = new PanelTopBar(screen, QString("panelTopBar%1").arg(m_panelTopBars.size())); - m_panelTopBars.insert(screen, panelTopBar); + m_panelsVersion5.insert(screen, createPanelNext(screen, QString("panel%1").arg(m_panelsVersion5.size()))); + m_panelTopBars.insert(screen, createPanelTopBar(screen, QString("panelTopBar%1").arg(m_panelTopBars.size()))); } }); connect(m_screenManager, &ScreensManager::screenRemoved, this, [&](Screen *screen){ @@ -193,6 +178,23 @@ void Shell::startVersion5Panel() }); } +PanelNext* Shell::createPanelNext(Screen *screen, const QString& id) +{ + auto panel = new PanelNext(screen, id); + connect(panel, &PanelNext::islandRemoved, this, &Shell::islandRemovedFromPanel); + connect(this, &Shell::islandRemovedFromTopBar, panel, &PanelNext::addIsland); + connect(this, &Shell::islandRemovedFromPanel, panel, &PanelNext::removeIsland); + return panel; +} + +PanelTopBar* Shell::createPanelTopBar(Screen* screen, const QString& id) +{ + auto panelTopBar = new PanelTopBar(screen, id); + connect(panelTopBar, &PanelTopBar::islandRemoved, this, &Shell::islandRemovedFromTopBar); + connect(this, &Shell::islandRemovedFromPanel, panelTopBar, &PanelTopBar::addIsland); + connect(this, &Shell::islandRemovedFromTopBar, panelTopBar, &PanelTopBar::removeIsland); +} + Shell::PanelType Shell::currentVersion() { return m_currentVersion; diff --git a/panel/src/shell.h b/panel/src/shell.h index 952882c..aaf0d22 100644 --- a/panel/src/shell.h +++ b/panel/src/shell.h @@ -63,6 +63,8 @@ private: void initDbus(); void startVersion4panel(); void startVersion5Panel(); + PanelNext *createPanelNext(Screen *screen, const QString &id); + PanelTopBar *createPanelTopBar(Screen *screen, const QString &id); private: bool m_isTabletMode {false}; diff --git a/panel/src/view/panel-next.cpp b/panel/src/view/panel-next.cpp index 03a108f..205a539 100644 --- a/panel/src/view/panel-next.cpp +++ b/panel/src/view/panel-next.cpp @@ -22,7 +22,6 @@ #include #include #include -#include #include #include "panel-next.h" #include "widget-model.h" @@ -205,6 +204,14 @@ void PanelNext::addIsland(const QString& id) updateIslandFormAction(); } +void PanelNext::removeIsland(const QString& id) +{ + if(m_islands.contains(id)){ + mainView()->addDisableInstance(m_islands.value(id)->instanceId()); + m_islands.remove(id); + } +} + void PanelNext::onScreenGeometryChanged(const QRect&geometry) { Q_UNUSED(geometry) diff --git a/panel/src/view/panel-next.h b/panel/src/view/panel-next.h index 9b7da29..b25db18 100644 --- a/panel/src/view/panel-next.h +++ b/panel/src/view/panel-next.h @@ -20,6 +20,7 @@ #ifndef UKUI_PANEL_PANEL_NEXT_H #define UKUI_PANEL_PANEL_NEXT_H #include +#include #include #include #include @@ -44,6 +45,7 @@ public: bool lockPanel() const; bool enableCustomSize() const; void addIsland(const QString &id); + void removeIsland(const QString &id); Q_SIGNALS: void lockPanelChanged(); diff --git a/panel/src/view/panel-top-bar.cpp b/panel/src/view/panel-top-bar.cpp index 0a27519..4943fa4 100644 --- a/panel/src/view/panel-top-bar.cpp +++ b/panel/src/view/panel-top-bar.cpp @@ -90,6 +90,14 @@ void PanelTopBar::addIsland(const QString& id) updateIslandFormAction(); } +void PanelTopBar::removeIsland(const QString& id) +{ + if(m_islands.contains(id)){ + mainView()->addDisableInstance(m_islands.value(id)->instanceId()); + m_islands.remove(id); + } +} + void PanelTopBar::onScreenGeometryChanged(const QRect&geometry) { Q_UNUSED(geometry) diff --git a/panel/src/view/panel-top-bar.h b/panel/src/view/panel-top-bar.h index 2282d42..1548966 100644 --- a/panel/src/view/panel-top-bar.h +++ b/panel/src/view/panel-top-bar.h @@ -36,6 +36,7 @@ public: void setTopBarScreen(Screen* screen); void addIsland(const QString &id); + void removeIsland(const QString &id); Q_SIGNALS: void islandRemoved(const QString &id);