mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 17:33:05 +00:00
optimize plugin load order
Change-Id: Ib4d0fb0dfbe3d4cc83f2f898c98b07f79d84ca27
This commit is contained in:
parent
6825063b6a
commit
0acfa37a67
Notes:
Deepin Code Review
2016-08-02 07:14:21 +00:00
Verified+1: Anonymous Coward #1000004 Code-Review+2: 石博文 <sbw@sbw.so> Submitted-by: 石博文 <sbw@sbw.so> Submitted-at: Tue, 02 Aug 2016 07:14:21 +0000 Reviewed-on: https://cr.deepin.io/14853 Project: dde/dde-dock Branch: refs/heads/master
35
frame/controller/dockpluginloader.cpp
Normal file
35
frame/controller/dockpluginloader.cpp
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
#include "dockpluginloader.h"
|
||||||
|
#include "dockpluginscontroller.h"
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
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();
|
||||||
|
}
|
21
frame/controller/dockpluginloader.h
Normal file
21
frame/controller/dockpluginloader.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#ifndef DOCKPLUGINLOADER_H
|
||||||
|
#define DOCKPLUGINLOADER_H
|
||||||
|
|
||||||
|
#include <QThread>
|
||||||
|
|
||||||
|
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
|
@ -1,6 +1,7 @@
|
|||||||
#include "dockpluginscontroller.h"
|
#include "dockpluginscontroller.h"
|
||||||
#include "pluginsiteminterface.h"
|
#include "pluginsiteminterface.h"
|
||||||
#include "dockitemcontroller.h"
|
#include "dockitemcontroller.h"
|
||||||
|
#include "dockpluginloader.h"
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
@ -11,7 +12,7 @@ DockPluginsController::DockPluginsController(DockItemController *itemControllerI
|
|||||||
{
|
{
|
||||||
qApp->installEventFilter(this);
|
qApp->installEventFilter(this);
|
||||||
|
|
||||||
QMetaObject::invokeMethod(this, "loadPlugins", Qt::QueuedConnection);
|
QMetaObject::invokeMethod(this, "startLoader", Qt::QueuedConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
DockPluginsController::~DockPluginsController()
|
DockPluginsController::~DockPluginsController()
|
||||||
@ -63,41 +64,14 @@ void DockPluginsController::itemRemoved(PluginsItemInterface * const itemInter,
|
|||||||
// item->showPopupApplet();
|
// item->showPopupApplet();
|
||||||
//}
|
//}
|
||||||
|
|
||||||
void DockPluginsController::loadPlugins()
|
void DockPluginsController::startLoader()
|
||||||
{
|
{
|
||||||
// Q_ASSERT(m_pluginLoaderList.isEmpty());
|
DockPluginLoader *loader = new DockPluginLoader(this);
|
||||||
// Q_ASSERT(m_pluginsInterfaceList.isEmpty());
|
|
||||||
|
|
||||||
#ifdef QT_DEBUG
|
connect(loader, &DockPluginLoader::finished, loader, &DockPluginLoader::deleteLater, Qt::QueuedConnection);
|
||||||
const QDir pluginsDir("plugins");
|
connect(loader, &DockPluginLoader::pluginFounded, this, &DockPluginsController::loadPlugin, Qt::QueuedConnection);
|
||||||
#else
|
|
||||||
const QDir pluginsDir("../lib/dde-dock/plugins");
|
|
||||||
#endif
|
|
||||||
const QStringList plugins = pluginsDir.entryList(QDir::Files);
|
|
||||||
|
|
||||||
int pluginIndex = 0;
|
loader->start(QThread::LowestPriority);
|
||||||
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<PluginsItemInterface *>(pluginLoader->instance());
|
|
||||||
if (!interface)
|
|
||||||
{
|
|
||||||
pluginLoader->unload();
|
|
||||||
pluginLoader->deleteLater();
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// delay load
|
|
||||||
QTimer::singleShot(100 + (++pluginIndex) * 50, [=] {interface->init(this);});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DockPluginsController::displayModeChanged()
|
void DockPluginsController::displayModeChanged()
|
||||||
@ -114,6 +88,20 @@ void DockPluginsController::positionChanged()
|
|||||||
inter->positionChanged(position);
|
inter->positionChanged(position);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DockPluginsController::loadPlugin(const QString &pluginFile)
|
||||||
|
{
|
||||||
|
QPluginLoader *pluginLoader = new QPluginLoader(pluginFile, this);
|
||||||
|
PluginsItemInterface *interface = qobject_cast<PluginsItemInterface *>(pluginLoader->instance());
|
||||||
|
if (!interface)
|
||||||
|
{
|
||||||
|
pluginLoader->unload();
|
||||||
|
pluginLoader->deleteLater();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface->init(this);
|
||||||
|
}
|
||||||
|
|
||||||
bool DockPluginsController::eventFilter(QObject *o, QEvent *e)
|
bool DockPluginsController::eventFilter(QObject *o, QEvent *e)
|
||||||
{
|
{
|
||||||
if (o != qApp)
|
if (o != qApp)
|
||||||
|
@ -28,9 +28,10 @@ signals:
|
|||||||
void pluginItemRemoved(PluginsItem *pluginItem) const;
|
void pluginItemRemoved(PluginsItem *pluginItem) const;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void loadPlugins();
|
void startLoader();
|
||||||
void displayModeChanged();
|
void displayModeChanged();
|
||||||
void positionChanged();
|
void positionChanged();
|
||||||
|
void loadPlugin(const QString &pluginFile);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool eventFilter(QObject *o, QEvent *e);
|
bool eventFilter(QObject *o, QEvent *e);
|
||||||
|
@ -32,7 +32,8 @@ SOURCES += main.cpp \
|
|||||||
util/dockpopupwindow.cpp \
|
util/dockpopupwindow.cpp \
|
||||||
dbus/dbusxmousearea.cpp \
|
dbus/dbusxmousearea.cpp \
|
||||||
item/stretchitem.cpp \
|
item/stretchitem.cpp \
|
||||||
item/placeholderitem.cpp
|
item/placeholderitem.cpp \
|
||||||
|
controller/dockpluginloader.cpp
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
window/mainwindow.h \
|
window/mainwindow.h \
|
||||||
@ -56,7 +57,8 @@ HEADERS += \
|
|||||||
util/dockpopupwindow.h \
|
util/dockpopupwindow.h \
|
||||||
dbus/dbusxmousearea.h \
|
dbus/dbusxmousearea.h \
|
||||||
item/stretchitem.h \
|
item/stretchitem.h \
|
||||||
item/placeholderitem.h
|
item/placeholderitem.h \
|
||||||
|
controller/dockpluginloader.h
|
||||||
|
|
||||||
dbus_service.files += com.deepin.dde.dock.service
|
dbus_service.files += com.deepin.dde.dock.service
|
||||||
dbus_service.path = /usr/share/dbus-1/services
|
dbus_service.path = /usr/share/dbus-1/services
|
||||||
|
@ -9,7 +9,6 @@ DiskMountPlugin::DiskMountPlugin(QObject *parent)
|
|||||||
m_diskControlApplet(nullptr)
|
m_diskControlApplet(nullptr)
|
||||||
{
|
{
|
||||||
m_diskPluginItem->setVisible(false);
|
m_diskPluginItem->setVisible(false);
|
||||||
m_diskPluginItem->setDockDisplayMode(displayMode());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const QString DiskMountPlugin::pluginName() const
|
const QString DiskMountPlugin::pluginName() const
|
||||||
@ -22,6 +21,7 @@ void DiskMountPlugin::init(PluginProxyInterface *proxyInter)
|
|||||||
m_proxyInter = proxyInter;
|
m_proxyInter = proxyInter;
|
||||||
|
|
||||||
initCompoments();
|
initCompoments();
|
||||||
|
m_diskPluginItem->setDockDisplayMode(displayMode());
|
||||||
}
|
}
|
||||||
|
|
||||||
QWidget *DiskMountPlugin::itemWidget(const QString &itemKey)
|
QWidget *DiskMountPlugin::itemWidget(const QString &itemKey)
|
||||||
|
@ -13,8 +13,8 @@ NetworkManager *NetworkManager::instance(QObject *parent)
|
|||||||
|
|
||||||
void NetworkManager::init()
|
void NetworkManager::init()
|
||||||
{
|
{
|
||||||
QTimer::singleShot(2000, this, &NetworkManager::reloadDevices);
|
QTimer::singleShot(100, this, &NetworkManager::reloadDevices);
|
||||||
QTimer::singleShot(2500, this, &NetworkManager::reloadActiveConnections);
|
QTimer::singleShot(150, this, &NetworkManager::reloadActiveConnections);
|
||||||
}
|
}
|
||||||
|
|
||||||
const NetworkDevice::NetworkTypes NetworkManager::states() const
|
const NetworkDevice::NetworkTypes NetworkManager::states() const
|
||||||
|
@ -9,8 +9,10 @@ SoundApplet::SoundApplet(QWidget *parent)
|
|||||||
{
|
{
|
||||||
m_centeralLayout = new QVBoxLayout;
|
m_centeralLayout = new QVBoxLayout;
|
||||||
m_centeralWidget->setLayout(m_centeralLayout);
|
m_centeralWidget->setLayout(m_centeralLayout);
|
||||||
|
m_centeralWidget->setFixedWidth(WIDTH);
|
||||||
|
|
||||||
setFixedWidth(WIDTH);
|
setFixedWidth(WIDTH);
|
||||||
|
setWidget(m_centeralWidget);
|
||||||
setFrameStyle(QFrame::NoFrame);
|
setFrameStyle(QFrame::NoFrame);
|
||||||
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||||
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||||
|
@ -40,7 +40,7 @@ void FashionTrayItem::paintEvent(QPaintEvent *e)
|
|||||||
{
|
{
|
||||||
Q_UNUSED(e);
|
Q_UNUSED(e);
|
||||||
|
|
||||||
const QRect r = rect();
|
const QRectF r = rect();
|
||||||
|
|
||||||
QPainter painter(this);
|
QPainter painter(this);
|
||||||
painter.setRenderHint(QPainter::Antialiasing, true);
|
painter.setRenderHint(QPainter::Antialiasing, true);
|
||||||
@ -48,7 +48,7 @@ void FashionTrayItem::paintEvent(QPaintEvent *e)
|
|||||||
// draw circle
|
// draw circle
|
||||||
QPen circlePen(QColor(0, 164, 233));
|
QPen circlePen(QColor(0, 164, 233));
|
||||||
circlePen.setWidth(3);
|
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.setPen(circlePen);
|
||||||
painter.drawEllipse(r.center(), circleSize, circleSize);
|
painter.drawEllipse(r.center(), circleSize, circleSize);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user