feat(panel):Island形态支持多屏同步

This commit is contained in:
iaom 2024-08-19 17:30:32 +08:00
parent 57dfdf6eb5
commit d50250ed87
6 changed files with 44 additions and 22 deletions

View File

@ -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;

View File

@ -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};

View File

@ -22,7 +22,6 @@
#include <KWindowSystem>
#include <KWindowEffects>
#include <QGSettings>
#include <QMenu>
#include <app-launcher.h>
#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)

View File

@ -20,6 +20,7 @@
#ifndef UKUI_PANEL_PANEL_NEXT_H
#define UKUI_PANEL_PANEL_NEXT_H
#include <QTimer>
#include <QMenu>
#include <types.h>
#include <window-helper.h>
#include <island-view.h>
@ -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();

View File

@ -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)

View File

@ -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);