mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-03 00:15:21 +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 "pluginsiteminterface.h"
|
||||
#include "dockitemcontroller.h"
|
||||
#include "dockpluginloader.h"
|
||||
|
||||
#include <QDebug>
|
||||
#include <QDir>
|
||||
@ -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<PluginsItemInterface *>(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<PluginsItemInterface *>(pluginLoader->instance());
|
||||
if (!interface)
|
||||
{
|
||||
pluginLoader->unload();
|
||||
pluginLoader->deleteLater();
|
||||
return;
|
||||
}
|
||||
|
||||
interface->init(this);
|
||||
}
|
||||
|
||||
bool DockPluginsController::eventFilter(QObject *o, QEvent *e)
|
||||
{
|
||||
if (o != qApp)
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user