diff --git a/frame/controller/dockpluginscontroller.cpp b/frame/controller/dockpluginscontroller.cpp index d4b572b77..647bee7c0 100644 --- a/frame/controller/dockpluginscontroller.cpp +++ b/frame/controller/dockpluginscontroller.cpp @@ -32,7 +32,7 @@ DockPluginsController::DockPluginsController(QObject *parent) setObjectName("DockPlugin"); } -void DockPluginsController::itemAdded(PluginsItemInterface * const itemInter, const QString &itemKey) +void DockPluginsController::itemAdded(PluginsItemInterface *const itemInter, const QString &itemKey) { QMap> &mPluginsMap = pluginsMap(); @@ -53,14 +53,12 @@ void DockPluginsController::itemAdded(PluginsItemInterface * const itemInter, co item = new PluginsItem(itemInter, itemKey); } - item->setVisible(false); - mPluginsMap[itemInter][itemKey] = item; emit pluginItemInserted(item); } -void DockPluginsController::itemUpdate(PluginsItemInterface * const itemInter, const QString &itemKey) +void DockPluginsController::itemUpdate(PluginsItemInterface *const itemInter, const QString &itemKey) { PluginsItem *item = static_cast(pluginItemAt(itemInter, itemKey)); if (!item) @@ -71,7 +69,7 @@ void DockPluginsController::itemUpdate(PluginsItemInterface * const itemInter, c emit pluginItemUpdated(item); } -void DockPluginsController::itemRemoved(PluginsItemInterface * const itemInter, const QString &itemKey) +void DockPluginsController::itemRemoved(PluginsItemInterface *const itemInter, const QString &itemKey) { PluginsItem *item = static_cast(pluginItemAt(itemInter, itemKey)); if (!item) @@ -91,7 +89,7 @@ void DockPluginsController::itemRemoved(PluginsItemInterface * const itemInter, item->deleteLater(); } -void DockPluginsController::requestWindowAutoHide(PluginsItemInterface * const itemInter, const QString &itemKey, const bool autoHide) +void DockPluginsController::requestWindowAutoHide(PluginsItemInterface *const itemInter, const QString &itemKey, const bool autoHide) { PluginsItem *item = static_cast(pluginItemAt(itemInter, itemKey)); if (!item) @@ -100,7 +98,7 @@ void DockPluginsController::requestWindowAutoHide(PluginsItemInterface * const i Q_EMIT item->requestWindowAutoHide(autoHide); } -void DockPluginsController::requestRefreshWindowVisible(PluginsItemInterface * const itemInter, const QString &itemKey) +void DockPluginsController::requestRefreshWindowVisible(PluginsItemInterface *const itemInter, const QString &itemKey) { PluginsItem *item = static_cast(pluginItemAt(itemInter, itemKey)); if (!item) @@ -109,7 +107,7 @@ void DockPluginsController::requestRefreshWindowVisible(PluginsItemInterface * c Q_EMIT item->requestRefreshWindowVisible(); } -void DockPluginsController::requestSetAppletVisible(PluginsItemInterface * const itemInter, const QString &itemKey, const bool visible) +void DockPluginsController::requestSetAppletVisible(PluginsItemInterface *const itemInter, const QString &itemKey, const bool visible) { PluginsItem *item = static_cast(pluginItemAt(itemInter, itemKey)); if (!item) @@ -128,7 +126,8 @@ void DockPluginsController::startLoader() loadSystemPlugins(); } -void DockPluginsController::loadLocalPlugins() { +void DockPluginsController::loadLocalPlugins() +{ QString pluginsDir(QString("%1/.local/lib/dde-dock/plugins/").arg(QDir::homePath())); if (!QDir(pluginsDir).exists()) { @@ -140,7 +139,8 @@ void DockPluginsController::loadLocalPlugins() { AbstractPluginsController::startLoader(new PluginLoader(pluginsDir, this)); } -void DockPluginsController::loadSystemPlugins() { +void DockPluginsController::loadSystemPlugins() +{ QString pluginsDir(qApp->applicationDirPath() + "/../plugins"); if (!QDir(pluginsDir).exists()) { pluginsDir = "/usr/lib/dde-dock/plugins"; diff --git a/frame/item/dockitem.cpp b/frame/item/dockitem.cpp index e35251c64..8f855f319 100644 --- a/frame/item/dockitem.cpp +++ b/frame/item/dockitem.cpp @@ -45,8 +45,7 @@ DockItem::DockItem(QWidget *parent) m_menuManagerInter(new DBusMenuManager(this)) { - if (PopupWindow.isNull()) - { + if (PopupWindow.isNull()) { DockPopupWindow *arrowRectangle = new DockPopupWindow(nullptr); arrowRectangle->setShadowBlurRadius(20); arrowRectangle->setRadius(6); @@ -69,6 +68,13 @@ DockItem::DockItem(QWidget *parent) connect(m_popupAdjustDelayTimer, &QTimer::timeout, this, &DockItem::updatePopupPosition, Qt::QueuedConnection); grabGesture(Qt::TapAndHoldGesture); + + setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); +} + +QSize DockItem::sizeHint() const +{ + return QSize(50, 50); } DockItem::~DockItem() @@ -104,10 +110,8 @@ void DockItem::gestureEvent(QGestureEvent *event) bool DockItem::event(QEvent *event) { - if (m_popupShown) - { - switch (event->type()) - { + if (m_popupShown) { + switch (event->type()) { case QEvent::Paint: if (!m_popupAdjustDelayTimer->isActive()) m_popupAdjustDelayTimer->start(); @@ -117,7 +121,7 @@ bool DockItem::event(QEvent *event) } if (event->type() == QEvent::Gesture) - gestureEvent(static_cast(event)); + gestureEvent(static_cast(event)); return QWidget::event(event); } @@ -213,8 +217,7 @@ void DockItem::showContextMenu() QDBusPendingReply result = m_menuManagerInter->RegisterMenu(); result.waitForFinished(); - if (result.isError()) - { + if (result.isError()) { qWarning() << result.error(); return; } @@ -227,8 +230,7 @@ void DockItem::showContextMenu() menuObject.insert("isDockMenu", QJsonValue(true)); menuObject.insert("menuJsonContent", QJsonValue(menuJson)); - switch (DockPosition) - { + switch (DockPosition) { case Top: menuObject.insert("direction", "top"); break; case Bottom: menuObject.insert("direction", "bottom"); break; case Left: menuObject.insert("direction", "left"); break; @@ -265,14 +267,14 @@ void DockItem::showHoverTips() if (!r.contains(QCursor::pos())) return; - QWidget * const content = popupTips(); + QWidget *const content = popupTips(); if (!content) return; showPopupWindow(content); } -void DockItem::showPopupWindow(QWidget * const content, const bool model) +void DockItem::showPopupWindow(QWidget *const content, const bool model) { m_popupShown = true; m_lastPopupWidget = content; @@ -285,10 +287,9 @@ void DockItem::showPopupWindow(QWidget * const content, const bool model) if (lastContent) lastContent->setVisible(false); - switch (DockPosition) - { + switch (DockPosition) { case Top: popup->setArrowDirection(DockPopupWindow::ArrowTop); break; - case Bottom:popup->setArrowDirection(DockPopupWindow::ArrowBottom); break; + case Bottom: popup->setArrowDirection(DockPopupWindow::ArrowBottom); break; case Left: popup->setArrowDirection(DockPopupWindow::ArrowLeft); break; case Right: popup->setArrowDirection(DockPopupWindow::ArrowRight); break; } @@ -314,7 +315,7 @@ void DockItem::popupWindowAccept() hidePopup(); } -void DockItem::showPopupApplet(QWidget * const applet) +void DockItem::showPopupApplet(QWidget *const applet) { // another model popup window already exists if (PopupWindow->model()) @@ -357,8 +358,7 @@ const QPoint DockItem::popupMarkPoint() const const QRect r = rect(); const int offset = 2; - switch (DockPosition) - { + switch (DockPosition) { case Top: p += QPoint(r.width() / 2, r.height() + offset); break; case Bottom: p += QPoint(r.width() / 2, 0 - offset); break; case Left: p += QPoint(r.width() + offset, r.height() / 2); break; diff --git a/frame/item/dockitem.h b/frame/item/dockitem.h index e07fa6160..9a1d4b830 100644 --- a/frame/item/dockitem.h +++ b/frame/item/dockitem.h @@ -59,10 +59,12 @@ public: inline virtual ItemType itemType() const {Q_UNREACHABLE(); return App;} + QSize sizeHint() const override; + public slots: virtual void refershIcon() {} - void showPopupApplet(QWidget * const applet); + void showPopupApplet(QWidget *const applet); void hidePopup(); signals: @@ -84,7 +86,7 @@ protected: void hideNonModel(); void popupWindowAccept(); - virtual void showPopupWindow(QWidget * const content, const bool model = false); + virtual void showPopupWindow(QWidget *const content, const bool model = false); virtual void showHoverTips(); virtual void invokedMenuItem(const QString &itemId, const bool checked); virtual const QString contextMenu() const; diff --git a/frame/main.cpp b/frame/main.cpp index 9195077fa..484cea309 100644 --- a/frame/main.cpp +++ b/frame/main.cpp @@ -45,15 +45,14 @@ void RegisterDdeSession() QByteArray cookie = qgetenv(envName.toUtf8().data()); qunsetenv(envName.toUtf8().data()); - if (!cookie.isEmpty()) - { + if (!cookie.isEmpty()) { QDBusPendingReply r = DDBusSender() - .interface("com.deepin.SessionManager") - .path("/com/deepin/SessionManager") - .service("com.deepin.SessionManager") - .method("Register") - .arg(QString(cookie)) - .call(); + .interface("com.deepin.SessionManager") + .path("/com/deepin/SessionManager") + .service("com.deepin.SessionManager") + .method("Register") + .arg(QString(cookie)) + .call(); qDebug() << Q_FUNC_INFO << r.value(); } @@ -109,7 +108,7 @@ int main(int argc, char *argv[]) QTimer::singleShot(1, &mw, &MainWindow::launch); if (!parser.isSet(disablePlugOption)) { - DockItemController::instance()->startLoadPlugins(); + DockItemManager::instance()->startLoadPlugins(); } return app.exec(); diff --git a/frame/panel/mainpanelcontrol.h b/frame/panel/mainpanelcontrol.h index bfa4f1994..e4e65da09 100644 --- a/frame/panel/mainpanelcontrol.h +++ b/frame/panel/mainpanelcontrol.h @@ -50,7 +50,7 @@ private: void updateAppAreaSonWidgetSize(); void updateMainPanelLayout(); -private slots: +public slots: void itemInserted(const int index, DockItem *item); void itemRemoved(DockItem *item); diff --git a/frame/window/mainwindow.cpp b/frame/window/mainwindow.cpp index 0761ac127..30cb04e50 100644 --- a/frame/window/mainwindow.cpp +++ b/frame/window/mainwindow.cpp @@ -21,6 +21,7 @@ #include "mainwindow.h" #include "panel/mainpanelcontrol.h" +#include "controller/dockitemmanager.h" #include "util/utils.h" #include @@ -43,22 +44,22 @@ using org::kde::StatusNotifierWatcher; const QPoint rawXPosition(const QPoint &scaledPos) { - QScreen const * screen = Utils::screenAtByScaled(scaledPos); + QScreen const *screen = Utils::screenAtByScaled(scaledPos); return screen ? screen->geometry().topLeft() + - (scaledPos - screen->geometry().topLeft()) * - screen->devicePixelRatio() - : scaledPos; + (scaledPos - screen->geometry().topLeft()) * + screen->devicePixelRatio() + : scaledPos; } const QPoint scaledPos(const QPoint &rawXPos) { - QScreen const * screen = Utils::screenAt(rawXPos); + QScreen const *screen = Utils::screenAt(rawXPos); return screen - ? screen->geometry().topLeft() + - (rawXPos - screen->geometry().topLeft()) / screen->devicePixelRatio() - : rawXPos; + ? screen->geometry().topLeft() + + (rawXPos - screen->geometry().topLeft()) / screen->devicePixelRatio() + : rawXPos; } MainWindow::MainWindow(QWidget *parent) @@ -107,6 +108,9 @@ MainWindow::MainWindow(QWidget *parent) initConnections(); m_mainPanel->setFixedSize(m_settings->panelSize()); + + for (auto item : DockItemManager::instance()->itemList()) + m_mainPanel->itemInserted(-1, item); } MainWindow::~MainWindow() @@ -146,8 +150,7 @@ void MainWindow::launch() bool MainWindow::event(QEvent *e) { - switch (e->type()) - { + switch (e->type()) { case QEvent::Move: if (!e->spontaneous()) QTimer::singleShot(1, this, &MainWindow::positionCheck); @@ -167,7 +170,7 @@ void MainWindow::showEvent(QShowEvent *e) m_platformWindowHandle.setShadowRadius(0); connect(qGuiApp, &QGuiApplication::primaryScreenChanged, - windowHandle(), [this] (QScreen *new_screen) { + windowHandle(), [this](QScreen * new_screen) { QScreen *old_screen = windowHandle()->screen(); windowHandle()->setScreen(new_screen); // 屏幕变化后可能导致控件缩放比变化,此时应该重设控件位置大小 @@ -196,8 +199,7 @@ void MainWindow::mousePressEvent(QMouseEvent *e) void MainWindow::keyPressEvent(QKeyEvent *e) { - switch (e->key()) - { + switch (e->key()) { #ifdef QT_DEBUG case Qt::Key_Escape: qApp->quit(); break; #endif @@ -328,8 +330,8 @@ void MainWindow::internalMove(const QPoint &p) { const bool isHide = m_settings->hideState() == HideState::Hide && !testAttribute(Qt::WA_UnderMouse); const bool pos_adjust = m_settings->hideMode() != HideMode::KeepShowing && - isHide && - m_posChangeAni->state() == QVariantAnimation::Stopped; + isHide && + m_posChangeAni->state() == QVariantAnimation::Stopped; if (!pos_adjust) return QWidget::move(p); @@ -337,8 +339,7 @@ void MainWindow::internalMove(const QPoint &p) const auto ratio = devicePixelRatioF(); const QRect &r = m_settings->primaryRawRect(); - switch (m_settings->position()) - { + switch (m_settings->position()) { case Left: rp.setX(r.x()); break; case Top: rp.setY(r.y()); break; case Right: rp.setX(r.right() - 1); break; @@ -347,12 +348,10 @@ void MainWindow::internalMove(const QPoint &p) int hx = height() * ratio, wx = width() * ratio; if (m_settings->hideMode() != HideMode::KeepShowing && - isHide && - m_panelHideAni->state() == QVariantAnimation::Stopped && - m_panelShowAni->state() == QVariantAnimation::Stopped) - { - switch (m_settings->position()) - { + isHide && + m_panelHideAni->state() == QVariantAnimation::Stopped && + m_panelShowAni->state() == QVariantAnimation::Stopped) { + switch (m_settings->position()) { case Top: case Bottom: hx = 2; @@ -395,7 +394,7 @@ void MainWindow::initConnections() connect(m_posChangeAni, &QVariantAnimation::finished, this, static_cast(&MainWindow::internalMove), Qt::QueuedConnection); // to fix qt animation bug, sometimes window size not change - connect(m_sizeChangeAni, &QVariantAnimation::valueChanged, [=](const QVariant &value) { + connect(m_sizeChangeAni, &QVariantAnimation::valueChanged, [ = ](const QVariant & value) { QWidget::setFixedSize(value.toSize()); }); @@ -403,6 +402,9 @@ void MainWindow::initConnections() connect(&m_platformWindowHandle, &DPlatformWindowHandle::frameMarginsChanged, m_shadowMaskOptimizeTimer, static_cast(&QTimer::start)); connect(m_dbusDaemonInterface, &QDBusConnectionInterface::serviceOwnerChanged, this, &MainWindow::onDbusNameOwnerChanged); + + connect(DockItemManager::instance(), &DockItemManager::itemInserted, m_mainPanel, &MainPanelControl::itemInserted, Qt::DirectConnection); + connect(DockItemManager::instance(), &DockItemManager::itemRemoved, m_mainPanel, &MainPanelControl::itemRemoved, Qt::DirectConnection); } const QPoint MainWindow::x11GetWindowPos() @@ -549,8 +551,7 @@ void MainWindow::setStrutPartial() uint strutEnd = 0; QRect strutArea(0, 0, maxScreenWidth, maxScreenHeight); - switch (side) - { + switch (side) { case Position::Top: orientation = XcbMisc::OrientationTop; strut = p.y() + s.height() * ratio; @@ -596,8 +597,7 @@ void MainWindow::setStrutPartial() // pass if strut area is intersect with other screen int count = 0; const QRect pr = m_settings->primaryRect(); - for (auto *screen : qApp->screens()) - { + for (auto *screen : qApp->screens()) { const QRect sr = screen->geometry(); if (sr == pr) continue; @@ -605,8 +605,7 @@ void MainWindow::setStrutPartial() if (sr.intersects(strutArea)) ++count; } - if (count > 0) - { + if (count > 0) { qWarning() << "strutArea is intersects with another screen."; qWarning() << maxScreenHeight << maxScreenWidth << side << p << s; return; @@ -626,12 +625,10 @@ void MainWindow::expand() resetPanelEnvironment(true, false); - if (showAniState != QPropertyAnimation::Running && m_mainPanel->pos() != m_panelShowAni->currentValue()) - { + if (showAniState != QPropertyAnimation::Running && m_mainPanel->pos() != m_panelShowAni->currentValue()) { QPoint startPos(0, 0); const QSize &size = m_settings->windowSize(); - switch (m_settings->position()) - { + switch (m_settings->position()) { case Top: startPos.setY(-size.height()); break; case Bottom: startPos.setY(size.height()); break; case Left: startPos.setX(-size.width()); break; @@ -651,8 +648,7 @@ void MainWindow::narrow(const Position prevPos) const QSize size = m_settings->panelSize(); QPoint finishPos(0, 0); - switch (prevPos) - { + switch (prevPos) { case Top: finishPos.setY(-size.height()); break; case Bottom: finishPos.setY(size.height()); break; case Left: finishPos.setX(-size.width()); break; @@ -687,8 +683,7 @@ void MainWindow::resetPanelEnvironment(const bool visible, const bool resetPosit if (!resetPosition) return; QPoint finishPos(0, 0); - switch (position) - { + switch (position) { case Top: finishPos.setY((visible ? 0 : -r.height())); break; case Bottom: finishPos.setY(visible ? 0 : r.height()); break; case Left: finishPos.setX((visible ? 0 : -r.width())); break; @@ -708,8 +703,7 @@ void MainWindow::updatePanelVisible() const Dock::HideState state = m_settings->hideState(); - do - { + do { if (state != Hide) break;