feat(panel):Island形态支持多屏同步
This commit is contained in:
parent
57dfdf6eb5
commit
d50250ed87
|
@ -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;
|
||||
|
|
|
@ -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};
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue