diff --git a/frame/controller/dockpluginloader.cpp b/frame/controller/dockpluginloader.cpp new file mode 100644 index 000000000..94119d25f --- /dev/null +++ b/frame/controller/dockpluginloader.cpp @@ -0,0 +1,35 @@ +#include "dockpluginloader.h" +#include "dockpluginscontroller.h" + +#include + +DockPluginLoader::DockPluginLoader(QObject *parent) + : QThread(parent) +{ + +} + +void DockPluginLoader::run() +{ +#ifdef QT_DEBUG + const QDir pluginsDir("plugins"); +#else + const QDir pluginsDir("../lib/dde-dock/plugins"); +#endif + const QStringList plugins = pluginsDir.entryList(QDir::Files); + + for (const QString file : plugins) + { + if (!QLibrary::isLibrary(file)) + continue; + + // TODO: old dock plugins is uncompatible + if (file.startsWith("libdde-dock-")) + continue; + + msleep(150); + emit pluginFounded(pluginsDir.absoluteFilePath(file)); + } + + emit finished(); +} diff --git a/frame/controller/dockpluginloader.h b/frame/controller/dockpluginloader.h new file mode 100644 index 000000000..839d18fdf --- /dev/null +++ b/frame/controller/dockpluginloader.h @@ -0,0 +1,21 @@ +#ifndef DOCKPLUGINLOADER_H +#define DOCKPLUGINLOADER_H + +#include + +class DockPluginLoader : public QThread +{ + Q_OBJECT + +public: + explicit DockPluginLoader(QObject *parent); + +signals: + void finished() const; + void pluginFounded(const QString &pluginFile) const; + +protected: + void run(); +}; + +#endif // DOCKPLUGINLOADER_H diff --git a/frame/controller/dockpluginscontroller.cpp b/frame/controller/dockpluginscontroller.cpp index 1f36de2f7..9c8c5a0a9 100644 --- a/frame/controller/dockpluginscontroller.cpp +++ b/frame/controller/dockpluginscontroller.cpp @@ -1,6 +1,7 @@ #include "dockpluginscontroller.h" #include "pluginsiteminterface.h" #include "dockitemcontroller.h" +#include "dockpluginloader.h" #include #include @@ -11,7 +12,7 @@ DockPluginsController::DockPluginsController(DockItemController *itemControllerI { qApp->installEventFilter(this); - QMetaObject::invokeMethod(this, "loadPlugins", Qt::QueuedConnection); + QMetaObject::invokeMethod(this, "startLoader", Qt::QueuedConnection); } DockPluginsController::~DockPluginsController() @@ -63,41 +64,14 @@ void DockPluginsController::itemRemoved(PluginsItemInterface * const itemInter, // item->showPopupApplet(); //} -void DockPluginsController::loadPlugins() +void DockPluginsController::startLoader() { -// Q_ASSERT(m_pluginLoaderList.isEmpty()); -// Q_ASSERT(m_pluginsInterfaceList.isEmpty()); + DockPluginLoader *loader = new DockPluginLoader(this); -#ifdef QT_DEBUG - const QDir pluginsDir("plugins"); -#else - const QDir pluginsDir("../lib/dde-dock/plugins"); -#endif - const QStringList plugins = pluginsDir.entryList(QDir::Files); + connect(loader, &DockPluginLoader::finished, loader, &DockPluginLoader::deleteLater, Qt::QueuedConnection); + connect(loader, &DockPluginLoader::pluginFounded, this, &DockPluginsController::loadPlugin, Qt::QueuedConnection); - int pluginIndex = 0; - for (const QString file : plugins) - { - if (!QLibrary::isLibrary(file)) - continue; - - // TODO: old dock plugins is uncompatible - if (file.startsWith("libdde-dock-")) - continue; - - const QString pluginFilePath = pluginsDir.absoluteFilePath(file); - QPluginLoader *pluginLoader = new QPluginLoader(pluginFilePath, this); - PluginsItemInterface *interface = qobject_cast(pluginLoader->instance()); - if (!interface) - { - pluginLoader->unload(); - pluginLoader->deleteLater(); - continue; - } - - // delay load - QTimer::singleShot(100 + (++pluginIndex) * 50, [=] {interface->init(this);}); - } + loader->start(QThread::LowestPriority); } void DockPluginsController::displayModeChanged() @@ -114,6 +88,20 @@ void DockPluginsController::positionChanged() inter->positionChanged(position); } +void DockPluginsController::loadPlugin(const QString &pluginFile) +{ + QPluginLoader *pluginLoader = new QPluginLoader(pluginFile, this); + PluginsItemInterface *interface = qobject_cast(pluginLoader->instance()); + if (!interface) + { + pluginLoader->unload(); + pluginLoader->deleteLater(); + return; + } + + interface->init(this); +} + bool DockPluginsController::eventFilter(QObject *o, QEvent *e) { if (o != qApp) diff --git a/frame/controller/dockpluginscontroller.h b/frame/controller/dockpluginscontroller.h index dfc157b85..7403b8daa 100644 --- a/frame/controller/dockpluginscontroller.h +++ b/frame/controller/dockpluginscontroller.h @@ -28,9 +28,10 @@ signals: void pluginItemRemoved(PluginsItem *pluginItem) const; private slots: - void loadPlugins(); + void startLoader(); void displayModeChanged(); void positionChanged(); + void loadPlugin(const QString &pluginFile); private: bool eventFilter(QObject *o, QEvent *e); diff --git a/frame/frame.pro b/frame/frame.pro index ca7f8ac38..abcf59ee9 100644 --- a/frame/frame.pro +++ b/frame/frame.pro @@ -32,7 +32,8 @@ SOURCES += main.cpp \ util/dockpopupwindow.cpp \ dbus/dbusxmousearea.cpp \ item/stretchitem.cpp \ - item/placeholderitem.cpp + item/placeholderitem.cpp \ + controller/dockpluginloader.cpp HEADERS += \ window/mainwindow.h \ @@ -56,7 +57,8 @@ HEADERS += \ util/dockpopupwindow.h \ dbus/dbusxmousearea.h \ item/stretchitem.h \ - item/placeholderitem.h + item/placeholderitem.h \ + controller/dockpluginloader.h dbus_service.files += com.deepin.dde.dock.service dbus_service.path = /usr/share/dbus-1/services diff --git a/plugins/disk-mount/diskmountplugin.cpp b/plugins/disk-mount/diskmountplugin.cpp index bb05ecf84..8d141e5ae 100644 --- a/plugins/disk-mount/diskmountplugin.cpp +++ b/plugins/disk-mount/diskmountplugin.cpp @@ -9,7 +9,6 @@ DiskMountPlugin::DiskMountPlugin(QObject *parent) m_diskControlApplet(nullptr) { m_diskPluginItem->setVisible(false); - m_diskPluginItem->setDockDisplayMode(displayMode()); } const QString DiskMountPlugin::pluginName() const @@ -22,6 +21,7 @@ void DiskMountPlugin::init(PluginProxyInterface *proxyInter) m_proxyInter = proxyInter; initCompoments(); + m_diskPluginItem->setDockDisplayMode(displayMode()); } QWidget *DiskMountPlugin::itemWidget(const QString &itemKey) diff --git a/plugins/network/networkmanager.cpp b/plugins/network/networkmanager.cpp index 4c465c484..fb48c77f7 100644 --- a/plugins/network/networkmanager.cpp +++ b/plugins/network/networkmanager.cpp @@ -13,8 +13,8 @@ NetworkManager *NetworkManager::instance(QObject *parent) void NetworkManager::init() { - QTimer::singleShot(2000, this, &NetworkManager::reloadDevices); - QTimer::singleShot(2500, this, &NetworkManager::reloadActiveConnections); + QTimer::singleShot(100, this, &NetworkManager::reloadDevices); + QTimer::singleShot(150, this, &NetworkManager::reloadActiveConnections); } const NetworkDevice::NetworkTypes NetworkManager::states() const diff --git a/plugins/sound/soundapplet.cpp b/plugins/sound/soundapplet.cpp index 7815f45c0..6e72e6548 100644 --- a/plugins/sound/soundapplet.cpp +++ b/plugins/sound/soundapplet.cpp @@ -9,8 +9,10 @@ SoundApplet::SoundApplet(QWidget *parent) { m_centeralLayout = new QVBoxLayout; m_centeralWidget->setLayout(m_centeralLayout); + m_centeralWidget->setFixedWidth(WIDTH); setFixedWidth(WIDTH); + setWidget(m_centeralWidget); setFrameStyle(QFrame::NoFrame); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); diff --git a/plugins/system-tray/fashiontrayitem.cpp b/plugins/system-tray/fashiontrayitem.cpp index ed2d683fe..7acc4b0e5 100644 --- a/plugins/system-tray/fashiontrayitem.cpp +++ b/plugins/system-tray/fashiontrayitem.cpp @@ -40,7 +40,7 @@ void FashionTrayItem::paintEvent(QPaintEvent *e) { Q_UNUSED(e); - const QRect r = rect(); + const QRectF r = rect(); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); @@ -48,7 +48,7 @@ void FashionTrayItem::paintEvent(QPaintEvent *e) // draw circle QPen circlePen(QColor(0, 164, 233)); circlePen.setWidth(3); - const int circleSize = std::min(r.width(), r.height()) * 0.8 / 2 - 3; + const double circleSize = (0.8 * std::min(r.width(), r.height()) - 8) / 2; painter.setPen(circlePen); painter.drawEllipse(r.center(), circleSize, circleSize);